@skbkontur/react-ui 4.21.0-next.2 → 4.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/cjs/components/Input/Input.d.ts +22 -5
- package/cjs/components/Input/Input.js +33 -14
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Input/Input.typings.d.ts +7 -0
- package/cjs/components/Input/Input.typings.js +1 -0
- package/cjs/components/Input/Input.typings.js.map +1 -0
- package/cjs/components/Input/index.d.ts +1 -0
- package/cjs/components/Input/index.js +2 -1
- package/cjs/components/Input/index.js.map +1 -1
- package/cjs/components/MaskedInput/MaskedInput.d.ts +24 -0
- package/cjs/components/MaskedInput/MaskedInput.js +78 -0
- package/cjs/components/MaskedInput/MaskedInput.js.map +1 -0
- package/cjs/components/MaskedInput/MaskedInput.md +21 -0
- package/cjs/components/MaskedInput/index.js.map +1 -0
- package/cjs/components/Token/Token.js +1 -1
- package/cjs/components/Token/Token.js.map +1 -1
- package/cjs/internal/{MaskedInput/MaskedInput.d.ts → InternalMaskedInput/InternalMaskedInput.d.ts} +8 -5
- package/cjs/internal/{MaskedInput/MaskedInput.js → InternalMaskedInput/InternalMaskedInput.js} +11 -8
- package/cjs/internal/InternalMaskedInput/InternalMaskedInput.js.map +1 -0
- package/cjs/internal/InternalMaskedInput/InternalMaskedInput.styles.js.map +1 -0
- package/cjs/internal/InternalMaskedInput/index.d.ts +1 -0
- package/cjs/internal/InternalMaskedInput/index.js +1 -0
- package/cjs/internal/InternalMaskedInput/index.js.map +1 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.d.ts +14 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +16 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js +52 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.helpers.js.map +1 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.js +196 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.js.map +1 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js +29 -0
- package/cjs/internal/MaskedInputElement/MaskedInputElement.styles.js.map +1 -0
- package/cjs/internal/MaskedInputElement/index.d.ts +1 -0
- package/cjs/internal/MaskedInputElement/index.js +1 -0
- package/cjs/internal/MaskedInputElement/index.js.map +1 -0
- package/cjs/lib/utils.d.ts +7 -0
- package/cjs/lib/utils.js +25 -2
- package/cjs/lib/utils.js.map +1 -1
- package/components/Input/Input/Input.js +14 -5
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +22 -5
- package/components/Input/Input.typings/Input.typings.js +1 -0
- package/components/Input/Input.typings/Input.typings.js.map +1 -0
- package/components/Input/Input.typings/package.json +6 -0
- package/components/Input/Input.typings.d.ts +7 -0
- package/components/Input/index/index.js +2 -1
- package/components/Input/index/index.js.map +1 -1
- package/components/Input/index.d.ts +1 -0
- package/components/MaskedInput/MaskedInput/MaskedInput.js +62 -0
- package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -0
- package/{internal → components}/MaskedInput/MaskedInput/package.json +1 -1
- package/components/MaskedInput/MaskedInput.d.ts +24 -0
- package/components/MaskedInput/MaskedInput.md +21 -0
- package/components/MaskedInput/index/index.js.map +1 -0
- package/{internal → components}/MaskedInput/index/package.json +1 -1
- package/{internal → components}/MaskedInput/package.json +1 -1
- package/components/Token/Token/Token.js +4 -3
- package/components/Token/Token/Token.js.map +1 -1
- package/internal/{MaskedInput/MaskedInput/MaskedInput.js → InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js} +13 -9
- package/internal/InternalMaskedInput/InternalMaskedInput/InternalMaskedInput.js.map +1 -0
- package/internal/InternalMaskedInput/InternalMaskedInput/package.json +6 -0
- package/internal/{MaskedInput/MaskedInput.d.ts → InternalMaskedInput/InternalMaskedInput.d.ts} +8 -5
- package/{cjs/internal/MaskedInput/MaskedInput.styles.js.map → internal/InternalMaskedInput/InternalMaskedInput.styles/InternalMaskedInput.styles.js.map} +1 -1
- package/internal/InternalMaskedInput/InternalMaskedInput.styles/package.json +6 -0
- package/internal/InternalMaskedInput/InternalMaskedInput.styles.d.ts +6 -0
- package/internal/InternalMaskedInput/index/index.js +1 -0
- package/internal/InternalMaskedInput/index/index.js.map +1 -0
- package/internal/InternalMaskedInput/index/package.json +6 -0
- package/internal/InternalMaskedInput/index.d.ts +1 -0
- package/internal/InternalMaskedInput/package.json +6 -0
- package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js +206 -0
- package/internal/MaskedInputElement/MaskedInputElement/MaskedInputElement.js.map +1 -0
- package/internal/MaskedInputElement/MaskedInputElement/package.json +6 -0
- package/internal/MaskedInputElement/MaskedInputElement.d.ts +14 -0
- package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js +43 -0
- package/internal/MaskedInputElement/MaskedInputElement.helpers/MaskedInputElement.helpers.js.map +1 -0
- package/internal/MaskedInputElement/MaskedInputElement.helpers/package.json +6 -0
- package/internal/MaskedInputElement/MaskedInputElement.helpers.d.ts +16 -0
- package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js +16 -0
- package/internal/MaskedInputElement/MaskedInputElement.styles/MaskedInputElement.styles.js.map +1 -0
- package/internal/MaskedInputElement/MaskedInputElement.styles/package.json +6 -0
- package/internal/MaskedInputElement/MaskedInputElement.styles.d.ts +6 -0
- package/internal/MaskedInputElement/index/index.js +1 -0
- package/internal/MaskedInputElement/index/index.js.map +1 -0
- package/internal/MaskedInputElement/index/package.json +6 -0
- package/internal/MaskedInputElement/index.d.ts +1 -0
- package/internal/MaskedInputElement/package.json +6 -0
- package/lib/utils/utils.js +27 -1
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +7 -0
- package/package.json +4 -3
- package/cjs/internal/MaskedInput/MaskedInput.js.map +0 -1
- package/cjs/internal/MaskedInput/index.js.map +0 -1
- package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +0 -1
- package/internal/MaskedInput/MaskedInput.styles/MaskedInput.styles.js.map +0 -1
- package/internal/MaskedInput/MaskedInput.styles/package.json +0 -6
- package/internal/MaskedInput/index/index.js.map +0 -1
- /package/cjs/{internal → components}/MaskedInput/index.d.ts +0 -0
- /package/cjs/{internal → components}/MaskedInput/index.js +0 -0
- /package/cjs/internal/{MaskedInput/MaskedInput.styles.d.ts → InternalMaskedInput/InternalMaskedInput.styles.d.ts} +0 -0
- /package/cjs/internal/{MaskedInput/MaskedInput.styles.js → InternalMaskedInput/InternalMaskedInput.styles.js} +0 -0
- /package/{internal/MaskedInput/MaskedInput.styles.d.ts → cjs/internal/MaskedInputElement/MaskedInputElement.styles.d.ts} +0 -0
- /package/{internal → components}/MaskedInput/index/index.js +0 -0
- /package/{internal → components}/MaskedInput/index.d.ts +0 -0
- /package/internal/{MaskedInput/MaskedInput.styles/MaskedInput.styles.js → InternalMaskedInput/InternalMaskedInput.styles/InternalMaskedInput.styles.js} +0 -0
package/cjs/lib/utils.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.emptyHandler = exports.delay = exports.CancelationError = void 0;exports.escapeRegExpSpecChars = escapeRegExpSpecChars;exports.
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.emptyHandler = exports.delay = exports.CancelationError = void 0;exports.escapeRegExpSpecChars = escapeRegExpSpecChars;exports.formatBytes = exports.extractDataProps = void 0;exports.getChildrenText = getChildrenText;exports.getRandomID = void 0;exports.isClassComponent = isClassComponent;exports.isExternalLink = void 0;exports.isFunction = isFunction;exports.isFunctionalComponent = isFunctionalComponent;exports.isInputLike = void 0;exports.isIntrinsicElement = isIntrinsicElement;exports.isReactUINode = exports.isReactUIComponent = exports.isNullable = exports.isNonNullable = exports.isKonturIcon = void 0;exports.isRefableElement = isRefableElement;exports.mergeRefs = mergeRefs;exports.startsWithOneOf = void 0;exports.taskWithDelay = taskWithDelay;var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
var _reactIs = require("react-is");
|
|
3
3
|
var _globalObject = require("@skbkontur/global-object");
|
|
4
4
|
|
|
@@ -222,4 +222,27 @@ isReactUIComponent('CurrencyInput');exports.isInputLike = isInputLike;
|
|
|
222
222
|
|
|
223
223
|
var isKonturIcon = function isKonturIcon(icon) {
|
|
224
224
|
return Object.prototype.hasOwnProperty.call(icon == null ? void 0 : icon.type, '__KONTUR_ICON__');
|
|
225
|
-
};
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Allows to get text of all nested children as a string
|
|
229
|
+
*
|
|
230
|
+
* @param children React's children
|
|
231
|
+
* @returns Nested child text or an empty string
|
|
232
|
+
*/exports.isKonturIcon = isKonturIcon;
|
|
233
|
+
function getChildrenText(children) {
|
|
234
|
+
if (typeof children === 'string' || typeof children === 'number') {
|
|
235
|
+
return children.toString();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
if (Array.isArray(children)) {
|
|
239
|
+
return children.map(function (entry) {return getChildrenText(entry);}).join('');
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
var nextChild = children == null ? void 0 : children.props.children;
|
|
243
|
+
if (!nextChild) {
|
|
244
|
+
return '';
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return getChildrenText(nextChild);
|
|
248
|
+
}
|
package/cjs/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["utils.ts"],"names":["delay","ms","Promise","resolve","globalObject","setTimeout","emptyHandler","CancelationError","code","Error","taskWithDelay","task","cancelationToken","reject","then","catch","isFunction","x","isFunctionalComponent","Component","Boolean","prototype","isReactComponent","isClassComponent","isIntrinsicElement","element","type","isRefableElement","escapeRegExpSpecChars","s","replace","getRandomID","Math","random","toString","slice","isExternalLink","link","RegExp","location","host","test","isReactUINode","componentName","node","React","isValidElement","Object","hasOwnProperty","call","__KONTUR_REACT_UI__","KB","UNITS","calculateDecimals","decimals","formatBytes","bytes","calculatedDecimals","i","floor","log2","formattedBytes","parseFloat","pow","toFixed","isNonNullable","value","undefined","isNullable","isReactUIComponent","name","child","mergeRefs","refs","forEach","ref","current","extractDataProps","props","dataProps","restWithoutDataProps","entries","map","startsWith","startsWithOneOf","searchKeys","inputString","keyIndex","findIndex","key","isInputLike","isKonturIcon","icon"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { isForwardRef } from 'react-is';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { CurrencyInputProps } from '../components/CurrencyInput';\nimport { PasswordInputProps } from '../components/PasswordInput';\nimport { InputProps } from '../components/Input';\nimport { AutocompleteProps } from '../components/Autocomplete';\nimport { FxInputProps } from '../components/FxInput';\n\n// NOTE: Copy-paste from @types/react\nexport type Defaultize<P, D> = P extends any\n ? string extends keyof P\n ? P\n : Pick<P, Exclude<keyof P, keyof D>> &\n Partial<Pick<P, Extract<keyof P, keyof D>>> &\n Partial<Pick<D, Exclude<keyof D, keyof P>>>\n : never;\n\nexport type DefaultizeProps<C, P> = C extends { defaultProps: infer D } ? Defaultize<P, D> : P;\n\nexport type AnyObject = Record<string, unknown>;\n\nexport const delay = (ms: number) => new Promise((resolve) => globalObject.setTimeout(resolve, ms));\n\nexport const emptyHandler = () => {\n /* noop */\n};\n\nexport class CancelationError extends Error {\n public code = 'CancelationError';\n}\n\nexport function taskWithDelay(task: () => void, ms: number) {\n let cancelationToken: () => void = () => null;\n\n new Promise((resolve, reject) => {\n cancelationToken = reject;\n globalObject.setTimeout(resolve, ms);\n })\n .then(task)\n .catch(() => null);\n\n return cancelationToken;\n}\n\nexport type FunctionWithParams<R = any> = (...args: any[]) => R;\nexport function isFunction<T>(x: T | FunctionWithParams): x is FunctionWithParams {\n return typeof x === 'function';\n}\n\nexport function isFunctionalComponent(Component: unknown): Component is React.ComponentType {\n return Boolean(typeof Component === 'function' && !(Component.prototype && Component.prototype.isReactComponent));\n}\n\nexport function isClassComponent(Component: unknown): Component is React.ComponentType {\n return Boolean(typeof Component === 'function' && Component.prototype && Component.prototype.isReactComponent);\n}\n\nexport function isIntrinsicElement(element: React.ReactElement): boolean {\n return typeof element.type === 'string';\n}\n\nexport function isRefableElement(element: React.ReactElement): boolean {\n return Boolean(isIntrinsicElement(element) || isClassComponent(element.type) || isForwardRef(element));\n}\n\nexport function escapeRegExpSpecChars(s: string): string {\n return s.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nexport const getRandomID = (): string => Math.random().toString(16).slice(2);\n\nexport const isExternalLink = (link: string): boolean => {\n return isBrowser(globalObject) && new RegExp(`^(https?:)?//(?!${globalObject.location.host})\\\\S+`, 'gi').test(link);\n};\n\n/**\n * Check if the given ReactNode is an element of the specified ReactUI component\n */\nexport const isReactUINode = (componentName: string, node: React.ReactNode): boolean => {\n if (React.isValidElement(node)) {\n return (\n Object.prototype.hasOwnProperty.call(node.type, '__KONTUR_REACT_UI__') &&\n // @ts-expect-error: React doesn't know about existence of __KONTUR_REACT_UI__.\n node.type.__KONTUR_REACT_UI__ === componentName\n );\n }\n\n return false;\n};\n\nconst KB = 1024;\nconst UNITS = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\nconst calculateDecimals = (decimals: number) => {\n if (decimals < 0) {\n return 0;\n }\n\n return 0;\n};\n\nexport const formatBytes = (bytes: number, decimals = 2): string | null => {\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n if (!bytes) {\n return null;\n }\n\n const calculatedDecimals = calculateDecimals(decimals);\n\n const i = Math.floor(Math.log2(bytes) / Math.log2(KB));\n const formattedBytes = parseFloat((bytes / Math.pow(KB, i)).toFixed(calculatedDecimals));\n\n return `${formattedBytes} ${UNITS[i]}`;\n};\n\n/**\n * Проверяет, не является ли переданный аргумент null или undefined и исключает типы null и undefined из типа аргумента\n *\n * @param value Значение, которое нужно проверить и исключить из него типы\n * @returns Возвращает true, если переданный аргумент не является null или undefined иначе false\n */\nexport const isNonNullable = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n\n/**\n * Checks if the value `null` or `undefined`.\n *\n * @param value Value to check for `null` and `undefined`.\n * @returns Returns `true` if `value` is `null` or `undefined`, else `false`.\n */\nexport const isNullable = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\n/**\n * Creates a function that checks if the given `child`\n * is an instance of some component specified by `name`.\n *\n * @param name Component name for which function will be created.\n * @returns A function that checks if the given `child` is an instance of the component specified by `name`.\n */\nexport const isReactUIComponent = <P = any>(name: string) => {\n return (child: React.ReactNode): child is React.ReactElement<P> => {\n // @ts-expect-error: Property `type` doesn't exist on type `React.ReactNode`, but exists on type `React.ReactElement` meanwhile `React.ReactElement` is not compatible with `React` `children` type.\n return child?.type?.__KONTUR_REACT_UI__ === name;\n };\n};\n\n/**\n * Merges two or more refs into one.\n *\n * @param refs Array of refs.\n * @returns A single ref composing all the refs passed.\n *\n * @example\n * const SomeComponent = forwardRef((props, ref) => {\n * const localRef = useRef();\n *\n * return <div ref={mergeRefs([localRef, ref])} />;\n * });\n */\nexport function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (isNonNullable(ref)) {\n return ((ref as React.MutableRefObject<T | null>).current = value);\n }\n });\n };\n}\n\n/**\n * Extracts all data attributes from props and returns them as well as props.\n *\n * @param props Props object to extract data attributes from.\n * @returns Separated data attributes and all other props.\n */\nexport const extractDataProps = <T>(props: T) => {\n const dataProps: Record<string, any> = {};\n const restWithoutDataProps: Record<string, any> = {};\n\n Object.entries(props).map(([name, value]) => {\n if (name.startsWith('data-')) {\n return (dataProps[name] = value);\n }\n\n return (restWithoutDataProps[name] = value);\n });\n\n return { dataProps, restWithoutDataProps };\n};\n\n/**\n * Basically `.startsWith` for arrays.\n *\n * @param searchKeys Array of strings to test against `inputString`.\n * @param inputString String on which search will be performed.\n * @returns `true` if `inputString` starts with one of keys, else `false`.\n */\nexport const startsWithOneOf = (searchKeys: string[], inputString: string) => {\n const keyIndex = searchKeys.findIndex((key) => {\n return inputString.startsWith(key);\n });\n\n return keyIndex >= 0;\n};\n\nexport const isInputLike =\n isReactUIComponent<InputProps>('Input') ||\n isReactUIComponent<FxInputProps>('FxInput') ||\n isReactUIComponent<AutocompleteProps>('Autocomplete') ||\n isReactUIComponent<PasswordInputProps>('PasswordInput') ||\n isReactUIComponent<CurrencyInputProps>('CurrencyInput');\n\nexport const isKonturIcon = (icon: React.ReactElement) => {\n return Object.prototype.hasOwnProperty.call(icon?.type, '__KONTUR_ICON__');\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["utils.ts"],"names":["delay","ms","Promise","resolve","globalObject","setTimeout","emptyHandler","CancelationError","code","Error","taskWithDelay","task","cancelationToken","reject","then","catch","isFunction","x","isFunctionalComponent","Component","Boolean","prototype","isReactComponent","isClassComponent","isIntrinsicElement","element","type","isRefableElement","escapeRegExpSpecChars","s","replace","getRandomID","Math","random","toString","slice","isExternalLink","link","RegExp","location","host","test","isReactUINode","componentName","node","React","isValidElement","Object","hasOwnProperty","call","__KONTUR_REACT_UI__","KB","UNITS","calculateDecimals","decimals","formatBytes","bytes","calculatedDecimals","i","floor","log2","formattedBytes","parseFloat","pow","toFixed","isNonNullable","value","undefined","isNullable","isReactUIComponent","name","child","mergeRefs","refs","forEach","ref","current","extractDataProps","props","dataProps","restWithoutDataProps","entries","map","startsWith","startsWithOneOf","searchKeys","inputString","keyIndex","findIndex","key","isInputLike","isKonturIcon","icon","getChildrenText","children","Array","isArray","entry","join","nextChild"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { isForwardRef } from 'react-is';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { CurrencyInputProps } from '../components/CurrencyInput';\nimport { PasswordInputProps } from '../components/PasswordInput';\nimport { InputProps } from '../components/Input';\nimport { AutocompleteProps } from '../components/Autocomplete';\nimport { FxInputProps } from '../components/FxInput';\n\n// NOTE: Copy-paste from @types/react\nexport type Defaultize<P, D> = P extends any\n ? string extends keyof P\n ? P\n : Pick<P, Exclude<keyof P, keyof D>> &\n Partial<Pick<P, Extract<keyof P, keyof D>>> &\n Partial<Pick<D, Exclude<keyof D, keyof P>>>\n : never;\n\nexport type DefaultizeProps<C, P> = C extends { defaultProps: infer D } ? Defaultize<P, D> : P;\n\nexport type AnyObject = Record<string, unknown>;\n\nexport const delay = (ms: number) => new Promise((resolve) => globalObject.setTimeout(resolve, ms));\n\nexport const emptyHandler = () => {\n /* noop */\n};\n\nexport class CancelationError extends Error {\n public code = 'CancelationError';\n}\n\nexport function taskWithDelay(task: () => void, ms: number) {\n let cancelationToken: () => void = () => null;\n\n new Promise((resolve, reject) => {\n cancelationToken = reject;\n globalObject.setTimeout(resolve, ms);\n })\n .then(task)\n .catch(() => null);\n\n return cancelationToken;\n}\n\nexport type FunctionWithParams<R = any> = (...args: any[]) => R;\nexport function isFunction<T>(x: T | FunctionWithParams): x is FunctionWithParams {\n return typeof x === 'function';\n}\n\nexport function isFunctionalComponent(Component: unknown): Component is React.ComponentType {\n return Boolean(typeof Component === 'function' && !(Component.prototype && Component.prototype.isReactComponent));\n}\n\nexport function isClassComponent(Component: unknown): Component is React.ComponentType {\n return Boolean(typeof Component === 'function' && Component.prototype && Component.prototype.isReactComponent);\n}\n\nexport function isIntrinsicElement(element: React.ReactElement): boolean {\n return typeof element.type === 'string';\n}\n\nexport function isRefableElement(element: React.ReactElement): boolean {\n return Boolean(isIntrinsicElement(element) || isClassComponent(element.type) || isForwardRef(element));\n}\n\nexport function escapeRegExpSpecChars(s: string): string {\n return s.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nexport const getRandomID = (): string => Math.random().toString(16).slice(2);\n\nexport const isExternalLink = (link: string): boolean => {\n return isBrowser(globalObject) && new RegExp(`^(https?:)?//(?!${globalObject.location.host})\\\\S+`, 'gi').test(link);\n};\n\n/**\n * Check if the given ReactNode is an element of the specified ReactUI component\n */\nexport const isReactUINode = (componentName: string, node: React.ReactNode): boolean => {\n if (React.isValidElement(node)) {\n return (\n Object.prototype.hasOwnProperty.call(node.type, '__KONTUR_REACT_UI__') &&\n // @ts-expect-error: React doesn't know about existence of __KONTUR_REACT_UI__.\n node.type.__KONTUR_REACT_UI__ === componentName\n );\n }\n\n return false;\n};\n\nconst KB = 1024;\nconst UNITS = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\nconst calculateDecimals = (decimals: number) => {\n if (decimals < 0) {\n return 0;\n }\n\n return 0;\n};\n\nexport const formatBytes = (bytes: number, decimals = 2): string | null => {\n if (bytes === 0) {\n return '0 Bytes';\n }\n\n if (!bytes) {\n return null;\n }\n\n const calculatedDecimals = calculateDecimals(decimals);\n\n const i = Math.floor(Math.log2(bytes) / Math.log2(KB));\n const formattedBytes = parseFloat((bytes / Math.pow(KB, i)).toFixed(calculatedDecimals));\n\n return `${formattedBytes} ${UNITS[i]}`;\n};\n\n/**\n * Проверяет, не является ли переданный аргумент null или undefined и исключает типы null и undefined из типа аргумента\n *\n * @param value Значение, которое нужно проверить и исключить из него типы\n * @returns Возвращает true, если переданный аргумент не является null или undefined иначе false\n */\nexport const isNonNullable = <T>(value: T): value is NonNullable<T> => {\n return value !== null && value !== undefined;\n};\n\n/**\n * Checks if the value `null` or `undefined`.\n *\n * @param value Value to check for `null` and `undefined`.\n * @returns Returns `true` if `value` is `null` or `undefined`, else `false`.\n */\nexport const isNullable = (value: unknown): value is null | undefined => {\n return value === null || value === undefined;\n};\n\n/**\n * Creates a function that checks if the given `child`\n * is an instance of some component specified by `name`.\n *\n * @param name Component name for which function will be created.\n * @returns A function that checks if the given `child` is an instance of the component specified by `name`.\n */\nexport const isReactUIComponent = <P = any>(name: string) => {\n return (child: React.ReactNode): child is React.ReactElement<P> => {\n // @ts-expect-error: Property `type` doesn't exist on type `React.ReactNode`, but exists on type `React.ReactElement` meanwhile `React.ReactElement` is not compatible with `React` `children` type.\n return child?.type?.__KONTUR_REACT_UI__ === name;\n };\n};\n\n/**\n * Merges two or more refs into one.\n *\n * @param refs Array of refs.\n * @returns A single ref composing all the refs passed.\n *\n * @example\n * const SomeComponent = forwardRef((props, ref) => {\n * const localRef = useRef();\n *\n * return <div ref={mergeRefs([localRef, ref])} />;\n * });\n */\nexport function mergeRefs<T = any>(refs: Array<React.MutableRefObject<T> | React.LegacyRef<T>>): React.RefCallback<T> {\n return (value) => {\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n return ref(value);\n } else if (isNonNullable(ref)) {\n return ((ref as React.MutableRefObject<T | null>).current = value);\n }\n });\n };\n}\n\n/**\n * Extracts all data attributes from props and returns them as well as props.\n *\n * @param props Props object to extract data attributes from.\n * @returns Separated data attributes and all other props.\n */\nexport const extractDataProps = <T>(props: T) => {\n const dataProps: Record<string, any> = {};\n const restWithoutDataProps: Record<string, any> = {};\n\n Object.entries(props).map(([name, value]) => {\n if (name.startsWith('data-')) {\n return (dataProps[name] = value);\n }\n\n return (restWithoutDataProps[name] = value);\n });\n\n return { dataProps, restWithoutDataProps };\n};\n\n/**\n * Basically `.startsWith` for arrays.\n *\n * @param searchKeys Array of strings to test against `inputString`.\n * @param inputString String on which search will be performed.\n * @returns `true` if `inputString` starts with one of keys, else `false`.\n */\nexport const startsWithOneOf = (searchKeys: string[], inputString: string) => {\n const keyIndex = searchKeys.findIndex((key) => {\n return inputString.startsWith(key);\n });\n\n return keyIndex >= 0;\n};\n\nexport const isInputLike =\n isReactUIComponent<InputProps>('Input') ||\n isReactUIComponent<FxInputProps>('FxInput') ||\n isReactUIComponent<AutocompleteProps>('Autocomplete') ||\n isReactUIComponent<PasswordInputProps>('PasswordInput') ||\n isReactUIComponent<CurrencyInputProps>('CurrencyInput');\n\nexport const isKonturIcon = (icon: React.ReactElement) => {\n return Object.prototype.hasOwnProperty.call(icon?.type, '__KONTUR_ICON__');\n};\n\n/**\n * Allows to get text of all nested children as a string\n *\n * @param children React's children\n * @returns Nested child text or an empty string\n */\nexport function getChildrenText(children: React.ReactNode): string {\n if (typeof children === 'string' || typeof children === 'number') {\n return children.toString();\n }\n\n if (Array.isArray(children)) {\n return children.map((entry) => getChildrenText(entry)).join('');\n }\n\n const nextChild = (children as React.ReactElement)?.props.children;\n if (!nextChild) {\n return '';\n }\n\n return getChildrenText(nextChild);\n}\n"]}
|
|
@@ -2,7 +2,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
3
|
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
4
4
|
import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
|
|
5
|
-
var _excluded = ["onMouseEnter", "onMouseLeave", "onMouseOver", "onKeyDown", "onKeyPress", "onValueChange", "width", "error", "role", "warning", "leftIcon", "rightIcon", "borderless", "value", "align", "type", "mask", "maskChar", "alwaysShowMask", "size", "placeholder", "selectAllOnFocus", "disabled", "onUnexpectedInput", "prefix", "suffix", "formatChars", "corners", "aria-describedby", "aria-controls", "aria-label"];
|
|
5
|
+
var _excluded = ["onMouseEnter", "onMouseLeave", "onMouseOver", "onKeyDown", "onKeyPress", "onValueChange", "width", "error", "role", "warning", "leftIcon", "rightIcon", "borderless", "value", "align", "type", "mask", "maskChar", "alwaysShowMask", "size", "placeholder", "selectAllOnFocus", "disabled", "onUnexpectedInput", "prefix", "suffix", "formatChars", "corners", "aria-describedby", "aria-controls", "aria-label", "element"];
|
|
6
6
|
|
|
7
7
|
var _class, _class2, _temp; // TODO: Enable this rule in functional components.
|
|
8
8
|
|
|
@@ -16,7 +16,7 @@ import { globalObject } from '@skbkontur/global-object';
|
|
|
16
16
|
import { isEdge, isIE11 } from "../../../lib/client";
|
|
17
17
|
import { isKeyBackspace, isKeyDelete, someKeys } from "../../../lib/events/keyboard/identifiers";
|
|
18
18
|
import { needsPolyfillPlaceholder } from "../../../lib/needsPolyfillPlaceholder";
|
|
19
|
-
import {
|
|
19
|
+
import { InternalMaskedInput } from "../../../internal/InternalMaskedInput";
|
|
20
20
|
import { ThemeContext } from "../../../lib/theming/ThemeContext";
|
|
21
21
|
import { CommonWrapper } from "../../../internal/CommonWrapper";
|
|
22
22
|
import { cx } from "../../../lib/theming/Emotion";
|
|
@@ -121,6 +121,14 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
123
|
|
|
124
|
+
_this.getInput = function (inputProps) {
|
|
125
|
+
if (_this.props.element) {
|
|
126
|
+
return /*#__PURE__*/React.cloneElement(_this.props.element, inputProps);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return _this.props.mask && !_this.canBeUsedWithMask ? _this.renderMaskedInput(inputProps, _this.props.mask) : /*#__PURE__*/React.createElement('input', inputProps);
|
|
130
|
+
};
|
|
131
|
+
|
|
124
132
|
_this.renderMain = function (props) {
|
|
125
133
|
var _cx, _cx2;
|
|
126
134
|
|
|
@@ -155,6 +163,7 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
155
163
|
ariaDescribedby = props['aria-describedby'],
|
|
156
164
|
ariaControls = props['aria-controls'],
|
|
157
165
|
ariaLabel = props['aria-label'],
|
|
166
|
+
element = props.element,
|
|
158
167
|
rest = _objectWithoutPropertiesLoose(props, _excluded);
|
|
159
168
|
|
|
160
169
|
var _this$state = _this.state,
|
|
@@ -191,7 +200,7 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
191
200
|
'aria-label': ariaLabel
|
|
192
201
|
});
|
|
193
202
|
|
|
194
|
-
var input =
|
|
203
|
+
var input = _this.getInput(inputProps);
|
|
195
204
|
|
|
196
205
|
if (isTheme2022(_this.theme)) {
|
|
197
206
|
return /*#__PURE__*/React.createElement(InputLayout, {
|
|
@@ -225,7 +234,7 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
225
234
|
};
|
|
226
235
|
|
|
227
236
|
_this.refInput = function (element) {
|
|
228
|
-
if (element instanceof
|
|
237
|
+
if (element instanceof InternalMaskedInput || element && 'input' in element) {
|
|
229
238
|
_this.input = element.input;
|
|
230
239
|
} else {
|
|
231
240
|
_this.input = element;
|
|
@@ -477,7 +486,7 @@ var Input = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$C
|
|
|
477
486
|
};
|
|
478
487
|
|
|
479
488
|
_proto.renderMaskedInput = function renderMaskedInput(inputProps, mask) {
|
|
480
|
-
return /*#__PURE__*/React.createElement(
|
|
489
|
+
return /*#__PURE__*/React.createElement(InternalMaskedInput, _extends({}, inputProps, {
|
|
481
490
|
mask: mask,
|
|
482
491
|
maskChar: this.props.maskChar,
|
|
483
492
|
alwaysShowMask: this.props.alwaysShowMask,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Input.tsx"],"names":["invariant","React","warning","globalObject","isEdge","isIE11","isKeyBackspace","isKeyDelete","someKeys","needsPolyfillPlaceholder","MaskedInput","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","isFunction","styles","InputLayout","PolyfillPlaceholder","inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","getProps","defaultProps","state","blinking","focused","selectAllId","input","selectAll","setSelectionRange","value","length","delaySelectAll","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","renderMain","props","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","leftIcon","rightIcon","borderless","align","mask","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","theme","getSizeClassName","focus","hovering","blink","focusFallback","warningFallback","errorFallback","style","inputProps","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","canBeUsedWithMask","renderMaskedInput","createElement","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","element","event","fieldIsEmpty","target","e","isDeleteKey","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","outputMaskError","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","blur","getNode","offsetWidth","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","useDefaultColor","iconFocus","iconDisabled","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React, { AriaAttributes, HTMLAttributes } from 'react';\nimport warning from 'warning';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { MaskedInput } from '../../internal/MaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isFunction } from '../../lib/utils';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './Input.styles';\nimport { InputLayout } from './InputLayout/InputLayout';\nimport { PolyfillPlaceholder } from './InputLayout/PolyfillPlaceholder';\n\nexport const inputTypes = ['password', 'text', 'number', 'tel', 'search', 'time', 'date', 'url', 'email'] as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type InputSize = SizeProp;\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = typeof inputTypes[number];\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport const selectionAllowedTypes: InputType[] = ['text', 'password', 'tel', 'search', 'url'];\nexport const selectionErrorMessage = (type: InputType, allowedTypes: InputType[] = selectionAllowedTypes) => {\n return `<Input />. Selection is not supported by the type \"${type}\". Types that support selection: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}. Reason: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange.`;\n};\n\nexport const maskForbiddenTypes: InputType[] = ['number', 'date', 'time'];\nexport const maskAllowedTypes: InputType[] = inputTypes.filter((type) => {\n return !maskForbiddenTypes.includes(type);\n});\nexport const maskErrorMessage = (type: InputType, allowedTypes: InputType[] = maskAllowedTypes) => {\n return `<Input />. Prop \"mask\" does not support type \"${type}\". Supported types: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}.`;\n};\n\nexport interface InputProps\n extends CommonProps,\n Pick<HTMLAttributes<unknown>, 'role'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /** Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url` */\n mask?: Nullable<string>;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /** Показывать символы маски */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: SizeProp;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Тип. Возможные значения: 'password' | 'text' | 'number' | 'tel' | 'search' | 'time' | 'date' | 'url' | 'email'\n * */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе. Работает с типами `text`, `password`, `tel`, `search`, `url`. [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange) */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает синим.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n /** @ignore */\n corners?: Partial<\n Pick<\n React.CSSProperties,\n 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'\n >\n >;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size' | 'type'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n type: 'text',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout: SafeTimer;\n private input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n private outputMaskError() {\n warning(!(this.props.mask && this.canBeUsedWithMask), maskErrorMessage(this.getProps().type));\n }\n\n public componentDidMount() {\n this.outputMaskError();\n }\n\n public componentDidUpdate(prevProps: Readonly<InputProps>) {\n if (this.props.type !== prevProps.type || this.props.mask !== prevProps.mask) {\n this.outputMaskError();\n }\n }\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = globalObject.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n // https://github.com/facebook/react/issues/7769\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n if (!selectionAllowedTypes.includes(this.getProps().type)) {\n warning(false, selectionErrorMessage(this.getProps().type));\n\n return;\n }\n\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.input) {\n this.focus();\n }\n if (this.props.mask && this.props.value && this.props.value?.length < this.props.mask.length) {\n globalObject.setTimeout(() => {\n this.input?.setSelectionRange(start, end);\n }, 150);\n } else {\n this.input?.setSelectionRange(start, end);\n }\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private get canBeUsedWithMask() {\n return maskForbiddenTypes.includes(this.getProps().type);\n }\n\n /**\n * Работает с типами `text`, `password`, `tel`, `search`, `url`\n * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)\n * @public\n */\n public selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n role,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n corners,\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused && !warning && !error,\n [styles.hovering(this.theme)]: !focused && !disabled && !warning && !error && !borderless,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n 'aria-controls': ariaControls,\n style: { width, ...corners },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n role,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type,\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n };\n\n const input =\n mask && !this.canBeUsedWithMask\n ? this.renderMaskedInput(inputProps, mask)\n : React.createElement('input', inputProps);\n\n if (isTheme2022(this.theme)) {\n return (\n <InputLayout\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n prefix={prefix}\n suffix={suffix}\n labelProps={labelProps}\n context={{ disabled: Boolean(disabled), focused, size }}\n >\n {input}\n {this.state.needsPolyfillPlaceholder && (\n <PolyfillPlaceholder\n isMaskVisible={this.isMaskVisible}\n value={value}\n defaultValue={this.props.defaultValue}\n align={align}\n >\n {placeholder}\n </PolyfillPlaceholder>\n )}\n </InputLayout>\n );\n }\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(\n inputProps: React.InputHTMLAttributes<HTMLInputElement> & {\n capture?: boolean;\n },\n mask: string,\n ) {\n return (\n <MaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = isFunction(icon) ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled()]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | MaskedInput | null) => {\n if (element instanceof MaskedInput) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Input.tsx"],"names":["invariant","React","warning","globalObject","isEdge","isIE11","isKeyBackspace","isKeyDelete","someKeys","needsPolyfillPlaceholder","InternalMaskedInput","ThemeContext","CommonWrapper","cx","rootNode","createPropsGetter","isTheme2022","isFunction","styles","InputLayout","PolyfillPlaceholder","inputTypes","selectionAllowedTypes","selectionErrorMessage","type","allowedTypes","map","i","join","maskForbiddenTypes","maskAllowedTypes","filter","includes","maskErrorMessage","InputDataTids","root","Input","getProps","defaultProps","state","blinking","focused","selectAllId","input","selectAll","setSelectionRange","value","length","delaySelectAll","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","cancelBlink","callback","blinkTimeout","clearTimeout","setState","getInput","inputProps","props","element","cloneElement","mask","canBeUsedWithMask","renderMaskedInput","createElement","renderMain","onMouseEnter","onMouseLeave","onMouseOver","onKeyDown","onKeyPress","onValueChange","width","error","role","leftIcon","rightIcon","borderless","align","maskChar","alwaysShowMask","size","placeholder","selectAllOnFocus","disabled","onUnexpectedInput","prefix","suffix","formatChars","corners","ariaDescribedby","ariaControls","ariaLabel","rest","labelProps","className","theme","getSizeClassName","focus","hovering","blink","focusFallback","warningFallback","errorFallback","style","inputFocus","inputDisabled","onChange","handleChange","onFocus","handleFocus","handleKeyDown","handleKeyPress","onBlur","handleBlur","textAlign","ref","refInput","isMaskVisible","undefined","Boolean","defaultValue","sideContainer","renderLeftIcon","renderPrefix","wrapper","renderPlaceholder","rightContainer","renderSuffix","renderRightIcon","event","fieldIsEmpty","target","e","isDeleteKey","currentTarget","repeat","handleUnexpectedInput","maxLength","handleMaskedValueChange","prefixDisabled","suffixDisabled","outputMaskError","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","blur","getNode","offsetWidth","setTimeout","start","end","Error","document","activeElement","render","setRootNode","getIconSizeClassname","right","rightIconLarge","leftIconLarge","rightIconMedium","leftIconMedium","rightIconSmall","leftIconSmall","renderIcon","icon","sizeClassName","iconNode","useDefaultColor","iconFocus","iconDisabled","placeholderDisabled","placeholderFocus","sizeLarge","sizeLargeFallback","sizeMedium","sizeMediumFallback","sizeSmall","sizeSmallFallback","Component","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport invariant from 'invariant';\nimport React, { AriaAttributes, ClassAttributes, HTMLAttributes, ReactElement } from 'react';\nimport warning from 'warning';\nimport { globalObject, SafeTimer } from '@skbkontur/global-object';\n\nimport { isEdge, isIE11 } from '../../lib/client';\nimport { isKeyBackspace, isKeyDelete, someKeys } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport { Nullable, Override } from '../../typings/utility-types';\nimport { InternalMaskedInput } from '../../internal/InternalMaskedInput';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { isFunction } from '../../lib/utils';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { InputElement, InputElementProps } from './Input.typings';\nimport { styles } from './Input.styles';\nimport { InputLayout } from './InputLayout/InputLayout';\nimport { PolyfillPlaceholder } from './InputLayout/PolyfillPlaceholder';\n\nexport const inputTypes = ['password', 'text', 'number', 'tel', 'search', 'time', 'date', 'url', 'email'] as const;\n\n/**\n * @deprecated use SizeProp\n */\nexport type InputSize = SizeProp;\nexport type InputAlign = 'left' | 'center' | 'right';\nexport type InputType = typeof inputTypes[number];\nexport type InputIconType = React.ReactNode | (() => React.ReactNode);\n\nexport const selectionAllowedTypes: InputType[] = ['text', 'password', 'tel', 'search', 'url'];\nexport const selectionErrorMessage = (type: InputType, allowedTypes: InputType[] = selectionAllowedTypes) => {\n return `<Input />. Selection is not supported by the type \"${type}\". Types that support selection: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}. Reason: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange.`;\n};\n\nexport const maskForbiddenTypes: InputType[] = ['number', 'date', 'time'];\nexport const maskAllowedTypes: InputType[] = inputTypes.filter((type) => {\n return !maskForbiddenTypes.includes(type);\n});\nexport const maskErrorMessage = (type: InputType, allowedTypes: InputType[] = maskAllowedTypes) => {\n return `<Input />. Prop \"mask\" does not support type \"${type}\". Supported types: ${allowedTypes\n .map((i) => `\"${i}\"`)\n .join(', ')}.`;\n};\n\nexport interface InputProps\n extends CommonProps,\n Pick<HTMLAttributes<unknown>, 'role'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label'>,\n Override<\n React.InputHTMLAttributes<HTMLInputElement>,\n {\n /**\n * Иконка слева\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n leftIcon?: InputIconType;\n /**\n * Иконка справа\n * Если `ReactNode` применяются дефолтные стили для иконки\n * Если `() => ReactNode` применяются только стили для позиционирование\n */\n rightIcon?: InputIconType;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n /** Режим прозрачной рамки */\n borderless?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n /**\n * Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url`\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n mask?: Nullable<string>;\n /**\n * Символ маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для задания маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /**\n * Показывать символы маски\n * @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput\n */\n alwaysShowMask?: boolean;\n /** Размер */\n size?: SizeProp;\n /** onValueChange */\n onValueChange?: (value: string) => void;\n /** Вызывается на label */\n onMouseEnter?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseLeave?: React.MouseEventHandler<HTMLLabelElement>;\n /** Вызывается на label */\n onMouseOver?: React.MouseEventHandler<HTMLLabelElement>;\n /**\n * Тип. Возможные значения: 'password' | 'text' | 'number' | 'tel' | 'search' | 'time' | 'date' | 'url' | 'email'\n * */\n type?: InputType;\n /** Значение */\n value?: string;\n capture?: boolean;\n\n /**\n * Префикс\n * `ReactNode` перед значением, но после иконки\n */\n prefix?: React.ReactNode;\n /**\n * Суффикс\n * `ReactNode` после значения, но перед правой иконкой\n */\n suffix?: React.ReactNode;\n /** Выделять введенное значение при фокусе. Работает с типами `text`, `password`, `tel`, `search`, `url`. [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange) */\n selectAllOnFocus?: boolean;\n /**\n * Обработчик неправильного ввода.\n * По-умолчанию, инпут вспыхивает акцентным цветом.\n * Если передан - вызывается переданный обработчик,\n * в таком случае вспыхивание можно вызвать\n * публичным методом инстанса `blink()`.\n *\n * @param value значение инпута.\n */\n onUnexpectedInput?: (value: string) => void;\n /** @ignore */\n corners?: Partial<\n Pick<\n React.CSSProperties,\n 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'\n >\n >;\n /**\n * Элемент заменяет нативный input.\n * Должен иметь пропы `InputElementProps` и тип `InputElement`\n * */\n element?: ReactElement<InputElementProps>;\n }\n > {}\n\nexport interface InputState {\n blinking: boolean;\n focused: boolean;\n needsPolyfillPlaceholder: boolean;\n}\n\nexport const InputDataTids = {\n root: 'Input__root',\n} as const;\n\ntype DefaultProps = Required<Pick<InputProps, 'size' | 'type'>>;\n\n/**\n * Интерфейс пропсов наследуется от `React.InputHTMLAttributes<HTMLInputElement>`.\n * Все пропсы кроме перечисленных, `className` и `style` передаются в `<input>`\n */\n@rootNode\nexport class Input extends React.Component<InputProps, InputState> {\n public static __KONTUR_REACT_UI__ = 'Input';\n\n public static defaultProps: DefaultProps = {\n size: 'small',\n type: 'text',\n };\n\n private getProps = createPropsGetter(Input.defaultProps);\n\n public state: InputState = {\n needsPolyfillPlaceholder,\n blinking: false,\n focused: false,\n };\n\n private selectAllId: number | null = null;\n private theme!: Theme;\n private blinkTimeout: SafeTimer;\n private input: HTMLInputElement | null = null;\n private setRootNode!: TSetRootNode;\n\n private outputMaskError() {\n warning(!(this.props.mask && this.canBeUsedWithMask), maskErrorMessage(this.getProps().type));\n }\n\n public componentDidMount() {\n this.outputMaskError();\n }\n\n public componentDidUpdate(prevProps: Readonly<InputProps>) {\n if (this.props.type !== prevProps.type || this.props.mask !== prevProps.mask) {\n this.outputMaskError();\n }\n }\n\n public componentWillUnmount() {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n }\n this.cancelDelayedSelectAll();\n }\n\n /**\n * @public\n */\n public focus() {\n invariant(this.input, 'Cannot call \"focus\" because Input is not mounted');\n this.input.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n invariant(this.input, 'Cannot call \"blur\" because Input is not mounted');\n this.input.blur();\n }\n\n /**\n * @public\n */\n public getNode() {\n return this.input;\n }\n\n /**\n * @public\n */\n public blink() {\n if (this.blinkTimeout) {\n this.cancelBlink(() => {\n // trigger reflow to restart animation\n // @see https://css-tricks.com/restart-css-animation/#article-header-id-0\n void (this.input && this.input.offsetWidth);\n this.blink();\n });\n return;\n }\n this.setState({ blinking: true }, () => {\n this.blinkTimeout = globalObject.setTimeout(this.cancelBlink, 150);\n });\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange(start: number, end: number) {\n // https://github.com/facebook/react/issues/7769\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange\n if (!selectionAllowedTypes.includes(this.getProps().type)) {\n warning(false, selectionErrorMessage(this.getProps().type));\n\n return;\n }\n\n if (!this.input) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.input) {\n this.focus();\n }\n if (this.props.mask && this.props.value && this.props.value?.length < this.props.mask.length) {\n globalObject.setTimeout(() => {\n this.input?.setSelectionRange(start, end);\n }, 150);\n } else {\n this.input?.setSelectionRange(start, end);\n }\n }\n\n public get isMaskVisible(): boolean {\n const { mask, alwaysShowMask } = this.props;\n const { focused } = this.state;\n return Boolean(mask && (focused || alwaysShowMask));\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private get canBeUsedWithMask() {\n return maskForbiddenTypes.includes(this.getProps().type);\n }\n\n /**\n * Работает с типами `text`, `password`, `tel`, `search`, `url`\n * [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)\n * @public\n */\n public selectAll = (): void => {\n if (this.input) {\n this.setSelectionRange(0, this.input.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private cancelBlink = (callback?: () => void): void => {\n if (this.blinkTimeout) {\n globalObject.clearTimeout(this.blinkTimeout);\n this.blinkTimeout = 0;\n if (this.state.blinking) {\n this.setState({ blinking: false }, callback);\n return;\n }\n }\n if (callback) {\n callback();\n }\n };\n\n private getInput = (inputProps: InputElementProps & ClassAttributes<HTMLInputElement>) => {\n if (this.props.element) {\n return React.cloneElement(this.props.element, inputProps);\n }\n\n return this.props.mask && !this.canBeUsedWithMask\n ? this.renderMaskedInput(inputProps, this.props.mask)\n : React.createElement('input', inputProps);\n };\n\n private renderMain = (props: CommonWrapperRestProps<InputProps>) => {\n const {\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n onKeyDown,\n onKeyPress,\n onValueChange,\n width,\n error,\n role,\n warning,\n leftIcon,\n rightIcon,\n borderless,\n value,\n align,\n type,\n mask,\n maskChar,\n alwaysShowMask,\n size,\n placeholder,\n selectAllOnFocus,\n disabled,\n onUnexpectedInput,\n prefix,\n suffix,\n formatChars,\n corners,\n 'aria-describedby': ariaDescribedby,\n 'aria-controls': ariaControls,\n 'aria-label': ariaLabel,\n element,\n ...rest\n } = props;\n\n const { blinking, focused } = this.state;\n\n const labelProps = {\n className: cx(styles.root(this.theme), this.getSizeClassName(), {\n [styles.focus(this.theme)]: focused && !warning && !error,\n [styles.hovering(this.theme)]: !focused && !disabled && !warning && !error && !borderless,\n [styles.blink(this.theme)]: blinking,\n [styles.borderless()]: borderless && !focused,\n [styles.disabled(this.theme)]: disabled,\n [styles.warning(this.theme)]: warning,\n [styles.error(this.theme)]: error,\n [styles.focusFallback(this.theme)]: focused && (isIE11 || isEdge),\n [styles.warningFallback(this.theme)]: warning && (isIE11 || isEdge),\n [styles.errorFallback(this.theme)]: error && (isIE11 || isEdge),\n }),\n 'aria-controls': ariaControls,\n style: { width, ...corners },\n onMouseEnter,\n onMouseLeave,\n onMouseOver,\n };\n\n const inputProps: InputElementProps & ClassAttributes<HTMLInputElement> = {\n ...rest,\n className: cx(styles.input(this.theme), {\n [styles.inputFocus(this.theme)]: focused,\n [styles.inputDisabled(this.theme)]: disabled,\n }),\n value,\n role,\n onChange: this.handleChange,\n onFocus: this.handleFocus,\n onKeyDown: this.handleKeyDown,\n onKeyPress: this.handleKeyPress,\n onBlur: this.handleBlur,\n style: { textAlign: align },\n ref: this.refInput,\n type,\n placeholder: !this.isMaskVisible && !needsPolyfillPlaceholder ? placeholder : undefined,\n disabled,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n };\n\n const input = this.getInput(inputProps);\n\n if (isTheme2022(this.theme)) {\n return (\n <InputLayout\n leftIcon={leftIcon}\n rightIcon={rightIcon}\n prefix={prefix}\n suffix={suffix}\n labelProps={labelProps}\n context={{ disabled: Boolean(disabled), focused, size }}\n >\n {input}\n {this.state.needsPolyfillPlaceholder && (\n <PolyfillPlaceholder\n isMaskVisible={this.isMaskVisible}\n value={value}\n defaultValue={this.props.defaultValue}\n align={align}\n >\n {placeholder}\n </PolyfillPlaceholder>\n )}\n </InputLayout>\n );\n }\n\n return (\n <label data-tid={InputDataTids.root} {...labelProps}>\n <span className={styles.sideContainer()}>\n {this.renderLeftIcon()}\n {this.renderPrefix()}\n </span>\n <span className={styles.wrapper()}>\n {input}\n {this.renderPlaceholder()}\n </span>\n <span className={cx(styles.sideContainer(), styles.rightContainer())}>\n {this.renderSuffix()}\n {this.renderRightIcon()}\n </span>\n </label>\n );\n };\n\n private renderMaskedInput(inputProps: React.InputHTMLAttributes<HTMLInputElement>, mask: string) {\n return (\n <InternalMaskedInput\n {...inputProps}\n mask={mask}\n maskChar={this.props.maskChar}\n alwaysShowMask={this.props.alwaysShowMask}\n formatChars={this.props.formatChars}\n onChange={this.props.onChange}\n onValueChange={this.handleMaskedValueChange}\n onUnexpectedInput={this.handleUnexpectedInput}\n />\n );\n }\n\n private getIconSizeClassname(right = false) {\n switch (this.getProps().size) {\n case 'large':\n return right ? styles.rightIconLarge(this.theme) : styles.leftIconLarge(this.theme);\n case 'medium':\n return right ? styles.rightIconMedium(this.theme) : styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return right ? styles.rightIconSmall(this.theme) : styles.leftIconSmall(this.theme);\n }\n }\n\n private renderLeftIcon() {\n return this.renderIcon(this.props.leftIcon, this.getIconSizeClassname());\n }\n\n private renderRightIcon() {\n return this.renderIcon(this.props.rightIcon, this.getIconSizeClassname(true));\n }\n\n private renderIcon(icon: InputIconType, sizeClassName: string) {\n if (!icon) {\n return null;\n }\n const { disabled } = this.props;\n const iconNode = isFunction(icon) ? icon() : icon;\n\n return (\n <span\n className={cx(styles.icon(), sizeClassName, styles.useDefaultColor(this.theme), {\n [styles.iconFocus(this.theme)]: this.state.focused,\n [styles.iconDisabled()]: disabled,\n })}\n >\n {iconNode}\n </span>\n );\n }\n\n private renderPlaceholder() {\n const { disabled } = this.props;\n const { focused } = this.state;\n let placeholder = null;\n\n if (\n this.state.needsPolyfillPlaceholder &&\n this.props.placeholder &&\n !this.isMaskVisible &&\n !this.props.value &&\n !this.props.defaultValue\n ) {\n placeholder = (\n <div\n className={cx(styles.placeholder(this.theme), {\n [styles.placeholderDisabled(this.theme)]: disabled,\n [styles.placeholderFocus(this.theme)]: focused,\n })}\n style={{ textAlign: this.props.align || 'inherit' }}\n >\n {this.props.placeholder}\n </div>\n );\n }\n\n return placeholder;\n }\n\n private getSizeClassName() {\n switch (this.getProps().size) {\n case 'large':\n return cx({\n [styles.sizeLarge(this.theme)]: true,\n [styles.sizeLargeFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'medium':\n return cx({\n [styles.sizeMedium(this.theme)]: true,\n [styles.sizeMediumFallback(this.theme)]: isIE11 || isEdge,\n });\n case 'small':\n default:\n return cx({\n [styles.sizeSmall(this.theme)]: true,\n [styles.sizeSmallFallback(this.theme)]: isIE11 || isEdge,\n });\n }\n }\n\n private refInput = (element: HTMLInputElement | InternalMaskedInput | InputElement | null) => {\n if (element instanceof InternalMaskedInput || (element && 'input' in element)) {\n this.input = element.input;\n } else {\n this.input = element;\n }\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = event.target.value === '';\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({\n focused: true,\n });\n\n if (this.props.selectAllOnFocus) {\n this.input && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n\n const isDeleteKey = someKeys(isKeyBackspace, isKeyDelete)(e);\n\n if (!e.currentTarget.value && isDeleteKey && !e.repeat) {\n this.handleUnexpectedInput();\n }\n };\n\n private handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (this.props.onKeyPress) {\n this.props.onKeyPress(event);\n }\n\n if (this.props.maxLength === event.currentTarget.value.length) {\n this.handleUnexpectedInput(event.currentTarget.value);\n }\n };\n\n private handleMaskedValueChange = (value: string) => {\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private handleUnexpectedInput = (value: string = this.props.value || '') => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(value);\n } else {\n this.blink();\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private renderPrefix = () => {\n const { prefix, disabled } = this.props;\n\n if (!prefix) {\n return null;\n }\n\n return (\n <span className={cx(styles.prefix(this.theme), { [styles.prefixDisabled(this.theme)]: disabled })}>{prefix}</span>\n );\n };\n\n private renderSuffix = () => {\n const { suffix, disabled } = this.props;\n\n if (!suffix) {\n return null;\n }\n\n return (\n <span className={cx(styles.suffix(this.theme), { [styles.suffixDisabled(this.theme)]: disabled })}>{suffix}</span>\n );\n };\n}\n"]}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React, { AriaAttributes, HTMLAttributes } from 'react';
|
|
1
|
+
import React, { AriaAttributes, HTMLAttributes, ReactElement } from 'react';
|
|
2
2
|
import { Nullable, Override } from '../../typings/utility-types';
|
|
3
3
|
import { CommonProps } from '../../internal/CommonWrapper';
|
|
4
4
|
import { SizeProp } from '../../lib/types/props';
|
|
5
|
+
import { InputElementProps } from './Input.typings';
|
|
5
6
|
export declare const inputTypes: readonly ["password", "text", "number", "tel", "search", "time", "date", "url", "email"];
|
|
6
7
|
/**
|
|
7
8
|
* @deprecated use SizeProp
|
|
@@ -40,16 +41,26 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
|
|
|
40
41
|
borderless?: boolean;
|
|
41
42
|
/** Выравнивание текста */
|
|
42
43
|
align?: InputAlign;
|
|
43
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Паттерн маски. Доступен для типов `text`, `password`, `email`, `tel`, `search`, `url`
|
|
46
|
+
* @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
|
|
47
|
+
*/
|
|
44
48
|
mask?: Nullable<string>;
|
|
45
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Символ маски
|
|
51
|
+
* @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
|
|
52
|
+
*/
|
|
46
53
|
maskChar?: Nullable<string>;
|
|
47
54
|
/**
|
|
48
55
|
* Словарь символов-регулярок для задания маски
|
|
56
|
+
* @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
|
|
49
57
|
* @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }
|
|
50
58
|
*/
|
|
51
59
|
formatChars?: Record<string, string>;
|
|
52
|
-
/**
|
|
60
|
+
/**
|
|
61
|
+
* Показывать символы маски
|
|
62
|
+
* @deprecated Со следующей мажорной версии Input перестанет поддерживать маску. Используйте MaskedInput
|
|
63
|
+
*/
|
|
53
64
|
alwaysShowMask?: boolean;
|
|
54
65
|
/** Размер */
|
|
55
66
|
size?: SizeProp;
|
|
@@ -82,7 +93,7 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
|
|
|
82
93
|
selectAllOnFocus?: boolean;
|
|
83
94
|
/**
|
|
84
95
|
* Обработчик неправильного ввода.
|
|
85
|
-
* По-умолчанию, инпут вспыхивает
|
|
96
|
+
* По-умолчанию, инпут вспыхивает акцентным цветом.
|
|
86
97
|
* Если передан - вызывается переданный обработчик,
|
|
87
98
|
* в таком случае вспыхивание можно вызвать
|
|
88
99
|
* публичным методом инстанса `blink()`.
|
|
@@ -92,6 +103,11 @@ export interface InputProps extends CommonProps, Pick<HTMLAttributes<unknown>, '
|
|
|
92
103
|
onUnexpectedInput?: (value: string) => void;
|
|
93
104
|
/** @ignore */
|
|
94
105
|
corners?: Partial<Pick<React.CSSProperties, 'borderTopRightRadius' | 'borderBottomRightRadius' | 'borderBottomLeftRadius' | 'borderTopLeftRadius'>>;
|
|
106
|
+
/**
|
|
107
|
+
* Элемент заменяет нативный input.
|
|
108
|
+
* Должен иметь пропы `InputElementProps` и тип `InputElement`
|
|
109
|
+
* */
|
|
110
|
+
element?: ReactElement<InputElementProps>;
|
|
95
111
|
}> {
|
|
96
112
|
}
|
|
97
113
|
export interface InputState {
|
|
@@ -155,6 +171,7 @@ export declare class Input extends React.Component<InputProps, InputState> {
|
|
|
155
171
|
private delaySelectAll;
|
|
156
172
|
private cancelDelayedSelectAll;
|
|
157
173
|
private cancelBlink;
|
|
174
|
+
private getInput;
|
|
158
175
|
private renderMain;
|
|
159
176
|
private renderMaskedInput;
|
|
160
177
|
private getIconSizeClassname;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export * from "../Input";
|
|
1
|
+
export * from "../Input";
|
|
2
|
+
export * from "../Input.typings";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAd","sourcesContent":["export * from './Input';\n"]}
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAd;AACA,cAAc,iBAAd","sourcesContent":["export * from './Input';\nexport * from './Input.typings';\n"]}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
|
+
var _excluded = ["mask", "maskChar", "formatChars", "alwaysShowMask", "placeholder"];
|
|
4
|
+
import React, { useImperativeHandle, useRef, useState } from 'react';
|
|
5
|
+
import { Input } from "../../Input";
|
|
6
|
+
import { MaskedInputElement } from "../../../internal/MaskedInputElement";
|
|
7
|
+
import { forwardRefAndName } from "../../../lib/forwardRefAndName";
|
|
8
|
+
/**
|
|
9
|
+
* Интерфейс пропсов наследуется от `Input`.
|
|
10
|
+
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export var MaskedInput = forwardRefAndName('MaskedInput', function MaskedInput(props, ref) {
|
|
14
|
+
var mask = props.mask,
|
|
15
|
+
maskChar = props.maskChar,
|
|
16
|
+
formatChars = props.formatChars,
|
|
17
|
+
alwaysShowMask = props.alwaysShowMask,
|
|
18
|
+
placeholder = props.placeholder,
|
|
19
|
+
inputProps = _objectWithoutPropertiesLoose(props, _excluded);
|
|
20
|
+
|
|
21
|
+
var _useState = useState(false),
|
|
22
|
+
focused = _useState[0],
|
|
23
|
+
setFocused = _useState[1];
|
|
24
|
+
|
|
25
|
+
var showPlaceholder = !(alwaysShowMask || focused);
|
|
26
|
+
var innerRef = useRef(null);
|
|
27
|
+
useImperativeHandle(ref, function () {
|
|
28
|
+
return innerRef.current;
|
|
29
|
+
});
|
|
30
|
+
return /*#__PURE__*/React.createElement(Input, _extends({
|
|
31
|
+
ref: innerRef
|
|
32
|
+
}, inputProps, {
|
|
33
|
+
placeholder: showPlaceholder ? placeholder : undefined,
|
|
34
|
+
onFocus: handleFocus,
|
|
35
|
+
onBlur: handleBlur,
|
|
36
|
+
element: /*#__PURE__*/React.createElement(MaskedInputElement, {
|
|
37
|
+
mask: mask,
|
|
38
|
+
maskChar: maskChar,
|
|
39
|
+
formatChars: formatChars,
|
|
40
|
+
alwaysShowMask: alwaysShowMask,
|
|
41
|
+
onUnexpectedInput: handleUnexpectedInput
|
|
42
|
+
})
|
|
43
|
+
}));
|
|
44
|
+
|
|
45
|
+
function handleUnexpectedInput(value) {
|
|
46
|
+
if (props.onUnexpectedInput) {
|
|
47
|
+
props.onUnexpectedInput(value);
|
|
48
|
+
} else if (innerRef.current) {
|
|
49
|
+
innerRef.current.blink();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function handleFocus(e) {
|
|
54
|
+
setFocused(true);
|
|
55
|
+
props.onFocus && props.onFocus(e);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function handleBlur(e) {
|
|
59
|
+
setFocused(false);
|
|
60
|
+
props.onBlur && props.onBlur(e);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["MaskedInput.tsx"],"names":["React","useImperativeHandle","useRef","useState","Input","MaskedInputElement","forwardRefAndName","MaskedInput","props","ref","mask","maskChar","formatChars","alwaysShowMask","placeholder","inputProps","focused","setFocused","showPlaceholder","innerRef","current","undefined","handleFocus","handleBlur","handleUnexpectedInput","value","onUnexpectedInput","blink","e","onFocus","onBlur"],"mappings":"mPAAA,OAAOA,KAAP,IAAqBC,mBAArB,EAA0CC,MAA1C,EAAkDC,QAAlD,QAAkE,OAAlE;;AAEA,SAASC,KAAT,QAA6C,UAA7C;;AAEA,SAASC,kBAAT,QAAmC,mCAAnC;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;;;;;;;;;;;;;;;;;;;;;AAsBA;AACA;AACA;AACA;AACA,OAAO,IAAMC,WAAW,GAAGD,iBAAiB;AAC1C,aAD0C;AAE1C,SAASC,WAAT,CAAqBC,KAArB,EAA8CC,GAA9C,EAAsE;AACpE,MAAQC,IAAR,GAAoFF,KAApF,CAAQE,IAAR,CAAcC,QAAd,GAAoFH,KAApF,CAAcG,QAAd,CAAwBC,WAAxB,GAAoFJ,KAApF,CAAwBI,WAAxB,CAAqCC,cAArC,GAAoFL,KAApF,CAAqCK,cAArC,CAAqDC,WAArD,GAAoFN,KAApF,CAAqDM,WAArD,CAAqEC,UAArE,iCAAoFP,KAApF;AACA,kBAA8BL,QAAQ,CAAC,KAAD,CAAtC,CAAOa,OAAP,gBAAgBC,UAAhB;AACA,MAAMC,eAAe,GAAG,EAAEL,cAAc,IAAIG,OAApB,CAAxB;AACA,MAAMG,QAAQ,GAAGjB,MAAM,CAAQ,IAAR,CAAvB;;AAEAD,EAAAA,mBAAmB,CAACQ,GAAD,EAAM,oBAAMU,QAAQ,CAACC,OAAf,EAAN,CAAnB;;AAEA;AACE,wBAAC,KAAD;AACE,MAAA,GAAG,EAAED,QADP;AAEMJ,IAAAA,UAFN;AAGE,MAAA,WAAW,EAAEG,eAAe,GAAGJ,WAAH,GAAiBO,SAH/C;AAIE,MAAA,OAAO,EAAEC,WAJX;AAKE,MAAA,MAAM,EAAEC,UALV;AAME,MAAA,OAAO;AACL,0BAAC,kBAAD;AACE,QAAA,IAAI,EAAEb,IADR;AAEE,QAAA,QAAQ,EAAEC,QAFZ;AAGE,QAAA,WAAW,EAAEC,WAHf;AAIE,QAAA,cAAc,EAAEC,cAJlB;AAKE,QAAA,iBAAiB,EAAEW,qBALrB,GAPJ,IADF;;;;;;AAmBA,WAASA,qBAAT,CAA+BC,KAA/B,EAA8C;AAC5C,QAAIjB,KAAK,CAACkB,iBAAV,EAA6B;AAC3BlB,MAAAA,KAAK,CAACkB,iBAAN,CAAwBD,KAAxB;AACD,KAFD,MAEO,IAAIN,QAAQ,CAACC,OAAb,EAAsB;AAC3BD,MAAAA,QAAQ,CAACC,OAAT,CAAiBO,KAAjB;AACD;AACF;;AAED,WAASL,WAAT,CAAqBM,CAArB,EAA4D;AAC1DX,IAAAA,UAAU,CAAC,IAAD,CAAV;AACAT,IAAAA,KAAK,CAACqB,OAAN,IAAiBrB,KAAK,CAACqB,OAAN,CAAcD,CAAd,CAAjB;AACD;;AAED,WAASL,UAAT,CAAoBK,CAApB,EAA2D;AACzDX,IAAAA,UAAU,CAAC,KAAD,CAAV;AACAT,IAAAA,KAAK,CAACsB,MAAN,IAAgBtB,KAAK,CAACsB,MAAN,CAAaF,CAAb,CAAhB;AACD;AACF,CA9CyC,CAArC","sourcesContent":["import React, { Ref, useImperativeHandle, useRef, useState } from 'react';\n\nimport { Input, InputProps, InputType } from '../Input';\nimport { Nullable } from '../../typings/utility-types';\nimport { MaskedInputElement } from '../../internal/MaskedInputElement';\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\n\nexport interface MaskedProps {\n /** Паттерн маски */\n mask: string;\n /** Символ маски */\n maskChar?: Nullable<string>;\n /**\n * Словарь символов-регулярок для маски\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }\n */\n formatChars?: Record<string, string>;\n /** Показывать символы маски */\n alwaysShowMask?: boolean;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'mask' | 'maxLength' | 'type' | 'element'> {\n type?: MaskInputType;\n}\n\n/**\n * Интерфейс пропсов наследуется от `Input`.\n * Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const { mask, maskChar, formatChars, alwaysShowMask, placeholder, ...inputProps } = props;\n const [focused, setFocused] = useState(false);\n const showPlaceholder = !(alwaysShowMask || focused);\n const innerRef = useRef<Input>(null);\n\n useImperativeHandle(ref, () => innerRef.current);\n\n return (\n <Input\n ref={innerRef}\n {...inputProps}\n placeholder={showPlaceholder ? placeholder : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n element={\n <MaskedInputElement\n mask={mask}\n maskChar={maskChar}\n formatChars={formatChars}\n alwaysShowMask={alwaysShowMask}\n onUnexpectedInput={handleUnexpectedInput}\n />\n }\n />\n );\n\n function handleUnexpectedInput(value: string) {\n if (props.onUnexpectedInput) {\n props.onUnexpectedInput(value);\n } else if (innerRef.current) {\n innerRef.current.blink();\n }\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus && props.onFocus(e);\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur && props.onBlur(e);\n }\n },\n);\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Input, InputProps, InputType } from '../Input';
|
|
2
|
+
import { Nullable } from '../../typings/utility-types';
|
|
3
|
+
export interface MaskedProps {
|
|
4
|
+
/** Паттерн маски */
|
|
5
|
+
mask: string;
|
|
6
|
+
/** Символ маски */
|
|
7
|
+
maskChar?: Nullable<string>;
|
|
8
|
+
/**
|
|
9
|
+
* Словарь символов-регулярок для маски
|
|
10
|
+
* @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' }
|
|
11
|
+
*/
|
|
12
|
+
formatChars?: Record<string, string>;
|
|
13
|
+
/** Показывать символы маски */
|
|
14
|
+
alwaysShowMask?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;
|
|
17
|
+
export interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'mask' | 'maxLength' | 'type' | 'element'> {
|
|
18
|
+
type?: MaskInputType;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Интерфейс пропсов наследуется от `Input`.
|
|
22
|
+
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
23
|
+
*/
|
|
24
|
+
export declare const MaskedInput: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<Input, MaskedInputProps> & Record<never, never>;
|