@skbkontur/react-ui 4.26.0 → 4.27.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 (100) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/cjs/components/Button/Button.d.ts +1 -1
  3. package/cjs/components/Button/Button.js +3 -2
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/ComboBox/ComboBox.d.ts +2 -2
  6. package/cjs/components/ComboBox/ComboBox.js +1 -0
  7. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  8. package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +3 -3
  9. package/cjs/components/CurrencyLabel/CurrencyLabel.js +4 -3
  10. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  11. package/cjs/components/DateInput/DateInput.d.ts +2 -2
  12. package/cjs/components/DateInput/DateInput.js +2 -1
  13. package/cjs/components/DateInput/DateInput.js.map +1 -1
  14. package/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  15. package/cjs/components/DatePicker/DatePicker.js +3 -1
  16. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  17. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  18. package/cjs/components/Dropdown/Dropdown.js +2 -0
  19. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  20. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  21. package/cjs/components/DropdownMenu/DropdownMenu.js +3 -1
  22. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  23. package/cjs/components/Kebab/Kebab.d.ts +2 -2
  24. package/cjs/components/Kebab/Kebab.js +3 -1
  25. package/cjs/components/Kebab/Kebab.js.map +1 -1
  26. package/cjs/components/MenuFooter/MenuFooter.d.ts +3 -3
  27. package/cjs/components/MenuFooter/MenuFooter.js +3 -2
  28. package/cjs/components/MenuFooter/MenuFooter.js.map +1 -1
  29. package/cjs/components/MenuHeader/MenuHeader.d.ts +3 -3
  30. package/cjs/components/MenuHeader/MenuHeader.js +3 -2
  31. package/cjs/components/MenuHeader/MenuHeader.js.map +1 -1
  32. package/cjs/components/MenuItem/MenuItem.d.ts +2 -2
  33. package/cjs/components/MenuItem/MenuItem.js +1 -0
  34. package/cjs/components/MenuItem/MenuItem.js.map +1 -1
  35. package/cjs/components/Select/Select.d.ts +2 -2
  36. package/cjs/components/Select/Select.js +2 -0
  37. package/cjs/components/Select/Select.js.map +1 -1
  38. package/cjs/components/TokenInput/TokenInput.d.ts +4 -3
  39. package/cjs/components/TokenInput/TokenInput.js +11 -4
  40. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  41. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +2 -2
  42. package/cjs/internal/CustomComboBox/ComboBoxView.js +5 -1
  43. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  44. package/cjs/internal/CustomComboBox/CustomComboBox.d.ts +2 -2
  45. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -1
  46. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  47. package/cjs/internal/PopupMenu/PopupMenu.d.ts +3 -3
  48. package/cjs/internal/PopupMenu/PopupMenu.js +3 -1
  49. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  50. package/cjs/internal/themes/Theme2022Dark.js +1 -1
  51. package/cjs/internal/themes/Theme2022Dark.js.map +1 -1
  52. package/components/Button/Button/Button.js +3 -1
  53. package/components/Button/Button/Button.js.map +1 -1
  54. package/components/Button/Button.d.ts +1 -1
  55. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  56. package/components/ComboBox/ComboBox.d.ts +2 -2
  57. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +4 -2
  58. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  59. package/components/CurrencyLabel/CurrencyLabel.d.ts +3 -3
  60. package/components/DateInput/DateInput/DateInput.js +1 -0
  61. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  62. package/components/DateInput/DateInput.d.ts +2 -2
  63. package/components/DatePicker/DatePicker/DatePicker.js +3 -1
  64. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  65. package/components/DatePicker/DatePicker.d.ts +2 -2
  66. package/components/Dropdown/Dropdown/Dropdown.js +1 -0
  67. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  68. package/components/Dropdown/Dropdown.d.ts +2 -2
  69. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +1 -0
  70. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  71. package/components/DropdownMenu/DropdownMenu.d.ts +2 -2
  72. package/components/Kebab/Kebab/Kebab.js +1 -0
  73. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  74. package/components/Kebab/Kebab.d.ts +2 -2
  75. package/components/MenuFooter/MenuFooter/MenuFooter.js +4 -2
  76. package/components/MenuFooter/MenuFooter/MenuFooter.js.map +1 -1
  77. package/components/MenuFooter/MenuFooter.d.ts +3 -3
  78. package/components/MenuHeader/MenuHeader/MenuHeader.js +4 -2
  79. package/components/MenuHeader/MenuHeader/MenuHeader.js.map +1 -1
  80. package/components/MenuHeader/MenuHeader.d.ts +3 -3
  81. package/components/MenuItem/MenuItem/MenuItem.js.map +1 -1
  82. package/components/MenuItem/MenuItem.d.ts +2 -2
  83. package/components/Select/Select/Select.js +1 -0
  84. package/components/Select/Select/Select.js.map +1 -1
  85. package/components/Select/Select.d.ts +2 -2
  86. package/components/TokenInput/TokenInput/TokenInput.js +9 -2
  87. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  88. package/components/TokenInput/TokenInput.d.ts +4 -3
  89. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +3 -0
  90. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  91. package/internal/CustomComboBox/ComboBoxView.d.ts +2 -2
  92. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +1 -0
  93. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  94. package/internal/CustomComboBox/CustomComboBox.d.ts +2 -2
  95. package/internal/PopupMenu/PopupMenu/PopupMenu.js +2 -1
  96. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  97. package/internal/PopupMenu/PopupMenu.d.ts +3 -3
  98. package/internal/themes/Theme2022Dark/Theme2022Dark.js +1 -1
  99. package/internal/themes/Theme2022Dark/Theme2022Dark.js.map +1 -1
  100. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","globalObject","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","menuScrollContainerContentWrapperPaddingY","menuLegacyPaddingY","renderMain","positions","disableAnimations","onOpen","onClose","flags","hasPin","kebabHintRemovePin","setRootNode","preventIconsOffset","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","sizes","small","parseInt","kebabIconSizeSmall","medium","kebabIconSizeMedium","large","kebabIconSizeLarge","React","cloneElement","color","kebabIconColor","Component","__KONTUR_REACT_UI__","displayName","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { isElement } from 'react-is';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKonturIcon } from '../../lib/utils';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n disabled?: boolean;\n size?: SizeProp;\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...this.props}\n {...getVisualStateDataAttributes({ disabled })}\n >\n <PopupMenu\n popupHasPin={hasPin}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: icon.props.size ?? sizes[size],\n color: icon.props.color ?? this.theme.kebabIconColor,\n });\n }\n\n return icon;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
