@skbkontur/react-ui 4.26.0 → 4.27.0-next.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 (99) hide show
  1. package/cjs/components/Button/Button.d.ts +1 -1
  2. package/cjs/components/Button/Button.js +3 -2
  3. package/cjs/components/Button/Button.js.map +1 -1
  4. package/cjs/components/ComboBox/ComboBox.d.ts +2 -2
  5. package/cjs/components/ComboBox/ComboBox.js +1 -0
  6. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  7. package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +3 -3
  8. package/cjs/components/CurrencyLabel/CurrencyLabel.js +4 -3
  9. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  10. package/cjs/components/DateInput/DateInput.d.ts +2 -2
  11. package/cjs/components/DateInput/DateInput.js +2 -1
  12. package/cjs/components/DateInput/DateInput.js.map +1 -1
  13. package/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  14. package/cjs/components/DatePicker/DatePicker.js +3 -1
  15. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  16. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  17. package/cjs/components/Dropdown/Dropdown.js +2 -0
  18. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  19. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  20. package/cjs/components/DropdownMenu/DropdownMenu.js +3 -1
  21. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  22. package/cjs/components/Kebab/Kebab.d.ts +2 -2
  23. package/cjs/components/Kebab/Kebab.js +3 -1
  24. package/cjs/components/Kebab/Kebab.js.map +1 -1
  25. package/cjs/components/MenuFooter/MenuFooter.d.ts +3 -3
  26. package/cjs/components/MenuFooter/MenuFooter.js +3 -2
  27. package/cjs/components/MenuFooter/MenuFooter.js.map +1 -1
  28. package/cjs/components/MenuHeader/MenuHeader.d.ts +3 -3
  29. package/cjs/components/MenuHeader/MenuHeader.js +3 -2
  30. package/cjs/components/MenuHeader/MenuHeader.js.map +1 -1
  31. package/cjs/components/MenuItem/MenuItem.d.ts +2 -2
  32. package/cjs/components/MenuItem/MenuItem.js +1 -0
  33. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  34. package/cjs/components/Select/Select.d.ts +2 -2
  35. package/cjs/components/Select/Select.js +2 -0
  36. package/cjs/components/Select/Select.js.map +1 -1
  37. package/cjs/components/TokenInput/TokenInput.d.ts +4 -3
  38. package/cjs/components/TokenInput/TokenInput.js +11 -4
  39. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  40. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +2 -2
  41. package/cjs/internal/CustomComboBox/ComboBoxView.js +5 -1
  42. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  43. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +2 -2
  44. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
  45. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  46. package/cjs/internal/PopupMenu/PopupMenu.d.ts +3 -3
  47. package/cjs/internal/PopupMenu/PopupMenu.js +3 -1
  48. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  49. package/cjs/internal/themes/Theme2022Dark.js +1 -1
  50. package/cjs/internal/themes/Theme2022Dark.js.map +1 -1
  51. package/components/Button/Button/Button.js +3 -1
  52. package/components/Button/Button/Button.js.map +1 -1
  53. package/components/Button/Button.d.ts +1 -1
  54. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  55. package/components/ComboBox/ComboBox.d.ts +2 -2
  56. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +4 -2
  57. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  58. package/components/CurrencyLabel/CurrencyLabel.d.ts +3 -3
  59. package/components/DateInput/DateInput/DateInput.js +1 -0
  60. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  61. package/components/DateInput/DateInput.d.ts +2 -2
  62. package/components/DatePicker/DatePicker/DatePicker.js +3 -1
  63. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  64. package/components/DatePicker/DatePicker.d.ts +2 -2
  65. package/components/Dropdown/Dropdown/Dropdown.js +1 -0
  66. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  67. package/components/Dropdown/Dropdown.d.ts +2 -2
  68. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +1 -0
  69. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  70. package/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  71. package/components/Kebab/Kebab/Kebab.js +1 -0
  72. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  73. package/components/Kebab/Kebab.d.ts +2 -2
  74. package/components/MenuFooter/MenuFooter/MenuFooter.js +4 -2
  75. package/components/MenuFooter/MenuFooter/MenuFooter.js.map +1 -1
  76. package/components/MenuFooter/MenuFooter.d.ts +3 -3
  77. package/components/MenuHeader/MenuHeader/MenuHeader.js +4 -2
  78. package/components/MenuHeader/MenuHeader/MenuHeader.js.map +1 -1
  79. package/components/MenuHeader/MenuHeader.d.ts +3 -3
  80. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  81. package/components/MenuItem/MenuItem.d.ts +2 -2
  82. package/components/Select/Select/Select.js +1 -0
  83. package/components/Select/Select/Select.js.map +1 -1
  84. package/components/Select/Select.d.ts +2 -2
  85. package/components/TokenInput/TokenInput/TokenInput.js +9 -2
  86. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  87. package/components/TokenInput/TokenInput.d.ts +4 -3
  88. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -0
  89. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  90. package/internal/CustomComboBox/ComboBoxView.d.ts +2 -2
  91. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
  92. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  93. package/internal/CustomComboBox/CustomComboBox.d.ts +2 -2
  94. package/internal/PopupMenu/PopupMenu/PopupMenu.js +2 -1
  95. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  96. package/internal/PopupMenu/PopupMenu.d.ts +3 -3
  97. package/internal/themes/Theme2022Dark/Theme2022Dark.js +1 -1
  98. package/internal/themes/Theme2022Dark/Theme2022Dark.js.map +1 -1
  99. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","menu","label","SelectIds","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","menuId","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","styles","search","debouncedFocusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","focusInput","input","refMenu","e","preventDefault","up","down","enter","menuItemsAtAnyLevel","featureFlags","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","globalObject","addEventListener","removeEventListener","render","flags","theme","ThemeFactory","create","menuOffsetY","selectMenuOffsetY","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","icon","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","displayName","Item","SEP","static","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';\nimport invariant from 'invariant';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonUse } from '../Button';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { MenuHeaderProps } from '../MenuHeader';\nimport { SizeProp } from '../../lib/types/props';\nimport {\n getFullReactUIFlagsContext,\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n} from '../../lib/featureFlagsContext';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'> {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectDataTids = {\n root: 'Select__root',\n menu: 'Select__menu',\n label: 'Select__label',\n} as const;\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: SizeProp;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use' | 'size'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n size: 'small',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n private featureFlags!: ReactUIFeatureFlags;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n globalObject.removeEventListener?.('popstate', this.close);\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 = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.getProps().size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = isTheme2022(this.theme) ? <ArrowDownIcon size={this.props.size} /> : <ArrowChevronDownIcon />;\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n getParent={this.dropdownContainerGetParent}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.props.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.props.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n const menuItemsAtAnyLevel = this.featureFlags.menuItemsAtAnyLevel;\n\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(menuItemsAtAnyLevel ? 0 : 1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.props.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': buttonElement.props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
1
+ {"version":3,"sources":["Select.tsx"],"names":["PASS_BUTTON_PROPS","id","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","menu","label","SelectIds","Select","SelectLocaleHelper","responsiveLayout","rootNode","state","opened","value","props","defaultValue","searchPattern","menuId","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","renderLabel","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","styles","search","debouncedFocusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","React","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","dropdownContainerGetParent","focusInput","input","refMenu","e","preventDefault","up","down","enter","menuItemsAtAnyLevel","featureFlags","highlightItem","buttonRef","getButton","button","_renderButton","renderDefaultButton","Children","only","ref","onFocus","onBlur","componentDidUpdate","_prevProps","prevState","globalObject","addEventListener","removeEventListener","render","flags","theme","ThemeFactory","create","menuOffsetY","selectMenuOffsetY","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","locale","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","buttonProps","align","active","labelProps","className","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","icon","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","hasFixedWidth","menuWidth","menuAlign","disablePortal","menuPos","maxMenuHeight","mobileMenuHeaderText","onValueChange","fn","items","pattern","toLowerCase","result","index","entry","normalizeEntry","filterItem","push","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","displayName","Item","SEP","static","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"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","sourcesContent":["import React, { ReactNode, ReactPortal, AriaAttributes, HTMLAttributes } from 'react';\nimport invariant from 'invariant';\nimport { globalObject } from '@skbkontur/global-object';\nimport debounce from 'lodash.debounce';\n\nimport {\n isKeyArrowDown,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n} from '../../lib/events/keyboard/identifiers';\nimport { locale } from '../../lib/locale/decorators';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { Button, ButtonProps, ButtonUse } from '../Button';\nimport { DropdownContainer, DropdownContainerProps } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport { MenuItem, MenuItemProps } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { ArrowChevronDownIcon } from '../../internal/icons/16px';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { MenuHeaderProps } from '../MenuHeader';\nimport { SizeProp } from '../../lib/types/props';\nimport {\n getFullReactUIFlagsContext,\n ReactUIFeatureFlags,\n ReactUIFeatureFlagsContext,\n} from '../../lib/featureFlagsContext';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { Item } from './Item';\nimport { SelectLocale, SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\n\nexport interface ButtonParams\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'> {\n disabled?: boolean;\n label: React.ReactNode;\n onClick: () => void;\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n opened: boolean;\n isPlaceholder: boolean;\n size: SizeProp;\n}\n\nconst PASS_BUTTON_PROPS = {\n id: true,\n disabled: true,\n error: true,\n use: true,\n size: true,\n warning: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\n\nexport const SelectDataTids = {\n root: 'Select__root',\n menu: 'Select__menu',\n label: 'Select__label',\n} as const;\n\nexport const SelectIds = {\n menu: SelectDataTids.menu,\n} as const;\n\ntype SelectItem<TValue, TItem> =\n | [TValue, TItem, React.ReactNode?]\n | TItem\n | TValue\n | React.ReactElement\n | (() => React.ReactElement);\n\nexport interface SelectProps<TValue, TItem>\n extends CommonProps,\n Pick<DropdownContainerProps, 'menuPos'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {\n /** @ignore */\n _icon?: React.ReactNode;\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n defaultValue?: TValue;\n /**\n * Отключает использование портала\n */\n disablePortal?: boolean;\n disabled?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n /**\n * Набор значений. Поддерживаются любые перечисляемые типы, в том числе\n * `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то\n * первый элемент является значением, второй — отображается в списке,\n * а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения,\n * и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.static(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ```\n */\n items?: Array<SelectItem<TValue, TItem>>;\n maxMenuHeight?: number;\n maxWidth?: React.CSSProperties['maxWidth'];\n menuAlign?: 'left' | 'right';\n menuWidth?: React.CSSProperties['width'];\n onValueChange?: (value: TValue) => void;\n onClose?: () => void;\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n onOpen?: () => void;\n placeholder?: React.ReactNode;\n /**\n * Функция для отрисовки элемента в выпадающем списке. Аргументы — *value*,\n * *item*.\n */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для отрисовки выбранного элемента. Аргументы — *value*, *item*.\n */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n /**\n * Функция для сравнения `value` с элементом из `items`\n */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n /**\n * Показывать строку поиска в списке.\n */\n search?: boolean;\n value?: TValue;\n width?: number | string;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n use?: ButtonUse;\n size?: SizeProp;\n onFocus?: React.FocusEventHandler<HTMLElement>;\n onBlur?: React.FocusEventHandler<HTMLElement>;\n /**\n * Текст заголовка выпадающего меню в мобильной версии\n */\n mobileMenuHeaderText?: string;\n}\n\nexport interface SelectState<TValue> {\n opened: boolean;\n searchPattern: string;\n value: Nullable<TValue>;\n}\n\ninterface FocusableReactElement extends React.ReactElement<any> {\n focus: (event?: any) => void;\n}\n\ntype DefaultProps<TValue, TItem> = Required<\n Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use' | 'size'>\n>;\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n// Suggested solutions break current behavior\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {\n public static __KONTUR_REACT_UI__ = 'Select';\n public static displayName = 'Select';\n\n public static defaultProps: DefaultProps<unknown, ReactNode | ReactPortal> = {\n renderValue,\n renderItem,\n areValuesEqual,\n filterItem,\n use: 'default',\n size: 'small',\n };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static static = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.static(element) expects element to be a valid react element.',\n );\n return element;\n };\n\n public state: SelectState<TValue> = {\n opened: false,\n value: this.props.defaultValue,\n searchPattern: '',\n };\n\n private theme!: Theme;\n private isMobileLayout!: boolean;\n private readonly locale!: SelectLocale;\n private menu: Nullable<Menu>;\n private menuId = SelectIds.menu + getRandomID();\n private buttonElement: FocusableReactElement | null = null;\n private getProps = createPropsGetter(Select.defaultProps);\n private setRootNode!: TSetRootNode;\n private featureFlags!: ReactUIFeatureFlags;\n\n public componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>) {\n if (!prevState.opened && this.state.opened) {\n globalObject.addEventListener?.('popstate', this.close);\n }\n if (prevState.opened && !this.state.opened) {\n globalObject.removeEventListener?.('popstate', this.close);\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 = ThemeFactory.create(\n {\n menuOffsetY: theme.selectMenuOffsetY,\n },\n theme,\n );\n return <ThemeContext.Provider value={this.theme}>{this.renderMain()}</ThemeContext.Provider>;\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n /**\n * @public\n */\n public open = () => {\n if (!this.state.opened) {\n this.setState({ opened: true });\n\n if (this.props.onOpen) {\n this.props.onOpen();\n }\n }\n };\n\n /**\n * @public\n */\n public close = () => {\n if (this.state.opened) {\n this.setState({ opened: false, searchPattern: '' });\n\n if (this.props.onClose) {\n this.props.onClose();\n }\n }\n };\n\n /**\n * @public\n */\n public focus = () => {\n if (this.buttonElement && this.buttonElement.focus) {\n this.buttonElement.focus();\n }\n };\n\n private getMenuRenderer() {\n if (this.props.disabled) {\n return null;\n }\n\n if (this.isMobileLayout) {\n return this.renderMobileMenu();\n }\n\n if (this.state.opened) {\n return this.renderMenu();\n }\n\n return null;\n }\n\n private renderMain() {\n const buttonParams = this.getDefaultButtonParams();\n const button = (\n <ThemeContext.Provider value={getSelectTheme(this.theme, this.props)}>\n {this.getButton(buttonParams)}\n </ThemeContext.Provider>\n );\n\n const isMobile = this.isMobileLayout;\n\n const style = {\n width: this.props.width,\n maxWidth: this.props.maxWidth || undefined,\n };\n\n const root = (\n <span\n data-tid={SelectDataTids.root}\n className={cx({ [styles.root()]: true, [styles.rootMobile(this.theme)]: isMobile })}\n style={style}\n >\n {button}\n {this.getMenuRenderer()}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.close}\n onFocusOutside={this.close}\n active={isMobile ? false : this.state.opened}\n >\n {root}\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n private getDefaultButtonParams = (): ButtonParams => {\n const { label, isPlaceholder } = this.renderLabel();\n\n const buttonParams: ButtonParams = {\n opened: this.state.opened,\n label,\n isPlaceholder,\n onClick: this.toggle,\n onKeyDown: this.handleKey,\n size: this.getProps().size,\n disabled: this.getProps().disabled,\n };\n\n return buttonParams;\n };\n\n private renderLabel() {\n const value = this.getValue();\n const item = this.getItemByValue(value);\n\n if (isNonNullable(value)) {\n return {\n label: this.getProps().renderValue(value, item),\n isPlaceholder: false,\n };\n }\n\n return {\n label: <span>{this.props.placeholder || this.locale?.placeholder}</span>,\n isPlaceholder: true,\n };\n }\n\n private getLeftIconClass(size: SizeProp | undefined) {\n if (this.getProps().use === 'link') {\n return styles.leftIconLink(this.theme);\n }\n\n switch (size) {\n case 'large':\n return styles.leftIconLarge(this.theme);\n case 'medium':\n return styles.leftIconMedium(this.theme);\n case 'small':\n default:\n return styles.leftIconSmall(this.theme);\n }\n }\n\n private renderDefaultButton(params: ButtonParams) {\n const buttonProps: ButtonProps = {\n ...filterProps(this.props, PASS_BUTTON_PROPS),\n align: 'left' as React.CSSProperties['textAlign'],\n disabled: this.props.disabled,\n width: '100%',\n onClick: params.onClick,\n onKeyDown: params.onKeyDown,\n active: params.opened,\n size: params.size,\n };\n const use = this.getProps().use;\n\n const labelProps = {\n 'data-tid': SelectDataTids.label,\n className: cx({\n [styles.label()]: use !== 'link',\n [styles.placeholder(this.theme)]: params.isPlaceholder,\n [styles.customUsePlaceholder()]: params.isPlaceholder && use !== 'default',\n [styles.placeholderDisabled(this.theme)]: params.isPlaceholder && this.props.disabled,\n }),\n style: {\n paddingRight: this.getSelectIconGap(),\n },\n };\n\n const useIsCustom = use !== 'default';\n\n const icon = isTheme2022(this.theme) ? <ArrowDownIcon size={this.props.size} /> : <ArrowChevronDownIcon />;\n\n return (\n <Button {...buttonProps}>\n <div className={styles.selectButtonContainer()}>\n {this.props._icon && <div className={this.getLeftIconClass(this.props.size)}>{this.props._icon}</div>}\n <span {...labelProps}>{params.label}</span>\n\n <div\n className={cx(styles.arrowWrap(this.theme), {\n [styles.arrowDisabled(this.theme)]: this.props.disabled,\n [styles.customUseArrow()]: useIsCustom,\n })}\n >\n {icon}\n </div>\n </div>\n </Button>\n );\n }\n\n private getSelectIconGap(): number {\n const getArrowPadding = () => {\n switch (this.props.size) {\n case 'large':\n return this.theme.selectIconGapLarge;\n case 'medium':\n return this.theme.selectIconGapMedium;\n case 'small':\n default:\n return this.theme.selectIconGapSmall;\n }\n };\n const arrowLeftPadding = parseFloat(getArrowPadding()) || 0;\n\n return arrowLeftPadding;\n }\n\n private renderMenu(): React.ReactNode {\n const search = this.props.search ? this.getSearch() : null;\n\n const value = this.getValue();\n const hasFixedWidth = !!this.props.menuWidth && this.props.menuWidth !== 'auto';\n\n return (\n <DropdownContainer\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n getParent={this.dropdownContainerGetParent}\n align={this.props.menuAlign}\n disablePortal={this.props.disablePortal}\n hasFixedWidth={hasFixedWidth}\n menuPos={this.props.menuPos}\n >\n <Menu\n ref={this.refMenu}\n width={this.props.menuWidth}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={this.props.menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </DropdownContainer>\n );\n }\n\n private getSearch = () => {\n return (\n <div className={styles.search()} onKeyDown={this.handleKey}>\n <Input ref={this.debouncedFocusInput} onValueChange={this.handleSearch} width=\"100%\" />\n </div>\n );\n };\n\n private renderMobileMenu(): React.ReactNode {\n const search = this.props.search ? this.getMobileSearch() : null;\n const value = this.getValue();\n\n return (\n <MobilePopup\n headerChildComponent={search}\n caption={this.props.mobileMenuHeaderText}\n onCloseRequest={this.close}\n opened={this.state.opened}\n >\n <Menu hasShadow={false} onItemClick={this.close} disableScrollContainer maxHeight={'auto'}>\n {this.getMenuItems(value)}\n </Menu>\n </MobilePopup>\n );\n }\n\n private getMobileSearch = () => {\n return (\n <Input\n autoFocus\n value={this.state.searchPattern}\n ref={this.debouncedFocusInput}\n onValueChange={this.handleSearch}\n width=\"100%\"\n />\n );\n };\n\n private getMenuItems = (value: Nullable<TValue>) => {\n const isMobile = this.isMobileLayout;\n const size = this.props.size;\n\n return this.mapItems(\n (iValue: TValue, item: TItem | (() => React.ReactNode), i: number, comment: Nullable<React.ReactNode>) => {\n if (isFunction(item)) {\n const element = item();\n\n if (React.isValidElement(element)) {\n return React.cloneElement(element, { key: i, isMobile, size });\n }\n\n return null;\n }\n\n if (React.isValidElement(item)) {\n if (isReactUINode('MenuItem', item)) {\n return React.cloneElement(item, { key: i, isMobile, size } as MenuItemProps);\n }\n if (isReactUINode('MenuHeader', item)) {\n return React.cloneElement(item, { size } as MenuHeaderProps);\n }\n return React.cloneElement(item, { key: i });\n }\n\n return (\n <MenuItem\n key={i}\n state={this.areValuesEqual(iValue, value) ? 'selected' : null}\n onClick={this.select.bind(this, iValue)}\n comment={comment}\n isMobile={isMobile}\n size={this.props.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private dropdownContainerGetParent = () => {\n return getRootNode(this);\n };\n\n // fix cases when an Input is rendered in portal\n // https://github.com/skbkontur/retail-ui/issues/1995\n private focusInput = (input: Input) => input?.focus();\n private debouncedFocusInput = debounce(this.focusInput);\n\n private refMenu = (menu: Menu) => {\n this.menu = menu;\n };\n\n private toggle = () => {\n if (this.state.opened) {\n this.close();\n } else {\n this.open();\n }\n };\n\n private handleKey = (e: React.KeyboardEvent<HTMLElement>) => {\n if (!this.state.opened) {\n if (isKeySpace(e) || isKeyArrowVertical(e)) {\n e.preventDefault();\n this.open();\n }\n } else {\n switch (true) {\n case isKeyEscape(e):\n this.focus();\n this.close();\n break;\n case isKeyArrowUp(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.up();\n }\n break;\n case isKeyArrowDown(e):\n e.preventDefault();\n if (this.menu) {\n this.menu.down();\n }\n break;\n case isKeyEnter(e):\n e.preventDefault(); // To prevent form submission.\n if (this.menu) {\n this.menu.enter(e);\n }\n break;\n }\n }\n if (this.props.onKeyDown) {\n this.props.onKeyDown(e);\n }\n };\n\n private handleSearch = (value: string) => {\n const menuItemsAtAnyLevel = this.featureFlags.menuItemsAtAnyLevel;\n\n this.setState({ searchPattern: value });\n this.menu?.highlightItem(menuItemsAtAnyLevel ? 0 : 1);\n };\n\n private select(value: TValue) {\n this.focus();\n this.setState({ opened: false, value });\n\n if (!this.areValuesEqual(this.getValue(), value)) {\n this.props.onValueChange?.(value);\n }\n }\n\n private getValue() {\n if (this.props.value !== undefined) {\n return this.props.value;\n }\n return this.state.value;\n }\n\n private mapItems(fn: (value: TValue, item: TItem, index: number, comment?: string) => React.ReactNode) {\n const { items } = this.props;\n if (!items) {\n return [];\n }\n const pattern = this.state.searchPattern && this.state.searchPattern.toLowerCase();\n\n const result: React.ReactNode[] = [];\n let index = 0;\n for (const entry of items) {\n const [value, item, comment] = normalizeEntry(entry as TItem);\n\n if (!pattern || this.getProps().filterItem(value, item, pattern)) {\n result.push(fn(value, item, index, comment));\n ++index;\n }\n }\n\n return result;\n }\n\n private getItemByValue(value?: Nullable<TValue>) {\n if (value === null || value === undefined) {\n return null;\n }\n\n const items = this.props.items || [];\n\n for (const entry of items) {\n const [itemValue, item] = normalizeEntry(entry);\n\n if (this.areValuesEqual(itemValue, value)) {\n return item;\n }\n }\n return null;\n }\n\n private areValuesEqual(value1: Nullable<TValue>, value2: Nullable<TValue>) {\n return isNonNullable(value1) && isNonNullable(value2) && this.getProps().areValuesEqual(value1, value2);\n }\n\n private buttonRef = (element: FocusableReactElement | null) => {\n this.buttonElement = element;\n };\n\n private getButton = (buttonParams: ButtonParams) => {\n const button = this.props._renderButton\n ? this.props._renderButton(buttonParams)\n : this.renderDefaultButton(buttonParams);\n\n const buttonElement = React.Children.only(button);\n\n return React.isValidElement(buttonElement)\n ? React.cloneElement(buttonElement as React.ReactElement, {\n ref: this.buttonRef,\n onFocus: this.props.onFocus,\n onBlur: this.props.onBlur,\n size: this.props.size,\n 'aria-describedby': this.props['aria-describedby'],\n 'aria-expanded': this.state.opened ? 'true' : 'false',\n 'aria-controls': this.menuId,\n 'aria-label': buttonElement.props['aria-label'] ?? this.props['aria-label'],\n })\n : buttonElement;\n };\n}\n\nfunction renderValue<TValue, TItem>(value: TValue, item: Nullable<TItem>) {\n return item;\n}\n\nfunction renderItem<TValue, TItem>(value: TValue, item?: TItem) {\n return item;\n}\n\nfunction areValuesEqual<TValue>(value1: TValue, value2: TValue) {\n return value1 === value2;\n}\n\nfunction normalizeEntry(entry: any) {\n if (Array.isArray(entry)) {\n return entry;\n }\n\n return [entry, entry, undefined];\n}\n\nconst getTextFromItem = (item: any): string => {\n if (typeof item === 'string') {\n return item;\n }\n\n if (isFunction(item)) {\n return getTextFromItem(item());\n }\n\n if (React.isValidElement(item)) {\n return reactGetTextContent(item);\n }\n\n if (typeof item === 'number') {\n return item.toString(10);\n }\n\n return '';\n};\n\nfunction filterItem<TValue>(value: TValue, item: any, pattern: string) {\n if (item === Select.SEP) {\n return false;\n }\n\n const itemText = getTextFromItem(item);\n\n if (!itemText) {\n return false;\n }\n\n return itemText.toLowerCase().indexOf(pattern) !== -1;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import React, { AriaAttributes, FocusEventHandler, MouseEventHandler, ReactNode } from 'react';
1
+ import React, { AriaAttributes, FocusEventHandler, HTMLAttributes, MouseEventHandler, ReactNode } from 'react';
2
2
  import { TokenProps, TokenSize } from '../Token';
3
3
  import { MenuItemState } from '../MenuItem';
4
4
  import { CommonProps } from '../../internal/CommonWrapper';
@@ -8,7 +8,7 @@ export declare enum TokenInputType {
8
8
  Combined = 2
9
9
  }
10
10
  export declare type TokenInputMenuAlign = 'left' | 'cursor';
11
- export interface TokenInputProps<T> extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, CommonProps {
11
+ export interface TokenInputProps<T> extends CommonProps, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'> {
12
12
  /**
13
13
  * Выбранные токены, которые будут отображаться в поле ввода
14
14
  */
@@ -181,8 +181,9 @@ export declare class TokenInput<T = string> extends React.PureComponent<TokenInp
181
181
  static defaultProps: DefaultProps<any>;
182
182
  private getDelimiters;
183
183
  private getProps;
184
+ private get textareaId();
184
185
  state: TokenInputState<T>;
185
- private readonly textareaId;
186
+ private readonly _textareaId;
186
187
  private rootId;
187
188
  private readonly locale;
188
189
  private theme;
@@ -7,6 +7,7 @@
7
7
 
8
8
 
9
9
 
10
+
10
11
  var _lodash = _interopRequireDefault(require("lodash.isequal"));
11
12
  var _globalObject = require("@skbkontur/global-object");
12
13
 
@@ -27,12 +28,11 @@ var _identifiers = require("../../lib/events/keyboard/identifiers");
27
28
  var LayoutEvents = _interopRequireWildcard(require("../../lib/LayoutEvents"));
28
29
 
29
30
  var _Token = require("../Token");
30
-
31
+ var _MenuItem = require("../MenuItem");
31
32
  var _utils = require("../../lib/utils");
32
33
  var _ThemeContext = require("../../lib/theming/ThemeContext");
33
34
 
34
35
  var _decorators = require("../../lib/locale/decorators");
35
- var _MenuItem = require("../MenuItem/MenuItem");
36
36
  var _CommonWrapper = require("../../internal/CommonWrapper");
37
37
  var _Emotion = require("../../lib/theming/Emotion");
38
38
  var _rootNode = require("../../lib/rootNode");
@@ -208,6 +208,9 @@ TokenInputType;exports.TokenInputType = TokenInputType;(function (TokenInputType
208
208
 
209
209
 
210
210
 
211
+
212
+
213
+
211
214
 
212
215
 
213
216
 
@@ -310,6 +313,10 @@ TokenInput = (_dec = (0, _decorators.locale)('TokenInput', _locale.TokenInputLoc
310
313
 
311
314
 
312
315
 
316
+
317
+
318
+
319
+
313
320
 
314
321
 
315
322
 
@@ -317,7 +324,7 @@ TokenInput = (_dec = (0, _decorators.locale)('TokenInput', _locale.TokenInputLoc
317
324
 
318
325
  state = DefaultState;_this.
319
326
 
320
- textareaId = (0, _uidUtils.getUid)();_this.
327
+ _textareaId = (0, _uidUtils.getUid)();_this.
321
328
  rootId = _Popup.PopupIds.root + (0, _utils.getRandomID)();_this.
322
329
 
323
330
 
@@ -1235,5 +1242,5 @@ TokenInput = (_dec = (0, _decorators.locale)('TokenInput', _locale.TokenInputLoc
1235
1242
  * @public
1236
1243
  */;_proto.reset = function reset() {this.dispatch({ type: 'RESET' });};_proto.isCursorVisibleForState = function isCursorVisibleForState(state) {return state.inFocus && (state.inputValue !== '' || state.activeTokens.length === 0);};_proto.updateInputTextWidth = function updateInputTextWidth() {if (this.textHelper) {// в IE текст иногда не помещается в input
1237
1244
  // из-за округления, поэтому округляем явно
1238
- 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) });}};(0, _createClass2.default)(TokenInput, [{ 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.state.inputValue !== '') {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;} }]);return TokenInput;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'TokenInput', _class2.displayName = 'TokenInput', _class2.defaultProps = { selectedItems: [], // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.
1245
+ 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) });}};(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.state.inputValue !== '') {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;} }]);return TokenInput;}(_react.default.PureComponent), _class2.__KONTUR_REACT_UI__ = 'TokenInput', _class2.displayName = 'TokenInput', _class2.defaultProps = { selectedItems: [], // TEMP_FAKE_FLAG помогает узнать, остались ли разделители дефолтными или пользователь передал их равными дефолтным.
1239
1246
  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', size: 'small' }, _temp)) || _class) || _class);exports.TokenInput = TokenInput;