@skbkontur/react-ui 3.8.5 → 3.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/cjs/components/Button/Button.d.ts +66 -10
  3. package/cjs/components/Button/Button.js +55 -0
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/Button/Button.md +42 -30
  6. package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
  7. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  8. package/cjs/components/ComboBox/ComboBox.d.ts +6 -0
  9. package/cjs/components/ComboBox/ComboBox.js +4 -0
  10. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  11. package/cjs/components/DateInput/DateInput.d.ts +6 -0
  12. package/cjs/components/DateInput/DateInput.js +6 -0
  13. package/cjs/components/DateInput/DateInput.js.map +1 -1
  14. package/cjs/components/DatePicker/DatePicker.d.ts +6 -0
  15. package/cjs/components/DatePicker/DatePicker.js +6 -0
  16. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  17. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  18. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  19. package/cjs/components/Hint/Hint.d.ts +5 -0
  20. package/cjs/components/Hint/Hint.js +5 -0
  21. package/cjs/components/Hint/Hint.js.map +1 -1
  22. package/cjs/components/Input/Input.d.ts +6 -2
  23. package/cjs/components/Input/Input.js +4 -0
  24. package/cjs/components/Input/Input.js.map +1 -1
  25. package/cjs/components/Link/Link.js +3 -6
  26. package/cjs/components/Link/Link.js.map +1 -1
  27. package/cjs/components/Link/Link.mixins.js +2 -1
  28. package/cjs/components/Link/Link.mixins.js.map +1 -1
  29. package/cjs/components/Radio/Radio.d.ts +27 -11
  30. package/cjs/components/Radio/Radio.js +19 -6
  31. package/cjs/components/Radio/Radio.js.map +1 -1
  32. package/cjs/components/Radio/Radio.md +36 -12
  33. package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -2
  34. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  35. package/cjs/components/Select/Select.d.ts +4 -1
  36. package/cjs/components/Select/Select.js +3 -0
  37. package/cjs/components/Select/Select.js.map +1 -1
  38. package/cjs/components/Tabs/Tab.d.ts +2 -2
  39. package/cjs/components/Tabs/Tab.js.map +1 -1
  40. package/cjs/components/Textarea/Textarea.d.ts +6 -2
  41. package/cjs/components/Textarea/Textarea.js +4 -0
  42. package/cjs/components/Textarea/Textarea.js.map +1 -1
  43. package/cjs/components/Toggle/Toggle.d.ts +2 -2
  44. package/cjs/components/Toggle/Toggle.js.map +1 -1
  45. package/cjs/components/Token/Token.d.ts +6 -0
  46. package/cjs/components/Token/Token.js +6 -0
  47. package/cjs/components/Token/Token.js.map +1 -1
  48. package/cjs/components/TokenInput/TokenInput.d.ts +6 -0
  49. package/cjs/components/TokenInput/TokenInput.js +6 -0
  50. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  51. package/cjs/components/TokenInput/TokenInputMenu.js +1 -1
  52. package/cjs/components/TokenInput/TokenInputMenu.js.map +1 -1
  53. package/cjs/components/Tooltip/Tooltip.d.ts +3 -3
  54. package/cjs/components/Tooltip/Tooltip.js +2 -1
  55. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  56. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  57. package/cjs/internal/CustomComboBox/ComboBoxView.js +6 -0
  58. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  59. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  60. package/cjs/internal/CustomComboBox/CustomComboBox.js +6 -0
  61. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  62. package/cjs/internal/Popup/Popup.d.ts +13 -0
  63. package/cjs/internal/Popup/Popup.js +25 -3
  64. package/cjs/internal/Popup/Popup.js.map +1 -1
  65. package/cjs/internal/Popup/PopupHelper.js +1 -0
  66. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  67. package/components/Button/Button/Button.js.map +1 -1
  68. package/components/Button/Button.d.ts +66 -10
  69. package/components/Button/Button.md +42 -30
  70. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  71. package/components/Checkbox/Checkbox.d.ts +2 -2
  72. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  73. package/components/ComboBox/ComboBox.d.ts +6 -0
  74. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  75. package/components/DateInput/DateInput.d.ts +6 -0
  76. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  77. package/components/DatePicker/DatePicker.d.ts +6 -0
  78. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  79. package/components/Dropdown/Dropdown.d.ts +2 -2
  80. package/components/Hint/Hint/Hint.js.map +1 -1
  81. package/components/Hint/Hint.d.ts +5 -0
  82. package/components/Input/Input/Input.js.map +1 -1
  83. package/components/Input/Input.d.ts +6 -2
  84. package/components/Link/Link/Link.js +4 -8
  85. package/components/Link/Link/Link.js.map +1 -1
  86. package/components/Link/Link.mixins/Link.mixins.js +1 -1
  87. package/components/Link/Link.mixins/Link.mixins.js.map +1 -1
  88. package/components/Radio/Radio/Radio.js +6 -5
  89. package/components/Radio/Radio/Radio.js.map +1 -1
  90. package/components/Radio/Radio.d.ts +27 -11
  91. package/components/Radio/Radio.md +36 -12
  92. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  93. package/components/RadioGroup/RadioGroup.d.ts +2 -2
  94. package/components/Select/Select/Select.js.map +1 -1
  95. package/components/Select/Select.d.ts +4 -1
  96. package/components/Tabs/Tab/Tab.js.map +1 -1
  97. package/components/Tabs/Tab.d.ts +2 -2
  98. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  99. package/components/Textarea/Textarea.d.ts +6 -2
  100. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  101. package/components/Toggle/Toggle.d.ts +2 -2
  102. package/components/Token/Token/Token.js.map +1 -1
  103. package/components/Token/Token.d.ts +6 -0
  104. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  105. package/components/TokenInput/TokenInput.d.ts +6 -0
  106. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js +1 -1
  107. package/components/TokenInput/TokenInputMenu/TokenInputMenu.js.map +1 -1
  108. package/components/Tooltip/Tooltip/Tooltip.js +2 -1
  109. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  110. package/components/Tooltip/Tooltip.d.ts +3 -3
  111. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  112. package/internal/CustomComboBox/ComboBoxView.d.ts +6 -0
  113. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  114. package/internal/CustomComboBox/CustomComboBox.d.ts +6 -0
  115. package/internal/Popup/Popup/Popup.js +9 -2
  116. package/internal/Popup/Popup/Popup.js.map +1 -1
  117. package/internal/Popup/Popup.d.ts +13 -0
  118. package/internal/Popup/PopupHelper/PopupHelper.js +2 -1
  119. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  120. package/package.json +2 -2