1
+ {"version":3,"sources":["Kebab.tsx"],"names":["KebabDataTids","caption","Kebab","rootNode","getProps","defaultProps","state","focusedByTab","anchor","listener","remove","undefined","renderCaption","captionProps","disabled","size","handleCaptionKeyDown","event","openMenu","handleCaptionClick","toggleMenu","handleFocus","handleBlur","styles","kebab","theme","kebabSmall","kebabMedium","kebabLarge","kebab2022","opened","focused","props","renderIcon2022","renderIcon","e","isKeyEnter","isKeySpace","isKeyArrowVertical","preventDefault","handleChangeMenuState","isOpened","restoreFocus","setState","globalObject","requestAnimationFrame","keyListener","isTabPressed","componentDidMount","LayoutEvents","addListener","componentWillUnmount","render","ThemeFactory","create","popupPinOffset","kebabPinOffset","popupMargin","kebabMargin","popupPinSize","kebabPinSize","menuScrollContainerContentWrapperPaddingY","menuLegacyPaddingY","renderMain","positions","disableAnimations","onOpen","onClose","flags","hasPin","kebabHintRemovePin","setRootNode","id","preventIconsOffset","menuMaxHeight","popupMenuId","children","icon","iconsmall","iconmedium","iconlarge","sizes","small","parseInt","kebabIconSizeSmall","medium","kebabIconSizeMedium","large","kebabIconSizeLarge","React","cloneElement","color","kebabIconColor","Component","__KONTUR_REACT_UI__","displayName","propTypes","isTestEnv","PropTypes","node","bool","oneOfType","string","number","func"],"mappings":"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","sourcesContent":["import React, { AriaAttributes, HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { isElement } from 'react-is';\nimport { globalObject } from '@skbkontur/global-object';\n\nimport { isKonturIcon } from '../../lib/utils';\nimport { isKeyArrowVertical, isKeyEnter, isKeySpace, someKeys } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { keyListener } from '../../lib/events/keyListener';\nimport { PopupMenu, PopupMenuCaptionProps, PopupMenuProps } from '../../internal/PopupMenu';\nimport { Nullable } from '../../typings/utility-types';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MenuKebabIcon } from '../../internal/icons/16px';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { isTheme2022 } from '../../lib/theming/ThemeHelpers';\nimport { SizeProp } from '../../lib/types/props';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './Kebab.styles';\nimport { KebabIcon } from './KebabIcon';\n\nexport interface KebabProps\n extends Pick<AriaAttributes, 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Pick<PopupMenuProps, 'onOpen' | 'onClose' | 'popupMenuId' | 'preventIconsOffset'>,\n CommonProps {\n disabled?: boolean;\n size?: SizeProp;\n /**\n * Список позиций доступных для расположения выпадашки.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n * @default ['bottom left', 'bottom right', 'top left', 'top right']\n */\n positions?: PopupPositionsType[];\n menuMaxHeight?: number | string;\n /**\n * Не показывать анимацию\n */\n disableAnimations?: boolean;\n /**\n * Кастомная иконка\n */\n icon?: React.ReactNode;\n /**\n * Атрибут для указания id элемента(-ов), описывающих его\n */\n 'aria-describedby'?: AriaAttributes['aria-describedby'];\n}\n\nexport const KebabDataTids = {\n caption: 'Kebab__caption',\n} as const;\n\nexport interface KebabState {\n anchor: Nullable<HTMLElement>;\n focusedByTab: boolean;\n}\n\ntype DefaultProps = Required<Pick<KebabProps, 'onOpen' | 'onClose' | 'positions' | 'size' | 'disableAnimations'>>;\n\n@rootNode\nexport class Kebab extends React.Component<KebabProps, KebabState> {\n public static __KONTUR_REACT_UI__ = 'Kebab';\n public static displayName = 'Kebab';\n\n public static propTypes = {};\n\n public static defaultProps: DefaultProps = {\n onOpen: () => undefined,\n onClose: () => undefined,\n positions: ['bottom left', 'bottom right', 'top left', 'top right'],\n size: 'small',\n disableAnimations: isTestEnv,\n };\n\n private getProps = createPropsGetter(Kebab.defaultProps);\n\n public state: KebabState = {\n focusedByTab: false,\n anchor: null,\n };\n\n private theme!: Theme;\n private setRootNode!: TSetRootNode;\n\n private listener: {\n remove: () => void;\n } = {\n remove: () => undefined,\n };\n\n public componentDidMount() {\n /** addListener'у нужен колбэк в аргумент */\n this.listener = LayoutEvents.addListener(() => undefined);\n }\n\n public componentWillUnmount() {\n this.listener.remove();\n }\n\n public render(): JSX.Element {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.kebabPinOffset,\n popupMargin: theme.kebabMargin,\n popupPinSize: theme.kebabPinSize,\n menuScrollContainerContentWrapperPaddingY: theme.menuLegacyPaddingY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const { disabled } = this.props;\n const { positions, disableAnimations, onOpen, onClose } = this.getProps();\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n const hasPin = !getFullReactUIFlagsContext(flags).kebabHintRemovePin || !isTheme2022(this.theme);\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...this.props}\n {...getVisualStateDataAttributes({ disabled })}\n >\n <PopupMenu\n id={this.props.id}\n popupHasPin={hasPin}\n preventIconsOffset={this.props.preventIconsOffset}\n positions={positions}\n onChangeMenuState={this.handleChangeMenuState}\n caption={this.renderCaption}\n disableAnimations={disableAnimations}\n menuMaxHeight={this.props.menuMaxHeight}\n onOpen={onOpen}\n onClose={onClose}\n popupMenuId={this.props.popupMenuId}\n aria-label={this.props['aria-label']}\n >\n {!disabled && this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n private renderCaption = (captionProps: PopupMenuCaptionProps) => {\n const { disabled, size } = this.getProps();\n const handleCaptionKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!disabled) {\n this.handleCaptionKeyDown(event, captionProps.openMenu);\n }\n };\n\n const handleCaptionClick = () => {\n if (!disabled) {\n captionProps.toggleMenu();\n }\n };\n\n return (\n <span\n role=\"button\"\n data-tid={KebabDataTids.caption}\n tabIndex={disabled ? -1 : 0}\n onClick={handleCaptionClick}\n onKeyDown={handleCaptionKeyDown}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n className={cx(\n styles.kebab(this.theme),\n size === 'small' && styles.kebabSmall(this.theme),\n size === 'medium' && styles.kebabMedium(this.theme),\n size === 'large' && styles.kebabLarge(this.theme),\n isTheme2022(this.theme) && styles.kebab2022(),\n captionProps.opened && styles.opened(this.theme),\n disabled && styles.disabled(),\n this.state.focusedByTab && styles.focused(this.theme),\n )}\n aria-describedby={this.props['aria-describedby']}\n >\n {isTheme2022(this.theme) ? this.renderIcon2022() : this.renderIcon()}\n </span>\n );\n };\n\n private handleCaptionKeyDown = (\n e: React.KeyboardEvent<HTMLDivElement>,\n openMenu: PopupMenuCaptionProps['openMenu'],\n ) => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n openMenu(true);\n }\n };\n\n private handleChangeMenuState = (isOpened: boolean, restoreFocus: boolean): void => {\n this.setState({\n focusedByTab: !isOpened && restoreFocus,\n });\n };\n\n private handleFocus = () => {\n if (!this.props.disabled) {\n // focus event fires before keyDown eventlistener\n // so we should check tabPressed in async way\n globalObject.requestAnimationFrame?.(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n }\n };\n\n private handleBlur = () => {\n this.setState({\n focusedByTab: false,\n });\n };\n\n private renderIcon() {\n const { size, icon = <MenuKebabIcon /> } = this.getProps();\n return (\n <div\n className={cx({\n [styles.icon(this.theme)]: true,\n [styles.iconsmall(this.theme)]: size === 'small',\n [styles.iconmedium(this.theme)]: size === 'medium',\n [styles.iconlarge(this.theme)]: size === 'large',\n })}\n >\n {icon}\n </div>\n );\n }\n\n private renderIcon2022() {\n const { size, icon = <KebabIcon /> } = this.getProps();\n\n if (isElement(icon) && isKonturIcon(icon)) {\n const sizes: Record<SizeProp, number> = {\n small: parseInt(this.theme.kebabIconSizeSmall),\n medium: parseInt(this.theme.kebabIconSizeMedium),\n large: parseInt(this.theme.kebabIconSizeLarge),\n };\n\n return React.cloneElement(icon, {\n size: icon.props.size ?? sizes[size],\n color: icon.props.color ?? this.theme.kebabIconColor,\n });\n }\n\n return icon;\n }\n}\n\nKebab.propTypes = {\n children: PropTypes.node,\n disabled: PropTypes.bool,\n menuMaxHeight: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n /**\n * Размер кебаба small 14px | large 20px\n */\n size: PropTypes.string,\n\n /**\n * Коллбек, вызывающийся перед закрытием кебаба\n */\n onClose: PropTypes.func,\n\n /**\n * Коллбек, вызывающийся перед открытием кебаба\n */\n onOpen: PropTypes.func,\n};\n"]}
@@ -1,11 +1,11 @@
1
- import React, { ReactNode } from 'react';
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
2
  import { CommonProps } from '../../internal/CommonWrapper';
3
3
  import { SizeProp } from '../../lib/types/props';
4
4
  /**
5
5
  * @deprecated use SizeProp
6
6
  */
7
7
  export declare type MenuFooterSize = SizeProp;
