@skbkontur/react-ui 3.12.7 → 3.12.9

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 (115) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +25 -4
  3. package/cjs/components/CurrencyInput/CurrencyInput.js +6 -2
  4. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  5. package/cjs/components/DatePicker/DatePicker.d.ts +1 -1
  6. package/cjs/components/Hint/Hint.d.ts +5 -1
  7. package/cjs/components/Hint/Hint.js +9 -1
  8. package/cjs/components/Hint/Hint.js.map +1 -1
  9. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -1
  10. package/cjs/components/ScrollContainer/ScrollContainer.js +1 -1
  11. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  12. package/cjs/components/Toast/Toast.js.map +1 -1
  13. package/cjs/components/Tooltip/Tooltip.d.ts +4 -2
  14. package/cjs/components/Tooltip/Tooltip.js +11 -8
  15. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  16. package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
  17. package/cjs/internal/CommonWrapper/CommonWrapper.js +20 -6
  18. package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
  19. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
  20. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  21. package/cjs/internal/InternalMenu/InternalMenu.js +22 -8
  22. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  23. package/cjs/internal/Menu/Menu.js +7 -3
  24. package/cjs/internal/Menu/Menu.js.map +1 -1
  25. package/cjs/internal/Popup/Popup.d.ts +2 -2
  26. package/cjs/internal/Popup/Popup.js +29 -21
  27. package/cjs/internal/Popup/Popup.js.map +1 -1
  28. package/cjs/internal/Popup/PopupHelper.d.ts +1 -1
  29. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  30. package/cjs/internal/Popup/PopupPin.d.ts +1 -1
  31. package/cjs/internal/Popup/PopupPin.js.map +1 -1
  32. package/cjs/internal/RenderContainer/RenderContainer.js +10 -0
  33. package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
  34. package/cjs/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
  35. package/cjs/internal/RenderLayer/RenderLayer.d.ts +2 -1
  36. package/cjs/internal/RenderLayer/RenderLayer.js +11 -3
  37. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  38. package/cjs/lib/SSRSafe.d.ts +2 -0
  39. package/cjs/lib/SSRSafe.js +17 -1
  40. package/cjs/lib/SSRSafe.js.map +1 -1
  41. package/cjs/lib/dom/getDOMRect.d.ts +11 -0
  42. package/cjs/lib/dom/getDOMRect.js +36 -0
  43. package/cjs/lib/dom/getDOMRect.js.map +1 -0
  44. package/cjs/lib/instanceWithAnchorElement.d.ts +5 -0
  45. package/cjs/lib/instanceWithAnchorElement.js +9 -0
  46. package/cjs/lib/instanceWithAnchorElement.js.map +1 -0
  47. package/cjs/lib/listenFocusOutside.d.ts +1 -1
  48. package/cjs/lib/listenFocusOutside.js.map +1 -1
  49. package/cjs/lib/rootNode/getRootNode.d.ts +10 -1
  50. package/cjs/lib/rootNode/getRootNode.js +67 -12
  51. package/cjs/lib/rootNode/getRootNode.js.map +1 -1
  52. package/cjs/lib/rootNode/rootNodeDecorator.d.ts +22 -3
  53. package/cjs/lib/rootNode/rootNodeDecorator.js +40 -4
  54. package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
  55. package/cjs/lib/utils.d.ts +7 -0
  56. package/cjs/lib/utils.js +12 -2
  57. package/cjs/lib/utils.js.map +1 -1
  58. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +8 -1
  59. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  60. package/components/DatePicker/DatePicker.d.ts +1 -1
  61. package/components/Hint/Hint/Hint.js +9 -1
  62. package/components/Hint/Hint/Hint.js.map +1 -1
  63. package/components/Hint/Hint.d.ts +5 -1
  64. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +1 -1
  65. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  66. package/components/ScrollContainer/ScrollContainer.d.ts +1 -1
  67. package/components/Toast/Toast/Toast.js.map +1 -1
  68. package/components/Tooltip/Tooltip/Tooltip.js +13 -9
  69. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  70. package/components/Tooltip/Tooltip.d.ts +4 -2
  71. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +22 -7
  72. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
  73. package/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
  74. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  75. package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
  76. package/internal/InternalMenu/InternalMenu/InternalMenu.js +16 -6
  77. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  78. package/internal/Menu/Menu/Menu.js +6 -1
  79. package/internal/Menu/Menu/Menu.js.map +1 -1
  80. package/internal/Popup/Popup/Popup.js +36 -27
  81. package/internal/Popup/Popup/Popup.js.map +1 -1
  82. package/internal/Popup/Popup.d.ts +2 -2
  83. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  84. package/internal/Popup/PopupHelper.d.ts +1 -1
  85. package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
  86. package/internal/Popup/PopupPin.d.ts +1 -1
  87. package/internal/RenderContainer/RenderContainer/RenderContainer.js +9 -0
  88. package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
  89. package/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
  90. package/internal/RenderLayer/RenderLayer/RenderLayer.js +13 -6
  91. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  92. package/internal/RenderLayer/RenderLayer.d.ts +2 -1
  93. package/lib/SSRSafe/SSRSafe.js +14 -0
  94. package/lib/SSRSafe/SSRSafe.js.map +1 -1
  95. package/lib/SSRSafe.d.ts +2 -0
  96. package/lib/dom/getDOMRect/getDOMRect.js +40 -0
  97. package/lib/dom/getDOMRect/getDOMRect.js.map +1 -0
  98. package/lib/dom/getDOMRect/package.json +6 -0
  99. package/lib/dom/getDOMRect.d.ts +11 -0
  100. package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js +3 -0
  101. package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js.map +1 -0
  102. package/lib/instanceWithAnchorElement/package.json +6 -0
  103. package/lib/instanceWithAnchorElement.d.ts +5 -0
  104. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  105. package/lib/listenFocusOutside.d.ts +1 -1
  106. package/lib/rootNode/getRootNode/getRootNode.js +58 -12
  107. package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
  108. package/lib/rootNode/getRootNode.d.ts +10 -1
  109. package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +24 -3
  110. package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
  111. package/lib/rootNode/rootNodeDecorator.d.ts +22 -3
  112. package/lib/utils/utils.js +10 -0
  113. package/lib/utils/utils.js.map +1 -1
  114. package/lib/utils.d.ts +7 -0
  115. package/package.json +12 -9
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","ThemeFactory","DefaultPosition","Popup","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","getRootNode","rootNode","styles","Positions","Tooltip","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","setRootNode","renderContent","content","props","render","refContent","tooltipContent","renderCloseButton","getRenderLayerAnchorElement","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","anchorElement","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getRenderLayerAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private getRenderLayerAnchorElement = () => {\n return getRootNode(this);\n };\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["React","warning","isEqual","ThemeFactory","DefaultPosition","Popup","RenderLayer","CrossIcon","containsTargetOrRenderContainer","ThemeContext","isTestEnv","CommonWrapper","rootNode","styles","Positions","Tooltip","state","opened","focused","theme","hoverTimeout","contentElement","positions","clickedOutside","setRootNode","popupRef","createRef","renderContent","content","props","render","refContent","tooltipContent","renderCloseButton","getAnchorElement","current","anchorElement","node","open","setState","close","handleMouseEnter","event","isHoverAnchor","trigger","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/instanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: (event?: Event | React.MouseEvent) => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)} data-tid={'Tooltip__content'}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<Element> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n switch (props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest(event);\n }\n\n this.close();\n };\n}\n"]}
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { PopupPositionsType } from '../../internal/Popup';
3
3
  import { Nullable } from '../../typings/utility-types';
4
4
  import { CommonProps } from '../../internal/CommonWrapper';
5
+ import { InstanceWithAnchorElement } from '../../lib/instanceWithAnchorElement';
5
6
  export declare type TooltipTrigger =
6
7
  /** Наведение на children и на тултип */
7
8
  'hover'
@@ -101,7 +102,7 @@ export interface TooltipState {
101
102
  opened: boolean;
102
103
  focused: boolean;
103
104
  }