@@ -48,7 +48,13 @@ export interface TokenInputProps<T> extends CommonProps {
48
48
  toKey: (item: T) => string | number | undefined;
49
49
  placeholder?: string;
50
50
  delimiters: string[];
51
+ /**
52
+ * Cостояние валидации при ошибке.
53
+ */
51
54
  error?: boolean;
55
+ /**
56
+ * Cостояние валидации при предупреждении.
57
+ */
52
58
  warning?: boolean;
53
59
  disabled?: boolean;
54
60
  width?: string | number;
@@ -125,6 +125,12 @@ TokenInputType;exports.TokenInputType = TokenInputType;(function (TokenInputType
125
125
 
126
126
 
127
127
 
128
+
129
+
130
+
131
+
132
+
133
+
128
134
 
129
135
 
130
136
 
@@ -1 +1 @@
1
- {"version":3,"sources":["TokenInput.tsx"],"names":["TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","TokenInputLocaleHelper","state","locale","theme","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","LayoutEvents","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","renderMain","WithoutReference","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","styles","label","labelFocused","labelDisabled","inputClassName","inputDisabled","inputEditing","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","getMenuRef","isInputValueChanged","React","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey","emptyHandler"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n error?: boolean;\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: 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}\n\nexport const DefaultState = {\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};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: 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 >\n {item}\n </Token>\n);\n\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\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 public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<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.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n [styles.labelDisabled(theme)]: !!disabled,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\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.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\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 this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input!.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input!.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\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 // чекаем автокомплит на совпадение с введеным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) this.checkForUnexpectedInput();\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 { selectedItems, valueToString } = this.props;\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) {\n const menu = findDOMNode(this.menuRef) as HTMLElement | null;\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\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 =\n 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 = () => {\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\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\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.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))\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\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\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 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) this.moveFocusToLastToken();\n break;\n case isKeyArrowLeft(e):\n if (this.input!.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.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 = () => {\n requestAnimationFrame(() => this.input!.focus());\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 switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.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: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && 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.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else {\n if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\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) => !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();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined)\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [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 if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\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 this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\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 (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\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 if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\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, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["TokenInput.tsx"],"names":["TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","TokenInputLocaleHelper","state","locale","theme","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","LayoutEvents","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","renderMain","WithoutReference","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","styles","label","labelFocused","labelDisabled","inputClassName","inputDisabled","inputEditing","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","getMenuRef","isInputValueChanged","React","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey","emptyHandler"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport { findDOMNode } from 'react-dom';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: 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}\n\nexport const DefaultState = {\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};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: 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 >\n {item}\n </Token>\n);\n\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\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 public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<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.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n [styles.labelDisabled(theme)]: !!disabled,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\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.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\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 this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input!.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input!.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\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 // чекаем автокомплит на совпадение с введеным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) this.checkForUnexpectedInput();\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 { selectedItems, valueToString } = this.props;\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) {\n const menu = findDOMNode(this.menuRef) as HTMLElement | null;\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\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 =\n 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 = () => {\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\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\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.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))\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\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\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 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) this.moveFocusToLastToken();\n break;\n case isKeyArrowLeft(e):\n if (this.input!.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.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 = () => {\n requestAnimationFrame(() => this.input!.focus());\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 switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.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: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && 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.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else {\n if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\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) => !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();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined)\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [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 if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\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 this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\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 (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\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 if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\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, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
@@ -98,4 +98,4 @@ TokenInputMenu = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.d
98
98
  return paddingY + outlineWidth + marginY;
99
99
  };_this.
100
100
 
101
- menuRef = function (node) {return _this.menu = node;};return _this;}var _proto = TokenInputMenu.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupMargin: _this2.getPopupMargin() + 'px' }, theme) }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this$props = this.props,loading = _this$props.loading,maxMenuHeight = _this$props.maxMenuHeight,renderTotalCount = _this$props.renderTotalCount,totalCount = _this$props.totalCount,opened = _this$props.opened,items = _this$props.items,renderNotFound = _this$props.renderNotFound,renderItem = _this$props.renderItem,onValueChange = _this$props.onValueChange,renderAddButton = _this$props.renderAddButton,anchorElement = _this$props.anchorElement,menuWidth = _this$props.menuWidth,menuAlign = _this$props.menuAlign;return /*#__PURE__*/_react.default.createElement(_Popup.Popup, { opened: opened, positions: ['bottom left'], anchorElement: anchorElement, popupOffset: menuAlign === 'left' ? 0 : 5, margin: menuAlign === 'left' ? 1 : undefined, hasShadow: (0, _ThemeHelpers.is8pxTheme)(this.theme), width: menuAlign === 'cursor' ? 'auto' : menuWidth }, /*#__PURE__*/_react.default.createElement(_CustomComboBox.ComboBoxMenu, { items: items, loading: loading, maxMenuHeight: maxMenuHeight, onValueChange: onValueChange, opened: opened, refMenu: this.menuRef, renderTotalCount: renderTotalCount, renderItem: renderItem, renderNotFound: renderNotFound, totalCount: totalCount, renderAddButton: renderAddButton }));};return TokenInputMenu;}(_react.default.Component);exports.TokenInputMenu = TokenInputMenu;TokenInputMenu.__KONTUR_REACT_UI__ = 'TokenInputMenu';
101
+ menuRef = function (node) {return _this.menu = node;};return _this;}var _proto = TokenInputMenu.prototype;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Provider, { value: _ThemeFactory.ThemeFactory.create({ popupMargin: _this2.getPopupMargin() + 'px' }, theme) }, _this2.renderMain());});};_proto.renderMain = function renderMain() {var _this$props = this.props,loading = _this$props.loading,maxMenuHeight = _this$props.maxMenuHeight,renderTotalCount = _this$props.renderTotalCount,totalCount = _this$props.totalCount,opened = _this$props.opened,items = _this$props.items,renderNotFound = _this$props.renderNotFound,renderItem = _this$props.renderItem,onValueChange = _this$props.onValueChange,renderAddButton = _this$props.renderAddButton,anchorElement = _this$props.anchorElement,menuWidth = _this$props.menuWidth,menuAlign = _this$props.menuAlign;return /*#__PURE__*/_react.default.createElement(_Popup.Popup, { opened: opened, positions: ['bottom left', 'top left'], anchorElement: anchorElement, popupOffset: menuAlign === 'left' ? 0 : 5, margin: menuAlign === 'left' ? 1 : undefined, hasShadow: (0, _ThemeHelpers.is8pxTheme)(this.theme), width: menuAlign === 'cursor' ? 'auto' : menuWidth }, /*#__PURE__*/_react.default.createElement(_CustomComboBox.ComboBoxMenu, { items: items, loading: loading, maxMenuHeight: maxMenuHeight, onValueChange: onValueChange, opened: opened, refMenu: this.menuRef, renderTotalCount: renderTotalCount, renderItem: renderItem, renderNotFound: renderNotFound, totalCount: totalCount, renderAddButton: renderAddButton }));};return TokenInputMenu;}(_react.default.Component);exports.TokenInputMenu = TokenInputMenu;TokenInputMenu.__KONTUR_REACT_UI__ = 'TokenInputMenu';
@@ -1 +1 @@
1
- {"version":3,"sources":["TokenInputMenu.tsx"],"names":["TokenInputMenu","theme","menu","getMenuRef","getPopupMargin","paddingY","parseInt","tokenInputPaddingY","outlineWidth","controlOutlineWidth","marginY","tokenMarginY","menuRef","node","render","ThemeFactory","create","popupMargin","renderMain","props","loading","maxMenuHeight","renderTotalCount","totalCount","opened","items","renderNotFound","renderItem","onValueChange","renderAddButton","anchorElement","menuWidth","menuAlign","undefined","React","Component","__KONTUR_REACT_UI__"],"mappings":"0PAAA;;AAEA;AACA;AACA;;;AAGA;AACA,8D;;;;;;;;;;AAUaA,c;;;AAGHC,IAAAA,K;;AAEAC,IAAAA,I,GAAoB,I;;;;;;;;;;;;;;;;;;;;;;;;AAwBrBC,IAAAA,U,GAAa,oBAAkB,MAAKD,IAAvB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CZE,IAAAA,c,GAAiB,YAAc;AACrC,UAAMC,QAAQ,GAAGC,QAAQ,CAAC,MAAKL,KAAL,CAAWM,kBAAZ,EAAgC,EAAhC,CAAR,IAA+C,CAAhE;AACA,UAAMC,YAAY,GAAGF,QAAQ,CAAC,MAAKL,KAAL,CAAWQ,mBAAZ,EAAiC,EAAjC,CAAR,IAAgD,CAArE;AACA,UAAMC,OAAO,GAAGJ,QAAQ,CAAC,MAAKL,KAAL,CAAWU,YAAZ,EAA0B,EAA1B,CAAR,IAAyC,CAAzD;AACA,aAAON,QAAQ,GAAGG,YAAX,GAA0BE,OAAjC;AACD,K;;AAEOE,IAAAA,O,GAAU,UAACC,IAAD,UAAgB,MAAKX,IAAL,GAAYW,IAA5B,E,4DA3EXC,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACb,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,6BAAC,0BAAD,CAAc,QAAd,IACE,KAAK,EAAEc,2BAAaC,MAAb,CACL,EACEC,WAAW,EAAE,MAAI,CAACb,cAAL,KAAwB,IADvC,EADK,EAILH,KAJK,CADT,IAQG,MAAI,CAACiB,UAAL,EARH,CADF,CAYD,CAfH,CADF,CAmBD,C,QAIOA,U,GAAR,sBAAqB,mBAef,KAAKC,KAfU,CAEjBC,OAFiB,eAEjBA,OAFiB,CAGjBC,aAHiB,eAGjBA,aAHiB,CAIjBC,gBAJiB,eAIjBA,gBAJiB,CAKjBC,UALiB,eAKjBA,UALiB,CAMjBC,MANiB,eAMjBA,MANiB,CAOjBC,KAPiB,eAOjBA,KAPiB,CAQjBC,cARiB,eAQjBA,cARiB,CASjBC,UATiB,eASjBA,UATiB,CAUjBC,aAViB,eAUjBA,aAViB,CAWjBC,eAXiB,eAWjBA,eAXiB,CAYjBC,aAZiB,eAYjBA,aAZiB,CAajBC,SAbiB,eAajBA,SAbiB,CAcjBC,SAdiB,eAcjBA,SAdiB,CAiBnB,oBACE,6BAAC,YAAD,IACE,MAAM,EAAER,MADV,EAEE,SAAS,EAAE,CAAC,aAAD,CAFb,EAGE,aAAa,EAAEM,aAHjB,EAIE,WAAW,EAAEE,SAAS,KAAK,MAAd,GAAuB,CAAvB,GAA2B,CAJ1C,EAKE,MAAM,EAAEA,SAAS,KAAK,MAAd,GAAuB,CAAvB,GAA2BC,SALrC,EAME,SAAS,EAAE,8BAAW,KAAKhC,KAAhB,CANb,EAOE,KAAK,EAAE+B,SAAS,KAAK,QAAd,GAAyB,MAAzB,GAAkCD,SAP3C,iBASE,6BAAC,4BAAD,IACE,KAAK,EAAEN,KADT,EAEE,OAAO,EAAEL,OAFX,EAGE,aAAa,EAAEC,aAHjB,EAIE,aAAa,EAAEO,aAJjB,EAKE,MAAM,EAAEJ,MALV,EAME,OAAO,EAAE,KAAKZ,OANhB,EAOE,gBAAgB,EAAEU,gBAPpB,EAQE,UAAU,EAAEK,UARd,EASE,cAAc,EAAED,cATlB,EAUE,UAAU,EAAEH,UAVd,EAWE,eAAe,EAAEM,eAXnB,GATF,CADF,CAyBD,C,yBAzE6CK,eAAMC,S,0CAAzCnC,c,CACGoC,mB,GAAsB,gB","sourcesContent":["import React from 'react';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Popup } from '../../internal/Popup';\nimport { ComboBoxMenu, ComboBoxMenuProps } from '../../internal/CustomComboBox';\nimport { Menu } from '../../internal/Menu';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { is8pxTheme } from '../../lib/theming/ThemeHelpers';\n\nimport { TokenInputMenuAlign, TokenInputProps } from './TokenInput';\n\nexport interface TokenInputMenuProps<T> extends ComboBoxMenuProps<T> {\n anchorElement: HTMLElement;\n menuWidth: TokenInputProps<string>['menuWidth'];\n menuAlign: TokenInputMenuAlign;\n}\n\nexport class TokenInputMenu<T = string> extends React.Component<TokenInputMenuProps<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInputMenu';\n\n private theme!: Theme;\n\n private menu: Menu | null = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupMargin: this.getPopupMargin() + 'px',\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getMenuRef = (): any | null => this.menu;\n\n private renderMain() {\n const {\n loading,\n maxMenuHeight,\n renderTotalCount,\n totalCount,\n opened,\n items,\n renderNotFound,\n renderItem,\n onValueChange,\n renderAddButton,\n anchorElement,\n menuWidth,\n menuAlign,\n } = this.props;\n\n return (\n <Popup\n opened={opened!}\n positions={['bottom left']}\n anchorElement={anchorElement}\n popupOffset={menuAlign === 'left' ? 0 : 5}\n margin={menuAlign === 'left' ? 1 : undefined}\n hasShadow={is8pxTheme(this.theme)}\n width={menuAlign === 'cursor' ? 'auto' : menuWidth}\n >\n <ComboBoxMenu\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={onValueChange}\n opened={opened}\n refMenu={this.menuRef}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n totalCount={totalCount}\n renderAddButton={renderAddButton}\n />\n </Popup>\n );\n }\n\n private getPopupMargin = (): number => {\n const paddingY = parseInt(this.theme.tokenInputPaddingY, 10) || 0;\n const outlineWidth = parseInt(this.theme.controlOutlineWidth, 10) || 0;\n const marginY = parseInt(this.theme.tokenMarginY, 10) || 0;\n return paddingY + outlineWidth + marginY;\n };\n\n private menuRef = (node: any) => (this.menu = node);\n}\n"]}
1
+ {"version":3,"sources":["TokenInputMenu.tsx"],"names":["TokenInputMenu","theme","menu","getMenuRef","getPopupMargin","paddingY","parseInt","tokenInputPaddingY","outlineWidth","controlOutlineWidth","marginY","tokenMarginY","menuRef","node","render","ThemeFactory","create","popupMargin","renderMain","props","loading","maxMenuHeight","renderTotalCount","totalCount","opened","items","renderNotFound","renderItem","onValueChange","renderAddButton","anchorElement","menuWidth","menuAlign","undefined","React","Component","__KONTUR_REACT_UI__"],"mappings":"0PAAA;;AAEA;AACA;AACA;;;AAGA;AACA,8D;;;;;;;;;;AAUaA,c;;;AAGHC,IAAAA,K;;AAEAC,IAAAA,I,GAAoB,I;;;;;;;;;;;;;;;;;;;;;;;;AAwBrBC,IAAAA,U,GAAa,oBAAkB,MAAKD,IAAvB,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CZE,IAAAA,c,GAAiB,YAAc;AACrC,UAAMC,QAAQ,GAAGC,QAAQ,CAAC,MAAKL,KAAL,CAAWM,kBAAZ,EAAgC,EAAhC,CAAR,IAA+C,CAAhE;AACA,UAAMC,YAAY,GAAGF,QAAQ,CAAC,MAAKL,KAAL,CAAWQ,mBAAZ,EAAiC,EAAjC,CAAR,IAAgD,CAArE;AACA,UAAMC,OAAO,GAAGJ,QAAQ,CAAC,MAAKL,KAAL,CAAWU,YAAZ,EAA0B,EAA1B,CAAR,IAAyC,CAAzD;AACA,aAAON,QAAQ,GAAGG,YAAX,GAA0BE,OAAjC;AACD,K;;AAEOE,IAAAA,O,GAAU,UAACC,IAAD,UAAgB,MAAKX,IAAL,GAAYW,IAA5B,E,4DA3EXC,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACb,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,oBACE,6BAAC,0BAAD,CAAc,QAAd,IACE,KAAK,EAAEc,2BAAaC,MAAb,CACL,EACEC,WAAW,EAAE,MAAI,CAACb,cAAL,KAAwB,IADvC,EADK,EAILH,KAJK,CADT,IAQG,MAAI,CAACiB,UAAL,EARH,CADF,CAYD,CAfH,CADF,CAmBD,C,QAIOA,U,GAAR,sBAAqB,mBAef,KAAKC,KAfU,CAEjBC,OAFiB,eAEjBA,OAFiB,CAGjBC,aAHiB,eAGjBA,aAHiB,CAIjBC,gBAJiB,eAIjBA,gBAJiB,CAKjBC,UALiB,eAKjBA,UALiB,CAMjBC,MANiB,eAMjBA,MANiB,CAOjBC,KAPiB,eAOjBA,KAPiB,CAQjBC,cARiB,eAQjBA,cARiB,CASjBC,UATiB,eASjBA,UATiB,CAUjBC,aAViB,eAUjBA,aAViB,CAWjBC,eAXiB,eAWjBA,eAXiB,CAYjBC,aAZiB,eAYjBA,aAZiB,CAajBC,SAbiB,eAajBA,SAbiB,CAcjBC,SAdiB,eAcjBA,SAdiB,CAiBnB,oBACE,6BAAC,YAAD,IACE,MAAM,EAAER,MADV,EAEE,SAAS,EAAE,CAAC,aAAD,EAAgB,UAAhB,CAFb,EAGE,aAAa,EAAEM,aAHjB,EAIE,WAAW,EAAEE,SAAS,KAAK,MAAd,GAAuB,CAAvB,GAA2B,CAJ1C,EAKE,MAAM,EAAEA,SAAS,KAAK,MAAd,GAAuB,CAAvB,GAA2BC,SALrC,EAME,SAAS,EAAE,8BAAW,KAAKhC,KAAhB,CANb,EAOE,KAAK,EAAE+B,SAAS,KAAK,QAAd,GAAyB,MAAzB,GAAkCD,SAP3C,iBASE,6BAAC,4BAAD,IACE,KAAK,EAAEN,KADT,EAEE,OAAO,EAAEL,OAFX,EAGE,aAAa,EAAEC,aAHjB,EAIE,aAAa,EAAEO,aAJjB,EAKE,MAAM,EAAEJ,MALV,EAME,OAAO,EAAE,KAAKZ,OANhB,EAOE,gBAAgB,EAAEU,gBAPpB,EAQE,UAAU,EAAEK,UARd,EASE,cAAc,EAAED,cATlB,EAUE,UAAU,EAAEH,UAVd,EAWE,eAAe,EAAEM,eAXnB,GATF,CADF,CAyBD,C,yBAzE6CK,eAAMC,S,0CAAzCnC,c,CACGoC,mB,GAAsB,gB","sourcesContent":["import React from 'react';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Popup } from '../../internal/Popup';\nimport { ComboBoxMenu, ComboBoxMenuProps } from '../../internal/CustomComboBox';\nimport { Menu } from '../../internal/Menu';\nimport { Theme } from '../../lib/theming/Theme';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { is8pxTheme } from '../../lib/theming/ThemeHelpers';\n\nimport { TokenInputMenuAlign, TokenInputProps } from './TokenInput';\n\nexport interface TokenInputMenuProps<T> extends ComboBoxMenuProps<T> {\n anchorElement: HTMLElement;\n menuWidth: TokenInputProps<string>['menuWidth'];\n menuAlign: TokenInputMenuAlign;\n}\n\nexport class TokenInputMenu<T = string> extends React.Component<TokenInputMenuProps<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInputMenu';\n\n private theme!: Theme;\n\n private menu: Menu | null = null;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupMargin: this.getPopupMargin() + 'px',\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public getMenuRef = (): any | null => this.menu;\n\n private renderMain() {\n const {\n loading,\n maxMenuHeight,\n renderTotalCount,\n totalCount,\n opened,\n items,\n renderNotFound,\n renderItem,\n onValueChange,\n renderAddButton,\n anchorElement,\n menuWidth,\n menuAlign,\n } = this.props;\n\n return (\n <Popup\n opened={opened!}\n positions={['bottom left', 'top left']}\n anchorElement={anchorElement}\n popupOffset={menuAlign === 'left' ? 0 : 5}\n margin={menuAlign === 'left' ? 1 : undefined}\n hasShadow={is8pxTheme(this.theme)}\n width={menuAlign === 'cursor' ? 'auto' : menuWidth}\n >\n <ComboBoxMenu\n items={items}\n loading={loading}\n maxMenuHeight={maxMenuHeight}\n onValueChange={onValueChange}\n opened={opened}\n refMenu={this.menuRef}\n renderTotalCount={renderTotalCount}\n renderItem={renderItem}\n renderNotFound={renderNotFound}\n totalCount={totalCount}\n renderAddButton={renderAddButton}\n />\n </Popup>\n );\n }\n\n private getPopupMargin = (): number => {\n const paddingY = parseInt(this.theme.tokenInputPaddingY, 10) || 0;\n const outlineWidth = parseInt(this.theme.controlOutlineWidth, 10) || 0;\n const marginY = parseInt(this.theme.tokenMarginY, 10) || 0;\n return paddingY + outlineWidth + marginY;\n };\n\n private menuRef = (node: any) => (this.menu = node);\n}\n"]}
@@ -104,9 +104,9 @@ export interface TooltipProps extends CommonProps {
104
104
  */
105
105
  disableAnimations: boolean;
106
106
  /**
107
- * Добавить обертку над children в виде \<span />.
108
- * Требуется для корректного позиционирования в случае
109
- * передачи в корень тултипа нескольких элементов вместо одного.
107
+ * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.
108
+ *
109
+ * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.
110
110
  */
111
111
  useWrapper: boolean;
112
112
  }
