@skbkontur/react-ui 5.4.4 → 5.4.5
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 +12 -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 +21 -1
- 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 +13 -0
- 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
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [5.4.5](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.4.4...@skbkontur/react-ui@5.4.5) (2025-12-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **MenuItem:** add menuItemCommentOpacityHover var ([97bcab4](https://github.com/skbkontur/retail-ui/commit/97bcab43f64cdc09cdcccdeff7307e9405872604))
|
|
12
|
+
* **TokenInput:** add onKeyDown prop ([848cb97](https://github.com/skbkontur/retail-ui/commit/848cb9717b4b4f19b48a93fb0dbd2e38e73b832b))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## [5.4.4](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.4.2...@skbkontur/react-ui@5.4.4) (2025-11-28)
|
|
7
19
|
|
|
8
20
|
|
|
@@ -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>;
|
|
@@ -59,6 +59,11 @@ var _FixedIMaskInput = require("./FixedIMaskInput");var _excluded = ["mask", "ma
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
62
67
|
|
|
63
68
|
|
|
64
69
|
|
|
@@ -90,9 +95,7 @@ var getSafeMaskInputType = exports.getSafeMaskInputType = function getSafeMaskIn
|
|
|
90
95
|
|
|
91
96
|
|
|
92
97
|
|
|
93
|
-
/**
|
|
94
|
-
* Интерфейс пропсов наследуется от `Input`.
|
|
95
|
-
* Из пропсов `Input` исключены некоторые не применимые к полю с маской пропсы и сокращен список возможных значений в type.
|
|
98
|
+
/** Поле ввода, которое ограничивает формат вводимого значения по заданной маске. Такое поле облегчает пользователю ввод и снижает количество ошибок.
|
|
96
99
|
*/
|
|
97
100
|
var MaskedInput = exports.MaskedInput = (0, _forwardRefAndName.forwardRefAndName)(
|
|
98
101
|
'MaskedInput',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_forwardRefAndName","_Emotion","_Input","_identifiers","_ThemeContext","_MaskedInput","_MaskedInput2","_ColorableInputElement","_FixedIMaskInput","_excluded","getSafeMaskInputType","exports","type","MaskedInput","forwardRefAndName","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","_objectWithoutPropertiesLoose2","default","theme","useContext","ThemeContext","inputRef","useRef","_useState","useState","focused","setFocused","prevValue","value","String","defaultValue","prevSelectionStart","useImperativeHandle","current","Object","assign","selectAll","_inputRef$current","_inputRef$current2","focus","delaySelectAll","useEffect","_inputRef$current3","input","selectionStart","getCompatibleIMaskProps","uiFontGlobalClassesRoot","createElement","Input","_extends2","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","onKeyDown","handleKeyDown","onPaste","handlePaste","cx","globalClasses","root","styles","ColorableInputElement","showOnFocus","FixedIMaskInput","onAccept","handleAccept","event","_event$clipboardData$","_event$clipboardData","preventDefault","clipboardData","getData","replace","placeholderChar","getMaskChar","definitions","getDefinitions","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","isKeyBackspace","isKeyDelete"],"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","_interopRequireWildcard","require","_forwardRefAndName","_Emotion","_Input","_identifiers","_ThemeContext","_MaskedInput","_MaskedInput2","_ColorableInputElement","_FixedIMaskInput","_excluded","getSafeMaskInputType","exports","type","MaskedInput","forwardRefAndName","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","_objectWithoutPropertiesLoose2","default","theme","useContext","ThemeContext","inputRef","useRef","_useState","useState","focused","setFocused","prevValue","value","String","defaultValue","prevSelectionStart","useImperativeHandle","current","Object","assign","selectAll","_inputRef$current","_inputRef$current2","focus","delaySelectAll","useEffect","_inputRef$current3","input","selectionStart","getCompatibleIMaskProps","uiFontGlobalClassesRoot","createElement","Input","_extends2","onFocus","handleFocus","onBlur","handleBlur","onInput","handleInput","onKeyDown","handleKeyDown","onPaste","handlePaste","cx","globalClasses","root","styles","ColorableInputElement","showOnFocus","FixedIMaskInput","onAccept","handleAccept","event","_event$clipboardData$","_event$clipboardData","preventDefault","clipboardData","getData","replace","placeholderChar","getMaskChar","definitions","getDefinitions","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","isKeyBackspace","isKeyDelete"],"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":"6eAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;;;;AAIA,IAAAC,kBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;;AAEA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;;AAEA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,aAAA,GAAAP,OAAA;AACA,IAAAQ,sBAAA,GAAAR,OAAA;AACA,IAAAS,gBAAA,GAAAT,OAAA,sBAAoD,IAAAU,SAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0D7C,IAAMC,oBAAoB,GAAAC,OAAA,CAAAD,oBAAA,GAAG,SAAvBA,oBAAoBA,CAAIE,IAAgB,EAAgC;EACnF,IAAI,CAACA,IAAI,EAAE;IACT,OAAOA,IAAI;EACb;;EAEA,QAAQA,IAAI;IACV,KAAK,QAAQ;IACb,KAAK,MAAM;IACX,KAAK,MAAM;IACX,KAAK,UAAU;MACb,OAAO,MAAM;IACf;MACE,OAAOA,IAAI;EACf;AACF,CAAC;;;;;;;;;;;AAWD;AACA;AACO,IAAMC,WAAW,GAAAF,OAAA,CAAAE,WAAA,GAAG,IAAAC,oCAAiB;EAC1C,aAAa;EACb,SAASD,WAAWA,CAACE,KAAuB,EAAEC,GAAsB,EAAE;IACpE;MACEC,IAAI;;;;;;;;;;;;;;;;MAgBFF,KAAK,CAhBPE,IAAI,CACJC,QAAQ,GAeNH,KAAK,CAfPG,QAAQ,CACRC,WAAW,GAcTJ,KAAK,CAdPI,WAAW,CAAAC,qBAAA,GAcTL,KAAK,CAbPM,cAAc,CAAdA,cAAc,GAAAD,qBAAA,cAAG,KAAK,GAAAA,qBAAA,CAAAE,cAAA,GAapBP,KAAK,CAZPQ,OAAO,CAAPA,OAAO,GAAAD,cAAA,cAAG,IAAI,GAAAA,cAAA,CAAAE,iBAAA,GAYZT,KAAK,CAXPU,UAAU,CAAEC,gBAAgB,GAAAF,iBAAA,cAAG,CAAC,CAAC,GAAAA,iBAAA,CAAAG,aAAA,GAW/BZ,KAAK,CAVPa,MAAM,CAANA,MAAM,GAAAD,aAAA,cAAG,KAAK,GAAAA,aAAA,CACdE,aAAa,GASXd,KAAK,CATPc,aAAa,CACbC,iBAAiB,GAQff,KAAK,CARPe,iBAAiB,CACjBC,QAAQ,GAONhB,KAAK,CAPPgB,QAAQ,CACRC,kBAAkB,GAMhBjB,KAAK,CANPiB,kBAAkB,CAClBC,OAAO,GAKLlB,KAAK,CALPkB,OAAO,CACPC,SAAS,GAIPnB,KAAK,CAJPmB,SAAS,CAETC,SAAS,GAEPpB,KAAK,CAFPoB,SAAS,CACNC,UAAU,OAAAC,8BAAA,CAAAC,OAAA,EACXvB,KAAK,EAAAN,SAAA;IACT,IAAM8B,KAAK,GAAG,IAAAC,iBAAU,EAACC,0BAAY,CAAC;;IAEtC,IAAMC,QAAQ,GAAG,IAAAC,aAAM,EAAQ,IAAI,CAAC;;IAEpC,IAAAC,SAAA,GAA8B,IAAAC,eAAQ,EAAC,KAAK,CAAC,CAAtCC,OAAO,GAAAF,SAAA,IAAEG,UAAU,GAAAH,SAAA;IAC1B,IAAMI,SAAS,GAAG,IAAAL,aAAM,EAAS5B,KAAK,CAACkC,KAAK,IAAIC,MAAM,CAACnC,KAAK,CAACoC,YAAY,CAAC,IAAI,EAAE,CAAC;IACjF,IAAMC,kBAAkB,GAAG,IAAAT,aAAM,EAAgB,IAAI,CAAC;;IAEtD,IAAAU,0BAAmB;MACjBrC,GAAG;MACH;UACE0B,QAAQ,CAACY,OAAO;UAChBC,MAAM,CAACC,MAAM,CAACd,QAAQ,CAACY,OAAO,EAAE;YAC9BG,SAAS,EAAE,SAAAA,UAAA,EAAM,KAAAC,iBAAA,EAAAC,kBAAA;cACf,CAAAD,iBAAA,GAAAhB,QAAQ,CAACY,OAAO,aAAhBI,iBAAA,CAAkBE,KAAK,CAAC,CAAC;cACzB,CAAAD,kBAAA,GAAAjB,QAAQ,CAACY,OAAO,aAAhBK,kBAAA,CAAkBE,cAAc,CAAC,CAAC;YACpC;UACF,CAAC,CAAC;MACJ;IACF,CAAC;;IAED,IAAAC,gBAAS,EAAC,YAAM,KAAAC,kBAAA;MACd;MACA;MACA;MACA,KAAAA,kBAAA,GAAIrB,QAAQ,CAACY,OAAO,aAAhBS,kBAAA,CAAkBC,KAAK,EAAE;QAC3BhB,SAAS,CAACM,OAAO,GAAGZ,QAAQ,CAACY,OAAO,CAACU,KAAK,CAACf,KAAK;QAChDG,kBAAkB,CAACE,OAAO,GAAGZ,QAAQ,CAACY,OAAO,CAACU,KAAK,CAACC,cAAc;MACpE;IACF,CAAC,EAAE,EAAE,CAAC;;IAEN,IAAMxC,UAAU,GAAGyC,uBAAuB,CAAC,CAAC;;IAE5C;IACA;IACA,IAAMC,uBAAuB,GAAG,uBAAuB;;IAEvD;MACEtE,MAAA,CAAAyC,OAAA,CAAA8B,aAAA,CAAClE,MAAA,CAAAmE,KAAK,MAAAC,SAAA,CAAAhC,OAAA;QACJtB,GAAG,EAAE0B,QAAS;MACVN,UAAU;QACdmC,OAAO,EAAEC,WAAY;QACrBC,MAAM,EAAEC,UAAW;QACnBC,OAAO,EAAEC,WAAY;QACrBC,SAAS,EAAEC,aAAc;QACzBC,OAAO,EAAEC,WAAY;QACrB9C,SAAS,EAAE,IAAA+C,WAAE,EAACC,0BAAa,CAACC,IAAI,EAAEhB,uBAAuB,EAAEjC,SAAS,EAAEkD,mBAAM,CAACD,IAAI,CAAC5C,KAAK,CAAC,CAAE;QAC1FN,OAAO;QACLV,OAAO;QACL1B,MAAA,CAAAyC,OAAA,CAAA8B,aAAA,CAAC7D,sBAAA,CAAA8E,qBAAqB,IAACC,WAAW,EAAE,KAAM,EAACjE,cAAc,EAAEA,cAAe;QACxExB,MAAA,CAAAyC,OAAA,CAAA8B,aAAA,CAAC5D,gBAAA,CAAA+E,eAAe,MAAAjB,SAAA,CAAAhC,OAAA,MAAKb,UAAU,IAAE+D,QAAQ,EAAEC,YAAa,GAAE;QACrC,CAAC;;QAExB5F,MAAA,CAAAyC,OAAA,CAAA8B,aAAA,CAAC5D,gBAAA,CAAA+E,eAAe,MAAAjB,SAAA,CAAAhC,OAAA,MAAKb,UAAU,IAAE+D,QAAQ,EAAEC,YAAa,GAAE,CAE7D;;;MACF,CAAC;;;IAGJ,SAAST,WAAWA,CAACU,KAA6C,EAAE;MAClE,IAAI1D,kBAAkB,IAAIH,aAAa,EAAE,KAAA8D,qBAAA,EAAAC,oBAAA;QACvCF,KAAK,CAACG,cAAc,CAAC,CAAC;QACtBhE,aAAa,YAAbA,aAAa,CAAGG,kBAAkB,EAAA2D,qBAAA,IAAAC,oBAAA,GAACF,KAAK,CAACI,aAAa,qBAAnBF,oBAAA,CAAqBG,OAAO,CAAC,MAAM,CAAC,YAAAJ,qBAAA,GAAI,EAAE,CAAC,CAAC;MACjF;;MAEA5E,KAAK,CAACgE,OAAO,YAAbhE,KAAK,CAACgE,OAAO,CAAGW,KAAK,CAAC;IACxB;;IAEA,SAASxB,uBAAuBA,CAAA,EAAsC;MACpE,WAAAI,SAAA,CAAAhC,OAAA;QACErB,IAAI,EAAEA,IAAI,CAAC+E,OAAO,CAAC,IAAI,EAAE,OAAO,CAAQ;QACxCC,eAAe,EAAE,IAAAC,yBAAW,EAAChF,QAAQ,CAAC;QACtCiF,WAAW,EAAE,IAAAC,4BAAc,EAACjF,WAAW,CAAC;QACxC;QACAkF,KAAK,EAAE,QAAQ;QACfC,SAAS,EAAE,OAAO;QAClBC,IAAI,EAAE,CAAClF,cAAc,KAAKN,KAAK,CAACyF,QAAQ,IAAI,CAAC1D,OAAO,CAAC;QACrDlB,MAAM,EAANA,MAAM;MACHF,gBAAgB;;IAEvB;;IAEA,SAAS+D,YAAYA,CAAA,EAA+E,UAAAgB,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAA3EC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA,KAAJF,IAAI,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;MAC3B,IAAO7D,KAAK,GAAS2D,IAAI,IAATG,CAAC,GAAIH,IAAI;;MAEzB;MACA;MACA;MACA;MACA;MACAG,CAAC,KAAIlF,aAAa,oBAAbA,aAAa,CAAGoB,KAAK,CAAC;MAC3B,CAAC8D,CAAC,KAAK/D,SAAS,CAACM,OAAO,GAAGL,KAAK,CAAC;IACnC;;IAEA;AACJ;AACA;AACA;AACA;IACI,SAAS2B,WAAWA,CAACmC,CAAsC,EAAE;MAC3D,IAAAC,gBAAA,GAAkCD,CAAC,CAACE,aAAa,CAAzChE,KAAK,GAAA+D,gBAAA,CAAL/D,KAAK,CAAEgB,cAAc,GAAA+C,gBAAA,CAAd/C,cAAc;;MAE7B;MACA;MACA,IAAIjB,SAAS,CAACM,OAAO,KAAKL,KAAK,IAAIgB,cAAc,KAAKb,kBAAkB,CAACE,OAAO,EAAE;QAChF4D,qBAAqB,CAACjE,KAAK,CAAC;MAC9B;MACAD,SAAS,CAACM,OAAO,GAAGL,KAAK;MACzBG,kBAAkB,CAACE,OAAO,GAAGW,cAAc;;MAE3ClD,KAAK,CAAC4D,OAAO,YAAb5D,KAAK,CAAC4D,OAAO,CAAGoC,CAAC,CAAC;IACpB;;IAEA,SAASvC,WAAWA,CAACuC,CAAqC,EAAE,KAAAI,kBAAA;MAC1DpE,UAAU,CAAC,IAAI,CAAC;MAChBhC,KAAK,CAACwD,OAAO,YAAbxD,KAAK,CAACwD,OAAO,CAAGwC,CAAC,CAAC;;MAElB;MACA;MACAhG,KAAK,CAACqG,gBAAgB,MAAAD,kBAAA,GAAIzE,QAAQ,CAACY,OAAO,qBAAhB6D,kBAAA,CAAkBtD,cAAc,CAAC,CAAC;IAC9D;;IAEA,SAASqD,qBAAqBA,CAACjE,KAAa,EAAE,KAAAoE,kBAAA;MAC5C,IAAMC,KAAK,GAAG,EAAAD,kBAAA,GAAA3E,QAAQ,CAACY,OAAO,qBAAhB+D,kBAAA,CAAkBC,KAAK,CAACC,IAAI,CAAC7E,QAAQ,CAACY,OAAO,CAAC,KAAK,oBAAMkE,SAAS,EAAC;MACjF1F,iBAAiB,GAAGA,iBAAiB,CAACmB,KAAK,EAAEqE,KAAK,CAAC,GAAGA,KAAK,CAAC,CAAC;IAC/D;;IAEA,SAAS5C,UAAUA,CAACqC,CAAqC,EAAE;MACzDhE,UAAU,CAAC,KAAK,CAAC;MACjBhC,KAAK,CAAC0D,MAAM,YAAZ1D,KAAK,CAAC0D,MAAM,CAAGsC,CAAC,CAAC;IACnB;;IAEA,SAASjC,aAAaA,CAACiC,CAAwC,EAAE;MAC/D,IAAAU,iBAAA,GAAgDV,CAAC,CAACE,aAAa,CAAvDhE,KAAK,GAAAwE,iBAAA,CAALxE,KAAK,CAAEgB,cAAc,GAAAwD,iBAAA,CAAdxD,cAAc,CAAEyD,YAAY,GAAAD,iBAAA,CAAZC,YAAY;;MAE3C;MACG,IAAAC,2BAAc,EAACZ,CAAC,CAAC,IAAI9C,cAAc,KAAK,CAAC,IAAIyD,YAAY,KAAK,CAAC;MAC/D,IAAAE,wBAAW,EAACb,CAAC,CAAC,IAAI3D,kBAAkB,CAACE,OAAO,KAAKL,KAAK,CAAC0D,MAAO;MAC/D;QACA;QACAO,qBAAqB,CAACjE,KAAK,CAAC;QAC5BD,SAAS,CAACM,OAAO,GAAGyD,CAAC,CAACE,aAAa,CAAChE,KAAK;MAC3C;MACAG,kBAAkB,CAACE,OAAO,GAAGW,cAAc;;MAE3ClD,KAAK,CAAC8D,SAAS,YAAf9D,KAAK,CAAC8D,SAAS,CAAGkC,CAAC,CAAC;IACtB;EACF;AACF,CAAC","ignoreList":[]}
|
|
@@ -133,9 +133,9 @@ var styles = exports.styles = (0, _Emotion.memoizeStyle)({
|
|
|
133
133
|
|
|
134
134
|
},
|
|
135
135
|
commentHover: function commentHover(t) {
|
|
136
|
-
return (0, _Emotion.css)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteralLoose2.default)(["\n color: ", ";\n opacity:
|
|
137
|
-
t.menuItemCommentColorHover
|
|
138
|
-
|
|
136
|
+
return (0, _Emotion.css)(_templateObject16 || (_templateObject16 = (0, _taggedTemplateLiteralLoose2.default)(["\n color: ", ";\n opacity: ", ";\n "])),
|
|
137
|
+
t.menuItemCommentColorHover,
|
|
138
|
+
t.menuItemCommentOpacityHover);
|
|
139
139
|
|
|
140
140
|
},
|
|
141
141
|
icon: function icon() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_Emotion","require","_Mixins","_MenuItem","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","_templateObject18","_templateObject19","_templateObject20","_templateObject21","getMenuItemPaddings","exports","_ref","menuItemPaddingX","menuItemPaddingY","paddingX","paddingY","styles","memoizeStyle","root","t","css","_taggedTemplateLiteralLoose2","default","resetButton","menuItemDisplay","menuItemTextColor","menuItemBorderRadius","menuItemGap","rootSmall","menuItemSizeMixin","menuItemPaddingXSmall","menuItemPaddingYSmall","menuItemLineHeightSmall","menuItemFontSizeSmall","rootMedium","menuItemPaddingXMedium","menuItemPaddingYMedium","menuItemLineHeightMedium","menuItemFontSizeMedium","rootLarge","menuItemPaddingXLarge","menuItemPaddingYLarge","menuItemLineHeightLarge","menuItemFontSizeLarge","rootMobile","menuItemFontSizeMobile","menuItemLineHeightMobile","menuItemPaddingMobile","hover","menuItemHoverBg","menuItemHoverColor","selected","menuItemSelectedBg","disabled","menuItemDisabledBg","menuItemDisabledColor","nonSelectable","link","menuItemLinkColor","loose","withIconSmall","withIconSizeMixin","menuItemPaddingForIconSmall","withIconMedium","menuItemPaddingForIconMedium","withIconLarge","menuItemPaddingForIconLarge","comment","menuItemCommentColor","menuItemCommentOpacity","commentHover","menuItemCommentColorHover","icon","iconSmall","iconSizeMixin","menuItemIconWidthSmall","iconMedium","menuItemIconWidthMedium","iconLarge","menuItemIconWidthLarge","mobileContentWithIcon"],"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: 0.6;\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":[]}
|
|
1
|
+
{"version":3,"names":["_Emotion","require","_Mixins","_MenuItem","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","_templateObject9","_templateObject10","_templateObject11","_templateObject12","_templateObject13","_templateObject14","_templateObject15","_templateObject16","_templateObject17","_templateObject18","_templateObject19","_templateObject20","_templateObject21","getMenuItemPaddings","exports","_ref","menuItemPaddingX","menuItemPaddingY","paddingX","paddingY","styles","memoizeStyle","root","t","css","_taggedTemplateLiteralLoose2","default","resetButton","menuItemDisplay","menuItemTextColor","menuItemBorderRadius","menuItemGap","rootSmall","menuItemSizeMixin","menuItemPaddingXSmall","menuItemPaddingYSmall","menuItemLineHeightSmall","menuItemFontSizeSmall","rootMedium","menuItemPaddingXMedium","menuItemPaddingYMedium","menuItemLineHeightMedium","menuItemFontSizeMedium","rootLarge","menuItemPaddingXLarge","menuItemPaddingYLarge","menuItemLineHeightLarge","menuItemFontSizeLarge","rootMobile","menuItemFontSizeMobile","menuItemLineHeightMobile","menuItemPaddingMobile","hover","menuItemHoverBg","menuItemHoverColor","selected","menuItemSelectedBg","disabled","menuItemDisabledBg","menuItemDisabledColor","nonSelectable","link","menuItemLinkColor","loose","withIconSmall","withIconSizeMixin","menuItemPaddingForIconSmall","withIconMedium","menuItemPaddingForIconMedium","withIconLarge","menuItemPaddingForIconLarge","comment","menuItemCommentColor","menuItemCommentOpacity","commentHover","menuItemCommentColorHover","menuItemCommentOpacityHover","icon","iconSmall","iconSizeMixin","menuItemIconWidthSmall","iconMedium","menuItemIconWidthMedium","iconLarge","menuItemIconWidthLarge","mobileContentWithIcon"],"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":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AriaAttributes, FocusEventHandler, HTMLAttributes, MouseEventHandler, ReactNode } from 'react';
|
|
1
|
+
import type { AriaAttributes, FocusEventHandler, HTMLAttributes, KeyboardEventHandler, MouseEventHandler, ReactNode } from 'react';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import type { TokenProps, TokenSize } from '../Token';
|
|
4
4
|
import type { MenuItemState } from '../MenuItem';
|
|
@@ -28,6 +28,8 @@ export interface TokenInputProps<T> extends CommonProps, Pick<AriaAttributes, 'a
|
|
|
28
28
|
/** Задает HTML-событие `onblur`.
|
|
29
29
|
* @ignore */
|
|
30
30
|
onBlur?: FocusEventHandler<HTMLTextAreaElement>;
|
|
31
|
+
/** Задает HTML-событие `onkeydown`. */
|
|
32
|
+
onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;
|
|
31
33
|
/** Устанавливает фокус на контроле после окончания загрузки страницы. */
|
|
32
34
|
autoFocus?: boolean;
|
|
33
35
|
/** Задает размер контрола. */
|
|
@@ -169,6 +171,10 @@ export declare class TokenInput<T = string> extends React.PureComponent<TokenInp
|
|
|
169
171
|
* @public
|
|
170
172
|
*/
|
|
171
173
|
blur(): void;
|
|
174
|
+
/** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.
|
|
175
|
+
* @public
|
|
176
|
+
*/
|
|
177
|
+
blink(): void;
|
|
172
178
|
render(): React.JSX.Element;
|
|
173
179
|
private getLabelSizeClassName;
|
|
174
180
|
private getInputSizeClassName;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
|
|
11
12
|
var _react = _interopRequireDefault(require("react"));
|
|
12
13
|
var _lodash = _interopRequireDefault(require("lodash.isequal"));
|
|
13
14
|
var _globalObject = require("@skbkontur/global-object");
|
|
@@ -49,6 +50,7 @@ var _TokenView = require("../Token/TokenView");
|
|
|
49
50
|
var _featureFlagsContext = require("../../lib/featureFlagsContext");
|
|
50
51
|
var _SizeDecorator = require("../../lib/size/SizeDecorator");
|
|
51
52
|
|
|
53
|
+
var _blink2 = require("../../lib/blink");
|
|
52
54
|
|
|
53
55
|
|
|
54
56
|
var _locale = require("./locale");
|
|
@@ -205,6 +207,9 @@ TokenInputType = exports.TokenInputType = /*#__PURE__*/function (TokenInputType)
|
|
|
205
207
|
|
|
206
208
|
|
|
207
209
|
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
208
213
|
|
|
209
214
|
|
|
210
215
|
|
|
@@ -563,6 +568,13 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
|
|
|
563
568
|
|
|
564
569
|
|
|
565
570
|
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
|
|
566
578
|
|
|
567
579
|
|
|
568
580
|
|
|
@@ -827,6 +839,12 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
|
|
|
827
839
|
|
|
828
840
|
|
|
829
841
|
handleKeyDown = function (event) {
|
|
842
|
+
_this.props.onKeyDown == null || _this.props.onKeyDown(event);
|
|
843
|
+
|
|
844
|
+
if (event.defaultPrevented) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
|
|
830
848
|
if (_this.isCursorVisible) {
|
|
831
849
|
_this.handleInputKeyDown(event);
|
|
832
850
|
} else {
|
|
@@ -1245,7 +1263,9 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
|
|
|
1245
1263
|
* @public
|
|
1246
1264
|
*/;_proto.focus = function focus() {var _this$input8;(_this$input8 = this.input) == null || _this$input8.focus();} /**
|
|
1247
1265
|
* @public
|
|
1248
|
-
*/;_proto.blur = function blur() {var _this$input9;(_this$input9 = this.input) == null || _this$input9.blur();}
|
|
1266
|
+
*/;_proto.blur = function blur() {var _this$input9;(_this$input9 = this.input) == null || _this$input9.blur();} /** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.
|
|
1267
|
+
* @public
|
|
1268
|
+
*/;_proto.blink = function blink() {(0, _blink2.blink)({ el: this.wrapper, blinkColor: this.theme.inputBlinkColor });};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});});};_proto.getLabelSizeClassName = function getLabelSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.labelLarge(this.theme);case 'medium':return _TokenInput2.styles.labelMedium(this.theme);case 'small':default:return _TokenInput2.styles.labelSmall(this.theme);}};_proto.getInputSizeClassName = function getInputSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.inputLarge(this.theme);case 'medium':return _TokenInput2.styles.inputMedium(this.theme);case 'small':default:return _TokenInput2.styles.inputSmall(this.theme);}};_proto.renderMain = function renderMain() {var _cx, _cx2, _cx3;if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {throw Error('Missed getItems for type ' + this.type);}var _this$props2 = this.props,maxMenuHeight = _this$props2.maxMenuHeight,error = _this$props2.error,warning = _this$props2.warning,disabled = _this$props2.disabled,renderNotFound = _this$props2.renderNotFound,hideMenuIfEmptyInputValue = _this$props2.hideMenuIfEmptyInputValue,inputMode = _this$props2.inputMode,renderTotalCount = _this$props2.renderTotalCount,totalCount = _this$props2.totalCount,ariaDescribedby = _this$props2['aria-describedby'],ariaLabel = _this$props2['aria-label'];var _this$getProps11 = this.getProps(),selectedItems = _this$getProps11.selectedItems,width = _this$getProps11.width,onMouseEnter = _this$getProps11.onMouseEnter,onMouseLeave = _this$getProps11.onMouseLeave,menuWidth = _this$getProps11.menuWidth,menuAlign = _this$getProps11.menuAlign,renderItem = _this$getProps11.renderItem;var _this$state3 = this.state,activeTokens = _this$state3.activeTokens,inFocus = _this$state3.inFocus,inputValueWidth = _this$state3.inputValueWidth,inputValueHeight = _this$state3.inputValueHeight,inputValue = _this$state3.inputValue,reservedInputValue = _this$state3.reservedInputValue,autocompleteItems = _this$state3.autocompleteItems,loading = _this$state3.loading;var showMenu = this.type !== TokenInputType.WithoutReference && this.isCursorVisible && activeTokens.length === 0 && (this.isInputValueChanged || !hideMenuIfEmptyInputValue);var theme = this.theme;var inputInlineStyles = { // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости
|
|
1249
1269
|
width: inputValueWidth, height: inputValueHeight, // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее
|
|
1250
1270
|
caretColor: this.isCursorVisible ? undefined : 'transparent' };var labelClassName = (0, _Emotion.cx)(_TokenInput2.styles.label(theme), this.getLabelSizeClassName(), (_cx = {}, _cx[_TokenInput2.styles.hovering(this.theme)] = !inFocus && !disabled && !warning && !error, _cx[_TokenInput2.styles.labelDisabled(theme)] = !!disabled, _cx[_TokenInput2.styles.labelFocused(theme)] = !!inFocus, _cx[_TokenInput2.styles.error(theme)] = !!error, _cx[_TokenInput2.styles.warning(theme)] = !!warning, _cx));var inputClassName = (0, _Emotion.cx)(_TokenInput2.styles.input(theme), this.getInputSizeClassName(), (_cx2 = {}, _cx2[_TokenInput2.styles.inputDisabled(theme)] = !!disabled, _cx2));var placeholder = selectedItems.length === 0 && !inputValue ? this.props.placeholder : '';var inputNode = /*#__PURE__*/_react.default.createElement(_TokenView.TokenView, { size: this.size, className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_TokenInput2.styles.inputPlaceholderWrapper()] = Boolean(placeholder), _cx3)), hideCloseButton: Boolean(placeholder) }, /*#__PURE__*/_react.default.createElement("textarea", { id: this.textareaId, ref: this.inputRef, value: inputValue, style: inputInlineStyles, spellCheck: false, disabled: disabled, className: inputClassName, placeholder: placeholder, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, onChange: this.handleChangeInputValue, onKeyDown: this.handleKeyDown, onPaste: this.handleInputPaste, inputMode: inputMode, "aria-label": ariaLabel, "aria-describedby": ariaDescribedby }));return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("div", { "data-tid": TokenInputDataTids.root, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, /*#__PURE__*/_react.default.createElement("label", { ref: this.wrapperRef, style: { width: width }, className: labelClassName, onMouseDown: this.handleWrapperMouseDown, onMouseUp: this.handleWrapperMouseUp, htmlFor: this.textareaId, "aria-controls": this.rootId, "data-tid": TokenInputDataTids.label }, /*#__PURE__*/_react.default.createElement(_TextWidthHelper.TextWidthHelper, { ref: this.textHelperRef, text: inputValue, theme: this.theme, size: this.size }), this.renderTokensStart(), inputNode, showMenu && /*#__PURE__*/_react.default.createElement(_TokenInputMenu.TokenInputMenu, { popupMenuId: this.rootId, ref: this.tokensInputMenuRef, items: autocompleteItems, loading: loading, opened: showMenu, maxMenuHeight: maxMenuHeight, anchorElementForCursor: this.input, anchorElementRoot: this.wrapper, renderNotFound: renderNotFound, renderItem: renderItem, onValueChange: this.selectItem, renderAddButton: this.renderAddButton, menuWidth: menuWidth, menuAlign: menuAlign, renderTotalCount: renderTotalCount, totalCount: totalCount, size: this.size }), this.renderTokensEnd(), this.isEditingMode ? /*#__PURE__*/_react.default.createElement(_TokenView.TokenView, { size: this.size }, /*#__PURE__*/_react.default.createElement("span", { className: _TokenInput2.styles.reservedInput(theme) }, reservedInputValue)) : null)));} /**
|
|
1251
1271
|
* Сбрасывает введенное пользователем значение
|