104
- export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipState> {
105
+ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {
105
106
  static __KONTUR_REACT_UI__: string;
106
107
  static propTypes: {
107
108
  children(props: TooltipProps, propName: keyof TooltipProps, componentName: string): void;
@@ -123,11 +124,13 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
123
124
  private positions;
124
125
  private clickedOutside;
125
126
  private setRootNode;
127
+ private popupRef;
126
128
  componentDidUpdate(prevProps: TooltipProps): void;
127
129
  componentWillUnmount(): void;
128
130
  render(): JSX.Element;
129
131
  renderContent: () => JSX.Element | null;
130
132
  renderCloseButton(): JSX.Element | null;
133
+ getAnchorElement: () => Nullable<Element>;
131
134
  /**
132
135
  * Программно открывает тултип.
133
136
  * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>
@@ -141,7 +144,6 @@ export declare class Tooltip extends React.PureComponent<TooltipProps, TooltipSt
141
144
  */
142
145
  hide(): void;
143
146
  private renderMain;
144
- private getRenderLayerAnchorElement;
145
147
  private renderPopup;
146
148
  private refContent;
147
149
  private getPositions;
@@ -7,7 +7,7 @@ var _class, _temp;
7
7
  import React from 'react';
8
8
  import { isFunction, isRefableElement } from "../../../lib/utils";
9
9
  import { cx } from "../../../lib/theming/Emotion";
10
- import { getRootNode, rootNode } from "../../../lib/rootNode";
10
+ import { getRootNode, rootNode, isInstanceWithRootNode } from "../../../lib/rootNode";
11
11
  import { callChildRef } from "../../../lib/callChildRef/callChildRef";
12
12
  export var CommonWrapper = rootNode(_class = (_temp = /*#__PURE__*/function (_React$Component) {
13
13
  _inheritsLoose(CommonWrapper, _React$Component);
@@ -22,14 +22,29 @@ export var CommonWrapper = rootNode(_class = (_temp = /*#__PURE__*/function (_Re
22
22
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
23
23
  _this.child = void 0;
24
24
  _this.setRootNode = void 0;
25
+ _this.rootNodeSubscription = null;
25
26
 
26
27
  _this.ref = function (instance) {
27
- var childAsAny = _this.child;
28
- childAsAny && callChildRef(childAsAny.ref, instance);
28
+ var _this$rootNodeSubscri, _this$child;
29
29
 
30
30
  _this.setRootNode(instance);
31
31
 
32
- _this.props.rootNodeRef == null ? void 0 : _this.props.rootNodeRef(getRootNode(instance));
32
+ _this.props.rootNodeRef == null ? void 0 : _this.props.rootNodeRef(getRootNode(instance)); // refs are called when instances change
33
+ // so we have to renew or remove old subscription
34
+
35
+ (_this$rootNodeSubscri = _this.rootNodeSubscription) == null ? void 0 : _this$rootNodeSubscri.remove();
36
+ _this.rootNodeSubscription = null;
37
+
38
+ if (instance && isInstanceWithRootNode(instance)) {
39
+ _this.rootNodeSubscription = instance.addRootNodeChangeListener == null ? void 0 : instance.addRootNodeChangeListener(function (node) {
40
+ _this.setRootNode(node);
41
+
42
+ _this.props.rootNodeRef == null ? void 0 : _this.props.rootNodeRef(node);
43
+ });
44
+ }
45
+
46
+ var originalRef = (_this$child = _this.child) == null ? void 0 : _this$child.ref;
47
+ originalRef && callChildRef(originalRef, instance);
33
48
  };
34
49
 
35
50
  return _this;
@@ -78,9 +93,9 @@ var extractCommonProps = function extractCommonProps(props) {
78
93
 
79
94
  var isCommonProp = function isCommonProp(name) {
80
95
  switch (true) {
81
- case name == 'className':
82
- case name == 'style':
83
- case name == 'rootNodeRef':
96
+ case name === 'className':
97
+ case name === 'style':
98
+ case name === 'rootNodeRef':
84
99
  case name.indexOf('data-') === 0:
85
100
  // все data-атрибуты
86
101
  return true;
@@ -1 +1 @@
1
- {"version":3,"sources":["CommonWrapper.tsx"],"names":["React","isFunction","isRefableElement","cx","getRootNode","rootNode","callChildRef","CommonWrapper","child","setRootNode","ref","instance","childAsAny","props","rootNodeRef","render","extractCommonProps","className","style","dataProps","children","rest","isValidElement","cloneElement","Component","common","key","isCommonProp","name","indexOf"],"mappings":"sPAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;AACA,SAASC,YAAT,QAA6B,qCAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,WAAaC,aAAb,GADCF,QACD;;;AAGUG,IAAAA,KAHV;AAIUC,IAAAA,WAJV;;;;;;;;;;;;;;;;;;AAsBUC,IAAAA,GAtBV,GAsBgB,UAACC,QAAD,EAA6C;AACzD,UAAMC,UAAU,GAAG,MAAKJ,KAAxB;AACAI,MAAAA,UAAU,IAAIN,YAAY,CAACM,UAAU,CAACF,GAAZ,EAAiBC,QAAjB,CAA1B;AACA,YAAKF,WAAL,CAAiBE,QAAjB;AACA,YAAKE,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBV,WAAW,CAACO,QAAD,CAApC;AACD,KA3BH,2DAMEI,MANF,GAME,kBAAS,2BAC0EC,kBAAkB,CAAC,KAAKH,KAAN,CAD5F,+CACEI,SADF,wBACEA,SADF,CACaC,KADb,wBACaA,KADb,CACoBJ,WADpB,wBACoBA,WADpB,CACoCK,SADpC,6IACmDC,QADnD,yBACmDA,QADnD,CACgEC,IADhE,sEAEP,KAAKb,KAAL,GAAaP,UAAU,CAACmB,QAAD,CAAV,GAAuBA,QAAQ,CAACC,IAAD,CAA/B,GAAwCD,QAArD,CACA,OAAO,aAAApB,KAAK,CAACsB,cAAN,CAA6D,KAAKd,KAAlE,iBACHR,KAAK,CAACuB,YAAN,CAAmB,KAAKf,KAAxB,aACEE,GAAG,EAAER,gBAAgB,CAAC,KAAKM,KAAN,CAAhB,GAA+B,KAAKE,GAApC,GAA0C,IADjD,EAEEO,SAAS,EAAEd,EAAE,CAAC,KAAKK,KAAL,CAAWK,KAAX,CAAiBI,SAAlB,EAA6BA,SAA7B,CAFf,EAGEC,KAAK,eACA,KAAKV,KAAL,CAAWK,KAAX,CAAiBK,KADjB,EAEAA,KAFA,CAHP,IAOKC,SAPL,EADG,GAUH,KAAKX,KAVT,CAWD,CApBH,wBAAmFR,KAAK,CAACwB,SAAzF;;;AA8BA,IAAMR,kBAAkB,GAAG,SAArBA,kBAAqB;AACzBH,KADyB;AAEqC;AAC9D,MAAMY,MAAM,GAAG,EAAf;AACA,MAAMJ,IAAI,GAAG,EAAb;;AAEA,OAAK,IAAMK,GAAX,IAAkBb,KAAlB,EAAyB;AACvB,QAAIc,YAAY,CAACD,GAAD,CAAhB,EAAuB;AACrB;AACAD,MAAAA,MAAM,CAACC,GAAD,CAAN,GAAcb,KAAK,CAACa,GAAD,CAAnB;AACD,KAHD,MAGO;AACL;AACAL,MAAAA,IAAI,CAACK,GAAD,CAAJ,GAAYb,KAAK,CAACa,GAAD,CAAjB;AACD;AACF;;AAED,SAAO,CAACD,MAAD,EAASJ,IAAT,CAAP;AACD,CAjBD;;AAmBA,IAAMM,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAAkB;AACrC,UAAQ,IAAR;AACE,SAAKA,IAAI,IAAI,WAAb;AACA,SAAKA,IAAI,IAAI,OAAb;AACA,SAAKA,IAAI,IAAI,aAAb;AACA,SAAKA,IAAI,CAACC,OAAL,CAAa,OAAb,MAA0B,CAA/B,EAAkC;AAChC,aAAO,IAAP;AACF;AACE,aAAO,KAAP,CAPJ;;AASD,CAVD","sourcesContent":["import React from 'react';\n\nimport { isFunction, isRefableElement } from '../../lib/utils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nexport interface CommonProps {\n /**\n * HTML-атрибут `class`.\n */\n className?: React.HTMLAttributes<HTMLElement>['className'];\n /**\n * HTML-атрибут `style`.\n */\n style?: React.HTMLAttributes<HTMLElement>['style'];\n /**\n * На равне с data-tid транслируются любые data-атрибуты. Они попадают на корневой элемент.\n */\n 'data-tid'?: string;\n}\n\ninterface CommonPropsRootNodeRef {\n rootNodeRef?: (instance: Nullable<HTMLElement>) => void;\n}\n\nexport type NotCommonProps<P> = Omit<P, keyof CommonProps>;\n\nexport type CommonWrapperProps<P> = P & {\n children: React.ReactNode | ((rest: CommonWrapperRestProps<P>) => React.ReactNode);\n};\nexport type CommonWrapperRestProps<P> = Omit<NotCommonProps<P>, 'children'>;\n\n@rootNode\nexport class CommonWrapper<P extends CommonProps & CommonPropsRootNodeRef> extends React.Component<\n CommonWrapperProps<P> & CommonPropsRootNodeRef\n> {\n private child: React.ReactNode;\n private setRootNode!: TSetRootNode;\n\n render() {\n const [{ className, style, rootNodeRef, ...dataProps }, { children, ...rest }] = extractCommonProps(this.props);\n this.child = isFunction(children) ? children(rest) : children;\n return React.isValidElement<CommonProps & React.RefAttributes<any>>(this.child)\n ? React.cloneElement(this.child, {\n ref: isRefableElement(this.child) ? this.ref : null,\n className: cx(this.child.props.className, className),\n style: {\n ...this.child.props.style,\n ...style,\n },\n ...dataProps,\n })\n : this.child;\n }\n\n private ref = (instance: Nullable<React.ReactInstance>) => {\n const childAsAny = this.child as any;\n childAsAny && callChildRef(childAsAny.ref, instance);\n this.setRootNode(instance);\n this.props.rootNodeRef?.(getRootNode(instance));\n };\n}\n\nconst extractCommonProps = <P extends CommonProps & CommonPropsRootNodeRef>(\n props: P,\n): [CommonProps & CommonPropsRootNodeRef, NotCommonProps<P>] => {\n const common = {} as CommonProps & CommonPropsRootNodeRef;\n const rest = {} as NotCommonProps<P>;\n\n for (const key in props) {\n if (isCommonProp(key)) {\n // @ts-ignore\n common[key] = props[key];\n } else {\n // @ts-ignore\n rest[key] = props[key];\n }\n }\n\n return [common, rest];\n};\n\nconst isCommonProp = (name: string) => {\n switch (true) {\n case name == 'className':\n case name == 'style':\n case name == 'rootNodeRef':\n case name.indexOf('data-') === 0: // все data-атрибуты\n return true;\n default:\n return false;\n }\n};\n"]}
1
+ {"version":3,"sources":["CommonWrapper.tsx"],"names":["React","isFunction","isRefableElement","cx","getRootNode","rootNode","isInstanceWithRootNode","callChildRef","CommonWrapper","child","setRootNode","rootNodeSubscription","ref","instance","props","rootNodeRef","remove","addRootNodeChangeListener","node","originalRef","render","extractCommonProps","className","style","dataProps","children","rest","isValidElement","cloneElement","Component","common","key","isCommonProp","name","indexOf"],"mappings":"sPAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,UAAT,EAAqBC,gBAArB,QAA6C,iBAA7C;AACA,SAASC,EAAT,QAAmB,2BAAnB;;AAEA,SAASC,WAAT,EAAsBC,QAAtB,EAAqEC,sBAArE,QAAmG,oBAAnG;AACA,SAASC,YAAT,QAA6B,qCAA7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,WAAaC,aAAb,GADCH,QACD;;;AAGUI,IAAAA,KAHV;AAIUC,IAAAA,WAJV;AAKUC,IAAAA,oBALV,GAKkE,IALlE;;;;;;;;;;;;;;;;;;AAuBUC,IAAAA,GAvBV,GAuBgB,UAACC,QAAD,EAA6C;AACzD,YAAKH,WAAL,CAAiBG,QAAjB;AACA,YAAKC,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBX,WAAW,CAACS,QAAD,CAApC;;AAEA;AACA;AACA,qCAAKF,oBAAL,2CAA2BK,MAA3B;AACA,YAAKL,oBAAL,GAA4B,IAA5B;;AAEA,UAAIE,QAAQ,IAAIP,sBAAsB,CAACO,QAAD,CAAtC,EAAkD;AAChD,cAAKF,oBAAL,GAA4BE,QAAQ,CAACI,yBAArC,oBAA4BJ,QAAQ,CAACI,yBAAT,CAAqC,UAACC,IAAD,EAAU;AACzE,gBAAKR,WAAL,CAAiBQ,IAAjB;AACA,gBAAKJ,KAAL,CAAWC,WAAX,0BAAKD,KAAL,CAAWC,WAAX,CAAyBG,IAAzB;AACD,SAH2B,CAA5B;AAID;;AAED,UAAMC,WAAW,kBAAI,MAAKV,KAAT,qBAAG,YAA0CG,GAA9D;AACAO,MAAAA,WAAW,IAAIZ,YAAY,CAACY,WAAD,EAAcN,QAAd,CAA3B;AACD,KAzCH,2DAOEO,MAPF,GAOE,kBAAS,2BAC0EC,kBAAkB,CAAC,KAAKP,KAAN,CAD5F,+CACEQ,SADF,wBACEA,SADF,CACaC,KADb,wBACaA,KADb,CACoBR,WADpB,wBACoBA,WADpB,CACoCS,SADpC,6IACmDC,QADnD,yBACmDA,QADnD,CACgEC,IADhE,sEAEP,KAAKjB,KAAL,GAAaR,UAAU,CAACwB,QAAD,CAAV,GAAuBA,QAAQ,CAACC,IAAD,CAA/B,GAAwCD,QAArD,CACA,OAAO,aAAAzB,KAAK,CAAC2B,cAAN,CAA6D,KAAKlB,KAAlE,iBACHT,KAAK,CAAC4B,YAAN,CAAmB,KAAKnB,KAAxB,aACEG,GAAG,EAAEV,gBAAgB,CAAC,KAAKO,KAAN,CAAhB,GAA+B,KAAKG,GAApC,GAA0C,IADjD,EAEEU,SAAS,EAAEnB,EAAE,CAAC,KAAKM,KAAL,CAAWK,KAAX,CAAiBQ,SAAlB,EAA6BA,SAA7B,CAFf,EAGEC,KAAK,eACA,KAAKd,KAAL,CAAWK,KAAX,CAAiBS,KADjB,EAEAA,KAFA,CAHP,IAOKC,SAPL,EADG,GAUH,KAAKf,KAVT,CAWD,CArBH,wBAAmFT,KAAK,CAAC6B,SAAzF;;;AA4CA,IAAMR,kBAAkB,GAAG,SAArBA,kBAAqB;AACzBP,KADyB;AAEqC;AAC9D,MAAMgB,MAAM,GAAG,EAAf;AACA,MAAMJ,IAAI,GAAG,EAAb;;AAEA,OAAK,IAAMK,GAAX,IAAkBjB,KAAlB,EAAyB;AACvB,QAAIkB,YAAY,CAACD,GAAD,CAAhB,EAAuB;AACrB;AACAD,MAAAA,MAAM,CAACC,GAAD,CAAN,GAAcjB,KAAK,CAACiB,GAAD,CAAnB;AACD,KAHD,MAGO;AACL;AACAL,MAAAA,IAAI,CAACK,GAAD,CAAJ,GAAYjB,KAAK,CAACiB,GAAD,CAAjB;AACD;AACF;;AAED,SAAO,CAACD,MAAD,EAASJ,IAAT,CAAP;AACD,CAjBD;;AAmBA,IAAMM,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD,EAAkB;AACrC,UAAQ,IAAR;AACE,SAAKA,IAAI,KAAK,WAAd;AACA,SAAKA,IAAI,KAAK,OAAd;AACA,SAAKA,IAAI,KAAK,aAAd;AACA,SAAKA,IAAI,CAACC,OAAL,CAAa,OAAb,MAA0B,CAA/B,EAAkC;AAChC,aAAO,IAAP;AACF;AACE,aAAO,KAAP,CAPJ;;AASD,CAVD","sourcesContent":["import React from 'react';\n\nimport { isFunction, isRefableElement } from '../../lib/utils';\nimport { cx } from '../../lib/theming/Emotion';\nimport { Nullable } from '../../typings/utility-types';\nimport { getRootNode, rootNode, TSetRootNode, TRootNodeSubscription, isInstanceWithRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nexport interface CommonProps {\n /**\n * HTML-атрибут `class`.\n */\n className?: React.HTMLAttributes<HTMLElement>['className'];\n /**\n * HTML-атрибут `style`.\n */\n style?: React.HTMLAttributes<HTMLElement>['style'];\n /**\n * На равне с data-tid транслируются любые data-атрибуты. Они попадают на корневой элемент.\n */\n 'data-tid'?: string;\n}\n\ninterface CommonPropsRootNodeRef {\n rootNodeRef?: (instance: Nullable<Element>) => void;\n}\n\nexport type NotCommonProps<P> = Omit<P, keyof CommonProps>;\n\nexport type CommonWrapperProps<P> = P & {\n children: React.ReactNode | ((rest: CommonWrapperRestProps<P>) => React.ReactNode);\n};\nexport type CommonWrapperRestProps<P> = Omit<NotCommonProps<P>, 'children'>;\n\n@rootNode\nexport class CommonWrapper<P extends CommonProps & CommonPropsRootNodeRef> extends React.Component<\n CommonWrapperProps<P> & CommonPropsRootNodeRef\n> {\n private child: React.ReactNode;\n private setRootNode!: TSetRootNode;\n private rootNodeSubscription: Nullable<TRootNodeSubscription> = null;\n\n render() {\n const [{ className, style, rootNodeRef, ...dataProps }, { children, ...rest }] = extractCommonProps(this.props);\n this.child = isFunction(children) ? children(rest) : children;\n return React.isValidElement<CommonProps & React.RefAttributes<any>>(this.child)\n ? React.cloneElement(this.child, {\n ref: isRefableElement(this.child) ? this.ref : null,\n className: cx(this.child.props.className, className),\n style: {\n ...this.child.props.style,\n ...style,\n },\n ...dataProps,\n })\n : this.child;\n }\n\n private ref = (instance: Nullable<React.ReactInstance>) => {\n this.setRootNode(instance);\n this.props.rootNodeRef?.(getRootNode(instance));\n\n // refs are called when instances change\n // so we have to renew or remove old subscription\n this.rootNodeSubscription?.remove();\n this.rootNodeSubscription = null;\n\n if (instance && isInstanceWithRootNode(instance)) {\n this.rootNodeSubscription = instance.addRootNodeChangeListener?.((node) => {\n this.setRootNode(node);\n this.props.rootNodeRef?.(node);\n });\n }\n\n const originalRef = (this.child as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n };\n}\n\nconst extractCommonProps = <P extends CommonProps & CommonPropsRootNodeRef>(\n props: P,\n): [CommonProps & CommonPropsRootNodeRef, NotCommonProps<P>] => {\n const common = {} as CommonProps & CommonPropsRootNodeRef;\n const rest = {} as NotCommonProps<P>;\n\n for (const key in props) {\n if (isCommonProp(key)) {\n // @ts-ignore\n common[key] = props[key];\n } else {\n // @ts-ignore\n rest[key] = props[key];\n }\n }\n\n return [common, rest];\n};\n\nconst isCommonProp = (name: string) => {\n switch (true) {\n case name === 'className':\n case name === 'style':\n case name === 'rootNodeRef':\n case name.indexOf('data-') === 0: // все data-атрибуты\n return true;\n default:\n return false;\n }\n};\n"]}
@@ -15,7 +15,7 @@ export interface CommonProps {
15
15
  'data-tid'?: string;
16
16
  }
17
17
  interface CommonPropsRootNodeRef {
18
- rootNodeRef?: (instance: Nullable<HTMLElement>) => void;
18
+ rootNodeRef?: (instance: Nullable<Element>) => void;
19
19
  }
20
20
  export declare type NotCommonProps<P> = Omit<P, keyof CommonProps>;
21
21
  export declare type CommonWrapperProps<P> = P & {
@@ -25,6 +25,7 @@ export declare type CommonWrapperRestProps<P> = Omit<NotCommonProps<P>, 'childre
25
25
  export declare class CommonWrapper<P extends CommonProps & CommonPropsRootNodeRef> extends React.Component<CommonWrapperProps<P> & CommonPropsRootNodeRef> {
26
26
  private child;
27
27
  private setRootNode;
28
+ private rootNodeSubscription;
28
29
  render(): React.ReactNode;
29
30
  private ref;
30
31
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["DropdownContainer.tsx"],"names":["React","LayoutEvents","RenderContainer","ZIndex","createPropsGetter","cx","isIE11","styles","DropdownContainer","props","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","position","target","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","alignRight","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<HTMLElement>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
1
+ {"version":3,"sources":["DropdownContainer.tsx"],"names":["React","LayoutEvents","RenderContainer","ZIndex","createPropsGetter","cx","isIE11","styles","DropdownContainer","props","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","position","target","getParent","targetRect","getBoundingClientRect","document","body","docEl","documentElement","Error","scrollX","window","pageXOffset","scrollLeft","scrollY","pageYOffset","scrollTop","left","right","align","docWidth","offsetWidth","offsetX","offsetY","bottom","top","distanceToBottom","clientHeight","dropdownHeight","getHeight","state","isDocumentElementRoot","scrollHeight","setState","minWidth","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","getIsDocumentElementRoot","componentDidMount","addListener","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","alignRight","PureComponent","__KONTUR_REACT_UI__","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../RenderContainer';\nimport { ZIndex } from '../ZIndex';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './DropdownContainer.styles';\n\nexport interface DropdownContainerPosition {\n top: Nullable<number>;\n bottom: Nullable<number>;\n left: Nullable<number>;\n right: Nullable<number>;\n}\n\nexport interface DropdownContainerProps {\n align?: 'left' | 'right';\n getParent: () => Nullable<Element>;\n children?: React.ReactNode;\n disablePortal?: boolean;\n offsetY?: number;\n offsetX?: number;\n hasFixedWidth?: boolean;\n}\n\nexport interface DropdownContainerState {\n position: Nullable<DropdownContainerPosition>;\n minWidth: number;\n isDocumentElementRoot?: boolean;\n}\n\nexport class DropdownContainer extends React.PureComponent<DropdownContainerProps, DropdownContainerState> {\n public static __KONTUR_REACT_UI__ = 'DropdownContainer';\n\n public static defaultProps = {\n align: 'left',\n disablePortal: false,\n offsetX: 0,\n offsetY: -1,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n constructor(props: DropdownContainerProps) {\n super(props);\n\n this.state = { position: null, minWidth: 0, isDocumentElementRoot: getIsDocumentElementRoot() };\n }\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n }\n\n public componentWillUnmount() {\n if (this.layoutSub) {\n this.layoutSub.remove();\n }\n }\n\n public render() {\n let style: React.CSSProperties = {\n position: 'absolute',\n top: '0',\n };\n if (this.state.position) {\n const { top, bottom, left, right } = this.state.position;\n style = {\n ...style,\n top: top !== null ? top : undefined,\n bottom: bottom !== null ? bottom : undefined,\n left: left !== null ? left : undefined,\n right: right !== null ? right : undefined,\n minWidth: this.state.minWidth,\n maxWidth: this.props.hasFixedWidth ? this.state.minWidth : undefined,\n };\n }\n\n const content = (\n <ZIndex\n priority={'DropdownContainer'}\n wrapperRef={this.ZIndexRef}\n style={style}\n className={cx({\n [styles.alignRight()]: this.props.align === 'right' && !isIE11,\n })}\n >\n {this.props.children}\n </ZIndex>\n );\n\n return this.props.disablePortal ? content : <RenderContainer>{content}</RenderContainer>;\n }\n\n private ZIndexRef = (element: Nullable<HTMLDivElement>) => {\n this.dom = element;\n };\n\n private isElement = (node: Nullable<Element>): node is Element => {\n return node instanceof Element;\n };\n\n public position = () => {\n const target = this.props.getParent();\n const dom = this.dom;\n\n if (target && this.isElement(target) && dom) {\n const targetRect = target.getBoundingClientRect();\n const { body, documentElement: docEl } = document;\n\n if (!docEl) {\n throw Error('There is no \"documentElement\" in \"document\"');\n }\n\n const scrollX = window.pageXOffset || docEl.scrollLeft || 0;\n const scrollY = window.pageYOffset || docEl.scrollTop || 0;\n\n let left = null;\n let right = null;\n\n if (this.props.align === 'right') {\n const docWidth = docEl.offsetWidth || 0;\n right = docWidth - (targetRect.right + scrollX) + this.getProps().offsetX;\n } else {\n left = targetRect.left + scrollX + this.getProps().offsetX;\n }\n\n const { offsetY = 0 } = this.props;\n let bottom = null;\n let top: number | null = targetRect.bottom + scrollY + offsetY;\n\n const distanceToBottom = docEl.clientHeight - targetRect.bottom;\n const dropdownHeight = this.getHeight();\n\n if (distanceToBottom < dropdownHeight && targetRect.top > dropdownHeight) {\n const clientHeight = this.state.isDocumentElementRoot ? docEl.clientHeight : body.scrollHeight;\n\n top = null;\n bottom = clientHeight + offsetY - scrollY - targetRect.top;\n }\n\n const position = {\n top,\n left,\n right,\n bottom,\n };\n\n this.setState({\n minWidth: this.getMinWidth(),\n position: this.props.disablePortal ? this.convertToRelativePosition(position) : position,\n });\n }\n };\n\n private getHeight = () => {\n if (!this.isElement(this.dom)) {\n return 0;\n }\n const child = this.dom.children.item(0);\n if (!child) {\n return 0;\n }\n return child.getBoundingClientRect().height;\n };\n\n private getMinWidth = () => {\n const target = this.props.getParent();\n if (!target || !this.isElement(target)) {\n return 0;\n }\n return target.getBoundingClientRect().width;\n };\n\n private convertToRelativePosition = (position: DropdownContainerPosition): DropdownContainerPosition => {\n const target = this.props.getParent();\n const { offsetX = 0, offsetY = 0 } = this.props;\n const { top, bottom, left, right } = position;\n if (target && this.isElement(target)) {\n const targetHeight = target.getBoundingClientRect().height;\n return {\n top: top !== null ? targetHeight + offsetY : null,\n bottom: bottom !== null ? targetHeight + offsetY : null,\n left: left !== null ? offsetX : null,\n right: right !== null ? offsetX : null,\n };\n }\n return {\n top: offsetY,\n bottom: null,\n left: offsetX,\n right: null,\n };\n };\n}\n\nconst getIsDocumentElementRoot = () => {\n const { body, documentElement } = document;\n const htmlPosition = getComputedStyle(documentElement).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n return hasLimitedHeightRoot || hasStaticRoot;\n};\n"]}
@@ -8,7 +8,7 @@ export interface DropdownContainerPosition {
8
8
  }
9
9
  export interface DropdownContainerProps {
10
10
  align?: 'left' | 'right';
11
- getParent: () => Nullable<HTMLElement>;
11
+ getParent: () => Nullable<Element>;
12
12
  children?: React.ReactNode;
13
13
  disablePortal?: boolean;
14
14
  offsetY?: number;
@@ -4,6 +4,7 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
4
4
  var _class, _class2, _temp;
5
5
 
6
6
  import React from 'react';
7
+ import { isHTMLElement } from "../../../lib/SSRSafe";
7
8
  import { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from "../../../lib/events/keyboard/identifiers";
8
9
  import { ScrollContainer } from "../../../components/ScrollContainer";
9
10
  import { isMenuItem } from "../../../components/MenuItem";
@@ -61,9 +62,11 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
61
62
  };
62
63
 
63
64
  _this.focusOnRootElement = function () {
64
- var _getRootNode;
65
+ var rootNode = getRootNode(_assertThisInitialized(_this)); // TODO: Remove this check once IF-647 is resolved
65
66
 
66
- (_getRootNode = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode.focus();
67
+ if (isHTMLElement(rootNode)) {
68
+ rootNode == null ? void 0 : rootNode.focus();
69
+ }
67
70
  };
68
71
 
69
72
  _this.shouldRecalculateMaxHeight = function (prevProps) {
@@ -111,18 +114,25 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
111
114
 
112
115
  _this.scrollToSelected = function () {
113
116
  if (_this.scrollContainer && _this.highlighted) {
114
- _this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
117
+ var _rootNode = getRootNode(_this.highlighted); // TODO: Remove this check once IF-647 is resolved
118
+
119
+
120
+ if (_rootNode instanceof HTMLElement) {
121
+ _this.scrollContainer.scrollTo(_rootNode);
122
+ }
115
123
  }
116
124
  };
117
125
 
118
126
  _this.highlightItem = function (index) {
119
- var _getRootNode2;
120
-
121
127
  _this.setState({
122
128
  highlightedIndex: index
123
129
  });
124
130
 
125
- (_getRootNode2 = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode2.focus();
131
+ var rootNode = getRootNode(_assertThisInitialized(_this)); // TODO: Remove this check once IF-647 is resolved
132
+
133
+ if (isHTMLElement(rootNode)) {
134
+ rootNode == null ? void 0 : rootNode.focus();
135
+ }
126
136
  };
127
137
 
128
138
  _this.unhighlight = function () {
@@ -1 +1 @@
1
- {"version":3,"sources":["InternalMenu.tsx"],"names":["React","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","isMenuHeader","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","styles","isActiveElement","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","setRootNode","header","footer","getProps","defaultProps","renderHeader","el","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","getBoundingClientRect","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollToSelected","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","prevState","render","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","preventWindowScroll","map","child","type","cloneElement","_enableIconPadding","highlight","ref","originalRef","menuItem","refHighlighted","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","isExist","PureComponent","__KONTUR_REACT_UI__","value","undefined","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps, prevState: MenuState) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\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 enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || child == null) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(child) && child.props.onMouseEnter) {\n child.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(child) && child.props.onMouseLeave) {\n child.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return child;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n getRootNode(this)?.focus();\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && this.header.getBoundingClientRect().height) || 0) +\n ((this.footer && this.footer.getBoundingClientRect().height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n getRootNode(this)?.focus();\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
1
+ {"version":3,"sources":["InternalMenu.tsx"],"names":["React","isHTMLElement","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","isMenuHeader","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","styles","isActiveElement","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","setRootNode","header","footer","getProps","defaultProps","renderHeader","el","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","getBoundingClientRect","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollToSelected","HTMLElement","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","prevState","render","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","root","shadow","hasShadow","width","preventWindowScroll","map","child","type","cloneElement","_enableIconPadding","highlight","ref","originalRef","menuItem","refHighlighted","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","isExist","PureComponent","__KONTUR_REACT_UI__","value","undefined","ret","forEach","push"],"mappings":"uLAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,aAAT,QAA8B,mBAA9B;AACA,SAASC,cAAT,EAAyBC,YAAzB,EAAuCC,UAAvC,QAAyD,uCAAzD;AACA,SAASC,eAAT,QAA4D,kCAA5D;AACA,SAASC,UAAT,QAAoD,2BAApD;AACA,SAASC,YAAT,QAA6B,6BAA7B;AACA,SAASC,iBAAT,QAAkC,6BAAlC;;AAEA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,WAAT,EAAsBC,QAAtB,QAAoD,oBAApD;;AAEA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,eAAT,QAAgC,mBAAhC;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,WAAaC,YAAb,GADCH,QACD;;;;;;;;;;;;AAYSI,IAAAA,KAZT,GAY4B;AACxBC,MAAAA,gBAAgB,EAAE,CAAC,CADK;AAExBC,MAAAA,SAAS,EAAE,MAAKC,KAAL,CAAWD,SAAX,IAAwB,MAFX;AAGxBE,MAAAA,WAAW,EAAE,KAHW,EAZ5B;;;AAkBUC,IAAAA,KAlBV;AAmBUC,IAAAA,eAnBV;AAoBUC,IAAAA,WApBV;AAqBUC,IAAAA,WArBV;AAsBUC,IAAAA,MAtBV;AAuBUC,IAAAA,MAvBV;AAwBUC,IAAAA,QAxBV,GAwBqBnB,iBAAiB,CAACO,YAAY,CAACa,YAAd,CAxBtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0IUC,IAAAA,YA1IV,GA0IyB,YAAM;AAC3B;AACE;AACE,UAAA,GAAG,EAAE,aAACC,EAAD,UAAS,MAAKL,MAAL,GAAcK,EAAvB,EADP;AAEE,UAAA,SAAS,EAAEpB,EAAE;AACVG,UAAAA,MAAM,CAACY,MAAP,EADU,IACQ,IADR;AAEVZ,UAAAA,MAAM,CAACkB,WAAP,EAFU,IAEa,MAAKf,KAAL,CAAWI,WAAX,KAA2B,KAFxC,OAFf;;;AAOG,cAAKD,KAAL,CAAWM,MAPd,CADF;;;AAWD,KAtJH;;AAwJUO,IAAAA,YAxJV,GAwJyB,YAAM;AAC3B;AACE;AACE,UAAA,GAAG,EAAE,aAACF,EAAD,UAAS,MAAKJ,MAAL,GAAcI,EAAvB,EADP;AAEE,UAAA,SAAS,EAAEpB,EAAE;AACVG,UAAAA,MAAM,CAACa,MAAP,EADU,IACQ,IADR;AAEVb,UAAAA,MAAM,CAACoB,WAAP,EAFU,IAEa,MAAKjB,KAAL,CAAWI,WAAX,KAA2B,QAFxC,QAFf;;;AAOG,cAAKD,KAAL,CAAWO,MAPd,CADF;;;AAWD,KApKH;;AAsKUQ,IAAAA,kBAtKV,GAsK+B,YAAY;AACvC,UAAMtB,QAAQ,GAAGD,WAAW,+BAA5B;AACA;AACA,UAAIV,aAAa,CAACW,QAAD,CAAjB,EAA6B;AAC3BA,QAAAA,QAAQ,QAAR,YAAAA,QAAQ,CAAEuB,KAAV;AACD;AACF,KA5KH;;AA8KUC,IAAAA,0BA9KV,GA8KuC,UAACC,SAAD,EAAmC;AACtB,YAAKlB,KADiB,CAC9DD,SAD8D,eAC9DA,SAD8D,CACnDO,MADmD,eACnDA,MADmD,CAC3CC,MAD2C,eAC3CA,MAD2C,CACnCY,QADmC,eACnCA,QADmC;AAEtE,UAAMC,aAAa,GAAGF,SAAS,CAACnB,SAAhC;AACA,UAAMsB,UAAU,GAAGH,SAAS,CAACZ,MAA7B;AACA,UAAMgB,UAAU,GAAGJ,SAAS,CAACX,MAA7B;AACA,UAAMgB,iBAAiB,GAAG1C,KAAK,CAAC2C,QAAN,CAAeC,KAAf,CAAqBP,SAAS,CAACC,QAA/B,CAA1B;;AAEA;AACEpB,QAAAA,SAAS,KAAKqB,aAAd;AACAb,QAAAA,MAAM,KAAKe,UADX;AAEAhB,QAAAA,MAAM,KAAKe,UAFX;AAGAxC,QAAAA,KAAK,CAAC2C,QAAN,CAAeC,KAAf,CAAqBN,QAArB,MAAmCI,iBAJrC;;AAMD,KA3LH;;AA6LUG,IAAAA,kBA7LV,GA6L+B,YAAM;AACzB3B,MAAAA,SADyB,GACX,MAAKC,KADM,CACzBD,SADyB;AAEjC,UAAI4B,eAAe,GAAG5B,SAAtB;AACA,UAAMN,QAAQ,GAAGD,WAAW,+BAA5B;;AAEA,UAAI,OAAOO,SAAP,KAAqB,QAArB,IAAiC,OAAO6B,MAAP,KAAkB,WAAnD,IAAkEnC,QAAtE,EAAgF;AAC9E,YAAMoC,oBAAoB,GAAGD,MAAM,CAACE,gBAAP,CAAwBrC,QAAxB,EAAkCM,SAA/D;;AAEA,YAAI8B,oBAAJ,EAA0B;AACxBF,UAAAA,eAAe,GAAGI,UAAU,CAACF,oBAAD,CAA5B;AACD;AACF;;AAED,UAAMG,mBAAmB;AACvB,aAAOL,eAAP,KAA2B,QAA3B;AACIA,MAAAA,eAAe;AACb,YAAKrB,MAAL,IAAe,MAAKA,MAAL,CAAY2B,qBAAZ,GAAoCC,MAApD,IAA+D,CADjD,CAAf;AAEE,YAAK3B,MAAL,IAAe,MAAKA,MAAL,CAAY0B,qBAAZ,GAAoCC,MAApD,IAA+D,CAFhE,CADJ;AAIInC,MAAAA,SALN;;AAOA,YAAKoC,QAAL,CAAc;AACZpC,QAAAA,SAAS,EAAEiC,mBAAmB,IAAI,MADtB,EAAd;;AAGD,KApNH;;AAsNUI,IAAAA,mBAtNV,GAsNgC,YAAM;AAClC,WAAK,IAAIC,CAAC,GAAG,MAAK7B,QAAL,GAAgB8B,wBAA7B,EAAuDD,CAAC,GAAG,CAAC,CAA5D,EAA+DA,CAAC,EAAhE,EAAoE;AAClE,cAAKE,QAAL;AACD;AACF,KA1NH;;AA4NUC,IAAAA,kBA5NV,GA4N+B,UAACrC,eAAD,EAAgD;AAC3E,YAAKA,eAAL,GAAuBA,eAAvB;AACD,KA9NH;;;;;;;;;;;;;;;;;;;;AAkPUsC,IAAAA,gBAlPV,GAkP6B,YAAM;AAC/B,UAAI,MAAKtC,eAAL,IAAwB,MAAKC,WAAjC,EAA8C;AAC5C,YAAMX,SAAQ,GAAGD,WAAW,CAAC,MAAKY,WAAN,CAA5B;AACA;AACA,YAAIX,SAAQ,YAAYiD,WAAxB,EAAqC;AACnC,gBAAKvC,eAAL,CAAqBwC,QAArB,CAA8BlD,SAA9B;AACD;AACF;AACF,KA1PH;;;;;;;;;;;;;;;;;;;;;;;;AAkRUmD,IAAAA,aAlRV,GAkR0B,UAACC,KAAD,EAAyB;AAC/C,YAAKV,QAAL,CAAc,EAAErC,gBAAgB,EAAE+C,KAApB,EAAd;;AAEA,UAAMpD,QAAQ,GAAGD,WAAW,+BAA5B;AACA;AACA,UAAIV,aAAa,CAACW,QAAD,CAAjB,EAA6B;AAC3BA,QAAAA,QAAQ,QAAR,YAAAA,QAAQ,CAAEuB,KAAV;AACD;AACF,KA1RH;;AA4RU8B,IAAAA,WA5RV,GA4RwB,YAAM;AAC1B,YAAKX,QAAL,CAAc,EAAErC,gBAAgB,EAAE,CAAC,CAArB,EAAd;AACD,KA9RH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4TUiD,IAAAA,MA5TV,GA4TmB,YAAM;AACrB,YAAKC,IAAL,CAAU,CAAC,CAAX;AACD,KA9TH;;AAgUUT,IAAAA,QAhUV,GAgUqB,YAAM;AACvB,YAAKS,IAAL,CAAU,CAAV;AACD,KAlUH;;;;;;;AAyUUC,IAAAA,aAzUV,GAyU0B,UAACC,CAAD,EAAkD;AACxE,UAAI,OAAO,MAAKlD,KAAL,CAAWmD,SAAlB,KAAgC,UAApC,EAAgD;AAC9C,cAAKnD,KAAL,CAAWmD,SAAX,CAAqBD,CAArB;AACD;;AAED,UAAIA,CAAC,CAACE,gBAAN,EAAwB;AACtB;AACD;;AAED,UAAIpE,YAAY,CAACkE,CAAD,CAAhB,EAAqB;AACnBA,QAAAA,CAAC,CAACG,cAAF;AACA,cAAKN,MAAL;AACD,OAHD,MAGO,IAAIhE,cAAc,CAACmE,CAAD,CAAlB,EAAuB;AAC5BA,QAAAA,CAAC,CAACG,cAAF;AACA,cAAKd,QAAL;AACD,OAHM,MAGA,IAAItD,UAAU,CAACiE,CAAD,CAAd,EAAmB;AACxB,YAAI,MAAK9C,WAAL,IAAoB,MAAKA,WAAL,CAAiBJ,KAAjB,CAAuBsD,OAA/C,EAAwD;AACtD,gBAAKlD,WAAL,CAAiBJ,KAAjB,CAAuBsD,OAAvB,CAA+BJ,CAA/B;AACD;AACF;AACF,KA7VH;;AA+VUK,IAAAA,uBA/VV,GA+VoC,UAACtD,WAAD,EAA6C;AAC7E,UAAI,MAAKJ,KAAL,CAAWI,WAAX,KAA2BA,WAA/B,EAA4C;AAC1C,cAAKkC,QAAL,CAAc,EAAElC,WAAW,EAAXA,WAAF,EAAd;AACD;AACF,KAnWH,0DA0BSuD,iBA1BT,GA0BE,6BAA2B,CACzB,KAAKpB,mBAAL,GACA,KAAKV,kBAAL,GACD,CA7BH,QA+BS+B,kBA/BT,GA+BE,4BAA0BvC,SAA1B,EAAgDwC,SAAhD,EAAsE,CACpE,IAAI,KAAKzC,0BAAL,CAAgCC,SAAhC,CAAJ,EAAgD,CAC9C,KAAKQ,kBAAL,GACD,CAED,IAAIR,SAAS,CAACnB,SAAV,KAAwB,KAAKC,KAAL,CAAWD,SAAvC,EAAkD,CAChD,KAAKoC,QAAL,CAAc,EACZpC,SAAS,EAAE,KAAKC,KAAL,CAAWD,SAAX,IAAwB,MADvB,EAAd,EAGD,CACF,CAzCH,QA2CSiB,KA3CT,GA2CE,iBAAe,CACb,KAAKD,kBAAL,GACD,CA7CH,QA+CS4C,MA/CT,GA+CE,kBAAgB,mBACd,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACzD,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAAC0D,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CAxDH,QA0DUA,UA1DV,GA0DE,sBAAqB,wBACnB,IAAMC,iBAAiB,GAAGhF,KAAK,CAAC2C,QAAN,CAAesC,OAAf,CAAuB,KAAK9D,KAAL,CAAWmB,QAAlC,EAA4C4C,IAA5C,CACxB,UAACC,CAAD,UAAO,aAAAnF,KAAK,CAACoF,cAAN,CAAqBD,CAArB,KAA2BA,CAAC,CAAChE,KAAF,CAAQkE,IAA1C,EADwB,CAA1B,CAIA,IAAI,KAAKC,OAAL,EAAJ,EAAoB,CAClB,OAAO,IAAP,CACD,CAED,oBACE,6BACE,SAAS,EAAE5E,EAAE,kBACVG,MAAM,CAAC0E,IAAP,CAAY,KAAKlE,KAAjB,CADU,IACgB,IADhB,OAEVR,MAAM,CAAC2E,MAAP,CAAc,KAAKnE,KAAnB,CAFU,IAEkB,KAAKF,KAAL,CAAWsE,SAF7B,QADf,EAKE,KAAK,EAAE,EACLC,KAAK,EAAE,KAAKvE,KAAL,CAAWuE,KADb,EAELxE,SAAS,EAAE,KAAKF,KAAL,CAAWE,SAFjB,EALT,EASE,SAAS,EAAE,KAAKkD,aATlB,EAUE,GAAG,EAAE,KAAK5C,WAVZ,EAWE,QAAQ,EAAE,CAXZ,IAaG,KAAKL,KAAL,CAAWM,MAAX,GAAoB,KAAKI,YAAL,EAApB,GAA0C,IAb7C,eAcE,oBAAC,eAAD,IACE,GAAG,EAAE,KAAK8B,kBADZ,EAEE,SAAS,EAAE,KAAKxC,KAAL,CAAWD,SAFxB,EAGE,mBAAmB,EAAE,KAAKC,KAAL,CAAWwE,mBAHlC,EAIE,mBAAmB,EAAE,KAAKjB,uBAJ5B,IAMG1E,KAAK,CAAC2C,QAAN,CAAeiD,GAAf,CAAmB,KAAKzE,KAAL,CAAWmB,QAA9B,EAAwC,UAACuD,KAAD,EAAQ7B,KAAR,EAAkB,CACzD,IAAI,OAAO6B,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,QAA9C,IAA0DA,KAAK,IAAI,IAAvE,EAA6E,CAC3E,OAAOA,KAAP,CACD,CACD,IAAI,cAAA7F,KAAK,CAACoF,cAAN,CAAqBS,KAArB,KAA+B,OAAOA,KAAK,CAACC,IAAb,KAAsB,QAAzD,EAAmE,CACjE,OAAOD,KAAP,CACD,CAED,IAAIb,iBAAiB,KAAK1E,UAAU,CAACuF,KAAD,CAAV,IAAqBtF,YAAY,CAACsF,KAAD,CAAtC,CAArB,EAAqE,CACnEA,KAAK,gBAAG7F,KAAK,CAAC+F,YAAN,CAAmBF,KAAnB,EAA0B,EAChCG,kBAAkB,EAAE,IADY,EAA1B,CAAR,CAGD,CAED,IAAIlF,eAAe,CAAC+E,KAAD,CAAnB,EAA4B,CAC1B,IAAMI,SAAS,GAAG,MAAI,CAACjF,KAAL,CAAWC,gBAAX,KAAgC+C,KAAlD,CAEA,IAAIkC,GAAG,GAAGL,KAAK,CAACK,GAAhB,CACA,IAAMC,WAAW,GAAGD,GAApB,CACA,IAAID,SAAJ,EAAe,CACbC,GAAG,GAAG,aAACE,QAAD,UAAc,MAAI,CAACC,cAAL,CAAoBF,WAApB,EAAiCC,QAAjC,CAAd,EAAN,CACD,CAED,oBAAOpG,KAAK,CAAC+F,YAAN,CAA4CF,KAA5C,EAAmD,EACxDK,GAAG,EAAHA,GADwD,EAExDlF,KAAK,EAAEiF,SAAS,GAAG,OAAH,GAAaJ,KAAK,CAAC1E,KAAN,CAAYH,KAFe,EAGxDyD,OAAO,EAAE,MAAI,CAAC6B,MAAL,CAAYC,IAAZ,CAAiB,MAAjB,EAAuBvC,KAAvB,EAA8B,KAA9B,CAH+C,EAIxDwC,YAAY,EAAE,sBAACC,KAAD,EAAW,CACvB,MAAI,CAAC1C,aAAL,CAAmBC,KAAnB,EACA,IAAI1D,UAAU,CAACuF,KAAD,CAAV,IAAqBA,KAAK,CAAC1E,KAAN,CAAYqF,YAArC,EAAmD,CACjDX,KAAK,CAAC1E,KAAN,CAAYqF,YAAZ,CAAyBC,KAAzB,EACD,CACF,CATuD,EAUxDC,YAAY,EAAE,sBAACD,KAAD,EAAW,CACvB,MAAI,CAACxC,WAAL,GACA,IAAI3D,UAAU,CAACuF,KAAD,CAAV,IAAqBA,KAAK,CAAC1E,KAAN,CAAYuF,YAArC,EAAmD,CACjDb,KAAK,CAAC1E,KAAN,CAAYuF,YAAZ,CAAyBD,KAAzB,EACD,CACF,CAfuD,EAAnD,CAAP,CAiBD,CAED,OAAOZ,KAAP,CACD,CA3CA,CANH,CAdF,EAiEG,KAAK1E,KAAL,CAAWO,MAAX,GAAoB,KAAKM,YAAL,EAApB,GAA0C,IAjE7C,CADF,CAqED,CAxIH,QAgOUqE,cAhOV,GAgOE,wBACEF,WADF,EAEEC,QAFF,EAGE,CACA,KAAK7E,WAAL,GAAmB6E,QAAnB,CAEA,IAAI,CAACD,WAAD,IAAgB,OAAOA,WAAP,KAAuB,QAA3C,EAAqD,CACnD,OACD,CAED,IAAI,OAAOA,WAAP,KAAuB,UAA3B,EAAuC,CACrCA,WAAW,CAACC,QAAD,CAAX,CACD,CAFD,MAEO,IAAI,OAAOD,WAAP,KAAuB,QAA3B,EAAqC,CAC1C;AACAA,MAAAA,WAAW,CAACQ,OAAZ,GAAsBP,QAAtB,CACD,CACF,CAhPH,QA4PUE,MA5PV,GA4PE,gBAAetC,KAAf,EAA8B4C,gBAA9B,EAAyDH,KAAzD,EAA4G,CAC1G,IAAMI,IAAI,GAAGC,eAAe,CAAC,KAAK3F,KAAL,CAAWmB,QAAZ,CAAf,CAAqC0B,KAArC,CAAb,CAEA,IAAIlD,eAAe,CAAC+F,IAAD,CAAnB,EAA2B,CACzB,IAAID,gBAAgB,IAAIC,IAAI,CAAC1F,KAAL,CAAW4F,IAAnC,EAAyC,CACvC,IAAIF,IAAI,CAAC1F,KAAL,CAAW6F,MAAf,EAAuB,CACrBjE,MAAM,CAACkE,IAAP,CAAYJ,IAAI,CAAC1F,KAAL,CAAW4F,IAAvB,EAA6BF,IAAI,CAAC1F,KAAL,CAAW6F,MAAxC,EACD,CAFD,MAEO,CACLE,QAAQ,CAACH,IAAT,GAAgBF,IAAI,CAAC1F,KAAL,CAAW4F,IAA3B,CACD,CACF,CACD,IAAIF,IAAI,CAAC1F,KAAL,CAAWsD,OAAf,EAAwB,CACtBoC,IAAI,CAAC1F,KAAL,CAAWsD,OAAX,CAAmBgC,KAAnB,EACD,CACD,IAAI,KAAKtF,KAAL,CAAWgG,WAAf,EAA4B,CAC1B,KAAKhG,KAAL,CAAWgG,WAAX,CAAuBV,KAAvB,EACD,CACD,OAAO,IAAP,CACD,CACD,OAAO,KAAP,CACD,CAhRH,QAgSUtC,IAhSV,GAgSE,cAAaiD,IAAb,EAA2B,CACzB,KAAK9D,QAAL,CAAc,UAACtC,KAAD,EAAQG,KAAR,EAAkB,CAC9B,IAAMmB,QAAQ,GAAGwE,eAAe,CAAC3F,KAAK,CAACmB,QAAP,CAAhC,CACA,IAAI,CAACA,QAAQ,CAAC4C,IAAT,CAAcpE,eAAd,CAAL,EAAqC,CACnC,OAAO,IAAP,CACD,CACD,IAAIkD,KAAK,GAAGhD,KAAK,CAACC,gBAAlB,CACA,GAAG,CACD+C,KAAK,IAAIoD,IAAT,CACA,IAAI,CAACjG,KAAK,CAACkG,eAAP,KAA2BrD,KAAK,GAAG,CAAR,IAAaA,KAAK,GAAG1B,QAAQ,CAACgF,MAAzD,CAAJ,EAAsE,CACpE,OAAO,IAAP,CACD,CAED,IAAItD,KAAK,GAAG,CAAZ,EAAe,CACbA,KAAK,GAAG1B,QAAQ,CAACgF,MAAT,GAAkB,CAA1B,CACD,CAFD,MAEO,IAAItD,KAAK,GAAG1B,QAAQ,CAACgF,MAArB,EAA6B,CAClCtD,KAAK,GAAG,CAAR,CACD,CAED,IAAM6B,KAAK,GAAGvD,QAAQ,CAAC0B,KAAD,CAAtB,CACA,IAAIlD,eAAe,CAAC+E,KAAD,CAAnB,EAA4B,CAC1B,OAAO,EAAE5E,gBAAgB,EAAE+C,KAApB,EAAP,CACD,CACF,CAhBD,QAgBSA,KAAK,KAAKhD,KAAK,CAACC,gBAhBzB,EAiBA,OAAO,IAAP,CACD,CAxBD,EAwBG,KAAK2C,gBAxBR,EAyBD,CA1TH,QAoUU0B,OApUV,GAoUE,mBAAkB,KACRhD,QADQ,GACK,KAAKnB,KADV,CACRmB,QADQ,CAEhB,OAAO,CAACA,QAAD,IAAa,CAACwE,eAAe,CAACxE,QAAD,CAAf,CAA0BiF,MAA1B,CAAiCC,OAAjC,EAA0CF,MAA/D,CACD,CAvUH,uBAAkCtH,KAAK,CAACyH,aAAxC,WACgBC,mBADhB,GACsC,cADtC,UAGgB9F,YAHhB,GAG+B,EAC3B8D,KAAK,EAAE,MADoB,EAE3BxE,SAAS,EAAE,GAFgB,EAG3BuE,SAAS,EAAE,IAHgB,EAI3BE,mBAAmB,EAAE,IAJM,EAK3B0B,eAAe,EAAE,IALU,EAM3B5D,wBAAwB,EAAE,CAAC,CANA,EAH/B;;AAsWA,SAAS+D,OAAT,CAAiBG,KAAjB,EAA2C;AACzC,SAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKC,SAAnC;AACD;;AAED,SAASd,eAAT,CAAyBxE,QAAzB,EAAuE;AACrE,MAAMuF,GAAsB,GAAG,EAA/B;AACA;AACA7H,EAAAA,KAAK,CAAC2C,QAAN,CAAemF,OAAf,CAAuBxF,QAAvB,EAAiC,UAACuD,KAAD,EAAW;AAC1CgC,IAAAA,GAAG,CAACE,IAAJ,CAASlC,KAAT;AACD,GAFD;AAGA,SAAOgC,GAAP;AACD","sourcesContent":["import React from 'react';\n\nimport { isHTMLElement } from '../../lib/SSRSafe';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps, prevState: MenuState) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\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 enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || child == null) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(child, {\n ref,\n state: highlight ? 'hover' : child.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(child) && child.props.onMouseEnter) {\n child.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(child) && child.props.onMouseLeave) {\n child.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return child;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n const rootNode = getRootNode(this);\n // TODO: Remove this check once IF-647 is resolved\n if (isHTMLElement(rootNode)) {\n rootNode?.focus();\n }\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && this.header.getBoundingClientRect().height) || 0) +\n ((this.footer && this.footer.getBoundingClientRect().height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n const rootNode = getRootNode(this.highlighted);\n // TODO: Remove this check once IF-647 is resolved\n if (rootNode instanceof HTMLElement) {\n this.scrollContainer.scrollTo(rootNode);\n }\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n\n const rootNode = getRootNode(this);\n // TODO: Remove this check once IF-647 is resolved\n if (isHTMLElement(rootNode)) {\n rootNode?.focus();\n }\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction isExist(value: any): value is any {\n return value !== null && value !== undefined;\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
@@ -38,7 +38,12 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
38
38
 
39
39
  _this.scrollToSelected = function () {
40
40
  if (_this.scrollContainer && _this.highlighted) {
41
- _this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
41
+ var _rootNode = getRootNode(_this.highlighted); // TODO: Remove this check once IF-647 is resolved
42
+
43
+
44
+ if (_rootNode instanceof HTMLElement) {
45
+ _this.scrollContainer.scrollTo(_rootNode);
46
+ }
42
47
  }
43
48
  };
44
49