@@ -333,6 +333,7 @@ Tooltip = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.defa
333
333
 
334
334
 
335
335
 
336
+
336
337
 
337
338
 
338
339
  refContent = function (node) {
@@ -539,4 +540,4 @@ Tooltip = /*#__PURE__*/function (_React$PureComponent) {(0, _inheritsLoose2.defa
539
540
  * Программно закрывает тултип.
540
541
  * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>
541
542
  * @public
542
- */;_proto.hide = function hide() {if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'hide' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.close();};_proto.renderMain = function renderMain() {var props = this.props;var content = this.renderContent();var _this$getProps = this.getProps(),popupProps = _this$getProps.popupProps,_this$getProps$layerP = _this$getProps.layerProps,layerProps = _this$getProps$layerP === void 0 ? { active: false } : _this$getProps$layerP;var anchorElement = props.children || props.anchorElement;var popup = this.renderPopup(anchorElement, popupProps, content);return /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, layerProps, popup);};_proto.renderPopup = function renderPopup(anchorElement, popupProps, content) {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_Popup.Popup, (0, _extends2.default)({ anchorElement: anchorElement, hasPin: true, hasShadow: true, maxWidth: "none", opened: this.state.opened, disableAnimations: this.props.disableAnimations, positions: this.getPositions(), ignoreHover: this.props.trigger === 'hoverAnchor', onOpen: this.props.onOpen, onClose: this.props.onClose }, popupProps), content));};_proto.getPositions = function getPositions() {if (!this.positions) {var allowedPositions = this.props.allowedPositions;var index = allowedPositions.indexOf(this.props.pos);if (index === -1) {throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));}this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));}return this.positions;};_proto.getProps = function getProps() {var props = this.props;var useWrapper = !!props.children && props.useWrapper;switch (props.trigger) {case 'opened':return { layerProps: { active: true, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { opened: true, useWrapper: useWrapper } };case 'closed':return { popupProps: { opened: false, useWrapper: useWrapper } };case 'hoverAnchor':case 'hover':return { popupProps: { onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };case 'manual':return { popupProps: { useWrapper: useWrapper } };case 'click':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onClick: this.handleClick, useWrapper: useWrapper } };case 'focus':return { popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, useWrapper: useWrapper } };case 'hover&focus':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };default:throw new Error('Unknown trigger specified: ' + props.trigger);}};_proto.clearHoverTimeout = function clearHoverTimeout() {if (this.hoverTimeout) {clearTimeout(this.hoverTimeout);this.hoverTimeout = null;}};_proto.isClickOutsideContent = function isClickOutsideContent(event) {if (this.contentElement && event.target instanceof Element) {return !(0, _listenFocusOutside.containsTargetOrRenderContainer)(event.target)(this.contentElement);}return true;};return Tooltip;}(_react.default.PureComponent);exports.Tooltip = Tooltip;Tooltip.__KONTUR_REACT_UI__ = 'Tooltip';Tooltip.propTypes = { children: function children(props, propName, componentName) {var children = props[propName];(0, _warning.default)(children || props.anchorElement, "[" + componentName + "]: you must provide either 'children' or 'anchorElement' prop for " + componentName + " to work properly");(0, _warning.default)(!(Array.isArray(children) && props.useWrapper === false), "[" + componentName + "]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly");} };Tooltip.defaultProps = { pos: 'top left', trigger: 'hover', allowedPositions: Positions, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, closeOnChildrenMouseLeave: false };Tooltip.delay = 100;Tooltip.triggersWithoutCloseButton = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];
543
+ */;_proto.hide = function hide() {if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'hide' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.close();};_proto.renderMain = function renderMain() {var props = this.props;var content = this.renderContent();var _this$getProps = this.getProps(),popupProps = _this$getProps.popupProps,_this$getProps$layerP = _this$getProps.layerProps,layerProps = _this$getProps$layerP === void 0 ? { active: false } : _this$getProps$layerP;var anchorElement = props.children || props.anchorElement;var popup = this.renderPopup(anchorElement, popupProps, content);return /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, layerProps, popup);};_proto.renderPopup = function renderPopup(anchorElement, popupProps, content) {return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_Popup.Popup, (0, _extends2.default)({ anchorElement: anchorElement, hasPin: true, hasShadow: true, maxWidth: "none", opened: this.state.opened, disableAnimations: this.props.disableAnimations, positions: this.getPositions(), ignoreHover: this.props.trigger === 'hoverAnchor', onOpen: this.props.onOpen, onClose: this.props.onClose, tryPreserveFirstRenderedPosition: true }, popupProps), content));};_proto.getPositions = function getPositions() {if (!this.positions) {var allowedPositions = this.props.allowedPositions;var index = allowedPositions.indexOf(this.props.pos);if (index === -1) {throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));}this.positions = [].concat(allowedPositions.slice(index), allowedPositions.slice(0, index));}return this.positions;};_proto.getProps = function getProps() {var props = this.props;var useWrapper = !!props.children && props.useWrapper;switch (props.trigger) {case 'opened':return { layerProps: { active: true, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { opened: true, useWrapper: useWrapper } };case 'closed':return { popupProps: { opened: false, useWrapper: useWrapper } };case 'hoverAnchor':case 'hover':return { popupProps: { onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };case 'manual':return { popupProps: { useWrapper: useWrapper } };case 'click':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onClick: this.handleClick, useWrapper: useWrapper } };case 'focus':return { popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, useWrapper: useWrapper } };case 'hover&focus':return { layerProps: { active: this.state.opened, onClickOutside: this.handleClickOutsideAnchor }, popupProps: { onFocus: this.handleFocus, onBlur: this.handleBlur, onMouseEnter: this.handleMouseEnter, onMouseLeave: this.handleMouseLeave, useWrapper: useWrapper } };default:throw new Error('Unknown trigger specified: ' + props.trigger);}};_proto.clearHoverTimeout = function clearHoverTimeout() {if (this.hoverTimeout) {clearTimeout(this.hoverTimeout);this.hoverTimeout = null;}};_proto.isClickOutsideContent = function isClickOutsideContent(event) {if (this.contentElement && event.target instanceof Element) {return !(0, _listenFocusOutside.containsTargetOrRenderContainer)(event.target)(this.contentElement);}return true;};return Tooltip;}(_react.default.PureComponent);exports.Tooltip = Tooltip;Tooltip.__KONTUR_REACT_UI__ = 'Tooltip';Tooltip.propTypes = { children: function children(props, propName, componentName) {var children = props[propName];(0, _warning.default)(children || props.anchorElement, "[" + componentName + "]: you must provide either 'children' or 'anchorElement' prop for " + componentName + " to work properly");(0, _warning.default)(!(Array.isArray(children) && props.useWrapper === false), "[" + componentName + "]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly");} };Tooltip.defaultProps = { pos: 'top left', trigger: 'hover', allowedPositions: Positions, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, closeOnChildrenMouseLeave: false };Tooltip.delay = 100;Tooltip.triggersWithoutCloseButton = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","renderContent","content","props","render","refContent","styles","tooltipContent","renderCloseButton","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","UNSAFE_componentWillReceiveProps","nextProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","anchorElement","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","React","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Popup, PopupPosition, PopupProps } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { styles } from './Tooltip.styles';\n\nconst Positions: PopupPosition[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n pos: PopupPosition;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n *\n * ```ts\n * type PopupPosition =\n * 'right bottom',\n * | 'right middle',\n * | 'right top',\n * | 'top right',\n * | 'top center',\n * | 'top left',\n * | 'left top',\n * | 'left middle',\n * | 'left bottom',\n * | 'bottom left',\n * | 'bottom center',\n * | 'bottom right'\n * ```\n */\n allowedPositions: PopupPosition[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Добавить обертку над children в виде \\<span />.\n * Требуется для корректного позиционирования в случае\n * передачи в корень тултипа нескольких элементов вместо одного.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: 'top left',\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPosition[]> = null;\n private clickedOutside = true;\n\n public UNSAFE_componentWillReceiveProps(nextProps: TooltipProps) {\n if (nextProps.trigger === 'closed') {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = nextProps.pos !== pos;\n const allowedChanged = !isEqual(nextProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return <RenderLayer {...layerProps}>{popup}</RenderLayer>;\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","renderContent","content","props","render","refContent","styles","tooltipContent","renderCloseButton","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","UNSAFE_componentWillReceiveProps","nextProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","anchorElement","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","React","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { Popup, PopupPosition, PopupProps } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\n\nimport { styles } from './Tooltip.styles';\n\nconst Positions: PopupPosition[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n pos: PopupPosition;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n *\n * ```ts\n * type PopupPosition =\n * 'right bottom',\n * | 'right middle',\n * | 'right top',\n * | 'top right',\n * | 'top center',\n * | 'top left',\n * | 'left top',\n * | 'left middle',\n * | 'left bottom',\n * | 'bottom left',\n * | 'bottom center',\n * | 'bottom right'\n * ```\n */\n allowedPositions: PopupPosition[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: 'top left',\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPosition[]> = null;\n private clickedOutside = true;\n\n public UNSAFE_componentWillReceiveProps(nextProps: TooltipProps) {\n if (nextProps.trigger === 'closed') {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = nextProps.pos !== pos;\n const allowedChanged = !isEqual(nextProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return <RenderLayer {...layerProps}>{popup}</RenderLayer>;\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
@@ -13,6 +13,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
13
13
  disablePortal?: boolean;
14
14
  disabled?: boolean;
15
15
  editing?: boolean;
16
+ /**
17
+ * Cостояние валидации при ошибке.
18
+ */
16
19
  error?: boolean;
17
20
  items?: Nullable<T[]>;
18
21
  loading?: boolean;
@@ -24,6 +27,9 @@ interface ComboBoxViewProps<T> extends CommonProps {
24
27
  textValue?: string;
25
28
  totalCount?: number;
26
29
  value?: Nullable<T>;
30
+ /**
31
+ * Cостояние валидации при предупреждении.
32
+ */
27
33
  warning?: boolean;
28
34
  width?: string | number;
29
35
  maxLength?: number;