@skbkontur/react-ui 4.25.1 → 4.25.2-ZIndex-several-roots.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 (49) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/cjs/components/Calendar/Calendar.d.ts +0 -12
  3. package/cjs/components/Calendar/Calendar.js +0 -12
  4. package/cjs/components/Calendar/Calendar.js.map +1 -1
  5. package/cjs/components/DatePicker/DatePicker.md +10 -17
  6. package/cjs/components/Loader/Loader.md +23 -1
  7. package/cjs/components/Modal/Modal.md +39 -6
  8. package/cjs/components/RadioGroup/RadioGroup.js +10 -1
  9. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  10. package/cjs/components/Select/Select.js +2 -1
  11. package/cjs/components/Select/Select.js.map +1 -1
  12. package/cjs/components/Token/Token.js +2 -1
  13. package/cjs/components/Token/Token.js.map +1 -1
  14. package/cjs/internal/RenderContainer/RenderContainer.d.ts +2 -0
  15. package/cjs/internal/RenderContainer/RenderContainer.js +6 -3
  16. package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
  17. package/cjs/internal/RenderContainer/RenderInnerContainer.js +3 -2
  18. package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
  19. package/cjs/internal/ZIndex/ZIndex.d.ts +7 -3
  20. package/cjs/internal/ZIndex/ZIndex.js +41 -3
  21. package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
  22. package/cjs/lib/listenFocusOutside.js +4 -2
  23. package/cjs/lib/listenFocusOutside.js.map +1 -1
  24. package/cjs/lib/taskWithDelayAndMinimalDuration.js +1 -0
  25. package/cjs/lib/taskWithDelayAndMinimalDuration.js.map +1 -1
  26. package/components/Calendar/Calendar/Calendar.js.map +1 -1
  27. package/components/Calendar/Calendar.d.ts +0 -12
  28. package/components/DatePicker/DatePicker.md +10 -17
  29. package/components/Loader/Loader.md +23 -1
  30. package/components/Modal/Modal.md +39 -6
  31. package/components/RadioGroup/RadioGroup/RadioGroup.js +6 -2
  32. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  33. package/components/Select/Select/Select.js +2 -1
  34. package/components/Select/Select/Select.js.map +1 -1
  35. package/components/Token/Token/Token.js +4 -1
  36. package/components/Token/Token/Token.js.map +1 -1
  37. package/internal/RenderContainer/RenderContainer/RenderContainer.js +3 -1
  38. package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
  39. package/internal/RenderContainer/RenderContainer.d.ts +2 -0
  40. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -4
  41. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
  42. package/internal/ZIndex/ZIndex/ZIndex.js +55 -7
  43. package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
  44. package/internal/ZIndex/ZIndex.d.ts +7 -3
  45. package/lib/listenFocusOutside/listenFocusOutside.js +3 -2
  46. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  47. package/lib/taskWithDelayAndMinimalDuration/taskWithDelayAndMinimalDuration.js +2 -0
  48. package/lib/taskWithDelayAndMinimalDuration/taskWithDelayAndMinimalDuration.js.map +1 -1
  49. package/package.json +2 -5
@@ -117,7 +117,8 @@ export var Select = (_dec = locale('Select', SelectLocaleHelper), responsiveLayo
117
117
  isPlaceholder: isPlaceholder,
118
118
  onClick: _this.toggle,
119
119
  onKeyDown: _this.handleKey,
120
- size: _this.getProps().size
120
+ size: _this.getProps().size,
121
+ disabled: _this.getProps().disabled
121
122
  };
122
123
  return buttonParams;
