@skbkontur/react-ui 6.4.4 → 6.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 +11 -0
- package/components/TokenInput/TokenInput.d.ts +2 -0
- package/components/TokenInput/TokenInput.js +68 -23
- package/components/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.styles.d.ts +1 -0
- package/components/TokenInput/TokenInput.styles.js +7 -4
- package/components/TokenInput/TokenInput.styles.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
## [6.4.5](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@6.4.4...@skbkontur/react-ui@6.4.5) (2026-10-21)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **TokenInput:** deselect tokens upon shift selection ([c830f52](https://github.com/skbkontur/retail-ui/commit/c830f52cc691e7e1c63bcfbcff3bd4819b1d157b))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [6.4.4](https://github.com/skbkontur/retail-ui/compare/@skbkontur/react-ui@6.4.3...@skbkontur/react-ui@6.4.4) (2026-10-13)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -155,6 +155,7 @@ export declare class TokenInput<T = string> extends React.PureComponent<TokenInp
|
|
|
155
155
|
private textHelper;
|
|
156
156
|
private wrapper;
|
|
157
157
|
private scrollContainerRef;
|
|
158
|
+
private scrollContainerInnerRef;
|
|
158
159
|
getRootNode: TGetRootNode;
|
|
159
160
|
private setRootNode;
|
|
160
161
|
private memoizedTokens;
|
|
@@ -238,6 +239,7 @@ export declare class TokenInput<T = string> extends React.PureComponent<TokenInp
|
|
|
238
239
|
private selectInputText;
|
|
239
240
|
private handleWrapperKeyDown;
|
|
240
241
|
private handleWrapperArrows;
|
|
242
|
+
private scrollToSelection;
|
|
241
243
|
private handleWrapperArrowsWithoutShift;
|
|
242
244
|
private handleWrapperArrowsWithShift;
|
|
243
245
|
private handleValueChange;
|
|
@@ -148,6 +148,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
148
148
|
_this.textHelper = null;
|
|
149
149
|
_this.wrapper = null;
|
|
150
150
|
_this.scrollContainerRef = React.createRef();
|
|
151
|
+
_this.scrollContainerInnerRef = React.createRef();
|
|
151
152
|
_this.memoizedTokens = new Map();
|
|
152
153
|
_this.menuNavigatedByUser = false;
|
|
153
154
|
_this.requestId = 0;
|
|
@@ -199,6 +200,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
199
200
|
_c));
|
|
200
201
|
var placeholder = selectedItems.length === 0 && !inputValue ? _this.props.placeholder : '';
|
|
201
202
|
var inputNode = (React.createElement(TokenView, { size: _this.size, className: _this.cx((_d = {},
|
|
203
|
+
_d[_this.styles.inputWrapperDisabled()] = !!disabled,
|
|
202
204
|
// input растягивается на всю ширину чтобы placeholder не обрезался
|
|
203
205
|
_d[_this.styles.inputPlaceholderWrapper()] = Boolean(placeholder),
|
|
204
206
|
_d)), hideCloseButton: Boolean(placeholder) },
|
|
@@ -211,7 +213,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
211
213
|
_this.renderTokensEnd(interactive),
|
|
212
214
|
_this.isEditingMode ? (React.createElement(TokenView, { size: _this.size },
|
|
213
215
|
React.createElement("span", { className: _this.styles.reservedInput(theme) }, reservedInputValue))) : null));
|
|
214
|
-
var container = maxHeight && !isMobileFooter ? (React.createElement(ScrollContainer, { className: _this.styles.inputPlaceholderScrollWrapper(), scrollRef: _this.
|
|
216
|
+
var container = maxHeight && !isMobileFooter ? (React.createElement(ScrollContainer, { ref: _this.scrollContainerRef, className: _this.styles.inputPlaceholderScrollWrapper(), scrollRef: _this.scrollContainerInnerRef, maxHeight: maxHeight, showScrollBar: "always", style: { width: '100%' } }, inner)) : (inner);
|
|
215
217
|
var labelStyle = {
|
|
216
218
|
width: fieldWidth,
|
|
217
219
|
};
|
|
@@ -362,7 +364,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
362
364
|
var _a;
|
|
363
365
|
// Имитируем поведение label, когда задан maxHeight.
|
|
364
366
|
if (_this.props.maxHeight &&
|
|
365
|
-
e.target === _this.
|
|
367
|
+
e.target === _this.scrollContainerInnerRef.current &&
|
|
366
368
|
(_this.state.activeTokens.length !== 0 || !_this.state.inFocus)) {
|
|
367
369
|
_this.dispatch({ type: 'BLUR' });
|
|
368
370
|
_this.dispatch({ type: 'SET_FOCUS_IN' });
|
|
@@ -576,7 +578,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
576
578
|
var index = _this.getAvailableTokenIndex(_this.getProps().selectedItems.length);
|
|
577
579
|
var itemNew = _this.getProps().selectedItems[index];
|
|
578
580
|
if (itemNew) {
|
|
579
|
-
_this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });
|
|
581
|
+
_this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] }, _this.scrollToSelection);
|
|
580
582
|
}
|
|
581
583
|
}
|
|
582
584
|
break;
|
|
@@ -638,33 +640,82 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
638
640
|
var selectedItems = _this.getProps().selectedItems;
|
|
639
641
|
var activeTokens = _this.state.activeTokens;
|
|
640
642
|
var activeItemIndex = selectedItems.indexOf(activeTokens[0]);
|
|
643
|
+
var isRightDirection = isKeyArrowRight(e);
|
|
641
644
|
var newItemIndex = _this.getAvailableTokenIndex(activeItemIndex, isKeyArrowLeft(e));
|
|
642
|
-
var isLeftEdge =
|
|
643
|
-
var isRightEdge = newItemIndex === selectedItems.length &&
|
|
645
|
+
var isLeftEdge = newItemIndex === activeItemIndex && isKeyArrowLeft(e);
|
|
646
|
+
var isRightEdge = newItemIndex === selectedItems.length && isRightDirection;
|
|
647
|
+
if (!e.shiftKey && activeTokens.length > 1) {
|
|
648
|
+
var activeIndices = activeTokens.map(function (item) { return selectedItems.indexOf(item); });
|
|
649
|
+
var edgeIndex = isRightDirection ? Math.max.apply(Math, activeIndices) : Math.min.apply(Math, activeIndices);
|
|
650
|
+
var isRightEdgeOfSelection = isRightDirection && _this.getAvailableTokenIndex(edgeIndex, false) === selectedItems.length;
|
|
651
|
+
var nextActiveTokens = isRightEdgeOfSelection ? [] : [selectedItems[edgeIndex]];
|
|
652
|
+
_this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: nextActiveTokens }, _this.scrollToSelection);
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
644
655
|
if (!e.shiftKey && activeTokens.length === 1) {
|
|
645
656
|
_this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);
|
|
646
657
|
}
|
|
647
658
|
else {
|
|
648
|
-
_this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);
|
|
659
|
+
_this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, isRightDirection, newItemIndex, activeItemIndex);
|
|
649
660
|
}
|
|
650
661
|
};
|
|
662
|
+
_this.scrollToSelection = function () {
|
|
663
|
+
var _a, _b;
|
|
664
|
+
var activeItemIndex = _this.getProps().selectedItems.indexOf(_this.state.activeTokens[0]);
|
|
665
|
+
// TextWidthHelper is the first child; each token renders one root element.
|
|
666
|
+
var node = activeItemIndex < 0
|
|
667
|
+
? _this.input
|
|
668
|
+
: (_a = _this.scrollContainerInnerRef.current) === null || _a === void 0 ? void 0 : _a.children.item(activeItemIndex + 1);
|
|
669
|
+
(_b = _this.scrollContainerRef.current) === null || _b === void 0 ? void 0 : _b.scrollTo(node);
|
|
670
|
+
};
|
|
651
671
|
_this.handleWrapperArrowsWithoutShift = function (isLeftEdge, isRightEdge, newItemIndex) {
|
|
652
672
|
if (isRightEdge) {
|
|
653
|
-
_this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' },
|
|
673
|
+
_this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, _this.scrollToSelection);
|
|
654
674
|
}
|
|
655
675
|
else if (!isLeftEdge) {
|
|
656
676
|
_this.dispatch({
|
|
657
677
|
type: 'SET_ACTIVE_TOKENS',
|
|
658
678
|
payload: [_this.getProps().selectedItems[newItemIndex]],
|
|
659
|
-
});
|
|
679
|
+
}, _this.scrollToSelection);
|
|
660
680
|
}
|
|
661
681
|
};
|
|
662
|
-
_this.handleWrapperArrowsWithShift = function (isLeftEdge, isRightEdge, newItemIndex) {
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
682
|
+
_this.handleWrapperArrowsWithShift = function (isLeftEdge, isRightEdge, isRightDirection, newItemIndex, activeItemIndex) {
|
|
683
|
+
var selectedItems = _this.getProps().selectedItems;
|
|
684
|
+
var activeTokens = _this.state.activeTokens;
|
|
685
|
+
var isActive = function (item) {
|
|
686
|
+
return activeTokens.some(function (activeItem) { return _this.isEqual(activeItem, item); });
|
|
687
|
+
};
|
|
688
|
+
var currentItem = selectedItems[activeItemIndex];
|
|
689
|
+
var selectionWithoutCurrentItem = function () { return activeTokens.filter(function (item) { return !_this.isEqual(item, currentItem); }); };
|
|
690
|
+
if (isLeftEdge || isRightEdge) {
|
|
691
|
+
/** Когда стрелка упирается в край, дальше двигаться нельзя.
|
|
692
|
+
* Проверяем ближайший доступный токен в обратном направлении,
|
|
693
|
+
* пропуская disabled токены.
|
|
694
|
+
Если текущий токен выделен, а сосед не выделен или его нет,
|
|
695
|
+
снимаем выделение с текущего токена.
|
|
696
|
+
Если сосед тоже выделен, сохраняем выделение. */
|
|
697
|
+
var searchNeighborToLeft = isRightDirection;
|
|
698
|
+
var neighborIndex = _this.getAvailableTokenIndex(activeItemIndex, searchNeighborToLeft);
|
|
699
|
+
var neighborItem = selectedItems[neighborIndex];
|
|
700
|
+
var hasNoNeighbor = neighborIndex === activeItemIndex;
|
|
701
|
+
var canRemoveCurrentItem = isActive(currentItem) && (hasNoNeighbor || !isActive(neighborItem));
|
|
702
|
+
if (canRemoveCurrentItem) {
|
|
703
|
+
_this.dispatch({
|
|
704
|
+
type: 'SET_ACTIVE_TOKENS',
|
|
705
|
+
payload: selectionWithoutCurrentItem(),
|
|
706
|
+
}, _this.scrollToSelection);
|
|
707
|
+
}
|
|
708
|
+
return;
|
|
667
709
|
}
|
|
710
|
+
var targetItem = selectedItems[newItemIndex];
|
|
711
|
+
var isShrinkingSelection = isActive(targetItem);
|
|
712
|
+
var nextActiveTokens = isShrinkingSelection
|
|
713
|
+
? selectionWithoutCurrentItem()
|
|
714
|
+
: __spreadArray([targetItem], activeTokens.filter(function (item) { return !_this.isEqual(item, targetItem); }), true);
|
|
715
|
+
_this.dispatch({
|
|
716
|
+
type: 'SET_ACTIVE_TOKENS',
|
|
717
|
+
payload: nextActiveTokens,
|
|
718
|
+
}, _this.scrollToSelection);
|
|
668
719
|
};
|
|
669
720
|
_this.handleValueChange = function (items) {
|
|
670
721
|
_this.getProps().onValueChange(items);
|
|
@@ -898,16 +949,10 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
898
949
|
var selectedItems = _this.getProps().selectedItems;
|
|
899
950
|
var step = isDirectionLeft ? -1 : +1;
|
|
900
951
|
var availableIndex = startIndex + step;
|
|
901
|
-
while (_this.isTokenDisabled(availableIndex)) {
|
|
952
|
+
while (availableIndex >= 0 && availableIndex < selectedItems.length && _this.isTokenDisabled(availableIndex)) {
|
|
902
953
|
availableIndex += step;
|
|
903
|
-
if (availableIndex === selectedItems.length) {
|
|
904
|
-
return availableIndex;
|
|
905
|
-
}
|
|
906
|
-
else if (availableIndex === -1) {
|
|
907
|
-
return startIndex;
|
|
908
|
-
}
|
|
909
954
|
}
|
|
910
|
-
return availableIndex;
|
|
955
|
+
return availableIndex < 0 ? startIndex : availableIndex;
|
|
911
956
|
};
|
|
912
957
|
return _this;
|
|
913
958
|
}
|
|
@@ -1100,7 +1145,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
1100
1145
|
configurable: true
|
|
1101
1146
|
});
|
|
1102
1147
|
TokenInput.prototype.isCursorVisibleForState = function (state) {
|
|
1103
|
-
return state.inFocus && (
|
|
1148
|
+
return state.inFocus && (state.editingTokenIndex > -1 || state.activeTokens.length === 0);
|
|
1104
1149
|
};
|
|
1105
1150
|
TokenInput.prototype.getMenuItems = function () {
|
|
1106
1151
|
if (this.state.requestStatus === ComboBoxRequestStatus.Failed) {
|
|
@@ -1261,7 +1306,7 @@ var TokenInput = /** @class */ (function (_super) {
|
|
|
1261
1306
|
TokenInput.prototype.moveFocusToLastToken = function () {
|
|
1262
1307
|
var items = this.getProps().selectedItems;
|
|
1263
1308
|
if (this.state.inputValue === '' && items && items.length > 0) {
|
|
1264
|
-
this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });
|
|
1309
|
+
this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) }, this.scrollToSelection);
|
|
1265
1310
|
}
|
|
1266
1311
|
};
|
|
1267
1312
|
var TokenInput_1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenInput.js","sourceRoot":"","sources":["TokenInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport lodashIsEqual from 'lodash.isequal';\nimport type {\n AriaAttributes,\n ChangeEvent,\n FocusEvent,\n FocusEventHandler,\n HTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n ReactNode,\n} from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ComboBoxRequestStatus } from '../../internal/CustomComboBox/CustomComboBoxTypes.js';\nimport type { Menu } from '../../internal/Menu/index.js';\nimport { PopupIds } from '../../internal/Popup/index.js';\nimport { blink } from '../../lib/blink.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isCodeComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getUid } from '../../lib/uidUtils.js';\nimport { emptyHandler, getRandomID, isFunction } from '../../lib/utils.js';\nimport type { AnyObject } from '../../lib/utils.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemState } from '../MenuItem/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ScrollContainer } from '../ScrollContainer/index.js';\nimport type { TokenProps, TokenSize } from '../Token/index.js';\nimport { Token } from '../Token/index.js';\nimport { TokenView } from '../Token/TokenView.js';\nimport type { TokenInputLocale } from './locale/index.js';\nimport { TokenInputLocaleHelper } from './locale/index.js';\nimport { TextWidthHelper } from './TextWidthHelper.js';\nimport { getStyles } from './TokenInput.styles.js';\nimport { TokenInputMenu } from './TokenInputMenu.js';\nimport { TokenInputMobileMenu } from './TokenInputMobileMenu.js';\nimport type { TokenInputAction, TokenInputInternalState } from './TokenInputReducer.js';\nimport { tokenInputReducer } from './TokenInputReducer.js';\n\nconst TEMP_FAKE_FLAG = 'TEMP_FAKE_FLAG';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** Токены, которые будут отображаться в поле ввода. */\n selectedItems?: T[];\n\n /** Событие добавления нового токена. */\n onValueChange?: (items: T[]) => void;\n\n /** HTML-событие `onmouseenter`.\n * @ignore */\n onMouseEnter?: MouseEventHandler<HTMLDivElement>;\n\n /** HTML-событие `onmouseleave`.\n * @ignore */\n onMouseLeave?: MouseEventHandler<HTMLDivElement>;\n\n /** HTML-событие `onfocus`.\n * @ignore */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n\n /** HTML-событие `onblur`.\n * @ignore */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n\n /** HTML-событие `onkeydown`. */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n\n /** Устанавливает фокус на поле с токенами после окончания загрузки страницы. */\n autoFocus?: boolean;\n\n /** Размер поля с токенами. */\n size?: TokenSize;\n\n /** Тип инпута.\n * Возможные значения:\n * - `TokenInputType.Combined` — в поле можно выбирать значения из справочника и добавлять свои значения.\n * - `TokenInputType.WithReference` — можно только выбрать значения из справочника, но нельзя добавлять свои.\n * - `TokenInputType.WithoutReference` — можно добавлять любые значения, но подсказок из справочника нет. */\n type?: TokenInputType;\n\n /** Ширина выпадающего списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Выравнивание выпадающего списка. */\n menuAlign?: TokenInputMenuAlign;\n\n /** Задаёт функцию поиска значений, которая должна возвращать Promise с массивом значений. По умолчанию ожидаются строки.\n * Элементы могут быть любого типа. В этом случае необходимо определить свойства `renderItem`, `renderToken`, `valueToString` и `valueToItem`. */\n getItems?: (query: string) => Promise<Array<TokenInputExtendedItem<T>>>;\n\n /** Ограничивает отображение выпадающего списка при фокусе на пустом поле: выпадающий список появится, только когда будет введён хотя бы один символ токена. */\n hideMenuIfEmptyInputValue?: boolean;\n\n /** Отрисовывает элемент списка. */\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode | null;\n\n /** Отрисовывает выбранное значение.\n * @deprecated Используйте `renderToken` для отрисовки выбранного значения и `valueToString` для преобразования значения в строку.\n */\n renderValue?: (item: T) => React.ReactNode;\n\n /** Возвращает строковое представление `value`. Необходимо при фокусировке.\n * @default item => item */\n valueToString?: (item: T) => string;\n\n /** Отрисовывает сообщение об общем количестве элементов.\n * @param {number} found - количество элементов по результатам поиска. Учитывает только компонент MenuItem. Им оборачиваются элементы, возвращаемые `getItems()`.\n * @param {number} total - количество всех элементов. */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /** Определяет общее количество элементов. Необходим для работы `renderTotalCount`. */\n totalCount?: number;\n\n /** Отрисовывает сообщение о пустом результате поиска. При `renderAddButton` не работает. */\n renderNotFound?: () => React.ReactNode;\n\n /** Преобразовывает значение в элемент списка.\n * @default value => value\n */\n valueToItem?: (value: string) => T;\n\n /** Сравнивает полученные результаты с `value`. */\n itemToId?: (item: T) => string | number | undefined;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: string;\n\n /** Символы, которые разделяют введённый текст на токены. По умолчанию — запятая. */\n delimiters?: string[];\n\n /** Меняет визуальное отображение токена на состояние «ошибка». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n error?: boolean;\n\n /** Меняет визуальное отображение токена на состояние «предупреждение». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n warning?: boolean;\n\n /** Блокирует поле с токенами. */\n disabled?: boolean;\n\n /** Ширина поля с токенами. */\n width?: string | number;\n\n /** Максимальная высота выпадающего списка. */\n maxMenuHeight?: number | string;\n\n /** Отрисовывает токен и даёт возможность кастомизировать внешний вид и поведение токена. */\n renderToken?: (item: T, props: Partial<TokenProps>, index: number) => ReactNode;\n\n /** Событие изменения текста в поле ввода, если результатом функции будет строка, то она станет следующим состоянием полем ввода. */\n onInputValueChange?: (value: string) => void;\n\n /** Отрисовывает кнопку добавления нового токена в выпадающем списке. */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n\n /** Событие обработки ввода строки в поле ввода и последующая потеря фокуса компонентом.\n * Функция срабатывает с аргументом поля строки.\n * Если при потере фокуса в выпадающем списке будет только один элемент и результат `valueToString` с этим элементом будет совпадать со значением в текстовом поле, то сработает `onValueChange` со значением данного элемента.\n * Сама функция также может вернуть значение, не равное undefined, с которым будет вызван `onValueChange`. Если возвращаемое значение будет равно null, то сработает очистка текущего значения поля, а в режиме редактирования токен будет удален. */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n\n /** Задаёт функцию, которая проверяет, можно ли создать токен из свободного ввода.\n * Если вернуть `false`, токен не создаётся и поле мигает. Не применяется при выборе из справочника. */\n isTokenValid?: (value: string) => boolean;\n\n /** Задаёт типы вводимых данных. Передаёт браузеру информацию о том, какой набор символов показать при вводе данных в конкретное поле на устройствах с экранной клавиатурой. */\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n\n /**\n * Максимальная высота компонента. При её достижении появится скроллбар\n */\n maxHeight?: number;\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: Array<TokenInputExtendedItem<T>>;\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n showMobilePopup?: boolean;\n}\n\nexport type TokenInputExtendedItem<T> = T | (() => React.ReactElement<T>) | React.ReactElement<T>;\n\nexport const DefaultState: TokenInputInternalState<any> = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n showMobilePopup: false,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport const TokenInputDataTids = {\n root: 'TokenInput__root',\n tokenInputMenu: 'TokenInputMenu__root',\n label: 'TokenInput__label',\n} as const;\n\ntype DefaultProps<T> = Required<\n Pick<\n TokenInputProps<T>,\n | 'selectedItems'\n | 'delimiters'\n | 'renderItem'\n | 'renderValue'\n | 'valueToString'\n | 'valueToItem'\n | 'itemToId'\n | 'onValueChange'\n | 'width'\n | 'onBlur'\n | 'onFocus'\n | 'onMouseEnter'\n | 'onMouseLeave'\n | 'menuWidth'\n | 'menuAlign'\n >\n>;\n\nconst identity = <T extends unknown>(item: T): T => item;\nconst defaultRenderToken = <T extends AnyObject>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled, size }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n size={size}\n >\n {item.toString()}\n </Token>\n);\n\n/** Поле с токенами — это поле ввода со списком подсказок. Значения в поле отображаются в виде отдельных токенов.\n */\n@responsiveLayout\n@withRenderEnvironment\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\n@withSize\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputInternalState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n public static displayName = 'TokenInput';\n\n public static defaultProps: DefaultProps<any> = {\n selectedItems: [],\n // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.\n delimiters: [',', TEMP_FAKE_FLAG],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n itemToId: identity,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n private getDelimiters(): string[] {\n const delimiters = this.props.delimiters ?? [];\n if (delimiters.every((delimiter) => delimiter !== TEMP_FAKE_FLAG)) {\n return delimiters;\n }\n return delimiters.filter((delimiter) => delimiter !== TEMP_FAKE_FLAG);\n }\n\n private getProps() {\n const propsGetter = createPropsGetter(TokenInput.defaultProps);\n const propsWithOldDelimiters = propsGetter.apply(this);\n return { ...propsWithOldDelimiters, delimiters: this.getDelimiters() };\n }\n\n private get textareaId() {\n return this.props.id ?? this._textareaId;\n }\n\n public state: TokenInputInternalState<T> = DefaultState;\n\n private readonly _textareaId: string = getUid();\n private rootId = PopupIds.root + getRandomID();\n private readonly locale!: TokenInputLocale;\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | TokenInputMobileMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private scrollContainerRef = React.createRef<HTMLDivElement>();\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private memoizedTokens = new Map();\n private menuNavigatedByUser = false;\n private requestId = 0;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n this.globalObject.document?.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T> & DefaultProps<T>, prevState: TokenInputInternalState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.getProps().selectedItems.length) {\n LayoutEvents.emit();\n this.memoizedTokens.clear();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n if (!prevState.showMobilePopup && this.state.showMobilePopup && this.usesMobilePopup) {\n this.globalObject.requestAnimationFrame?.(() => {\n this.input?.focus({ preventScroll: true });\n this.tryGetItems(this.state.inputValue);\n });\n }\n }\n\n private get usesMobilePopup(): boolean {\n return this.isMobileLayout && this.type !== TokenInputType.WithoutReference;\n }\n\n private isInlineInteractive(): boolean {\n return !(this.usesMobilePopup && !!this.state.showMobilePopup);\n }\n\n public componentWillUnmount() {\n this.cancelRequest();\n this.globalObject.document?.removeEventListener('copy', this.handleCopy);\n }\n\n /** Программно устанавливает фокус на поле.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus(): void {\n this.input?.focus();\n }\n\n /** Программно снимает фокус с поля.\n * @public\n */\n public blur(): void {\n this.input?.blur();\n }\n\n /** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.\n * @public\n */\n public blink(): void {\n blink({ el: this.wrapper, blinkColor: this.theme.inputBlinkColor });\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private getLabelSizeClassName() {\n switch (this.size) {\n case 'large':\n return this.styles.labelLarge(this.theme);\n case 'medium':\n return this.styles.labelMedium(this.theme);\n case 'small':\n default:\n return this.styles.labelSmall(this.theme);\n }\n }\n\n private getInputSizeClassName() {\n switch (this.size) {\n case 'large':\n return this.styles.inputLarge(this.theme);\n case 'medium':\n return this.styles.inputMedium(this.theme);\n case 'small':\n default:\n return this.styles.inputSmall(this.theme);\n }\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n warning(false, `getItems is required for \"Combined\" and \"WithReference\" modes.`);\n }\n const { onMouseEnter, onMouseLeave } = this.getProps();\n const { showMobilePopup } = this.state;\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={TokenInputDataTids.root} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n {this.renderInlineField()}\n {this.usesMobilePopup && showMobilePopup && this.renderMobileMenu()}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderInlineField = (): ReactElement => {\n return this.renderTokenInputField({\n variant: 'inline',\n interactive: this.isInlineInteractive(),\n fieldWidth: this.getProps().width,\n showMenu: Boolean(\n !this.isMobileLayout &&\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n this.state.activeTokens.length === 0 &&\n (this.isInputValueChanged || !this.props.hideMenuIfEmptyInputValue),\n ),\n });\n };\n\n private renderMobilePopupFooter = (): ReactElement => {\n return this.renderTokenInputField({\n variant: 'mobileFooter',\n interactive: true,\n fieldWidth: '100%',\n showMenu: false,\n });\n };\n\n private renderTokenInputField = ({\n variant,\n interactive,\n fieldWidth,\n showMenu,\n }: {\n variant: 'inline' | 'mobileFooter';\n interactive: boolean;\n fieldWidth: React.CSSProperties['width'];\n showMenu: boolean;\n }): ReactElement => {\n const {\n maxMenuHeight,\n error,\n warning,\n disabled,\n renderNotFound,\n inputMode,\n renderTotalCount,\n totalCount,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n maxHeight,\n } = this.props;\n\n const { selectedItems, menuWidth, menuAlign, renderItem } = this.getProps();\n const isMobileFooter = variant === 'mobileFooter';\n const { inFocus, inputValueWidth, inputValueHeight, inputValue, reservedInputValue, loading } = this.state;\n\n const theme = this.theme;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: inputValueHeight,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible && interactive ? undefined : 'transparent',\n };\n\n const labelClassName = this.cx(this.styles.label(theme), this.getLabelSizeClassName(), {\n [this.styles.labelNonInteractive()]: !interactive,\n [this.styles.hovering(this.theme)]: interactive && !inFocus && !disabled && !warning && !error,\n [this.styles.labelDisabled(theme)]: !!disabled,\n [this.styles.labelFocused(theme)]: interactive && !!inFocus,\n [this.styles.error(theme)]: !!error,\n [this.styles.warning(theme)]: !!warning,\n });\n const inputClassName = this.cx(this.styles.input(theme), this.getInputSizeClassName(), {\n [this.styles.inputDisabled(theme)]: !!disabled,\n });\n\n const placeholder = selectedItems.length === 0 && !inputValue ? this.props.placeholder : '';\n\n const inputNode = (\n <TokenView\n size={this.size}\n className={this.cx({\n // input растягивается на всю ширину чтобы placeholder не обрезался\n [this.styles.inputPlaceholderWrapper()]: Boolean(placeholder),\n })}\n hideCloseButton={Boolean(placeholder)}\n >\n <textarea\n id={isMobileFooter || interactive ? this.textareaId : undefined}\n ref={isMobileFooter ? this.mobileInputRef : this.inlineInputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n readOnly={!interactive}\n tabIndex={!interactive ? -1 : undefined}\n className={inputClassName}\n placeholder={placeholder}\n onFocus={interactive ? this.handleInputFocus : undefined}\n onBlur={interactive ? this.handleInputBlur : undefined}\n onChange={interactive ? this.handleChangeInputValue : undefined}\n onKeyDown={interactive ? this.handleKeyDown : undefined}\n onPaste={interactive ? this.handleInputPaste : undefined}\n inputMode={inputMode}\n aria-label={isMobileFooter || interactive ? ariaLabel : undefined}\n aria-describedby={isMobileFooter || interactive ? ariaDescribedby : undefined}\n aria-hidden={!interactive ? true : undefined}\n aria-busy={interactive && loading ? true : undefined}\n autoFocus={isMobileFooter}\n />\n </TokenView>\n );\n\n const inner = (\n <>\n {isMobileFooter ? null : (\n <TextWidthHelper ref={this.textHelperRef} text={inputValue} theme={this.theme} size={this.size} />\n )}\n {this.renderTokensStart(interactive)}\n {inputNode}\n {showMenu && (\n <TokenInputMenu\n popupMenuId={this.rootId}\n ref={this.tokensInputMenuRef}\n items={this.getMenuItems()}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElementForCursor={this.input}\n anchorElementRoot={this.wrapper}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n renderTotalCount={renderTotalCount}\n totalCount={totalCount}\n size={this.size}\n requestStatus={this.state.requestStatus}\n repeatRequest={this.repeatRequest}\n />\n )}\n {this.renderTokensEnd(interactive)}\n {this.isEditingMode ? (\n <TokenView size={this.size}>\n <span className={this.styles.reservedInput(theme)}>{reservedInputValue}</span>\n </TokenView>\n ) : null}\n </>\n );\n\n const container =\n maxHeight && !isMobileFooter ? (\n <ScrollContainer\n className={this.styles.inputPlaceholderScrollWrapper()}\n scrollRef={this.scrollContainerRef}\n maxHeight={maxHeight}\n showScrollBar=\"always\"\n style={{ width: '100%' }}\n >\n {inner}\n </ScrollContainer>\n ) : (\n inner\n );\n\n const labelStyle: React.CSSProperties = {\n width: fieldWidth,\n };\n\n return (\n <label\n ref={isMobileFooter ? this.mobileWrapperRef : this.inlineWrapperRef}\n style={labelStyle}\n className={labelClassName}\n onMouseDown={interactive ? this.handleWrapperMouseDown : undefined}\n onMouseUp={interactive ? this.handleWrapperMouseUp : undefined}\n // Для корректной работы скролла приходится ломать связь label с полем ввода\n // Иначе любой клик внутри label вызывает фокус и автоскроллинг к полю ввода\n htmlFor={!interactive || maxHeight ? 'fake-id' : this.textareaId}\n aria-controls={interactive ? this.rootId : undefined}\n aria-hidden={!interactive ? true : undefined}\n data-tid={isMobileFooter || interactive ? TokenInputDataTids.label : undefined}\n >\n {container}\n </label>\n );\n };\n\n private renderMobileMenu = (): ReactElement => {\n const { maxMenuHeight, renderNotFound, renderTotalCount, totalCount } = this.props;\n\n const { renderItem } = this.getProps();\n const { loading } = this.state;\n\n return (\n <TokenInputMobileMenu\n popupMenuId={this.rootId}\n ref={(node) => {\n this.tokensInputMenuRef(node);\n }}\n items={this.getMenuItems()}\n loading={loading}\n opened\n maxMenuHeight={maxMenuHeight}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n renderTotalCount={renderTotalCount}\n totalCount={totalCount}\n size={this.size}\n requestStatus={this.state.requestStatus}\n repeatRequest={this.repeatRequest}\n mobileFooterComponent={this.renderMobilePopupFooter()}\n onCloseRequest={() => {\n this.cancelRequest();\n this.dispatch({\n type: 'SET_CLOSE_MOBILE_POPUP',\n });\n }}\n />\n );\n };\n\n /**\n * Сбрасывает введённое пользователем значение.\n * @public\n */\n public reset(): void {\n this.dispatch({ type: 'RESET' });\n }\n\n private isEqual = (itemA: T, itemB: T) => {\n const { itemToId } = this.getProps();\n return lodashIsEqual(itemToId(itemA), itemToId(itemB));\n };\n\n private hasValueInItems = (items: T[], value: string | T) => {\n const { valueToString } = this.getProps();\n if (typeof value === 'string') {\n return items.map((item) => valueToString(item)).includes(value);\n }\n\n return items.some((item) => this.isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems?.filter(isSimpleItem);\n const value = this.getProps().valueToItem(this.state.inputValue);\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.getProps().selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.isInputValueChanged) {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (this.isInputValueChanged || state.activeTokens.length === 0);\n }\n\n private inlineInputRef = (node: HTMLTextAreaElement | null) => {\n if (!this.usesMobilePopup || !this.state.showMobilePopup) {\n this.input = node;\n }\n };\n\n private mobileInputRef = (node: HTMLTextAreaElement | null) => {\n if (this.usesMobilePopup && !!this.state.showMobilePopup) {\n this.input = node;\n }\n };\n\n private tokensInputMenuRef = (node: TokenInputMenu<T> | TokenInputMobileMenu<T> | null) => {\n this.tokensInputMenu = node;\n };\n\n private textHelperRef = (node: TextWidthHelper) => {\n this.textHelper = node;\n };\n\n private inlineWrapperRef = (node: HTMLLabelElement | null) => {\n if (!this.usesMobilePopup || !this.state.showMobilePopup) {\n this.wrapper = node;\n }\n };\n\n private mobileWrapperRef = (node: HTMLLabelElement | null) => {\n if (this.usesMobilePopup && !!this.state.showMobilePopup) {\n this.wrapper = node;\n }\n };\n\n private getMenuItems() {\n if (this.state.requestStatus === ComboBoxRequestStatus.Failed) {\n return null;\n }\n return this.state.autocompleteItems;\n }\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n if (this.usesMobilePopup) {\n if (!this.state.showMobilePopup) {\n this.dispatch({ type: 'SET_SHOW_MOBILE_POPUP' });\n return;\n }\n }\n\n if (!this.state.inFocus) {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n this.getProps().onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (this.usesMobilePopup) {\n return;\n }\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus({ preventScroll: true });\n // в firefox не работает без второго focus\n this.globalObject.requestAnimationFrame?.(() => this.input?.focus({ preventScroll: true }));\n\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.cancelRequest();\n this.dispatch({ type: 'BLUR' });\n this.getProps().onBlur(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems: allItems } = this.state;\n const autocompleteItems = allItems?.filter(isSimpleItem);\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n if (this.state.loading || this.state.requestStatus === ComboBoxRequestStatus.Failed) {\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (this.getProps().valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) {\n this.checkForUnexpectedInput();\n }\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { valueToString, selectedItems } = this.getProps();\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef && this.globalObject.document) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = event.relatedTarget || this.globalObject.document.activeElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken = target && this.wrapper?.contains(target) && target !== this.wrapper && target !== this.input;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = (e: React.MouseEvent<HTMLElement>) => {\n // Имитируем поведение label, когда задан maxHeight.\n if (\n this.props.maxHeight &&\n e.target === this.scrollContainerRef.current &&\n (this.state.activeTokens.length !== 0 || !this.state.inFocus)\n ) {\n this.dispatch({ type: 'BLUR' });\n this.dispatch({ type: 'SET_FOCUS_IN' });\n this.focusInput();\n this.input?.scrollIntoView({ behavior: 'auto', block: 'center' });\n }\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n const { selectedItems, valueToString, delimiters } = this.getProps();\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => selectedItems.indexOf(token))\n .sort()\n .map((index) => selectedItems[index])\n .map((item) => valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(delimiters[0]));\n };\n\n private get isDelimiterInputEnabled(): boolean {\n return this.type !== TokenInputType.WithReference;\n }\n\n private inputValueEndsWithDelimiter(value: string): boolean {\n return this.getProps().delimiters.some((delimiter) => value.endsWith(delimiter));\n }\n\n private splitValueByDelimiters(value: string): string[] {\n const pattern = this.getProps()\n .delimiters.map((delimiter) => delimiter.replace(/[\\\\^\\-[\\]]/g, '\\\\$&'))\n .join('');\n return value.split(new RegExp(`[${pattern}]+`));\n }\n\n private isDelimiterKeyEvent(e: KeyboardEvent<HTMLTextAreaElement>, delimiter: string): boolean {\n if (delimiter === ',') {\n return e.key === delimiter || isKeyComma(e) || isCodeComma(e);\n }\n return e.key === delimiter;\n }\n\n private canAcceptInputAsToken(value: string): boolean {\n if (!value) {\n return false;\n }\n\n const { isTokenValid } = this.props;\n if (!isTokenValid) {\n return true;\n }\n\n return isTokenValid(value);\n }\n\n private rejectIfInvalidToken(value: string): boolean {\n if (!value || !this.props.isTokenValid) {\n return false;\n }\n if (this.props.isTokenValid(value)) {\n return false;\n }\n this.blink();\n return true;\n }\n\n private hasExactAutocompleteMatch(value: string): boolean {\n const { valueToString } = this.getProps();\n return this.state.autocompleteItems?.filter(isSimpleItem).some((item) => valueToString(item) === value) ?? false;\n }\n\n private createItemsFromTokens(tokens: string[], selectedItems: T[]): { items: T[]; remainder: string } {\n const { valueToItem, delimiters } = this.getProps();\n const items: T[] = [];\n let remainder = '';\n const joinDelimiter = delimiters[0] ?? ',';\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n if (!token) {\n continue;\n }\n\n if (!this.canAcceptInputAsToken(token)) {\n remainder = tokens.slice(index).filter(Boolean).join(joinDelimiter);\n break;\n }\n\n const item = valueToItem(token);\n if (item && !this.hasValueInItems(selectedItems.concat(items), item)) {\n items.push(item);\n }\n }\n\n return { items, remainder };\n }\n\n private tryApplyDelimiterFromInputValue(rawValue: string): false | { nextInputValue: string } {\n const { delimiters, selectedItems, onValueChange } = this.getProps();\n const trailingDelimiter = delimiters.find((delimiter) => rawValue.endsWith(delimiter));\n if (!trailingDelimiter) {\n return false;\n }\n\n const valueWithoutTrailingDelimiter = rawValue.slice(0, rawValue.length - trailingDelimiter.length);\n\n if (this.isEditingMode) {\n if (valueWithoutTrailingDelimiter !== '') {\n if (this.rejectIfInvalidToken(valueWithoutTrailingDelimiter)) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueWithoutTrailingDelimiter });\n return { nextInputValue: valueWithoutTrailingDelimiter };\n }\n\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueWithoutTrailingDelimiter }, () => {\n this.finishTokenEdit();\n });\n return { nextInputValue: valueWithoutTrailingDelimiter };\n }\n return { nextInputValue: this.state.inputValue };\n }\n\n if (valueWithoutTrailingDelimiter === '') {\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n return { nextInputValue: '' };\n }\n\n const tokens = this.splitValueByDelimiters(valueWithoutTrailingDelimiter);\n const { items, remainder } = this.createItemsFromTokens(tokens, selectedItems);\n\n if (items.length > 0) {\n onValueChange(selectedItems.concat(items));\n }\n\n if (remainder) {\n this.blink();\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.dispatch({ type: 'UPDATE_QUERY', payload: remainder }, () => this.tryGetItems(remainder));\n return { nextInputValue: remainder };\n }\n\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n return { nextInputValue: '' };\n }\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n const paste = event.clipboardData.getData('text');\n const { delimiters, selectedItems, onValueChange } = this.getProps();\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n const tokens = this.splitValueByDelimiters(paste.trim());\n const { items, remainder } = this.createItemsFromTokens(tokens, selectedItems);\n\n if (items.length > 0) {\n onValueChange(selectedItems.concat(items));\n }\n\n this.menuNavigatedByUser = false;\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n if (remainder) {\n this.blink();\n this.dispatch({ type: 'UPDATE_QUERY', payload: remainder }, () => this.tryGetItems(remainder));\n this.props.onInputValueChange?.(remainder);\n } else {\n this.tryGetItems();\n }\n }\n };\n\n private repeatRequest = () => {\n this.tryGetItems(this.state.inputValue);\n this.input?.focus();\n };\n\n private cancelRequest = () => {\n this.requestId += 1;\n };\n\n private tryGetItems = async (query = '') => {\n if (!this.props.getItems || (!this.isInputValueChanged && this.props.hideMenuIfEmptyInputValue)) {\n this.cancelRequest();\n return;\n }\n this.requestId += 1;\n const expectingId = this.requestId;\n this.dispatch({ type: 'SET_LOADING', payload: true });\n let autocompleteItems: Array<TokenInputExtendedItem<T>>;\n try {\n autocompleteItems = await this.props.getItems(query);\n } catch {\n if (expectingId !== this.requestId) {\n return;\n }\n this.dispatch({ type: 'SET_REQUEST_FAILURE' });\n this.globalObject.requestAnimationFrame?.(() => this.menuRef?.highlightItem(0));\n return;\n }\n if (expectingId !== this.requestId) {\n return;\n }\n\n const { selectedItems, valueToItem, valueToString } = this.getProps();\n const isSelectedItem = (item: T) => this.hasValueInItems(selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = selectedItems[this.state.editingTokenIndex];\n return !!editingItem && this.isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) =>\n isSimpleItem(item) ? !isSelectedItem(item) || isEditingItem(item) : true,\n );\n const autocompleteItemsUniqueSimple = autocompleteItemsUnique.filter(isSimpleItem);\n\n if (this.isEditingMode) {\n const editingItem = selectedItems[this.state.editingTokenIndex];\n if (\n this.isEqual(editingItem, valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUniqueSimple, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.isInputValueChanged) {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n } else {\n this.dispatch({ type: 'SET_LOADING', payload: false });\n }\n const selectItemIndex = autocompleteItemsUniqueSimple.findIndex(\n (item) => valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n let highlightIndex: number | null = null;\n if (selectItemIndex >= 0) {\n highlightIndex = selectItemIndex;\n } else {\n highlightIndex = 0;\n }\n if (highlightIndex !== null) {\n const applyMenuHighlight = () => this.menuRef?.highlightItem(highlightIndex);\n this.globalObject.requestAnimationFrame?.(applyMenuHighlight);\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n this.props.onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.isDelimiterInputEnabled && this.getProps().delimiters.some((key) => this.isDelimiterKeyEvent(e, key))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n const isRightmostTokenNotDisabled = !this.isTokenDisabled(this.getProps().selectedItems.length - 1);\n const canSetValueToInput =\n this.showAddItemHint ||\n (this.state.autocompleteItems?.length ?? 0) > 0 ||\n this.state.requestStatus === ComboBoxRequestStatus.Failed;\n\n switch (true) {\n case isKeyEnter(e):\n if (this.type !== TokenInputType.WithoutReference) {\n if (\n !this.menuNavigatedByUser &&\n !this.hasExactAutocompleteMatch(this.state.inputValue) &&\n this.rejectIfInvalidToken(this.state.inputValue)\n ) {\n // free-text rejected: blink already done, do not select menu item\n } else if (canSetValueToInput && this.menuRef) {\n this.menuRef.enter(e);\n }\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n this.menuNavigatedByUser = true;\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode && isRightmostTokenNotDisabled) {\n this.moveFocusToLastToken();\n }\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n const index = this.getAvailableTokenIndex(this.getProps().selectedItems.length);\n const itemNew = this.getProps().selectedItems[index];\n if (itemNew) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.getProps().selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });\n }\n }\n\n private focusInput = (options?: FocusOptions) => {\n this.globalObject.requestAnimationFrame?.(() => this.input?.focus(options));\n if (this.usesMobilePopup && !this.state.showMobilePopup) {\n this.dispatch({ type: 'SET_SHOW_MOBILE_POPUP' });\n }\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n const { selectedItems, onValueChange } = this.getProps();\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n const indexOfActiveToken = this.getProps().selectedItems.indexOf(\n this.state.activeTokens[this.state.activeTokens.length - 1],\n );\n if (!this.isEditingMode && !this.isTokenDisabled(indexOfActiveToken)) {\n const itemsNew = selectedItems.filter((item) => !this.hasValueInItems(this.state.activeTokens, item));\n onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: selectedItems.filter((item) => !this.isTokenDisabled(selectedItems.indexOf(item))),\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const selectedItems = this.getProps().selectedItems;\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = this.getAvailableTokenIndex(activeItemIndex, isKeyArrowLeft(e));\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = newItemIndex === selectedItems.length && isKeyArrowRight(e);\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);\n }\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => this.input?.focus());\n } else if (!isLeftEdge) {\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.getProps().selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.getProps().selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !this.isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.getProps().onValueChange(items);\n };\n\n private handleAddItem = () => {\n const { inputValue } = this.state;\n if (!inputValue) {\n return;\n }\n if (this.rejectIfInvalidToken(inputValue)) {\n return;\n }\n\n const item = this.getProps().valueToItem(inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems: allItems, valueToString } = this.getProps();\n const selectedItems = allItems.filter(isSimpleItem);\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueToString(item) }, this.finishTokenEdit);\n } else if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange?.(this.getProps().selectedItems.filter((_) => !this.isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !this.isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0 && !(this.usesMobilePopup && this.state.showMobilePopup)) {\n this.focusInput({ preventScroll: true });\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !this.isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput({ preventScroll: true });\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const { selectedItems, valueToString } = this.getProps();\n const editingTokenIndex = selectedItems.findIndex((item) => this.isEqual(item, itemNew));\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.isInputValueChanged) {\n if (this.state.reservedInputValue === undefined) {\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { selectedItems, valueToString } = this.getProps();\n const { editingTokenIndex, inputValue, reservedInputValue, autocompleteItems } = this.state;\n\n const autocompleteMatch = autocompleteItems\n ?.filter(isSimpleItem)\n .find((item) => valueToString(item) === inputValue);\n const editedItem = autocompleteMatch ?? this.getProps().valueToItem(inputValue);\n\n if (this.isInputValueChanged && !autocompleteMatch) {\n if (!inputValue || this.rejectIfInvalidToken(inputValue)) {\n return;\n }\n }\n\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(this.isInputValueChanged ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput?.(inputValue);\n\n if (returnedValue === undefined) {\n if (this.type === TokenInputType.WithoutReference) {\n this.handleAddItem();\n }\n\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n const returnedInputValue = this.getProps().valueToString(returnedValue);\n if (this.rejectIfInvalidToken(returnedInputValue)) {\n return;\n }\n this.selectItem(returnedValue);\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n this.menuNavigatedByUser = false;\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.isInputValueChanged && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n if (this.isDelimiterInputEnabled && this.inputValueEndsWithDelimiter(query)) {\n const delimiterResult = this.tryApplyDelimiterFromInputValue(query);\n if (delimiterResult) {\n this.props.onInputValueChange?.(delimiterResult.nextInputValue);\n return;\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (this.menuRef && this.state.autocompleteItems && this.state.autocompleteItems.length > 0) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = (interactive = true) => {\n const { editingTokenIndex } = this.state;\n const selectedItems = this.getProps().selectedItems;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map((x, index) => this.renderToken(x, index, interactive));\n };\n\n private renderTokensEnd = (interactive = true) => {\n if (this.state.editingTokenIndex >= 0) {\n const startIndex = this.state.editingTokenIndex + 1;\n return this.getProps()\n .selectedItems.slice(startIndex)\n .map((x, index) => this.renderToken(x, startIndex + index, interactive));\n }\n };\n\n private renderToken = (item: T, index: number, interactive = true) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode && !disabled && interactive) {\n this.handleTokenEdit(item);\n }\n };\n\n const renderedToken = renderToken(\n item as T & AnyObject,\n {\n size: this.size,\n isActive,\n onClick: interactive ? handleTokenClick : undefined,\n onDoubleClick: interactive ? handleTokenDoubleClick : undefined,\n onRemove: interactive ? handleIconClick : undefined,\n disabled,\n },\n index,\n );\n\n if (interactive) {\n this.memoizedTokens.set(this.props.selectedItems?.indexOf(item), renderedToken);\n }\n return renderedToken;\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonInvalidComment, addButtonTitle } = this.locale;\n const isInvalid = !this.canAcceptInputAsToken(value);\n\n return (\n <MenuItem\n onClick={this.handleAddItem}\n comment={isInvalid ? addButtonInvalidComment : addButtonComment}\n disabled={isInvalid}\n key=\"renderAddButton\"\n >\n {`${addButtonTitle} \\u00AB${value}\\u00BB`}\n </MenuItem>\n );\n };\n\n private isTokenDisabled = (itemIndex: number) => {\n let renderedToken;\n if (this.memoizedTokens.has(itemIndex)) {\n renderedToken = this.memoizedTokens.get(itemIndex);\n } else if (itemIndex < 0 || itemIndex > this.getProps().selectedItems.length - 1) {\n return false;\n } else {\n renderedToken = this.renderToken(this.getProps().selectedItems[itemIndex], itemIndex) as React.ReactElement<\n TokenInputProps<unknown>\n >;\n }\n return renderedToken.props.disabled;\n };\n\n private getAvailableTokenIndex = (startIndex: number, isDirectionLeft = true) => {\n const { selectedItems } = this.getProps();\n const step = isDirectionLeft ? -1 : +1;\n let availableIndex = startIndex + step;\n\n while (this.isTokenDisabled(availableIndex)) {\n availableIndex += step;\n if (availableIndex === selectedItems.length) {\n return availableIndex;\n } else if (availableIndex === -1) {\n return startIndex;\n }\n }\n\n return availableIndex;\n };\n}\n\nfunction isSimpleItem<T>(item: TokenInputExtendedItem<T>): item is T {\n return !isFunction(item) && !React.isValidElement(item);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TokenInput.js","sourceRoot":"","sources":["TokenInput.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\nimport lodashIsEqual from 'lodash.isequal';\nimport type {\n AriaAttributes,\n ChangeEvent,\n FocusEvent,\n FocusEventHandler,\n HTMLAttributes,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactElement,\n ReactNode,\n} from 'react';\nimport React from 'react';\nimport warning from 'warning';\n\nimport type { CommonProps } from '../../internal/CommonWrapper/index.js';\nimport { CommonWrapper } from '../../internal/CommonWrapper/index.js';\nimport { ComboBoxRequestStatus } from '../../internal/CustomComboBox/CustomComboBoxTypes.js';\nimport type { Menu } from '../../internal/Menu/index.js';\nimport { PopupIds } from '../../internal/Popup/index.js';\nimport { blink } from '../../lib/blink.js';\nimport { createPropsGetter } from '../../lib/createPropsGetter.js';\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isCodeComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers.js';\nimport type { GlobalObject } from '../../lib/globalObject.js';\nimport * as LayoutEvents from '../../lib/LayoutEvents.js';\nimport { locale } from '../../lib/locale/decorators.js';\nimport { withRenderEnvironment } from '../../lib/renderEnvironment/index.js';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode/index.js';\nimport { getRootNode, rootNode } from '../../lib/rootNode/index.js';\nimport { withSize } from '../../lib/size/SizeDecorator.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { ThemeContext } from '../../lib/theming/ThemeContext.js';\nimport type { SizeProp } from '../../lib/types/props.js';\nimport { getUid } from '../../lib/uidUtils.js';\nimport { emptyHandler, getRandomID, isFunction } from '../../lib/utils.js';\nimport type { AnyObject } from '../../lib/utils.js';\nimport { MenuItem } from '../MenuItem/index.js';\nimport type { MenuItemState } from '../MenuItem/index.js';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator.js';\nimport { ScrollContainer } from '../ScrollContainer/index.js';\nimport type { TokenProps, TokenSize } from '../Token/index.js';\nimport { Token } from '../Token/index.js';\nimport { TokenView } from '../Token/TokenView.js';\nimport type { TokenInputLocale } from './locale/index.js';\nimport { TokenInputLocaleHelper } from './locale/index.js';\nimport { TextWidthHelper } from './TextWidthHelper.js';\nimport { getStyles } from './TokenInput.styles.js';\nimport { TokenInputMenu } from './TokenInputMenu.js';\nimport { TokenInputMobileMenu } from './TokenInputMobileMenu.js';\nimport type { TokenInputAction, TokenInputInternalState } from './TokenInputReducer.js';\nimport { tokenInputReducer } from './TokenInputReducer.js';\n\nconst TEMP_FAKE_FLAG = 'TEMP_FAKE_FLAG';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T>\n extends\n CommonProps,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** Токены, которые будут отображаться в поле ввода. */\n selectedItems?: T[];\n\n /** Событие добавления нового токена. */\n onValueChange?: (items: T[]) => void;\n\n /** HTML-событие `onmouseenter`.\n * @ignore */\n onMouseEnter?: MouseEventHandler<HTMLDivElement>;\n\n /** HTML-событие `onmouseleave`.\n * @ignore */\n onMouseLeave?: MouseEventHandler<HTMLDivElement>;\n\n /** HTML-событие `onfocus`.\n * @ignore */\n onFocus?: FocusEventHandler<HTMLTextAreaElement>;\n\n /** HTML-событие `onblur`.\n * @ignore */\n onBlur?: FocusEventHandler<HTMLTextAreaElement>;\n\n /** HTML-событие `onkeydown`. */\n onKeyDown?: KeyboardEventHandler<HTMLTextAreaElement>;\n\n /** Устанавливает фокус на поле с токенами после окончания загрузки страницы. */\n autoFocus?: boolean;\n\n /** Размер поля с токенами. */\n size?: TokenSize;\n\n /** Тип инпута.\n * Возможные значения:\n * - `TokenInputType.Combined` — в поле можно выбирать значения из справочника и добавлять свои значения.\n * - `TokenInputType.WithReference` — можно только выбрать значения из справочника, но нельзя добавлять свои.\n * - `TokenInputType.WithoutReference` — можно добавлять любые значения, но подсказок из справочника нет. */\n type?: TokenInputType;\n\n /** Ширина выпадающего списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Выравнивание выпадающего списка. */\n menuAlign?: TokenInputMenuAlign;\n\n /** Задаёт функцию поиска значений, которая должна возвращать Promise с массивом значений. По умолчанию ожидаются строки.\n * Элементы могут быть любого типа. В этом случае необходимо определить свойства `renderItem`, `renderToken`, `valueToString` и `valueToItem`. */\n getItems?: (query: string) => Promise<Array<TokenInputExtendedItem<T>>>;\n\n /** Ограничивает отображение выпадающего списка при фокусе на пустом поле: выпадающий список появится, только когда будет введён хотя бы один символ токена. */\n hideMenuIfEmptyInputValue?: boolean;\n\n /** Отрисовывает элемент списка. */\n renderItem?: (item: T, state: MenuItemState) => React.ReactNode | null;\n\n /** Отрисовывает выбранное значение.\n * @deprecated Используйте `renderToken` для отрисовки выбранного значения и `valueToString` для преобразования значения в строку.\n */\n renderValue?: (item: T) => React.ReactNode;\n\n /** Возвращает строковое представление `value`. Необходимо при фокусировке.\n * @default item => item */\n valueToString?: (item: T) => string;\n\n /** Отрисовывает сообщение об общем количестве элементов.\n * @param {number} found - количество элементов по результатам поиска. Учитывает только компонент MenuItem. Им оборачиваются элементы, возвращаемые `getItems()`.\n * @param {number} total - количество всех элементов. */\n renderTotalCount?: (found: number, total: number) => React.ReactNode;\n\n /** Определяет общее количество элементов. Необходим для работы `renderTotalCount`. */\n totalCount?: number;\n\n /** Отрисовывает сообщение о пустом результате поиска. При `renderAddButton` не работает. */\n renderNotFound?: () => React.ReactNode;\n\n /** Преобразовывает значение в элемент списка.\n * @default value => value\n */\n valueToItem?: (value: string) => T;\n\n /** Сравнивает полученные результаты с `value`. */\n itemToId?: (item: T) => string | number | undefined;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: string;\n\n /** Символы, которые разделяют введённый текст на токены. По умолчанию — запятая. */\n delimiters?: string[];\n\n /** Меняет визуальное отображение токена на состояние «ошибка». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n error?: boolean;\n\n /** Меняет визуальное отображение токена на состояние «предупреждение». Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n warning?: boolean;\n\n /** Блокирует поле с токенами. */\n disabled?: boolean;\n\n /** Ширина поля с токенами. */\n width?: string | number;\n\n /** Максимальная высота выпадающего списка. */\n maxMenuHeight?: number | string;\n\n /** Отрисовывает токен и даёт возможность кастомизировать внешний вид и поведение токена. */\n renderToken?: (item: T, props: Partial<TokenProps>, index: number) => ReactNode;\n\n /** Событие изменения текста в поле ввода, если результатом функции будет строка, то она станет следующим состоянием полем ввода. */\n onInputValueChange?: (value: string) => void;\n\n /** Отрисовывает кнопку добавления нового токена в выпадающем списке. */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n\n /** Событие обработки ввода строки в поле ввода и последующая потеря фокуса компонентом.\n * Функция срабатывает с аргументом поля строки.\n * Если при потере фокуса в выпадающем списке будет только один элемент и результат `valueToString` с этим элементом будет совпадать со значением в текстовом поле, то сработает `onValueChange` со значением данного элемента.\n * Сама функция также может вернуть значение, не равное undefined, с которым будет вызван `onValueChange`. Если возвращаемое значение будет равно null, то сработает очистка текущего значения поля, а в режиме редактирования токен будет удален. */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n\n /** Задаёт функцию, которая проверяет, можно ли создать токен из свободного ввода.\n * Если вернуть `false`, токен не создаётся и поле мигает. Не применяется при выборе из справочника. */\n isTokenValid?: (value: string) => boolean;\n\n /** Задаёт типы вводимых данных. Передаёт браузеру информацию о том, какой набор символов показать при вводе данных в конкретное поле на устройствах с экранной клавиатурой. */\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n\n /**\n * Максимальная высота компонента. При её достижении появится скроллбар\n */\n maxHeight?: number;\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: Array<TokenInputExtendedItem<T>>;\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n showMobilePopup?: boolean;\n}\n\nexport type TokenInputExtendedItem<T> = T | (() => React.ReactElement<T>) | React.ReactElement<T>;\n\nexport const DefaultState: TokenInputInternalState<any> = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n showMobilePopup: false,\n requestStatus: ComboBoxRequestStatus.Unknown,\n};\n\nexport const TokenInputDataTids = {\n root: 'TokenInput__root',\n tokenInputMenu: 'TokenInputMenu__root',\n label: 'TokenInput__label',\n} as const;\n\ntype DefaultProps<T> = Required<\n Pick<\n TokenInputProps<T>,\n | 'selectedItems'\n | 'delimiters'\n | 'renderItem'\n | 'renderValue'\n | 'valueToString'\n | 'valueToItem'\n | 'itemToId'\n | 'onValueChange'\n | 'width'\n | 'onBlur'\n | 'onFocus'\n | 'onMouseEnter'\n | 'onMouseLeave'\n | 'menuWidth'\n | 'menuAlign'\n >\n>;\n\nconst identity = <T extends unknown>(item: T): T => item;\nconst defaultRenderToken = <T extends AnyObject>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled, size }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n size={size}\n >\n {item.toString()}\n </Token>\n);\n\n/** Поле с токенами — это поле ввода со списком подсказок. Значения в поле отображаются в виде отдельных токенов.\n */\n@responsiveLayout\n@withRenderEnvironment\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\n@withSize\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputInternalState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n public static displayName = 'TokenInput';\n\n public static defaultProps: DefaultProps<any> = {\n selectedItems: [],\n // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.\n delimiters: [',', TEMP_FAKE_FLAG],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n itemToId: identity,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n private getDelimiters(): string[] {\n const delimiters = this.props.delimiters ?? [];\n if (delimiters.every((delimiter) => delimiter !== TEMP_FAKE_FLAG)) {\n return delimiters;\n }\n return delimiters.filter((delimiter) => delimiter !== TEMP_FAKE_FLAG);\n }\n\n private getProps() {\n const propsGetter = createPropsGetter(TokenInput.defaultProps);\n const propsWithOldDelimiters = propsGetter.apply(this);\n return { ...propsWithOldDelimiters, delimiters: this.getDelimiters() };\n }\n\n private get textareaId() {\n return this.props.id ?? this._textareaId;\n }\n\n public state: TokenInputInternalState<T> = DefaultState;\n\n private readonly _textareaId: string = getUid();\n private rootId = PopupIds.root + getRandomID();\n private readonly locale!: TokenInputLocale;\n private globalObject!: GlobalObject;\n private emotion!: Emotion;\n private cx!: Emotion['cx'];\n private styles!: ReturnType<typeof getStyles>;\n private theme!: Theme;\n private size!: SizeProp;\n private isMobileLayout!: boolean;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | TokenInputMobileMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private scrollContainerRef = React.createRef<ScrollContainer>();\n private scrollContainerInnerRef = React.createRef<HTMLDivElement>();\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private memoizedTokens = new Map();\n private menuNavigatedByUser = false;\n private requestId = 0;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n this.globalObject.document?.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T> & DefaultProps<T>, prevState: TokenInputInternalState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.getProps().selectedItems.length) {\n LayoutEvents.emit();\n this.memoizedTokens.clear();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n if (!prevState.showMobilePopup && this.state.showMobilePopup && this.usesMobilePopup) {\n this.globalObject.requestAnimationFrame?.(() => {\n this.input?.focus({ preventScroll: true });\n this.tryGetItems(this.state.inputValue);\n });\n }\n }\n\n private get usesMobilePopup(): boolean {\n return this.isMobileLayout && this.type !== TokenInputType.WithoutReference;\n }\n\n private isInlineInteractive(): boolean {\n return !(this.usesMobilePopup && !!this.state.showMobilePopup);\n }\n\n public componentWillUnmount() {\n this.cancelRequest();\n this.globalObject.document?.removeEventListener('copy', this.handleCopy);\n }\n\n /** Программно устанавливает фокус на поле.\n * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\n * @public\n */\n public focus(): void {\n this.input?.focus();\n }\n\n /** Программно снимает фокус с поля.\n * @public\n */\n public blur(): void {\n this.input?.blur();\n }\n\n /** Кратковременно визуально подсвечивает поле ввода, чтобы привлечь внимание пользователя.\n * @public\n */\n public blink(): void {\n blink({ el: this.wrapper, blinkColor: this.theme.inputBlinkColor });\n }\n\n public render(): React.JSX.Element {\n this.styles = getStyles(this.emotion);\n\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private getLabelSizeClassName() {\n switch (this.size) {\n case 'large':\n return this.styles.labelLarge(this.theme);\n case 'medium':\n return this.styles.labelMedium(this.theme);\n case 'small':\n default:\n return this.styles.labelSmall(this.theme);\n }\n }\n\n private getInputSizeClassName() {\n switch (this.size) {\n case 'large':\n return this.styles.inputLarge(this.theme);\n case 'medium':\n return this.styles.inputMedium(this.theme);\n case 'small':\n default:\n return this.styles.inputSmall(this.theme);\n }\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n warning(false, `getItems is required for \"Combined\" and \"WithReference\" modes.`);\n }\n const { onMouseEnter, onMouseLeave } = this.getProps();\n const { showMobilePopup } = this.state;\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div data-tid={TokenInputDataTids.root} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n {this.renderInlineField()}\n {this.usesMobilePopup && showMobilePopup && this.renderMobileMenu()}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderInlineField = (): ReactElement => {\n return this.renderTokenInputField({\n variant: 'inline',\n interactive: this.isInlineInteractive(),\n fieldWidth: this.getProps().width,\n showMenu: Boolean(\n !this.isMobileLayout &&\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n this.state.activeTokens.length === 0 &&\n (this.isInputValueChanged || !this.props.hideMenuIfEmptyInputValue),\n ),\n });\n };\n\n private renderMobilePopupFooter = (): ReactElement => {\n return this.renderTokenInputField({\n variant: 'mobileFooter',\n interactive: true,\n fieldWidth: '100%',\n showMenu: false,\n });\n };\n\n private renderTokenInputField = ({\n variant,\n interactive,\n fieldWidth,\n showMenu,\n }: {\n variant: 'inline' | 'mobileFooter';\n interactive: boolean;\n fieldWidth: React.CSSProperties['width'];\n showMenu: boolean;\n }): ReactElement => {\n const {\n maxMenuHeight,\n error,\n warning,\n disabled,\n renderNotFound,\n inputMode,\n renderTotalCount,\n totalCount,\n 'aria-describedby': ariaDescribedby,\n 'aria-label': ariaLabel,\n maxHeight,\n } = this.props;\n\n const { selectedItems, menuWidth, menuAlign, renderItem } = this.getProps();\n const isMobileFooter = variant === 'mobileFooter';\n const { inFocus, inputValueWidth, inputValueHeight, inputValue, reservedInputValue, loading } = this.state;\n\n const theme = this.theme;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: inputValueHeight,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible && interactive ? undefined : 'transparent',\n };\n\n const labelClassName = this.cx(this.styles.label(theme), this.getLabelSizeClassName(), {\n [this.styles.labelNonInteractive()]: !interactive,\n [this.styles.hovering(this.theme)]: interactive && !inFocus && !disabled && !warning && !error,\n [this.styles.labelDisabled(theme)]: !!disabled,\n [this.styles.labelFocused(theme)]: interactive && !!inFocus,\n [this.styles.error(theme)]: !!error,\n [this.styles.warning(theme)]: !!warning,\n });\n const inputClassName = this.cx(this.styles.input(theme), this.getInputSizeClassName(), {\n [this.styles.inputDisabled(theme)]: !!disabled,\n });\n\n const placeholder = selectedItems.length === 0 && !inputValue ? this.props.placeholder : '';\n\n const inputNode = (\n <TokenView\n size={this.size}\n className={this.cx({\n [this.styles.inputWrapperDisabled()]: !!disabled,\n // input растягивается на всю ширину чтобы placeholder не обрезался\n [this.styles.inputPlaceholderWrapper()]: Boolean(placeholder),\n })}\n hideCloseButton={Boolean(placeholder)}\n >\n <textarea\n id={isMobileFooter || interactive ? this.textareaId : undefined}\n ref={isMobileFooter ? this.mobileInputRef : this.inlineInputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n readOnly={!interactive}\n tabIndex={!interactive ? -1 : undefined}\n className={inputClassName}\n placeholder={placeholder}\n onFocus={interactive ? this.handleInputFocus : undefined}\n onBlur={interactive ? this.handleInputBlur : undefined}\n onChange={interactive ? this.handleChangeInputValue : undefined}\n onKeyDown={interactive ? this.handleKeyDown : undefined}\n onPaste={interactive ? this.handleInputPaste : undefined}\n inputMode={inputMode}\n aria-label={isMobileFooter || interactive ? ariaLabel : undefined}\n aria-describedby={isMobileFooter || interactive ? ariaDescribedby : undefined}\n aria-hidden={!interactive ? true : undefined}\n aria-busy={interactive && loading ? true : undefined}\n autoFocus={isMobileFooter}\n />\n </TokenView>\n );\n\n const inner = (\n <>\n {isMobileFooter ? null : (\n <TextWidthHelper ref={this.textHelperRef} text={inputValue} theme={this.theme} size={this.size} />\n )}\n {this.renderTokensStart(interactive)}\n {inputNode}\n {showMenu && (\n <TokenInputMenu\n popupMenuId={this.rootId}\n ref={this.tokensInputMenuRef}\n items={this.getMenuItems()}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElementForCursor={this.input}\n anchorElementRoot={this.wrapper}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n renderTotalCount={renderTotalCount}\n totalCount={totalCount}\n size={this.size}\n requestStatus={this.state.requestStatus}\n repeatRequest={this.repeatRequest}\n />\n )}\n {this.renderTokensEnd(interactive)}\n {this.isEditingMode ? (\n <TokenView size={this.size}>\n <span className={this.styles.reservedInput(theme)}>{reservedInputValue}</span>\n </TokenView>\n ) : null}\n </>\n );\n\n const container =\n maxHeight && !isMobileFooter ? (\n <ScrollContainer\n ref={this.scrollContainerRef}\n className={this.styles.inputPlaceholderScrollWrapper()}\n scrollRef={this.scrollContainerInnerRef}\n maxHeight={maxHeight}\n showScrollBar=\"always\"\n style={{ width: '100%' }}\n >\n {inner}\n </ScrollContainer>\n ) : (\n inner\n );\n\n const labelStyle: React.CSSProperties = {\n width: fieldWidth,\n };\n\n return (\n <label\n ref={isMobileFooter ? this.mobileWrapperRef : this.inlineWrapperRef}\n style={labelStyle}\n className={labelClassName}\n onMouseDown={interactive ? this.handleWrapperMouseDown : undefined}\n onMouseUp={interactive ? this.handleWrapperMouseUp : undefined}\n // Для корректной работы скролла приходится ломать связь label с полем ввода\n // Иначе любой клик внутри label вызывает фокус и автоскроллинг к полю ввода\n htmlFor={!interactive || maxHeight ? 'fake-id' : this.textareaId}\n aria-controls={interactive ? this.rootId : undefined}\n aria-hidden={!interactive ? true : undefined}\n data-tid={isMobileFooter || interactive ? TokenInputDataTids.label : undefined}\n >\n {container}\n </label>\n );\n };\n\n private renderMobileMenu = (): ReactElement => {\n const { maxMenuHeight, renderNotFound, renderTotalCount, totalCount } = this.props;\n\n const { renderItem } = this.getProps();\n const { loading } = this.state;\n\n return (\n <TokenInputMobileMenu\n popupMenuId={this.rootId}\n ref={(node) => {\n this.tokensInputMenuRef(node);\n }}\n items={this.getMenuItems()}\n loading={loading}\n opened\n maxMenuHeight={maxMenuHeight}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n renderTotalCount={renderTotalCount}\n totalCount={totalCount}\n size={this.size}\n requestStatus={this.state.requestStatus}\n repeatRequest={this.repeatRequest}\n mobileFooterComponent={this.renderMobilePopupFooter()}\n onCloseRequest={() => {\n this.cancelRequest();\n this.dispatch({\n type: 'SET_CLOSE_MOBILE_POPUP',\n });\n }}\n />\n );\n };\n\n /**\n * Сбрасывает введённое пользователем значение.\n * @public\n */\n public reset(): void {\n this.dispatch({ type: 'RESET' });\n }\n\n private isEqual = (itemA: T, itemB: T) => {\n const { itemToId } = this.getProps();\n return lodashIsEqual(itemToId(itemA), itemToId(itemB));\n };\n\n private hasValueInItems = (items: T[], value: string | T) => {\n const { valueToString } = this.getProps();\n if (typeof value === 'string') {\n return items.map((item) => valueToString(item)).includes(value);\n }\n\n return items.some((item) => this.isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems?.filter(isSimpleItem);\n const value = this.getProps().valueToItem(this.state.inputValue);\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.getProps().selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.isInputValueChanged) {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (state.editingTokenIndex > -1 || state.activeTokens.length === 0);\n }\n\n private inlineInputRef = (node: HTMLTextAreaElement | null) => {\n if (!this.usesMobilePopup || !this.state.showMobilePopup) {\n this.input = node;\n }\n };\n\n private mobileInputRef = (node: HTMLTextAreaElement | null) => {\n if (this.usesMobilePopup && !!this.state.showMobilePopup) {\n this.input = node;\n }\n };\n\n private tokensInputMenuRef = (node: TokenInputMenu<T> | TokenInputMobileMenu<T> | null) => {\n this.tokensInputMenu = node;\n };\n\n private textHelperRef = (node: TextWidthHelper) => {\n this.textHelper = node;\n };\n\n private inlineWrapperRef = (node: HTMLLabelElement | null) => {\n if (!this.usesMobilePopup || !this.state.showMobilePopup) {\n this.wrapper = node;\n }\n };\n\n private mobileWrapperRef = (node: HTMLLabelElement | null) => {\n if (this.usesMobilePopup && !!this.state.showMobilePopup) {\n this.wrapper = node;\n }\n };\n\n private getMenuItems() {\n if (this.state.requestStatus === ComboBoxRequestStatus.Failed) {\n return null;\n }\n return this.state.autocompleteItems;\n }\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n if (this.usesMobilePopup) {\n if (!this.state.showMobilePopup) {\n this.dispatch({ type: 'SET_SHOW_MOBILE_POPUP' });\n return;\n }\n }\n\n if (!this.state.inFocus) {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n this.getProps().onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (this.usesMobilePopup) {\n return;\n }\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus({ preventScroll: true });\n // в firefox не работает без второго focus\n this.globalObject.requestAnimationFrame?.(() => this.input?.focus({ preventScroll: true }));\n\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.cancelRequest();\n this.dispatch({ type: 'BLUR' });\n this.getProps().onBlur(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems: allItems } = this.state;\n const autocompleteItems = allItems?.filter(isSimpleItem);\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n if (this.state.loading || this.state.requestStatus === ComboBoxRequestStatus.Failed) {\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (this.getProps().valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) {\n this.checkForUnexpectedInput();\n }\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { valueToString, selectedItems } = this.getProps();\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef && this.globalObject.document) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = event.relatedTarget || this.globalObject.document.activeElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken = target && this.wrapper?.contains(target) && target !== this.wrapper && target !== this.input;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = (e: React.MouseEvent<HTMLElement>) => {\n // Имитируем поведение label, когда задан maxHeight.\n if (\n this.props.maxHeight &&\n e.target === this.scrollContainerInnerRef.current &&\n (this.state.activeTokens.length !== 0 || !this.state.inFocus)\n ) {\n this.dispatch({ type: 'BLUR' });\n this.dispatch({ type: 'SET_FOCUS_IN' });\n this.focusInput();\n this.input?.scrollIntoView({ behavior: 'auto', block: 'center' });\n }\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n const { selectedItems, valueToString, delimiters } = this.getProps();\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => selectedItems.indexOf(token))\n .sort()\n .map((index) => selectedItems[index])\n .map((item) => valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(delimiters[0]));\n };\n\n private get isDelimiterInputEnabled(): boolean {\n return this.type !== TokenInputType.WithReference;\n }\n\n private inputValueEndsWithDelimiter(value: string): boolean {\n return this.getProps().delimiters.some((delimiter) => value.endsWith(delimiter));\n }\n\n private splitValueByDelimiters(value: string): string[] {\n const pattern = this.getProps()\n .delimiters.map((delimiter) => delimiter.replace(/[\\\\^\\-[\\]]/g, '\\\\$&'))\n .join('');\n return value.split(new RegExp(`[${pattern}]+`));\n }\n\n private isDelimiterKeyEvent(e: KeyboardEvent<HTMLTextAreaElement>, delimiter: string): boolean {\n if (delimiter === ',') {\n return e.key === delimiter || isKeyComma(e) || isCodeComma(e);\n }\n return e.key === delimiter;\n }\n\n private canAcceptInputAsToken(value: string): boolean {\n if (!value) {\n return false;\n }\n\n const { isTokenValid } = this.props;\n if (!isTokenValid) {\n return true;\n }\n\n return isTokenValid(value);\n }\n\n private rejectIfInvalidToken(value: string): boolean {\n if (!value || !this.props.isTokenValid) {\n return false;\n }\n if (this.props.isTokenValid(value)) {\n return false;\n }\n this.blink();\n return true;\n }\n\n private hasExactAutocompleteMatch(value: string): boolean {\n const { valueToString } = this.getProps();\n return this.state.autocompleteItems?.filter(isSimpleItem).some((item) => valueToString(item) === value) ?? false;\n }\n\n private createItemsFromTokens(tokens: string[], selectedItems: T[]): { items: T[]; remainder: string } {\n const { valueToItem, delimiters } = this.getProps();\n const items: T[] = [];\n let remainder = '';\n const joinDelimiter = delimiters[0] ?? ',';\n\n for (let index = 0; index < tokens.length; index++) {\n const token = tokens[index];\n if (!token) {\n continue;\n }\n\n if (!this.canAcceptInputAsToken(token)) {\n remainder = tokens.slice(index).filter(Boolean).join(joinDelimiter);\n break;\n }\n\n const item = valueToItem(token);\n if (item && !this.hasValueInItems(selectedItems.concat(items), item)) {\n items.push(item);\n }\n }\n\n return { items, remainder };\n }\n\n private tryApplyDelimiterFromInputValue(rawValue: string): false | { nextInputValue: string } {\n const { delimiters, selectedItems, onValueChange } = this.getProps();\n const trailingDelimiter = delimiters.find((delimiter) => rawValue.endsWith(delimiter));\n if (!trailingDelimiter) {\n return false;\n }\n\n const valueWithoutTrailingDelimiter = rawValue.slice(0, rawValue.length - trailingDelimiter.length);\n\n if (this.isEditingMode) {\n if (valueWithoutTrailingDelimiter !== '') {\n if (this.rejectIfInvalidToken(valueWithoutTrailingDelimiter)) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueWithoutTrailingDelimiter });\n return { nextInputValue: valueWithoutTrailingDelimiter };\n }\n\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueWithoutTrailingDelimiter }, () => {\n this.finishTokenEdit();\n });\n return { nextInputValue: valueWithoutTrailingDelimiter };\n }\n return { nextInputValue: this.state.inputValue };\n }\n\n if (valueWithoutTrailingDelimiter === '') {\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n return { nextInputValue: '' };\n }\n\n const tokens = this.splitValueByDelimiters(valueWithoutTrailingDelimiter);\n const { items, remainder } = this.createItemsFromTokens(tokens, selectedItems);\n\n if (items.length > 0) {\n onValueChange(selectedItems.concat(items));\n }\n\n if (remainder) {\n this.blink();\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.dispatch({ type: 'UPDATE_QUERY', payload: remainder }, () => this.tryGetItems(remainder));\n return { nextInputValue: remainder };\n }\n\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n return { nextInputValue: '' };\n }\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n const paste = event.clipboardData.getData('text');\n const { delimiters, selectedItems, onValueChange } = this.getProps();\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n const tokens = this.splitValueByDelimiters(paste.trim());\n const { items, remainder } = this.createItemsFromTokens(tokens, selectedItems);\n\n if (items.length > 0) {\n onValueChange(selectedItems.concat(items));\n }\n\n this.menuNavigatedByUser = false;\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n if (remainder) {\n this.blink();\n this.dispatch({ type: 'UPDATE_QUERY', payload: remainder }, () => this.tryGetItems(remainder));\n this.props.onInputValueChange?.(remainder);\n } else {\n this.tryGetItems();\n }\n }\n };\n\n private repeatRequest = () => {\n this.tryGetItems(this.state.inputValue);\n this.input?.focus();\n };\n\n private cancelRequest = () => {\n this.requestId += 1;\n };\n\n private tryGetItems = async (query = '') => {\n if (!this.props.getItems || (!this.isInputValueChanged && this.props.hideMenuIfEmptyInputValue)) {\n this.cancelRequest();\n return;\n }\n this.requestId += 1;\n const expectingId = this.requestId;\n this.dispatch({ type: 'SET_LOADING', payload: true });\n let autocompleteItems: Array<TokenInputExtendedItem<T>>;\n try {\n autocompleteItems = await this.props.getItems(query);\n } catch {\n if (expectingId !== this.requestId) {\n return;\n }\n this.dispatch({ type: 'SET_REQUEST_FAILURE' });\n this.globalObject.requestAnimationFrame?.(() => this.menuRef?.highlightItem(0));\n return;\n }\n if (expectingId !== this.requestId) {\n return;\n }\n\n const { selectedItems, valueToItem, valueToString } = this.getProps();\n const isSelectedItem = (item: T) => this.hasValueInItems(selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = selectedItems[this.state.editingTokenIndex];\n return !!editingItem && this.isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) =>\n isSimpleItem(item) ? !isSelectedItem(item) || isEditingItem(item) : true,\n );\n const autocompleteItemsUniqueSimple = autocompleteItemsUnique.filter(isSimpleItem);\n\n if (this.isEditingMode) {\n const editingItem = selectedItems[this.state.editingTokenIndex];\n if (\n this.isEqual(editingItem, valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUniqueSimple, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.isInputValueChanged) {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n } else {\n this.dispatch({ type: 'SET_LOADING', payload: false });\n }\n const selectItemIndex = autocompleteItemsUniqueSimple.findIndex(\n (item) => valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n let highlightIndex: number | null = null;\n if (selectItemIndex >= 0) {\n highlightIndex = selectItemIndex;\n } else {\n highlightIndex = 0;\n }\n if (highlightIndex !== null) {\n const applyMenuHighlight = () => this.menuRef?.highlightItem(highlightIndex);\n this.globalObject.requestAnimationFrame?.(applyMenuHighlight);\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n this.props.onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.isDelimiterInputEnabled && this.getProps().delimiters.some((key) => this.isDelimiterKeyEvent(e, key))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n const isRightmostTokenNotDisabled = !this.isTokenDisabled(this.getProps().selectedItems.length - 1);\n const canSetValueToInput =\n this.showAddItemHint ||\n (this.state.autocompleteItems?.length ?? 0) > 0 ||\n this.state.requestStatus === ComboBoxRequestStatus.Failed;\n\n switch (true) {\n case isKeyEnter(e):\n if (this.type !== TokenInputType.WithoutReference) {\n if (\n !this.menuNavigatedByUser &&\n !this.hasExactAutocompleteMatch(this.state.inputValue) &&\n this.rejectIfInvalidToken(this.state.inputValue)\n ) {\n // free-text rejected: blink already done, do not select menu item\n } else if (canSetValueToInput && this.menuRef) {\n this.menuRef.enter(e);\n }\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n this.menuNavigatedByUser = true;\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode && isRightmostTokenNotDisabled) {\n this.moveFocusToLastToken();\n }\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n const index = this.getAvailableTokenIndex(this.getProps().selectedItems.length);\n const itemNew = this.getProps().selectedItems[index];\n if (itemNew) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] }, this.scrollToSelection);\n }\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.getProps().selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) }, this.scrollToSelection);\n }\n }\n\n private focusInput = (options?: FocusOptions) => {\n this.globalObject.requestAnimationFrame?.(() => this.input?.focus(options));\n if (this.usesMobilePopup && !this.state.showMobilePopup) {\n this.dispatch({ type: 'SET_SHOW_MOBILE_POPUP' });\n }\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n const { selectedItems, onValueChange } = this.getProps();\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n const indexOfActiveToken = this.getProps().selectedItems.indexOf(\n this.state.activeTokens[this.state.activeTokens.length - 1],\n );\n if (!this.isEditingMode && !this.isTokenDisabled(indexOfActiveToken)) {\n const itemsNew = selectedItems.filter((item) => !this.hasValueInItems(this.state.activeTokens, item));\n onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: selectedItems.filter((item) => !this.isTokenDisabled(selectedItems.indexOf(item))),\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const selectedItems = this.getProps().selectedItems;\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = selectedItems.indexOf(activeTokens[0]);\n const isRightDirection = isKeyArrowRight(e);\n const newItemIndex = this.getAvailableTokenIndex(activeItemIndex, isKeyArrowLeft(e));\n const isLeftEdge = newItemIndex === activeItemIndex && isKeyArrowLeft(e);\n const isRightEdge = newItemIndex === selectedItems.length && isRightDirection;\n\n if (!e.shiftKey && activeTokens.length > 1) {\n const activeIndices = activeTokens.map((item) => selectedItems.indexOf(item));\n const edgeIndex = isRightDirection ? Math.max(...activeIndices) : Math.min(...activeIndices);\n const isRightEdgeOfSelection =\n isRightDirection && this.getAvailableTokenIndex(edgeIndex, false) === selectedItems.length;\n const nextActiveTokens = isRightEdgeOfSelection ? [] : [selectedItems[edgeIndex]];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: nextActiveTokens }, this.scrollToSelection);\n return;\n }\n\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, isRightDirection, newItemIndex, activeItemIndex);\n }\n };\n\n private scrollToSelection = () => {\n const activeItemIndex = this.getProps().selectedItems.indexOf(this.state.activeTokens[0]);\n // TextWidthHelper is the first child; each token renders one root element.\n const node =\n activeItemIndex < 0\n ? this.input\n : (this.scrollContainerInnerRef.current?.children.item(activeItemIndex + 1) as HTMLElement | null);\n\n this.scrollContainerRef.current?.scrollTo(node);\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, this.scrollToSelection);\n } else if (!isLeftEdge) {\n this.dispatch(\n {\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.getProps().selectedItems[newItemIndex]],\n },\n this.scrollToSelection,\n );\n }\n };\n\n private handleWrapperArrowsWithShift = (\n isLeftEdge: boolean,\n isRightEdge: boolean,\n isRightDirection: boolean,\n newItemIndex: number,\n activeItemIndex: number,\n ) => {\n const { selectedItems } = this.getProps();\n const { activeTokens } = this.state;\n const isActive = (item: (typeof selectedItems)[number]) =>\n activeTokens.some((activeItem) => this.isEqual(activeItem, item));\n\n const currentItem = selectedItems[activeItemIndex];\n const selectionWithoutCurrentItem = () => activeTokens.filter((item) => !this.isEqual(item, currentItem));\n\n if (isLeftEdge || isRightEdge) {\n /** Когда стрелка упирается в край, дальше двигаться нельзя.\n * Проверяем ближайший доступный токен в обратном направлении,\n * пропуская disabled токены.\n Если текущий токен выделен, а сосед не выделен или его нет,\n снимаем выделение с текущего токена.\n Если сосед тоже выделен, сохраняем выделение. */\n const searchNeighborToLeft = isRightDirection;\n const neighborIndex = this.getAvailableTokenIndex(activeItemIndex, searchNeighborToLeft);\n const neighborItem = selectedItems[neighborIndex];\n const hasNoNeighbor = neighborIndex === activeItemIndex;\n const canRemoveCurrentItem = isActive(currentItem) && (hasNoNeighbor || !isActive(neighborItem));\n\n if (canRemoveCurrentItem) {\n this.dispatch(\n {\n type: 'SET_ACTIVE_TOKENS',\n payload: selectionWithoutCurrentItem(),\n },\n this.scrollToSelection,\n );\n }\n\n return;\n }\n\n const targetItem = selectedItems[newItemIndex];\n const isShrinkingSelection = isActive(targetItem);\n const nextActiveTokens = isShrinkingSelection\n ? selectionWithoutCurrentItem()\n : [targetItem, ...activeTokens.filter((item) => !this.isEqual(item, targetItem))];\n\n this.dispatch(\n {\n type: 'SET_ACTIVE_TOKENS',\n payload: nextActiveTokens,\n },\n this.scrollToSelection,\n );\n };\n\n private handleValueChange = (items: T[]) => {\n this.getProps().onValueChange(items);\n };\n\n private handleAddItem = () => {\n const { inputValue } = this.state;\n if (!inputValue) {\n return;\n }\n if (this.rejectIfInvalidToken(inputValue)) {\n return;\n }\n\n const item = this.getProps().valueToItem(inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems: allItems, valueToString } = this.getProps();\n const selectedItems = allItems.filter(isSimpleItem);\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueToString(item) }, this.finishTokenEdit);\n } else if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange?.(this.getProps().selectedItems.filter((_) => !this.isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !this.isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0 && !(this.usesMobilePopup && this.state.showMobilePopup)) {\n this.focusInput({ preventScroll: true });\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !this.isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput({ preventScroll: true });\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const { selectedItems, valueToString } = this.getProps();\n const editingTokenIndex = selectedItems.findIndex((item) => this.isEqual(item, itemNew));\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.isInputValueChanged) {\n if (this.state.reservedInputValue === undefined) {\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { selectedItems, valueToString } = this.getProps();\n const { editingTokenIndex, inputValue, reservedInputValue, autocompleteItems } = this.state;\n\n const autocompleteMatch = autocompleteItems\n ?.filter(isSimpleItem)\n .find((item) => valueToString(item) === inputValue);\n const editedItem = autocompleteMatch ?? this.getProps().valueToItem(inputValue);\n\n if (this.isInputValueChanged && !autocompleteMatch) {\n if (!inputValue || this.rejectIfInvalidToken(inputValue)) {\n return;\n }\n }\n\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(this.isInputValueChanged ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput?.(inputValue);\n\n if (returnedValue === undefined) {\n if (this.type === TokenInputType.WithoutReference) {\n this.handleAddItem();\n }\n\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n const returnedInputValue = this.getProps().valueToString(returnedValue);\n if (this.rejectIfInvalidToken(returnedInputValue)) {\n return;\n }\n this.selectItem(returnedValue);\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n this.menuNavigatedByUser = false;\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.isInputValueChanged && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n if (this.isDelimiterInputEnabled && this.inputValueEndsWithDelimiter(query)) {\n const delimiterResult = this.tryApplyDelimiterFromInputValue(query);\n if (delimiterResult) {\n this.props.onInputValueChange?.(delimiterResult.nextInputValue);\n return;\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (this.menuRef && this.state.autocompleteItems && this.state.autocompleteItems.length > 0) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = (interactive = true) => {\n const { editingTokenIndex } = this.state;\n const selectedItems = this.getProps().selectedItems;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map((x, index) => this.renderToken(x, index, interactive));\n };\n\n private renderTokensEnd = (interactive = true) => {\n if (this.state.editingTokenIndex >= 0) {\n const startIndex = this.state.editingTokenIndex + 1;\n return this.getProps()\n .selectedItems.slice(startIndex)\n .map((x, index) => this.renderToken(x, startIndex + index, interactive));\n }\n };\n\n private renderToken = (item: T, index: number, interactive = true) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n\n if (!this.isEditingMode && !disabled && interactive) {\n this.handleTokenEdit(item);\n }\n };\n\n const renderedToken = renderToken(\n item as T & AnyObject,\n {\n size: this.size,\n isActive,\n onClick: interactive ? handleTokenClick : undefined,\n onDoubleClick: interactive ? handleTokenDoubleClick : undefined,\n onRemove: interactive ? handleIconClick : undefined,\n disabled,\n },\n index,\n );\n\n if (interactive) {\n this.memoizedTokens.set(this.props.selectedItems?.indexOf(item), renderedToken);\n }\n return renderedToken;\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonInvalidComment, addButtonTitle } = this.locale;\n const isInvalid = !this.canAcceptInputAsToken(value);\n\n return (\n <MenuItem\n onClick={this.handleAddItem}\n comment={isInvalid ? addButtonInvalidComment : addButtonComment}\n disabled={isInvalid}\n key=\"renderAddButton\"\n >\n {`${addButtonTitle} \\u00AB${value}\\u00BB`}\n </MenuItem>\n );\n };\n\n private isTokenDisabled = (itemIndex: number) => {\n let renderedToken;\n if (this.memoizedTokens.has(itemIndex)) {\n renderedToken = this.memoizedTokens.get(itemIndex);\n } else if (itemIndex < 0 || itemIndex > this.getProps().selectedItems.length - 1) {\n return false;\n } else {\n renderedToken = this.renderToken(this.getProps().selectedItems[itemIndex], itemIndex) as React.ReactElement<\n TokenInputProps<unknown>\n >;\n }\n return renderedToken.props.disabled;\n };\n\n private getAvailableTokenIndex = (startIndex: number, isDirectionLeft = true) => {\n const { selectedItems } = this.getProps();\n const step = isDirectionLeft ? -1 : +1;\n let availableIndex = startIndex + step;\n\n while (availableIndex >= 0 && availableIndex < selectedItems.length && this.isTokenDisabled(availableIndex)) {\n availableIndex += step;\n }\n\n return availableIndex < 0 ? startIndex : availableIndex;\n };\n}\n\nfunction isSimpleItem<T>(item: TokenInputExtendedItem<T>): item is T {\n return !isFunction(item) && !React.isValidElement(item);\n}\n"]}
|
|
@@ -15,6 +15,7 @@ export declare const getStyles: import("../../lib/theming/Emotion.js").StylesGet
|
|
|
15
15
|
inputMedium(t: Theme): string;
|
|
16
16
|
inputLarge(t: Theme): string;
|
|
17
17
|
inputDisabled(t: Theme): string;
|
|
18
|
+
inputWrapperDisabled(): string;
|
|
18
19
|
inputPlaceholderWrapper(): string;
|
|
19
20
|
inputPlaceholderScrollWrapper(): string;
|
|
20
21
|
reservedInput(t: Theme): string;
|
|
@@ -53,16 +53,19 @@ export var getStyles = memoizeGetStyles(function (_a) {
|
|
|
53
53
|
inputDisabled: function (t) {
|
|
54
54
|
return css(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n pointer-events: none;\n /* fix text color in safari */\n -webkit-text-fill-color: currentcolor;\n color: ", ";\n "], ["\n pointer-events: none;\n /* fix text color in safari */\n -webkit-text-fill-color: currentcolor;\n color: ", ";\n "])), t.tokenInputTextColorDisabled);
|
|
55
55
|
},
|
|
56
|
+
inputWrapperDisabled: function () {
|
|
57
|
+
return css(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n &,\n &:hover {\n cursor: default;\n }\n "], ["\n &,\n &:hover {\n cursor: default;\n }\n "])));
|
|
58
|
+
},
|
|
56
59
|
inputPlaceholderWrapper: function () {
|
|
57
|
-
return css(
|
|
60
|
+
return css(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n flex: 1 1 100%;\n "], ["\n flex: 1 1 100%;\n "])));
|
|
58
61
|
},
|
|
59
62
|
inputPlaceholderScrollWrapper: function () {
|
|
60
|
-
return css(
|
|
63
|
+
return css(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n display: flex;\n & .", " {\n display: inherit;\n flex-wrap: wrap;\n }\n "], ["\n display: flex;\n & .", " {\n display: inherit;\n flex-wrap: wrap;\n }\n "])), globalClasses.inner);
|
|
61
64
|
},
|
|
62
65
|
reservedInput: function (t) {
|
|
63
|
-
return css(
|
|
66
|
+
return css(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n min-width: 2px;\n color: ", ";\n word-break: break-all;\n "], ["\n min-width: 2px;\n color: ", ";\n word-break: break-all;\n "])), t.tokenInputTextColorDisabled);
|
|
64
67
|
},
|
|
65
68
|
});
|
|
66
69
|
});
|
|
67
|
-
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18;
|
|
70
|
+
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19;
|
|
68
71
|
//# sourceMappingURL=TokenInput.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TokenInput.styles.js","sourceRoot":"","sources":["TokenInput.styles.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TokenInput.styles.js","sourceRoot":"","sources":["TokenInput.styles.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Emotion } from '@emotion/css/create-instance';\n\nimport { memoizeGetStyles } from '../../lib/theming/Emotion.js';\nimport type { Theme } from '../../lib/theming/Theme.js';\nimport { globalClasses } from '../ScrollContainer/ScrollContainer.styles.js';\nimport { inputSizeMixin, labelSizeMixin } from './TokenInput.mixins.js';\n\nexport const getStyles = memoizeGetStyles(({ css }: Emotion) => ({\n label(t: Theme) {\n return css`\n background-color: ${t.tokenInputBg};\n box-shadow: ${t.tokenInputShadow};\n border: ${t.tokenInputBorderWidth} solid ${t.tokenInputBorderColor};\n border-top-color: ${t.tokenInputBorderTopColor};\n transition: border-color ${t.transitionDuration} ${t.transitionTimingFunction};\n box-sizing: border-box;\n cursor: text;\n display: flex;\n flex-wrap: wrap;\n align-items: start;\n outline: none;\n position: relative;\n border-radius: ${t.tokenInputBorderRadius};\n `;\n },\n labelSmall(t: Theme) {\n return css`\n ${labelSizeMixin(t.tokenInputPaddingYSmall, t.tokenInputPaddingXSmall)}\n `;\n },\n labelMedium(t: Theme) {\n return css`\n ${labelSizeMixin(t.tokenInputPaddingYMedium, t.tokenInputPaddingXMedium)}\n `;\n },\n labelLarge(t: Theme) {\n return css`\n ${labelSizeMixin(t.tokenInputPaddingYLarge, t.tokenInputPaddingXLarge)}\n `;\n },\n\n hovering(t: Theme) {\n return css`\n &:hover {\n border-color: ${t.tokenInputBorderColorHover};\n }\n `;\n },\n\n warning(t: Theme) {\n return css`\n border: ${t.tokenInputBorderWidth} solid ${t.tokenInputBorderColorWarning};\n box-shadow: 0 0 0 ${t.tokenInputOutlineWidth} ${t.tokenInputBorderColorWarning};\n `;\n },\n\n error(t: Theme) {\n return css`\n border: ${t.tokenInputBorderWidth} solid ${t.tokenInputBorderColorError};\n box-shadow: 0 0 0 ${t.tokenInputOutlineWidth} ${t.tokenInputBorderColorError};\n `;\n },\n\n labelFocused(t: Theme) {\n return css`\n border: ${t.tokenInputBorderWidth} solid ${t.tokenInputBorderColorFocus};\n box-shadow: 0 0 0 ${t.tokenInputOutlineWidth} ${t.tokenInputBorderColorFocus};\n `;\n },\n\n labelDisabled(t: Theme) {\n return css`\n background: ${t.tokenInputDisabledBg};\n background-clip: ${t.inputDisabledBackgroundClip};\n border-color: ${t.tokenInputDisabledBorderColor};\n box-shadow: none;\n cursor: default;\n `;\n },\n\n labelNonInteractive() {\n return css`\n pointer-events: none;\n `;\n },\n\n input(t: Theme) {\n return css`\n background: transparent;\n border: none;\n box-shadow: none;\n outline: none;\n font-family: inherit;\n overflow: hidden;\n resize: none;\n -webkit-appearance: none;\n text-overflow: clip;\n background-clip: padding-box;\n transition: background-color 0.15s ease-in;\n color: ${t.tokenInputTextColor};\n box-sizing: border-box;\n word-break: break-all;\n padding: 0;\n margin: 0;\n flex: 1 1 100%;\n\n &::-ms-clear {\n display: none;\n }\n &::placeholder {\n color: ${t.tokenInputPlaceholderColor};\n -webkit-text-fill-color: ${t.tokenInputPlaceholderColor};\n }\n &:disabled::placeholder {\n color: ${t.tokenInputPlaceholderColorDisabled};\n -webkit-text-fill-color: ${t.tokenInputPlaceholderColorDisabled};\n }\n &:focus::placeholder {\n color: ${t.tokenInputPlaceholderColorLight};\n -webkit-text-fill-color: ${t.tokenInputPlaceholderColorLight};\n }\n /* fix firefox placeholder opacity */\n &:-moz-placeholder {\n opacity: 1;\n }\n &::-moz-placeholder {\n opacity: 1;\n }\n `;\n },\n inputSmall(t: Theme) {\n return css`\n ${inputSizeMixin(t.tokenFontSizeSmall, t.tokenInputLineHeightSmall)};\n `;\n },\n inputMedium(t: Theme) {\n return css`\n ${inputSizeMixin(t.tokenFontSizeMedium, t.tokenInputLineHeightMedium)};\n `;\n },\n inputLarge(t: Theme) {\n return css`\n ${inputSizeMixin(t.tokenFontSizeLarge, t.tokenInputLineHeightLarge)};\n `;\n },\n\n inputDisabled(t: Theme) {\n return css`\n pointer-events: none;\n /* fix text color in safari */\n -webkit-text-fill-color: currentcolor;\n color: ${t.tokenInputTextColorDisabled};\n `;\n },\n\n inputWrapperDisabled() {\n return css`\n &,\n &:hover {\n cursor: default;\n }\n `;\n },\n\n inputPlaceholderWrapper() {\n return css`\n flex: 1 1 100%;\n `;\n },\n\n inputPlaceholderScrollWrapper() {\n return css`\n display: flex;\n & .${globalClasses.inner} {\n display: inherit;\n flex-wrap: wrap;\n }\n `;\n },\n\n reservedInput(t: Theme) {\n return css`\n min-width: 2px;\n color: ${t.tokenInputTextColorDisabled};\n word-break: break-all;\n `;\n },\n}));\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skbkontur/react-ui",
|
|
3
|
-
"version": "6.4.
|
|
3
|
+
"version": "6.4.5",
|
|
4
4
|
"description": "UI Components",
|
|
5
5
|
"homepage": "https://tech.skbkontur.ru/kontur-ui",
|
|
6
6
|
"bugs": {
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
"release:unstable": "yarn release --tag=unstable",
|
|
252
252
|
"storybook": "storybook dev -p 6060",
|
|
253
253
|
"storybook:build": "cross-env STORYBOOK_REACT_UI_TEST=true storybook build -o .storybook/build --quiet",
|
|
254
|
-
"storybook:docs-build": "cross-env STORYBOOK_REACT_UI_DOCS=true storybook build --docs -c .storybook-docs -o .storybook/build --quiet && yarn docs:generate-ai",
|
|
254
|
+
"storybook:docs-build": "cross-env STORYBOOK_REACT_UI_DOCS=true NODE_OPTIONS=--max-old-space-size=4096 storybook build --docs -c .storybook-docs -o .storybook/build --quiet && yarn docs:generate-ai",
|
|
255
255
|
"docs:generate-ai": "node scripts/generate-ai-docs.mts --strict",
|
|
256
256
|
"storybook:test": "cross-env STORYBOOK_REACT_UI_TEST=true storybook dev --ci -p 6060",
|
|
257
257
|
"storybook:docs": "cross-env STORYBOOK_REACT_UI_DOCS=true storybook dev --docs -p 6061 -c .storybook-docs",
|