@skbkontur/react-ui 5.3.5 → 5.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/cjs/components/ComboBox/ComboBox.d.ts +4 -1
- package/cjs/components/ComboBox/ComboBox.js +5 -0
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/MaskedInput/FixedIMaskInput.js +3 -2
- package/cjs/components/MaskedInput/FixedIMaskInput.js.map +1 -1
- package/cjs/components/MaskedInput/MaskedInput.d.ts +8 -0
- package/cjs/components/MaskedInput/MaskedInput.js +23 -2
- package/cjs/components/MaskedInput/MaskedInput.js.map +1 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +3 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js +23 -1
- package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +3 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js +8 -1
- package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +4 -1
- package/components/MaskedInput/FixedIMaskInput/FixedIMaskInput.js +3 -2
- package/components/MaskedInput/FixedIMaskInput/FixedIMaskInput.js.map +1 -1
- package/components/MaskedInput/MaskedInput/MaskedInput.js +11 -1
- package/components/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
- package/components/MaskedInput/MaskedInput.d.ts +8 -0
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +33 -12
- package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
- package/internal/CustomComboBox/ComboBoxView.d.ts +3 -1
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +4 -0
- package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
- package/internal/CustomComboBox/CustomComboBox.d.ts +3 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,28 @@
|
|
|
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.3.7](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.3.6...@skbkontur/react-ui@5.3.7) (2025-09-24)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **MaskedInput:** return "" from onValueChange after input cleaning ([884ed1c](https://github.com/skbkontur/retail-ui/commit/884ed1c296d36bea895b3cb13481dcf67052193f))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## [5.3.6](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.3.5...@skbkontur/react-ui@5.3.6) (2025-09-24)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **ComboBox,MaskedInput:** support mask and filter value on paste ([a6f6935](https://github.com/skbkontur/retail-ui/commit/a6f69355a1b962dbaf8a86158c6b833b2159eb48))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
6
28
|
## [5.3.5](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@5.3.4...@skbkontur/react-ui@5.3.5) (2025-09-24)
|
|
7
29
|
|
|
8
30
|
|
|
@@ -6,7 +6,8 @@ import type { ShowClearIcon, InputIconType } from '../Input';
|
|
|
6
6
|
import type { CommonProps } from '../../internal/CommonWrapper';
|
|
7
7
|
import type { TGetRootNode } from '../../lib/rootNode';
|
|
8
8
|
import type { SizeProp } from '../../lib/types/props';
|
|
9
|
-
|
|
9
|
+
import type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../MaskedInput';
|
|
10
|
+
export interface ComboBoxProps<T> extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>>, CommonProps {
|
|
10
11
|
/** Показывать иконку очистки значения в непустом поле:
|
|
11
12
|
* - `always` — всегда показывать иконку
|
|
12
13
|
* - `auto` — показывать иконку при hover/focus
|
|
@@ -121,6 +122,8 @@ export interface ComboBoxProps<T> extends Pick<AriaAttributes, 'aria-describedby
|
|
|
121
122
|
onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
122
123
|
/** Задает типы вводимых данных. */
|
|
123
124
|
inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];
|
|
125
|
+
/** Задает функцию, которая вызывается при вставке значения в инпут с маской. */
|
|
126
|
+
onBeforePasteInMask?: MaskedInputOnBeforePasteValue;
|
|
124
127
|
}
|
|
125
128
|
export interface ComboBoxItem {
|
|
126
129
|
value: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_CustomComboBox","_rootNode","_createPropsGetter","_class","_ComboBox","ComboBox","exports","rootNode","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","createPropsGetter","defaultProps","comboboxElement","customComboBoxRef","element","setRootNode","_inheritsLoose2","default","_proto","prototype","focus","opts","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","createElement","CustomComboBox","_extends2","size","props","ref","React","Component","__KONTUR_REACT_UI__","displayName","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow","showClearIcon"],"sources":["ComboBox.tsx"],"sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport type { Nullable } from '../../typings/utility-types';\nimport type { MenuItemState } from '../MenuItem';\nimport type { ShowClearIcon, InputIconType } from '../Input';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { SizeProp } from '../../lib/types/props';\n\nexport interface ComboBoxProps<T>\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n CommonProps {\n /** Показывать иконку очистки значения в непустом поле:\n * - `always` — всегда показывать иконку\n * - `auto` — показывать иконку при hover/focus\n * - `never` — не показывать иконку\n * При одновременной настройке `showClearIcon` и `rightIcon` показывается иконка очистки.\n * @default never */\n showClearIcon?: ShowClearIcon;\n\n /** Задает выравнивание контента. */\n align?: 'left' | 'center' | 'right';\n\n /** Вызывает функцию поиска getItems при фокусе и очистке поля ввода. */\n searchOnFocus?: boolean;\n\n /** Отображает справа иконку в виде стрелки. */\n drawArrow?: boolean;\n\n /** Устанавливает фокус на контроле после окончания загрузки страницы. */\n autoFocus?: boolean;\n\n /** Убирает обводку. */\n borderless?: boolean;\n\n /** Отключает использование портала для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15 */\n disablePortal?: boolean;\n\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Переводит контрол в состояние валидации \"ошибка\". */\n error?: boolean;\n\n /** Добавляет иконку слева.\n При использовании `ReactNode` применяются дефолтные стили для иконки.\n При использовании `() => ReactNode` применяются только стили для позиционирования. */\n leftIcon?: InputIconType;\n\n /** Добавляет иконку справа.\n При использовании `ReactNode` применяются дефолтные стили для иконки.\n При использовании `() => ReactNode` применяются только стили для позиционирования. */\n rightIcon?: InputIconType;\n\n /** Задает функцию поиска элементов, которая должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются объекты с типом `{ value: string, label: string }`.\n * Элементы могут быть любого типа. В этом случае необходимо определить свойства `itemToValue`, `renderValue`, `renderItem`, `valueToString`. */\n getItems: (query: string) => Promise<Array<ComboBoxExtendedItem<T>>>;\n\n /** Задает функцию сравнения полученных результатов с value. */\n itemToValue?: (item: T) => string | number;\n\n /** Задает максимальную длину инпута. */\n maxLength?: number;\n\n /** Задает текущую позицию выпадающего окна вручную.\n */\n menuPos?: 'top' | 'bottom';\n\n /** Задает выравнивание выпадающего меню. */\n menuAlign?: 'left' | 'right';\n\n /** Задает функцию, которая вызывается при потере комбобоксом фокуса. */\n onBlur?: () => void;\n\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n\n /** Задает функцию, которая вызывается при получении комбобоксом фокуса. */\n onFocus?: () => void;\n\n /** Задает функцию, которая вызывается при изменении текста в поле ввода, если результатом функции будет строка, то она станет следующим состоянием полем ввода. */\n onInputValueChange?: (value: string) => Nullable<string> | void;\n\n /** Задает функцию для обработки ввода строки в инпут и последующей потерей фокуса компонентом.\n * Функция срабатывает с аргументом инпута строки.\n * Если при потере фокуса в выпадающем списке будет только один элемент и результат valueToString с этим элементом будет совпадать со значение в текстовом поле, то сработает onValueChange со значением данного элемента.\n * Сама функция также может вернуть значение, неравное undefined, с которым будет вызван onValueChange. Если возвращаемое значение будет равно null, то сработает очистка текущего значения инпута, а в режиме редактирования токен будет удален. */\n onUnexpectedInput?: (value: string) => void | null | T;\n\n /** Задает текст, который отображается если не введено никакое значение. */\n placeholder?: string;\n\n /** Задает функцию отрисовки элементов результата поиска.\n * Не применяется если элемент является функцией или React-элементом\n * @default item => item.label\n * @param {T} item - элемент из результата поиска.\n * @param {MenuItemState} state? - состояние элемента.\n * @returns {React.ReactNode} React-элемент. */\n renderItem?: (item: T, state?: MenuItemState) => React.ReactNode;\n\n /** Устанавливает компонент, заменяющий собой обёртку элементов результата поиска.\n * По умолчанию все элементы результата поиска оборачиваются в тег <button />.\n * @example\n * itemWrapper={(item) => {\n * if (item.value === 3) {\n * return (props) => {\n * return <a {...props} />\n * }\n * }\n * }}\n */\n itemWrapper?: (item: T) => React.ComponentType;\n\n /** Задает функцию, которая отображает сообщение о пустом результате поиска. При renderAddButton не работает. */\n renderNotFound?: () => React.ReactNode;\n\n /** Задает функцию, которая отображает сообщение об общем количестве элементов.\n * @param {number} found - количество элементов по результатам поиска. Учитывает только компонент MenuItem. Им \"оборачиваются\" элементы, возвращаемые getItems().\n * @param {number} total - количество всех элементов. */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /** Задает функцию, которая отображает выбранное значение.\n * @default item => item.label */\n renderValue?: (item: T) => React.ReactNode;\n\n /** Задает функцию отрисовки кнопки добавления в выпадающем списке. */\n renderAddButton?: (query?: string) => React.ReactNode;\n\n /** Определяет общее количество элементов. Необходим для работы renderTotalCount. */\n totalCount?: number;\n\n /** Устанавливает выбранное в комбобоксе значение. Тип `value` совпадает с типом элементов в массиве, возвращаемом в `getItems`. */\n value?: Nullable<T>;\n\n /** Задает функцию, которая возвращает строковое представление value. Необходимо при фокусировке. */\n valueToString?: (item: T) => string;\n\n /** Задает размер компонента. */\n size?: SizeProp;\n\n /** Переводит контрол в состояние валидации \"предупреждение\". */\n warning?: boolean;\n\n /** Задает длину комбобокса. */\n width?: string | number;\n\n /** Задает максимальную высоту меню. */\n maxMenuHeight?: number | string;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseenter`). См разницу с onMouseOver в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave) */\n onMouseEnter?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при уходе мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Задает типы вводимых данных. */\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n}\n\nexport interface ComboBoxItem {\n value: string;\n label: string;\n}\n\nexport type ComboBoxExtendedItem<T> = T | (() => React.ReactElement<T>) | React.ReactElement<T>;\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxProps<T>,\n | 'itemToValue'\n | 'valueToString'\n | 'renderValue'\n | 'renderItem'\n | 'menuAlign'\n | 'searchOnFocus'\n | 'drawArrow'\n | 'showClearIcon'\n >\n>;\n\n/**\n * `ComboBox` — это поле ввода со списком подсказок.\n *\n * `ComboBox` используют:\n * * для выбора значения из справочника.\n * * для добавления своего значения в справочник.\n *\n * `ComboBox` может работать в двух режимах — обычном и в режиме автокомплита.\n * Основное их отличие в том, что в режиме автокомплита список вариантов появляется только после ввода первого символа или изменении уже введенного значения.\n */\n@rootNode\nexport class ComboBox<T = ComboBoxItem> extends React.Component<ComboBoxProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBox';\n public static displayName = 'ComboBox';\n\n public static defaultProps: DefaultProps<any> = {\n itemToValue: (item: ComboBoxItem) => item.value,\n valueToString: (item: ComboBoxItem) => item.label,\n renderValue: (item: ComboBoxItem) => item.label,\n renderItem: (item: ComboBoxItem) => item.label,\n menuAlign: 'left',\n searchOnFocus: true,\n drawArrow: true,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBox.defaultProps);\n\n private comboboxElement: Nullable<CustomComboBox<T>> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus(opts?: { withoutOpenDropdown?: boolean }) {\n if (this.comboboxElement) {\n this.comboboxElement.focus(opts);\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.comboboxElement) {\n this.comboboxElement.blur();\n }\n }\n\n /**\n * Открывает выпадающий список и запускает поиск элементов\n *\n * @public\n * @param {string} [query] Текст поиска. По умолчанию берется\n * текст из инпута или результат `valueToString(value)`\n */\n public search(query?: string) {\n if (this.comboboxElement) {\n this.comboboxElement.search(query);\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.comboboxElement) {\n this.comboboxElement.cancelSearch();\n }\n }\n\n /**\n * @public Открывает выпадающий список\n */\n public open() {\n if (this.comboboxElement) {\n this.comboboxElement.open();\n }\n }\n\n /**\n * @public Закрывает выпадающий список\n */\n public close() {\n if (this.comboboxElement) {\n this.comboboxElement.close();\n }\n }\n\n /**\n * Выделяет текст внутри input\n * @public\n */\n public selectInputText() {\n if (this.comboboxElement) {\n this.comboboxElement.selectInputText();\n }\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n if (this.comboboxElement) {\n this.comboboxElement.reset();\n }\n }\n\n public render() {\n return <CustomComboBox {...this.getProps()} size={this.props.size} ref={this.customComboBoxRef} />;\n }\n\n private customComboBoxRef = (element: Nullable<CustomComboBox<T>>) => {\n this.setRootNode(element);\n this.comboboxElement = element;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_CustomComboBox","_rootNode","_createPropsGetter","_class","_ComboBox","ComboBox","exports","rootNode","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","getProps","createPropsGetter","defaultProps","comboboxElement","customComboBoxRef","element","setRootNode","_inheritsLoose2","default","_proto","prototype","focus","opts","blur","search","query","cancelSearch","open","close","selectInputText","reset","render","createElement","CustomComboBox","_extends2","size","props","ref","React","Component","__KONTUR_REACT_UI__","displayName","itemToValue","item","value","valueToString","label","renderValue","renderItem","menuAlign","searchOnFocus","drawArrow","showClearIcon"],"sources":["ComboBox.tsx"],"sourcesContent":["import type { AriaAttributes, HTMLAttributes } from 'react';\nimport React from 'react';\n\nimport { CustomComboBox } from '../../internal/CustomComboBox';\nimport type { Nullable } from '../../typings/utility-types';\nimport type { MenuItemState } from '../MenuItem';\nimport type { ShowClearIcon, InputIconType } from '../Input';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { SizeProp } from '../../lib/types/props';\nimport type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../MaskedInput';\n\nexport interface ComboBoxProps<T>\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>>,\n CommonProps {\n /** Показывать иконку очистки значения в непустом поле:\n * - `always` — всегда показывать иконку\n * - `auto` — показывать иконку при hover/focus\n * - `never` — не показывать иконку\n * При одновременной настройке `showClearIcon` и `rightIcon` показывается иконка очистки.\n * @default never */\n showClearIcon?: ShowClearIcon;\n\n /** Задает выравнивание контента. */\n align?: 'left' | 'center' | 'right';\n\n /** Вызывает функцию поиска getItems при фокусе и очистке поля ввода. */\n searchOnFocus?: boolean;\n\n /** Отображает справа иконку в виде стрелки. */\n drawArrow?: boolean;\n\n /** Устанавливает фокус на контроле после окончания загрузки страницы. */\n autoFocus?: boolean;\n\n /** Убирает обводку. */\n borderless?: boolean;\n\n /** Отключает использование портала для рендеринга меню.\n * См. https://github.com/skbkontur/retail-ui/issues/15 */\n disablePortal?: boolean;\n\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Переводит контрол в состояние валидации \"ошибка\". */\n error?: boolean;\n\n /** Добавляет иконку слева.\n При использовании `ReactNode` применяются дефолтные стили для иконки.\n При использовании `() => ReactNode` применяются только стили для позиционирования. */\n leftIcon?: InputIconType;\n\n /** Добавляет иконку справа.\n При использовании `ReactNode` применяются дефолтные стили для иконки.\n При использовании `() => ReactNode` применяются только стили для позиционирования. */\n rightIcon?: InputIconType;\n\n /** Задает функцию поиска элементов, которая должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются объекты с типом `{ value: string, label: string }`.\n * Элементы могут быть любого типа. В этом случае необходимо определить свойства `itemToValue`, `renderValue`, `renderItem`, `valueToString`. */\n getItems: (query: string) => Promise<Array<ComboBoxExtendedItem<T>>>;\n\n /** Задает функцию сравнения полученных результатов с value. */\n itemToValue?: (item: T) => string | number;\n\n /** Задает максимальную длину инпута. */\n maxLength?: number;\n\n /** Задает текущую позицию выпадающего окна вручную.\n */\n menuPos?: 'top' | 'bottom';\n\n /** Задает выравнивание выпадающего меню. */\n menuAlign?: 'left' | 'right';\n\n /** Задает функцию, которая вызывается при потере комбобоксом фокуса. */\n onBlur?: () => void;\n\n /** Вызывается при изменении `value` */\n onValueChange?: (value: T) => void;\n\n /** Задает функцию, которая вызывается при получении комбобоксом фокуса. */\n onFocus?: () => void;\n\n /** Задает функцию, которая вызывается при изменении текста в поле ввода, если результатом функции будет строка, то она станет следующим состоянием полем ввода. */\n onInputValueChange?: (value: string) => Nullable<string> | void;\n\n /** Задает функцию для обработки ввода строки в инпут и последующей потерей фокуса компонентом.\n * Функция срабатывает с аргументом инпута строки.\n * Если при потере фокуса в выпадающем списке будет только один элемент и результат valueToString с этим элементом будет совпадать со значение в текстовом поле, то сработает onValueChange со значением данного элемента.\n * Сама функция также может вернуть значение, неравное undefined, с которым будет вызван onValueChange. Если возвращаемое значение будет равно null, то сработает очистка текущего значения инпута, а в режиме редактирования токен будет удален. */\n onUnexpectedInput?: (value: string) => void | null | T;\n\n /** Задает текст, который отображается если не введено никакое значение. */\n placeholder?: string;\n\n /** Задает функцию отрисовки элементов результата поиска.\n * Не применяется если элемент является функцией или React-элементом\n * @default item => item.label\n * @param {T} item - элемент из результата поиска.\n * @param {MenuItemState} state? - состояние элемента.\n * @returns {React.ReactNode} React-элемент. */\n renderItem?: (item: T, state?: MenuItemState) => React.ReactNode;\n\n /** Устанавливает компонент, заменяющий собой обёртку элементов результата поиска.\n * По умолчанию все элементы результата поиска оборачиваются в тег <button />.\n * @example\n * itemWrapper={(item) => {\n * if (item.value === 3) {\n * return (props) => {\n * return <a {...props} />\n * }\n * }\n * }}\n */\n itemWrapper?: (item: T) => React.ComponentType;\n\n /** Задает функцию, которая отображает сообщение о пустом результате поиска. При renderAddButton не работает. */\n renderNotFound?: () => React.ReactNode;\n\n /** Задает функцию, которая отображает сообщение об общем количестве элементов.\n * @param {number} found - количество элементов по результатам поиска. Учитывает только компонент MenuItem. Им \"оборачиваются\" элементы, возвращаемые getItems().\n * @param {number} total - количество всех элементов. */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /** Задает функцию, которая отображает выбранное значение.\n * @default item => item.label */\n renderValue?: (item: T) => React.ReactNode;\n\n /** Задает функцию отрисовки кнопки добавления в выпадающем списке. */\n renderAddButton?: (query?: string) => React.ReactNode;\n\n /** Определяет общее количество элементов. Необходим для работы renderTotalCount. */\n totalCount?: number;\n\n /** Устанавливает выбранное в комбобоксе значение. Тип `value` совпадает с типом элементов в массиве, возвращаемом в `getItems`. */\n value?: Nullable<T>;\n\n /** Задает функцию, которая возвращает строковое представление value. Необходимо при фокусировке. */\n valueToString?: (item: T) => string;\n\n /** Задает размер компонента. */\n size?: SizeProp;\n\n /** Переводит контрол в состояние валидации \"предупреждение\". */\n warning?: boolean;\n\n /** Задает длину комбобокса. */\n width?: string | number;\n\n /** Задает максимальную высоту меню. */\n maxMenuHeight?: number | string;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseenter`). См разницу с onMouseOver в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave) */\n onMouseEnter?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при уходе мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent) => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onInputKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Задает типы вводимых данных. */\n inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];\n\n /** Задает функцию, которая вызывается при вставке значения в инпут с маской. */\n onBeforePasteInMask?: MaskedInputOnBeforePasteValue;\n}\n\nexport interface ComboBoxItem {\n value: string;\n label: string;\n}\n\nexport type ComboBoxExtendedItem<T> = T | (() => React.ReactElement<T>) | React.ReactElement<T>;\n\ntype DefaultProps<T> = Required<\n Pick<\n ComboBoxProps<T>,\n | 'itemToValue'\n | 'valueToString'\n | 'renderValue'\n | 'renderItem'\n | 'menuAlign'\n | 'searchOnFocus'\n | 'drawArrow'\n | 'showClearIcon'\n >\n>;\n\n/**\n * `ComboBox` — это поле ввода со списком подсказок.\n *\n * `ComboBox` используют:\n * * для выбора значения из справочника.\n * * для добавления своего значения в справочник.\n *\n * `ComboBox` может работать в двух режимах — обычном и в режиме автокомплита.\n * Основное их отличие в том, что в режиме автокомплита список вариантов появляется только после ввода первого символа или изменении уже введенного значения.\n */\n@rootNode\nexport class ComboBox<T = ComboBoxItem> extends React.Component<ComboBoxProps<T>> {\n public static __KONTUR_REACT_UI__ = 'ComboBox';\n public static displayName = 'ComboBox';\n\n public static defaultProps: DefaultProps<any> = {\n itemToValue: (item: ComboBoxItem) => item.value,\n valueToString: (item: ComboBoxItem) => item.label,\n renderValue: (item: ComboBoxItem) => item.label,\n renderItem: (item: ComboBoxItem) => item.label,\n menuAlign: 'left',\n searchOnFocus: true,\n drawArrow: true,\n showClearIcon: 'never',\n };\n\n private getProps = createPropsGetter(ComboBox.defaultProps);\n\n private comboboxElement: Nullable<CustomComboBox<T>> = null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n\n /**\n * @public\n */\n public focus(opts?: { withoutOpenDropdown?: boolean }) {\n if (this.comboboxElement) {\n this.comboboxElement.focus(opts);\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.comboboxElement) {\n this.comboboxElement.blur();\n }\n }\n\n /**\n * Открывает выпадающий список и запускает поиск элементов\n *\n * @public\n * @param {string} [query] Текст поиска. По умолчанию берется\n * текст из инпута или результат `valueToString(value)`\n */\n public search(query?: string) {\n if (this.comboboxElement) {\n this.comboboxElement.search(query);\n }\n }\n\n /**\n * @public\n */\n public cancelSearch() {\n if (this.comboboxElement) {\n this.comboboxElement.cancelSearch();\n }\n }\n\n /**\n * @public Открывает выпадающий список\n */\n public open() {\n if (this.comboboxElement) {\n this.comboboxElement.open();\n }\n }\n\n /**\n * @public Закрывает выпадающий список\n */\n public close() {\n if (this.comboboxElement) {\n this.comboboxElement.close();\n }\n }\n\n /**\n * Выделяет текст внутри input\n * @public\n */\n public selectInputText() {\n if (this.comboboxElement) {\n this.comboboxElement.selectInputText();\n }\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n if (this.comboboxElement) {\n this.comboboxElement.reset();\n }\n }\n\n public render() {\n return <CustomComboBox {...this.getProps()} size={this.props.size} ref={this.customComboBoxRef} />;\n }\n\n private customComboBoxRef = (element: Nullable<CustomComboBox<T>>) => {\n this.setRootNode(element);\n this.comboboxElement = element;\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -204,8 +204,9 @@ var FixedIMaskInput = exports.FixedIMaskInput = (0, _forwardRefAndName.forwardRe
|
|
|
204
204
|
|
|
205
205
|
function handleInput(e) {var _imaskRef$current10;
|
|
206
206
|
var maskRef = (_imaskRef$current10 = imaskRef.current) == null ? void 0 : _imaskRef$current10.maskRef;
|
|
207
|
-
if (
|
|
208
|
-
//
|
|
207
|
+
if (maskRef && maskRef.rawInputValue === '') {
|
|
208
|
+
// в случае, когда пользователь стер все из инпута, очищаем value полностью
|
|
209
|
+
// иначе в value остаются символы маски
|
|
209
210
|
props.onAccept == null || props.onAccept('', maskRef, e.nativeEvent);
|
|
210
211
|
}
|
|
211
212
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactImask","_forwardRefAndName","_identifiers","_MouseDrag","_excluded","FixedIMaskInput","exports","forwardRefAndName","props","ref","inputRef","restProps","_objectWithoutPropertiesLoose2","default","imaskRef","useRef","focused","useEffect","_imaskRef$current","current","element","fillTypedValue","mouseDrag","MouseDrag","listen","onMouseDragEnd","e","_imaskRef$current2","_imaskRef$current3","direction","mouseDragStartEvent","selectionStart","selectionEnd","pageX","_getSelection","getSelection","start","end","setSelection","useImperativeHandle","createElement","IMaskInput","_extends2","onKeyDown","handleKeyDown","onFocus","handleFocus","onBlur","handleBlur","onMouseUp","handleMouseUp","onAccept","handleAccept","onInput","handleInput","getTypedValue","_imaskRef$current4","_ref","maskRef","masked","_ref$_value","_value","_ref$displayValue","displayValue","getMaxCaretPosition","value","slice","_imaskRef$current5","_imaskRef$current6","_imaskRef$current7","setAttribute","unmaskedValue","maskChars","push","placeholderChar","blocks","Object","values","forEach","_ref2","split","RegExp","join","length","Infinity","normalizeSelection","_getSelection2","max","getNormalizedRange","calc","Math","min","selectionDirection","_imaskRef$current8","_len","arguments","_ref3","Array","_key","setSelectionRange","jumpCaret","prev","headDirection","_imaskRef$current9","word","valueOf","wordRegExp","next","match","reduce","s","a","pos","concat","calcSelection","_getSelection3","isSelectionMode","isModShift","tail","head","someKeys","isKeyArrowLeft","isKeyArrowUp","isKeyHome","step","isKeyArrowHorizontal","increment","isShortcutJumpCaret","setTimeout","_len2","args","_key2","apply","_imaskRef$current10","unmask","rawInputValue","nativeEvent","nearest","isShortcutSelectAll","preventDefault","isKeyArrow","isKeyEnd","_calcSelection"],"sources":["FixedIMaskInput.tsx"],"sourcesContent":["import React, { useEffect, useImperativeHandle, useRef } from 'react';\nimport type { InputMask, MaskedPatternOptions } from '@skbkontur/imask';\nimport type { IMaskInputProps } from '@skbkontur/react-imask';\nimport { IMaskInput } from '@skbkontur/react-imask';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport {\n isKeyArrow,\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowUp,\n isKeyEnd,\n isKeyHome,\n isModShift,\n isShortcutJumpCaret,\n isShortcutSelectAll,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { MouseDrag } from '../../lib/events/MouseDrag';\n\nexport type FixedIMaskInputProps = IMaskInputProps<HTMLInputElement>;\n\ntype HeadDirection = 'left' | 'right';\ntype SelectionDirection = 'forward' | 'backward' | 'none';\ntype SelectionSet = [number, number, SelectionDirection];\n\ninterface IMaskRefType {\n maskRef: InputMask<MaskedPatternOptions>;\n element: HTMLInputElement;\n}\n\nexport const FixedIMaskInput = forwardRefAndName(\n 'FixedIMaskInput',\n function FixedIMaskInput(props: FixedIMaskInputProps, ref: React.Ref<IMaskRefType | null>) {\n const { inputRef, ...restProps } = props;\n const imaskRef = useRef<IMaskRefType>(null);\n const focused = useRef(false);\n\n useEffect(() => {\n if (imaskRef.current?.element) {\n fillTypedValue();\n const mouseDrag = MouseDrag.listen(imaskRef.current.element).onMouseDragEnd((e) => {\n let direction: SelectionDirection = 'none';\n\n if (\n mouseDrag.mouseDragStartEvent &&\n imaskRef.current?.element.selectionStart !== imaskRef.current?.element.selectionEnd\n ) {\n direction = mouseDrag.mouseDragStartEvent.pageX > e.pageX ? 'backward' : 'forward';\n }\n\n const [start, end] = getSelection();\n setSelection(start, end, direction);\n });\n }\n }, []);\n\n useImperativeHandle(ref, () => imaskRef.current, []);\n\n return (\n <IMaskInput\n {...restProps}\n ref={imaskRef}\n inputRef={inputRef}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseUp={handleMouseUp}\n onAccept={handleAccept}\n onInput={handleInput}\n />\n );\n\n function getTypedValue() {\n const { _value = '', displayValue = '' } = imaskRef.current?.maskRef.masked || {};\n const end = getMaxCaretPosition();\n const value = _value !== '' || focused.current === true ? displayValue : '';\n\n return value.slice(0, end);\n }\n\n function fillTypedValue() {\n imaskRef.current?.element.setAttribute('data-typed-value', getTypedValue());\n imaskRef.current?.element.setAttribute('data-unmasked-value', imaskRef.current?.maskRef.unmaskedValue);\n }\n\n function getMaxCaretPosition(): number {\n const maskChars = [];\n if (imaskRef.current) {\n maskChars.push(imaskRef.current.maskRef.masked.placeholderChar);\n if (imaskRef.current.maskRef.masked.blocks) {\n (Object.values(imaskRef.current.maskRef.masked.blocks) as Array<{ placeholderChar?: string }>).forEach(\n ({ placeholderChar }) => placeholderChar && maskChars.push(placeholderChar),\n );\n }\n return imaskRef.current.element.value.split(new RegExp(maskChars.join('|')))[0].length;\n }\n\n return Infinity;\n }\n\n function normalizeSelection() {\n const [start, end] = getSelection();\n const max = getMaxCaretPosition();\n if (end > max) {\n setSelection(start, max);\n }\n }\n\n function getNormalizedRange(calc: number | unknown) {\n return typeof calc === 'number' ? Math.min(getMaxCaretPosition(), Math.max(0, calc)) : 0;\n }\n\n function getSelection(): SelectionSet {\n if (imaskRef.current) {\n return [\n imaskRef.current.element.selectionStart || 0,\n imaskRef.current.element.selectionEnd || 0,\n imaskRef.current.element.selectionDirection || 'none',\n ];\n }\n return [0, 0, 'none'];\n }\n\n function setSelection(...[start, end, direction]: Parameters<HTMLInputElement['setSelectionRange']>) {\n imaskRef.current?.element.setSelectionRange(\n getNormalizedRange(start),\n getNormalizedRange(end),\n direction || 'none',\n );\n }\n\n function jumpCaret(prev: number, headDirection: HeadDirection) {\n const word = /а-яa-z0-9_/.valueOf();\n const wordRegExp = new RegExp(`([${word}])+[\\\\s]*|([^${word}])+`, 'gi');\n let next = headDirection === 'right' ? prev : 0;\n imaskRef.current?.element.value.match(wordRegExp)?.reduce<number[]>((s, a) => {\n const pos = a.length + (s.slice(-1)[0] || 0);\n if (headDirection === 'right' && next === prev && next < pos) {\n next = getNormalizedRange(pos);\n } else if (headDirection === 'left' && prev > pos) {\n next = getNormalizedRange(pos);\n }\n return [...s, pos];\n }, []);\n return next;\n }\n\n /**\n * Вычислят положение каретки при управлении клавишами\n * @param e\n */\n function calcSelection(e: React.KeyboardEvent<HTMLInputElement>): SelectionSet {\n const [start, end, direction] = getSelection();\n const isSelectionMode = isModShift()(e);\n let tail = start !== end && direction === 'backward' ? end : start;\n let head = start !== end && direction === 'backward' ? start : end;\n const headDirection: HeadDirection = someKeys(isKeyArrowLeft, isKeyArrowUp, isKeyHome)(e) ? 'left' : 'right';\n const step = isKeyArrowHorizontal(e) ? 1 : Infinity;\n const increment = headDirection === 'left' ? -step : step;\n if (isShortcutJumpCaret(e)) {\n head = jumpCaret(head, headDirection);\n } else if (head !== tail && !isSelectionMode && isKeyArrowHorizontal(e)) {\n head = headDirection === 'right' ? Math.max(tail, head) : Math.min(tail, head);\n } else {\n head = head + increment;\n }\n if (isSelectionMode) {\n const start = Math.min(tail, head);\n const end = Math.max(tail, head);\n return [getNormalizedRange(start), getNormalizedRange(end), end === head ? 'forward' : 'backward'];\n }\n tail = head;\n return [getNormalizedRange(tail), getNormalizedRange(head), 'none'];\n }\n\n function handleMouseUp(e: React.MouseEvent<HTMLInputElement>) {\n normalizeSelection();\n\n props.onMouseUp?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n focused.current = true;\n fillTypedValue();\n\n setTimeout(normalizeSelection);\n\n props.onFocus?.(e);\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n focused.current = false;\n fillTypedValue();\n\n props.onBlur?.(e);\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n fillTypedValue();\n\n props.onAccept?.(...args);\n }\n\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const maskRef = imaskRef.current?.maskRef;\n if (restProps.unmask && maskRef && maskRef.rawInputValue === '' && maskRef.unmaskedValue !== '') {\n // Для случаев, когда в value остаются только зафиксированные - {} - очищаем value полностью\n props.onAccept?.('', maskRef, e.nativeEvent as InputEvent);\n }\n\n props.onInput?.(e);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const nearest = getMaxCaretPosition();\n if (isShortcutSelectAll(e)) {\n e.preventDefault();\n setSelection(0, nearest);\n } else if (isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e)) {\n e.preventDefault();\n const [start, end, direction] = calcSelection(e);\n setSelection(start, end, direction);\n }\n\n props.onKeyDown?.(e);\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactImask","_forwardRefAndName","_identifiers","_MouseDrag","_excluded","FixedIMaskInput","exports","forwardRefAndName","props","ref","inputRef","restProps","_objectWithoutPropertiesLoose2","default","imaskRef","useRef","focused","useEffect","_imaskRef$current","current","element","fillTypedValue","mouseDrag","MouseDrag","listen","onMouseDragEnd","e","_imaskRef$current2","_imaskRef$current3","direction","mouseDragStartEvent","selectionStart","selectionEnd","pageX","_getSelection","getSelection","start","end","setSelection","useImperativeHandle","createElement","IMaskInput","_extends2","onKeyDown","handleKeyDown","onFocus","handleFocus","onBlur","handleBlur","onMouseUp","handleMouseUp","onAccept","handleAccept","onInput","handleInput","getTypedValue","_imaskRef$current4","_ref","maskRef","masked","_ref$_value","_value","_ref$displayValue","displayValue","getMaxCaretPosition","value","slice","_imaskRef$current5","_imaskRef$current6","_imaskRef$current7","setAttribute","unmaskedValue","maskChars","push","placeholderChar","blocks","Object","values","forEach","_ref2","split","RegExp","join","length","Infinity","normalizeSelection","_getSelection2","max","getNormalizedRange","calc","Math","min","selectionDirection","_imaskRef$current8","_len","arguments","_ref3","Array","_key","setSelectionRange","jumpCaret","prev","headDirection","_imaskRef$current9","word","valueOf","wordRegExp","next","match","reduce","s","a","pos","concat","calcSelection","_getSelection3","isSelectionMode","isModShift","tail","head","someKeys","isKeyArrowLeft","isKeyArrowUp","isKeyHome","step","isKeyArrowHorizontal","increment","isShortcutJumpCaret","setTimeout","_len2","args","_key2","apply","_imaskRef$current10","rawInputValue","nativeEvent","nearest","isShortcutSelectAll","preventDefault","isKeyArrow","isKeyEnd","_calcSelection"],"sources":["FixedIMaskInput.tsx"],"sourcesContent":["import React, { useEffect, useImperativeHandle, useRef } from 'react';\nimport type { InputMask, MaskedPatternOptions } from '@skbkontur/imask';\nimport type { IMaskInputProps } from '@skbkontur/react-imask';\nimport { IMaskInput } from '@skbkontur/react-imask';\n\nimport { forwardRefAndName } from '../../lib/forwardRefAndName';\nimport {\n isKeyArrow,\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowUp,\n isKeyEnd,\n isKeyHome,\n isModShift,\n isShortcutJumpCaret,\n isShortcutSelectAll,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { MouseDrag } from '../../lib/events/MouseDrag';\n\nexport type FixedIMaskInputProps = IMaskInputProps<HTMLInputElement>;\n\ntype HeadDirection = 'left' | 'right';\ntype SelectionDirection = 'forward' | 'backward' | 'none';\ntype SelectionSet = [number, number, SelectionDirection];\n\ninterface IMaskRefType {\n maskRef: InputMask<MaskedPatternOptions>;\n element: HTMLInputElement;\n}\n\nexport const FixedIMaskInput = forwardRefAndName(\n 'FixedIMaskInput',\n function FixedIMaskInput(props: FixedIMaskInputProps, ref: React.Ref<IMaskRefType | null>) {\n const { inputRef, ...restProps } = props;\n const imaskRef = useRef<IMaskRefType>(null);\n const focused = useRef(false);\n\n useEffect(() => {\n if (imaskRef.current?.element) {\n fillTypedValue();\n const mouseDrag = MouseDrag.listen(imaskRef.current.element).onMouseDragEnd((e) => {\n let direction: SelectionDirection = 'none';\n\n if (\n mouseDrag.mouseDragStartEvent &&\n imaskRef.current?.element.selectionStart !== imaskRef.current?.element.selectionEnd\n ) {\n direction = mouseDrag.mouseDragStartEvent.pageX > e.pageX ? 'backward' : 'forward';\n }\n\n const [start, end] = getSelection();\n setSelection(start, end, direction);\n });\n }\n }, []);\n\n useImperativeHandle(ref, () => imaskRef.current, []);\n\n return (\n <IMaskInput\n {...restProps}\n ref={imaskRef}\n inputRef={inputRef}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseUp={handleMouseUp}\n onAccept={handleAccept}\n onInput={handleInput}\n />\n );\n\n function getTypedValue() {\n const { _value = '', displayValue = '' } = imaskRef.current?.maskRef.masked || {};\n const end = getMaxCaretPosition();\n const value = _value !== '' || focused.current === true ? displayValue : '';\n\n return value.slice(0, end);\n }\n\n function fillTypedValue() {\n imaskRef.current?.element.setAttribute('data-typed-value', getTypedValue());\n imaskRef.current?.element.setAttribute('data-unmasked-value', imaskRef.current?.maskRef.unmaskedValue);\n }\n\n function getMaxCaretPosition(): number {\n const maskChars = [];\n if (imaskRef.current) {\n maskChars.push(imaskRef.current.maskRef.masked.placeholderChar);\n if (imaskRef.current.maskRef.masked.blocks) {\n (Object.values(imaskRef.current.maskRef.masked.blocks) as Array<{ placeholderChar?: string }>).forEach(\n ({ placeholderChar }) => placeholderChar && maskChars.push(placeholderChar),\n );\n }\n return imaskRef.current.element.value.split(new RegExp(maskChars.join('|')))[0].length;\n }\n\n return Infinity;\n }\n\n function normalizeSelection() {\n const [start, end] = getSelection();\n const max = getMaxCaretPosition();\n if (end > max) {\n setSelection(start, max);\n }\n }\n\n function getNormalizedRange(calc: number | unknown) {\n return typeof calc === 'number' ? Math.min(getMaxCaretPosition(), Math.max(0, calc)) : 0;\n }\n\n function getSelection(): SelectionSet {\n if (imaskRef.current) {\n return [\n imaskRef.current.element.selectionStart || 0,\n imaskRef.current.element.selectionEnd || 0,\n imaskRef.current.element.selectionDirection || 'none',\n ];\n }\n return [0, 0, 'none'];\n }\n\n function setSelection(...[start, end, direction]: Parameters<HTMLInputElement['setSelectionRange']>) {\n imaskRef.current?.element.setSelectionRange(\n getNormalizedRange(start),\n getNormalizedRange(end),\n direction || 'none',\n );\n }\n\n function jumpCaret(prev: number, headDirection: HeadDirection) {\n const word = /а-яa-z0-9_/.valueOf();\n const wordRegExp = new RegExp(`([${word}])+[\\\\s]*|([^${word}])+`, 'gi');\n let next = headDirection === 'right' ? prev : 0;\n imaskRef.current?.element.value.match(wordRegExp)?.reduce<number[]>((s, a) => {\n const pos = a.length + (s.slice(-1)[0] || 0);\n if (headDirection === 'right' && next === prev && next < pos) {\n next = getNormalizedRange(pos);\n } else if (headDirection === 'left' && prev > pos) {\n next = getNormalizedRange(pos);\n }\n return [...s, pos];\n }, []);\n return next;\n }\n\n /**\n * Вычислят положение каретки при управлении клавишами\n * @param e\n */\n function calcSelection(e: React.KeyboardEvent<HTMLInputElement>): SelectionSet {\n const [start, end, direction] = getSelection();\n const isSelectionMode = isModShift()(e);\n let tail = start !== end && direction === 'backward' ? end : start;\n let head = start !== end && direction === 'backward' ? start : end;\n const headDirection: HeadDirection = someKeys(isKeyArrowLeft, isKeyArrowUp, isKeyHome)(e) ? 'left' : 'right';\n const step = isKeyArrowHorizontal(e) ? 1 : Infinity;\n const increment = headDirection === 'left' ? -step : step;\n if (isShortcutJumpCaret(e)) {\n head = jumpCaret(head, headDirection);\n } else if (head !== tail && !isSelectionMode && isKeyArrowHorizontal(e)) {\n head = headDirection === 'right' ? Math.max(tail, head) : Math.min(tail, head);\n } else {\n head = head + increment;\n }\n if (isSelectionMode) {\n const start = Math.min(tail, head);\n const end = Math.max(tail, head);\n return [getNormalizedRange(start), getNormalizedRange(end), end === head ? 'forward' : 'backward'];\n }\n tail = head;\n return [getNormalizedRange(tail), getNormalizedRange(head), 'none'];\n }\n\n function handleMouseUp(e: React.MouseEvent<HTMLInputElement>) {\n normalizeSelection();\n\n props.onMouseUp?.(e);\n }\n\n function handleFocus(e: React.FocusEvent<HTMLInputElement>) {\n focused.current = true;\n fillTypedValue();\n\n setTimeout(normalizeSelection);\n\n props.onFocus?.(e);\n }\n\n function handleBlur(e: React.FocusEvent<HTMLInputElement>) {\n focused.current = false;\n fillTypedValue();\n\n props.onBlur?.(e);\n }\n\n function handleAccept(...args: Parameters<Required<IMaskInputProps<HTMLInputElement>>['onAccept']>) {\n fillTypedValue();\n\n props.onAccept?.(...args);\n }\n\n function handleInput(e: React.ChangeEvent<HTMLInputElement>) {\n const maskRef = imaskRef.current?.maskRef;\n if (maskRef && maskRef.rawInputValue === '') {\n // в случае, когда пользователь стер все из инпута, очищаем value полностью\n // иначе в value остаются символы маски\n props.onAccept?.('', maskRef, e.nativeEvent as InputEvent);\n }\n\n props.onInput?.(e);\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n const nearest = getMaxCaretPosition();\n if (isShortcutSelectAll(e)) {\n e.preventDefault();\n setSelection(0, nearest);\n } else if (isKeyArrow(e) || isKeyEnd(e) || isKeyHome(e)) {\n e.preventDefault();\n const [start, end, direction] = calcSelection(e);\n setSelection(start, end, direction);\n }\n\n props.onKeyDown?.(e);\n }\n },\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IMaskInputProps } from '@skbkontur/react-imask';
|
|
2
2
|
import type { InputProps, InputType } from '../Input';
|
|
3
3
|
import { Input } from '../Input';
|
|
4
|
+
export type MaskedInputOnBeforePasteValue = (value: string) => string;
|
|
4
5
|
export interface MaskedProps {
|
|
5
6
|
/** Паттерн маски */
|
|
6
7
|
mask: string;
|
|
@@ -21,6 +22,13 @@ export interface MaskedProps {
|
|
|
21
22
|
* @param blink вспыхнуть акцентным цвтетом.
|
|
22
23
|
*/
|
|
23
24
|
onUnexpectedInput?: (value: string, blink: () => void) => void;
|
|
25
|
+
/** Задает обработчик вставки значения в инпут.
|
|
26
|
+
* В value будет передано значение из буфера обмена.
|
|
27
|
+
* Возвращаемое значение будет использовано как значение инпута.
|
|
28
|
+
* Используется для фильтрации значения при вставке из буфера обмена.
|
|
29
|
+
* @param value значение вставки.
|
|
30
|
+
*/
|
|
31
|
+
onBeforePasteValue?: MaskedInputOnBeforePasteValue;
|
|
24
32
|
/** Убирает из value символы, не введённые пользователем
|
|
25
33
|
* @default false */
|
|
26
34
|
unmask?: boolean;
|
|
@@ -12,7 +12,17 @@ var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
|
12
12
|
var _MaskedInput = require("./MaskedInput.styles");
|
|
13
13
|
var _MaskedInput2 = require("./MaskedInput.helpers");
|
|
14
14
|
var _ColorableInputElement = require("./ColorableInputElement");
|
|
15
|
-
var _FixedIMaskInput = require("./FixedIMaskInput");var _excluded = ["mask", "maskChar", "formatChars", "alwaysShowMask", "colored", "imaskProps", "unmask", "onValueChange", "onUnexpectedInput", "onChange", "element", "className"];
|
|
15
|
+
var _FixedIMaskInput = require("./FixedIMaskInput");var _excluded = ["mask", "maskChar", "formatChars", "alwaysShowMask", "colored", "imaskProps", "unmask", "onValueChange", "onUnexpectedInput", "onChange", "onBeforePasteValue", "element", "className"];
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
16
26
|
|
|
17
27
|
|
|
18
28
|
|
|
@@ -101,7 +111,8 @@ var MaskedInput = exports.MaskedInput = (0, _forwardRefAndName.forwardRefAndName
|
|
|
101
111
|
|
|
102
112
|
|
|
103
113
|
|
|
104
|
-
|
|
114
|
+
|
|
115
|
+
props.mask,maskChar = props.maskChar,formatChars = props.formatChars,_props$alwaysShowMask = props.alwaysShowMask,alwaysShowMask = _props$alwaysShowMask === void 0 ? false : _props$alwaysShowMask,_props$colored = props.colored,colored = _props$colored === void 0 ? true : _props$colored,_props$imaskProps = props.imaskProps,customIMaskProps = _props$imaskProps === void 0 ? {} : _props$imaskProps,_props$unmask = props.unmask,unmask = _props$unmask === void 0 ? false : _props$unmask,onValueChange = props.onValueChange,onUnexpectedInput = props.onUnexpectedInput,onChange = props.onChange,onBeforePasteValue = props.onBeforePasteValue,element = props.element,className = props.className,inputProps = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
105
116
|
var theme = (0, _react.useContext)(_ThemeContext.ThemeContext);
|
|
106
117
|
|
|
107
118
|
var inputRef = (0, _react.useRef)(null);
|
|
@@ -147,6 +158,7 @@ var MaskedInput = exports.MaskedInput = (0, _forwardRefAndName.forwardRefAndName
|
|
|
147
158
|
onBlur: handleBlur,
|
|
148
159
|
onInput: handleInput,
|
|
149
160
|
onKeyDown: handleKeyDown,
|
|
161
|
+
onPaste: handlePaste,
|
|
150
162
|
className: (0, _Emotion.cx)(_MaskedInput.globalClasses.root, uiFontGlobalClassesRoot, className, _MaskedInput.styles.root(theme)),
|
|
151
163
|
element:
|
|
152
164
|
colored ? /*#__PURE__*/
|
|
@@ -160,6 +172,15 @@ var MaskedInput = exports.MaskedInput = (0, _forwardRefAndName.forwardRefAndName
|
|
|
160
172
|
));
|
|
161
173
|
|
|
162
174
|
|
|
175
|
+
function handlePaste(event) {
|
|
176
|
+
if (onBeforePasteValue && onValueChange) {var _event$clipboardData$, _event$clipboardData;
|
|
177
|
+
event.preventDefault();
|
|
178
|
+
onValueChange == null || onValueChange(onBeforePasteValue((_event$clipboardData$ = (_event$clipboardData = event.clipboardData) == null ? void 0 : _event$clipboardData.getData('text')) != null ? _event$clipboardData$ : ''));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
props.onPaste == null || props.onPaste(event);
|
|
182
|
+
}
|
|
183
|
+
|
|
163
184
|
function getCompatibleIMaskProps() {
|
|
164
185
|
return (0, _extends2.default)({
|
|
165
186
|
mask: mask.replace(/0/g, '{\\0}'),
|
|
@@ -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","element","className","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","cx","globalClasses","root","styles","ColorableInputElement","showOnFocus","FixedIMaskInput","onAccept","handleAccept","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 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 /** Убирает из 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 element,\n className,\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 className={cx(globalClasses.root, uiFontGlobalClassesRoot, className, styles.root(theme))}\n element={\n colored ? (\n <ColorableInputElement showOnFocus={false}>\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n </ColorableInputElement>\n ) : (\n <FixedIMaskInput {...imaskProps} onAccept={handleAccept} />\n )\n }\n />\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","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 ...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}>\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":[]}
|
|
@@ -10,8 +10,9 @@ import type { CommonProps } from '../CommonWrapper';
|
|
|
10
10
|
import type { TGetRootNode } from '../../lib/rootNode';
|
|
11
11
|
import type { ComboBoxExtendedItem } from '../../components/ComboBox';
|
|
12
12
|
import type { SizeProp } from '../../lib/types/props';
|
|
13
|
+
import type { MaskedInputOnBeforePasteValue, MaskedInputProps } from '../../components/MaskedInput';
|
|
13
14
|
import { ComboBoxRequestStatus } from './CustomComboBoxTypes';
|
|
14
|
-
interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, CommonProps {
|
|
15
|
+
interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, CommonProps, Partial<Pick<MaskedInputProps, 'mask' | 'maskChar' | 'formatChars'>> {
|
|
15
16
|
align?: 'left' | 'center' | 'right';
|
|
16
17
|
autoFocus?: boolean;
|
|
17
18
|
borderless?: boolean;
|
|
@@ -47,6 +48,7 @@ interface ComboBoxViewProps<T> extends Pick<AriaAttributes, 'aria-describedby' |
|
|
|
47
48
|
leftIcon?: InputIconType;
|
|
48
49
|
rightIcon?: InputIconType;
|
|
49
50
|
inputMode?: React.HTMLAttributes<HTMLInputElement>['inputMode'];
|
|
51
|
+
onBeforePasteInMask?: MaskedInputOnBeforePasteValue;
|
|
50
52
|
onValueChange?: (value: T) => void;
|
|
51
53
|
onClickOutside?: (e: Event) => void;
|
|
52
54
|
onFocus?: () => void;
|
|
@@ -26,6 +26,10 @@ var _Popup = require("../Popup");
|
|
|
26
26
|
var _getMenuPositions = require("../../lib/getMenuPositions");
|
|
27
27
|
var _ZIndex = require("../ZIndex");
|
|
28
28
|
|
|
29
|
+
var _MaskedInput = require("../../components/MaskedInput");
|
|
30
|
+
var _MaskedInput2 = require("../../components/MaskedInput/MaskedInput.styles");
|
|
31
|
+
var _Emotion = require("../../lib/theming/Emotion");
|
|
32
|
+
|
|
29
33
|
var _ArrowDownIcon = require("./ArrowDownIcon");
|
|
30
34
|
var _ComboBoxMenu = require("./ComboBoxMenu");
|
|
31
35
|
var _CustomComboBoxTypes = require("./CustomComboBoxTypes");
|
|
@@ -113,6 +117,8 @@ var _getComboBoxTheme = require("./getComboBoxTheme");var _class, _ComboBoxView;
|
|
|
113
117
|
|
|
114
118
|
|
|
115
119
|
|
|
120
|
+
|
|
121
|
+
|
|
116
122
|
|
|
117
123
|
|
|
118
124
|
|
|
@@ -399,6 +405,22 @@ ComboBoxView = exports.ComboBoxView = (0, _decorator.responsiveLayout)(_class =
|
|
|
399
405
|
|
|
400
406
|
|
|
401
407
|
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
|
|
402
424
|
|
|
403
425
|
|
|
404
426
|
|
|
@@ -461,4 +483,4 @@ ComboBoxView = exports.ComboBoxView = (0, _decorator.responsiveLayout)(_class =
|
|
|
461
483
|
|
|
462
484
|
refMobileInput = function (input) {
|
|
463
485
|
_this.mobileInput = input;
|
|
464
|
-
};return _this;}(0, _inheritsLoose2.default)(ComboBoxView, _React$Component);var _proto = ComboBoxView.prototype;_proto.componentDidMount = function componentDidMount() {this.updateAnchorElement();if (this.props.autoFocus && this.props.onFocus) {this.props.onFocus();}};_proto.updateAnchorElement = function updateAnchorElement() {var parent = this.getParent();var anchorElement = this.state.anchorElement;if (anchorElement !== parent) {this.setState({ anchorElement: parent });}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var input = this.input,props = this.props;this.updateAnchorElement();if (props.editing && !prevProps.editing && input) {input.focus();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = (0, _getComboBoxTheme.getComboBoxTheme)(theme);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _this2.theme }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this$props4 = this.props,onMouseEnter = _this$props4.onMouseEnter,onMouseLeave = _this$props4.onMouseLeave,onMouseOver = _this$props4.onMouseOver,opened = _this$props4.opened;var _this$getProps3 = this.getProps(),onClickOutside = _this$getProps3.onClickOutside,onFocusOutside = _this$getProps3.onFocusOutside,width = _this$getProps3.width;var isMobile = this.isMobileLayout;var input = this.renderInput();return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: onClickOutside, onFocusOutside: onFocusOutside, active: opened }, /*#__PURE__*/_react.default.createElement("span", { "data-tid": _CustomComboBox2.CustomComboBoxDataTids.comboBoxView, style: { width: width }, className: _CustomComboBox.styles.root(), onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseOver: onMouseOver, ref: this.setRootNode }, input, isMobile ? this.renderMobileMenu() : this.renderMenu())));};_proto.renderInput = function renderInput() {var isMobile = this.isMobileLayout;var _this$props5 = this.props,id = _this$props5.id,align = _this$props5.align,borderless = _this$props5.borderless,disabled = _this$props5.disabled,editing = _this$props5.editing,error = _this$props5.error,onFocus = _this$props5.onFocus,onInputBlur = _this$props5.onInputBlur,onInputValueChange = _this$props5.onInputValueChange,onInputFocus = _this$props5.onInputFocus,onInputClick = _this$props5.onInputClick,onInputKeyDown = _this$props5.onInputKeyDown,placeholder = _this$props5.placeholder,textValue = _this$props5.textValue,value = _this$props5.value,warning = _this$props5.warning,refInputLikeText = _this$props5.refInputLikeText,leftIcon = _this$props5.leftIcon,inputMode = _this$props5.inputMode,size = _this$props5.size,ariaDescribedby = _this$props5['aria-describedby'],ariaLabel = _this$props5['aria-label'],showClearIcon = _this$props5.showClearIcon
|
|
486
|
+
};return _this;}(0, _inheritsLoose2.default)(ComboBoxView, _React$Component);var _proto = ComboBoxView.prototype;_proto.componentDidMount = function componentDidMount() {this.updateAnchorElement();if (this.props.autoFocus && this.props.onFocus) {this.props.onFocus();}};_proto.updateAnchorElement = function updateAnchorElement() {var parent = this.getParent();var anchorElement = this.state.anchorElement;if (anchorElement !== parent) {this.setState({ anchorElement: parent });}};_proto.componentDidUpdate = function componentDidUpdate(prevProps) {var input = this.input,props = this.props;this.updateAnchorElement();if (props.editing && !prevProps.editing && input) {input.focus();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = (0, _getComboBoxTheme.getComboBoxTheme)(theme);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _this2.theme }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this$props4 = this.props,onMouseEnter = _this$props4.onMouseEnter,onMouseLeave = _this$props4.onMouseLeave,onMouseOver = _this$props4.onMouseOver,opened = _this$props4.opened;var _this$getProps3 = this.getProps(),onClickOutside = _this$getProps3.onClickOutside,onFocusOutside = _this$getProps3.onFocusOutside,width = _this$getProps3.width;var isMobile = this.isMobileLayout;var input = this.renderInput();return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: onClickOutside, onFocusOutside: onFocusOutside, active: opened }, /*#__PURE__*/_react.default.createElement("span", { "data-tid": _CustomComboBox2.CustomComboBoxDataTids.comboBoxView, style: { width: width }, className: _CustomComboBox.styles.root(), onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave, onMouseOver: onMouseOver, ref: this.setRootNode }, input, isMobile ? this.renderMobileMenu() : this.renderMenu())));};_proto.renderInput = function renderInput() {var isMobile = this.isMobileLayout;var _this$props5 = this.props,id = _this$props5.id,align = _this$props5.align,borderless = _this$props5.borderless,disabled = _this$props5.disabled,editing = _this$props5.editing,error = _this$props5.error,onFocus = _this$props5.onFocus,onInputBlur = _this$props5.onInputBlur,onInputValueChange = _this$props5.onInputValueChange,onInputFocus = _this$props5.onInputFocus,onInputClick = _this$props5.onInputClick,onInputKeyDown = _this$props5.onInputKeyDown,placeholder = _this$props5.placeholder,textValue = _this$props5.textValue,value = _this$props5.value,warning = _this$props5.warning,refInputLikeText = _this$props5.refInputLikeText,leftIcon = _this$props5.leftIcon,inputMode = _this$props5.inputMode,size = _this$props5.size,ariaDescribedby = _this$props5['aria-describedby'],ariaLabel = _this$props5['aria-label'],showClearIcon = _this$props5.showClearIcon,mask = _this$props5.mask,maskChar = _this$props5.maskChar,formatChars = _this$props5.formatChars,onBeforePasteInMask = _this$props5.onBeforePasteInMask;var rightIcon = this.getRightIcon();if (editing) {var inputProps = { id: id, align: align, borderless: borderless, disabled: disabled, error: error, onBlur: isMobile ? undefined : onInputBlur, onValueChange: onInputValueChange, onFocus: onInputFocus, onClick: isMobile ? this.handleMobileFocus : onInputClick, leftIcon: leftIcon, rightIcon: rightIcon, value: textValue || '', onKeyDown: onInputKeyDown, placeholder: placeholder, width: '100%', size: size, warning: warning, inputMode: inputMode, autoComplete: 'off', 'aria-describedby': ariaDescribedby, 'aria-controls': this.menuId, 'aria-label': ariaLabel, showClearIcon: showClearIcon };if (mask) {return /*#__PURE__*/_react.default.createElement(_MaskedInput.MaskedInput, (0, _extends2.default)({ ref: this.refInput }, inputProps, { type: "text", mask: mask, maskChar: maskChar, formatChars: formatChars, onBeforePasteValue: onBeforePasteInMask }));}return /*#__PURE__*/_react.default.createElement(_Input.Input, (0, _extends2.default)({ ref: this.refInput, maxLength: this.props.maxLength }, inputProps));}var _this$getProps4 = this.getProps(),renderValue = _this$getProps4.renderValue;return /*#__PURE__*/_react.default.createElement(_InputLikeText.InputLikeText, { id: id, align: align, borderless: borderless, error: error, onFocus: onFocus, leftIcon: leftIcon, rightIcon: rightIcon, disabled: disabled, warning: warning, placeholder: placeholder, size: size, width: "100%", ref: refInputLikeText, "aria-describedby": ariaDescribedby, "aria-controls": this.menuId, showClearIcon: showClearIcon, className: (0, _Emotion.cx)(mask && _MaskedInput2.styles.root(this.theme)), onClearCrossClick: this.props.onClearCrossClick }, (0, _utils.isNonNullable)(value) && renderValue ? renderValue(value) : null);};return ComboBoxView;}(_react.default.Component), _ComboBoxView.__KONTUR_REACT_UI__ = 'ComboBoxView', _ComboBoxView.displayName = 'ComboBoxView', _ComboBoxView.defaultProps = { renderItem: function renderItem(item) {return item;}, renderValue: function renderValue(item) {return item;}, renderAddButton: function renderAddButton() {return null;}, repeatRequest: function repeatRequest() {return undefined;}, requestStatus: _CustomComboBoxTypes.ComboBoxRequestStatus.Unknown, onClickOutside: function onClickOutside() {/**/}, onFocusOutside: function onFocusOutside() {/**/}, size: 'small', width: 250, showClearIcon: 'never' }, _ComboBoxView)) || _class) || _class;
|