123
124
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["Select.tsx"],"names":["React","invariant","globalObject","debounce","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","getRandomID","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","isTheme2022","ThemeFactory","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","ArrowDownIcon","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","menu","label","SelectIds","Select","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","search","debouncedFocusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","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","addEventListener","removeEventListener","render","flags","theme","create","menuOffsetY","selectMenuOffsetY","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","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","SEP","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 };\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":["React","invariant","globalObject","debounce","isKeyArrowDown","isKeyArrowUp","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","locale","reactGetTextContent","Button","DropdownContainer","filterProps","Input","Menu","MenuItem","MenuSeparator","RenderLayer","createPropsGetter","getRandomID","isFunction","isNonNullable","isReactUINode","ThemeContext","CommonWrapper","ArrowChevronDownIcon","MobilePopup","cx","responsiveLayout","getRootNode","rootNode","isTheme2022","ThemeFactory","getFullReactUIFlagsContext","ReactUIFeatureFlagsContext","ArrowDownIcon","Item","SelectLocaleHelper","styles","getSelectTheme","PASS_BUTTON_PROPS","disabled","error","use","size","warning","onMouseEnter","onMouseLeave","onMouseOver","SelectDataTids","root","menu","label","SelectIds","Select","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","search","debouncedFocusInput","handleSearch","getMobileSearch","getMenuItems","isMobile","isMobileLayout","mapItems","iValue","item","i","comment","element","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","addEventListener","removeEventListener","render","flags","theme","create","menuOffsetY","selectMenuOffsetY","renderMain","getMenuRenderer","renderMobileMenu","renderMenu","style","width","maxWidth","undefined","rootMobile","setRootNode","getValue","getItemByValue","renderValue","placeholder","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","SEP","Array","isArray","getTextFromItem","toString","itemText","indexOf"],"mappings":"+VAAA,OAAOA,KAAP,MAA8D,OAA9D;AACA,OAAOC,SAAP,MAAsB,WAAtB;AACA,SAASC,YAAT,QAA6B,0BAA7B;AACA,OAAOC,QAAP,MAAqB,iBAArB;;AAEA;AACEC,cADF;AAEEC,YAFF;AAGEC,kBAHF;AAIEC,UAJF;AAKEC,WALF;AAMEC,UANF;AAOO,uCAPP;AAQA,SAASC,MAAT,QAAuB,6BAAvB;AACA,SAASC,mBAAT,QAAoC,+BAApC;AACA,SAASC,MAAT,QAA+C,WAA/C;AACA,SAASC,iBAAT,QAA0D,kCAA1D;AACA,SAASC,WAAT,QAA4B,uBAA5B;AACA,SAASC,KAAT,QAAsB,UAAtB;AACA,SAASC,IAAT,QAAqB,qBAArB;AACA,SAASC,QAAT,QAAwC,aAAxC;AACA,SAASC,aAAT,QAA8B,kBAA9B;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,WAAT,EAAsBC,UAAtB,EAAkCC,aAAlC,EAAiDC,aAAjD,QAAsE,iBAAtE;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,oBAAT,QAAqC,2BAArC;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,gBAAT,QAAiC,+BAAjC;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,WAAT,QAA4B,gCAA5B;AACA,SAASC,YAAT,QAA6B,gCAA7B;;;AAGA;AACEC,0BADF;;AAGEC,0BAHF;AAIO,+BAJP;;AAMA,SAASC,aAAT,QAA8B,iBAA9B;AACA,SAASC,IAAT,QAAqB,QAArB;AACA,SAAuBC,kBAAvB,QAAiD,UAAjD;AACA,SAASC,MAAT,QAAuB,iBAAvB;AACA,SAASC,cAAT,QAA+B,eAA/B;;;;;;;;;;;;;AAaA,IAAMC,iBAAiB,GAAG;AACxBC,EAAAA,QAAQ,EAAE,IADc;AAExBC,EAAAA,KAAK,EAAE,IAFiB;AAGxBC,EAAAA,GAAG,EAAE,IAHmB;AAIxBC,EAAAA,IAAI,EAAE,IAJkB;AAKxBC,EAAAA,OAAO,EAAE,IALe;;AAOxBC,EAAAA,YAAY,EAAE,IAPU;AAQxBC,EAAAA,YAAY,EAAE,IARU;AASxBC,EAAAA,WAAW,EAAE,IATW,EAA1B;;;AAYA,OAAO,IAAMC,cAAc,GAAG;AAC5BC,EAAAA,IAAI,EAAE,cADsB;AAE5BC,EAAAA,IAAI,EAAE,cAFsB;AAG5BC,EAAAA,KAAK,EAAE,eAHqB,EAAvB;;;AAMP,OAAO,IAAMC,SAAS,GAAG;AACvBF,EAAAA,IAAI,EAAEF,cAAc,CAACE,IADE,EAAlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuHP,WAAaG,MAAb,WAHC9C,MAAM,CAAC,QAAD,EAAW6B,kBAAX,CAGP,EALCT,gBAKD,UAJCE,QAID;;;;;;;;;;;;;;;;;;;;;;;;AAwBSyB,IAAAA,KAxBT,GAwBsC;AAClCC,MAAAA,MAAM,EAAE,KAD0B;AAElCC,MAAAA,KAAK,EAAE,MAAKC,KAAL,CAAWC,YAFgB;AAGlCC,MAAAA,aAAa,EAAE,EAHmB,EAxBtC;;;;;;;AAkCUC,IAAAA,MAlCV,GAkCmBR,SAAS,CAACF,IAAV,GAAiBhC,WAAW,EAlC/C;AAmCU2C,IAAAA,aAnCV,GAmCwD,IAnCxD;AAoCUC,IAAAA,QApCV,GAoCqB7C,iBAAiB,CAACoC,MAAM,CAACU,YAAR,CApCtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2ESC,IAAAA,IA3ET,GA2EgB,YAAM;AAClB,UAAI,CAAC,MAAKV,KAAL,CAAWC,MAAhB,EAAwB;AACtB,cAAKU,QAAL,CAAc,EAAEV,MAAM,EAAE,IAAV,EAAd;;AAEA,YAAI,MAAKE,KAAL,CAAWS,MAAf,EAAuB;AACrB,gBAAKT,KAAL,CAAWS,MAAX;AACD;AACF;AACF,KAnFH;;;;;AAwFSC,IAAAA,KAxFT,GAwFiB,YAAM;AACnB,UAAI,MAAKb,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKU,QAAL,CAAc,EAAEV,MAAM,EAAE,KAAV,EAAiBI,aAAa,EAAE,EAAhC,EAAd;;AAEA,YAAI,MAAKF,KAAL,CAAWW,OAAf,EAAwB;AACtB,gBAAKX,KAAL,CAAWW,OAAX;AACD;AACF;AACF,KAhGH;;;;;AAqGSC,IAAAA,KArGT,GAqGiB,YAAM;AACnB,UAAI,MAAKR,aAAL,IAAsB,MAAKA,aAAL,CAAmBQ,KAA7C,EAAoD;AAClD,cAAKR,aAAL,CAAmBQ,KAAnB;AACD;AACF,KAzGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKUC,IAAAA,sBAlKV,GAkKmC,YAAoB;AACnD,8BAAiC,MAAKC,WAAL,EAAjC,CAAQpB,KAAR,qBAAQA,KAAR,CAAeqB,aAAf,qBAAeA,aAAf;;AAEA,UAAMC,YAA0B,GAAG;AACjClB,QAAAA,MAAM,EAAE,MAAKD,KAAL,CAAWC,MADc;AAEjCJ,QAAAA,KAAK,EAALA,KAFiC;AAGjCqB,QAAAA,aAAa,EAAbA,aAHiC;AAIjCE,QAAAA,OAAO,EAAE,MAAKC,MAJmB;AAKjCC,QAAAA,SAAS,EAAE,MAAKC,SALiB;AAMjClC,QAAAA,IAAI,EAAE,MAAKmB,QAAL,GAAgBnB,IANW;AAOjCH,QAAAA,QAAQ,EAAE,MAAKsB,QAAL,GAAgBtB,QAPO,EAAnC;;;AAUA,aAAOiC,YAAP;AACD,KAhLH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmTUK,IAAAA,SAnTV,GAmTsB,YAAM;AACxB;AACE,qCAAK,SAAS,EAAEzC,MAAM,CAAC0C,MAAP,EAAhB,EAAiC,SAAS,EAAE,MAAKF,SAAjD;AACE,4BAAC,KAAD,IAAO,GAAG,EAAE,MAAKG,mBAAjB,EAAsC,aAAa,EAAE,MAAKC,YAA1D,EAAwE,KAAK,EAAC,MAA9E,GADF,CADF;;;AAKD,KAzTH;;;;;;;;;;;;;;;;;;;;AA6UUC,IAAAA,eA7UV,GA6U4B,YAAM;AAC9B;AACE,4BAAC,KAAD;AACE,UAAA,SAAS,MADX;AAEE,UAAA,KAAK,EAAE,MAAK5B,KAAL,CAAWK,aAFpB;AAGE,UAAA,GAAG,EAAE,MAAKqB,mBAHZ;AAIE,UAAA,aAAa,EAAE,MAAKC,YAJtB;AAKE,UAAA,KAAK,EAAC,MALR,GADF;;;AASD,KAvVH;;AAyVUE,IAAAA,YAzVV,GAyVyB,UAAC3B,KAAD,EAA6B;AAClD,UAAM4B,QAAQ,GAAG,MAAKC,cAAtB;AACA,UAAM1C,IAAI,GAAG,MAAKc,KAAL,CAAWd,IAAxB;;AAEA,aAAO,MAAK2C,QAAL;AACL,gBAACC,MAAD,EAAiBC,IAAjB,EAAwDC,CAAxD,EAAmEC,OAAnE,EAA0G;AACxG,YAAIvE,UAAU,CAACqE,IAAD,CAAd,EAAsB;AACpB,cAAMG,OAAO,GAAGH,IAAI,EAApB;;AAEA,4BAAI3F,KAAK,CAAC+F,cAAN,CAAqBD,OAArB,CAAJ,EAAmC;AACjC,gCAAO9F,KAAK,CAACgG,YAAN,CAAmBF,OAAnB,EAA4B,EAAEG,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAAoBzC,IAAI,EAAJA,IAApB,EAA5B,CAAP;AACD;;AAED,iBAAO,IAAP;AACD;;AAED,0BAAI9C,KAAK,CAAC+F,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,cAAInE,aAAa,CAAC,UAAD,EAAamE,IAAb,CAAjB,EAAqC;AACnC,gCAAO3F,KAAK,CAACgG,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAUL,QAAQ,EAARA,QAAV,EAAoBzC,IAAI,EAAJA,IAApB,EAAzB,CAAP;AACD;AACD,cAAItB,aAAa,CAAC,YAAD,EAAemE,IAAf,CAAjB,EAAuC;AACrC,gCAAO3F,KAAK,CAACgG,YAAN,CAAmBL,IAAnB,EAAyB,EAAE7C,IAAI,EAAJA,IAAF,EAAzB,CAAP;AACD;AACD,8BAAO9C,KAAK,CAACgG,YAAN,CAAmBL,IAAnB,EAAyB,EAAEM,GAAG,EAAEL,CAAP,EAAzB,CAAP;AACD;;AAED;AACE,8BAAC,QAAD;AACE,YAAA,GAAG,EAAEA,CADP;AAEE,YAAA,KAAK,EAAE,MAAKM,cAAL,CAAoBR,MAApB,EAA4B/B,KAA5B,IAAqC,UAArC,GAAkD,IAF3D;AAGE,YAAA,OAAO,EAAE,MAAKwC,MAAL,CAAYC,IAAZ,gCAAuBV,MAAvB,CAHX;AAIE,YAAA,OAAO,EAAEG,OAJX;AAKE,YAAA,QAAQ,EAAEN,QALZ;AAME,YAAA,IAAI,EAAE,MAAK3B,KAAL,CAAWd,IANnB;;AAQG,gBAAKmB,QAAL,GAAgBoC,UAAhB,CAA2BX,MAA3B,EAAmCC,IAAnC,CARH,CADF;;;AAYD,OAlCI,CAAP;;AAoCD,KAjYH;;AAmYUW,IAAAA,0BAnYV,GAmYuC,YAAM;AACzC,aAAOvE,WAAW,+BAAlB;AACD,KArYH;;;;AAyYUwE,IAAAA,UAzYV,GAyYuB,UAACC,KAAD,UAAkBA,KAAlB,oBAAkBA,KAAK,CAAEhC,KAAP,EAAlB,EAzYvB;AA0YUW,IAAAA,mBA1YV,GA0YgChF,QAAQ,CAAC,MAAKoG,UAAN,CA1YxC;;AA4YUE,IAAAA,OA5YV,GA4YoB,UAACpD,IAAD,EAAgB;AAChC,YAAKA,IAAL,GAAYA,IAAZ;AACD,KA9YH;;AAgZUyB,IAAAA,MAhZV,GAgZmB,YAAM;AACrB,UAAI,MAAKrB,KAAL,CAAWC,MAAf,EAAuB;AACrB,cAAKY,KAAL;AACD,OAFD,MAEO;AACL,cAAKH,IAAL;AACD;AACF,KAtZH;;AAwZUa,IAAAA,SAxZV,GAwZsB,UAAC0B,CAAD,EAAyC;AAC3D,UAAI,CAAC,MAAKjD,KAAL,CAAWC,MAAhB,EAAwB;AACtB,YAAIjD,UAAU,CAACiG,CAAD,CAAV,IAAiBpG,kBAAkB,CAACoG,CAAD,CAAvC,EAA4C;AAC1CA,UAAAA,CAAC,CAACC,cAAF;AACA,gBAAKxC,IAAL;AACD;AACF,OALD,MAKO;AACL,gBAAQ,IAAR;AACE,eAAK3D,WAAW,CAACkG,CAAD,CAAhB;AACE,kBAAKlC,KAAL;AACA,kBAAKF,KAAL;AACA;AACF,eAAKjE,YAAY,CAACqG,CAAD,CAAjB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKtD,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUuD,EAAV;AACD;AACD;AACF,eAAKxG,cAAc,CAACsG,CAAD,CAAnB;AACEA,YAAAA,CAAC,CAACC,cAAF;AACA,gBAAI,MAAKtD,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUwD,IAAV;AACD;AACD;AACF,eAAKtG,UAAU,CAACmG,CAAD,CAAf;AACEA,YAAAA,CAAC,CAACC,cAAF,GADF,CACsB;AACpB,gBAAI,MAAKtD,IAAT,EAAe;AACb,oBAAKA,IAAL,CAAUyD,KAAV,CAAgBJ,CAAhB;AACD;AACD,kBAtBJ;;AAwBD;AACD,UAAI,MAAK9C,KAAL,CAAWmB,SAAf,EAA0B;AACxB,cAAKnB,KAAL,CAAWmB,SAAX,CAAqB2B,CAArB;AACD;AACF,KA3bH;;AA6bUtB,IAAAA,YA7bV,GA6byB,UAACzB,KAAD,EAAmB;AACxC,UAAMoD,mBAAmB,GAAG,MAAKC,YAAL,CAAkBD,mBAA9C;;AAEA,YAAK3C,QAAL,CAAc,EAAEN,aAAa,EAAEH,KAAjB,EAAd;AACA,0BAAKN,IAAL,gCAAW4D,aAAX,CAAyBF,mBAAmB,GAAG,CAAH,GAAO,CAAnD;AACD,KAlcH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8fUG,IAAAA,SA9fV,GA8fsB,UAACpB,OAAD,EAA2C;AAC7D,YAAK9B,aAAL,GAAqB8B,OAArB;AACD,KAhgBH;;AAkgBUqB,IAAAA,SAlgBV,GAkgBsB,UAACvC,YAAD,EAAgC;AAClD,UAAMwC,MAAM,GAAG,MAAKxD,KAAL,CAAWyD,aAAX;AACX,YAAKzD,KAAL,CAAWyD,aAAX,CAAyBzC,YAAzB,CADW;AAEX,YAAK0C,mBAAL,CAAyB1C,YAAzB,CAFJ;;AAIA,UAAMZ,aAAa,GAAGhE,KAAK,CAACuH,QAAN,CAAeC,IAAf,CAAoBJ,MAApB,CAAtB;;AAEA,aAAO,aAAApH,KAAK,CAAC+F,cAAN,CAAqB/B,aAArB;AACHhE,MAAAA,KAAK,CAACgG,YAAN,CAAmBhC,aAAnB,EAAwD;AACtDyD,QAAAA,GAAG,EAAE,MAAKP,SAD4C;AAEtDQ,QAAAA,OAAO,EAAE,MAAK9D,KAAL,CAAW8D,OAFkC;AAGtDC,QAAAA,MAAM,EAAE,MAAK/D,KAAL,CAAW+D,MAHmC;AAItD7E,QAAAA,IAAI,EAAE,MAAKc,KAAL,CAAWd,IAJqC;AAKtD,4BAAoB,MAAKc,KAAL,CAAW,kBAAX,CALkC;AAMtD,yBAAiB,MAAKH,KAAL,CAAWC,MAAX,GAAoB,MAApB,GAA6B,OANQ;AAOtD,yBAAiB,MAAKK,MAPgC;AAQtD,+CAAcC,aAAa,CAACJ,KAAd,CAAoB,YAApB,CAAd,oCAAmD,MAAKA,KAAL,CAAW,YAAX,CARG,EAAxD,CADG;;AAWHI,MAAAA,aAXJ;AAYD,KArhBH,oDAwCS4D,kBAxCT,GAwCE,4BAA0BC,UAA1B,EAAkEC,SAAlE,EAAkG,CAChG,IAAI,CAACA,SAAS,CAACpE,MAAX,IAAqB,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CxD,YAAY,CAAC6H,gBAAb,oBAAA7H,YAAY,CAAC6H,gBAAb,CAAgC,UAAhC,EAA4C,KAAKzD,KAAjD,EACD,CACD,IAAIwD,SAAS,CAACpE,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAApC,EAA4C,CAC1CxD,YAAY,CAAC8H,mBAAb,oBAAA9H,YAAY,CAAC8H,mBAAb,CAAmC,UAAnC,EAA+C,KAAK1D,KAApD,EACD,CACF,CA/CH,QAiDS2D,MAjDT,GAiDE,kBAAgB,mBACd,oBACE,oBAAC,0BAAD,CAA4B,QAA5B,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAAClB,YAAL,GAAoB7E,0BAA0B,CAAC+F,KAAD,CAA9C,CACA,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACC,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAajG,YAAY,CAACkG,MAAb,CACX,EACEC,WAAW,EAAEF,KAAK,CAACG,iBADrB,EADW,EAIXH,KAJW,CAAb,CAMA,oBAAO,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAE,MAAI,CAACA,KAAnC,IAA2C,MAAI,CAACI,UAAL,EAA3C,CAAP,CACD,CATH,CADF,CAaD,CAhBH,CADF,CAoBD,CAtEH,CAwEE;AACF;AACA,KA1EA,QA2GUC,eA3GV,GA2GE,2BAA0B,CACxB,IAAI,KAAK5E,KAAL,CAAWjB,QAAf,EAAyB,CACvB,OAAO,IAAP,CACD,CAED,IAAI,KAAK6C,cAAT,EAAyB,CACvB,OAAO,KAAKiD,gBAAL,EAAP,CACD,CAED,IAAI,KAAKhF,KAAL,CAAWC,MAAf,EAAuB,CACrB,OAAO,KAAKgF,UAAL,EAAP,CACD,CAED,OAAO,IAAP,CACD,CAzHH,QA2HUH,UA3HV,GA2HE,sBAAqB,SACnB,IAAM3D,YAAY,GAAG,KAAKH,sBAAL,EAArB,CACA,IAAM2C,MAAM,gBACV,oBAAC,YAAD,CAAc,QAAd,IAAuB,KAAK,EAAE3E,cAAc,CAAC,KAAK0F,KAAN,EAAa,KAAKvE,KAAlB,CAA5C,IACG,KAAKuD,SAAL,CAAevC,YAAf,CADH,CADF,CAMA,IAAMW,QAAQ,GAAG,KAAKC,cAAtB,CAEA,IAAMmD,KAAK,GAAG,EACZC,KAAK,EAAE,KAAKhF,KAAL,CAAWgF,KADN,EAEZC,QAAQ,EAAE,KAAKjF,KAAL,CAAWiF,QAAX,IAAuBC,SAFrB,EAAd,CAKA,IAAM1F,IAAI,gBACR,8BACE,YAAUD,cAAc,CAACC,IAD3B,EAEE,SAAS,EAAEvB,EAAE,gBAAIW,MAAM,CAACY,IAAP,EAAJ,IAAoB,IAApB,MAA2BZ,MAAM,CAACuG,UAAP,CAAkB,KAAKZ,KAAvB,CAA3B,IAA2D5C,QAA3D,OAFf,EAGE,KAAK,EAAEoD,KAHT,IAKGvB,MALH,EAMG,KAAKoB,eAAL,EANH,CADF,CAWA,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKQ,WAAjC,IAAkD,KAAKpF,KAAvD,gBACE,oBAAC,WAAD,IACE,cAAc,EAAE,KAAKU,KADvB,EAEE,cAAc,EAAE,KAAKA,KAFvB,EAGE,MAAM,EAAEiB,QAAQ,GAAG,KAAH,GAAW,KAAK9B,KAAL,CAAWC,MAHxC,IAKGN,IALH,CADF,CADF,CAWD,CAhKH,QAkLUsB,WAlLV,GAkLE,uBAAsB,kBACpB,IAAMf,KAAK,GAAG,KAAKsF,QAAL,EAAd,CACA,IAAMtD,IAAI,GAAG,KAAKuD,cAAL,CAAoBvF,KAApB,CAAb,CAEA,IAAIpC,aAAa,CAACoC,KAAD,CAAjB,EAA0B,CACxB,OAAO,EACLL,KAAK,EAAE,KAAKW,QAAL,GAAgBkF,WAAhB,CAA4BxF,KAA5B,EAAmCgC,IAAnC,CADF,EAELhB,aAAa,EAAE,KAFV,EAAP,CAID,CAED,OAAO,EACLrB,KAAK,eAAE,kCAAO,KAAKM,KAAL,CAAWwF,WAAX,qBAA0B,KAAK1I,MAA/B,qBAA0B,aAAa0I,WAAvC,CAAP,CADF,EAELzE,aAAa,EAAE,IAFV,EAAP,CAID,CAjMH,QAmMU0E,gBAnMV,GAmME,0BAAyBvG,IAAzB,EAAqD,CACnD,IAAI,KAAKmB,QAAL,GAAgBpB,GAAhB,KAAwB,MAA5B,EAAoC,CAClC,OAAOL,MAAM,CAAC8G,YAAP,CAAoB,KAAKnB,KAAzB,CAAP,CACD,CAED,QAAQrF,IAAR,GACE,KAAK,OAAL,CACE,OAAON,MAAM,CAAC+G,aAAP,CAAqB,KAAKpB,KAA1B,CAAP,CACF,KAAK,QAAL,CACE,OAAO3F,MAAM,CAACgH,cAAP,CAAsB,KAAKrB,KAA3B,CAAP,CACF,KAAK,OAAL,CACA,QACE,OAAO3F,MAAM,CAACiH,aAAP,CAAqB,KAAKtB,KAA1B,CAAP,CAPJ,CASD,CAjNH,QAmNUb,mBAnNV,GAmNE,6BAA4BoC,MAA5B,EAAkD,gBAChD,IAAMC,WAAwB,gBACzB7I,WAAW,CAAC,KAAK8C,KAAN,EAAalB,iBAAb,CADc,IAE5BkH,KAAK,EAAE,MAFqB,EAG5BjH,QAAQ,EAAE,KAAKiB,KAAL,CAAWjB,QAHO,EAI5BiG,KAAK,EAAE,MAJqB,EAK5B/D,OAAO,EAAE6E,MAAM,CAAC7E,OALY,EAM5BE,SAAS,EAAE2E,MAAM,CAAC3E,SANU,EAO5B8E,MAAM,EAAEH,MAAM,CAAChG,MAPa,EAQ5BZ,IAAI,EAAE4G,MAAM,CAAC5G,IARe,GAA9B,CAUA,IAAMD,GAAG,GAAG,KAAKoB,QAAL,GAAgBpB,GAA5B,CAEA,IAAMiH,UAAU,GAAG,EACjB,YAAY3G,cAAc,CAACG,KADV,EAEjByG,SAAS,EAAElI,EAAE,kBACVW,MAAM,CAACc,KAAP,EADU,IACOT,GAAG,KAAK,MADf,OAEVL,MAAM,CAAC4G,WAAP,CAAmB,KAAKjB,KAAxB,CAFU,IAEuBuB,MAAM,CAAC/E,aAF9B,OAGVnC,MAAM,CAACwH,oBAAP,EAHU,IAGsBN,MAAM,CAAC/E,aAAP,IAAwB9B,GAAG,KAAK,SAHtD,OAIVL,MAAM,CAACyH,mBAAP,CAA2B,KAAK9B,KAAhC,CAJU,IAI+BuB,MAAM,CAAC/E,aAAP,IAAwB,KAAKf,KAAL,CAAWjB,QAJlE,QAFI,EAQjBgG,KAAK,EAAE,EACLuB,YAAY,EAAE,KAAKC,gBAAL,EADT,EARU,EAAnB,CAaA,IAAMC,WAAW,GAAGvH,GAAG,KAAK,SAA5B,CAEA,IAAMwH,IAAI,GAAGpI,WAAW,CAAC,KAAKkG,KAAN,CAAX,gBAA0B,oBAAC,aAAD,IAAe,IAAI,EAAE,KAAKvE,KAAL,CAAWd,IAAhC,GAA1B,gBAAqE,oBAAC,oBAAD,OAAlF,CAEA,oBACE,oBAAC,MAAD,EAAY6G,WAAZ,eACE,6BAAK,SAAS,EAAEnH,MAAM,CAAC8H,qBAAP,EAAhB,IACG,KAAK1G,KAAL,CAAW2G,KAAX,iBAAoB,6BAAK,SAAS,EAAE,KAAKlB,gBAAL,CAAsB,KAAKzF,KAAL,CAAWd,IAAjC,CAAhB,IAAyD,KAAKc,KAAL,CAAW2G,KAApE,CADvB,eAEE,4BAAUT,UAAV,EAAuBJ,MAAM,CAACpG,KAA9B,CAFF,eAIE,6BACE,SAAS,EAAEzB,EAAE,CAACW,MAAM,CAACgI,SAAP,CAAiB,KAAKrC,KAAtB,CAAD,mBACV3F,MAAM,CAACiI,aAAP,CAAqB,KAAKtC,KAA1B,CADU,IACyB,KAAKvE,KAAL,CAAWjB,QADpC,OAEVH,MAAM,CAACkI,cAAP,EAFU,IAEgBN,WAFhB,QADf,IAMGC,IANH,CAJF,CADF,CADF,CAiBD,CAlQH,QAoQUF,gBApQV,GAoQE,4BAAmC,mBACjC,IAAMQ,eAAe,GAAG,SAAlBA,eAAkB,GAAM,CAC5B,QAAQ,MAAI,CAAC/G,KAAL,CAAWd,IAAnB,GACE,KAAK,OAAL,CACE,OAAO,MAAI,CAACqF,KAAL,CAAWyC,kBAAlB,CACF,KAAK,QAAL,CACE,OAAO,MAAI,CAACzC,KAAL,CAAW0C,mBAAlB,CACF,KAAK,OAAL,CACA,QACE,OAAO,MAAI,CAAC1C,KAAL,CAAW2C,kBAAlB,CAPJ,CASD,CAVD,CAWA,IAAMC,gBAAgB,GAAGC,UAAU,CAACL,eAAe,EAAhB,CAAV,IAAiC,CAA1D,CAEA,OAAOI,gBAAP,CACD,CAnRH,QAqRUrC,UArRV,GAqRE,sBAAsC,CACpC,IAAMxD,MAAM,GAAG,KAAKtB,KAAL,CAAWsB,MAAX,GAAoB,KAAKD,SAAL,EAApB,GAAuC,IAAtD,CAEA,IAAMtB,KAAK,GAAG,KAAKsF,QAAL,EAAd,CACA,IAAMgC,aAAa,GAAG,CAAC,CAAC,KAAKrH,KAAL,CAAWsH,SAAb,IAA0B,KAAKtH,KAAL,CAAWsH,SAAX,KAAyB,MAAzE,CAEA,oBACE,oBAAC,iBAAD,IACE,EAAE,EAAE,KAAKnH,MADX,EAEE,YAAUZ,cAAc,CAACE,IAF3B,EAGE,SAAS,EAAE,KAAKiD,0BAHlB,EAIE,KAAK,EAAE,KAAK1C,KAAL,CAAWuH,SAJpB,EAKE,aAAa,EAAE,KAAKvH,KAAL,CAAWwH,aAL5B,EAME,aAAa,EAAEH,aANjB,EAOE,OAAO,EAAE,KAAKrH,KAAL,CAAWyH,OAPtB,iBASE,oBAAC,IAAD,IACE,GAAG,EAAE,KAAK5E,OADZ,EAEE,KAAK,EAAE,KAAK7C,KAAL,CAAWsH,SAFpB,EAGE,WAAW,EAAE,KAAK5G,KAHpB,EAIE,SAAS,EAAE,KAAKV,KAAL,CAAW0H,aAJxB,EAKE,KAAK,EAAE,KAAK1H,KAAL,CAAWuH,SALpB,IAOGjG,MAPH,EAQG,KAAKI,YAAL,CAAkB3B,KAAlB,CARH,CATF,CADF,CAsBD,CAjTH,QA2TU8E,gBA3TV,GA2TE,4BAA4C,CAC1C,IAAMvD,MAAM,GAAG,KAAKtB,KAAL,CAAWsB,MAAX,GAAoB,KAAKG,eAAL,EAApB,GAA6C,IAA5D,CACA,IAAM1B,KAAK,GAAG,KAAKsF,QAAL,EAAd,CAEA,oBACE,oBAAC,WAAD,IACE,oBAAoB,EAAE/D,MADxB,EAEE,OAAO,EAAE,KAAKtB,KAAL,CAAW2H,oBAFtB,EAGE,cAAc,EAAE,KAAKjH,KAHvB,EAIE,MAAM,EAAE,KAAKb,KAAL,CAAWC,MAJrB,iBAME,oBAAC,IAAD,IAAM,SAAS,EAAE,KAAjB,EAAwB,WAAW,EAAE,KAAKY,KAA1C,EAAiD,sBAAsB,MAAvE,EAAwE,SAAS,EAAE,MAAnF,IACG,KAAKgB,YAAL,CAAkB3B,KAAlB,CADH,CANF,CADF,CAYD,CA3UH,QAocUwC,MApcV,GAocE,gBAAexC,KAAf,EAA8B,CAC5B,KAAKa,KAAL,GACA,KAAKJ,QAAL,CAAc,EAAEV,MAAM,EAAE,KAAV,EAAiBC,KAAK,EAALA,KAAjB,EAAd,EAEA,IAAI,CAAC,KAAKuC,cAAL,CAAoB,KAAK+C,QAAL,EAApB,EAAqCtF,KAArC,CAAL,EAAkD,wCAChD,6CAAKC,KAAL,EAAW4H,aAAX,6DAA2B7H,KAA3B,EACD,CACF,CA3cH,QA6cUsF,QA7cV,GA6cE,oBAAmB,CACjB,IAAI,KAAKrF,KAAL,CAAWD,KAAX,KAAqBmF,SAAzB,EAAoC,CAClC,OAAO,KAAKlF,KAAL,CAAWD,KAAlB,CACD,CACD,OAAO,KAAKF,KAAL,CAAWE,KAAlB,CACD,CAldH,QAodU8B,QApdV,GAodE,kBAAiBgG,EAAjB,EAAuG,CACrG,IAAQC,KAAR,GAAkB,KAAK9H,KAAvB,CAAQ8H,KAAR,CACA,IAAI,CAACA,KAAL,EAAY,CACV,OAAO,EAAP,CACD,CACD,IAAMC,OAAO,GAAG,KAAKlI,KAAL,CAAWK,aAAX,IAA4B,KAAKL,KAAL,CAAWK,aAAX,CAAyB8H,WAAzB,EAA5C,CAEA,IAAMC,MAAyB,GAAG,EAAlC,CACA,IAAIC,KAAK,GAAG,CAAZ,CACA,qDAAoBJ,KAApB,wCAA2B,KAAhBK,KAAgB,eACzB,sBAA+BC,cAAc,CAACD,KAAD,CAA7C,CAAOpI,MAAP,sBAAcgC,KAAd,sBAAoBE,QAApB,sBAEA,IAAI,CAAC8F,OAAD,IAAY,KAAK1H,QAAL,GAAgBgI,UAAhB,CAA2BtI,MAA3B,EAAkCgC,KAAlC,EAAwCgG,OAAxC,CAAhB,EAAkE,CAChEE,MAAM,CAACK,IAAP,CAAYT,EAAE,CAAC9H,MAAD,EAAQgC,KAAR,EAAcmG,KAAd,EAAqBjG,QAArB,CAAd,EACA,EAAEiG,KAAF,CACD,CACF,CAED,OAAOD,MAAP,CACD,CAveH,QAyeU3C,cAzeV,GAyeE,wBAAuBvF,KAAvB,EAAiD,CAC/C,IAAIA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKmF,SAAhC,EAA2C,CACzC,OAAO,IAAP,CACD,CAED,IAAM4C,KAAK,GAAG,KAAK9H,KAAL,CAAW8H,KAAX,IAAoB,EAAlC,CAEA,sDAAoBA,KAApB,2CAA2B,KAAhBK,KAAgB,gBACzB,uBAA0BC,cAAc,CAACD,KAAD,CAAxC,CAAOI,SAAP,uBAAkBxG,MAAlB,uBAEA,IAAI,KAAKO,cAAL,CAAoBiG,SAApB,EAA+BxI,KAA/B,CAAJ,EAA2C,CACzC,OAAOgC,MAAP,CACD,CACF,CACD,OAAO,IAAP,CACD,CAxfH,QA0fUO,cA1fV,GA0fE,wBAAuBkG,MAAvB,EAAiDC,MAAjD,EAA2E,CACzE,OAAO9K,aAAa,CAAC6K,MAAD,CAAb,IAAyB7K,aAAa,CAAC8K,MAAD,CAAtC,IAAkD,KAAKpI,QAAL,GAAgBiC,cAAhB,CAA+BkG,MAA/B,EAAuCC,MAAvC,CAAzD,CACD,CA5fH,iBAAqDrM,KAAK,CAACsM,SAA3D,WACgBC,mBADhB,GACsC,QADtC,UAEgBC,WAFhB,GAE8B,QAF9B,UAIgBtI,YAJhB,GAI+E,EAC3EiF,WAAW,EAAXA,WAD2E,EAE3E9C,UAAU,EAAVA,UAF2E,EAG3EH,cAAc,EAAdA,cAH2E,EAI3E+F,UAAU,EAAVA,UAJ2E,EAK3EpJ,GAAG,EAAE,SALsE,EAM3EC,IAAI,EAAE,OANqE,EAJ/E,UAagBR,IAbhB,GAauBA,IAbvB,UAcgBmK,GAdhB,GAcsB,iCAAM,oBAAC,aAAD,OAAN,EAdtB,sBAgByB,UAAC3G,OAAD,EAA8D,CACnF7F,SAAS,CACP,cAAAD,KAAK,CAAC+F,cAAN,CAAqBD,OAArB,KAAiC,OAAOA,OAAP,KAAmB,UAD7C,EAEP,qEAFO,CAAT,CAIA,OAAOA,OAAP,CACD,CAtBH;AAwhBA,SAASqD,WAAT,CAAoCxF,KAApC,EAAmDgC,IAAnD,EAA0E;AACxE,SAAOA,IAAP;AACD;;AAED,SAASU,UAAT,CAAmC1C,KAAnC,EAAkDgC,IAAlD,EAAgE;AAC9D,SAAOA,IAAP;AACD;;AAED,SAASO,cAAT,CAAgCkG,MAAhC,EAAgDC,MAAhD,EAAgE;AAC9D,SAAOD,MAAM,KAAKC,MAAlB;AACD;;AAED,SAASL,cAAT,CAAwBD,KAAxB,EAAoC;AAClC,MAAIW,KAAK,CAACC,OAAN,CAAcZ,KAAd,CAAJ,EAA0B;AACxB,WAAOA,KAAP;AACD;;AAED,SAAO,CAACA,KAAD,EAAQA,KAAR,EAAejD,SAAf,CAAP;AACD;;AAED,IAAM8D,eAAe,GAAG,SAAlBA,eAAkB,CAACjH,IAAD,EAAuB;AAC7C,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAP;AACD;;AAED,MAAIrE,UAAU,CAACqE,IAAD,CAAd,EAAsB;AACpB,WAAOiH,eAAe,CAACjH,IAAI,EAAL,CAAtB;AACD;;AAED,oBAAI3F,KAAK,CAAC+F,cAAN,CAAqBJ,IAArB,CAAJ,EAAgC;AAC9B,WAAOhF,mBAAmB,CAACgF,IAAD,CAA1B;AACD;;AAED,MAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,WAAOA,IAAI,CAACkH,QAAL,CAAc,EAAd,CAAP;AACD;;AAED,SAAO,EAAP;AACD,CAlBD;;AAoBA,SAASZ,UAAT,CAA4BtI,KAA5B,EAA2CgC,IAA3C,EAAsDgG,OAAtD,EAAuE;AACrE,MAAIhG,IAAI,KAAKnC,MAAM,CAACiJ,GAApB,EAAyB;AACvB,WAAO,KAAP;AACD;;AAED,MAAMK,QAAQ,GAAGF,eAAe,CAACjH,IAAD,CAAhC;;AAEA,MAAI,CAACmH,QAAL,EAAe;AACb,WAAO,KAAP;AACD;;AAED,SAAOA,QAAQ,CAAClB,WAAT,GAAuBmB,OAAvB,CAA+BpB,OAA/B,MAA4C,CAAC,CAApD;AACD","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"]}
@@ -14,6 +14,7 @@ import { rootNode } from "../../../lib/rootNode";
14
14
  import { isTheme2022 } from "../../../lib/theming/ThemeHelpers";
