@skbkontur/react-ui 5.4.2 → 5.4.4

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 (46) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/cjs/components/DateRangePicker/DateRangePicker.d.ts +6 -0
  3. package/cjs/components/DateRangePicker/DateRangePicker.js +24 -1
  4. package/cjs/components/DateRangePicker/DateRangePicker.js.map +1 -1
  5. package/cjs/components/DateRangePicker/DateRangePickerInput.js +2 -2
  6. package/cjs/components/DateRangePicker/DateRangePickerInput.js.map +1 -1
  7. package/cjs/components/Textarea/Textarea.d.ts +1 -0
  8. package/cjs/components/Textarea/Textarea.js +14 -2
  9. package/cjs/components/Textarea/Textarea.js.map +1 -1
  10. package/cjs/components/TokenInput/TokenInput.d.ts +6 -3
  11. package/cjs/components/TokenInput/TokenInput.js +43 -28
  12. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  13. package/cjs/internal/ResizeDetector/ResizeDetector.d.ts +1 -0
  14. package/cjs/internal/ResizeDetector/ResizeDetector.js +8 -1
  15. package/cjs/internal/ResizeDetector/ResizeDetector.js.map +1 -1
  16. package/cjs/internal/ResizeDetector/ResizeDetector.styles.d.ts +1 -0
  17. package/cjs/internal/ResizeDetector/ResizeDetector.styles.js +7 -1
  18. package/cjs/internal/ResizeDetector/ResizeDetector.styles.js.map +1 -1
  19. package/cjs/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  20. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  21. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js +3 -1
  22. package/cjs/lib/featureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  23. package/components/DateRangePicker/DateRangePicker/DateRangePicker.js +14 -1
  24. package/components/DateRangePicker/DateRangePicker/DateRangePicker.js.map +1 -1
  25. package/components/DateRangePicker/DateRangePicker.d.ts +6 -0
  26. package/components/DateRangePicker/DateRangePickerInput/DateRangePickerInput.js +2 -2
  27. package/components/DateRangePicker/DateRangePickerInput/DateRangePickerInput.js.map +1 -1
  28. package/components/Textarea/Textarea/Textarea.js +12 -6
  29. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  30. package/components/Textarea/Textarea.d.ts +1 -0
  31. package/components/TokenInput/TokenInput/TokenInput.js +64 -48
  32. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  33. package/components/TokenInput/TokenInput.d.ts +6 -3
  34. package/internal/ResizeDetector/ResizeDetector/ResizeDetector.js +1 -1
  35. package/internal/ResizeDetector/ResizeDetector/ResizeDetector.js.map +1 -1
  36. package/internal/ResizeDetector/ResizeDetector.d.ts +1 -0
  37. package/internal/ResizeDetector/ResizeDetector.styles/ResizeDetector.styles.js +4 -1
  38. package/internal/ResizeDetector/ResizeDetector.styles/ResizeDetector.styles.js.map +1 -1
  39. package/internal/ResizeDetector/ResizeDetector.styles.d.ts +1 -0
  40. package/lib/featureFlagsContext/FeatureFlagsHelpers.d.ts +1 -0
  41. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js +2 -1
  42. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext/ReactUIFeatureFlagsContext.js.map +1 -1
  43. package/lib/featureFlagsContext/ReactUIFeatureFlagsContext.d.ts +1 -0
  44. package/package.json +6 -4
  45. package/cjs/lib/__stories__/Blink.creevey.mts +0 -90
  46. package/lib/__stories__/Blink.creevey.mts +0 -90
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireDefault","require","_lodash","_globalObject","_identifiers","_needsPolyfillPlaceholder","LayoutEvents","_interopRequireWildcard","_ThemeContext","_RenderLayer","_ResizeDetector","_client","_CommonWrapper","_currentEnvironment","_Emotion","_rootNode","_createPropsGetter","_SizeDecorator","_TextareaHelpers","_Textarea2","_TextareaCounter","_TextareaWithSafari17Workaround","_excluded","_class","_Textarea","DEFAULT_WIDTH","exports","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","rootNode","withSize","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","clear","node","value","fakeNode","getProps","createPropsGetter","defaultProps","state","needsPolyfillPlaceholder","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","globalObject","MutationObserver","setSelectionRange","start","end","_globalObject$documen","Error","document","activeElement","focus","selectAll","delaySelectAll","_globalObject$request","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","renderMain","props","_cx","_ref","_textareaProps$maxLen","_cx2","_props$width","width","error","warning","size","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","disabled","textareaProps","_objectWithoutPropertiesLoose2","default","rootProps","style","textareaClassNames","cx","getTextareaSizeClassName","styles","textarea","theme","hovering","isAnimationsDisabled","textareaStyle","textAlign","align","placeholderPolyfill","defaultValue","createElement","className","fakeTextarea","fakeProps","fake","readOnly","_extends2","ref","refFake","TextareaCounter","help","maxLength","onCloseHelp","handleCloseCounterHelp","refCounter","Component","isSafariWithTextareaBug","TextareaWithSafari17Workaround","RenderLayer","onFocusOutside","onClickOutside","active","getRootSizeClassName","ResizeDetector","onResize","undefined","onChange","handleChange","handleCut","handlePaste","handleFocus","onKeyDown","handleKeyDown","children","setState","e","toString","isBlockEnter","isKeyEnter","preventDefault","fieldIsEmpty","target","element","autoResizeHandler","_this$getProps","rows","_ref2","getTextAreaHeight","minRows","parseInt","height","exceededMaxHeight","overflowY","throttle","getAutoResizeThrottleWait","event","isIE11","_inheritsLoose2","_proto","prototype","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","_temp","_ref3","componentDidMount","layoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","_this$getProps2","render","_this2","ThemeContext","Consumer","CommonWrapper","rootNodeRef","setRootNode","blur","React","__KONTUR_REACT_UI__","displayName","isTestEnv"],"sources":["Textarea.tsx"],"sourcesContent":["import type { AriaAttributes, ReactNode } from 'react';\nimport React from 'react';\nimport throttle from 'lodash.throttle';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport type { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isIE11, isSafariWithTextareaBug } from '../../lib/client';\nimport type { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { SizeProp } from '../../lib/types/props';\nimport type { InputAlign } from '../Input';\nimport { withSize } from '../../lib/size/SizeDecorator';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport type { TextareaCounterRef } from './TextareaCounter';\nimport { TextareaCounter } from './TextareaCounter';\nimport { TextareaWithSafari17Workaround } from './TextareaWithSafari17Workaround';\n\nexport const DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends Pick<AriaAttributes, 'aria-controls' | 'aria-label'>,\n CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /** Переводит контрол в состояние валидации \"ошибка\". */\n error?: boolean;\n\n /** Переводит контрол в состояние валидации \"предупреждение\". */\n warning?: boolean;\n\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Задает размер компонента. */\n size?: SizeProp;\n\n /** Выполняет автоматический ресайз в зависимости от содержимого. */\n autoResize?: boolean;\n\n /** Задает высоту текстарии в виде числа строк видимых без скролла. */\n rows?: number;\n\n /** Задает максимальное число строк при автоматическом ресайзе. */\n maxRows?: string | number;\n\n /** Задает направления ресайза компонента.\n * Попадает в `style`. */\n resize?: React.CSSProperties['resize'];\n\n /** Задает ширину текстэрии. */\n width?: React.CSSProperties['width'];\n\n /** Задает функцию, которая вызывается при изменении `value`. */\n onValueChange?: (value: string) => void;\n\n /** Определяет, нужно ли выделять введенное значение при фокусе. Работает с типами text, password, tel, search, url. */\n selectAllOnFocus?: boolean;\n\n /** Определяет, нужно ли показывать счетчик символов. */\n showLengthCounter?: boolean;\n\n /** Задает допустимое количество символов в поле. Отображается в счетчике.\n * @default maxLength */\n lengthCounter?: number;\n\n /** Задает подсказку к счетчику символов.\n * По умолчанию - тултип с содержимым из пропа, если передан `ReactNode`.\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой.\n * @example\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ``` */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавляет дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04 */\n extraRow?: boolean;\n\n /** Отключает анимацию при авто-ресайзе. Автоматически отключается когда в `extraRow` передан `false`. */\n disableAnimations?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n }\n > {}\n\nexport interface TextareaState {\n needsPolyfillPlaceholder: boolean;\n isCounterVisible: boolean;\n}\n\nexport const TextareaDataTids = {\n root: 'Textarea__root',\n counter: 'TextareaCounter__root',\n helpIcon: 'TextareaCounter__helpIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<TextareaProps, 'rows' | 'maxRows' | 'extraRow' | 'disableAnimations'>>;\n\n/**\n * Многострочное поле `Textarea` — это поле ввода, которое позволяет работать с несколькими строками текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`.\n * Пропы **`className` и `style` игнорируются**.\n */\n\n@rootNode\n@withSize\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n public static displayName = 'Textarea';\n\n public static defaultProps: DefaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n disableAnimations: isTestEnv,\n };\n\n public clear = () => {\n if (this.node) {\n this.node.value = '';\n }\n if (this.fakeNode) {\n this.fakeNode.value = '';\n }\n };\n\n private getProps = createPropsGetter(Textarea.defaultProps);\n\n private getRootSizeClassName() {\n switch (this.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getTextareaSizeClassName() {\n switch (this.size) {\n case 'large':\n return styles.textareaLarge(this.theme);\n case 'medium':\n return styles.textareaMedium(this.theme);\n case 'small':\n default:\n return styles.textareaSmall(this.theme);\n }\n }\n\n public state = {\n needsPolyfillPlaceholder,\n isCounterVisible: false,\n };\n private size!: SizeProp;\n\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = globalObject.MutationObserver\n ? new globalObject.MutationObserver(this.reflowCounter)\n : null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n const { rows, maxRows } = this.getProps();\n if (\n this.props.autoResize &&\n (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)\n ) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n size,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n disabled,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx(this.getTextareaSizeClassName(), {\n [styles.textarea(this.theme)]: true,\n [styles.hovering(this.theme)]: !error && !warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n textAlign: this.props.align,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.needsPolyfillPlaceholder && !textareaProps.value && !textareaProps.defaultValue) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n size={this.size}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n const Component = isSafariWithTextareaBug ? TextareaWithSafari17Workaround : 'textarea';\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label\n data-tid={TextareaDataTids.root}\n {...rootProps}\n className={cx(this.getRootSizeClassName(), {\n [styles.root()]: true,\n })}\n >\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter}>\n <Component\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n disabled={disabled}\n >\n {this.props.children}\n </Component>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows } = this.getProps();\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n\n const { height, exceededMaxHeight } =\n getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow: this.getProps().extraRow,\n }) || {};\n\n if (height === undefined || exceededMaxHeight === undefined) {\n return;\n }\n\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_lodash","_globalObject","_identifiers","_needsPolyfillPlaceholder","LayoutEvents","_interopRequireWildcard","_ThemeContext","_RenderLayer","_ResizeDetector","_client","_CommonWrapper","_currentEnvironment","_Emotion","_rootNode","_createPropsGetter","_SizeDecorator","_ReactUIFeatureFlagsContext","_FeatureFlagsHelpers","_TextareaHelpers","_Textarea2","_TextareaCounter","_TextareaWithSafari17Workaround","_excluded","_class","_Textarea","DEFAULT_WIDTH","exports","AUTORESIZE_THROTTLE_DEFAULT_WAIT","TextareaDataTids","root","counter","helpIcon","Textarea","rootNode","withSize","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","clear","node","value","fakeNode","getProps","createPropsGetter","defaultProps","state","needsPolyfillPlaceholder","isCounterVisible","reflowCounter","reflow","selectAllId","textareaObserver","globalObject","MutationObserver","setSelectionRange","start","end","_globalObject$documen","Error","document","activeElement","focus","selectAll","delaySelectAll","_globalObject$request","requestAnimationFrame","cancelDelayedSelectAll","cancelAnimationFrame","renderMain","props","_cx","_ref","_textareaProps$maxLen","_cx2","_props$width","width","error","warning","size","autoResize","resize","onCut","onPaste","maxRows","onFocus","selectAllOnFocus","placeholder","onValueChange","showLengthCounter","lengthCounter","counterHelp","extraRow","disableAnimations","disabled","textareaProps","_objectWithoutPropertiesLoose2","default","rootProps","style","textareaClassNames","cx","getTextareaSizeClassName","styles","textarea","theme","hovering","isAnimationsDisabled","textareaStyle","textAlign","align","placeholderPolyfill","defaultValue","createElement","className","fakeTextarea","fakeProps","fake","readOnly","_extends2","ref","refFake","TextareaCounter","help","maxLength","onCloseHelp","handleCloseCounterHelp","refCounter","Component","isSafariWithTextareaBug","TextareaWithSafari17Workaround","RenderLayer","onFocusOutside","onClickOutside","active","getRootSizeClassName","ResizeDetector","onResize","alignBaseline","featureFlags","textareaBaselineAlign","undefined","onChange","handleChange","handleCut","handlePaste","handleFocus","onKeyDown","handleKeyDown","children","setState","e","toString","isBlockEnter","isKeyEnter","preventDefault","fieldIsEmpty","target","element","autoResizeHandler","_this$getProps","rows","_ref2","getTextAreaHeight","minRows","parseInt","height","exceededMaxHeight","overflowY","throttle","getAutoResizeThrottleWait","event","isIE11","_inheritsLoose2","_proto","prototype","rootLarge","rootMedium","rootSmall","textareaLarge","textareaMedium","textareaSmall","_temp","_ref3","componentDidMount","layoutEvents","addListener","observe","attributes","componentWillUnmount","remove","disconnect","componentDidUpdate","prevProps","cancel","_this$getProps2","render","_this2","ReactUIFeatureFlagsContext","Consumer","flags","getFullReactUIFlagsContext","ThemeContext","CommonWrapper","rootNodeRef","setRootNode","blur","React","__KONTUR_REACT_UI__","displayName","isTestEnv"],"sources":["Textarea.tsx"],"sourcesContent":["import type { AriaAttributes, ReactNode } from 'react';\nimport React from 'react';\nimport throttle from 'lodash.throttle';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { needsPolyfillPlaceholder } from '../../lib/needsPolyfillPlaceholder';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport type { Nullable, Override } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme } from '../../lib/theming/Theme';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { isIE11, isSafariWithTextareaBug } from '../../lib/client';\nimport type { CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { cx } from '../../lib/theming/Emotion';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { rootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { SizeProp } from '../../lib/types/props';\nimport type { InputAlign } from '../Input';\nimport { withSize } from '../../lib/size/SizeDecorator';\nimport {\n ReactUIFeatureFlagsContext,\n type ReactUIFeatureFlags,\n} from '../../lib/featureFlagsContext/ReactUIFeatureFlagsContext';\nimport { getFullReactUIFlagsContext } from '../../lib/featureFlagsContext/FeatureFlagsHelpers';\n\nimport { getTextAreaHeight } from './TextareaHelpers';\nimport { styles } from './Textarea.styles';\nimport type { TextareaCounterRef } from './TextareaCounter';\nimport { TextareaCounter } from './TextareaCounter';\nimport { TextareaWithSafari17Workaround } from './TextareaWithSafari17Workaround';\n\nexport const DEFAULT_WIDTH = 250;\nconst AUTORESIZE_THROTTLE_DEFAULT_WAIT = 100;\n\nexport interface TextareaProps\n extends Pick<AriaAttributes, 'aria-controls' | 'aria-label'>,\n CommonProps,\n Override<\n React.TextareaHTMLAttributes<HTMLTextAreaElement>,\n {\n /** Переводит контрол в состояние валидации \"ошибка\". */\n error?: boolean;\n\n /** Переводит контрол в состояние валидации \"предупреждение\". */\n warning?: boolean;\n\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Задает размер компонента. */\n size?: SizeProp;\n\n /** Выполняет автоматический ресайз в зависимости от содержимого. */\n autoResize?: boolean;\n\n /** Задает высоту текстарии в виде числа строк видимых без скролла. */\n rows?: number;\n\n /** Задает максимальное число строк при автоматическом ресайзе. */\n maxRows?: string | number;\n\n /** Задает направления ресайза компонента.\n * Попадает в `style`. */\n resize?: React.CSSProperties['resize'];\n\n /** Задает ширину текстэрии. */\n width?: React.CSSProperties['width'];\n\n /** Задает функцию, которая вызывается при изменении `value`. */\n onValueChange?: (value: string) => void;\n\n /** Определяет, нужно ли выделять введенное значение при фокусе. Работает с типами text, password, tel, search, url. */\n selectAllOnFocus?: boolean;\n\n /** Определяет, нужно ли показывать счетчик символов. */\n showLengthCounter?: boolean;\n\n /** Задает допустимое количество символов в поле. Отображается в счетчике.\n * @default maxLength */\n lengthCounter?: number;\n\n /** Задает подсказку к счетчику символов.\n * По умолчанию - тултип с содержимым из пропа, если передан `ReactNode`.\n * Передав функцию, можно переопределить подсказку целиком, вместе с иконкой.\n * @example\n * ```\n * counterHelp={() => <Tooltip render={...}><HelpIcon /></Tooltip>}\n * ``` */\n counterHelp?: ReactNode | (() => ReactNode);\n\n /** Добавляет дополнительную свободную строку при авто-ресайзе.\n * @see https://guides.kontur.ru/components/textarea/#04 */\n extraRow?: boolean;\n\n /** Отключает анимацию при авто-ресайзе. Автоматически отключается когда в `extraRow` передан `false`. */\n disableAnimations?: boolean;\n /** Выравнивание текста */\n align?: InputAlign;\n }\n > {}\n\nexport interface TextareaState {\n needsPolyfillPlaceholder: boolean;\n isCounterVisible: boolean;\n}\n\nexport const TextareaDataTids = {\n root: 'Textarea__root',\n counter: 'TextareaCounter__root',\n helpIcon: 'TextareaCounter__helpIcon',\n} as const;\n\ntype DefaultProps = Required<Pick<TextareaProps, 'rows' | 'maxRows' | 'extraRow' | 'disableAnimations'>>;\n\n/**\n * Многострочное поле `Textarea` — это поле ввода, которое позволяет работать с несколькими строками текста.\n *\n * Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`.\n * Пропы **`className` и `style` игнорируются**.\n */\n\n@rootNode\n@withSize\nexport class Textarea extends React.Component<TextareaProps, TextareaState> {\n public static __KONTUR_REACT_UI__ = 'Textarea';\n public static displayName = 'Textarea';\n\n public static defaultProps: DefaultProps = {\n rows: 3,\n maxRows: 15,\n extraRow: true,\n disableAnimations: isTestEnv,\n };\n\n public clear = () => {\n if (this.node) {\n this.node.value = '';\n }\n if (this.fakeNode) {\n this.fakeNode.value = '';\n }\n };\n\n private getProps = createPropsGetter(Textarea.defaultProps);\n\n private getRootSizeClassName() {\n switch (this.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getTextareaSizeClassName() {\n switch (this.size) {\n case 'large':\n return styles.textareaLarge(this.theme);\n case 'medium':\n return styles.textareaMedium(this.theme);\n case 'small':\n default:\n return styles.textareaSmall(this.theme);\n }\n }\n\n public state = {\n needsPolyfillPlaceholder,\n isCounterVisible: false,\n };\n private size!: SizeProp;\n\n private reflowCounter = () => {\n if (this.counter) {\n this.counter.reflow();\n }\n };\n private featureFlags!: ReactUIFeatureFlags;\n private theme!: Theme;\n private selectAllId: number | null = null;\n private node: Nullable<HTMLTextAreaElement>;\n private fakeNode: Nullable<HTMLTextAreaElement>;\n private counter: Nullable<TextareaCounterRef>;\n private layoutEvents: Nullable<{ remove: () => void }>;\n private textareaObserver = globalObject.MutationObserver\n ? new globalObject.MutationObserver(this.reflowCounter)\n : null;\n public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\n private getAutoResizeThrottleWait(props: TextareaProps = this.props): number {\n // NOTE: При отключении анимации остается эффект дергания при авто-ресайзе из-за троттлинга расчета высоты\n // Поэтому выставляем таймаут троттла в ноль. Подробности - https://github.com/skbkontur/retail-ui/issues/2120\n return this.isAnimationsDisabled(props) ? 0 : AUTORESIZE_THROTTLE_DEFAULT_WAIT;\n }\n private isAnimationsDisabled({ disableAnimations, extraRow }: TextareaProps = this.props): boolean {\n return disableAnimations || !extraRow;\n }\n\n public componentDidMount() {\n if (this.props.autoResize) {\n this.autoResize();\n this.layoutEvents = LayoutEvents.addListener(this.autoResize);\n }\n\n if (this.node && this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.observe(this.node, { attributes: true });\n }\n }\n\n public componentWillUnmount() {\n if (this.layoutEvents) {\n this.layoutEvents.remove();\n }\n if (this.props.showLengthCounter && this.textareaObserver) {\n this.textareaObserver.disconnect();\n }\n this.cancelDelayedSelectAll();\n }\n\n public componentDidUpdate(prevProps: TextareaProps) {\n if (this.getAutoResizeThrottleWait() !== this.getAutoResizeThrottleWait(prevProps)) {\n this.autoResize.cancel();\n this.autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n }\n const { rows, maxRows } = this.getProps();\n if (\n this.props.autoResize &&\n (rows !== prevProps.rows || maxRows !== prevProps.maxRows || this.props.value !== prevProps.value)\n ) {\n this.autoResize();\n }\n }\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.featureFlags = getFullReactUIFlagsContext(flags);\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.getProps()}>\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.node) {\n this.node.focus();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.node) {\n this.node.blur();\n }\n }\n\n /**\n * @public\n * @param {number} start\n * @param {number} end\n */\n public setSelectionRange = (start: number, end: number) => {\n if (!this.node) {\n throw new Error('Cannot call \"setSelectionRange\" on unmounted Input');\n }\n\n if (globalObject.document?.activeElement !== this.node) {\n this.focus();\n }\n\n this.node.setSelectionRange(start, end);\n };\n\n /**\n * @public\n */\n public selectAll = () => {\n if (this.node) {\n this.setSelectionRange(0, this.node.value.length);\n }\n };\n\n private delaySelectAll = (): number | null =>\n (this.selectAllId = globalObject.requestAnimationFrame?.(this.selectAll) ?? null);\n\n private cancelDelayedSelectAll = (): void => {\n if (this.selectAllId) {\n globalObject.cancelAnimationFrame?.(this.selectAllId);\n this.selectAllId = null;\n }\n };\n\n private renderMain = (props: CommonWrapperRestProps<TextareaProps>) => {\n const {\n width = DEFAULT_WIDTH,\n error,\n warning,\n size,\n autoResize,\n resize,\n onCut,\n onPaste,\n maxRows,\n onFocus,\n selectAllOnFocus,\n placeholder,\n onValueChange,\n showLengthCounter,\n lengthCounter,\n counterHelp,\n extraRow,\n disableAnimations,\n disabled,\n ...textareaProps\n } = props;\n\n const { isCounterVisible } = this.state;\n\n const rootProps = {\n style: {\n width,\n },\n };\n\n const textareaClassNames = cx(this.getTextareaSizeClassName(), {\n [styles.textarea(this.theme)]: true,\n [styles.hovering(this.theme)]: !error && !warning,\n [styles.disabled(this.theme)]: disabled,\n [styles.error(this.theme)]: !!error,\n [styles.warning(this.theme)]: !!warning,\n [styles.disableAnimations()]: this.isAnimationsDisabled(),\n });\n\n const textareaStyle = {\n resize: autoResize ? 'none' : resize,\n textAlign: this.props.align,\n };\n\n let placeholderPolyfill = null;\n\n if (this.state.needsPolyfillPlaceholder && !textareaProps.value && !textareaProps.defaultValue) {\n placeholderPolyfill = <span className={styles.placeholder()}>{placeholder}</span>;\n }\n\n let fakeTextarea = null;\n if (autoResize) {\n const fakeProps = {\n value: this.props.value,\n defaultValue: this.props.defaultValue,\n className: cx(textareaClassNames, styles.fake()),\n readOnly: true,\n };\n fakeTextarea = <textarea {...fakeProps} ref={this.refFake} />;\n }\n\n const counter = showLengthCounter && isCounterVisible && this.node && (\n <TextareaCounter\n textarea={this.node}\n size={this.size}\n help={counterHelp}\n value={textareaProps.value}\n length={textareaProps.maxLength ?? lengthCounter ?? 0}\n onCloseHelp={this.handleCloseCounterHelp}\n ref={this.refCounter}\n />\n );\n\n const Component = isSafariWithTextareaBug ? TextareaWithSafari17Workaround : 'textarea';\n\n return (\n <RenderLayer\n onFocusOutside={this.handleCloseCounterHelp}\n onClickOutside={this.handleCloseCounterHelp}\n active={this.state.isCounterVisible}\n >\n <label\n data-tid={TextareaDataTids.root}\n {...rootProps}\n className={cx(this.getRootSizeClassName(), {\n [styles.root()]: true,\n })}\n >\n {placeholderPolyfill}\n <ResizeDetector onResize={this.reflowCounter} alignBaseline={this.featureFlags.textareaBaselineAlign}>\n <Component\n {...textareaProps}\n className={textareaClassNames}\n style={textareaStyle}\n placeholder={!placeholderPolyfill ? placeholder : undefined}\n ref={this.ref}\n onChange={this.handleChange}\n onCut={this.handleCut}\n onPaste={this.handlePaste}\n onFocus={this.handleFocus}\n onKeyDown={this.handleKeyDown}\n disabled={disabled}\n >\n {this.props.children}\n </Component>\n </ResizeDetector>\n {fakeTextarea}\n {counter}\n </label>\n </RenderLayer>\n );\n };\n\n private handleCloseCounterHelp = () => this.setState({ isCounterVisible: false });\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n // Edge bug: textarea maxlength doesn't work after new line\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/18833616/\n const value = this.props.value !== undefined ? this.props.value.toString() : null;\n const isBlockEnter = isKeyEnter(e) && value !== null && value.length === this.props.maxLength;\n\n if (isBlockEnter) {\n e.preventDefault();\n }\n\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (needsPolyfillPlaceholder) {\n const fieldIsEmpty = e.target.value === '';\n\n if (this.state.needsPolyfillPlaceholder !== fieldIsEmpty) {\n this.setState({ needsPolyfillPlaceholder: fieldIsEmpty });\n }\n }\n\n if (this.props.onValueChange) {\n this.props.onValueChange(e.target.value);\n }\n\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onChange) {\n this.props.onChange(e);\n }\n\n this.reflowCounter();\n };\n\n private ref = (element: HTMLTextAreaElement) => {\n this.node = element;\n };\n\n private refFake = (element: HTMLTextAreaElement) => {\n this.fakeNode = element;\n };\n\n private refCounter = (ref: TextareaCounterRef | null) => {\n this.counter = ref;\n };\n\n private autoResizeHandler = () => {\n const fakeNode = this.fakeNode;\n if (!fakeNode) {\n return;\n }\n const node = this.node;\n if (!node) {\n return;\n }\n if (this.props.value === undefined) {\n fakeNode.value = node.value;\n }\n\n const { rows, maxRows } = this.getProps();\n if (rows === undefined || maxRows === undefined) {\n return;\n }\n\n const { height, exceededMaxHeight } =\n getTextAreaHeight({\n node: fakeNode,\n minRows: typeof rows === 'number' ? rows : parseInt(rows, 10),\n maxRows: typeof maxRows === 'number' ? maxRows : parseInt(maxRows, 10),\n extraRow: this.getProps().extraRow,\n }) || {};\n\n if (height === undefined || exceededMaxHeight === undefined) {\n return;\n }\n\n node.style.height = height + 'px';\n node.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n fakeNode.style.overflowY = exceededMaxHeight ? 'scroll' : 'hidden';\n };\n\n private autoResize = throttle(this.autoResizeHandler, this.getAutoResizeThrottleWait());\n\n private handleCut = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onCut) {\n this.props.onCut(event);\n }\n\n this.reflowCounter();\n };\n\n private handlePaste = (event: React.ClipboardEvent<HTMLTextAreaElement>) => {\n if (this.props.autoResize) {\n this.autoResize();\n }\n\n if (this.props.onPaste) {\n this.props.onPaste(event);\n }\n\n this.reflowCounter();\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLTextAreaElement>) => {\n this.setState({ isCounterVisible: true });\n\n if (this.props.selectAllOnFocus) {\n // https://github.com/facebook/react/issues/7769\n this.node && !isIE11 ? this.selectAll() : this.delaySelectAll();\n }\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -63,9 +63,11 @@ export interface TokenInputProps<T> extends CommonProps, Pick<AriaAttributes, 'a
63
63
  /** Задает функцию, которая отображает заданное содержимое при пустом результате поиска. Не работает, если рендерится `AddButton`. */
64
64
  renderNotFound?: () => React.ReactNode;
65
65
  /** Преобразует значение в элемент списка. */
66
- valueToItem?: (item: string) => T;
67
- /** Определяет уникальный ключ по элементу. */
66
+ valueToItem?: (value: string) => T;
67
+ /** @deprecated Используйте `itemToId` вместо `toKey`. */
68
68
  toKey?: (item: T) => string | number | undefined;
69
+ /** Задает функцию сравнения полученных результатов с value. */
70
+ itemToId?: (item: T) => string | number | undefined;
69
71
  /** Задает текст, который отображается если не введено никакое значение. */
70
72
  placeholder?: string;
71
73
  /** Задает символы, которые разделяют введённый текст на токены. */
@@ -129,7 +131,7 @@ export declare const TokenInputDataTids: {
129
131
  readonly tokenInputMenu: "TokenInputMenu__root";
130
132
  readonly label: "TokenInput__label";
131
133
  };
132
- type DefaultProps<T> = Required<Pick<TokenInputProps<T>, 'selectedItems' | 'delimiters' | 'renderItem' | 'renderValue' | 'valueToString' | 'valueToItem' | 'toKey' | 'onValueChange' | 'width' | 'onBlur' | 'onFocus' | 'onMouseEnter' | 'onMouseLeave' | 'menuWidth' | 'menuAlign'>>;
134
+ type DefaultProps<T> = Required<Pick<TokenInputProps<T>, 'selectedItems' | 'delimiters' | 'renderItem' | 'renderValue' | 'valueToString' | 'valueToItem' | 'toKey' | 'itemToId' | 'onValueChange' | 'width' | 'onBlur' | 'onFocus' | 'onMouseEnter' | 'onMouseLeave' | 'menuWidth' | 'menuAlign'>>;
133
135
  /**
134
136
  * Поле с токенами `TokenInput` — это поле ввода со списком подсказок.
135
137
  *
@@ -176,6 +178,7 @@ export declare class TokenInput<T = string> extends React.PureComponent<TokenInp
176
178
  * @public
177
179
  */
178
180
  reset(): void;
181
+ private isEqual;
179
182
  private hasValueInItems;
180
183
  private get showAddItemHint();
181
184
  private get type();
@@ -202,6 +202,9 @@ TokenInputType = exports.TokenInputType = /*#__PURE__*/function (TokenInputType)
202
202
 
203
203
 
204
204
 
205
+
206
+
207
+
205
208
 
206
209
 
207
210
 
@@ -244,6 +247,7 @@ var TokenInputDataTids = exports.TokenInputDataTids = {
244
247
 
245
248
 
246
249
 
250
+
247
251
 
248
252
 
249
253
  var defaultToKey = function defaultToKey(item) {return item.toString();};
@@ -313,6 +317,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
313
317
 
314
318
 
315
319
 
320
+
316
321
 
317
322
 
318
323
  state = DefaultState;_this.
@@ -565,15 +570,20 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
565
570
 
566
571
 
567
572
 
573
+
574
+ isEqual = function (itemA, itemB) {
575
+ var _this$getProps = _this.getProps(),itemToId = _this$getProps.itemToId;
576
+ return (0, _lodash.default)(itemToId(itemA), itemToId(itemB));
577
+ };_this.
568
578
 
569
579
  hasValueInItems = function (items, value) {
580
+ var _this$getProps2 = _this.getProps(),valueToString = _this$getProps2.valueToString;
570
581
  if (typeof value === 'string') {
571
- return items.includes(value);
582
+ return items.map(function (item) {return valueToString(item);}).includes(value);
572
583
  }
573
- // todo: как то не очень
574
- return items.some(function (item) {return (0, _lodash.default)(item, value);});
575
- };_this.
576
584
 
585
+ return items.some(function (item) {return _this.isEqual(item, value);});
586
+ };_this.
577
587
 
578
588
 
579
589
 
@@ -746,7 +756,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
746
756
  return;
747
757
  }