8
- export interface MenuFooterProps extends CommonProps {
8
+ export interface MenuFooterProps extends CommonProps, Pick<HTMLAttributes<HTMLElement>, 'id'> {
9
9
  _enableIconPadding?: boolean;
10
10
  children: ReactNode;
11
11
  /** Размер */
@@ -21,7 +21,7 @@ export declare const MenuFooterDataTids: {
21
21
  *
22
22
  * Сущности в которых может быть использован `MenuFooter`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).
23
23
  */
24
- declare function MenuFooter({ _enableIconPadding, children, size, ...rest }: MenuFooterProps): JSX.Element;
24
+ declare function MenuFooter({ id, _enableIconPadding, children, size, ...rest }: MenuFooterProps): JSX.Element;
25
25
  declare namespace MenuFooter {
26
26
  var __KONTUR_REACT_UI__: string;
27
27
  var displayName: string;
@@ -5,7 +5,7 @@ var _CommonWrapper = require("../../internal/CommonWrapper");
5
5
  var _Emotion = require("../../lib/theming/Emotion");
6
6
 
7
7
 
8
- var _MenuFooter = require("./MenuFooter.styles");var _excluded = ["_enableIconPadding", "children", "size"];
8
+ var _MenuFooter = require("./MenuFooter.styles");var _excluded = ["id", "_enableIconPadding", "children", "size"];
9
9
 
10
10
 
11
11
 
@@ -30,7 +30,7 @@ var MenuFooterDataTids = {
30
30
  *
31
31
  * Сущности в которых может быть использован `MenuFooter`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).
32
32
  */exports.MenuFooterDataTids = MenuFooterDataTids;
33
- function MenuFooter(_ref) {var _cx;var _ref$_enableIconPaddi = _ref._enableIconPadding,_enableIconPadding = _ref$_enableIconPaddi === void 0 ? false : _ref$_enableIconPaddi,children = _ref.children,_ref$size = _ref.size,size = _ref$size === void 0 ? 'small' : _ref$size,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
33
+ function MenuFooter(_ref) {var _cx;var id = _ref.id,_ref$_enableIconPaddi = _ref._enableIconPadding,_enableIconPadding = _ref$_enableIconPaddi === void 0 ? false : _ref$_enableIconPaddi,children = _ref.children,_ref$size = _ref.size,size = _ref$size === void 0 ? 'small' : _ref$size,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
34
34
  var theme = (0, _react.useContext)(_ThemeContext.ThemeContext);
35
35
 
36
36
  function getRootSizeClassName() {
@@ -59,6 +59,7 @@ function MenuFooter(_ref) {var _cx;var _ref$_enableIconPaddi = _ref._enableIconP
59
59
  return /*#__PURE__*/(
60
60
  _react.default.createElement(_CommonWrapper.CommonWrapper, rest, /*#__PURE__*/
61
61
  _react.default.createElement("div", {
62
+ id: id,
62
63
  "data-tid": MenuFooterDataTids.root,
63
64
  className: (0, _Emotion.cx)(getRootSizeClassName(), (_cx = {}, _cx[
64
65
  _MenuFooter.styles.root(theme)] = true, _cx[
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuFooter.tsx"],"names":["MenuFooterDataTids","root","MenuFooter","_enableIconPadding","children","size","rest","theme","ThemeContext","getRootSizeClassName","styles","rootLarge","rootMedium","rootSmall","getWithLeftPaddingSizeClassName","withLeftPaddingSmall","withLeftPaddingMedium","__KONTUR_REACT_UI__","displayName","__MENU_FOOTER__","isMenuFooter","child","isValidElement","Object","prototype","hasOwnProperty","call","type"],"mappings":"0bAAA;;AAEA;AACA;AACA;;;AAGA,iD;;;;;;;;;;;;;;AAcO,IAAMA,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,kBAD0B,EAA3B;;;AAIP;AACA;AACA;AACA;AACA;AACA;AACA,G;AACA,SAASC,UAAT,OAAwG,0CAAlFC,kBAAkF,CAAlFA,kBAAkF,sCAA7D,KAA6D,yBAAtDC,QAAsD,QAAtDA,QAAsD,kBAA5CC,IAA4C,CAA5CA,IAA4C,0BAArC,OAAqC,aAAzBC,IAAyB;AACtG,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA,WAASC,oBAAT,GAAgC;AAC9B,YAAQJ,IAAR;AACE,WAAK,OAAL;AACE,eAAOK,mBAAOC,SAAP,CAAiBJ,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOG,mBAAOE,UAAP,CAAkBL,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOG,mBAAOG,SAAP,CAAiBN,KAAjB,CAAP,CAPJ;;AASD;AACD,WAASO,+BAAT,GAA2C;AACzC,YAAQT,IAAR;AACE,WAAK,OAAL;AACE,eAAOK,mBAAOK,oBAAP,CAA4BR,KAA5B,CAAP;AACF,WAAK,QAAL;AACE,eAAOG,mBAAOM,qBAAP,CAA6BT,KAA7B,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOG,mBAAOK,oBAAP,CAA4BR,KAA5B,CAAP,CAPJ;;AASD;;AAED;AACE,iCAAC,4BAAD,EAAmBD,IAAnB;AACE;AACE,kBAAUN,kBAAkB,CAACC,IAD/B;AAEE,MAAA,SAAS,EAAE,iBAAGQ,oBAAoB,EAAvB;AACRC,yBAAOT,IAAP,CAAYM,KAAZ,CADQ,IACa,IADb;AAERO,MAAAA,+BAA+B,EAFvB,IAE4BX,kBAF5B,OAFb;;;AAOGC,IAAAA,QAPH,CADF,CADF;;;;AAaD;;AAEDF,UAAU,CAACe,mBAAX,GAAiC,YAAjC;AACAf,UAAU,CAACgB,WAAX,GAAyB,YAAzB;AACAhB,UAAU,CAACiB,eAAX,GAA6B,IAA7B;;;;AAIO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAA0E;AACpG,SAAO,4BAAMC,cAAN,CAAsCD,KAAtC;AACHE,EAAAA,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCL,KAAK,CAACM,IAA3C,EAAiD,iBAAjD,CADG;AAEH,OAFJ;AAGD,CAJM,C","sourcesContent":["import React, { ReactNode, useContext } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './MenuFooter.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuFooterSize = SizeProp;\n\nexport interface MenuFooterProps extends CommonProps {\n _enableIconPadding?: boolean;\n children: ReactNode;\n /** Размер */\n size?: SizeProp;\n}\n\nexport const MenuFooterDataTids = {\n root: 'MenuFooter__root',\n} as const;\n\n/**\n * Футер меню.\n *\n * _Примечание_: `футер меню`, в отличие от `элемента меню` нельзя затаргетить с клавиатуры.\n *\n * Сущности в которых может быть использован `MenuFooter`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\nfunction MenuFooter({ _enableIconPadding = false, children, size = 'small', ...rest }: MenuFooterProps) {\n const theme = useContext(ThemeContext);\n\n function getRootSizeClassName() {\n switch (size) {\n case 'large':\n return styles.rootLarge(theme);\n case 'medium':\n return styles.rootMedium(theme);\n case 'small':\n default:\n return styles.rootSmall(theme);\n }\n }\n function getWithLeftPaddingSizeClassName() {\n switch (size) {\n case 'large':\n return styles.withLeftPaddingSmall(theme);\n case 'medium':\n return styles.withLeftPaddingMedium(theme);\n case 'small':\n default:\n return styles.withLeftPaddingSmall(theme);\n }\n }\n\n return (\n <CommonWrapper {...rest}>\n <div\n data-tid={MenuFooterDataTids.root}\n className={cx(getRootSizeClassName(), {\n [styles.root(theme)]: true,\n [getWithLeftPaddingSizeClassName()]: _enableIconPadding,\n })}\n >\n {children}\n </div>\n </CommonWrapper>\n );\n}\n\nMenuFooter.__KONTUR_REACT_UI__ = 'MenuFooter';\nMenuFooter.displayName = 'MenuFooter';\nMenuFooter.__MENU_FOOTER__ = true;\n\nexport { MenuFooter };\n\nexport const isMenuFooter = (child: React.ReactNode): child is React.ReactElement<MenuFooterProps> => {\n return React.isValidElement<MenuFooterProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__MENU_FOOTER__')\n : false;\n};\n"]}
1
+ {"version":3,"sources":["MenuFooter.tsx"],"names":["MenuFooterDataTids","root","MenuFooter","id","_enableIconPadding","children","size","rest","theme","ThemeContext","getRootSizeClassName","styles","rootLarge","rootMedium","rootSmall","getWithLeftPaddingSizeClassName","withLeftPaddingSmall","withLeftPaddingMedium","__KONTUR_REACT_UI__","displayName","__MENU_FOOTER__","isMenuFooter","child","isValidElement","Object","prototype","hasOwnProperty","call","type"],"mappings":"0bAAA;;AAEA;AACA;AACA;;;AAGA,iD;;;;;;;;;;;;;;AAcO,IAAMA,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,kBAD0B,EAA3B;;;AAIP;AACA;AACA;AACA;AACA;AACA;AACA,G;AACA,SAASC,UAAT,OAA4G,aAAtFC,EAAsF,QAAtFA,EAAsF,8BAAlFC,kBAAkF,CAAlFA,kBAAkF,sCAA7D,KAA6D,yBAAtDC,QAAsD,QAAtDA,QAAsD,kBAA5CC,IAA4C,CAA5CA,IAA4C,0BAArC,OAAqC,aAAzBC,IAAyB;AAC1G,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;;AAEA,WAASC,oBAAT,GAAgC;AAC9B,YAAQJ,IAAR;AACE,WAAK,OAAL;AACE,eAAOK,mBAAOC,SAAP,CAAiBJ,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOG,mBAAOE,UAAP,CAAkBL,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOG,mBAAOG,SAAP,CAAiBN,KAAjB,CAAP,CAPJ;;AASD;AACD,WAASO,+BAAT,GAA2C;AACzC,YAAQT,IAAR;AACE,WAAK,OAAL;AACE,eAAOK,mBAAOK,oBAAP,CAA4BR,KAA5B,CAAP;AACF,WAAK,QAAL;AACE,eAAOG,mBAAOM,qBAAP,CAA6BT,KAA7B,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOG,mBAAOK,oBAAP,CAA4BR,KAA5B,CAAP,CAPJ;;AASD;;AAED;AACE,iCAAC,4BAAD,EAAmBD,IAAnB;AACE;AACE,MAAA,EAAE,EAAEJ,EADN;AAEE,kBAAUH,kBAAkB,CAACC,IAF/B;AAGE,MAAA,SAAS,EAAE,iBAAGS,oBAAoB,EAAvB;AACRC,yBAAOV,IAAP,CAAYO,KAAZ,CADQ,IACa,IADb;AAERO,MAAAA,+BAA+B,EAFvB,IAE4BX,kBAF5B,OAHb;;;AAQGC,IAAAA,QARH,CADF,CADF;;;;AAcD;;AAEDH,UAAU,CAACgB,mBAAX,GAAiC,YAAjC;AACAhB,UAAU,CAACiB,WAAX,GAAyB,YAAzB;AACAjB,UAAU,CAACkB,eAAX,GAA6B,IAA7B;;;;AAIO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAA0E;AACpG,SAAO,4BAAMC,cAAN,CAAsCD,KAAtC;AACHE,EAAAA,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCL,KAAK,CAACM,IAA3C,EAAiD,iBAAjD,CADG;AAEH,OAFJ;AAGD,CAJM,C","sourcesContent":["import React, { HTMLAttributes, ReactNode, useContext } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { SizeProp } from '../../lib/types/props';\n\nimport { styles } from './MenuFooter.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuFooterSize = SizeProp;\n\nexport interface MenuFooterProps extends CommonProps, Pick<HTMLAttributes<HTMLElement>, 'id'> {\n _enableIconPadding?: boolean;\n children: ReactNode;\n /** Размер */\n size?: SizeProp;\n}\n\nexport const MenuFooterDataTids = {\n root: 'MenuFooter__root',\n} as const;\n\n/**\n * Футер меню.\n *\n * _Примечание_: `футер меню`, в отличие от `элемента меню` нельзя затаргетить с клавиатуры.\n *\n * Сущности в которых может быть использован `MenuFooter`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\nfunction MenuFooter({ id, _enableIconPadding = false, children, size = 'small', ...rest }: MenuFooterProps) {\n const theme = useContext(ThemeContext);\n\n function getRootSizeClassName() {\n switch (size) {\n case 'large':\n return styles.rootLarge(theme);\n case 'medium':\n return styles.rootMedium(theme);\n case 'small':\n default:\n return styles.rootSmall(theme);\n }\n }\n function getWithLeftPaddingSizeClassName() {\n switch (size) {\n case 'large':\n return styles.withLeftPaddingSmall(theme);\n case 'medium':\n return styles.withLeftPaddingMedium(theme);\n case 'small':\n default:\n return styles.withLeftPaddingSmall(theme);\n }\n }\n\n return (\n <CommonWrapper {...rest}>\n <div\n id={id}\n data-tid={MenuFooterDataTids.root}\n className={cx(getRootSizeClassName(), {\n [styles.root(theme)]: true,\n [getWithLeftPaddingSizeClassName()]: _enableIconPadding,\n })}\n >\n {children}\n </div>\n </CommonWrapper>\n );\n}\n\nMenuFooter.__KONTUR_REACT_UI__ = 'MenuFooter';\nMenuFooter.displayName = 'MenuFooter';\nMenuFooter.__MENU_FOOTER__ = true;\n\nexport { MenuFooter };\n\nexport const isMenuFooter = (child: React.ReactNode): child is React.ReactElement<MenuFooterProps> => {\n return React.isValidElement<MenuFooterProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__MENU_FOOTER__')\n : false;\n};\n"]}
@@ -1,11 +1,11 @@
1
- import React, { ReactNode } from 'react';
1
+ import React, { HTMLAttributes, ReactNode } from 'react';
2
2
  import { CommonProps } from '../../internal/CommonWrapper';
3
3
  import { SizeProp } from '../../lib/types/props';
4
4
  /**
5
5
  * @deprecated use SizeProp
6
6
  */
7
7
  export declare type MenuHeaderSize = SizeProp;
8
- export interface MenuHeaderProps extends CommonProps {
8
+ export interface MenuHeaderProps extends CommonProps, Pick<HTMLAttributes<HTMLElement>, 'id'> {
9
9
  _enableIconPadding?: boolean;
10
10
  children: ReactNode;
11
11
  /** Размер */
@@ -21,7 +21,7 @@ export declare const MenuHeaderDataTids: {
21
21
  *
22
22
  * Сущности в которых может быть использован `MenuHeader`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).
23
23
  */
24
- declare function MenuHeader({ _enableIconPadding, children, size, ...rest }: MenuHeaderProps): JSX.Element;
24
+ declare function MenuHeader({ id, _enableIconPadding, children, size, ...rest }: MenuHeaderProps): JSX.Element;
25
25
  declare namespace MenuHeader {
26
26
  var __KONTUR_REACT_UI__: string;
27
27
  var displayName: string;
@@ -6,7 +6,7 @@ var _Emotion = require("../../lib/theming/Emotion");
6
6
 
7
7
  var _MenuContext = require("../../internal/Menu/MenuContext");
8
8
 
9
- var _MenuHeader = require("./MenuHeader.styles");var _excluded = ["_enableIconPadding", "children", "size"];
9
+ var _MenuHeader = require("./MenuHeader.styles");var _excluded = ["id", "_enableIconPadding", "children", "size"];
10
10
 
11
11
 
12
12
 
@@ -31,7 +31,7 @@ var MenuHeaderDataTids = {
31
31
  *
32
32
  * Сущности в которых может быть использован `MenuHeader`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).
33
33
  */exports.MenuHeaderDataTids = MenuHeaderDataTids;
34
- function MenuHeader(_ref) {var _cx;var _ref$_enableIconPaddi = _ref._enableIconPadding,_enableIconPadding = _ref$_enableIconPaddi === void 0 ? false : _ref$_enableIconPaddi,children = _ref.children,_ref$size = _ref.size,size = _ref$size === void 0 ? 'small' : _ref$size,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
34
+ function MenuHeader(_ref) {var _cx;var id = _ref.id,_ref$_enableIconPaddi = _ref._enableIconPadding,_enableIconPadding = _ref$_enableIconPaddi === void 0 ? false : _ref$_enableIconPaddi,children = _ref.children,_ref$size = _ref.size,size = _ref$size === void 0 ? 'small' : _ref$size,rest = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
35
35
  var theme = (0, _react.useContext)(_ThemeContext.ThemeContext);
36
36
  var menuContext = (0, _react.useContext)(_MenuContext.MenuContext);
37
37
 
@@ -61,6 +61,7 @@ function MenuHeader(_ref) {var _cx;var _ref$_enableIconPaddi = _ref._enableIconP
61
61
  return /*#__PURE__*/(
62
62
  _react.default.createElement(_CommonWrapper.CommonWrapper, rest, /*#__PURE__*/
63
63
  _react.default.createElement("div", {
64
+ id: id,
64
65
  "data-tid": MenuHeaderDataTids.root,
65
66
  className: (0, _Emotion.cx)(getRootSizeClassName(), (_cx = {}, _cx[
66
67
  _MenuHeader.styles.root(theme)] = true, _cx[
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuHeader.tsx"],"names":["MenuHeaderDataTids","root","MenuHeader","_enableIconPadding","children","size","rest","theme","ThemeContext","menuContext","MenuContext","getRootSizeClassName","styles","rootLarge","rootMedium","rootSmall","getWithLeftPaddingSizeClassName","withLeftPaddingSmall","withLeftPaddingMedium","enableIconPadding","__KONTUR_REACT_UI__","displayName","__MENU_HEADER__","isMenuHeader","child","isValidElement","Object","prototype","hasOwnProperty","call","type"],"mappings":"0bAAA;;AAEA;AACA;AACA;;AAEA;;AAEA,iD;;;;;;;;;;;;;;AAcO,IAAMA,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,kBAD0B,EAA3B;;;AAIP;AACA;AACA;AACA;AACA;AACA;AACA,G;AACA,SAASC,UAAT,OAAwG,0CAAlFC,kBAAkF,CAAlFA,kBAAkF,sCAA7D,KAA6D,yBAAtDC,QAAsD,QAAtDA,QAAsD,kBAA5CC,IAA4C,CAA5CA,IAA4C,0BAArC,OAAqC,aAAzBC,IAAyB;AACtG,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,WAAW,GAAG,uBAAWC,wBAAX,CAApB;;AAEA,WAASC,oBAAT,GAAgC;AAC9B,YAAQN,IAAR;AACE,WAAK,OAAL;AACE,eAAOO,mBAAOC,SAAP,CAAiBN,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOK,mBAAOE,UAAP,CAAkBP,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOK,mBAAOG,SAAP,CAAiBR,KAAjB,CAAP,CAPJ;;AASD;AACD,WAASS,+BAAT,GAA2C;AACzC,YAAQX,IAAR;AACE,WAAK,OAAL;AACE,eAAOO,mBAAOK,oBAAP,CAA4BV,KAA5B,CAAP;AACF,WAAK,QAAL;AACE,eAAOK,mBAAOM,qBAAP,CAA6BX,KAA7B,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOK,mBAAOK,oBAAP,CAA4BV,KAA5B,CAAP,CAPJ;;AASD;;AAED;AACE,iCAAC,4BAAD,EAAmBD,IAAnB;AACE;AACE,kBAAUN,kBAAkB,CAACC,IAD/B;AAEE,MAAA,SAAS,EAAE,iBAAGU,oBAAoB,EAAvB;AACRC,yBAAOX,IAAP,CAAYM,KAAZ,CADQ,IACa,IADb;AAERS,MAAAA,+BAA+B,EAFvB,IAE4BP,WAAW,CAACU,iBAAZ,IAAiChB,kBAF7D,OAFb;;;AAOGC,IAAAA,QAPH,CADF,CADF;;;;AAaD;;AAEDF,UAAU,CAACkB,mBAAX,GAAiC,YAAjC;AACAlB,UAAU,CAACmB,WAAX,GAAyB,YAAzB;AACAnB,UAAU,CAACoB,eAAX,GAA6B,IAA7B;;;;AAIO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAA0E;AACpG,SAAO,4BAAMC,cAAN,CAAsCD,KAAtC;AACHE,EAAAA,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCL,KAAK,CAACM,IAA3C,EAAiD,iBAAjD,CADG;AAEH,OAFJ;AAGD,CAJM,C","sourcesContent":["import React, { ReactNode, useContext } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext } from '../../internal/Menu/MenuContext';\n\nimport { styles } from './MenuHeader.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuHeaderSize = SizeProp;\n\nexport interface MenuHeaderProps extends CommonProps {\n _enableIconPadding?: boolean;\n children: ReactNode;\n /** Размер */\n size?: SizeProp;\n}\n\nexport const MenuHeaderDataTids = {\n root: 'MenuHeader__root',\n} as const;\n\n/**\n * `Заголовок меню` используется для того, чтобы разделить `элементы меню` на категории в рамках одного меню.\n *\n * _Примечание_: `заголовок меню`, в отличие от `элемента меню` нельзя затаргетить с клавиатуры.\n *\n * Сущности в которых может быть использован `MenuHeader`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\nfunction MenuHeader({ _enableIconPadding = false, children, size = 'small', ...rest }: MenuHeaderProps) {\n const theme = useContext(ThemeContext);\n const menuContext = useContext(MenuContext);\n\n function getRootSizeClassName() {\n switch (size) {\n case 'large':\n return styles.rootLarge(theme);\n case 'medium':\n return styles.rootMedium(theme);\n case 'small':\n default:\n return styles.rootSmall(theme);\n }\n }\n function getWithLeftPaddingSizeClassName() {\n switch (size) {\n case 'large':\n return styles.withLeftPaddingSmall(theme);\n case 'medium':\n return styles.withLeftPaddingMedium(theme);\n case 'small':\n default:\n return styles.withLeftPaddingSmall(theme);\n }\n }\n\n return (\n <CommonWrapper {...rest}>\n <div\n data-tid={MenuHeaderDataTids.root}\n className={cx(getRootSizeClassName(), {\n [styles.root(theme)]: true,\n [getWithLeftPaddingSizeClassName()]: menuContext.enableIconPadding || _enableIconPadding,\n })}\n >\n {children}\n </div>\n </CommonWrapper>\n );\n}\n\nMenuHeader.__KONTUR_REACT_UI__ = 'MenuHeader';\nMenuHeader.displayName = 'MenuHeader';\nMenuHeader.__MENU_HEADER__ = true;\n\nexport { MenuHeader };\n\nexport const isMenuHeader = (child: React.ReactNode): child is React.ReactElement<MenuHeaderProps> => {\n return React.isValidElement<MenuHeaderProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__MENU_HEADER__')\n : false;\n};\n"]}
1
+ {"version":3,"sources":["MenuHeader.tsx"],"names":["MenuHeaderDataTids","root","MenuHeader","id","_enableIconPadding","children","size","rest","theme","ThemeContext","menuContext","MenuContext","getRootSizeClassName","styles","rootLarge","rootMedium","rootSmall","getWithLeftPaddingSizeClassName","withLeftPaddingSmall","withLeftPaddingMedium","enableIconPadding","__KONTUR_REACT_UI__","displayName","__MENU_HEADER__","isMenuHeader","child","isValidElement","Object","prototype","hasOwnProperty","call","type"],"mappings":"0bAAA;;AAEA;AACA;AACA;;AAEA;;AAEA,iD;;;;;;;;;;;;;;AAcO,IAAMA,kBAAkB,GAAG;AAChCC,EAAAA,IAAI,EAAE,kBAD0B,EAA3B;;;AAIP;AACA;AACA;AACA;AACA;AACA;AACA,G;AACA,SAASC,UAAT,OAA4G,aAAtFC,EAAsF,QAAtFA,EAAsF,8BAAlFC,kBAAkF,CAAlFA,kBAAkF,sCAA7D,KAA6D,yBAAtDC,QAAsD,QAAtDA,QAAsD,kBAA5CC,IAA4C,CAA5CA,IAA4C,0BAArC,OAAqC,aAAzBC,IAAyB;AAC1G,MAAMC,KAAK,GAAG,uBAAWC,0BAAX,CAAd;AACA,MAAMC,WAAW,GAAG,uBAAWC,wBAAX,CAApB;;AAEA,WAASC,oBAAT,GAAgC;AAC9B,YAAQN,IAAR;AACE,WAAK,OAAL;AACE,eAAOO,mBAAOC,SAAP,CAAiBN,KAAjB,CAAP;AACF,WAAK,QAAL;AACE,eAAOK,mBAAOE,UAAP,CAAkBP,KAAlB,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOK,mBAAOG,SAAP,CAAiBR,KAAjB,CAAP,CAPJ;;AASD;AACD,WAASS,+BAAT,GAA2C;AACzC,YAAQX,IAAR;AACE,WAAK,OAAL;AACE,eAAOO,mBAAOK,oBAAP,CAA4BV,KAA5B,CAAP;AACF,WAAK,QAAL;AACE,eAAOK,mBAAOM,qBAAP,CAA6BX,KAA7B,CAAP;AACF,WAAK,OAAL;AACA;AACE,eAAOK,mBAAOK,oBAAP,CAA4BV,KAA5B,CAAP,CAPJ;;AASD;;AAED;AACE,iCAAC,4BAAD,EAAmBD,IAAnB;AACE;AACE,MAAA,EAAE,EAAEJ,EADN;AAEE,kBAAUH,kBAAkB,CAACC,IAF/B;AAGE,MAAA,SAAS,EAAE,iBAAGW,oBAAoB,EAAvB;AACRC,yBAAOZ,IAAP,CAAYO,KAAZ,CADQ,IACa,IADb;AAERS,MAAAA,+BAA+B,EAFvB,IAE4BP,WAAW,CAACU,iBAAZ,IAAiChB,kBAF7D,OAHb;;;AAQGC,IAAAA,QARH,CADF,CADF;;;;AAcD;;AAEDH,UAAU,CAACmB,mBAAX,GAAiC,YAAjC;AACAnB,UAAU,CAACoB,WAAX,GAAyB,YAAzB;AACApB,UAAU,CAACqB,eAAX,GAA6B,IAA7B;;;;AAIO,IAAMC,YAAY,GAAG,SAAfA,YAAe,CAACC,KAAD,EAA0E;AACpG,SAAO,4BAAMC,cAAN,CAAsCD,KAAtC;AACHE,EAAAA,MAAM,CAACC,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCL,KAAK,CAACM,IAA3C,EAAiD,iBAAjD,CADG;AAEH,OAFJ;AAGD,CAJM,C","sourcesContent":["import React, { HTMLAttributes, ReactNode, useContext } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext } from '../../internal/Menu/MenuContext';\n\nimport { styles } from './MenuHeader.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuHeaderSize = SizeProp;\n\nexport interface MenuHeaderProps extends CommonProps, Pick<HTMLAttributes<HTMLElement>, 'id'> {\n _enableIconPadding?: boolean;\n children: ReactNode;\n /** Размер */\n size?: SizeProp;\n}\n\nexport const MenuHeaderDataTids = {\n root: 'MenuHeader__root',\n} as const;\n\n/**\n * `Заголовок меню` используется для того, чтобы разделить `элементы меню` на категории в рамках одного меню.\n *\n * _Примечание_: `заголовок меню`, в отличие от `элемента меню` нельзя затаргетить с клавиатуры.\n *\n * Сущности в которых может быть использован `MenuHeader`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\nfunction MenuHeader({ id, _enableIconPadding = false, children, size = 'small', ...rest }: MenuHeaderProps) {\n const theme = useContext(ThemeContext);\n const menuContext = useContext(MenuContext);\n\n function getRootSizeClassName() {\n switch (size) {\n case 'large':\n return styles.rootLarge(theme);\n case 'medium':\n return styles.rootMedium(theme);\n case 'small':\n default:\n return styles.rootSmall(theme);\n }\n }\n function getWithLeftPaddingSizeClassName() {\n switch (size) {\n case 'large':\n return styles.withLeftPaddingSmall(theme);\n case 'medium':\n return styles.withLeftPaddingMedium(theme);\n case 'small':\n default:\n return styles.withLeftPaddingSmall(theme);\n }\n }\n\n return (\n <CommonWrapper {...rest}>\n <div\n id={id}\n data-tid={MenuHeaderDataTids.root}\n className={cx(getRootSizeClassName(), {\n [styles.root(theme)]: true,\n [getWithLeftPaddingSizeClassName()]: menuContext.enableIconPadding || _enableIconPadding,\n })}\n >\n {children}\n </div>\n </CommonWrapper>\n );\n}\n\nMenuHeader.__KONTUR_REACT_UI__ = 'MenuHeader';\nMenuHeader.displayName = 'MenuHeader';\nMenuHeader.__MENU_HEADER__ = true;\n\nexport { MenuHeader };\n\nexport const isMenuHeader = (child: React.ReactNode): child is React.ReactElement<MenuHeaderProps> => {\n return React.isValidElement<MenuHeaderProps>(child)\n ? Object.prototype.hasOwnProperty.call(child.type, '__MENU_HEADER__')\n : false;\n};\n"]}
@@ -1,4 +1,4 @@
1
- import React, { AriaAttributes } from 'react';
1
+ import React, { AriaAttributes, HTMLAttributes } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { CommonProps } from '../../internal/CommonWrapper';
4
4
  import { SizeProp } from '../../lib/types/props';
@@ -8,7 +8,7 @@ import { MenuContextType } from '../../internal/Menu/MenuContext';
8
8
  */
9
9
  export declare type MenuItemSize = SizeProp;
10
10
  export declare type MenuItemState = null | 'hover' | 'selected' | void;
11
- export interface MenuItemProps extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Omit<CommonProps, 'children'> {
11
+ export interface MenuItemProps extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Omit<CommonProps, 'children'> {
12
12
  /**
13
13
  * @ignore
14
14
  */
@@ -104,6 +104,7 @@ var _MenuItem = require("./MenuItem.styles");var _excluded = ["link", "comment",
104
104
 
105
105
 
106
106
 
107
+
107
108
 
108
109
 
109
110
  var MenuItemDataTids = {
@@ -1 +1 @@
1
- {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","content","comment","MenuItem","rootNode","state","iconOffsetTop","highlighted","mouseEntered","rootRef","contentRef","React","createRef","highlight","setState","unhighlight","select","event","handleClick","isEnabled","props","disabled","navigate","href","target","window","open","location","renderMain","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rel","isNotSelectable","rest","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","menuItemsAtAnyLevel","navigation","onClick","onItemClick","element","hasIconAmongItems","items","some","item","render","flags","setRootNode","componentDidMount","globalObject","getComputedStyle","getPropertyValue","current","add","setEnableIconPadding","componentWillUnmount","remove","componentDidUpdate","prevProps","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","__KONTUR_REACT_UI__","displayName","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","func","contextType","MenuContext","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext, MenuContextType } from '../../internal/Menu/MenuContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n /**\n * Запрещает выделение и выбор данного пункта меню\n *\n */\n isNotSelectable?: boolean;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n content: 'MenuItem__content',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static displayName = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n highlighted: false,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n private contentRef = React.createRef<HTMLElement>();\n private menuItemsAtAnyLevel?: boolean;\n static contextType = MenuContext;\n\n public context!: MenuContextType;\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n if (this.props.icon && this.menuItemsAtAnyLevel) {\n this.context.setEnableIconPadding?.(true);\n }\n }\n\n public componentWillUnmount() {\n if (this.contentRef.current && this.menuItemsAtAnyLevel) {\n !this.props.isNotSelectable && this.context.navigation?.remove(this.contentRef.current);\n this.context.setEnableIconPadding?.(this.hasIconAmongItems());\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<MenuItemProps>) {\n if (prevProps.icon !== this.props.icon) {\n this.context.setEnableIconPadding?.(!!this.props.icon || this.hasIconAmongItems());\n }\n if (\n this.contentRef.current &&\n this.menuItemsAtAnyLevel &&\n prevProps.isNotSelectable !== this.props.isNotSelectable\n ) {\n if (this.props.isNotSelectable) {\n this.unhighlight();\n this.context.navigation?.remove(this.contentRef.current);\n } else {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n }\n }\n\n public highlight = () => {\n this.setState({ highlighted: true });\n };\n\n public unhighlight = () => {\n this.setState({ highlighted: false });\n };\n\n public select = (event: React.SyntheticEvent<HTMLElement>) => {\n this.handleClick(event as React.MouseEvent<HTMLElement>);\n };\n\n public isEnabled = () => {\n return !this.props.disabled;\n };\n\n public navigate = () => {\n if (!this.props.href) {\n return;\n }\n if (this.props.target) {\n window.open(this.props.href, this.props.target);\n } else {\n location.href = this.props.href;\n }\n };\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n isNotSelectable,\n ...rest\n } = props;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding || this.context.enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={this.activeState}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n ref={this.contentRef}\n data-tid={MenuItemDataTids.content}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\n }\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered) {\n this.mouseEntered = true;\n this.props.onMouseEnter?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.highlight(this);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n this.props.onMouseLeave?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.unhighlight();\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (this.props.isNotSelectable) {\n return;\n }\n this.props.onClick?.(e);\n if (this.menuItemsAtAnyLevel) {\n this.context.onItemClick?.(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n\n private hasIconAmongItems = () => {\n return Boolean(this.context.navigation?.items.some((item) => item.props.icon));\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
1
+ {"version":3,"sources":["MenuItem.tsx"],"names":["MenuItemDataTids","root","content","comment","MenuItem","rootNode","state","iconOffsetTop","highlighted","mouseEntered","rootRef","contentRef","React","createRef","highlight","setState","unhighlight","select","event","handleClick","isEnabled","props","disabled","navigate","href","target","window","open","location","renderMain","link","icon","loose","size","_enableIconPadding","component","onMouseEnter","onMouseLeave","isMobile","rel","isNotSelectable","rest","iconElement","top","styles","theme","getIconSizeClassName","className","getRootSizeClassName","rootMobile","hover","isHover","selected","isSelected","getWithIconSizeClassName","Boolean","context","enableIconPadding","children","Component","getComponent","setRootRef","activeState","handleMouseEnterFix","handleMouseLeave","undefined","mobileContentWithIcon","commentHover","e","menuItemsAtAnyLevel","navigation","onClick","onItemClick","element","hasIconAmongItems","items","some","item","render","flags","setRootNode","componentDidMount","globalObject","getComputedStyle","getPropertyValue","current","add","setEnableIconPadding","componentWillUnmount","remove","componentDidUpdate","prevProps","rootLarge","rootMedium","rootSmall","iconLarge","iconMedium","iconSmall","withIconLarge","withIconMedium","withIconSmall","__KONTUR_REACT_UI__","displayName","__MENU_ITEM__","propTypes","PropTypes","node","bool","string","func","contextType","MenuContext","isMenuItem"],"mappings":"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","sourcesContent":["// TODO: Enable this rule in functional components.\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport React, { AriaAttributes, HTMLAttributes } from 'react';\nimport PropTypes from 'prop-types';\nimport { globalObject, isBrowser } from '@skbkontur/global-object';\n\nimport { Nullable } from '../../typings/utility-types';\nimport { isExternalLink, isFunction, isNonNullable, isReactUIComponent } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { SizeProp } from '../../lib/types/props';\nimport { MenuContext, MenuContextType } from '../../internal/Menu/MenuContext';\nimport { getFullReactUIFlagsContext, ReactUIFeatureFlagsContext } from '../../lib/featureFlagsContext';\nimport { getVisualStateDataAttributes } from '../../internal/CommonWrapper/utils/getVisualStateDataAttributes';\n\nimport { styles } from './MenuItem.styles';\n\n/**\n * @deprecated use SizeProp\n */\nexport type MenuItemSize = SizeProp;\n\nexport type MenuItemState = null | 'hover' | 'selected' | void;\n\nexport interface MenuItemProps\n extends Pick<AriaAttributes, 'aria-describedby' | 'aria-label'>,\n Pick<HTMLAttributes<HTMLElement>, 'id'>,\n Omit<CommonProps, 'children'> {\n /**\n * @ignore\n */\n _enableIconPadding?: boolean;\n /**\n * Добавляет описание для элемента меню.\n */\n comment?: React.ReactNode;\n /**\n * Отключенное состояние.\n */\n disabled?: boolean;\n /**\n * Добавляет элементу меню иконку.\n */\n icon?: React.ReactElement<any>;\n /**\n * Меняет цвет текста на синий.\n */\n link?: boolean;\n /**\n * Размер\n */\n size?: SizeProp;\n /**\n * @ignore\n */\n loose?: boolean;\n /**\n * @ignore\n */\n state?: MenuItemState;\n /**\n * HTML-событие `onclick`.\n */\n onClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n /**\n * HTML-событие `mouseenter`.\n */\n onMouseEnter?: React.MouseEventHandler;\n /**\n * HTML-событие `mouseleave`.\n */\n onMouseLeave?: React.MouseEventHandler;\n children?: React.ReactNode | ((state: MenuItemState) => React.ReactNode);\n /**\n * HTML-атрибут `target`.\n */\n target?: React.AnchorHTMLAttributes<HTMLAnchorElement>['target'];\n /**\n * HTML-атрибут `title`.\n */\n title?: React.AnchorHTMLAttributes<HTMLAnchorElement>['title'];\n /**\n * HTML-атрибут `href`.\n */\n href?: React.AnchorHTMLAttributes<HTMLAnchorElement>['href'];\n /**\n * HTML-атрибут `rel`.\n *\n * Для внешних ссылок аттрибут rel по умолчанию равен \"noopener noreferrer\"\n */\n rel?: React.AnchorHTMLAttributes<HTMLAnchorElement>['rel'];\n /**\n * Заменяет корневой элемент, на компонент переданный в проп.\n *\n * По умолчанию корневой элемент рендерится как `button`. <br />Если передан `href`, то вместо `button` рендерится `a`.\n */\n component?: React.ComponentType<any>;\n /**\n * Запрещает выделение и выбор данного пункта меню\n *\n */\n isNotSelectable?: boolean;\n\n isMobile?: boolean;\n}\n\nexport const MenuItemDataTids = {\n root: 'MenuItem__root',\n content: 'MenuItem__content',\n comment: 'MenuItem__comment',\n} as const;\n\n/**\n *\n * `MenuItem` - это вложенный компонент, задающий базовые стили для элемента меню и позволяющий навигироваться по элементам меню с помощью клавиатуры.\n *\n * Сущности в которых может быть использован `MenuItem`: [DropdownMenu](#/Components/DropdownMenu), [Kebab](#/Components/Kebab), [TooltipMenu](#/Components/TooltipMenu) и [Select](#/Components/Select).\n */\n@rootNode\nexport class MenuItem extends React.Component<MenuItemProps> {\n public static __KONTUR_REACT_UI__ = 'MenuItem';\n public static displayName = 'MenuItem';\n public static __MENU_ITEM__ = true;\n\n public static propTypes = {\n comment: PropTypes.node,\n\n disabled: PropTypes.bool,\n\n href: PropTypes.string,\n\n icon: PropTypes.node,\n\n loose: PropTypes.bool,\n\n state: PropTypes.string,\n\n target: PropTypes.string,\n\n onClick: PropTypes.func,\n\n size: PropTypes.string,\n };\n\n public state = {\n iconOffsetTop: 0,\n highlighted: false,\n };\n\n private theme!: Theme;\n private mouseEntered = false;\n private setRootNode!: TSetRootNode;\n private rootRef: Nullable<HTMLElement> = null;\n private contentRef = React.createRef<HTMLElement>();\n private menuItemsAtAnyLevel?: boolean;\n static contextType = MenuContext;\n\n public context!: MenuContextType;\n\n public render() {\n return (\n <ReactUIFeatureFlagsContext.Consumer>\n {(flags) => {\n this.menuItemsAtAnyLevel = getFullReactUIFlagsContext(flags).menuItemsAtAnyLevel;\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <CommonWrapper\n rootNodeRef={this.setRootNode}\n {...getVisualStateDataAttributes({\n hover: this.isHover,\n selected: this.isSelected,\n })}\n {...this.props}\n >\n {this.renderMain}\n </CommonWrapper>\n );\n }}\n </ThemeContext.Consumer>\n );\n }}\n </ReactUIFeatureFlagsContext.Consumer>\n );\n }\n\n public componentDidMount() {\n if (this.rootRef && isBrowser(globalObject)) {\n this.setState({ iconOffsetTop: globalObject.getComputedStyle(this.rootRef).getPropertyValue('padding-top') });\n }\n if (this.contentRef.current && this.menuItemsAtAnyLevel && !this.props.isNotSelectable) {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n if (this.props.icon && this.menuItemsAtAnyLevel) {\n this.context.setEnableIconPadding?.(true);\n }\n }\n\n public componentWillUnmount() {\n if (this.contentRef.current && this.menuItemsAtAnyLevel) {\n !this.props.isNotSelectable && this.context.navigation?.remove(this.contentRef.current);\n this.context.setEnableIconPadding?.(this.hasIconAmongItems());\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<MenuItemProps>) {\n if (prevProps.icon !== this.props.icon) {\n this.context.setEnableIconPadding?.(!!this.props.icon || this.hasIconAmongItems());\n }\n if (\n this.contentRef.current &&\n this.menuItemsAtAnyLevel &&\n prevProps.isNotSelectable !== this.props.isNotSelectable\n ) {\n if (this.props.isNotSelectable) {\n this.unhighlight();\n this.context.navigation?.remove(this.contentRef.current);\n } else {\n this.context.navigation?.add(this.contentRef.current, this);\n }\n }\n }\n\n public highlight = () => {\n this.setState({ highlighted: true });\n };\n\n public unhighlight = () => {\n this.setState({ highlighted: false });\n };\n\n public select = (event: React.SyntheticEvent<HTMLElement>) => {\n this.handleClick(event as React.MouseEvent<HTMLElement>);\n };\n\n public isEnabled = () => {\n return !this.props.disabled;\n };\n\n public navigate = () => {\n if (!this.props.href) {\n return;\n }\n if (this.props.target) {\n window.open(this.props.href, this.props.target);\n } else {\n location.href = this.props.href;\n }\n };\n\n private getRootSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.rootLarge(this.theme);\n case 'medium':\n return styles.rootMedium(this.theme);\n case 'small':\n default:\n return styles.rootSmall(this.theme);\n }\n }\n\n private getIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.iconLarge(this.theme);\n case 'medium':\n return styles.iconMedium(this.theme);\n case 'small':\n default:\n return styles.iconSmall(this.theme);\n }\n }\n\n private getWithIconSizeClassName() {\n switch (this.props.size) {\n case 'large':\n return styles.withIconLarge(this.theme);\n case 'medium':\n return styles.withIconMedium(this.theme);\n case 'small':\n default:\n return styles.withIconSmall(this.theme);\n }\n }\n\n private renderMain = (props: CommonWrapperRestProps<MenuItemProps>) => {\n const {\n link,\n comment,\n icon,\n loose,\n state,\n size,\n _enableIconPadding,\n component,\n onMouseEnter,\n onMouseLeave,\n isMobile,\n href,\n disabled,\n rel = this.props.href && isExternalLink(this.props.href) ? 'noopener noreferrer' : this.props.rel,\n isNotSelectable,\n ...rest\n } = props;\n\n let iconElement = null;\n if (icon) {\n iconElement = (\n <div\n style={{ top: this.state.iconOffsetTop }}\n className={cx({\n [styles.icon(this.theme)]: true,\n [this.getIconSizeClassName()]: true,\n })}\n >\n {icon}\n </div>\n );\n }\n\n const className = cx({\n [styles.root(this.theme)]: true,\n [this.getRootSizeClassName()]: true,\n [styles.rootMobile(this.theme)]: isMobile,\n [styles.loose()]: !!loose,\n [styles.hover(this.theme)]: this.isHover,\n [styles.selected(this.theme)]: this.isSelected,\n [styles.link(this.theme)]: !!link,\n [this.getWithIconSizeClassName()]: Boolean(iconElement) || !!_enableIconPadding || this.context.enableIconPadding,\n [styles.disabled(this.theme)]: !!this.props.disabled,\n });\n\n const { children } = this.props;\n\n let content = children;\n if (isFunction(children)) {\n content = children(this.props.state);\n }\n\n const Component = this.getComponent();\n\n return (\n <Component\n ref={this.setRootRef}\n data-tid={MenuItemDataTids.root}\n {...rest}\n disabled={disabled}\n state={this.activeState}\n onMouseOver={this.handleMouseEnterFix}\n onMouseLeave={this.handleMouseLeave}\n onClick={this.handleClick}\n className={className}\n href={href}\n rel={href ? rel : undefined}\n tabIndex={-1}\n >\n {iconElement}\n <span\n className={cx({\n [styles.mobileContentWithIcon()]: isMobile && isNonNullable(icon),\n })}\n ref={this.contentRef}\n data-tid={MenuItemDataTids.content}\n >\n {content}\n </span>\n {this.props.comment && (\n <div\n data-tid={MenuItemDataTids.comment}\n className={cx({\n [styles.comment(this.theme)]: true,\n [styles.commentHover(this.theme)]: this.isHover,\n })}\n >\n {comment}\n </div>\n )}\n </Component>\n );\n };\n\n private get activeState() {\n return this.state.highlighted ? 'hover' : this.props.state;\n }\n\n private get isHover(): boolean {\n return (this.state.highlighted || this.props.state === 'hover') && !this.props.disabled;\n }\n\n private get isSelected(): boolean {\n return this.props.state === 'selected' && !this.state.highlighted;\n }\n\n // https://github.com/facebook/react/issues/10109\n // Mouseenter event not triggered when cursor moves from disabled button\n private handleMouseEnterFix = (e: React.MouseEvent<HTMLElement>) => {\n if (!this.mouseEntered) {\n this.mouseEntered = true;\n this.props.onMouseEnter?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.highlight(this);\n }\n };\n\n private handleMouseLeave = (e: React.MouseEvent<HTMLElement>) => {\n this.mouseEntered = false;\n this.props.onMouseLeave?.(e);\n this.menuItemsAtAnyLevel && !this.props.isNotSelectable && this.context.navigation?.unhighlight();\n };\n\n private handleClick = (e: React.MouseEvent<HTMLElement>) => {\n if (this.props.isNotSelectable) {\n return;\n }\n this.props.onClick?.(e);\n if (this.menuItemsAtAnyLevel) {\n this.context.onItemClick?.(e);\n }\n };\n\n private setRootRef = (element: HTMLElement) => {\n this.rootRef = element;\n };\n\n private getComponent = () => {\n const { disabled, component, href } = this.props;\n\n if (component) {\n return component;\n }\n\n if (disabled) {\n return 'button';\n }\n\n if (href) {\n return 'a';\n }\n\n return 'button';\n };\n\n private hasIconAmongItems = () => {\n return Boolean(this.context.navigation?.items.some((item) => item.props.icon));\n };\n}\n\nexport const isMenuItem = isReactUIComponent('MenuItem');\n"]}
@@ -1,4 +1,4 @@
1
- import React, { ReactNode, ReactPortal, AriaAttributes } from 'react';
1
+ import React, { ReactNode, ReactPortal, AriaAttributes, HTMLAttributes } from 'react';
2
2
  import { ButtonUse } from '../Button';
3
3
  import { DropdownContainerProps } from '../../internal/DropdownContainer';
4
4
  import { Nullable } from '../../typings/utility-types';
@@ -23,7 +23,7 @@ export declare const SelectIds: {
23
23
  readonly menu: "Select__menu";
24
24
  };
25
25
  declare type SelectItem<TValue, TItem> = [TValue, TItem, React.ReactNode?] | TItem | TValue | React.ReactElement | (() => React.ReactElement);
26
- export interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'>, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {
26
+ export interface SelectProps<TValue, TItem> extends CommonProps, Pick<DropdownContainerProps, 'menuPos'>, Pick<HTMLAttributes<HTMLElement>, 'id'>, Pick<AriaAttributes, 'aria-describedby' | 'aria-label'> {
27
27
  /** @ignore */
28
28
  _icon?: React.ReactNode;
29
29
  /** @ignore */
@@ -60,6 +60,7 @@ var _selectTheme = require("./selectTheme");var _dec, _class, _class2, _temp;
60
60
 
61
61
 
62
62
  var PASS_BUTTON_PROPS = {
63
+ id: true,
63
64
  disabled: true,
64
65
  error: true,
65
66
  use: true,
@@ -194,6 +195,7 @@ var SelectIds = {
194
195
 
195
196
 
196
197
 
198
+
197
199
 
198
200
 
199
201
  Select = (_dec = (0, _decorators.locale)('Select', _locale.SelectLocaleHelper), (0, _decorator.responsiveLayout)(_class = (0, _rootNode.rootNode)(_class = _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(Select, _React$Component);function Select() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;_this.