15
15
  import { CloseButtonIcon } from "../../../internal/CloseButtonIcon/CloseButtonIcon";
16
16
  import { reactGetTextContent } from "../../../lib/reactGetTextContent";
17
+ import { getVisualStateDataAttributes } from "../../../internal/CommonWrapper/utils/getVisualStateDataAttributes";
17
18
  import { styles, colorStyles } from "../Token.styles";
18
19
  import { TokenLocaleHelper } from "../locale";
19
20
  import { TokenView } from "../TokenView";
@@ -120,7 +121,9 @@ export var Token = (_dec = locale('Token', TokenLocaleHelper), rootNode(_class =
120
121
  }, icon);
121
122
  return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
122
123
  rootNodeRef: this.setRootNode
123
- }, this.props), /*#__PURE__*/React.createElement(TokenView, {
124
+ }, this.props, getVisualStateDataAttributes({
125
+ disabled: disabled
126
+ })), /*#__PURE__*/React.createElement(TokenView, {
124
127
  className: classNames,
125
128
  size: size,
126
129
  closeButton: closeButton,
@@ -1 +1 @@
1
- {"version":3,"sources":["Token.tsx"],"names":["React","locale","CrossIcon","emptyHandler","ThemeContext","CommonWrapper","cx","rootNode","isTheme2022","CloseButtonIcon","reactGetTextContent","styles","colorStyles","TokenLocaleHelper","TokenView","getValidation","error","warning","TokenDataTids","root","removeIcon","Token","onRemoveClick","event","props","disabled","onRemove","preventDefault","render","theme","renderMain","size","children","isActive","colors","idle","active","ariaDescribedby","onClick","onDoubleClick","onMouseEnter","onMouseLeave","onFocus","onBlur","validation","removeButtonAriaLabel","icon","classNames","tokenDefaultIdle2022","tokenDefaultIdleHovering2022","tokenDefaultActive2022","tokenWarning2022","tokenError2022","tokenDisabled2022","defaultDisabled","defaultDisabledWarning","defaultDisabledError","textholder","text","closeButton","undefined","setRootNode","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon';\nimport { SizeProp } from '../../lib/types/props';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\n\nimport { styles, colorStyles } from './Token.styles';\nimport { TokenLocale, TokenLocaleHelper } from './locale';\nimport { TokenView } from './TokenView';\n\nexport type TokenColorName = keyof typeof colorStyles;\n\nexport interface TokenColors {\n idle: TokenColorName;\n active?: TokenColorName;\n}\n\nexport type TokenSize = SizeProp;\n\nexport interface TokenProps extends Pick<AriaAttributes, 'aria-describedby'>, CommonProps {\n colors?: TokenColors;\n isActive?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n /**\n * Размер\n */\n size?: TokenSize;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;\n onRemove?: React.MouseEventHandler<HTMLElement>;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n}\n\nconst getValidation = (error: TokenProps['error'], warning: TokenProps['warning']) => {\n if (error) {\n return 'error';\n } else if (warning) {\n return 'warning';\n }\n\n return null;\n};\n\nexport const TokenDataTids = {\n root: 'Token__root',\n removeIcon: 'Token__removeIcon',\n} as const;\n\n@rootNode\n@locale('Token', TokenLocaleHelper)\nexport class Token extends React.Component<TokenProps> {\n public static __KONTUR_REACT_UI__ = 'Token';\n public static displayName = 'Token';\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private readonly locale!: TokenLocale;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n size,\n children,\n isActive,\n colors = { idle: 'defaultIdle', active: 'defaultActive' },\n error,\n warning,\n disabled,\n 'aria-describedby': ariaDescribedby,\n onClick = emptyHandler,\n onDoubleClick = emptyHandler,\n onMouseEnter = emptyHandler,\n onMouseLeave = emptyHandler,\n onFocus = emptyHandler,\n onBlur = emptyHandler,\n } = this.props;\n\n const theme = this.theme;\n\n const validation = getValidation(error, warning);\n const removeButtonAriaLabel = this.locale.removeButtonAriaLabel + ' ' + reactGetTextContent(children);\n\n const icon = isTheme2022(theme) ? (\n <CloseButtonIcon\n side={16}\n color=\"inherit\"\n colorHover=\"inherit\"\n aria-label={removeButtonAriaLabel}\n tabbable={false}\n />\n ) : (\n <CrossIcon />\n );\n\n const classNames = isTheme2022(theme)\n ? cx(\n styles.tokenDefaultIdle2022(theme),\n !isActive && !warning && !error && !disabled && styles.tokenDefaultIdleHovering2022(theme),\n isActive && styles.tokenDefaultActive2022(theme),\n warning && styles.tokenWarning2022(theme),\n error && styles.tokenError2022(theme),\n disabled && styles.tokenDisabled2022(theme),\n )\n : cx(\n colorStyles[colors.idle](theme, validation),\n !!isActive && colorStyles[colors.active || colors.idle](theme, validation),\n !!disabled && styles.disabled(theme),\n !!disabled && colorStyles.defaultDisabled(theme),\n !!disabled && warning && colorStyles.defaultDisabledWarning(theme),\n !!disabled && error && colorStyles.defaultDisabledError(theme),\n );\n\n const textholder = <span className={styles.text(this.theme)}>{children}</span>;\n\n const closeButton = (\n <span\n role={isTheme2022(theme) ? undefined : 'button'}\n aria-label={isTheme2022(theme) ? undefined : removeButtonAriaLabel}\n onClick={this.onRemoveClick}\n data-tid={TokenDataTids.removeIcon}\n >\n {icon}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <TokenView\n className={classNames}\n size={size}\n closeButton={closeButton}\n data-tid={TokenDataTids.root}\n aria-describedby={ariaDescribedby}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {textholder}\n </TokenView>\n </CommonWrapper>\n );\n }\n\n private onRemoveClick = (event: React.MouseEvent<HTMLElement, MouseEvent>) => {\n const { disabled, onRemove = emptyHandler } = this.props;\n\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onRemove(event);\n };\n}\n"]}
1
+ {"version":3,"sources":["Token.tsx"],"names":["React","locale","CrossIcon","emptyHandler","ThemeContext","CommonWrapper","cx","rootNode","isTheme2022","CloseButtonIcon","reactGetTextContent","getVisualStateDataAttributes","styles","colorStyles","TokenLocaleHelper","TokenView","getValidation","error","warning","TokenDataTids","root","removeIcon","Token","onRemoveClick","event","props","disabled","onRemove","preventDefault","render","theme","renderMain","size","children","isActive","colors","idle","active","ariaDescribedby","onClick","onDoubleClick","onMouseEnter","onMouseLeave","onFocus","onBlur","validation","removeButtonAriaLabel","icon","classNames","tokenDefaultIdle2022","tokenDefaultIdleHovering2022","tokenDefaultActive2022","tokenWarning2022","tokenError2022","tokenDisabled2022","defaultDisabled","defaultDisabledWarning","defaultDisabledError","textholder","text","closeButton","undefined","setRootNode","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\n\nimport { locale } from '../../lib/locale/decorators';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { CloseButtonIcon } from '../../internal/CloseButtonIcon/CloseButtonIcon';\nimport { SizeProp } from '../../lib/types/props';\nimport { reactGetTextContent } from '../../lib/reactGetTextContent';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles, colorStyles } from './Token.styles';\nimport { TokenLocale, TokenLocaleHelper } from './locale';\nimport { TokenView } from './TokenView';\n\nexport type TokenColorName = keyof typeof colorStyles;\n\nexport interface TokenColors {\n idle: TokenColorName;\n active?: TokenColorName;\n}\n\nexport type TokenSize = SizeProp;\n\nexport interface TokenProps extends Pick<AriaAttributes, 'aria-describedby'>, CommonProps {\n colors?: TokenColors;\n isActive?: boolean;\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n /**\n * Размер\n */\n size?: TokenSize;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onDoubleClick?: React.MouseEventHandler<HTMLDivElement>;\n onRemove?: React.MouseEventHandler<HTMLElement>;\n onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;\n onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n}\n\nconst getValidation = (error: TokenProps['error'], warning: TokenProps['warning']) => {\n if (error) {\n return 'error';\n } else if (warning) {\n return 'warning';\n }\n\n return null;\n};\n\nexport const TokenDataTids = {\n root: 'Token__root',\n removeIcon: 'Token__removeIcon',\n} as const;\n\n@rootNode\n@locale('Token', TokenLocaleHelper)\nexport class Token extends React.Component<TokenProps> {\n public static __KONTUR_REACT_UI__ = 'Token';\n public static displayName = 'Token';\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n private readonly locale!: TokenLocale;\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n size,\n children,\n isActive,\n colors = { idle: 'defaultIdle', active: 'defaultActive' },\n error,\n warning,\n disabled,\n 'aria-describedby': ariaDescribedby,\n onClick = emptyHandler,\n onDoubleClick = emptyHandler,\n onMouseEnter = emptyHandler,\n onMouseLeave = emptyHandler,\n onFocus = emptyHandler,\n onBlur = emptyHandler,\n } = this.props;\n\n const theme = this.theme;\n\n const validation = getValidation(error, warning);\n const removeButtonAriaLabel = this.locale.removeButtonAriaLabel + ' ' + reactGetTextContent(children);\n\n const icon = isTheme2022(theme) ? (\n <CloseButtonIcon\n side={16}\n color=\"inherit\"\n colorHover=\"inherit\"\n aria-label={removeButtonAriaLabel}\n tabbable={false}\n />\n ) : (\n <CrossIcon />\n );\n\n const classNames = isTheme2022(theme)\n ? cx(\n styles.tokenDefaultIdle2022(theme),\n !isActive && !warning && !error && !disabled && styles.tokenDefaultIdleHovering2022(theme),\n isActive && styles.tokenDefaultActive2022(theme),\n warning && styles.tokenWarning2022(theme),\n error && styles.tokenError2022(theme),\n disabled && styles.tokenDisabled2022(theme),\n )\n : cx(\n colorStyles[colors.idle](theme, validation),\n !!isActive && colorStyles[colors.active || colors.idle](theme, validation),\n !!disabled && styles.disabled(theme),\n !!disabled && colorStyles.defaultDisabled(theme),\n !!disabled && warning && colorStyles.defaultDisabledWarning(theme),\n !!disabled && error && colorStyles.defaultDisabledError(theme),\n );\n\n const textholder = <span className={styles.text(this.theme)}>{children}</span>;\n\n const closeButton = (\n <span\n role={isTheme2022(theme) ? undefined : 'button'}\n aria-label={isTheme2022(theme) ? undefined : removeButtonAriaLabel}\n onClick={this.onRemoveClick}\n data-tid={TokenDataTids.removeIcon}\n >\n {icon}\n </span>\n );\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props} {...getVisualStateDataAttributes({ disabled })}>\n <TokenView\n className={classNames}\n size={size}\n closeButton={closeButton}\n data-tid={TokenDataTids.root}\n aria-describedby={ariaDescribedby}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {textholder}\n </TokenView>\n </CommonWrapper>\n );\n }\n\n private onRemoveClick = (event: React.MouseEvent<HTMLElement, MouseEvent>) => {\n const { disabled, onRemove = emptyHandler } = this.props;\n\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n onRemove(event);\n };\n}\n"]}
@@ -6,6 +6,8 @@ import { getRandomID } from "../../../lib/utils";
6
6
  import { Upgrade } from "../../../lib/Upgrades";
7
7
  import { callChildRef } from "../../../lib/callChildRef/callChildRef";
8
8
  import { RenderInnerContainer } from "../RenderInnerContainer";
9
+ export var PORTAL_ANCHOR_ATTR = 'data-render-container-id';
10
+ export var PORTAL_TAG_ATTR = 'data-rendered-container-id';
9
11
  export var RenderContainer = /*#__PURE__*/function (_React$Component) {
10
12
  _inheritsLoose(RenderContainer, _React$Component);
11
13
 
@@ -58,7 +60,7 @@ export var RenderContainer = /*#__PURE__*/function (_React$Component) {
58
60
 
59
61
  if (domContainer) {
60
62
  domContainer.setAttribute('class', Upgrade.getSpecificityClassName());
61
- domContainer.setAttribute('data-rendered-container-id', "" + this.rootId);
63
+ domContainer.setAttribute(PORTAL_TAG_ATTR, "" + this.rootId);
62
64
  this.domContainer = domContainer;
63
65
  }
64
66
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderContainer.tsx"],"names":["React","globalObject","getRandomID","Upgrade","callChildRef","RenderInnerContainer","RenderContainer","domContainer","rootId","getRootId","shouldComponentUpdate","nextProps","props","children","mountContainer","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","document","createElement","setAttribute","getSpecificityClassName","parentNode","body","appendChild","containerRef","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID } from '../../lib/utils';\nimport { Upgrade } from '../../lib/Upgrades';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { RenderInnerContainer } from './RenderInnerContainer';\nimport { RenderContainerProps } from './RenderContainerTypes';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n private static getRootId = () => getRandomID();\n private domContainer: Nullable<HTMLElement> = null;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const domContainer = globalObject.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute('data-rendered-container-id', `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== globalObject.document?.body) {\n globalObject.document?.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["RenderContainer.tsx"],"names":["React","globalObject","getRandomID","Upgrade","callChildRef","RenderInnerContainer","PORTAL_ANCHOR_ATTR","PORTAL_TAG_ATTR","RenderContainer","domContainer","rootId","getRootId","shouldComponentUpdate","nextProps","props","children","mountContainer","unmountContainer","componentWillUnmount","destroyContainer","render","createContainer","document","createElement","setAttribute","getSpecificityClassName","parentNode","body","appendChild","containerRef","ReactTesting","addRenderContainer","removeChild","removeRenderContainer","Component","__KONTUR_REACT_UI__","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { getRandomID } from '../../lib/utils';\nimport { Upgrade } from '../../lib/Upgrades';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { RenderInnerContainer } from './RenderInnerContainer';\nimport { RenderContainerProps } from './RenderContainerTypes';\n\nexport const PORTAL_ANCHOR_ATTR = 'data-render-container-id';\nexport const PORTAL_TAG_ATTR = 'data-rendered-container-id';\n\nexport class RenderContainer extends React.Component<RenderContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderContainer';\n public static displayName = 'RenderContainer';\n\n private static getRootId = () => getRandomID();\n private domContainer: Nullable<HTMLElement> = null;\n\n private readonly rootId: string = RenderContainer.getRootId();\n\n public shouldComponentUpdate(nextProps: RenderContainerProps) {\n if (!this.props.children && nextProps.children) {\n this.mountContainer();\n }\n if (this.props.children && !nextProps.children) {\n this.unmountContainer();\n }\n return true;\n }\n\n public componentWillUnmount() {\n this.destroyContainer();\n }\n\n public render() {\n if (this.props.children) {\n this.mountContainer();\n }\n\n return <RenderInnerContainer {...this.props} domContainer={this.domContainer} rootId={this.rootId} />;\n }\n\n private createContainer() {\n const domContainer = globalObject.document?.createElement('div');\n if (domContainer) {\n domContainer.setAttribute('class', Upgrade.getSpecificityClassName());\n domContainer.setAttribute(PORTAL_TAG_ATTR, `${this.rootId}`);\n this.domContainer = domContainer;\n }\n }\n\n private mountContainer() {\n if (!this.domContainer) {\n this.createContainer();\n }\n if (this.domContainer && this.domContainer.parentNode !== globalObject.document?.body) {\n globalObject.document?.body.appendChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, this.domContainer);\n }\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.addRenderContainer(this.rootId, this);\n }\n }\n }\n\n private destroyContainer() {\n if (this.domContainer) {\n this.unmountContainer();\n this.domContainer = null;\n }\n }\n\n private unmountContainer() {\n if (this.domContainer && this.domContainer.parentNode) {\n this.domContainer.parentNode.removeChild(this.domContainer);\n\n if (this.props.containerRef) {\n callChildRef(this.props.containerRef, null);\n }\n\n if (globalObject.ReactTesting) {\n globalObject.ReactTesting.removeRenderContainer(this.rootId);\n }\n }\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
  import { RenderContainerProps } from './RenderContainerTypes';
3
+ export declare const PORTAL_ANCHOR_ATTR = "data-render-container-id";
4
+ export declare const PORTAL_TAG_ATTR = "data-rendered-container-id";
3
5
  export declare class RenderContainer extends React.Component<RenderContainerProps> {
4
6
  static __KONTUR_REACT_UI__: string;
5
7
  static displayName: string;
@@ -3,7 +3,8 @@ import React from 'react';
3
3
  import ReactDOM from 'react-dom';
4
4
  import propTypes from 'prop-types';
5
5
  import { globalObject } from '@skbkontur/global-object';
6
- import { safePropTypesInstanceOf } from "../../../lib/SSRSafe"; // Заглушка нужна для корректной гидрации порталов после SSR,
6
+ import { safePropTypesInstanceOf } from "../../../lib/SSRSafe";
7
+ import { PORTAL_ANCHOR_ATTR } from "../RenderContainer"; // Заглушка нужна для корректной гидрации порталов после SSR,
7
8
  // которую реакт сам пока не поддерживает.
8
9
  // @see https://github.com/facebook/react/issues/13097
9
10
  // А также для вставки актуального render-container-id на клиенте.
@@ -28,13 +29,13 @@ var SSRPlaceholder = function SSRPlaceholder() {
28
29
  };
29
30
 
30
31
  export var Portal = function Portal(_ref) {
32
+ var _ref2;
33
+
31
34
  var container = _ref.container,
32
35
  rt_rootID = _ref.rt_rootID,
33
36
  children = _ref.children; // container exists only in browser
34
37
 
35
- return /*#__PURE__*/React.createElement(React.Fragment, null, container ? /*#__PURE__*/ReactDOM.createPortal(children, container) : /*#__PURE__*/React.createElement(SSRPlaceholder, null), container ? /*#__PURE__*/React.createElement("noscript", {
36
- "data-render-container-id": rt_rootID
37
- }) : /*#__PURE__*/React.createElement(SSRPlaceholder, null));
38
+ return /*#__PURE__*/React.createElement(React.Fragment, null, container ? /*#__PURE__*/ReactDOM.createPortal(children, container) : /*#__PURE__*/React.createElement(SSRPlaceholder, null), container ? /*#__PURE__*/React.createElement("noscript", (_ref2 = {}, _ref2[PORTAL_ANCHOR_ATTR] = rt_rootID, _ref2)) : /*#__PURE__*/React.createElement(SSRPlaceholder, null));
38
39
  };
39
40
  export var RenderInnerContainer = /*#__PURE__*/function (_React$Component) {
40
41
  _inheritsLoose(RenderInnerContainer, _React$Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["RenderInnerContainer.tsx"],"names":["React","ReactDOM","propTypes","globalObject","safePropTypesInstanceOf","SSRPlaceholder","Portal","container","rt_rootID","children","createPortal","RenderInnerContainer","render","props","anchor","domContainer","rootId","inner","Component","__KONTUR_REACT_UI__","displayName","HTMLElement","string","isRequired","node"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,YAAT,QAA6B,0BAA7B;;;AAGA,SAASC,uBAAT,QAAwC,mBAAxC;;;;;;;;;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,wBAAM,gCAAQ,WAAQ,iBAAhB,GAAN,EAAvB;;AAEA,OAAO,IAAMC,MAAM,GAAG,SAATA,MAAS,OAAqD,KAAlDC,SAAkD,QAAlDA,SAAkD,CAAvCC,SAAuC,QAAvCA,SAAuC,CAA5BC,QAA4B,QAA5BA,QAA4B;AACzE;AACA;AACE,wBAAC,KAAD,CAAO,QAAP;AACGF,IAAAA,SAAS,gBAAGN,QAAQ,CAACS,YAAT,CAAsBD,QAAtB,EAAgCF,SAAhC,CAAH,gBAAgD,oBAAC,cAAD,OAD5D;AAEGA,IAAAA,SAAS,gBAAG,kCAAU,4BAA0BC,SAApC,GAAH,gBAAuD,oBAAC,cAAD,OAFnE,CADF;;;AAMD,CARM;;AAUP,WAAaG,oBAAb;;;;AAISC,EAAAA,MAJT,GAIE,kBAAgB;AACd,sBAAmD,KAAKC,KAAxD,CAAQC,MAAR,eAAQA,MAAR,CAAgBL,QAAhB,eAAgBA,QAAhB,CAA0BM,YAA1B,eAA0BA,YAA1B,CAAwCC,MAAxC,eAAwCA,MAAxC;AACA,QAAIC,KAAK,GAAGH,MAAZ;;AAEA,QAAIL,QAAJ,EAAc;AACZQ,MAAAA,KAAK;AACH,0BAAC,KAAD,CAAO,QAAP;AACGH,MAAAA,MADH;AAEE,0BAAC,MAAD,IAAQ,GAAG,EAAC,YAAZ,EAAyB,SAAS,EAAEE,MAApC,EAA4C,SAAS,EAAED,YAAvD;AACGN,MAAAA,QADH,CAFF,CADF;;;;AAQD;;AAED,WAAOQ,KAAP;AACD,GApBH,+BAA0CjB,KAAK,CAACkB,SAAhD,EAAaP,oB,CACGQ,mB,GAAsB,sB,CADzBR,oB,CAEGS,W,GAAc,sB;;;AAqB9Bd,MAAM,CAACJ,SAAP,GAAmB;AACjBK,EAAAA,SAAS,EAAEH,uBAAuB,CAACD,YAAY,CAACkB,WAAd,CADjB;AAEjBb,EAAAA,SAAS,EAAEN,SAAS,CAACoB,MAAV,CAAiBC,UAFX;AAGjBd,EAAAA,QAAQ,EAAEP,SAAS,CAACsB,IAAV,CAAeD,UAHR,EAAnB;;;AAMAjB,MAAM,CAACa,mBAAP,GAA6B,QAA7B;AACAb,MAAM,CAACc,WAAP,GAAqB,QAArB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport propTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\n\nimport { PortalProps, RenderContainerProps } from './RenderContainerTypes';\n\ninterface RenderInnerContainerProps extends RenderContainerProps {\n domContainer: Nullable<HTMLElement>;\n rootId: string;\n}\n\n// Заглушка нужна для корректной гидрации порталов после SSR,\n// которую реакт сам пока не поддерживает.\n// @see https://github.com/facebook/react/issues/13097\n// А также для вставки актуального render-container-id на клиенте.\n//\n// Дело в том, что во время гидрации, структура HTML на сервере\n// и на клиенте должна совпадать, иначе возможны артефакты.\n// Алгоритм там примерно такой. Клиент во время гидрации идет\n// по этим двум деревьям и сравнивает узлы. Элементы разных типов\n// он подменяет на свои. А те, что совпадают, он оставляет как есть\n// вместе со всеми атрибутами, навесив только обработчики событий.\n//\n// Поэтому, для портала, который рендерится только на клиенте,\n// нужно использовать серверную заглушку, чтобы при гидрации\n// он не испортил какой-то другой элемент. Null не подходит,\n// т.к. на сервере он тоже не рендерится.\n// А элемент с render-container-id нужно отрендерить с нуля.\n\nconst SSRPlaceholder = () => <script data-id=\"ssr-placeholder\" />;\n\nexport const Portal = ({ container, rt_rootID, children }: PortalProps) => {\n // container exists only in browser\n return (\n <React.Fragment>\n {container ? ReactDOM.createPortal(children, container) : <SSRPlaceholder />}\n {container ? <noscript data-render-container-id={rt_rootID} /> : <SSRPlaceholder />}\n </React.Fragment>\n );\n};\n\nexport class RenderInnerContainer extends React.Component<RenderInnerContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderInnerContainer';\n public static displayName = 'RenderInnerContainer';\n\n public render() {\n const { anchor, children, domContainer, rootId } = this.props;\n let inner = anchor;\n\n if (children) {\n inner = (\n <React.Fragment>\n {anchor}\n <Portal key=\"portal-ref\" rt_rootID={rootId} container={domContainer}>\n {children}\n </Portal>\n </React.Fragment>\n );\n }\n\n return inner;\n }\n}\n\nPortal.propTypes = {\n container: safePropTypesInstanceOf(globalObject.HTMLElement),\n rt_rootID: propTypes.string.isRequired,\n children: propTypes.node.isRequired,\n};\n\nPortal.__KONTUR_REACT_UI__ = 'Portal';\nPortal.displayName = 'Portal';\n"]}
1
+ {"version":3,"sources":["RenderInnerContainer.tsx"],"names":["React","ReactDOM","propTypes","globalObject","safePropTypesInstanceOf","PORTAL_ANCHOR_ATTR","SSRPlaceholder","Portal","container","rt_rootID","children","createPortal","RenderInnerContainer","render","props","anchor","domContainer","rootId","inner","Component","__KONTUR_REACT_UI__","displayName","HTMLElement","string","isRequired","node"],"mappings":"sEAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,QAAP,MAAqB,WAArB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,SAASC,YAAT,QAA6B,0BAA7B;;;AAGA,SAASC,uBAAT,QAAwC,mBAAxC;;;AAGA,SAASC,kBAAT,QAAmC,mBAAnC;;;;;;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,wBAAM,gCAAQ,WAAQ,iBAAhB,GAAN,EAAvB;;AAEA,OAAO,IAAMC,MAAM,GAAG,SAATA,MAAS,OAAqD,eAAlDC,SAAkD,QAAlDA,SAAkD,CAAvCC,SAAuC,QAAvCA,SAAuC,CAA5BC,QAA4B,QAA5BA,QAA4B;AACzE;AACA;AACE,wBAAC,KAAD,CAAO,QAAP;AACGF,IAAAA,SAAS,gBAAGP,QAAQ,CAACU,YAAT,CAAsBD,QAAtB,EAAgCF,SAAhC,CAAH,gBAAgD,oBAAC,cAAD,OAD5D;AAEGA,IAAAA,SAAS,gBAAG,mDAAiBH,kBAAjB,IAAsCI,SAAtC,SAAH,gBAA2D,oBAAC,cAAD,OAFvE,CADF;;;AAMD,CARM;;AAUP,WAAaG,oBAAb;;;;AAISC,EAAAA,MAJT,GAIE,kBAAgB;AACd,sBAAmD,KAAKC,KAAxD,CAAQC,MAAR,eAAQA,MAAR,CAAgBL,QAAhB,eAAgBA,QAAhB,CAA0BM,YAA1B,eAA0BA,YAA1B,CAAwCC,MAAxC,eAAwCA,MAAxC;AACA,QAAIC,KAAK,GAAGH,MAAZ;;AAEA,QAAIL,QAAJ,EAAc;AACZQ,MAAAA,KAAK;AACH,0BAAC,KAAD,CAAO,QAAP;AACGH,MAAAA,MADH;AAEE,0BAAC,MAAD,IAAQ,GAAG,EAAC,YAAZ,EAAyB,SAAS,EAAEE,MAApC,EAA4C,SAAS,EAAED,YAAvD;AACGN,MAAAA,QADH,CAFF,CADF;;;;AAQD;;AAED,WAAOQ,KAAP;AACD,GApBH,+BAA0ClB,KAAK,CAACmB,SAAhD,EAAaP,oB,CACGQ,mB,GAAsB,sB,CADzBR,oB,CAEGS,W,GAAc,sB;;;AAqB9Bd,MAAM,CAACL,SAAP,GAAmB;AACjBM,EAAAA,SAAS,EAAEJ,uBAAuB,CAACD,YAAY,CAACmB,WAAd,CADjB;AAEjBb,EAAAA,SAAS,EAAEP,SAAS,CAACqB,MAAV,CAAiBC,UAFX;AAGjBd,EAAAA,QAAQ,EAAER,SAAS,CAACuB,IAAV,CAAeD,UAHR,EAAnB;;;AAMAjB,MAAM,CAACa,mBAAP,GAA6B,QAA7B;AACAb,MAAM,CAACc,WAAP,GAAqB,QAArB","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport propTypes from 'prop-types';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { safePropTypesInstanceOf } from '../../lib/SSRSafe';\n\nimport { PortalProps, RenderContainerProps } from './RenderContainerTypes';\nimport { PORTAL_ANCHOR_ATTR } from './RenderContainer';\n\ninterface RenderInnerContainerProps extends RenderContainerProps {\n domContainer: Nullable<HTMLElement>;\n rootId: string;\n}\n\n// Заглушка нужна для корректной гидрации порталов после SSR,\n// которую реакт сам пока не поддерживает.\n// @see https://github.com/facebook/react/issues/13097\n// А также для вставки актуального render-container-id на клиенте.\n//\n// Дело в том, что во время гидрации, структура HTML на сервере\n// и на клиенте должна совпадать, иначе возможны артефакты.\n// Алгоритм там примерно такой. Клиент во время гидрации идет\n// по этим двум деревьям и сравнивает узлы. Элементы разных типов\n// он подменяет на свои. А те, что совпадают, он оставляет как есть\n// вместе со всеми атрибутами, навесив только обработчики событий.\n//\n// Поэтому, для портала, который рендерится только на клиенте,\n// нужно использовать серверную заглушку, чтобы при гидрации\n// он не испортил какой-то другой элемент. Null не подходит,\n// т.к. на сервере он тоже не рендерится.\n// А элемент с render-container-id нужно отрендерить с нуля.\n\nconst SSRPlaceholder = () => <script data-id=\"ssr-placeholder\" />;\n\nexport const Portal = ({ container, rt_rootID, children }: PortalProps) => {\n // container exists only in browser\n return (\n <React.Fragment>\n {container ? ReactDOM.createPortal(children, container) : <SSRPlaceholder />}\n {container ? <noscript {...{ [PORTAL_ANCHOR_ATTR]: rt_rootID }} /> : <SSRPlaceholder />}\n </React.Fragment>\n );\n};\n\nexport class RenderInnerContainer extends React.Component<RenderInnerContainerProps> {\n public static __KONTUR_REACT_UI__ = 'RenderInnerContainer';\n public static displayName = 'RenderInnerContainer';\n\n public render() {\n const { anchor, children, domContainer, rootId } = this.props;\n let inner = anchor;\n\n if (children) {\n inner = (\n <React.Fragment>\n {anchor}\n <Portal key=\"portal-ref\" rt_rootID={rootId} container={domContainer}>\n {children}\n </Portal>\n </React.Fragment>\n );\n }\n\n return inner;\n }\n}\n\nPortal.propTypes = {\n container: safePropTypesInstanceOf(globalObject.HTMLElement),\n rt_rootID: propTypes.string.isRequired,\n children: propTypes.node.isRequired,\n};\n\nPortal.__KONTUR_REACT_UI__ = 'Portal';\nPortal.displayName = 'Portal';\n"]}
@@ -10,11 +10,15 @@ import { globalObject, isBrowser } from '@skbkontur/global-object';
10
10
  import { callChildRef } from "../../../lib/callChildRef/callChildRef";
11
11
  import { rootNode } from "../../../lib/rootNode";
12
12
  import { createPropsGetter } from "../../../lib/createPropsGetter";
13
+ import { isInstanceOf } from "../../../lib/isInstanceOf";
14
+ import { LoaderDataTids } from "../../../components/Loader";
15
+ import { PORTAL_ANCHOR_ATTR, PORTAL_TAG_ATTR } from "../../RenderContainer";
13
16
  import { incrementZIndex, removeZIndex, upperBorder } from "../ZIndexStorage";
14
- var ZIndexContext = /*#__PURE__*/React.createContext({
17
+ var DEFAULT_ZINDEX_CONTEXT = {
15
18
  parentLayerZIndex: 0,
16
19
  maxZIndex: Infinity
17
- });
20
+ };
21
+ var ZIndexContext = /*#__PURE__*/React.createContext(DEFAULT_ZINDEX_CONTEXT);
18
22
  ZIndexContext.displayName = 'ZIndexContext';
19
23
  export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {
20
24
  _inheritsLoose(ZIndex, _React$Component);
@@ -24,9 +28,11 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
24
28
 
25
29
  _this = _React$Component.call(this, props) || this;
26
30
  _this.state = {
27
- zIndex: 0
31
+ zIndex: 0,
32
+ savedZIndexContext: null
28
33
  };
29
34
  _this.getProps = createPropsGetter(ZIndex.defaultProps);
35
+ _this.zIndexContext = null;
30
36
 
31
37
  _this.wrapperRef = function (element) {
32
38
  var wrapperRef = _this.props.wrapperRef;
@@ -34,6 +40,7 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
34
40
  _this.setRootNode(element);
35
41
 
36
42
  wrapperRef && callChildRef(wrapperRef, element);
43
+ element && _this.tryGetContextByDOM(element);
37
44
  };
38
45
 
39
46
  _this.increment = function () {
@@ -44,6 +51,43 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
44
51
  return incrementZIndex(priority, delta);
45
52
  };
46
53
 
54
+ _this.tryGetContextByDOM = function (element) {
55
+ if (DEFAULT_ZINDEX_CONTEXT === _this.zIndexContext && _this.state.savedZIndexContext === null) {
56
+ var _element$parentElemen;
57
+
58
+ var savedZIndexContext = DEFAULT_ZINDEX_CONTEXT;
59
+ var portal = (_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.closest("[" + PORTAL_TAG_ATTR + "]");
60
+
61
+ if (isInstanceOf(portal, globalObject.HTMLElement)) {
62
+ var _noscript$parentEleme;
63
+
64
+ var portalID = portal.getAttribute(PORTAL_TAG_ATTR);
65
+ var noscript = document.querySelector("noscript[" + PORTAL_ANCHOR_ATTR + "=\"" + portalID + "\"]");
66
+ var parent = noscript == null ? void 0 : (_noscript$parentEleme = noscript.parentElement) == null ? void 0 : _noscript$parentEleme.closest('[style*=z-index]');
67
+
68
+ if (isInstanceOf(parent, globalObject.HTMLElement)) {
69
+ var _parent$parentElement;
70
+
71
+ var newZIndex = Number(parent.style.zIndex || 0);
72
+ var maxZIndex = Infinity;
73
+
74
+ if (((_parent$parentElement = parent.parentElement) == null ? void 0 : _parent$parentElement.dataset.tid) === LoaderDataTids.veil) {
75
+ maxZIndex = _this.calcZIndex(newZIndex, maxZIndex);
76
+ }
77
+
78
+ savedZIndexContext = {
79
+ maxZIndex: maxZIndex,
80
+ parentLayerZIndex: newZIndex
81
+ };
82
+ }
83
+ }
84
+
85
+ _this.setState({
86
+ savedZIndexContext: savedZIndexContext
87
+ });
88
+ }
89
+ };
90
+
47
91
  _this.state.zIndex = _this.increment();
48
92
  return _this;
49
93
  }
@@ -79,17 +123,21 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
79
123
  rest = _objectWithoutPropertiesLoose(_this$getProps2, _excluded);
80
124
 
81
125
  var wrapperStyle = {};
82
- return /*#__PURE__*/React.createElement(ZIndexContext.Consumer, null, function (_ref) {
83
- var parentLayerZIndex = _ref.parentLayerZIndex,
126
+ return /*#__PURE__*/React.createElement(ZIndexContext.Consumer, null, function (context) {
127
+ _this2.zIndexContext = context;
128
+
129
+ var _ref = _this2.state.savedZIndexContext || context,
130
+ parentLayerZIndex = _ref.parentLayerZIndex,
84
131
  maxZIndex = _ref.maxZIndex;
132
+
85
133
  var zIndexContextValue = {
86
134
  parentLayerZIndex: parentLayerZIndex,
87
135
  maxZIndex: maxZIndex
88
136
  };
137
+ var newZIndex = 0;
89
138
 
90
139
  if (applyZIndex) {
91
- var newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);
92
-
140
+ newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);
93
141
  wrapperStyle.zIndex = newZIndex;
94
142
  zIndexContextValue = coverChildren ? {
95
143
  parentLayerZIndex: parentLayerZIndex,
@@ -1 +1 @@
1
- {"version":3,"sources":["ZIndex.tsx"],"names":["React","globalObject","isBrowser","callChildRef","rootNode","createPropsGetter","incrementZIndex","removeZIndex","upperBorder","ZIndexContext","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","props","state","zIndex","getProps","defaultProps","wrapperRef","element","setRootNode","increment","priority","delta","componentDidUpdate","prevProps","setState","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","useWrapper","rest","wrapperStyle","zIndexContextValue","newZIndex","calcZIndex","Number","isFinite","document","body","isolation","transform","child","allowedValuesIntervalLength","scale","Math","ceil","Component","__KONTUR_REACT_UI__","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta?: number;\n priority?: number | LayerComponentName;\n style?: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<div/>`.\n * Для случаев, когда необходимо задать **только** контекст для области.\n *\n * @default true\n */\n useWrapper?: boolean;\n}\n\ntype DefaultProps = Required<\n Pick<\n ZIndexProps,\n 'delta' | 'priority' | 'style' | 'applyZIndex' | 'coverChildren' | 'createStackingContext' | 'useWrapper'\n >\n>;\n\ninterface ZIndexState {\n zIndex: number;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps, ZIndexState> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n public static displayName = 'ZIndex';\n\n public static defaultProps: DefaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n useWrapper: true,\n };\n\n public state = {\n zIndex: 0,\n };\n\n private getProps = createPropsGetter(ZIndex.defaultProps);\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if ((props.delta || ZIndex.defaultProps.delta) <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta || ZIndex.defaultProps.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.state.zIndex = this.increment();\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n removeZIndex(this.state.zIndex);\n this.setState({ zIndex: this.increment() });\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.state.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n useWrapper,\n ...rest\n } = this.getProps();\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContextValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContextValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser(globalObject) && 'isolation' in globalObject.document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = !useWrapper ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...rest}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContextValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.state.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n\n private increment = () => {\n const { priority, delta } = this.getProps();\n\n return incrementZIndex(priority, delta);\n };\n}\n"]}
1
+ {"version":3,"sources":["ZIndex.tsx"],"names":["React","globalObject","isBrowser","callChildRef","rootNode","createPropsGetter","isInstanceOf","LoaderDataTids","PORTAL_ANCHOR_ATTR","PORTAL_TAG_ATTR","incrementZIndex","removeZIndex","upperBorder","DEFAULT_ZINDEX_CONTEXT","parentLayerZIndex","maxZIndex","Infinity","ZIndexContext","createContext","displayName","ZIndex","props","state","zIndex","savedZIndexContext","getProps","defaultProps","zIndexContext","wrapperRef","element","setRootNode","tryGetContextByDOM","increment","priority","delta","portal","parentElement","closest","HTMLElement","portalID","getAttribute","noscript","document","querySelector","parent","newZIndex","Number","style","dataset","tid","veil","calcZIndex","setState","componentDidUpdate","prevProps","componentWillUnmount","render","children","applyZIndex","coverChildren","createStackingContext","useWrapper","rest","wrapperStyle","context","zIndexContextValue","isFinite","body","isolation","transform","child","allowedValuesIntervalLength","scale","Math","ceil","Component","__KONTUR_REACT_UI__","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isInstanceOf } from '../../lib/isInstanceOf';\nimport { LoaderDataTids } from '../../components/Loader';\nimport { PORTAL_ANCHOR_ATTR, PORTAL_TAG_ATTR } from '../RenderContainer';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst DEFAULT_ZINDEX_CONTEXT = { parentLayerZIndex: 0, maxZIndex: Infinity };\n\nconst ZIndexContext = React.createContext(DEFAULT_ZINDEX_CONTEXT);\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta?: number;\n priority?: number | LayerComponentName;\n style?: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<div/>`.\n * Для случаев, когда необходимо задать **только** контекст для области.\n *\n * @default true\n */\n useWrapper?: boolean;\n}\n\ntype DefaultProps = Required<\n Pick<\n ZIndexProps,\n 'delta' | 'priority' | 'style' | 'applyZIndex' | 'coverChildren' | 'createStackingContext' | 'useWrapper'\n >\n>;\n\ninterface ZIndexState {\n zIndex: number;\n savedZIndexContext: { parentLayerZIndex: number; maxZIndex: number } | null;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps, ZIndexState> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n public static displayName = 'ZIndex';\n\n public static defaultProps: DefaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n useWrapper: true,\n };\n\n public state: ZIndexState = {\n zIndex: 0,\n savedZIndexContext: null,\n };\n\n private getProps = createPropsGetter(ZIndex.defaultProps);\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if ((props.delta || ZIndex.defaultProps.delta) <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta || ZIndex.defaultProps.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private setRootNode!: TSetRootNode;\n private zIndexContext: { parentLayerZIndex: number; maxZIndex: number } | null = null;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.state.zIndex = this.increment();\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n removeZIndex(this.state.zIndex);\n this.setState({ zIndex: this.increment() });\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.state.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n useWrapper,\n ...rest\n } = this.getProps();\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {(context) => {\n this.zIndexContext = context;\n const { parentLayerZIndex, maxZIndex } = this.state.savedZIndexContext || context;\n let zIndexContextValue = { parentLayerZIndex, maxZIndex };\n let newZIndex = 0;\n if (applyZIndex) {\n newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContextValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser(globalObject) && 'isolation' in globalObject.document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = !useWrapper ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...rest}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContextValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n element && this.tryGetContextByDOM(element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.state.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n\n private increment = () => {\n const { priority, delta } = this.getProps();\n\n return incrementZIndex(priority, delta);\n };\n\n private tryGetContextByDOM = (element: HTMLDivElement) => {\n if (DEFAULT_ZINDEX_CONTEXT === this.zIndexContext && this.state.savedZIndexContext === null) {\n let savedZIndexContext = DEFAULT_ZINDEX_CONTEXT;\n const portal = element.parentElement?.closest(`[${PORTAL_TAG_ATTR}]`);\n\n if (isInstanceOf(portal, globalObject.HTMLElement)) {\n const portalID = portal.getAttribute(PORTAL_TAG_ATTR);\n const noscript = document.querySelector(`noscript[${PORTAL_ANCHOR_ATTR}=\"${portalID}\"]`);\n const parent = noscript?.parentElement?.closest('[style*=z-index]');\n\n if (isInstanceOf(parent, globalObject.HTMLElement)) {\n const newZIndex = Number(parent.style.zIndex || 0);\n\n let maxZIndex = Infinity;\n\n if (parent.parentElement?.dataset.tid === LoaderDataTids.veil) {\n maxZIndex = this.calcZIndex(newZIndex, maxZIndex);\n }\n\n savedZIndexContext = { maxZIndex, parentLayerZIndex: newZIndex };\n }\n }\n\n this.setState({ savedZIndexContext });\n }\n };\n}\n"]}