748
758
  event.preventDefault();
749
- var _this$getProps = _this.getProps(),selectedItems = _this$getProps.selectedItems,valueToString = _this$getProps.valueToString,delimiters = _this$getProps.delimiters;
759
+ var _this$getProps3 = _this.getProps(),selectedItems = _this$getProps3.selectedItems,valueToString = _this$getProps3.valueToString,delimiters = _this$getProps3.delimiters;
750
760
  // упорядочивание токенов по индексу
751
761
  var tokens = _this.state.activeTokens.
752
762
  map(function (token) {return selectedItems.indexOf(token);}).
@@ -761,7 +771,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
761
771
  return;
762
772
  }
763
773
  var paste = event.clipboardData.getData('text');
764
- var _this$getProps2 = _this.getProps(),delimiters = _this$getProps2.delimiters,selectedItems = _this$getProps2.selectedItems,valueToItem = _this$getProps2.valueToItem,onValueChange = _this$getProps2.onValueChange;
774
+ var _this$getProps4 = _this.getProps(),delimiters = _this$getProps4.delimiters,selectedItems = _this$getProps4.selectedItems,valueToItem = _this$getProps4.valueToItem,onValueChange = _this$getProps4.onValueChange;
765
775
  if (delimiters.some(function (delimiter) {return paste.includes(delimiter);})) {
766
776
  event.preventDefault();
767
777
  event.stopPropagation();
@@ -778,17 +788,17 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
778
788
  }
