@skbkontur/react-ui 5.4.4 → 5.4.6
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 +23 -0
- package/cjs/components/MaskedInput/MaskedInput.d.ts +20 -17
- package/cjs/components/MaskedInput/MaskedInput.js +6 -3
- package/cjs/components/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/components/MenuItem/MenuItem.styles.js +3 -3
- package/cjs/components/MenuItem/MenuItem.styles.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +7 -1
- package/cjs/components/TokenInput/TokenInput.js +22 -2
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/cjs/internal/themes/BasicTheme.d.ts +1 -0
- package/cjs/internal/themes/BasicTheme.js +2 -1
- package/cjs/internal/themes/BasicTheme.js.map +1 -1
- package/components/MaskedInput/MaskedInput/MaskedInput.js +1 -3
- package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/components/MaskedInput/MaskedInput.d.ts +20 -17
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js +1 -1
- package/components/MenuItem/MenuItem.styles/MenuItem.styles.js.map +1 -1
- package/components/TokenInput/TokenInput/TokenInput.js +14 -1
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +7 -1
- package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
- package/internal/themes/BasicTheme/BasicTheme.js +1 -0
- package/internal/themes/BasicTheme/BasicTheme.js.map +1 -1
- package/internal/themes/BasicTheme.d.ts +1 -0
- package/package.json +1 -1
|
@@ -26,9 +26,7 @@ export var getSafeMaskInputType = function getSafeMaskInputType(type) {
|
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
-
/**
|
|
30
|
-
* Интерфейс пропсов наследуется от `Input`.
|
|
31
|
-
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
29
|
+
/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.
|
|
32
30
|
*/
|
|
33
31
|
export var MaskedInput = forwardRefAndName('MaskedInput', function MaskedInput(props, ref) {
|
|
34
32
|
var mask = props.mask,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useImperativeHandle","useRef","useState","useEffect","useContext","forwardRefAndName","cx","Input","isKeyBackspace","isKeyDelete","ThemeContext","globalClasses","styles","getDefinitions","getMaskChar","ColorableInputElement","FixedIMaskInput","getSafeMaskInputType","type","MaskedInput","props","ref","mask","maskChar","formatChars","_props$alwaysShowMask","alwaysShowMask","_props$colored","colored","_props$imaskProps","imaskProps","customIMaskProps","_props$unmask","unmask","onValueChange","onUnexpectedInput","onChange","onBeforePasteValue","element","className","maxLength","inputProps","_objectWithoutPropertiesLoose","_excluded","theme","inputRef","_useState","focused","setFocused","prevValue","value","String","defaultValue","prevSelectionStart","current","Object","assign","selectAll","_inputRef$current","_inputRef$current2","focus","delaySelectAll","_inputRef$current3","input","selectionStart","getCompatibleIMaskProps","uiFontGlobalClassesRoot","createElement","_extends","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","onKeyDown","handleKeyDown","onPaste","handlePaste","root","showOnFocus","onAccept","handleAccept","event","_event$clipboardData$","_event$clipboardData","preventDefault","clipboardData","getData","replace","placeholderChar","definitions","eager","overwrite","lazy","disabled","_len","arguments","length","args","Array","_key","e","_e$currentTarget","currentTarget","handleUnexpectedInput","_inputRef$current4","selectAllOnFocus","_inputRef$current5","blink","bind","undefined","_e$currentTarget2","selectionEnd"],"sources":["MaskedInput.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef, useState, useEffect, useContext } from 'react';\nimport type { IMaskInputProps } from '@skbkontur/react-imask';\nimport type { Ref } from 'react';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { InputProps, InputType } from '../Input';\nimport { Input } from '../Input';\nimport { isKeyBackspace, isKeyDelete } from '../../lib/events/keyboard/identifiers';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\n\nimport { globalClasses, styles } from './MaskedInput.styles';\nimport { getDefinitions, getMaskChar } from './MaskedInput.helpers';\nimport { ColorableInputElement } from './ColorableInputElement';\nimport { FixedIMaskInput } from './FixedIMaskInput';\n\nexport type MaskedInputOnBeforePasteValue = (value: string) => string;\n\nexport interface MaskedProps {\n /** Паттерн маски */\n mask: string;\n\n /** Устанавливает символ маски\n * @default _ */\n maskChar?: string;\n\n /** Задает словарь символов-регулярок для задания маски.\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' } */\n formatChars?: Record<string, string>;\n\n /** Включает показ символов маски.\n * @default false */\n alwaysShowMask?: boolean;\n\n /** Задает обработчик неправильного ввода.\n * Вторым агрументом будет передан метод вспыхивания акцентным цветом.\n *\n * Если обработчик не задан, то инпут вспыхивает по-умолчанию.\n * @param value значение инпута.\n * @param blink вспыхнуть акцентным цвтетом.\n */\n onUnexpectedInput?: (value: string, blink: () => void) => void;\n\n /** Задает обработчик вставки значения в инпут.\n * В value будет передано значение из буфера обмена.\n * Возвращаемое значение будет использовано как значение инпута.\n * Используется для фильтрации значения при вставке из буфера обмена.\n * @param value значение вставки.\n */\n onBeforePasteValue?: MaskedInputOnBeforePasteValue;\n\n /** Убирает из value символы, не введённые пользователем\n * @default false */\n unmask?: boolean;\n\n /** Раскрашивает символы маски.\n * @default true\n * @ignore */\n colored?: boolean;\n\n /** Задает пропы для компонента `IMaskInput`. Необходимы для юнит-тестов\n * @ignore */\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport const getSafeMaskInputType = (type?: InputType): MaskInputType | undefined => {\n if (!type) {\n return type;\n }\n\n switch (type) {\n case 'number':\n case 'date':\n case 'time':\n case 'password':\n return 'text';\n default:\n return type;\n }\n};\n\nexport interface MaskedInputProps\n extends MaskedProps,\n Omit<\n InputProps,\n 'showClearIcon' | 'mask' | 'maxLength' | 'type' | 'alwaysShowMask' | 'onUnexpectedInput' | 'maskChar'\n > {\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 {\n mask,\n maskChar,\n formatChars,\n alwaysShowMask = false,\n colored = true,\n imaskProps: customIMaskProps = {},\n unmask = false,\n onValueChange,\n onUnexpectedInput,\n onChange,\n onBeforePasteValue,\n element,\n className,\n // @ts-expect-error: могут передавать игнорируя ошибку\n maxLength,\n ...inputProps\n } = props;\n const theme = useContext(ThemeContext);\n\n const inputRef = useRef<Input>(null);\n\n const [focused, setFocused] = useState(false);\n const prevValue = useRef<string>(props.value || String(props.defaultValue) || '');\n const prevSelectionStart = useRef<number | null>(null);\n\n useImperativeHandle(\n ref,\n () =>\n inputRef.current &&\n Object.assign(inputRef.current, {\n selectAll: () => {\n inputRef.current?.focus();\n inputRef.current?.delaySelectAll();\n },\n }),\n [],\n );\n\n useEffect(() => {\n // Для корректной работы onUnexpectedInput надо знать предыдущий value,\n // но imask при монтировании не вызывает onAccept, если value невалиден или laze=false.\n // Поэтому актуальный value при монтировании надо получать вручную\n if (inputRef.current?.input) {\n prevValue.current = inputRef.current.input.value;\n prevSelectionStart.current = inputRef.current.input.selectionStart;\n }\n }, []);\n\n const imaskProps = getCompatibleIMaskProps();\n\n // TODO: Удалить в следующем мажоре\n // Селекторы могут ожидать определённый порядок классов\n const uiFontGlobalClassesRoot = 'react-ui-ui-font-root';\n\n return (\n <Input\n ref={inputRef}\n {...inputProps}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n className={cx(globalClasses.root, uiFontGlobalClassesRoot, className, styles.root(theme))}\n element={\n colored ? (\n <ColorableInputElement showOnFocus={false} alwaysShowMask={alwaysShowMask}>\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n </ColorableInputElement>\n ) : (\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n )\n }\n />\n );\n\n function handlePaste(event: React.ClipboardEvent<HTMLInputElement>) {\n if (onBeforePasteValue && onValueChange) {\n event.preventDefault();\n onValueChange?.(onBeforePasteValue(event.clipboardData?.getData('text') ?? ''));\n }\n\n props.onPaste?.(event);\n }\n\n function getCompatibleIMaskProps(): IMaskInputProps<HTMLInputElement> {\n return {\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(maskChar),\n definitions: getDefinitions(formatChars),\n // FIXME: Должно быть eager=true, но в imask ломается удаление по delete\n eager: 'append',\n overwrite: 'shift',\n lazy: !alwaysShowMask && (props.disabled || !focused),\n unmask,\n ...customIMaskProps,\n } as IMaskInputProps<HTMLInputElement>;\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n const [value, , e] = args;\n\n // Метод onAccept может вызываться при монтировании, если не задан проп defaultValue.\n // Но нативный input никогда не вызывает onChange при монтировании.\n // Наше событие onValueChange в Input вывается в тех же случаях, что и нативный onChange,\n // поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента e.\n // Он содержит нативное событие, вызвавшее изменение.\n e && onValueChange?.(value);\n !e && (prevValue.current = value);\n }\n\n /**\n * Отслеживаем неожиданные нажатия\n * handleAccept не вызывается когда значение с маской не меняется\n * Сначала вызывается handleAccept, затем handleInput\n */\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const { value, selectionStart } = e.currentTarget;\n\n // При вводе неожиданных символов или удалении каретка может перепрыгивать фиксированные символы.\n // Такие случаи не расцениваем как неожиданный ввод, т.к. пользователь может намеренно их вводить.\n if (prevValue.current === value && selectionStart === prevSelectionStart.current) {\n handleUnexpectedInput(value);\n }\n prevValue.current = value;\n prevSelectionStart.current = selectionStart;\n\n props.onInput?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus?.(e);\n\n // Если value из пропов отличается от value, которое получит input после обработки,\n // то imask будет ставить каретку за последним валидным символом.\n props.selectAllOnFocus && inputRef.current?.delaySelectAll();\n }\n\n function handleUnexpectedInput(value: string) {\n const blink = inputRef.current?.blink.bind(inputRef.current) || (() => undefined);\n onUnexpectedInput ? onUnexpectedInput(value, blink) : blink();\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur?.(e);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const { value, selectionStart, selectionEnd } = e.currentTarget;\n\n if (\n (isKeyBackspace(e) && selectionStart === 0 && selectionEnd === 0) ||\n (isKeyDelete(e) && prevSelectionStart.current === value.length)\n ) {\n // Случаи, когда нажатие клавиш не тригерит `onInput`\n handleUnexpectedInput(value);\n prevValue.current = e.currentTarget.value;\n }\n prevSelectionStart.current = selectionStart;\n\n props.onKeyDown?.(e);\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useImperativeHandle","useRef","useState","useEffect","useContext","forwardRefAndName","cx","Input","isKeyBackspace","isKeyDelete","ThemeContext","globalClasses","styles","getDefinitions","getMaskChar","ColorableInputElement","FixedIMaskInput","getSafeMaskInputType","type","MaskedInput","props","ref","mask","maskChar","formatChars","_props$alwaysShowMask","alwaysShowMask","_props$colored","colored","_props$imaskProps","imaskProps","customIMaskProps","_props$unmask","unmask","onValueChange","onUnexpectedInput","onChange","onBeforePasteValue","element","className","maxLength","inputProps","_objectWithoutPropertiesLoose","_excluded","theme","inputRef","_useState","focused","setFocused","prevValue","value","String","defaultValue","prevSelectionStart","current","Object","assign","selectAll","_inputRef$current","_inputRef$current2","focus","delaySelectAll","_inputRef$current3","input","selectionStart","getCompatibleIMaskProps","uiFontGlobalClassesRoot","createElement","_extends","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","onKeyDown","handleKeyDown","onPaste","handlePaste","root","showOnFocus","onAccept","handleAccept","event","_event$clipboardData$","_event$clipboardData","preventDefault","clipboardData","getData","replace","placeholderChar","definitions","eager","overwrite","lazy","disabled","_len","arguments","length","args","Array","_key","e","_e$currentTarget","currentTarget","handleUnexpectedInput","_inputRef$current4","selectAllOnFocus","_inputRef$current5","blink","bind","undefined","_e$currentTarget2","selectionEnd"],"sources":["MaskedInput.tsx"],"sourcesContent":["import React, { useImperativeHandle, useRef, useState, useEffect, useContext } from 'react';\nimport type { IMaskInputProps } from '@skbkontur/react-imask';\nimport type { Ref } from 'react';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { InputProps, InputType } from '../Input';\nimport { Input } from '../Input';\nimport { isKeyBackspace, isKeyDelete } from '../../lib/events/keyboard/identifiers';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\n\nimport { globalClasses, styles } from './MaskedInput.styles';\nimport { getDefinitions, getMaskChar } from './MaskedInput.helpers';\nimport { ColorableInputElement } from './ColorableInputElement';\nimport { FixedIMaskInput } from './FixedIMaskInput';\n\nexport type MaskedInputOnBeforePasteValue = (value: string) => string;\n\nexport interface MaskedProps {\n /** Шаблон ввода, определяющий допустимые символы. */\n mask: string;\n\n /** Плейсхолдер, который отображается на месте ещё не введённых пользователем символов.\n * @default _ */\n maskChar?: string;\n\n /** Словарь правил для настройки маски, где\n * Ключ — символ для использования в маске\n * Значение — регулярка-правило\n * @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' } */\n formatChars?: Record<string, string>;\n\n /** Всегда показывать символы маски, независимо от фокуса в поле.\n * @default false */\n alwaysShowMask?: boolean;\n\n /** Событие некорректного ввода.\n * Вторым аргументом передаётся метод вспыхивания рамки поля.\n *\n * Если обработчик не задан, то при событии рамка всегда вспыхивает.\n *\n * @param value значение поля\n * @param blink метод вспыхивания рамки поля\n */\n onUnexpectedInput?: (value: string, blink: () => void) => void;\n\n /**\n * Событие перед вставкой текста в поле.\n * Вызывается с аргументом value — текст из буфера.\n *\n * Обработчик должен вернуть текст — он попадёт в поле.\n *\n * @param value значение вставки.\n */\n onBeforePasteValue?: MaskedInputOnBeforePasteValue;\n\n /** Убирает из value символы маски, которые пользователь не вводил.\n * @default false */\n unmask?: boolean;\n\n /** Раскрашивает символы маски.\n * @default true\n * @ignore */\n colored?: boolean;\n\n /** Задает пропы для компонента `IMaskInput`. Необходимы для юнит-тестов\n * @ignore */\n imaskProps?: IMaskInputProps<HTMLInputElement>;\n}\n\nexport type MaskInputType = Exclude<InputType, 'number' | 'date' | 'time' | 'password'>;\n\nexport const getSafeMaskInputType = (type?: InputType): MaskInputType | undefined => {\n if (!type) {\n return type;\n }\n\n switch (type) {\n case 'number':\n case 'date':\n case 'time':\n case 'password':\n return 'text';\n default:\n return type;\n }\n};\n\nexport interface MaskedInputProps\n extends MaskedProps,\n Omit<\n InputProps,\n 'showClearIcon' | 'mask' | 'maxLength' | 'type' | 'alwaysShowMask' | 'onUnexpectedInput' | 'maskChar'\n > {\n type?: MaskInputType;\n}\n\n/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.\n */\nexport const MaskedInput = forwardRefAndName(\n 'MaskedInput',\n function MaskedInput(props: MaskedInputProps, ref: Ref<Input | null>) {\n const {\n mask,\n maskChar,\n formatChars,\n alwaysShowMask = false,\n colored = true,\n imaskProps: customIMaskProps = {},\n unmask = false,\n onValueChange,\n onUnexpectedInput,\n onChange,\n onBeforePasteValue,\n element,\n className,\n // @ts-expect-error: могут передавать игнорируя ошибку\n maxLength,\n ...inputProps\n } = props;\n const theme = useContext(ThemeContext);\n\n const inputRef = useRef<Input>(null);\n\n const [focused, setFocused] = useState(false);\n const prevValue = useRef<string>(props.value || String(props.defaultValue) || '');\n const prevSelectionStart = useRef<number | null>(null);\n\n useImperativeHandle(\n ref,\n () =>\n inputRef.current &&\n Object.assign(inputRef.current, {\n selectAll: () => {\n inputRef.current?.focus();\n inputRef.current?.delaySelectAll();\n },\n }),\n [],\n );\n\n useEffect(() => {\n // Для корректной работы onUnexpectedInput надо знать предыдущий value,\n // но imask при монтировании не вызывает onAccept, если value невалиден или laze=false.\n // Поэтому актуальный value при монтировании надо получать вручную\n if (inputRef.current?.input) {\n prevValue.current = inputRef.current.input.value;\n prevSelectionStart.current = inputRef.current.input.selectionStart;\n }\n }, []);\n\n const imaskProps = getCompatibleIMaskProps();\n\n // TODO: Удалить в следующем мажоре\n // Селекторы могут ожидать определённый порядок классов\n const uiFontGlobalClassesRoot = 'react-ui-ui-font-root';\n\n return (\n <Input\n ref={inputRef}\n {...inputProps}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n className={cx(globalClasses.root, uiFontGlobalClassesRoot, className, styles.root(theme))}\n element={\n colored ? (\n <ColorableInputElement showOnFocus={false} alwaysShowMask={alwaysShowMask}>\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n </ColorableInputElement>\n ) : (\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n )\n }\n />\n );\n\n function handlePaste(event: React.ClipboardEvent<HTMLInputElement>) {\n if (onBeforePasteValue && onValueChange) {\n event.preventDefault();\n onValueChange?.(onBeforePasteValue(event.clipboardData?.getData('text') ?? ''));\n }\n\n props.onPaste?.(event);\n }\n\n function getCompatibleIMaskProps(): IMaskInputProps<HTMLInputElement> {\n return {\n mask: mask.replace(/0/g, '{\\\\0}') as any,\n placeholderChar: getMaskChar(maskChar),\n definitions: getDefinitions(formatChars),\n // FIXME: Должно быть eager=true, но в imask ломается удаление по delete\n eager: 'append',\n overwrite: 'shift',\n lazy: !alwaysShowMask && (props.disabled || !focused),\n unmask,\n ...customIMaskProps,\n } as IMaskInputProps<HTMLInputElement>;\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n const [value, , e] = args;\n\n // Метод onAccept может вызываться при монтировании, если не задан проп defaultValue.\n // Но нативный input никогда не вызывает onChange при монтировании.\n // Наше событие onValueChange в Input вывается в тех же случаях, что и нативный onChange,\n // поэтому чтобы сохранить консинстентность будем ориентироваться на наличие аргумента e.\n // Он содержит нативное событие, вызвавшее изменение.\n e && onValueChange?.(value);\n !e && (prevValue.current = value);\n }\n\n /**\n * Отслеживаем неожиданные нажатия\n * handleAccept не вызывается когда значение с маской не меняется\n * Сначала вызывается handleAccept, затем handleInput\n */\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const { value, selectionStart } = e.currentTarget;\n\n // При вводе неожиданных символов или удалении каретка может перепрыгивать фиксированные символы.\n // Такие случаи не расцениваем как неожиданный ввод, т.к. пользователь может намеренно их вводить.\n if (prevValue.current === value && selectionStart === prevSelectionStart.current) {\n handleUnexpectedInput(value);\n }\n prevValue.current = value;\n prevSelectionStart.current = selectionStart;\n\n props.onInput?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(true);\n props.onFocus?.(e);\n\n // Если value из пропов отличается от value, которое получит input после обработки,\n // то imask будет ставить каретку за последним валидным символом.\n props.selectAllOnFocus && inputRef.current?.delaySelectAll();\n }\n\n function handleUnexpectedInput(value: string) {\n const blink = inputRef.current?.blink.bind(inputRef.current) || (() => undefined);\n onUnexpectedInput ? onUnexpectedInput(value, blink) : blink();\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n setFocused(false);\n props.onBlur?.(e);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const { value, selectionStart, selectionEnd } = e.currentTarget;\n\n if (\n (isKeyBackspace(e) && selectionStart === 0 && selectionEnd === 0) ||\n (isKeyDelete(e) && prevSelectionStart.current === value.length)\n ) {\n // Случаи, когда нажатие клавиш не тригерит `onInput`\n handleUnexpectedInput(value);\n prevValue.current = e.currentTarget.value;\n }\n prevSelectionStart.current = selectionStart;\n\n props.onKeyDown?.(e);\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,33 +3,38 @@ import type { InputProps, InputType } from '../Input';
|
|
|
3
3
|
import { Input } from '../Input';
|
|
4
4
|
export type MaskedInputOnBeforePasteValue = (value: string) => string;
|
|
5
5
|
export interface MaskedProps {
|
|
6
|
-
/**
|
|
6
|
+
/** Шаблон ввода, определяющий допустимые символы. */
|
|
7
7
|
mask: string;
|
|
8
|
-
/**
|
|
8
|
+
/** Плейсхолдер, который отображается на месте ещё не введённых пользователем символов.
|
|
9
9
|
* @default _ */
|
|
10
10
|
maskChar?: string;
|
|
11
|
-
/**
|
|
11
|
+
/** Словарь правил для настройки маски, где
|
|
12
|
+
* Ключ — символ для использования в маске
|
|
13
|
+
* Значение — регулярка-правило
|
|
12
14
|
* @default { '9': '[0-9]', 'a': '[A-Za-z]', '*': '[A-Za-z0-9]' } */
|
|
13
15
|
formatChars?: Record<string, string>;
|
|
14
|
-
/**
|
|
16
|
+
/** Всегда показывать символы маски, независимо от фокуса в поле.
|
|
15
17
|
* @default false */
|
|
16
18
|
alwaysShowMask?: boolean;
|
|
17
|
-
/**
|
|
18
|
-
* Вторым
|
|
19
|
+
/** Событие некорректного ввода.
|
|
20
|
+
* Вторым аргументом передаётся метод вспыхивания рамки поля.
|
|
19
21
|
*
|
|
20
|
-
* Если обработчик не задан, то
|
|
21
|
-
*
|
|
22
|
-
* @param
|
|
22
|
+
* Если обработчик не задан, то при событии рамка всегда вспыхивает.
|
|
23
|
+
*
|
|
24
|
+
* @param value значение поля
|
|
25
|
+
* @param blink метод вспыхивания рамки поля
|
|
23
26
|
*/
|
|
24
27
|
onUnexpectedInput?: (value: string, blink: () => void) => void;
|
|
25
|
-
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
28
|
+
/**
|
|
29
|
+
* Событие перед вставкой текста в поле.
|
|
30
|
+
* Вызывается с аргументом value — текст из буфера.
|
|
31
|
+
*
|
|
32
|
+
* Обработчик должен вернуть текст — он попадёт в поле.
|
|
33
|
+
*
|
|
29
34
|
* @param value значение вставки.
|
|
30
35
|
*/
|
|
31
36
|
onBeforePasteValue?: MaskedInputOnBeforePasteValue;
|
|
32
|
-
/** Убирает из value
|
|
37
|
+
/** Убирает из value символы маски, которые пользователь не вводил.
|
|
33
38
|
* @default false */
|
|
34
39
|
unmask?: boolean;
|
|
35
40
|
/** Раскрашивает символы маски.
|
|
@@ -45,8 +50,6 @@ export declare const getSafeMaskInputType: (type?: InputType) => MaskInputType |
|
|
|
45
50
|
export interface MaskedInputProps extends MaskedProps, Omit<InputProps, 'showClearIcon' | 'mask' | 'maxLength' | 'type' | 'alwaysShowMask' | 'onUnexpectedInput' | 'maskChar'> {
|
|
46
51
|
type?: MaskInputType;
|
|
47
52
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Интерфейс пропсов наследуется от `Input`.
|
|
50
|
-
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
53
|
+
/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.
|
|
51
54
|
*/
|
|
52
55
|
export declare const MaskedInput: import("../../lib/forwardRefAndName").ReactUIComponentWithRef<Input, MaskedInputProps> & Record<never, never>;
|
|
@@ -61,7 +61,7 @@ export var styles = memoizeStyle({
|
|
|
61
61
|
return css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteralLoose(["\n color: ", ";\n opacity: ", ";\n white-space: normal;\n padding-top: 4px;\n "])), t.menuItemCommentColor, t.menuItemCommentOpacity);
|
|
62
62
|
},
|
|
63
63
|
commentHover: function commentHover(t) {
|
|
64
|
-
return css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteralLoose(["\n color: ", ";\n opacity:
|
|
64
|
+
return css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteralLoose(["\n color: ", ";\n opacity: ", ";\n "])), t.menuItemCommentColorHover, t.menuItemCommentOpacityHover);
|
|
65
65
|
},
|
|
66
66
|
icon: function icon() {
|
|
67
67
|
return css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteralLoose(["\n display: inline-block;\n position: absolute;\n transform: translateY(0px); // icon shifts one pixel up in firefox on medium size without this property\n "])));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["css","memoizeStyle","resetButton","iconSizeMixin","menuItemSizeMixin","withIconSizeMixin","getMenuItemPaddings","_ref","menuItemPaddingX","menuItemPaddingY","paddingX","paddingY","styles","root","t","_templateObject","_taggedTemplateLiteralLoose","menuItemDisplay","menuItemTextColor","menuItemBorderRadius","menuItemGap","rootSmall","_templateObject2","menuItemPaddingXSmall","menuItemPaddingYSmall","menuItemLineHeightSmall","menuItemFontSizeSmall","rootMedium","_templateObject3","menuItemPaddingXMedium","menuItemPaddingYMedium","menuItemLineHeightMedium","menuItemFontSizeMedium","rootLarge","_templateObject4","menuItemPaddingXLarge","menuItemPaddingYLarge","menuItemLineHeightLarge","menuItemFontSizeLarge","rootMobile","_templateObject5","menuItemFontSizeMobile","menuItemLineHeightMobile","menuItemPaddingMobile","hover","_templateObject6","menuItemHoverBg","menuItemHoverColor","selected","_templateObject7","menuItemSelectedBg","disabled","_templateObject8","menuItemDisabledBg","menuItemDisabledColor","nonSelectable","_templateObject9","link","_templateObject10","menuItemLinkColor","loose","_templateObject11","withIconSmall","_templateObject12","menuItemPaddingForIconSmall","withIconMedium","_templateObject13","menuItemPaddingForIconMedium","withIconLarge","_templateObject14","menuItemPaddingForIconLarge","comment","_templateObject15","menuItemCommentColor","menuItemCommentOpacity","commentHover","_templateObject16","menuItemCommentColorHover","icon","_templateObject17","iconSmall","_templateObject18","menuItemIconWidthSmall","iconMedium","_templateObject19","menuItemIconWidthMedium","iconLarge","_templateObject20","menuItemIconWidthLarge","mobileContentWithIcon","_templateObject21"],"sources":["MenuItem.styles.ts"],"sourcesContent":["import type { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nimport { iconSizeMixin, menuItemSizeMixin, withIconSizeMixin } from './MenuItem.mixins';\n\nexport const getMenuItemPaddings = ({\n menuItemPaddingX,\n menuItemPaddingY,\n}: Record<'menuItemPaddingX' | 'menuItemPaddingY', string>) => {\n const paddingX = menuItemPaddingX;\n const paddingY = menuItemPaddingY;\n\n return { paddingX, paddingY };\n};\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n ${resetButton()};\n\n cursor: pointer;\n display: ${t.menuItemDisplay};\n position: relative;\n text-decoration: none;\n color: ${t.menuItemTextColor};\n border-radius: ${t.menuItemBorderRadius};\n\n button& {\n min-width: 100%;\n }\n\n &:nth-last-of-type(n + 2) {\n margin-bottom: ${t.menuItemGap};\n }\n `;\n },\n\n rootSmall(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXSmall,\n t.menuItemPaddingYSmall,\n t.menuItemLineHeightSmall,\n t.menuItemFontSizeSmall,\n )};\n `;\n },\n rootMedium(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXMedium,\n t.menuItemPaddingYMedium,\n t.menuItemLineHeightMedium,\n t.menuItemFontSizeMedium,\n )};\n `;\n },\n rootLarge(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXLarge,\n t.menuItemPaddingYLarge,\n t.menuItemLineHeightLarge,\n t.menuItemFontSizeLarge,\n )};\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n font-size: ${t.menuItemFontSizeMobile};\n line-height: ${t.menuItemLineHeightMobile};\n padding: ${t.menuItemPaddingMobile};\n `;\n },\n\n hover(t: Theme) {\n // Color with !important in purpose to override `a:hover`\n return css`\n background: ${t.menuItemHoverBg} !important;\n color: ${t.menuItemHoverColor} !important;\n `;\n },\n selected(t: Theme) {\n return css`\n background: ${t.menuItemSelectedBg} !important;\n `;\n },\n disabled(t: Theme) {\n return css`\n background: ${t.menuItemDisabledBg};\n color: ${t.menuItemDisabledColor};\n cursor: default;\n `;\n },\n nonSelectable() {\n return css`\n cursor: default;\n `;\n },\n link(t: Theme) {\n return css`\n color: ${t.menuItemLinkColor};\n `;\n },\n loose() {\n return css`\n padding-left: 15px;\n `;\n },\n withIconSmall(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconSmall)}\n `;\n },\n withIconMedium(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconMedium)}\n `;\n },\n withIconLarge(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconLarge)}\n `;\n },\n comment(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n opacity: ${t.menuItemCommentOpacity};\n white-space: normal;\n padding-top: 4px;\n `;\n },\n commentHover(t: Theme) {\n return css`\n color: ${t.menuItemCommentColorHover};\n opacity:
|
|
1
|
+
{"version":3,"names":["css","memoizeStyle","resetButton","iconSizeMixin","menuItemSizeMixin","withIconSizeMixin","getMenuItemPaddings","_ref","menuItemPaddingX","menuItemPaddingY","paddingX","paddingY","styles","root","t","_templateObject","_taggedTemplateLiteralLoose","menuItemDisplay","menuItemTextColor","menuItemBorderRadius","menuItemGap","rootSmall","_templateObject2","menuItemPaddingXSmall","menuItemPaddingYSmall","menuItemLineHeightSmall","menuItemFontSizeSmall","rootMedium","_templateObject3","menuItemPaddingXMedium","menuItemPaddingYMedium","menuItemLineHeightMedium","menuItemFontSizeMedium","rootLarge","_templateObject4","menuItemPaddingXLarge","menuItemPaddingYLarge","menuItemLineHeightLarge","menuItemFontSizeLarge","rootMobile","_templateObject5","menuItemFontSizeMobile","menuItemLineHeightMobile","menuItemPaddingMobile","hover","_templateObject6","menuItemHoverBg","menuItemHoverColor","selected","_templateObject7","menuItemSelectedBg","disabled","_templateObject8","menuItemDisabledBg","menuItemDisabledColor","nonSelectable","_templateObject9","link","_templateObject10","menuItemLinkColor","loose","_templateObject11","withIconSmall","_templateObject12","menuItemPaddingForIconSmall","withIconMedium","_templateObject13","menuItemPaddingForIconMedium","withIconLarge","_templateObject14","menuItemPaddingForIconLarge","comment","_templateObject15","menuItemCommentColor","menuItemCommentOpacity","commentHover","_templateObject16","menuItemCommentColorHover","menuItemCommentOpacityHover","icon","_templateObject17","iconSmall","_templateObject18","menuItemIconWidthSmall","iconMedium","_templateObject19","menuItemIconWidthMedium","iconLarge","_templateObject20","menuItemIconWidthLarge","mobileContentWithIcon","_templateObject21"],"sources":["MenuItem.styles.ts"],"sourcesContent":["import type { Theme } from '../../lib/theming/Theme';\nimport { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { resetButton } from '../../lib/styles/Mixins';\n\nimport { iconSizeMixin, menuItemSizeMixin, withIconSizeMixin } from './MenuItem.mixins';\n\nexport const getMenuItemPaddings = ({\n menuItemPaddingX,\n menuItemPaddingY,\n}: Record<'menuItemPaddingX' | 'menuItemPaddingY', string>) => {\n const paddingX = menuItemPaddingX;\n const paddingY = menuItemPaddingY;\n\n return { paddingX, paddingY };\n};\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n ${resetButton()};\n\n cursor: pointer;\n display: ${t.menuItemDisplay};\n position: relative;\n text-decoration: none;\n color: ${t.menuItemTextColor};\n border-radius: ${t.menuItemBorderRadius};\n\n button& {\n min-width: 100%;\n }\n\n &:nth-last-of-type(n + 2) {\n margin-bottom: ${t.menuItemGap};\n }\n `;\n },\n\n rootSmall(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXSmall,\n t.menuItemPaddingYSmall,\n t.menuItemLineHeightSmall,\n t.menuItemFontSizeSmall,\n )};\n `;\n },\n rootMedium(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXMedium,\n t.menuItemPaddingYMedium,\n t.menuItemLineHeightMedium,\n t.menuItemFontSizeMedium,\n )};\n `;\n },\n rootLarge(t: Theme) {\n return css`\n ${menuItemSizeMixin(\n t.menuItemPaddingXLarge,\n t.menuItemPaddingYLarge,\n t.menuItemLineHeightLarge,\n t.menuItemFontSizeLarge,\n )};\n `;\n },\n\n rootMobile(t: Theme) {\n return css`\n font-size: ${t.menuItemFontSizeMobile};\n line-height: ${t.menuItemLineHeightMobile};\n padding: ${t.menuItemPaddingMobile};\n `;\n },\n\n hover(t: Theme) {\n // Color with !important in purpose to override `a:hover`\n return css`\n background: ${t.menuItemHoverBg} !important;\n color: ${t.menuItemHoverColor} !important;\n `;\n },\n selected(t: Theme) {\n return css`\n background: ${t.menuItemSelectedBg} !important;\n `;\n },\n disabled(t: Theme) {\n return css`\n background: ${t.menuItemDisabledBg};\n color: ${t.menuItemDisabledColor};\n cursor: default;\n `;\n },\n nonSelectable() {\n return css`\n cursor: default;\n `;\n },\n link(t: Theme) {\n return css`\n color: ${t.menuItemLinkColor};\n `;\n },\n loose() {\n return css`\n padding-left: 15px;\n `;\n },\n withIconSmall(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconSmall)}\n `;\n },\n withIconMedium(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconMedium)}\n `;\n },\n withIconLarge(t: Theme) {\n return css`\n ${withIconSizeMixin(t.menuItemPaddingForIconLarge)}\n `;\n },\n comment(t: Theme) {\n return css`\n color: ${t.menuItemCommentColor};\n opacity: ${t.menuItemCommentOpacity};\n white-space: normal;\n padding-top: 4px;\n `;\n },\n commentHover(t: Theme) {\n return css`\n color: ${t.menuItemCommentColorHover};\n opacity: ${t.menuItemCommentOpacityHover};\n `;\n },\n icon() {\n return css`\n display: inline-block;\n position: absolute;\n transform: translateY(0px); // icon shifts one pixel up in firefox on medium size without this property\n `;\n },\n iconSmall(t: Theme) {\n return css`\n ${iconSizeMixin(t.menuItemIconWidthSmall, t.menuItemPaddingXSmall)};\n `;\n },\n iconMedium(t: Theme) {\n return css`\n ${iconSizeMixin(t.menuItemIconWidthMedium, t.menuItemPaddingXMedium)};\n `;\n },\n iconLarge(t: Theme) {\n return css`\n ${iconSizeMixin(t.menuItemIconWidthLarge, t.menuItemPaddingXLarge)};\n `;\n },\n mobileContentWithIcon() {\n return css`\n margin-left: 8px;\n `;\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,6 +23,7 @@ import { getUid } from "../../../lib/uidUtils";
|
|
|
23
23
|
import { TokenView } from "../../Token/TokenView";
|
|
24
24
|
import { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from "../../../lib/featureFlagsContext";
|
|
25
25
|
import { withSize } from "../../../lib/size/SizeDecorator";
|
|
26
|
+
import { blink as _blink } from "../../../lib/blink";
|
|
26
27
|
import { TokenInputLocaleHelper } from "../locale";
|
|
27
28
|
import { styles } from "../TokenInput.styles";
|
|
28
29
|
import { tokenInputReducer } from "../TokenInputReducer";
|
|
@@ -345,6 +346,10 @@ export var TokenInput = (_dec = locale('TokenInput', TokenInputLocaleHelper), ro
|
|
|
345
346
|
};
|
|
346
347
|
}();
|
|
347
348
|
_this.handleKeyDown = function (event) {
|
|
349
|
+
_this.props.onKeyDown == null || _this.props.onKeyDown(event);
|
|
350
|
+
if (event.defaultPrevented) {
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
348
353
|
if (_this.isCursorVisible) {
|
|
349
354
|
_this.handleInputKeyDown(event);
|
|
350
355
|
} else {
|
|
@@ -859,6 +864,14 @@ export var TokenInput = (_dec = locale('TokenInput', TokenInputLocaleHelper), ro
|
|
|
859
864
|
_proto.blur = function blur() {
|
|
860
865
|
var _this$input9;
|
|
861
866
|
(_this$input9 = this.input) == null || _this$input9.blur();
|
|
867
|
+
} /** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.
|
|
868
|
+
* @public
|
|
869
|
+
*/;
|
|
870
|
+
_proto.blink = function blink() {
|
|
871
|
+
_blink({
|
|
872
|
+
el: this.wrapper,
|
|
873
|
+
blinkColor: this.theme.inputBlinkColor
|
|
874
|
+
});
|
|
862
875
|
};
|
|
863
876
|
_proto.render = function render() {
|
|
864
877
|
var _this2 = this;
|
|
@@ -1124,7 +1137,7 @@ export var TokenInput = (_dec = locale('TokenInput', TokenInputLocaleHelper), ro
|
|
|
1124
1137
|
return item;
|
|
1125
1138
|
},
|
|
1126
1139
|
toKey: defaultToKey,
|
|
1127
|
-
itemToId:
|
|
1140
|
+
itemToId: identity,
|
|
1128
1141
|
onValueChange: function onValueChange() {
|
|
1129
1142
|
return void 0;
|
|
1130
1143
|
},
|