@skbkontur/react-ui 5.6.0 → 5.6.1-9a162.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.
- package/cjs/components/ComboBox/ComboBox.d.ts +17 -17
- package/cjs/components/ComboBox/ComboBox.js.map +1 -1
- package/cjs/components/Input/Input.d.ts +3 -3
- package/cjs/components/Input/Input.js +3 -2
- package/cjs/components/Input/Input.js.map +1 -1
- package/cjs/components/Input/InputLayout/InputLayout.d.ts +2 -1
- package/cjs/components/Input/InputLayout/InputLayout.js +20 -17
- package/cjs/components/Input/InputLayout/InputLayout.js.map +1 -1
- package/cjs/components/Select/Select.d.ts +56 -54
- package/cjs/components/Select/Select.js +13 -11
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/Textarea/Textarea.d.ts +25 -26
- package/cjs/components/Textarea/Textarea.js +9 -8
- package/cjs/components/Textarea/Textarea.js.map +1 -1
- package/cjs/components/TokenInput/TokenInput.d.ts +18 -18
- package/cjs/components/TokenInput/TokenInput.js.map +1 -1
- package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
- package/components/ComboBox/ComboBox.d.ts +17 -17
- package/components/Input/Input/Input.js +2 -2
- package/components/Input/Input/Input.js.map +1 -1
- package/components/Input/Input.d.ts +3 -3
- package/components/Input/InputLayout/InputLayout/InputLayout.js +3 -2
- package/components/Input/InputLayout/InputLayout/InputLayout.js.map +1 -1
- package/components/Input/InputLayout/InputLayout.d.ts +2 -1
- package/components/Select/Select/Select.js +5 -11
- package/components/Select/Select/Select.js.map +1 -1
- package/components/Select/Select.d.ts +56 -54
- package/components/Textarea/Textarea/Textarea.js +7 -8
- package/components/Textarea/Textarea/Textarea.js.map +1 -1
- package/components/Textarea/Textarea.d.ts +25 -26
- package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
- package/components/TokenInput/TokenInput.d.ts +18 -18
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","invariant","globalObject","debounce","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","getRandomID","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","ThemeFactory","styles","linkStyles","Popup","ZIndex","getMenuPositions","withSize","ArrowDownIcon","Item","SelectLocaleHelper","getSelectTheme","SelectDataTids","PASS_BUTTON_PROPS","id","disabled","error","use","size","warning","corners","onMouseEnter","onMouseLeave","onMouseOver","SelectIds","menu","Select","_dec","_class","_Select","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","state","opened","value","props","defaultValue","searchPattern","menuId","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","_this$renderLabel","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","createElement","className","search","ref","debouncedFocusInput","onValueChange","handleSearch","width","getMobileSearch","autoFocus","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","popupGetParent","focusInput","input","refMenu","e","preventDefault","up","down","enter","_this$menu","highlightItem","buttonRef","getButton","_props$ariaLabel","button","_renderButton","renderDefaultButton","Children","only","onFocus","onBlur","_inheritsLoose","_proto","prototype","componentDidUpdate","_prevProps","prevState","addEventListener","removeEventListener","render","_this2","Consumer","theme","create","menuOffsetY","selectMenuOffsetY","Provider","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","_this$getProps$dataT","_cx","dataTid","root","style","maxWidth","undefined","rootMobile","_extends","rootNodeRef","setRootNode","onClickOutside","onFocusOutside","active","_this$props$placehold","_this$locale","getValue","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","_cx2","_cx3","_cx4","buttonProps","align","labelProps","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","icon","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","_this3","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","_this$getProps","menuWidth","menuPos","menuAlign","positions","hasShadow","anchorElement","priority","priorities","PopupMenu","disablePortal","margin","parseInt","minWidth","popupOffset","menuOffset","hasMargin","onItemClick","maxHeight","maxMenuHeight","headerChildComponent","caption","mobileMenuHeaderText","onCloseRequest","disableScrollContainer","_this$props$onValueCh","_this$props","fn","items","pattern","toLowerCase","result","index","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","_normalizeEntry","normalizeEntry","filterItem","push","_iterator2","_step2","_normalizeEntry2","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","displayName","SEP","staticElement","isArray","getTextFromItem","toString","itemText","indexOf"],"sources":["Select.tsx"],"sourcesContent":["import type { ReactNode, ReactPortal, AriaAttributes, HTMLAttributes } from 'react';\nimport React 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 type { ButtonProps, ButtonUse } from '../Button';\nimport { Button } from '../Button';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport type { MenuItemProps } from '../MenuItem';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { Nullable } from '../../typings/utility-types';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getRootNode, rootNode } from '../../lib/rootNode';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport type { MenuHeaderProps } from '../MenuHeader';\nimport type { SizeProp } from '../../lib/types/props';\nimport { styles as linkStyles } from '../Link/Link.styles';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { getMenuPositions } from '../../lib/getMenuPositions';\nimport { withSize } from '../../lib/size/SizeDecorator';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { Item } from './Item';\nimport type { SelectLocale } from './locale';\nimport { SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\nimport { SelectDataTids } from './tids';\n\nexport * from './tids';\n\nexport interface ButtonParams\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'> {\n /** Делает компонент недоступным. */\n disabled?: boolean;\n\n /** Задает лейбл. */\n label: React.ReactNode;\n\n /** Задает функцию, которая вызывается при клике на селект. */\n onClick: () => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\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 corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\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<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** @ignore */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Задает значение по умолчанию. */\n defaultValue?: TValue;\n\n menuOffset?: number;\n\n /** Отключает использование портала. */\n disablePortal?: boolean;\n\n /** Делает компонент недоступным.*/\n disabled?: boolean;\n\n /** Переводит контрол в состояние валидации \"ошибка\". */\n error?: boolean;\n\n /** Задает функцию, которая отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Задает набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом: если элемент — это массив, то первый элемент является значением,\n * второй — отображается в списке, а третий – комментарий;\n * если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя можно использовать `Select.SEP`.\n *\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * @example\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n *\n * Чтобы добавить стандартный отступ для статического элемента:\n * @example\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Задает максимальную высоту меню. */\n maxMenuHeight?: number;\n\n /** Задает максимальную ширину. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Задает позиции выпадающего меню. */\n positions?: PopupPositionsType[];\n\n /** Задает текущую позицию выпадающего окна вручную. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Задает выравнивание меню. */\n menuAlign?: 'left' | 'right';\n\n /** Задает ширину выпадающего меню. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Задает функцию, вызывающуюся при изменении value. */\n onValueChange?: (value: TValue) => void;\n\n /** Задает функцию, которая вызывается при закрытии меню. */\n onClose?: () => void;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseenter`). См разницу с onMouseOver в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave) */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Задает функцию, которая вызывается при уходе мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Задает функцию, которая вызывается при наведении мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Задает функцию, которая вызывается при открытии меню. */\n onOpen?: () => void;\n\n /** Задает текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Задает функцию, которая отображает элемент в выпадающем списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Задает функцию, которая отображает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Задает функцию сравнения `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Показывает строку поиска в списке. */\n search?: boolean;\n\n /** Задает значение. */\n value?: TValue;\n\n theme?: ThemeIn | Theme;\n\n /** Задает длину контрола. */\n width?: number | string;\n\n /** Переводит контрол в состояние валидации \"предупреждение\". */\n warning?: boolean;\n\n /** Задаёт стиль кнопки. */\n use?: ButtonUse;\n\n /** Задает размер. */\n size?: SizeProp;\n\n /** Задаёт HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** Задаёт HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\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'>\n>;\n\n/**\n * Раскрывающийся список `Select` позволяет выбрать значение из заранее известного набора вариантов.\n *\n * Используйте `Select` при:\n * * заполнении форм, например для выбора месяца.\n * * переключении состояний, например, фильтра.\n * * выборе предустановленных настроек, например, частоты уведомлений, часового пояса.\n *\n * Не используйте `Select` для выбора элементов меню. В таком случае воспользуйтесь компонентом Dropdown.\n */\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\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 };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static staticElement = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(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 size!: SizeProp;\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 public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\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 <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\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 dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\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={dataTid}\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.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 = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div className={cx(styles.selectButtonContainer(), { [linkStyles.root(this.theme)]: use === 'link' })}>\n {this.props._icon && <div className={this.getLeftIconClass(this.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.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 { menuWidth, menuPos, menuAlign, positions } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\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 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.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 } as MenuItemProps);\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.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\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 this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\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.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 as React.ReactElement).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"],"mappings":";AACA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,SAAS,MAAM,WAAW;AACjC,SAASC,YAAY,QAAQ,0BAA0B;AACvD,OAAOC,QAAQ,MAAM,iBAAiB;;AAEtC;EACEC,cAAc;EACdC,YAAY;EACZC,kBAAkB;EAClBC,UAAU;EACVC,WAAW;EACXC,UAAU;AACL,uCAAuC;AAC9C,SAASC,MAAM,QAAQ,6BAA6B;AACpD,SAASC,mBAAmB,QAAQ,+BAA+B;;AAEnE,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,KAAK,QAAQ,UAAU;AAChC,SAASC,IAAI,QAAQ,qBAAqB;;AAE1C,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,aAAa,QAAQ,kBAAkB;AAChD,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,iBAAiB,QAAQ,6BAA6B;;AAE/D,SAASC,WAAW,EAAEC,UAAU,EAAEC,aAAa,EAAEC,aAAa,QAAQ,iBAAiB;AACvF,SAASC,YAAY,QAAQ,gCAAgC;;;AAG7D,SAASC,aAAa,QAAQ,8BAA8B;AAC5D,SAASC,WAAW,QAAQ,4BAA4B;AACxD,SAASC,EAAE,QAAQ,2BAA2B;AAC9C,SAASC,gBAAgB,QAAQ,+BAA+B;;AAEhE,SAASC,WAAW,EAAEC,QAAQ,QAAQ,oBAAoB;AAC1D,SAASC,YAAY,QAAQ,gCAAgC;;;AAG7D,SAASC,MAAM,IAAIC,UAAU,QAAQ,qBAAqB;AAC1D,SAASC,KAAK,QAAiC,sBAAsB;AACrE,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,gBAAgB,QAAQ,4BAA4B;AAC7D,SAASC,QAAQ,QAAQ,8BAA8B;;AAEvD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,IAAI,QAAQ,QAAQ;;AAE7B,SAASC,kBAAkB,QAAQ,UAAU;AAC7C,SAASR,MAAM,QAAQ,iBAAiB;AACxC,SAASS,cAAc,QAAQ,eAAe;AAC9C,SAASC,cAAc,QAAQ,QAAQ;;AAEvC,cAAc,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BtB,IAAMC,iBAAiB,GAAG;EACxBC,EAAE,EAAE,IAAI;EACRC,QAAQ,EAAE,IAAI;EACdC,KAAK,EAAE,IAAI;EACXC,GAAG,EAAE,IAAI;EACTC,IAAI,EAAE,IAAI;EACVC,OAAO,EAAE,IAAI;EACbC,OAAO,EAAE,IAAI;;EAEbC,YAAY,EAAE,IAAI;EAClBC,YAAY,EAAE,IAAI;EAClBC,WAAW,EAAE;AACf,CAAC;;AAED,OAAO,IAAMC,SAAS,GAAG;EACvBC,IAAI,EAAEb,cAAc,CAACa;AACvB,CAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6JV;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;AAMaC,MAAM,IAAAC,IAAA,GAJlB/C,MAAM,CAAC,QAAQ,EAAE8B,kBAAkB,CAAC,EAFpCZ,gBAAgB,CAAA8B,MAAA,GAChB5B,QAAQ,CAAA4B,MAAA,GAAAD,IAAA,CAAAC,MAAA,GAERrB,QAAQ,CAAAqB,MAAA,IAAAC,OAAA,0BAAAC,gBAAA,YAAAJ,OAAA,OAAAK,KAAA,UAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA,KAAAF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA,GAAAN,KAAA,GAAAD,gBAAA,CAAAQ,IAAA,CAAAC,KAAA,CAAAT,gBAAA,SAAAU,MAAA,CAAAL,IAAA,WAAAJ,KAAA;;;;;;;;;;;;;;;;;;;;;;;IA0BAU,KAAK,GAAwB;MAClCC,MAAM,EAAE,KAAK;MACbC,KAAK,EAAEZ,KAAA,CAAKa,KAAK,CAACC,YAAY;MAC9BC,aAAa,EAAE;IACjB,CAAC,CAAAf,KAAA;;;;;;;IAOOgB,MAAM,GAAGvB,SAAS,CAACC,IAAI,GAAGnC,WAAW,CAAC,CAAC,CAAAyC,KAAA;IACvCiB,aAAa,GAAiC,IAAI,CAAAjB,KAAA;IAClDkB,QAAQ,GAAG5D,iBAAiB,CAACqC,MAAM,CAACwB,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BzD;AACF;AACA,OAFEnB,KAAA;IAGOoB,IAAI,GAAG,YAAM;MAClB,IAAI,CAACpB,KAAA,CAAKU,KAAK,CAACC,MAAM,EAAE;QACtBX,KAAA,CAAKqB,QAAQ,CAAC,EAAEV,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;;QAE/B,IAAIX,KAAA,CAAKa,KAAK,CAACS,MAAM,EAAE;UACrBtB,KAAA,CAAKa,KAAK,CAACS,MAAM,CAAC,CAAC;QACrB;MACF;IACF,CAAC;;IAED;AACF;AACA,OAFEtB,KAAA;IAGOuB,KAAK,GAAG,YAAM;MACnB,IAAIvB,KAAA,CAAKU,KAAK,CAACC,MAAM,EAAE;QACrBX,KAAA,CAAKqB,QAAQ,CAAC,EAAEV,MAAM,EAAE,KAAK,EAAEI,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;;QAEnD,IAAIf,KAAA,CAAKa,KAAK,CAACW,OAAO,EAAE;UACtBxB,KAAA,CAAKa,KAAK,CAACW,OAAO,CAAC,CAAC;QACtB;MACF;IACF,CAAC;;IAED;AACF;AACA,OAFExB,KAAA;IAGOyB,KAAK,GAAG,YAAM;MACnB,IAAIzB,KAAA,CAAKiB,aAAa,IAAIjB,KAAA,CAAKiB,aAAa,CAACQ,KAAK,EAAE;QAClDzB,KAAA,CAAKiB,aAAa,CAACQ,KAAK,CAAC,CAAC;MAC5B;IACF,CAAC,CAAAzB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0DO0B,sBAAsB,GAAG,YAAoB;MACnD,IAAAC,iBAAA,GAAiC3B,KAAA,CAAK4B,WAAW,CAAC,CAAC,CAA3CC,KAAK,GAAAF,iBAAA,CAALE,KAAK,CAAEC,aAAa,GAAAH,iBAAA,CAAbG,aAAa;;MAE5B,IAAMC,YAA0B,GAAG;QACjCpB,MAAM,EAAEX,KAAA,CAAKU,KAAK,CAACC,MAAM;QACzBkB,KAAK,EAALA,KAAK;QACLC,aAAa,EAAbA,aAAa;QACbE,OAAO,EAAEhC,KAAA,CAAKiC,MAAM;QACpBC,SAAS,EAAElC,KAAA,CAAKmC,SAAS;QACzBhD,IAAI,EAAEa,KAAA,CAAKb,IAAI;QACfH,QAAQ,EAAEgB,KAAA,CAAKkB,QAAQ,CAAC,CAAC,CAAClC;MAC5B,CAAC;;MAED,OAAO+C,YAAY;IACrB,CAAC,CAAA/B,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwIOoC,SAAS,GAAG,YAAM;MACxB;QACEjG,KAAA,CAAAkG,aAAA,UAAKC,SAAS,EAAEnE,MAAM,CAACoE,MAAM,CAAC,CAAE,EAACL,SAAS,EAAElC,KAAA,CAAKmC,SAAU;QACzDhG,KAAA,CAAAkG,aAAA,CAACpF,KAAK,IAACuF,GAAG,EAAExC,KAAA,CAAKyC,mBAAoB,EAACC,aAAa,EAAE1C,KAAA,CAAK2C,YAAa,EAACC,KAAK,EAAC,MAAM,EAAE;QACnF,CAAC;;IAEV,CAAC,CAAA5C,KAAA;;;;;;;;;;;;;;;;;;;;IAoBO6C,eAAe,GAAG,YAAM;MAC9B;QACE1G,KAAA,CAAAkG,aAAA,CAACpF,KAAK;UACJ6F,SAAS;UACTlC,KAAK,EAAEZ,KAAA,CAAKU,KAAK,CAACK,aAAc;UAChCyB,GAAG,EAAExC,KAAA,CAAKyC,mBAAoB;UAC9BC,aAAa,EAAE1C,KAAA,CAAK2C,YAAa;UACjCC,KAAK,EAAC,MAAM;QACb,CAAC;;IAEN,CAAC,CAAA5C,KAAA;;IAEO+C,YAAY,GAAG,UAACnC,KAAuB,EAAK;MAClD,IAAMoC,QAAQ,GAAGhD,KAAA,CAAKiD,cAAc;MACpC,IAAM9D,IAAI,GAAGa,KAAA,CAAKb,IAAI;;MAEtB,OAAOa,KAAA,CAAKkD,QAAQ;QAClB,UAACC,MAAc,EAAEC,IAAqC,EAAEC,CAAS,EAAEC,OAAkC,EAAK;UACxG,IAAI9F,UAAU,CAAC4F,IAAI,CAAC,EAAE;YACpB,IAAMG,OAAO,GAAGH,IAAI,CAAC,CAAC;;YAEtB,kBAAIjH,KAAK,CAACqH,cAAc,CAACD,OAAO,CAAC,EAAE;cACjC,oBAAOpH,KAAK,CAACsH,YAAY,CAACF,OAAO,EAAE,EAAEG,GAAG,EAAEL,CAAC,EAAEL,QAAQ,EAARA,QAAQ,EAAE7D,IAAI,EAAJA,IAAI,CAAC,CAAkB,CAAC;YACjF;;YAEA,OAAO,IAAI;UACb;;UAEA,kBAAIhD,KAAK,CAACqH,cAAc,CAACJ,IAAI,CAAC,EAAE;YAC9B,IAAI1F,aAAa,CAAC,UAAU,EAAE0F,IAAI,CAAC,EAAE;cACnC,oBAAOjH,KAAK,CAACsH,YAAY,CAACL,IAAI,EAAE,EAAEM,GAAG,EAAEL,CAAC,EAAEL,QAAQ,EAARA,QAAQ,EAAE7D,IAAI,EAAJA,IAAI,CAAC,CAAkB,CAAC;YAC9E;YACA,IAAIzB,aAAa,CAAC,YAAY,EAAE0F,IAAI,CAAC,EAAE;cACrC,oBAAOjH,KAAK,CAACsH,YAAY,CAACL,IAAI,EAAE,EAAEjE,IAAI,EAAJA,IAAI,CAAC,CAAoB,CAAC;YAC9D;YACA,oBAAOhD,KAAK,CAACsH,YAAY,CAACL,IAAI,EAAE,EAAEM,GAAG,EAAEL,CAAC,CAAC,CAAC,CAAC;UAC7C;;UAEA;YACElH,KAAA,CAAAkG,aAAA,CAAClF,QAAQ;cACPuG,GAAG,EAAEL,CAAE;cACP3C,KAAK,EAAEV,KAAA,CAAK2D,cAAc,CAACR,MAAM,EAAEvC,KAAK,CAAC,GAAG,UAAU,GAAG,IAAK;cAC9DoB,OAAO,EAAEhC,KAAA,CAAK4D,MAAM,CAACC,IAAI,CAAA7D,KAAA,EAAOmD,MAAM,CAAE;cACxCG,OAAO,EAAEA,OAAQ;cACjBN,QAAQ,EAAEA,QAAS;cACnB7D,IAAI,EAAEa,KAAA,CAAKb,IAAK;;YAEfa,KAAA,CAAKkB,QAAQ,CAAC,CAAC,CAAC4C,UAAU,CAACX,MAAM,EAAEC,IAAI;YAChC,CAAC;;QAEf;MACF,CAAC;IACH,CAAC,CAAApD,KAAA;;IAEO+D,cAAc,GAAG,YAAM;MAC7B,OAAO/F,WAAW,CAAAgC,KAAK,CAAC;IAC1B,CAAC;;IAED;IACA;IAAAA,KAAA,CACQgE,UAAU,GAAG,UAACC,KAAY,UAAKA,KAAK,oBAALA,KAAK,CAAExC,KAAK,CAAC,CAAC,GAAAzB,KAAA;IAC7CyC,mBAAmB,GAAGnG,QAAQ,CAAC0D,KAAA,CAAKgE,UAAU,CAAC,CAAAhE,KAAA;;IAE/CkE,OAAO,GAAG,UAACxE,IAAU,EAAK;MAChCM,KAAA,CAAKN,IAAI,GAAGA,IAAI;IAClB,CAAC,CAAAM,KAAA;;IAEOiC,MAAM,GAAG,YAAM;MACrB,IAAIjC,KAAA,CAAKU,KAAK,CAACC,MAAM,EAAE;QACrBX,KAAA,CAAKuB,KAAK,CAAC,CAAC;MACd,CAAC,MAAM;QACLvB,KAAA,CAAKoB,IAAI,CAAC,CAAC;MACb;IACF,CAAC,CAAApB,KAAA;;IAEOmC,SAAS,GAAG,UAACgC,CAAmC,EAAK;MAC3D,IAAI,CAACnE,KAAA,CAAKU,KAAK,CAACC,MAAM,EAAE;QACtB,IAAI/D,UAAU,CAACuH,CAAC,CAAC,IAAI1H,kBAAkB,CAAC0H,CAAC,CAAC,EAAE;UAC1CA,CAAC,CAACC,cAAc,CAAC,CAAC;UAClBpE,KAAA,CAAKoB,IAAI,CAAC,CAAC;QACb;MACF,CAAC,MAAM;QACL,QAAQ,IAAI;UACV,KAAKzE,WAAW,CAACwH,CAAC,CAAC;YACjBnE,KAAA,CAAKyB,KAAK,CAAC,CAAC;YACZzB,KAAA,CAAKuB,KAAK,CAAC,CAAC;YACZ;UACF,KAAK/E,YAAY,CAAC2H,CAAC,CAAC;YAClBA,CAAC,CAACC,cAAc,CAAC,CAAC;YAClB,IAAIpE,KAAA,CAAKN,IAAI,EAAE;cACbM,KAAA,CAAKN,IAAI,CAAC2E,EAAE,CAAC,CAAC;YAChB;YACA;UACF,KAAK9H,cAAc,CAAC4H,CAAC,CAAC;YACpBA,CAAC,CAACC,cAAc,CAAC,CAAC;YAClB,IAAIpE,KAAA,CAAKN,IAAI,EAAE;cACbM,KAAA,CAAKN,IAAI,CAAC4E,IAAI,CAAC,CAAC;YAClB;YACA;UACF,KAAK5H,UAAU,CAACyH,CAAC,CAAC;YAChBA,CAAC,CAACC,cAAc,CAAC,CAAC,CAAC,CAAC;YACpB,IAAIpE,KAAA,CAAKN,IAAI,EAAE;cACbM,KAAA,CAAKN,IAAI,CAAC6E,KAAK,CAACJ,CAAC,CAAC;YACpB;YACA;QACJ;MACF;MACA,IAAInE,KAAA,CAAKa,KAAK,CAACqB,SAAS,EAAE;QACxBlC,KAAA,CAAKa,KAAK,CAACqB,SAAS,CAACiC,CAAC,CAAC;MACzB;IACF,CAAC,CAAAnE,KAAA;;IAEO2C,YAAY,GAAG,UAAC/B,KAAa,EAAK,KAAA4D,UAAA;MACxCxE,KAAA,CAAKqB,QAAQ,CAAC,EAAEN,aAAa,EAAEH,KAAK,CAAC,CAAC,CAAC;MACvC,CAAA4D,UAAA,GAAAxE,KAAA,CAAKN,IAAI,aAAT8E,UAAA,CAAWC,aAAa,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAAzE,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA4DO0E,SAAS,GAAG,UAACnB,OAAqC,EAAK;MAC7DvD,KAAA,CAAKiB,aAAa,GAAGsC,OAAO;IAC9B,CAAC,CAAAvD,KAAA;;IAEO2E,SAAS,GAAG,UAAC5C,YAA0B,EAAK,KAAA6C,gBAAA;MAClD,IAAMC,MAAM,GAAG7E,KAAA,CAAKa,KAAK,CAACiE,aAAa;MACnC9E,KAAA,CAAKa,KAAK,CAACiE,aAAa,CAAC/C,YAAY,CAAC;MACtC/B,KAAA,CAAK+E,mBAAmB,CAAChD,YAAY,CAAC;;MAE1C,IAAMd,aAAa,GAAG9E,KAAK,CAAC6I,QAAQ,CAACC,IAAI,CAACJ,MAAM,CAAC;;MAEjD,OAAO,aAAA1I,KAAK,CAACqH,cAAc,CAACvC,aAAa,CAAC;MACtC9E,KAAK,CAACsH,YAAY,CAACxC,aAAa,EAAwB;QACtDuB,GAAG,EAAExC,KAAA,CAAK0E,SAAS;QACnBQ,OAAO,EAAElF,KAAA,CAAKa,KAAK,CAACqE,OAAO;QAC3BC,MAAM,EAAEnF,KAAA,CAAKa,KAAK,CAACsE,MAAM;QACzBhG,IAAI,EAAEa,KAAA,CAAKb,IAAI;QACf,kBAAkB,EAAEa,KAAA,CAAKa,KAAK,CAAC,kBAAkB,CAAC;QAClD,eAAe,EAAEb,KAAA,CAAKU,KAAK,CAACC,MAAM,GAAG,MAAM,GAAG,OAAO;QACrD,eAAe,EAAEX,KAAA,CAAKgB,MAAM;QAC5B,YAAY,GAAA4D,gBAAA,GAAG3D,aAAa,CAAwBJ,KAAK,CAAC,YAAY,CAAC,YAAA+D,gBAAA,GAAI5E,KAAA,CAAKa,KAAK,CAAC,YAAY;MACpG,CAAC,CAAC;MACFI,aAAa;IACnB,CAAC,QAAAjB,KAAA,EAAAoF,cAAA,CAAAzF,MAAA,EAAAI,gBAAA,MAAAsF,MAAA,GAAA1F,MAAA,CAAA2F,SAAA,CAAAD,MAAA,CA1eME,kBAAkB,GAAzB,SAAAA,mBAA0BC,UAAsC,EAAEC,SAA8B,EAAE,CAChG,IAAI,CAACA,SAAS,CAAC9E,MAAM,IAAI,IAAI,CAACD,KAAK,CAACC,MAAM,EAAE,CAC1CtE,YAAY,CAACqJ,gBAAgB,YAA7BrJ,YAAY,CAACqJ,gBAAgB,CAAG,UAAU,EAAE,IAAI,CAACnE,KAAK,CAAC,CACzD,CACA,IAAIkE,SAAS,CAAC9E,MAAM,IAAI,CAAC,IAAI,CAACD,KAAK,CAACC,MAAM,EAAE,CAC1CtE,YAAY,CAACsJ,mBAAmB,YAAhCtJ,YAAY,CAACsJ,mBAAmB,CAAG,UAAU,EAAE,IAAI,CAACpE,KAAK,CAAC,CAC5D,CACF,CAAC,CAAA8D,MAAA,CAEMO,MAAM,GAAb,SAAAA,OAAA,EAAgB,KAAAC,MAAA,QACd,oBACE1J,KAAA,CAAAkG,aAAA,CAAC1E,YAAY,CAACmI,QAAQ,QACnB,UAACC,KAAK,EAAK,CACVF,MAAI,CAACE,KAAK,GAAG7H,YAAY,CAAC8H,MAAM,CAC9B,EACEC,WAAW,EAAEF,KAAK,CAACG,iBAAiB,CACtC,CAAC,EACDH,KACF,CAAC,CACD,oBAAO5J,KAAA,CAAAkG,aAAA,CAAC1E,YAAY,CAACwI,QAAQ,IAACvF,KAAK,EAAEiF,MAAI,CAACE,KAAM,IAAEF,MAAI,CAACO,UAAU,CAAC,CAAyB,CAAC,CAC9F,CACqB,CAAC,CAE5B,CAAC,CAAAf,MAAA,CAqCOgB,eAAe,GAAvB,SAAAA,gBAAA,EAA0B,CACxB,IAAI,IAAI,CAACxF,KAAK,CAAC7B,QAAQ,EAAE,CACvB,OAAO,IAAI,CACb,CAEA,IAAI,IAAI,CAACiE,cAAc,EAAE,CACvB,OAAO,IAAI,CAACqD,gBAAgB,CAAC,CAAC,CAChC,CAEA,IAAI,IAAI,CAAC5F,KAAK,CAACC,MAAM,EAAE,CACrB,OAAO,IAAI,CAAC4F,UAAU,CAAC,CAAC,CAC1B,CAEA,OAAO,IAAI,CACb,CAAC,CAAAlB,MAAA,CAEOe,UAAU,GAAlB,SAAAA,WAAA,EAAqB,KAAAI,oBAAA,EAAAC,GAAA,CACnB,IAAM1E,YAAY,GAAG,IAAI,CAACL,sBAAsB,CAAC,CAAC,CAClD,IAAMgF,OAAO,IAAAF,oBAAA,GAAG,IAAI,CAACtF,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,YAAAsF,oBAAA,GAAI3H,cAAc,CAAC8H,IAAI,CAClE,IAAM9B,MAAM,gBACV1I,KAAA,CAAAkG,aAAA,CAAC1E,YAAY,CAACwI,QAAQ,IAACvF,KAAK,EAAEhC,cAAc,CAAC,IAAI,CAACmH,KAAK,EAAE,IAAI,CAAClF,KAAK,CAAE,IAClE,IAAI,CAAC8D,SAAS,CAAC5C,YAAY,CACP,CACxB,CAED,IAAMiB,QAAQ,GAAG,IAAI,CAACC,cAAc,CAEpC,IAAM2D,KAAK,GAAG,EACZhE,KAAK,EAAE,IAAI,CAAC/B,KAAK,CAAC+B,KAAK,EACvBiE,QAAQ,EAAE,IAAI,CAAChG,KAAK,CAACgG,QAAQ,IAAIC,SAAS,CAC5C,CAAC,CAED,IAAMH,IAAI,gBACRxK,KAAA,CAAAkG,aAAA,WACE,YAAUqE,OAAQ,EAClBpE,SAAS,EAAExE,EAAE,EAAA2I,GAAA,OAAAA,GAAA,CAAItI,MAAM,CAACwI,IAAI,CAAC,CAAC,IAAG,IAAI,EAAAF,GAAA,CAAGtI,MAAM,CAAC4I,UAAU,CAAC,IAAI,CAAChB,KAAK,CAAC,IAAG/C,QAAQ,EAAAyD,GAAA,CAAE,CAAE,EACpFG,KAAK,EAAEA,KAAM,IAEZ/B,MAAM,EACN,IAAI,CAACwB,eAAe,CAAC,CAClB,CACP,CAED,oBACElK,KAAA,CAAAkG,aAAA,CAACzE,aAAa,EAAAoJ,QAAA,GAACC,WAAW,EAAE,IAAI,CAACC,WAAY,IAAK,IAAI,CAACrG,KAAK,gBAC1D1E,KAAA,CAAAkG,aAAA,CAAChF,WAAW,IACV8J,cAAc,EAAE,IAAI,CAAC5F,KAAM,EAC3B6F,cAAc,EAAE,IAAI,CAAC7F,KAAM,EAC3B8F,MAAM,EAAErE,QAAQ,GAAG,KAAK,GAAG,IAAI,CAACtC,KAAK,CAACC,MAAO,IAE5CgG,IACU,CACA,CAAC,CAEpB,CAAC,CAAAtB,MAAA,CAkBOzD,WAAW,GAAnB,SAAAA,YAAA,EAAsB,KAAA0F,qBAAA,EAAAC,YAAA,CACpB,IAAM3G,KAAK,GAAG,IAAI,CAAC4G,QAAQ,CAAC,CAAC,CAC7B,IAAMpE,IAAI,GAAG,IAAI,CAACqE,cAAc,CAAC7G,KAAK,CAAC,CAEvC,IAAInD,aAAa,CAACmD,KAAK,CAAC,EAAE,CACxB,OAAO,EACLiB,KAAK,EAAE,IAAI,CAACX,QAAQ,CAAC,CAAC,CAACwG,WAAW,CAAC9G,KAAK,EAAEwC,IAAI,CAAC,EAC/CtB,aAAa,EAAE,KAAK,CACtB,CAAC,CACH,CAEA,OAAO,EACLD,KAAK,eAAE1F,KAAA,CAAAkG,aAAA,gBAAAiF,qBAAA,GAAO,IAAI,CAACzG,KAAK,CAAC8G,WAAW,YAAAL,qBAAA,IAAAC,YAAA,GAAI,IAAI,CAAC1K,MAAM,qBAAX0K,YAAA,CAAaI,WAAkB,CAAC,EACxE7F,aAAa,EAAE,IAAI,CACrB,CAAC,CACH,CAAC,CAAAuD,MAAA,CAEOuC,gBAAgB,GAAxB,SAAAA,iBAAyBzI,IAA0B,EAAE,CACnD,IAAI,IAAI,CAAC+B,QAAQ,CAAC,CAAC,CAAChC,GAAG,KAAK,MAAM,EAAE,CAClC,OAAOf,MAAM,CAAC0J,YAAY,CAAC,IAAI,CAAC9B,KAAK,CAAC,CACxC,CAEA,QAAQ5G,IAAI,GACV,KAAK,OAAO,CACV,OAAOhB,MAAM,CAAC2J,aAAa,CAAC,IAAI,CAAC/B,KAAK,CAAC,CACzC,KAAK,QAAQ,CACX,OAAO5H,MAAM,CAAC4J,cAAc,CAAC,IAAI,CAAChC,KAAK,CAAC,CAC1C,KAAK,OAAO,CACZ,QACE,OAAO5H,MAAM,CAAC6J,aAAa,CAAC,IAAI,CAACjC,KAAK,CAAC,CAC3C,CACF,CAAC,CAAAV,MAAA,CAEON,mBAAmB,GAA3B,SAAAA,oBAA4BkD,MAAoB,EAAE,KAAAC,IAAA,EAAAC,IAAA,EAAAC,IAAA,CAChD,IAAMC,WAAwB,GAAArB,QAAA,KACzBhK,WAAW,CAAC,IAAI,CAAC6D,KAAK,EAAE/B,iBAAiB,CAAC,IAC7CwJ,KAAK,EAAE,MAA0C,EACjDtJ,QAAQ,EAAE,IAAI,CAAC6B,KAAK,CAAC7B,QAAQ,EAC7B4D,KAAK,EAAE,MAAM,EACbZ,OAAO,EAAEiG,MAAM,CAACjG,OAAO,EACvBE,SAAS,EAAE+F,MAAM,CAAC/F,SAAS,EAC3BmF,MAAM,EAAEY,MAAM,CAACtH,MAAM,EACrBxB,IAAI,EAAE8I,MAAM,CAAC9I,IAAI,GAClB,CACD,IAAMD,GAAG,GAAG,IAAI,CAACgC,QAAQ,CAAC,CAAC,CAAChC,GAAG,CAE/B,IAAMqJ,UAAU,GAAG,EACjB,UAAU,EAAE1J,cAAc,CAACgD,KAAK,EAChCS,SAAS,EAAExE,EAAE,EAAAoK,IAAA,OAAAA,IAAA,CACV/J,MAAM,CAAC0D,KAAK,CAAC,CAAC,IAAG3C,GAAG,KAAK,MAAM,EAAAgJ,IAAA,CAC/B/J,MAAM,CAACwJ,WAAW,CAAC,IAAI,CAAC5B,KAAK,CAAC,IAAGkC,MAAM,CAACnG,aAAa,EAAAoG,IAAA,CACrD/J,MAAM,CAACqK,oBAAoB,CAAC,CAAC,IAAGP,MAAM,CAACnG,aAAa,IAAI5C,GAAG,KAAK,SAAS,EAAAgJ,IAAA,CACzE/J,MAAM,CAACsK,mBAAmB,CAAC,IAAI,CAAC1C,KAAK,CAAC,IAAGkC,MAAM,CAACnG,aAAa,IAAI,IAAI,CAACjB,KAAK,CAAC7B,QAAQ,EAAAkJ,IAAA,CACtF,CAAC,EACFtB,KAAK,EAAE,EACL8B,YAAY,EAAE,IAAI,CAACC,gBAAgB,CAAC,CAAC,CACvC,CAAC,CACH,CAAC,CAED,IAAMC,WAAW,GAAG1J,GAAG,KAAK,SAAS,CAErC,IAAM2J,IAAI,gBAAG1M,KAAA,CAAAkG,aAAA,CAAC5D,aAAa,IAACU,IAAI,EAAE,IAAI,CAACA,IAAK,EAAE,CAAC,CAE/C,oBACEhD,KAAA,CAAAkG,aAAA,CAACtF,MAAM,EAAKsL,WAAW,eACrBlM,KAAA,CAAAkG,aAAA,UAAKC,SAAS,EAAExE,EAAE,CAACK,MAAM,CAAC2K,qBAAqB,CAAC,CAAC,GAAAX,IAAA,OAAAA,IAAA,CAAK/J,UAAU,CAACuI,IAAI,CAAC,IAAI,CAACZ,KAAK,CAAC,IAAG7G,GAAG,KAAK,MAAM,EAAAiJ,IAAA,CAAE,CAAE,IACnG,IAAI,CAACtH,KAAK,CAACkI,KAAK,iBAAI5M,KAAA,CAAAkG,aAAA,UAAKC,SAAS,EAAE,IAAI,CAACsF,gBAAgB,CAAC,IAAI,CAACzI,IAAI,CAAE,IAAE,IAAI,CAAC0B,KAAK,CAACkI,KAAW,CAAC,eAC/F5M,KAAA,CAAAkG,aAAA,SAAUkG,UAAU,EAAGN,MAAM,CAACpG,KAAY,CAAC,eAE3C1F,KAAA,CAAAkG,aAAA,UACEC,SAAS,EAAExE,EAAE,CAACK,MAAM,CAAC6K,SAAS,CAAC,IAAI,CAACjD,KAAK,CAAC,GAAAqC,IAAA,OAAAA,IAAA,CACvCjK,MAAM,CAAC8K,aAAa,CAAC,IAAI,CAAClD,KAAK,CAAC,IAAG,IAAI,CAAClF,KAAK,CAAC7B,QAAQ,EAAAoJ,IAAA,CACtDjK,MAAM,CAAC+K,cAAc,CAAC,CAAC,IAAGN,WAAW,EAAAR,IAAA,CACvC,CAAE,IAEFS,IACE,CACF,CACC,CAAC,CAEb,CAAC,CAAAxD,MAAA,CAEOsD,gBAAgB,GAAxB,SAAAA,iBAAA,EAAmC,KAAAQ,MAAA,QACjC,IAAMC,eAAe,GAAG,SAAlBA,eAAeA,CAAA,EAAS,CAC5B,QAAQD,MAAI,CAAChK,IAAI,GACf,KAAK,OAAO,CACV,OAAOgK,MAAI,CAACpD,KAAK,CAACsD,kBAAkB,CACtC,KAAK,QAAQ,CACX,OAAOF,MAAI,CAACpD,KAAK,CAACuD,mBAAmB,CACvC,KAAK,OAAO,CACZ,QACE,OAAOH,MAAI,CAACpD,KAAK,CAACwD,kBAAkB,CACxC,CACF,CAAC,CACD,IAAMC,gBAAgB,GAAGC,UAAU,CAACL,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAE3D,OAAOI,gBAAgB,CACzB,CAAC,CAAAnE,MAAA,CAEOkB,UAAU,GAAlB,SAAAA,WAAA,EAAsC,CACpC,IAAMhE,MAAM,GAAG,IAAI,CAAC1B,KAAK,CAAC0B,MAAM,GAAG,IAAI,CAACH,SAAS,CAAC,CAAC,GAAG,IAAI,CAE1D,IAAMxB,KAAK,GAAG,IAAI,CAAC4G,QAAQ,CAAC,CAAC,CAC7B,IAAAkC,cAAA,GAAqD,IAAI,CAACxI,QAAQ,CAAC,CAAC,CAA5DyI,SAAS,GAAAD,cAAA,CAATC,SAAS,CAAEC,OAAO,GAAAF,cAAA,CAAPE,OAAO,CAAEC,SAAS,GAAAH,cAAA,CAATG,SAAS,CAAEC,SAAS,GAAAJ,cAAA,CAATI,SAAS,CAEhD,oBACE3N,KAAA,CAAAkG,aAAA,CAAChE,KAAK,IACJsC,MAAM,QACNoJ,SAAS,QACThL,EAAE,EAAE,IAAI,CAACiC,MAAO,EAChB,YAAUnC,cAAc,CAACa,IAAK,EAC9BoK,SAAS,EAAEA,SAAS,WAATA,SAAS,GAAIvL,gBAAgB,CAACqL,OAAO,EAAEC,SAAS,CAAE,EAC7DG,aAAa,EAAE,IAAI,CAACjG,cAAc,CAAC,CAAE,EACrCkG,QAAQ,EAAE3L,MAAM,CAAC4L,UAAU,CAACC,SAAU,EACtCC,aAAa,EAAE,IAAI,CAACvJ,KAAK,CAACuJ,aAAc,EACxCC,MAAM,EAAEC,QAAQ,CAAC,IAAI,CAACvE,KAAK,CAACE,WAAW,CAAC,GAAG,CAAE,EAC7CrD,KAAK,EAAE+G,SAAU,EACjBY,QAAQ,EAAEZ,SAAS,KAAK7C,SAAS,GAAG,MAAM,GAAGA,SAAU,EACvD0D,WAAW,EAAE,IAAI,CAAC3J,KAAK,CAAC4J,UAAW,iBAEnCtO,KAAA,CAAAkG,aAAA,CAACnF,IAAI,IACHwN,SAAS,EAAE,KAAM,EACjBlI,GAAG,EAAE,IAAI,CAAC0B,OAAQ,EAClByG,WAAW,EAAE,IAAI,CAACpJ,KAAM,EACxBqJ,SAAS,EAAE,IAAI,CAAC/J,KAAK,CAACgK,aAAc,EACpCvC,KAAK,EAAEuB,SAAU,IAEhBtH,MAAM,EACN,IAAI,CAACQ,YAAY,CAACnC,KAAK,CACpB,CACD,CAAC,CAEZ,CAAC,CAAAyE,MAAA,CAUOiB,gBAAgB,GAAxB,SAAAA,iBAAA,EAA4C,CAC1C,IAAM/D,MAAM,GAAG,IAAI,CAAC1B,KAAK,CAAC0B,MAAM,GAAG,IAAI,CAACM,eAAe,CAAC,CAAC,GAAG,IAAI,CAChE,IAAMjC,KAAK,GAAG,IAAI,CAAC4G,QAAQ,CAAC,CAAC,CAE7B,oBACErL,KAAA,CAAAkG,aAAA,CAACxE,WAAW,IACViN,oBAAoB,EAAEvI,MAAO,EAC7BwI,OAAO,EAAE,IAAI,CAAClK,KAAK,CAACmK,oBAAqB,EACzCC,cAAc,EAAE,IAAI,CAAC1J,KAAM,EAC3BZ,MAAM,EAAE,IAAI,CAACD,KAAK,CAACC,MAAO,iBAE1BxE,KAAA,CAAAkG,aAAA,CAACnF,IAAI,IAACyN,WAAW,EAAE,IAAI,CAACpJ,KAAM,EAAC2J,sBAAsB,QAACN,SAAS,EAAE,MAAO,IACrE,IAAI,CAAC7H,YAAY,CAACnC,KAAK,CACpB,CACK,CAAC,CAElB,CAAC,CAAAyE,MAAA,CAuHOzB,MAAM,GAAd,SAAAA,OAAehD,KAAa,EAAE,CAC5B,IAAI,CAACa,KAAK,CAAC,CAAC,CACZ,IAAI,CAACJ,QAAQ,CAAC,EAAEV,MAAM,EAAE,KAAK,EAAEC,KAAK,EAALA,KAAK,CAAC,CAAC,CAAC,CAEvC,IAAI,CAAC,IAAI,CAAC+C,cAAc,CAAC,IAAI,CAAC6D,QAAQ,CAAC,CAAC,EAAE5G,KAAK,CAAC,EAAE,KAAAuK,qBAAA,EAAAC,WAAA,CAChD,CAAAD,qBAAA,IAAAC,WAAA,OAAI,CAACvK,KAAK,EAAC6B,aAAa,aAAxByI,qBAAA,CAAA5K,IAAA,CAAA6K,WAAA,EAA2BxK,KAAK,CAAC,CACnC,CACF,CAAC,CAAAyE,MAAA,CAEOmC,QAAQ,GAAhB,SAAAA,SAAA,EAAmB,CACjB,IAAI,IAAI,CAAC3G,KAAK,CAACD,KAAK,KAAKkG,SAAS,EAAE,CAClC,OAAO,IAAI,CAACjG,KAAK,CAACD,KAAK,CACzB,CACA,OAAO,IAAI,CAACF,KAAK,CAACE,KAAK,CACzB,CAAC,CAAAyE,MAAA,CAEOnC,QAAQ,GAAhB,SAAAA,SAAiBmI,EAAoF,EAAE,CACrG,IAAQC,KAAK,GAAK,IAAI,CAACzK,KAAK,CAApByK,KAAK,CACb,IAAI,CAACA,KAAK,EAAE,CACV,OAAO,EAAE,CACX,CACA,IAAMC,OAAO,GAAG,IAAI,CAAC7K,KAAK,CAACK,aAAa,IAAI,IAAI,CAACL,KAAK,CAACK,aAAa,CAACyK,WAAW,CAAC,CAAC,CAElF,IAAMC,MAAyB,GAAG,EAAE,CACpC,IAAIC,KAAK,GAAG,CAAC,CACb,SAAAC,SAAA,GAAAC,+BAAA,CAAoBN,KAAK,GAAAO,KAAA,IAAAA,KAAA,GAAAF,SAAA,IAAAG,IAAA,GAAE,KAAhBC,KAAK,GAAAF,KAAA,CAAAjL,KAAA,CACd,IAAAoL,eAAA,GAA+BC,cAAc,CAACF,KAAc,CAAC,CAAtDnL,KAAK,GAAAoL,eAAA,IAAE5I,IAAI,GAAA4I,eAAA,IAAE1I,OAAO,GAAA0I,eAAA,IAE3B,IAAI,CAACT,OAAO,IAAI,IAAI,CAACrK,QAAQ,CAAC,CAAC,CAACgL,UAAU,CAACtL,KAAK,EAAEwC,IAAI,EAAEmI,OAAO,CAAC,EAAE,CAChEE,MAAM,CAACU,IAAI,CAACd,EAAE,CAACzK,KAAK,EAAEwC,IAAI,EAAEsI,KAAK,EAAEpI,OAAO,CAAC,CAAC,CAC5C,EAAEoI,KAAK,CACT,CACF,CAEA,OAAOD,MAAM,CACf,CAAC,CAAApG,MAAA,CAEOoC,cAAc,GAAtB,SAAAA,eAAuB7G,KAAwB,EAAE,CAC/C,IAAIA,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAKkG,SAAS,EAAE,CACzC,OAAO,IAAI,CACb,CAEA,IAAMwE,KAAK,GAAG,IAAI,CAACzK,KAAK,CAACyK,KAAK,IAAI,EAAE,CAEpC,SAAAc,UAAA,GAAAR,+BAAA,CAAoBN,KAAK,GAAAe,MAAA,IAAAA,MAAA,GAAAD,UAAA,IAAAN,IAAA,GAAE,KAAhBC,KAAK,GAAAM,MAAA,CAAAzL,KAAA,CACd,IAAA0L,gBAAA,GAA0BL,cAAc,CAACF,KAAK,CAAC,CAAxCQ,SAAS,GAAAD,gBAAA,IAAElJ,IAAI,GAAAkJ,gBAAA,IAEtB,IAAI,IAAI,CAAC3I,cAAc,CAAC4I,SAAS,EAAE3L,KAAK,CAAC,EAAE,CACzC,OAAOwC,IAAI,CACb,CACF,CACA,OAAO,IAAI,CACb,CAAC,CAAAiC,MAAA,CAEO1B,cAAc,GAAtB,SAAAA,eAAuB6I,MAAwB,EAAEC,MAAwB,EAAE,CACzE,OAAOhP,aAAa,CAAC+O,MAAM,CAAC,IAAI/O,aAAa,CAACgP,MAAM,CAAC,IAAI,IAAI,CAACvL,QAAQ,CAAC,CAAC,CAACyC,cAAc,CAAC6I,MAAM,EAAEC,MAAM,CAAC,CACzG,CAAC,QAAA9M,MAAA,GAzfkDxD,KAAK,CAACuQ,SAAS,GAAA5M,OAAA,CACpD6M,mBAAmB,GAAG,QAAQ,EAAA7M,OAAA,CAC9B8M,WAAW,GAAG,QAAQ,EAAA9M,OAAA,CAEtBqB,YAAY,GAAmD,EAC3EuG,WAAW,EAAXA,WAAW,EACX5D,UAAU,EAAVA,UAAU,EACVH,cAAc,EAAdA,cAAc,EACduI,UAAU,EAAVA,UAAU,EACVhN,GAAG,EAAE,SAAS,CAChB,CAAC,EAAAY,OAAA,CAEapB,IAAI,GAAGA,IAAI,EAAAoB,OAAA,CACX+M,GAAG,GAAG,iCAAM1Q,KAAA,CAAAkG,aAAA,CAACjF,aAAa,MAAE,CAAC,IAAA0C,OAAA,CAE7BgN,aAAa,GAAG,UAACvJ,OAAwD,EAAK,CAC1FnH,SAAS,CACP,cAAAD,KAAK,CAACqH,cAAc,CAACD,OAAO,CAAC,IAAI,OAAOA,OAAO,KAAK,UAAU,EAC9D,4EACF,CAAC,CACD,OAAOA,OAAO,CAChB,CAAC,EAAAzD,OAAA,MAAAD,MAAA,KAAAA,MAAA,KAAAA,MAAA,KAAAA,MAAA;;;AAggBH,SAAS6H,WAAWA,CAAgB9G,KAAa,EAAEwC,IAAqB,EAAE;EACxE,OAAOA,IAAI;AACb;;AAEA,SAASU,UAAUA,CAAgBlD,KAAa,EAAEwC,IAAY,EAAE;EAC9D,OAAOA,IAAI;AACb;;AAEA,SAASO,cAAcA,CAAS6I,MAAc,EAAEC,MAAc,EAAE;EAC9D,OAAOD,MAAM,KAAKC,MAAM;AAC1B;;AAEA,SAASR,cAAcA,CAACF,KAAU,EAAE;EAClC,IAAI1L,KAAK,CAAC0M,OAAO,CAAChB,KAAK,CAAC,EAAE;IACxB,OAAOA,KAAK;EACd;;EAEA,OAAO,CAACA,KAAK,EAAEA,KAAK,EAAEjF,SAAS,CAAC;AAClC;;AAEA,IAAMkG,eAAe,GAAG,SAAlBA,eAAeA,CAAI5J,IAAS,EAAa;EAC7C,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAOA,IAAI;EACb;;EAEA,IAAI5F,UAAU,CAAC4F,IAAI,CAAC,EAAE;IACpB,OAAO4J,eAAe,CAAC5J,IAAI,CAAC,CAAC,CAAC;EAChC;;EAEA,kBAAIjH,KAAK,CAACqH,cAAc,CAACJ,IAAI,CAAC,EAAE;IAC9B,OAAOtG,mBAAmB,CAACsG,IAAI,CAAC;EAClC;;EAEA,IAAI,OAAOA,IAAI,KAAK,QAAQ,EAAE;IAC5B,OAAOA,IAAI,CAAC6J,QAAQ,CAAC,EAAE,CAAC;EAC1B;;EAEA,OAAO,EAAE;AACX,CAAC;;AAED,SAASf,UAAUA,CAAStL,KAAa,EAAEwC,IAAS,EAAEmI,OAAe,EAAE;EACrE,IAAInI,IAAI,KAAKzD,MAAM,CAACkN,GAAG,EAAE;IACvB,OAAO,KAAK;EACd;;EAEA,IAAMK,QAAQ,GAAGF,eAAe,CAAC5J,IAAI,CAAC;;EAEtC,IAAI,CAAC8J,QAAQ,EAAE;IACb,OAAO,KAAK;EACd;;EAEA,OAAOA,QAAQ,CAAC1B,WAAW,CAAC,CAAC,CAAC2B,OAAO,CAAC5B,OAAO,CAAC,KAAK,CAAC,CAAC;AACvD","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","invariant","globalObject","debounce","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","getRandomID","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","ThemeFactory","styles","linkStyles","Popup","ZIndex","getMenuPositions","withSize","ArrowDownIcon","Item","SelectLocaleHelper","getSelectTheme","SelectDataTids","PASS_BUTTON_PROPS","id","disabled","error","use","size","warning","corners","onMouseEnter","onMouseLeave","onMouseOver","SelectIds","menu","Select","_dec","_class","_Select","_React$Component","_this","_len","arguments","length","args","Array","_key","call","apply","concat","state","opened","value","props","defaultValue","searchPattern","menuId","buttonElement","getProps","defaultProps","open","setState","onOpen","close","onClose","focus","getDefaultButtonParams","_this$renderLabel","renderLabel","label","isPlaceholder","buttonParams","onClick","toggle","onKeyDown","handleKey","getSearch","createElement","className","search","ref","debouncedFocusInput","onValueChange","handleSearch","width","getMobileSearch","autoFocus","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","isValidElement","cloneElement","key","areValuesEqual","select","bind","renderItem","popupGetParent","focusInput","input","refMenu","e","preventDefault","up","down","enter","_this$menu","highlightItem","buttonRef","getButton","_props$ariaLabel","button","_renderButton","renderDefaultButton","Children","only","onFocus","onBlur","_inheritsLoose","_proto","prototype","componentDidUpdate","_prevProps","prevState","addEventListener","removeEventListener","render","_this2","Consumer","theme","create","menuOffsetY","selectMenuOffsetY","Provider","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","_this$getProps$dataT","_cx","dataTid","root","style","maxWidth","undefined","rootMobile","_extends","rootNodeRef","setRootNode","onClickOutside","onFocusOutside","active","_this$props$placehold","_this$locale","getValue","getItemByValue","renderValue","placeholder","getLeftIconClass","leftIconLink","leftIconLarge","leftIconMedium","leftIconSmall","params","_cx2","_cx3","_cx4","buttonProps","align","labelProps","customUsePlaceholder","placeholderDisabled","paddingRight","getSelectIconGap","useIsCustom","icon","selectButtonContainer","_icon","arrowWrap","arrowDisabled","customUseArrow","_this3","getArrowPadding","selectIconGapLarge","selectIconGapMedium","selectIconGapSmall","arrowLeftPadding","parseFloat","_this$getProps","menuWidth","menuPos","menuAlign","positions","hasShadow","anchorElement","priority","priorities","PopupMenu","disablePortal","margin","parseInt","minWidth","popupOffset","menuOffset","hasMargin","onItemClick","maxHeight","maxMenuHeight","headerChildComponent","caption","mobileMenuHeaderText","onCloseRequest","disableScrollContainer","_this$props$onValueCh","_this$props","fn","items","pattern","toLowerCase","result","index","_iterator","_createForOfIteratorHelperLoose","_step","done","entry","_normalizeEntry","normalizeEntry","filterItem","push","_iterator2","_step2","_normalizeEntry2","itemValue","value1","value2","Component","__KONTUR_REACT_UI__","displayName","SEP","staticElement","isArray","getTextFromItem","toString","itemText","indexOf"],"sources":["Select.tsx"],"sourcesContent":["import type { ReactNode, ReactPortal, AriaAttributes, HTMLAttributes } from 'react';\nimport React 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 type { ButtonProps, ButtonUse } from '../Button';\nimport { Button } from '../Button';\nimport { filterProps } from '../../lib/filterProps';\nimport { Input } from '../Input';\nimport { Menu } from '../../internal/Menu';\nimport type { MenuItemProps } from '../MenuItem';\nimport { MenuItem } from '../MenuItem';\nimport { MenuSeparator } from '../MenuSeparator';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport type { Nullable } from '../../typings/utility-types';\nimport { getRandomID, isFunction, isNonNullable, isReactUINode } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport type { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport type { CommonProps } from '../../internal/CommonWrapper';\nimport { CommonWrapper } from '../../internal/CommonWrapper';\nimport { MobilePopup } from '../../internal/MobilePopup';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport type { TGetRootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getRootNode, rootNode } from '../../lib/rootNode';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport type { MenuHeaderProps } from '../MenuHeader';\nimport type { SizeProp } from '../../lib/types/props';\nimport { styles as linkStyles } from '../Link/Link.styles';\nimport { Popup, type PopupPositionsType } from '../../internal/Popup';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { getMenuPositions } from '../../lib/getMenuPositions';\nimport { withSize } from '../../lib/size/SizeDecorator';\n\nimport { ArrowDownIcon } from './ArrowDownIcon';\nimport { Item } from './Item';\nimport type { SelectLocale } from './locale';\nimport { SelectLocaleHelper } from './locale';\nimport { styles } from './Select.styles';\nimport { getSelectTheme } from './selectTheme';\nimport { SelectDataTids } from './tids';\n\nexport * from './tids';\n\nexport interface ButtonParams\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'> {\n /** Блокирует компонент. */\n disabled?: boolean;\n\n /** Задаёт лейбл. */\n label: React.ReactNode;\n\n /** Задаёт функцию, которая вызывается при клике на компонент. */\n onClick: () => void;\n\n /** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */\n onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Определяет, открыто ли выпадающее меню. */\n opened: boolean;\n\n /** Определяет, есть ли Placeholder. */\n isPlaceholder: boolean;\n\n /** Задает размер контрола. */\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 corners: true,\n\n onMouseEnter: true,\n onMouseLeave: true,\n onMouseOver: true,\n};\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<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'> {\n /** @ignore */\n _icon?: React.ReactNode;\n\n /** Отрисовывает кнопку. */\n _renderButton?: (params: ButtonParams) => React.ReactNode;\n\n /** @ignore */\n corners?: React.CSSProperties;\n\n /** Значение по умолчанию. */\n defaultValue?: TValue;\n\n /** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.\n * @default 0\n */\n menuOffset?: number;\n\n /** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */\n disablePortal?: boolean;\n\n /** Блокирует раскрывающийся список. */\n disabled?: boolean;\n\n /** Меняет визуальное отображение раскрывающегося списка на состояние ошибки. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n error?: boolean;\n\n /** Отфильтровывает элементы по заданному паттерну. */\n filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;\n\n /** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.\n *\n * Элементы воспринимаются следующим образом:\n * - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;\n * - если элемент не является массивом, то он используется и для отображения, и для значения.\n *\n * Для вставки разделителя между значениями можно использовать `Select.SEP`.\n *\n * @example\n * Вставить невыделяемый элемент со своей разметкой можно так:\n * ```\n * <Select ...\n * items={[Select.staticElement(() => <div>My Element</div>)]}\n * />\n * ```\n * @example\n * Чтобы добавить стандартный отступ для статического элемента:\n * ```\n * <Select.Item>My Element</Select.Item>\n * ``` */\n items?: Array<SelectItem<TValue, TItem>>;\n\n /** Максимальная высота раскрывающегося списка. */\n maxMenuHeight?: number;\n\n /** Максимальная ширина кнопки. */\n maxWidth?: React.CSSProperties['maxWidth'];\n\n /** Список значений, определяющих расположение списка относительно кнопки. Если во всех позициях список выходит за пределы `viewport`, будет использована первая из этого списка.\n *\n * `\"top left\"`, `\"top center\"`, `\"top right\"`, `\"right top\"`, `\"right middle\"`, `\"right bottom\"`, `\"bottom left\"`, `\"bottom center\"`, `\"bottom right\"`, `\"left top\"`, `\"left middle\"`, `\"left bottom\"`.\n * @default ['bottom left', 'bottom right', 'top left', 'top right'] */\n positions?: PopupPositionsType[];\n\n /** Фиксирует расположение списка относительно кнопки. */\n menuPos?: 'top' | 'bottom' | 'middle';\n\n /** Выравнивание списка. */\n menuAlign?: 'left' | 'right';\n\n /** Ширина списка. */\n menuWidth?: React.CSSProperties['width'];\n\n /** Событие изменения значения (`value`) в поле. */\n onValueChange?: (value: TValue) => void;\n\n /** Событие закрытия меню. */\n onClose?: () => void;\n\n /** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */\n onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие ухода мышки с объекта (событие `onmouseleave`). */\n onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие наведения мышкой (событие `onmouseover`). */\n onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;\n\n /** Событие нажатия кнопки на клавиатуре. */\n onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;\n\n /** Событие открытия меню. */\n onOpen?: () => void;\n\n /** Текст, который отображается если не введено никакое значение. */\n placeholder?: React.ReactNode;\n\n /** Отрисовывает элементы в списке. */\n renderItem?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Отрисовывает выбранный элемент. */\n renderValue?: (value: TValue, item?: TItem) => React.ReactNode;\n\n /** Сравнивает `value` с элементом из `items`. */\n areValuesEqual?: (value1: TValue, value2: TValue) => boolean;\n\n /** Отображает строчку поиска в списке значений. */\n search?: boolean;\n\n /** Задаёт значение. */\n value?: TValue;\n\n /** Объект с переменными темы. */\n theme?: ThemeIn | Theme;\n\n /** Ширина раскрывающегося списка. */\n width?: number | string;\n\n /** Меняет визуальное отображение поля на состояние предупреждения. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */\n warning?: boolean;\n\n /** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */\n use?: ButtonUse;\n\n /** Размер раскрывающегося списка.\n * @default small\n */\n size?: SizeProp;\n\n /** HTML-событие `onfocus`. */\n onFocus?: React.FocusEventHandler<HTMLElement>;\n\n /** HTML-событие `onblur`. */\n onBlur?: React.FocusEventHandler<HTMLElement>;\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'>\n>;\n\n/**\n * Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.\n */\n\n@responsiveLayout\n@rootNode\n@locale('Select', SelectLocaleHelper)\n@withSize\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 };\n\n public static Item = Item;\n public static SEP = () => <MenuSeparator />;\n\n public static staticElement = (element: React.ReactElement | (() => React.ReactElement)) => {\n invariant(\n React.isValidElement(element) || typeof element === 'function',\n 'Select.staticElement(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 size!: SizeProp;\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 public getRootNode!: TGetRootNode;\n private setRootNode!: TSetRootNode;\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 <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\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 * Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.\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 dataTid = this.getProps()['data-tid'] ?? SelectDataTids.root;\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={dataTid}\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.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 = <ArrowDownIcon size={this.size} />;\n\n return (\n <Button {...buttonProps}>\n <div className={cx(styles.selectButtonContainer(), { [linkStyles.root(this.theme)]: use === 'link' })}>\n {this.props._icon && <div className={this.getLeftIconClass(this.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.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 { menuWidth, menuPos, menuAlign, positions } = this.getProps();\n\n return (\n <Popup\n opened\n hasShadow\n id={this.menuId}\n data-tid={SelectDataTids.menu}\n positions={positions ?? getMenuPositions(menuPos, menuAlign)}\n anchorElement={this.popupGetParent()}\n priority={ZIndex.priorities.PopupMenu}\n disablePortal={this.props.disablePortal}\n margin={parseInt(this.theme.menuOffsetY) - 1}\n width={menuWidth}\n minWidth={menuWidth === undefined ? '100%' : undefined}\n popupOffset={this.props.menuOffset}\n >\n <Menu\n hasMargin={false}\n ref={this.refMenu}\n onItemClick={this.close}\n maxHeight={this.props.maxMenuHeight}\n align={menuAlign}\n >\n {search}\n {this.getMenuItems(value)}\n </Menu>\n </Popup>\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 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.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 } as MenuItemProps);\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.size}\n >\n {this.getProps().renderItem(iValue, item)}\n </MenuItem>\n );\n },\n );\n };\n\n private popupGetParent = () => {\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 this.setState({ searchPattern: value });\n this.menu?.highlightItem(0);\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.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 as React.ReactElement).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"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,11 +10,11 @@ import { type PopupPositionsType } from '../../internal/Popup';
|
|
|
10
10
|
import { Item } from './Item';
|
|
11
11
|
export * from './tids';
|
|
12
12
|
export interface ButtonParams extends Pick<AriaAttributes, 'aria-describedby' | 'aria-controls' | 'aria-label' | 'aria-expanded'> {
|
|
13
|
-
/**
|
|
13
|
+
/** Блокирует компонент. */
|
|
14
14
|
disabled?: boolean;
|
|
15
|
-
/**
|
|
15
|
+
/** Задаёт лейбл. */
|
|
16
16
|
label: React.ReactNode;
|
|
17
|
-
/**
|
|
17
|
+
/** Задаёт функцию, которая вызывается при клике на компонент. */
|
|
18
18
|
onClick: () => void;
|
|
19
19
|
/** Задает функцию, которая вызывается при нажатии кнопки на клавиатуре. */
|
|
20
20
|
onKeyDown: (event: React.KeyboardEvent<HTMLElement>) => void;
|
|
@@ -32,95 +32,103 @@ type SelectItem<TValue, TItem> = [TValue, TItem, React.ReactNode?] | TItem | TVa
|
|
|
32
32
|
export interface SelectProps<TValue, TItem> extends CommonProps, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'> {
|
|
33
33
|
/** @ignore */
|
|
34
34
|
_icon?: React.ReactNode;
|
|
35
|
-
/**
|
|
35
|
+
/** Отрисовывает кнопку. */
|
|
36
36
|
_renderButton?: (params: ButtonParams) => React.ReactNode;
|
|
37
37
|
/** @ignore */
|
|
38
38
|
corners?: React.CSSProperties;
|
|
39
|
-
/**
|
|
39
|
+
/** Значение по умолчанию. */
|
|
40
40
|
defaultValue?: TValue;
|
|
41
|
+
/** Смещение списка относительно поля по горизонтали. При нуле смещения нет, при положительном значении — список сдвигается вправо, при отрицательном — влево.
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
41
44
|
menuOffset?: number;
|
|
42
|
-
/**
|
|
45
|
+
/** По умолчанию список рендерится через [паттерн Portal](https://react.dev/reference/react-dom/createPortal). Проп отключает использование Portal и список рендерится как обычный блок с абсолютным позиционированием внутри компонента. */
|
|
43
46
|
disablePortal?: boolean;
|
|
44
|
-
/**
|
|
47
|
+
/** Блокирует раскрывающийся список. */
|
|
45
48
|
disabled?: boolean;
|
|
46
|
-
/**
|
|
49
|
+
/** Меняет визуальное отображение раскрывающегося списка на состояние ошибки. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */
|
|
47
50
|
error?: boolean;
|
|
48
|
-
/**
|
|
51
|
+
/** Отфильтровывает элементы по заданному паттерну. */
|
|
49
52
|
filterItem?: (value: TValue, item: TItem, pattern: string) => boolean;
|
|
50
|
-
/**
|
|
53
|
+
/** Набор значений. Поддерживаются любые перечисляемые типы, в том числе `Array`, `Map`, `Immutable.Map`.
|
|
51
54
|
*
|
|
52
|
-
* Элементы воспринимаются следующим образом:
|
|
53
|
-
* второй — отображается в списке, а третий – комментарий;
|
|
54
|
-
* если элемент не является массивом, то он используется и для отображения, и для значения.
|
|
55
|
+
* Элементы воспринимаются следующим образом:
|
|
56
|
+
* - если элемент — это массив, то первый элемент является значением, второй — отображается в списке, а третий – комментарий;
|
|
57
|
+
* - если элемент не является массивом, то он используется и для отображения, и для значения.
|
|
55
58
|
*
|
|
56
|
-
* Для вставки разделителя можно использовать `Select.SEP`.
|
|
59
|
+
* Для вставки разделителя между значениями можно использовать `Select.SEP`.
|
|
57
60
|
*
|
|
58
|
-
* Вставить невыделяемый элемент со своей разметкой можно так:
|
|
59
61
|
* @example
|
|
62
|
+
* Вставить невыделяемый элемент со своей разметкой можно так:
|
|
60
63
|
* ```
|
|
61
64
|
* <Select ...
|
|
62
65
|
* items={[Select.staticElement(() => <div>My Element</div>)]}
|
|
63
66
|
* />
|
|
64
67
|
* ```
|
|
65
|
-
*
|
|
66
|
-
* Чтобы добавить стандартный отступ для статического элемента:
|
|
67
68
|
* @example
|
|
69
|
+
* Чтобы добавить стандартный отступ для статического элемента:
|
|
68
70
|
* ```
|
|
69
71
|
* <Select.Item>My Element</Select.Item>
|
|
70
72
|
* ``` */
|
|
71
73
|
items?: Array<SelectItem<TValue, TItem>>;
|
|
72
|
-
/**
|
|
74
|
+
/** Максимальная высота раскрывающегося списка. */
|
|
73
75
|
maxMenuHeight?: number;
|
|
74
|
-
/**
|
|
76
|
+
/** Максимальная ширина кнопки. */
|
|
75
77
|
maxWidth?: React.CSSProperties['maxWidth'];
|
|
76
|
-
/**
|
|
78
|
+
/** Список значений, определяющих расположение списка относительно кнопки. Если во всех позициях список выходит за пределы `viewport`, будет использована первая из этого списка.
|
|
79
|
+
*
|
|
80
|
+
* `"top left"`, `"top center"`, `"top right"`, `"right top"`, `"right middle"`, `"right bottom"`, `"bottom left"`, `"bottom center"`, `"bottom right"`, `"left top"`, `"left middle"`, `"left bottom"`.
|
|
81
|
+
* @default ['bottom left', 'bottom right', 'top left', 'top right'] */
|
|
77
82
|
positions?: PopupPositionsType[];
|
|
78
|
-
/**
|
|
83
|
+
/** Фиксирует расположение списка относительно кнопки. */
|
|
79
84
|
menuPos?: 'top' | 'bottom' | 'middle';
|
|
80
|
-
/**
|
|
85
|
+
/** Выравнивание списка. */
|
|
81
86
|
menuAlign?: 'left' | 'right';
|
|
82
|
-
/**
|
|
87
|
+
/** Ширина списка. */
|
|
83
88
|
menuWidth?: React.CSSProperties['width'];
|
|
84
|
-
/**
|
|
89
|
+
/** Событие изменения значения (`value`) в поле. */
|
|
85
90
|
onValueChange?: (value: TValue) => void;
|
|
86
|
-
/**
|
|
91
|
+
/** Событие закрытия меню. */
|
|
87
92
|
onClose?: () => void;
|
|
88
|
-
/**
|
|
93
|
+
/** Событие наведения мышкой (событие `onmouseenter`). Смотрите разницу с `onMouseOver` в [документации](https://learn.javascript.ru/mousemove-mouseover-mouseout-mouseenter-mouseleave). */
|
|
89
94
|
onMouseEnter?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
90
|
-
/**
|
|
95
|
+
/** Событие ухода мышки с объекта (событие `onmouseleave`). */
|
|
91
96
|
onMouseLeave?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
92
|
-
/**
|
|
97
|
+
/** Событие наведения мышкой (событие `onmouseover`). */
|
|
93
98
|
onMouseOver?: (e: React.MouseEvent<HTMLElement>) => void;
|
|
94
|
-
/**
|
|
99
|
+
/** Событие нажатия кнопки на клавиатуре. */
|
|
95
100
|
onKeyDown?: (e: React.KeyboardEvent<HTMLElement>) => void;
|
|
96
|
-
/**
|
|
101
|
+
/** Событие открытия меню. */
|
|
97
102
|
onOpen?: () => void;
|
|
98
|
-
/**
|
|
103
|
+
/** Текст, который отображается если не введено никакое значение. */
|
|
99
104
|
placeholder?: React.ReactNode;
|
|
100
|
-
/**
|
|
105
|
+
/** Отрисовывает элементы в списке. */
|
|
101
106
|
renderItem?: (value: TValue, item?: TItem) => React.ReactNode;
|
|
102
|
-
/**
|
|
107
|
+
/** Отрисовывает выбранный элемент. */
|
|
103
108
|
renderValue?: (value: TValue, item?: TItem) => React.ReactNode;
|
|
104
|
-
/**
|
|
109
|
+
/** Сравнивает `value` с элементом из `items`. */
|
|
105
110
|
areValuesEqual?: (value1: TValue, value2: TValue) => boolean;
|
|
106
|
-
/**
|
|
111
|
+
/** Отображает строчку поиска в списке значений. */
|
|
107
112
|
search?: boolean;
|
|
108
|
-
/**
|
|
113
|
+
/** Задаёт значение. */
|
|
109
114
|
value?: TValue;
|
|
115
|
+
/** Объект с переменными темы. */
|
|
110
116
|
theme?: ThemeIn | Theme;
|
|
111
|
-
/**
|
|
117
|
+
/** Ширина раскрывающегося списка. */
|
|
112
118
|
width?: number | string;
|
|
113
|
-
/**
|
|
119
|
+
/** Меняет визуальное отображение поля на состояние предупреждения. Может быть полезен при разработке собственной валидации, если вы не используете пакет [React UI Validations](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui-validations_displaying-getting-started--docs). */
|
|
114
120
|
warning?: boolean;
|
|
115
|
-
/**
|
|
121
|
+
/** Стиль кнопки. Примеры стилей смотрите [в документации компонента Button](https://tech.skbkontur.ru/kontur-ui/?path=/docs/react-ui_button-button--docs). */
|
|
116
122
|
use?: ButtonUse;
|
|
117
|
-
/**
|
|
123
|
+
/** Размер раскрывающегося списка.
|
|
124
|
+
* @default small
|
|
125
|
+
*/
|
|
118
126
|
size?: SizeProp;
|
|
119
|
-
/**
|
|
127
|
+
/** HTML-событие `onfocus`. */
|
|
120
128
|
onFocus?: React.FocusEventHandler<HTMLElement>;
|
|
121
|
-
/**
|
|
129
|
+
/** HTML-событие `onblur`. */
|
|
122
130
|
onBlur?: React.FocusEventHandler<HTMLElement>;
|
|
123
|
-
/**
|
|
131
|
+
/** Текст заголовка списка в мобильной версии. */
|
|
124
132
|
mobileMenuHeaderText?: string;
|
|
125
133
|
}
|
|
126
134
|
export interface SelectState<TValue> {
|
|
@@ -130,14 +138,7 @@ export interface SelectState<TValue> {
|
|
|
130
138
|
}
|
|
131
139
|
type DefaultProps<TValue, TItem> = Required<Pick<SelectProps<TValue, TItem>, 'renderValue' | 'renderItem' | 'areValuesEqual' | 'filterItem' | 'use'>>;
|
|
132
140
|
/**
|
|
133
|
-
* Раскрывающийся список
|
|
134
|
-
*
|
|
135
|
-
* Используйте `Select` при:
|
|
136
|
-
* * заполнении форм, например для выбора месяца.
|
|
137
|
-
* * переключении состояний, например, фильтра.
|
|
138
|
-
* * выборе предустановленных настроек, например, частоты уведомлений, часового пояса.
|
|
139
|
-
*
|
|
140
|
-
* Не используйте `Select` для выбора элементов меню. В таком случае воспользуйтесь компонентом Dropdown.
|
|
141
|
+
* Раскрывающийся список позволяет выбрать значение из заранее известного набора вариантов.
|
|
141
142
|
*/
|
|
142
143
|
export declare class Select<TValue = {}, TItem = {}> extends React.Component<SelectProps<TValue, TItem>, SelectState<TValue>> {
|
|
143
144
|
static __KONTUR_REACT_UI__: string;
|
|
@@ -159,15 +160,16 @@ export declare class Select<TValue = {}, TItem = {}> extends React.Component<Sel
|
|
|
159
160
|
private setRootNode;
|
|
160
161
|
componentDidUpdate(_prevProps: SelectProps<TValue, TItem>, prevState: SelectState<TValue>): void;
|
|
161
162
|
render(): React.JSX.Element;
|
|
162
|
-
/**
|
|
163
|
+
/** Открывает раскрывающийся список.
|
|
163
164
|
* @public
|
|
164
165
|
*/
|
|
165
166
|
open: () => void;
|
|
166
|
-
/**
|
|
167
|
+
/** Закрывает раскрывающийся список.
|
|
167
168
|
* @public
|
|
168
169
|
*/
|
|
169
170
|
close: () => void;
|
|
170
|
-
/**
|
|
171
|
+
/** Программно устанавливает фокус на кнопку.
|
|
172
|
+
* Появляется фокусная рамка, элемент получает клавиатурные события и воспринимается как текущий элемент для чтения скринридерами.
|
|
171
173
|
* @public
|
|
172
174
|
*/
|
|
173
175
|
focus: () => void;
|
|
@@ -34,10 +34,7 @@ export var TextareaDataTids = {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
* Многострочное поле
|
|
38
|
-
*
|
|
39
|
-
* Принимает все атрибуты `React.TextareaHTMLAttributes<HTMLTextAreaElement>`.
|
|
40
|
-
* Пропсы **`className` и `style` игнорируются**.
|
|
37
|
+
* Многострочное поле — это поле ввода, в котором текст отображается в несколько строк.
|
|
41
38
|
*/
|
|
42
39
|
|
|
43
40
|
export var Textarea = rootNode(_class = withSize(_class = (_Textarea = /*#__PURE__*/function (_React$Component) {
|
|
@@ -84,7 +81,8 @@ export var Textarea = rootNode(_class = withSize(_class = (_Textarea = /*#__PURE
|
|
|
84
81
|
_this.node.setSelectionRange(start, end);
|
|
85
82
|
};
|
|
86
83
|
|
|
87
|
-
/**
|
|
84
|
+
/** Переводит фокус в поле (если ещё не в фокусе) и выделяет весь текст в нём.
|
|
85
|
+
* Работает с типами `text`, `password`, `tel`, `search`, `url`.
|
|
88
86
|
* @public
|
|
89
87
|
*/
|
|
90
88
|
_this.selectAll = function () {
|
|
@@ -387,21 +385,22 @@ export var Textarea = rootNode(_class = withSize(_class = (_Textarea = /*#__PURE
|
|
|
387
385
|
}, _this2.getProps()), _this2.renderMain);
|
|
388
386
|
});
|
|
389
387
|
});
|
|
390
|
-
} /**
|
|
388
|
+
} /** Программно устанавливает фокус на поле.
|
|
391
389
|
* @public
|
|
392
390
|
*/;
|
|
393
391
|
_proto.focus = function focus() {
|
|
394
392
|
if (this.node) {
|
|
395
393
|
this.node.focus();
|
|
396
394
|
}
|
|
397
|
-
} /**
|
|
395
|
+
} /** Программно снимает фокус с поля.
|
|
398
396
|
* @public
|
|
399
397
|
*/;
|
|
400
398
|
_proto.blur = function blur() {
|
|
401
399
|
if (this.node) {
|
|
402
400
|
this.node.blur();
|
|
403
401
|
}
|
|
404
|
-
} /**
|
|
402
|
+
} /** start - инициирует последовательное изменение числового значения: начинает повторяющееся увеличение/уменьшение, обычно используется при удерживании кнопки «+» или «−» для числового Input. end - останавливает ранее запущенное числоизменение, инициируемое numberStart.
|
|
403
|
+
* [Документация](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange)
|
|
405
404
|
* @public
|
|
406
405
|
*/;
|
|
407
406
|
_proto.getNode = function getNode() {
|