779
789
  };_this.
780
790
 
781
- tryGetItems = /*#__PURE__*/function () {var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query) {var autocompleteItems, _this$getProps3, selectedItems, valueToItem, valueToString, isSelectedItem, isEditingItem, autocompleteItemsUnique, editingItem, selectItemIndex;return _regenerator.default.wrap(function _callee$(_context) {while (1) switch (_context.prev = _context.next) {case 0:if (query === void 0) {query = '';}if (!(
791
+ tryGetItems = /*#__PURE__*/function () {var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(query) {var autocompleteItems, _this$getProps5, selectedItems, valueToItem, valueToString, isSelectedItem, isEditingItem, autocompleteItemsUnique, editingItem, selectItemIndex;return _regenerator.default.wrap(function _callee$(_context) {while (1) switch (_context.prev = _context.next) {case 0:if (query === void 0) {query = '';}if (!(
782
792
  _this.props.getItems && (_this.isInputValueChanged || !_this.props.hideMenuIfEmptyInputValue))) {_context.next = 15;break;}
783
793
  _this.dispatch({ type: 'SET_LOADING', payload: true });_context.next = 5;return (
784
794
  _this.props.getItems(query));case 5:autocompleteItems = _context.sent;
785
- _this.dispatch({ type: 'SET_LOADING', payload: false });_this$getProps3 =
795
+ _this.dispatch({ type: 'SET_LOADING', payload: false });_this$getProps5 =
786
796
 
787
- _this.getProps(), selectedItems = _this$getProps3.selectedItems, valueToItem = _this$getProps3.valueToItem, valueToString = _this$getProps3.valueToString;
797
+ _this.getProps(), selectedItems = _this$getProps5.selectedItems, valueToItem = _this$getProps5.valueToItem, valueToString = _this$getProps5.valueToString;
788
798
  isSelectedItem = function isSelectedItem(item) {return _this.hasValueInItems(selectedItems, item);};
789
799
  isEditingItem = function isEditingItem(item) {
790
800
  var editingItem = selectedItems[_this.state.editingTokenIndex];
791
- return !!editingItem && (0, _lodash.default)(item, editingItem);
801
+ return !!editingItem && _this.isEqual(item, editingItem);
792
802
  };
793
803
 
794
804
  autocompleteItemsUnique = autocompleteItems.filter(function (item) {return !isSelectedItem(item) || isEditingItem(item);});
@@ -796,7 +806,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
796
806
  if (_this.isEditingMode) {
797
807
  editingItem = selectedItems[_this.state.editingTokenIndex];
798
808
  if (
799
- (0, _lodash.default)(editingItem, valueToItem(_this.state.inputValue)) &&
809
+ _this.isEqual(editingItem, valueToItem(_this.state.inputValue)) &&
800
810
  !_this.hasValueInItems(autocompleteItemsUnique, editingItem))
801
811
  {
802
812
  autocompleteItemsUnique.unshift(editingItem);
@@ -824,7 +834,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
824
834
  }
825
835
  };_this.
826
836
 
827
- handleInputKeyDown = function (e) {var _this$input3, _this$input4;
837
+ handleInputKeyDown = function (e) {var _this$state$autocompl, _this$state$autocompl2, _this$input3, _this$input4;
828
838
  e.stopPropagation();
829
839
 
830
840
  if (
@@ -843,9 +853,11 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
843
853
  }
844
854
  }
845
855
  var isRightmostTokenNotDisabled = !_this.isTokenDisabled(_this.getProps().selectedItems.length - 1);
856
+ var canSetValueToInput = _this.showAddItemHint || ((_this$state$autocompl = (_this$state$autocompl2 = _this.state.autocompleteItems) == null ? void 0 : _this$state$autocompl2.length) != null ? _this$state$autocompl : 0) > 0;
857
+
846
858
  switch (true) {
847
859
  case (0, _identifiers.isKeyEnter)(e):
848
- if (_this.menuRef) {
860
+ if (canSetValueToInput && _this.menuRef) {
849
861
  _this.menuRef.enter(e);
850
862
  }
851
863
  // don't allow textarea
@@ -900,7 +912,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
900
912
  };_this.
901
913
 
902
914
  handleWrapperKeyDown = function (e) {var _this$wrapper2;
903
- var _this$getProps4 = _this.getProps(),selectedItems = _this$getProps4.selectedItems,onValueChange = _this$getProps4.onValueChange;
915
+ var _this$getProps6 = _this.getProps(),selectedItems = _this$getProps6.selectedItems,onValueChange = _this$getProps6.onValueChange;
904
916
  switch (true) {
905
917
  case (0, _identifiers.isKeyBackspace)(e):
906
918
  case (0, _identifiers.isKeyDelete)(e):{
@@ -968,7 +980,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
968
980
  handleWrapperArrowsWithShift = function (isLeftEdge, isRightEdge, newItemIndex) {
969
981
  if (!isLeftEdge && !isRightEdge) {
970
982
  var itemNew = _this.getProps().selectedItems[newItemIndex];
971
- var itemsNew = [itemNew].concat(_this.state.activeTokens.filter(function (item) {return !(0, _lodash.default)(item, itemNew);}));
983
+ var itemsNew = [itemNew].concat(_this.state.activeTokens.filter(function (item) {return !_this.isEqual(item, itemNew);}));
972
984
  _this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });
973
985
  }
974
986
  };_this.
@@ -985,7 +997,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
985
997
  };_this.
986
998
 
987
999
  selectItem = function (item) {
988
- var _this$getProps5 = _this.getProps(),selectedItems = _this$getProps5.selectedItems,valueToString = _this$getProps5.valueToString;
1000
+ var _this$getProps7 = _this.getProps(),selectedItems = _this$getProps7.selectedItems,valueToString = _this$getProps7.valueToString;
989
1001
  if (_this.isEditingMode) {
990
1002
  _this.dispatch({ type: 'UPDATE_QUERY', payload: valueToString(item) }, _this.finishTokenEdit);
991
1003
  } else if (!_this.hasValueInItems(selectedItems, item)) {
@@ -996,8 +1008,8 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
996
1008
  };_this.
997
1009
 
998
1010
  handleRemoveToken = function (item) {
999
- _this.props.onValueChange == null || _this.props.onValueChange(_this.getProps().selectedItems.filter(function (_) {return !(0, _lodash.default)(_, item);}));
1000
- var filteredActiveTokens = _this.state.activeTokens.filter(function (_) {return !(0, _lodash.default)(_, item);});
1011
+ _this.props.onValueChange == null || _this.props.onValueChange(_this.getProps().selectedItems.filter(function (_) {return !_this.isEqual(_, item);}));
1012
+ var filteredActiveTokens = _this.state.activeTokens.filter(function (_) {return !_this.isEqual(_, item);});
1001
1013
 
1002
1014
  _this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });
1003
1015
  if (filteredActiveTokens.length === 0) {
@@ -1011,7 +1023,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
1011
1023
  var items = _this.state.activeTokens;
1012
1024
  if (event.ctrlKey) {
1013
1025
  var newItems = _this.hasValueInItems(_this.state.activeTokens, itemNew) ?
1014
- items.filter(function (item) {return !(0, _lodash.default)(item, itemNew);}) : [].concat(
1026
+ items.filter(function (item) {return !_this.isEqual(item, itemNew);}) : [].concat(
1015
1027
  items, [itemNew]);
1016
1028
  _this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });
1017
1029
  } else {
@@ -1021,7 +1033,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
1021
1033
  };_this.
1022
1034
 
1023
1035
  handleTokenEdit = function (itemNew) {
1024
- var _this$getProps6 = _this.getProps(),selectedItems = _this$getProps6.selectedItems,valueToString = _this$getProps6.valueToString;
1036
+ var _this$getProps8 = _this.getProps(),selectedItems = _this$getProps8.selectedItems,valueToString = _this$getProps8.valueToString;
1025
1037
  var editingTokenIndex = selectedItems.findIndex(function (item) {return item === itemNew;});
1026
1038
  _this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });
1027
1039
 
@@ -1036,10 +1048,13 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
1036
1048
  _this.tryGetItems();
1037
1049
  };_this.
1038
1050
 
1039
- finishTokenEdit = function () {
1040
- var selectedItems = _this.getProps().selectedItems;
1041
- var _this$state2 = _this.state,editingTokenIndex = _this$state2.editingTokenIndex,inputValue = _this$state2.inputValue,reservedInputValue = _this$state2.reservedInputValue;
1042
- var editedItem = _this.getProps().valueToItem(inputValue);
1051
+ finishTokenEdit = function () {var _autocompleteItems$fi;
1052
+ var _this$getProps9 = _this.getProps(),selectedItems = _this$getProps9.selectedItems,valueToString = _this$getProps9.valueToString;
1053
+ var _this$state2 = _this.state,editingTokenIndex = _this$state2.editingTokenIndex,inputValue = _this$state2.inputValue,reservedInputValue = _this$state2.reservedInputValue,autocompleteItems = _this$state2.autocompleteItems;
1054
+
1055
+ var editedItem = (_autocompleteItems$fi =
1056
+ autocompleteItems == null ? void 0 : autocompleteItems.find(function (item) {return valueToString(item) === inputValue;})) != null ? _autocompleteItems$fi : _this.getProps().valueToItem(inputValue);
1057
+
1043
1058
  var newItems = selectedItems.concat([]);
1044
1059
 
1045
1060
  if (!_this.hasValueInItems(selectedItems, editedItem)) {
@@ -1212,7 +1227,7 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
1212
1227
  };_this.
1213
1228
 
1214
1229
  getAvailableTokenIndex = function (startIndex, isDirectionLeft) {if (isDirectionLeft === void 0) {isDirectionLeft = true;}
1215
- var _this$getProps7 = _this.getProps(),selectedItems = _this$getProps7.selectedItems;
1230
+ var _this$getProps10 = _this.getProps(),selectedItems = _this$getProps10.selectedItems;
1216
1231
  var step = isDirectionLeft ? -1 : +1;
1217
1232
  var availableIndex = startIndex + step;
1218
1233
 
@@ -1230,12 +1245,12 @@ TokenInput = exports.TokenInput = (_dec = (0, _decorators.locale)('TokenInput',
1230
1245
  * @public
1231
1246
  */;_proto.focus = function focus() {var _this$input8;(_this$input8 = this.input) == null || _this$input8.focus();} /**
1232
1247
  * @public
1233
- */;_proto.blur = function blur() {var _this$input9;(_this$input9 = this.input) == null || _this$input9.blur();};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});});};_proto.getLabelSizeClassName = function getLabelSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.labelLarge(this.theme);case 'medium':return _TokenInput2.styles.labelMedium(this.theme);case 'small':default:return _TokenInput2.styles.labelSmall(this.theme);}};_proto.getInputSizeClassName = function getInputSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.inputLarge(this.theme);case 'medium':return _TokenInput2.styles.inputMedium(this.theme);case 'small':default:return _TokenInput2.styles.inputSmall(this.theme);}};_proto.renderMain = function renderMain() {var _cx, _cx2, _cx3;if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {throw Error('Missed getItems for type ' + this.type);}var _this$props2 = this.props,maxMenuHeight = _this$props2.maxMenuHeight,error = _this$props2.error,warning = _this$props2.warning,disabled = _this$props2.disabled,renderNotFound = _this$props2.renderNotFound,hideMenuIfEmptyInputValue = _this$props2.hideMenuIfEmptyInputValue,inputMode = _this$props2.inputMode,renderTotalCount = _this$props2.renderTotalCount,totalCount = _this$props2.totalCount,ariaDescribedby = _this$props2['aria-describedby'],ariaLabel = _this$props2['aria-label'];var _this$getProps8 = this.getProps(),selectedItems = _this$getProps8.selectedItems,width = _this$getProps8.width,onMouseEnter = _this$getProps8.onMouseEnter,onMouseLeave = _this$getProps8.onMouseLeave,menuWidth = _this$getProps8.menuWidth,menuAlign = _this$getProps8.menuAlign,renderItem = _this$getProps8.renderItem;var _this$state3 = this.state,activeTokens = _this$state3.activeTokens,inFocus = _this$state3.inFocus,inputValueWidth = _this$state3.inputValueWidth,inputValueHeight = _this$state3.inputValueHeight,inputValue = _this$state3.inputValue,reservedInputValue = _this$state3.reservedInputValue,autocompleteItems = _this$state3.autocompleteItems,loading = _this$state3.loading;var showMenu = this.type !== TokenInputType.WithoutReference && this.isCursorVisible && activeTokens.length === 0 && (this.isInputValueChanged || !hideMenuIfEmptyInputValue);var theme = this.theme;var inputInlineStyles = { // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости
1248
+ */;_proto.blur = function blur() {var _this$input9;(_this$input9 = this.input) == null || _this$input9.blur();};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_featureFlagsContext.ReactUIFeatureFlagsContext.Consumer, null, function (flags) {_this2.featureFlags = (0, _featureFlagsContext.getFullReactUIFlagsContext)(flags);return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});});};_proto.getLabelSizeClassName = function getLabelSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.labelLarge(this.theme);case 'medium':return _TokenInput2.styles.labelMedium(this.theme);case 'small':default:return _TokenInput2.styles.labelSmall(this.theme);}};_proto.getInputSizeClassName = function getInputSizeClassName() {switch (this.size) {case 'large':return _TokenInput2.styles.inputLarge(this.theme);case 'medium':return _TokenInput2.styles.inputMedium(this.theme);case 'small':default:return _TokenInput2.styles.inputSmall(this.theme);}};_proto.renderMain = function renderMain() {var _cx, _cx2, _cx3;if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {throw Error('Missed getItems for type ' + this.type);}var _this$props2 = this.props,maxMenuHeight = _this$props2.maxMenuHeight,error = _this$props2.error,warning = _this$props2.warning,disabled = _this$props2.disabled,renderNotFound = _this$props2.renderNotFound,hideMenuIfEmptyInputValue = _this$props2.hideMenuIfEmptyInputValue,inputMode = _this$props2.inputMode,renderTotalCount = _this$props2.renderTotalCount,totalCount = _this$props2.totalCount,ariaDescribedby = _this$props2['aria-describedby'],ariaLabel = _this$props2['aria-label'];var _this$getProps11 = this.getProps(),selectedItems = _this$getProps11.selectedItems,width = _this$getProps11.width,onMouseEnter = _this$getProps11.onMouseEnter,onMouseLeave = _this$getProps11.onMouseLeave,menuWidth = _this$getProps11.menuWidth,menuAlign = _this$getProps11.menuAlign,renderItem = _this$getProps11.renderItem;var _this$state3 = this.state,activeTokens = _this$state3.activeTokens,inFocus = _this$state3.inFocus,inputValueWidth = _this$state3.inputValueWidth,inputValueHeight = _this$state3.inputValueHeight,inputValue = _this$state3.inputValue,reservedInputValue = _this$state3.reservedInputValue,autocompleteItems = _this$state3.autocompleteItems,loading = _this$state3.loading;var showMenu = this.type !== TokenInputType.WithoutReference && this.isCursorVisible && activeTokens.length === 0 && (this.isInputValueChanged || !hideMenuIfEmptyInputValue);var theme = this.theme;var inputInlineStyles = { // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости
1234
1249
  width: inputValueWidth, height: inputValueHeight, // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее
1235
1250
  caretColor: this.isCursorVisible ? undefined : 'transparent' };var labelClassName = (0, _Emotion.cx)(_TokenInput2.styles.label(theme), this.getLabelSizeClassName(), (_cx = {}, _cx[_TokenInput2.styles.hovering(this.theme)] = !inFocus && !disabled && !warning && !error, _cx[_TokenInput2.styles.labelDisabled(theme)] = !!disabled, _cx[_TokenInput2.styles.labelFocused(theme)] = !!inFocus, _cx[_TokenInput2.styles.error(theme)] = !!error, _cx[_TokenInput2.styles.warning(theme)] = !!warning, _cx));var inputClassName = (0, _Emotion.cx)(_TokenInput2.styles.input(theme), this.getInputSizeClassName(), (_cx2 = {}, _cx2[_TokenInput2.styles.inputDisabled(theme)] = !!disabled, _cx2));var placeholder = selectedItems.length === 0 && !inputValue ? this.props.placeholder : '';var inputNode = /*#__PURE__*/_react.default.createElement(_TokenView.TokenView, { size: this.size, className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_TokenInput2.styles.inputPlaceholderWrapper()] = Boolean(placeholder), _cx3)), hideCloseButton: Boolean(placeholder) }, /*#__PURE__*/_react.default.createElement("textarea", { id: this.textareaId, ref: this.inputRef, value: inputValue, style: inputInlineStyles, spellCheck: false, disabled: disabled, className: inputClassName, placeholder: placeholder, onFocus: this.handleInputFocus, onBlur: this.handleInputBlur, onChange: this.handleChangeInputValue, onKeyDown: this.handleKeyDown, onPaste: this.handleInputPaste, inputMode: inputMode, "aria-label": ariaLabel, "aria-describedby": ariaDescribedby }));return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("div", { "data-tid": TokenInputDataTids.root, onMouseEnter: onMouseEnter, onMouseLeave: onMouseLeave }, /*#__PURE__*/_react.default.createElement("label", { ref: this.wrapperRef, style: { width: width }, className: labelClassName, onMouseDown: this.handleWrapperMouseDown, onMouseUp: this.handleWrapperMouseUp, htmlFor: this.textareaId, "aria-controls": this.rootId, "data-tid": TokenInputDataTids.label }, /*#__PURE__*/_react.default.createElement(_TextWidthHelper.TextWidthHelper, { ref: this.textHelperRef, text: inputValue, theme: this.theme, size: this.size }), this.renderTokensStart(), inputNode, showMenu && /*#__PURE__*/_react.default.createElement(_TokenInputMenu.TokenInputMenu, { popupMenuId: this.rootId, ref: this.tokensInputMenuRef, items: autocompleteItems, loading: loading, opened: showMenu, maxMenuHeight: maxMenuHeight, anchorElementForCursor: this.input, anchorElementRoot: this.wrapper, renderNotFound: renderNotFound, renderItem: renderItem, onValueChange: this.selectItem, renderAddButton: this.renderAddButton, menuWidth: menuWidth, menuAlign: menuAlign, renderTotalCount: renderTotalCount, totalCount: totalCount, size: this.size }), this.renderTokensEnd(), this.isEditingMode ? /*#__PURE__*/_react.default.createElement(_TokenView.TokenView, { size: this.size }, /*#__PURE__*/_react.default.createElement("span", { className: _TokenInput2.styles.reservedInput(theme) }, reservedInputValue)) : null)));} /**
1236
1251
  * Сбрасывает введенное пользователем значение
1237
1252
  * @public
1238
1253
  */;_proto.reset = function reset() {this.dispatch({ type: 'RESET' });};_proto.isCursorVisibleForState = function isCursorVisibleForState(state) {return state.inFocus && (this.isInputValueChanged || state.activeTokens.length === 0);};_proto.updateInputTextWidth = function updateInputTextWidth() {if (this.textHelper) {// в IE текст иногда не помещается в input
1239
1254
  // из-за округления, поэтому округляем явно
1240
- var inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));var inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);}};_proto.moveFocusToLastToken = function moveFocusToLastToken() {var items = this.getProps().selectedItems;if (this.state.inputValue === '' && items && items.length > 0) {this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });}};return (0, _createClass2.default)(TokenInput, [{ key: "textareaId", get: function get() {var _this$props$id;return (_this$props$id = this.props.id) != null ? _this$props$id : this._textareaId;} }, { key: "showAddItemHint", get: function get() {var items = this.state.autocompleteItems;var value = this.getProps().valueToItem(this.state.inputValue);if (items && this.hasValueInItems(items, value)) {return false;}var selectedItems = this.getProps().selectedItems;if (selectedItems && this.hasValueInItems(selectedItems, value)) {return false;}if (this.type === TokenInputType.Combined && this.isInputValueChanged) {return true;}} }, { key: "type", get: function get() {return this.props.type ? this.props.type : TokenInputType.WithReference;} }, { key: "menuRef", get: function get() {return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();} }, { key: "isCursorVisible", get: function get() {return this.isCursorVisibleForState(this.state);} }, { key: "isEditingMode", get: function get() {return this.state.editingTokenIndex > -1;} }, { key: "isInputChanged", get: function get() {if (this.isEditingMode) {return this.isTokenValueChanged;}return this.isInputValueChanged;} }, { key: "isInputValueChanged", get: function get() {var inputValue = this.state.inputValue;return inputValue !== '';} }, { key: "isTokenValueChanged", get: function get() {var _this$state4 = this.state,inputValue = _this$state4.inputValue,editingTokenIndex = _this$state4.editingTokenIndex;var _this$getProps9 = this.getProps(),valueToString = _this$getProps9.valueToString,selectedItems = _this$getProps9.selectedItems;if (this.isEditingMode) {return valueToString(selectedItems[editingTokenIndex]) !== inputValue;}return false;} }]);}(_react.default.PureComponent), _TokenInput.__KONTUR_REACT_UI__ = 'TokenInput', _TokenInput.displayName = 'TokenInput', _TokenInput.defaultProps = { selectedItems: [], // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.
1241
- delimiters: [',', TEMP_FAKE_FLAG], renderItem: identity, renderValue: identity, valueToString: identity, valueToItem: function valueToItem(item) {return item;}, toKey: defaultToKey, onValueChange: function onValueChange() {return void 0;}, width: 250, onBlur: _utils.emptyHandler, onFocus: _utils.emptyHandler, onMouseEnter: _utils.emptyHandler, onMouseLeave: _utils.emptyHandler, menuWidth: 'auto', menuAlign: 'cursor' }, _TokenInput)) || _class) || _class) || _class);
1255
+ var inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));var inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);}};_proto.moveFocusToLastToken = function moveFocusToLastToken() {var items = this.getProps().selectedItems;if (this.state.inputValue === '' && items && items.length > 0) {this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });}};return (0, _createClass2.default)(TokenInput, [{ key: "textareaId", get: function get() {var _this$props$id;return (_this$props$id = this.props.id) != null ? _this$props$id : this._textareaId;} }, { key: "showAddItemHint", get: function get() {var items = this.state.autocompleteItems;var value = this.getProps().valueToItem(this.state.inputValue);if (items && this.hasValueInItems(items, value)) {return false;}var selectedItems = this.getProps().selectedItems;if (selectedItems && this.hasValueInItems(selectedItems, value)) {return false;}if (this.type === TokenInputType.Combined && this.isInputValueChanged) {return true;}} }, { key: "type", get: function get() {return this.props.type ? this.props.type : TokenInputType.WithReference;} }, { key: "menuRef", get: function get() {return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();} }, { key: "isCursorVisible", get: function get() {return this.isCursorVisibleForState(this.state);} }, { key: "isEditingMode", get: function get() {return this.state.editingTokenIndex > -1;} }, { key: "isInputChanged", get: function get() {if (this.isEditingMode) {return this.isTokenValueChanged;}return this.isInputValueChanged;} }, { key: "isInputValueChanged", get: function get() {var inputValue = this.state.inputValue;return inputValue !== '';} }, { key: "isTokenValueChanged", get: function get() {var _this$state4 = this.state,inputValue = _this$state4.inputValue,editingTokenIndex = _this$state4.editingTokenIndex;var _this$getProps12 = this.getProps(),valueToString = _this$getProps12.valueToString,selectedItems = _this$getProps12.selectedItems;if (this.isEditingMode) {return valueToString(selectedItems[editingTokenIndex]) !== inputValue;}return false;} }]);}(_react.default.PureComponent), _TokenInput.__KONTUR_REACT_UI__ = 'TokenInput', _TokenInput.displayName = 'TokenInput', _TokenInput.defaultProps = { selectedItems: [], // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.
1256
+ delimiters: [',', TEMP_FAKE_FLAG], renderItem: identity, renderValue: identity, valueToString: identity, valueToItem: function valueToItem(item) {return item;}, toKey: defaultToKey, itemToId: defaultToKey, onValueChange: function onValueChange() {return void 0;}, width: 250, onBlur: _utils.emptyHandler, onFocus: _utils.emptyHandler, onMouseEnter: _utils.emptyHandler, onMouseLeave: _utils.emptyHandler, menuWidth: 'auto', menuAlign: 'cursor' }, _TokenInput)) || _class) || _class) || _class);