@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.
- package/CHANGELOG.md +22 -0
- package/README.md +25 -4
- package/cjs/components/CurrencyInput/CurrencyInput.js +6 -2
- package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
- package/cjs/components/DatePicker/DatePicker.d.ts +1 -1
- package/cjs/components/Hint/Hint.d.ts +5 -1
- package/cjs/components/Hint/Hint.js +9 -1
- package/cjs/components/Hint/Hint.js.map +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js +1 -1
- package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
- package/cjs/components/Toast/Toast.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.d.ts +4 -2
- package/cjs/components/Tooltip/Tooltip.js +11 -8
- package/cjs/components/Tooltip/Tooltip.js.map +1 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/cjs/internal/CommonWrapper/CommonWrapper.js +20 -6
- package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/InternalMenu/InternalMenu.js +22 -8
- package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +7 -3
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Popup/Popup.d.ts +2 -2
- package/cjs/internal/Popup/Popup.js +29 -21
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/Popup/PopupHelper.d.ts +1 -1
- package/cjs/internal/Popup/PopupHelper.js.map +1 -1
- package/cjs/internal/Popup/PopupPin.d.ts +1 -1
- package/cjs/internal/Popup/PopupPin.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainer.js +10 -0
- package/cjs/internal/RenderContainer/RenderContainer.js.map +1 -1
- package/cjs/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/cjs/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/cjs/internal/RenderLayer/RenderLayer.js +11 -3
- package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
- package/cjs/lib/SSRSafe.d.ts +2 -0
- package/cjs/lib/SSRSafe.js +17 -1
- package/cjs/lib/SSRSafe.js.map +1 -1
- package/cjs/lib/dom/getDOMRect.d.ts +11 -0
- package/cjs/lib/dom/getDOMRect.js +36 -0
- package/cjs/lib/dom/getDOMRect.js.map +1 -0
- package/cjs/lib/instanceWithAnchorElement.d.ts +5 -0
- package/cjs/lib/instanceWithAnchorElement.js +9 -0
- package/cjs/lib/instanceWithAnchorElement.js.map +1 -0
- package/cjs/lib/listenFocusOutside.d.ts +1 -1
- package/cjs/lib/listenFocusOutside.js.map +1 -1
- package/cjs/lib/rootNode/getRootNode.d.ts +10 -1
- package/cjs/lib/rootNode/getRootNode.js +67 -12
- package/cjs/lib/rootNode/getRootNode.js.map +1 -1
- package/cjs/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/cjs/lib/rootNode/rootNodeDecorator.js +40 -4
- package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
- package/cjs/lib/utils.d.ts +7 -0
- package/cjs/lib/utils.js +12 -2
- package/cjs/lib/utils.js.map +1 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +8 -1
- package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +1 -1
- package/components/Hint/Hint/Hint.js +9 -1
- package/components/Hint/Hint/Hint.js.map +1 -1
- package/components/Hint/Hint.d.ts +5 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +1 -1
- package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
- package/components/ScrollContainer/ScrollContainer.d.ts +1 -1
- package/components/Toast/Toast/Toast.js.map +1 -1
- package/components/Tooltip/Tooltip/Tooltip.js +13 -9
- package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
- package/components/Tooltip/Tooltip.d.ts +4 -2
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +22 -7
- package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
- package/internal/CommonWrapper/CommonWrapper.d.ts +2 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/internal/InternalMenu/InternalMenu/InternalMenu.js +16 -6
- package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
- package/internal/Menu/Menu/Menu.js +6 -1
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Popup/Popup/Popup.js +36 -27
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/Popup/Popup.d.ts +2 -2
- package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
- package/internal/Popup/PopupHelper.d.ts +1 -1
- package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
- package/internal/Popup/PopupPin.d.ts +1 -1
- package/internal/RenderContainer/RenderContainer/RenderContainer.js +9 -0
- package/internal/RenderContainer/RenderContainer/RenderContainer.js.map +1 -1
- package/internal/RenderContainer/RenderContainerTypes.d.ts +1 -0
- package/internal/RenderLayer/RenderLayer/RenderLayer.js +13 -6
- package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
- package/internal/RenderLayer/RenderLayer.d.ts +2 -1
- package/lib/SSRSafe/SSRSafe.js +14 -0
- package/lib/SSRSafe/SSRSafe.js.map +1 -1
- package/lib/SSRSafe.d.ts +2 -0
- package/lib/dom/getDOMRect/getDOMRect.js +40 -0
- package/lib/dom/getDOMRect/getDOMRect.js.map +1 -0
- package/lib/dom/getDOMRect/package.json +6 -0
- package/lib/dom/getDOMRect.d.ts +11 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js +3 -0
- package/lib/instanceWithAnchorElement/instanceWithAnchorElement.js.map +1 -0
- package/lib/instanceWithAnchorElement/package.json +6 -0
- package/lib/instanceWithAnchorElement.d.ts +5 -0
- package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
- package/lib/listenFocusOutside.d.ts +1 -1
- package/lib/rootNode/getRootNode/getRootNode.js +58 -12
- package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
- package/lib/rootNode/getRootNode.d.ts +10 -1
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +24 -3
- package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
- package/lib/rootNode/rootNodeDecorator.d.ts +22 -3
- package/lib/utils/utils.js +10 -0
- package/lib/utils/utils.js.map +1 -1
- package/lib/utils.d.ts +7 -0
- package/package.json +12 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["InternalMenu.tsx"],"names":["InternalMenu","rootNode","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","setRootNode","header","footer","getProps","defaultProps","renderHeader","el","styles","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","React","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","isActiveElement","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":["InternalMenu","rootNode","state","highlightedIndex","maxHeight","props","scrollState","theme","scrollContainer","highlighted","setRootNode","header","footer","getProps","defaultProps","renderHeader","el","styles","fixedHeader","renderFooter","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","React","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","isActiveElement","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 { 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"]}
|
|
@@ -7,7 +7,7 @@ var _MenuHeader = require("../../components/MenuHeader");
|
|
|
7
7
|
var _ThemeContext = require("../../lib/theming/ThemeContext");
|
|
8
8
|
|
|
9
9
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
10
|
-
var
|
|
10
|
+
var _rootNode2 = require("../../lib/rootNode");
|
|
11
11
|
var _client = require("../../lib/client");
|
|
12
12
|
|
|
13
13
|
var _Menu = require("./Menu.styles");
|
|
@@ -28,7 +28,7 @@ var _isActiveElement = require("./isActiveElement");var _class, _class2, _temp;v
|
|
|
28
28
|
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
Menu = (0,
|
|
31
|
+
Menu = (0, _rootNode2.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(Menu, _React$Component);function Menu() {var _this;for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];}_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;_this.
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
@@ -181,7 +181,11 @@ Menu = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function
|
|
|
181
181
|
|
|
182
182
|
scrollToSelected = function () {
|
|
183
183
|
if (_this.scrollContainer && _this.highlighted) {
|
|
184
|
-
|
|
184
|
+
var _rootNode = (0, _rootNode2.getRootNode)(_this.highlighted);
|
|
185
|
+
// TODO: Remove this check once IF-647 is resolved
|
|
186
|
+
if (_rootNode instanceof HTMLElement) {
|
|
187
|
+
_this.scrollContainer.scrollTo(_rootNode);
|
|
188
|
+
}
|
|
185
189
|
}
|
|
186
190
|
};_this.
|
|
187
191
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Menu.tsx"],"names":["Menu","rootNode","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","setRootNode","refScrollContainer","scrollToSelected","scrollTo","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","React","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","getAlignRightClass","styles","root","shadow","hasShadow","getStyle","maxHeight","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","isActiveElement","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","align","width","value","undefined","ret","forEach","push","maxWidth","minWidth","alignRight","isIE11","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"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","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\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';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\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 /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\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(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={getStyle(this.props)}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\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: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(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 scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\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);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\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 this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\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\nconst getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: props.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: props.maxHeight,\n };\n};\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["Menu.tsx"],"names":["Menu","rootNode","state","highlightedIndex","theme","scrollContainer","highlighted","unmounted","setRootNode","refScrollContainer","scrollToSelected","HTMLElement","scrollTo","scrollToTop","scrollToBottom","highlight","index","setState","unhighlight","componentWillUnmount","render","renderMain","up","move","down","enter","event","select","reset","hasHighlightedItem","highlightItem","enableIconPadding","React","Children","toArray","props","children","some","x","isValidElement","icon","isEmpty","getAlignRightClass","styles","root","shadow","hasShadow","getStyle","maxHeight","preventWindowScroll","map","child","cloneElement","_enableIconPadding","ref","refHighlighted","bind","onClick","onMouseEnter","onMouseLeave","originalRef","menuItem","shouldHandleHref","item","childrenToArray","href","target","window","open","location","onItemClick","step","activeElements","filter","isActiveElement","length","indexOf","isExist","Component","__KONTUR_REACT_UI__","defaultProps","align","width","value","undefined","ret","forEach","push","maxWidth","minWidth","alignRight","isIE11","alignRightIE11","alignRightIE11FixAutoWidth"],"mappings":"gPAAA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA,oD;;;;;;;;;;;;;;;;;AAiBaA,I,OADZC,mB;;;;;;;;;;;AAYQC,IAAAA,K,GAAQ;AACbC,MAAAA,gBAAgB,EAAE,CAAC,CADN,E;;;AAIPC,IAAAA,K;AACAC,IAAAA,e;AACAC,IAAAA,W;AACAC,IAAAA,S,GAAY,K;AACZC,IAAAA,W;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqHAC,IAAAA,kB,GAAqB,UAACJ,eAAD,EAAgD;AAC3E,YAAKA,eAAL,GAAuBA,eAAvB;AACD,K;;;;;;;;;;;;;AAaOK,IAAAA,gB,GAAmB,YAAM;AAC/B,UAAI,MAAKL,eAAL,IAAwB,MAAKC,WAAjC,EAA8C;AAC5C,YAAML,SAAQ,GAAG,4BAAY,MAAKK,WAAjB,CAAjB;AACA;AACA,YAAIL,SAAQ,YAAYU,WAAxB,EAAqC;AACnC,gBAAKN,eAAL,CAAqBO,QAArB,CAA8BX,SAA9B;AACD;AACF;AACF,K;;AAEOY,IAAAA,W,GAAc,YAAM;AAC1B,UAAI,MAAKR,eAAT,EAA0B;AACxB,cAAKA,eAAL,CAAqBQ,WAArB;AACD;AACF,K;;AAEOC,IAAAA,c,GAAiB,YAAM;AAC7B,UAAI,MAAKT,eAAT,EAA0B;AACxB,cAAKA,eAAL,CAAqBS,cAArB;AACD;AACF,K;;;;;;;;;;;;;;;;;;;;;;;AAuBOC,IAAAA,S,GAAY,UAACC,KAAD,EAAmB;AACrC,YAAKC,QAAL,CAAc,EAAEd,gBAAgB,EAAEa,KAApB,EAAd;AACD,K;;AAEOE,IAAAA,W,GAAc,YAAM;AAC1B,YAAKD,QAAL,CAAc,EAAEd,gBAAgB,EAAE,CAAC,CAArB,EAAd;AACD,K,kDAnLMgB,oB,GAAP,gCAA8B,CAC5B,KAAKZ,SAAL,GAAiB,IAAjB,CACD,C,QAEMa,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAAChB,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACiB,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,CAED;AACF;AACA,K,QACSC,E,GAAP,cAAY,CACV,KAAKC,IAAL,CAAU,CAAC,CAAX,EACD,C,CAED;AACF;AACA,K,QACSC,I,GAAP,gBAAc,CACZ,KAAKD,IAAL,CAAU,CAAV,EACD,C,CAED;AACF;AACA,K,QACSE,K,GAAP,eAAaC,KAAb,EAAuD,CACrD,OAAO,KAAKC,MAAL,CAAY,KAAKzB,KAAL,CAAWC,gBAAvB,EAAyC,IAAzC,EAA+CuB,KAA/C,CAAP,CACD,C,CAED;AACF;AACA,K,QACSE,K,GAAP,iBAAe,CACb,KAAKX,QAAL,CAAc,EAAEd,gBAAgB,EAAE,CAAC,CAArB,EAAd,EACD,C,CAED;AACF;AACA,K,QACS0B,kB,GAAP,8BAA4B,CAC1B,OAAO,KAAK3B,KAAL,CAAWC,gBAAX,KAAgC,CAAC,CAAxC,CACD,C,QAEM2B,a,GAAP,uBAAqBd,KAArB,EAAoC,CAClC,KAAKD,SAAL,CAAeC,KAAf,EACD,C,QAEOK,U,GAAR,sBAAqB,uBACnB,IAAMU,iBAAiB,GAAGC,eAAMC,QAAN,CAAeC,OAAf,CAAuB,KAAKC,KAAL,CAAWC,QAAlC,EAA4CC,IAA5C,CACxB,UAACC,CAAD,UAAO,4BAAMC,cAAN,CAAqBD,CAArB,KAA2BA,CAAC,CAACH,KAAF,CAAQK,IAA1C,EADwB,CAA1B,CAIA,IAAI,KAAKC,OAAL,EAAJ,EAAoB,CAClB,OAAO,IAAP,CACD,CAED,oBACE,sCACE,SAAS,EAAE,iBAAGC,kBAAkB,CAAC,KAAKP,KAAN,CAArB,iBACRQ,aAAOC,IAAP,CAAY,KAAKxC,KAAjB,CADQ,IACkB,IADlB,MAERuC,aAAOE,MAAP,CAAc,KAAKzC,KAAnB,CAFQ,IAEoB,KAAK+B,KAAL,CAAWW,SAF/B,OADb,EAKE,KAAK,EAAEC,QAAQ,CAAC,KAAKZ,KAAN,CALjB,EAME,GAAG,EAAE,KAAK3B,WANZ,iBAQE,6BAAC,gCAAD,IACE,GAAG,EAAE,KAAKC,kBADZ,EAEE,SAAS,EAAE,KAAK0B,KAAL,CAAWa,SAFxB,EAGE,mBAAmB,EAAE,KAAKb,KAAL,CAAWc,mBAHlC,iBAKE,sCAAK,SAAS,EAAEN,aAAOtC,eAAP,CAAuB,KAAKD,KAA5B,CAAhB,IACG4B,eAAMC,QAAN,CAAeiB,GAAf,CAAmB,KAAKf,KAAL,CAAWC,QAA9B,EAAwC,UAACe,KAAD,EAAQnC,KAAR,EAAkB,CACzD,IAAI,CAACmC,KAAL,EAAY,CACV,OAAOA,KAAP,CACD,CACD,IAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6B,OAAOA,KAAP,KAAiB,QAAlD,EAA4D,CAC1D,OAAOA,KAAP,CACD,CAED,IAAIpB,iBAAiB,KAAK,0BAAWoB,KAAX,KAAqB,8BAAaA,KAAb,CAA1B,CAArB,EAAqE,CACnEA,KAAK,gBAAGnB,eAAMoB,YAAN,CAAmBD,KAAnB,EAA0B,EAChCE,kBAAkB,EAAE,IADY,EAA1B,CAAR,CAGD,CACD,IAAI,sCAAgBF,KAAhB,CAAJ,EAA4B,CAC1B,IAAMpC,SAAS,GAAG,MAAI,CAACb,KAAL,CAAWC,gBAAX,KAAgCa,KAAlD,CAEA,IAAIsC,GAAG,GAAGH,KAAK,CAACG,GAAhB,CACA,IAAIvC,SAAS,IAAI,OAAOoC,KAAK,CAACG,GAAb,KAAqB,QAAtC,EAAgD,CAC9CA,GAAG,GAAG,MAAI,CAACC,cAAL,CAAoBC,IAApB,CAAyB,MAAzB,EAA+BL,KAAK,CAACG,GAArC,CAAN,CACD,CAED,oBAAOtB,eAAMoB,YAAN,CAA4CD,KAA5C,EAAmD,EACxDG,GAAG,EAAHA,GADwD,EAExDpD,KAAK,EAAEa,SAAS,GAAG,OAAH,GAAaoC,KAAK,CAAChB,KAAN,CAAYjC,KAFe,EAGxDuD,OAAO,EAAE,MAAI,CAAC9B,MAAL,CAAY6B,IAAZ,CAAiB,MAAjB,EAAuBxC,KAAvB,EAA8B,KAA9B,CAH+C,EAIxD0C,YAAY,EAAE,MAAI,CAAC3C,SAAL,CAAeyC,IAAf,CAAoB,MAApB,EAA0BxC,KAA1B,CAJ0C,EAKxD2C,YAAY,EAAE,MAAI,CAACzC,WALqC,EAAnD,CAAP,CAOD,CACD,OAAOiC,KAAP,CACD,CA9BA,CADH,CALF,CARF,CADF,CAkDD,C,QAMOI,c,GAAR,wBACEK,WADF,EAEEC,QAFF,EAGE,CACA,KAAKvD,WAAL,GAAmBuD,QAAnB,CAEA,IAAI,OAAOD,WAAP,KAAuB,UAA3B,EAAuC,CACrCA,WAAW,CAACC,QAAD,CAAX,CACD,CACF,C,QAwBOlC,M,GAAR,gBAAeX,KAAf,EAA8B8C,gBAA9B,EAAyDpC,KAAzD,EAA4G,CAC1G,IAAMqC,IAAI,GAAGC,eAAe,CAAC,KAAK7B,KAAL,CAAWC,QAAZ,CAAf,CAAqCpB,KAArC,CAAb,CACA,IAAI,sCAAgB+C,IAAhB,CAAJ,EAA2B,CACzB,IAAID,gBAAgB,IAAIC,IAAI,CAAC5B,KAAL,CAAW8B,IAAnC,EAAyC,CACvC,IAAIF,IAAI,CAAC5B,KAAL,CAAW+B,MAAf,EAAuB,CACrBC,MAAM,CAACC,IAAP,CAAYL,IAAI,CAAC5B,KAAL,CAAW8B,IAAvB,EAA6BF,IAAI,CAAC5B,KAAL,CAAW+B,MAAxC,EACD,CAFD,MAEO,CACLG,QAAQ,CAACJ,IAAT,GAAgBF,IAAI,CAAC5B,KAAL,CAAW8B,IAA3B,CACD,CACF,CACD,IAAIF,IAAI,CAAC5B,KAAL,CAAWsB,OAAf,EAAwB,CACtBM,IAAI,CAAC5B,KAAL,CAAWsB,OAAX,CAAmB/B,KAAnB,EACD,CACD,IAAI,KAAKS,KAAL,CAAWmC,WAAf,EAA4B,CAC1B,KAAKnC,KAAL,CAAWmC,WAAX,GACD,CACD,OAAO,IAAP,CACD,CACD,OAAO,KAAP,CACD,C,QAUO/C,I,GAAR,cAAagD,IAAb,EAA2B,mBACzB,IAAI,KAAKhE,SAAT,EAAoB,CAClB;AACA,aACD,CAED,IAAM6B,QAAQ,GAAG4B,eAAe,CAAC,KAAK7B,KAAL,CAAWC,QAAZ,CAAhC,CACA,IAAMoC,cAAc,GAAGpC,QAAQ,CAACqC,MAAT,CAAgBC,gCAAhB,CAAvB,CACA,IAAI,CAACF,cAAc,CAACG,MAApB,EAA4B,CAC1B;AACD;AACD,QAAI3D,KAAK,GAAG,KAAKd,KAAL,CAAWC,gBAAvB,CAXyB;;AAavBa,MAAAA,KAAK,IAAIuD,IAAT;AACA,UAAIvD,KAAK,GAAG,CAAZ,EAAe;AACbA,QAAAA,KAAK,GAAGoB,QAAQ,CAACuC,MAAT,GAAkB,CAA1B;AACD,OAFD,MAEO,IAAI3D,KAAK,GAAGoB,QAAQ,CAACuC,MAArB,EAA6B;AAClC3D,QAAAA,KAAK,GAAG,CAAR;AACD;;AAED,UAAMmC,KAAK,GAAGf,QAAQ,CAACpB,KAAD,CAAtB;AACA,UAAI,sCAAgBmC,KAAhB,CAAJ,EAA4B;AAC1B,QAAA,MAAI,CAAClC,QAAL,CAAc,EAAEd,gBAAgB,EAAEa,KAApB,EAAd,EAA2C,YAAM;AAC/C,kBAAQwD,cAAc,CAACI,OAAf,CAAuBzB,KAAvB,CAAR;AACE,iBAAK,CAAL;AACE,cAAA,MAAI,CAACtC,WAAL;AACA;AACF,iBAAK2D,cAAc,CAACG,MAAf,GAAwB,CAA7B;AACE,cAAA,MAAI,CAAC7D,cAAL;AACA;AACF;AACE,cAAA,MAAI,CAACJ,gBAAL,GARJ;;AAUD,SAXD;AAYA;AACD,OAnCsB,EAYzB,GAAG;AAwBF,KAxBD,QAwBSM,KAAK,KAAK,KAAKd,KAAL,CAAWC,gBAxB9B;AAyBD,G;;AAEOsC,EAAAA,O,GAAR,mBAAkB;AACRL,IAAAA,QADQ,GACK,KAAKD,KADV,CACRC,QADQ;AAEhB,WAAO,CAACA,QAAD,IAAa,CAAC4B,eAAe,CAAC5B,QAAD,CAAf,CAA0BqC,MAA1B,CAAiCI,OAAjC,EAA0CF,MAA/D;AACD,G,eApPuB3C,eAAM8C,S,WAChBC,mB,GAAsB,M,UAEtBC,Y,GAAe,EAC3BC,KAAK,EAAE,MADoB,EAE3BC,KAAK,EAAE,MAFoB,EAG3BlC,SAAS,EAAE,GAHgB,EAI3BF,SAAS,EAAE,IAJgB,EAK3BG,mBAAmB,EAAE,IALM,E;;;AAoP/B,SAAS4B,OAAT,CAAiBM,KAAjB,EAA2C;AACzC,SAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKC,SAAnC;AACD;;AAED,SAASpB,eAAT,CAAyB5B,QAAzB,EAAuE;AACrE,MAAMiD,GAAsB,GAAG,EAA/B;AACA;AACArD,iBAAMC,QAAN,CAAeqD,OAAf,CAAuBlD,QAAvB,EAAiC,UAACe,KAAD,EAAW;AAC1CkC,IAAAA,GAAG,CAACE,IAAJ,CAASpC,KAAT;AACD,GAFD;AAGA,SAAOkC,GAAP;AACD;;AAED,IAAMtC,QAAQ,GAAG,SAAXA,QAAW,CAACZ,KAAD,EAAqC;AACpD,MAAIA,KAAK,CAAC8C,KAAN,KAAgB,OAApB,EAA6B;AAC3B,WAAO;AACLO,MAAAA,QAAQ,EAAErD,KAAK,CAAC+C,KADX;AAELO,MAAAA,QAAQ,EAAEtD,KAAK,CAAC+C,KAFX;AAGLlC,MAAAA,SAAS,EAAEb,KAAK,CAACa,SAHZ,EAAP;;AAKD;;AAED,SAAO;AACLkC,IAAAA,KAAK,EAAE/C,KAAK,CAAC+C,KADR;AAELlC,IAAAA,SAAS,EAAEb,KAAK,CAACa,SAFZ,EAAP;;AAID,CAbD;;AAeA,IAAMN,kBAAkB,GAAG,SAArBA,kBAAqB,CAACP,KAAD,EAAsB;AAC/C,MAAIA,KAAK,CAAC8C,KAAN,KAAgB,OAApB,EAA6B;AAC3B,WAAO;AACJtC,iBAAO+C,UAAP,EADI,IACkB,CAACC,cADnB;AAEJhD,iBAAOiD,cAAP,EAFI,IAEsBD,cAFtB;AAGJhD,iBAAOkD,0BAAP,EAHI,IAGkCF,kBAAUxD,KAAK,CAAC+C,KAAN,KAAgB,MAH5D,QAAP;;AAKD;;AAED,SAAO,IAAP;AACD,CAVD","sourcesContent":["import React, { CSSProperties } from 'react';\n\nimport { ScrollContainer } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { isMenuHeader } from '../../components/MenuHeader';\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';\nimport { isIE11 } from '../../lib/client';\n\nimport { styles } from './Menu.styles';\nimport { isActiveElement } from './isActiveElement';\n\nexport interface MenuProps {\n children: React.ReactNode;\n hasShadow?: boolean;\n maxHeight?: number | string;\n onItemClick?: () => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n align?: 'left' | 'right';\n}\n\nexport interface MenuState {\n highlightedIndex: number;\n}\n\n@rootNode\nexport class Menu extends React.Component<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'Menu';\n\n public static defaultProps = {\n align: 'left',\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n };\n\n public state = {\n highlightedIndex: -1,\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private unmounted = false;\n private setRootNode!: TSetRootNode;\n\n public componentWillUnmount() {\n this.unmounted = true;\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 /**\n * @public\n */\n public up() {\n this.move(-1);\n }\n\n /**\n * @public\n */\n public down() {\n this.move(1);\n }\n\n /**\n * @public\n */\n public enter(event: React.SyntheticEvent<HTMLElement>) {\n return this.select(this.state.highlightedIndex, true, event);\n }\n\n /**\n * @public\n */\n public reset() {\n this.setState({ highlightedIndex: -1 });\n }\n\n /**\n * @public\n */\n public hasHighlightedItem() {\n return this.state.highlightedIndex !== -1;\n }\n\n public highlightItem(index: number) {\n this.highlight(index);\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(getAlignRightClass(this.props), {\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={getStyle(this.props)}\n ref={this.setRootNode}\n >\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n >\n <div className={styles.scrollContainer(this.theme)}>\n {React.Children.map(this.props.children, (child, index) => {\n if (!child) {\n return child;\n }\n if (typeof child === 'string' || typeof child === 'number') {\n return child;\n }\n\n if (enableIconPadding && (isMenuItem(child) || isMenuHeader(child))) {\n child = React.cloneElement(child, {\n _enableIconPadding: true,\n });\n }\n if (isActiveElement(child)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = child.ref;\n if (highlight && typeof child.ref !== 'string') {\n ref = this.refHighlighted.bind(this, child.ref);\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: this.highlight.bind(this, index),\n onMouseLeave: this.unhighlight,\n });\n }\n return child;\n })}\n </div>\n </ScrollContainer>\n </div>\n );\n }\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: ((menuItem: MenuItem | null) => any) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (typeof originalRef === 'function') {\n originalRef(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 scrollToTop = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToTop();\n }\n };\n\n private scrollToBottom = () => {\n if (this.scrollContainer) {\n this.scrollContainer.scrollToBottom();\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\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);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick();\n }\n return true;\n }\n return false;\n }\n\n private highlight = (index: number) => {\n this.setState({ highlightedIndex: index });\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n if (this.unmounted) {\n // NOTE workaround, because `ComboBox` call `process.nextTick` in reducer\n return;\n }\n\n const children = childrenToArray(this.props.children);\n const activeElements = children.filter(isActiveElement);\n if (!activeElements.length) {\n return;\n }\n let index = this.state.highlightedIndex;\n do {\n index += step;\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 this.setState({ highlightedIndex: index }, () => {\n switch (activeElements.indexOf(child)) {\n case 0:\n this.scrollToTop();\n break;\n case activeElements.length - 1:\n this.scrollToBottom();\n break;\n default:\n this.scrollToSelected();\n }\n });\n return;\n }\n } while (index !== this.state.highlightedIndex);\n }\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isExist).length;\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\nconst getStyle = (props: MenuProps): CSSProperties => {\n if (props.align === 'right') {\n return {\n maxWidth: props.width,\n minWidth: props.width,\n maxHeight: props.maxHeight,\n };\n }\n\n return {\n width: props.width,\n maxHeight: props.maxHeight,\n };\n};\n\nconst getAlignRightClass = (props: MenuProps) => {\n if (props.align === 'right') {\n return cx({\n [styles.alignRight()]: !isIE11,\n [styles.alignRightIE11()]: isIE11,\n [styles.alignRightIE11FixAutoWidth()]: isIE11 && props.width === 'auto',\n });\n }\n\n return null;\n};\n"]}
|
|
@@ -118,21 +118,21 @@ export declare class Popup extends React.Component<PopupProps, PopupState> {
|
|
|
118
118
|
ignoreHover: boolean;
|
|
119
119
|
width: string;
|
|
120
120
|
};
|
|
121
|
+
static readonly defaultRootNode: null;
|
|
121
122
|
state: PopupState;
|
|
122
123
|
private theme;
|
|
123
124
|
private layoutEventsToken;
|
|
124
125
|
private locationUpdateId;
|
|
125
126
|
private lastPopupElement;
|
|
126
|
-
private anchorElement;
|
|
127
127
|
private setRootNode;
|
|
128
128
|
private refForTransition;
|
|
129
|
+
anchorElement: Nullable<Element>;
|
|
129
130
|
componentDidMount(): void;
|
|
130
131
|
static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState): PopupState;
|
|
131
132
|
componentDidUpdate(prevProps: PopupProps, prevState: PopupState): void;
|
|
132
133
|
componentWillUnmount(): void;
|
|
133
134
|
render(): JSX.Element;
|
|
134
135
|
private renderMain;
|
|
135
|
-
private renderContainerRef;
|
|
136
136
|
private updateAnchorElement;
|
|
137
137
|
private addEventListeners;
|
|
138
138
|
private removeEventListeners;
|
|
@@ -4,6 +4,7 @@ var _reactTransitionGroup = require("react-transition-group");
|
|
|
4
4
|
var _raf = _interopRequireDefault(require("raf"));
|
|
5
5
|
var _warning = _interopRequireDefault(require("warning"));
|
|
6
6
|
|
|
7
|
+
var _getDOMRect = require("../../lib/dom/getDOMRect");
|
|
7
8
|
|
|
8
9
|
var LayoutEvents = _interopRequireWildcard(require("../../lib/LayoutEvents"));
|
|
9
10
|
var _ZIndex = require("../ZIndex");
|
|
@@ -19,6 +20,7 @@ var _CommonWrapper = require("../CommonWrapper");
|
|
|
19
20
|
var _Emotion = require("../../lib/theming/Emotion");
|
|
20
21
|
var _rootNode = require("../../lib/rootNode");
|
|
21
22
|
var _callChildRef = require("../../lib/callChildRef/callChildRef");
|
|
23
|
+
var _instanceWithAnchorElement = require("../../lib/instanceWithAnchorElement");
|
|
22
24
|
|
|
23
25
|
var _PopupPin = require("./PopupPin");
|
|
24
26
|
var _PopupHelper = require("./PopupHelper");
|
|
@@ -180,6 +182,9 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
180
182
|
|
|
181
183
|
|
|
182
184
|
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
183
188
|
|
|
184
189
|
|
|
185
190
|
|
|
@@ -189,10 +194,10 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
189
194
|
layoutEventsToken = void 0;_this.
|
|
190
195
|
locationUpdateId = null;_this.
|
|
191
196
|
lastPopupElement = void 0;_this.
|
|
192
|
-
anchorElement = null;_this.
|
|
193
197
|
setRootNode = void 0;_this.
|
|
194
198
|
refForTransition = /*#__PURE__*/_react.default.createRef();_this.
|
|
195
199
|
|
|
200
|
+
anchorElement = null;_this.
|
|
196
201
|
|
|
197
202
|
|
|
198
203
|
|
|
@@ -290,15 +295,16 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
290
295
|
|
|
291
296
|
|
|
292
297
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
298
|
+
updateAnchorElement = function (instance) {
|
|
299
|
+
var childDomNode = (0, _instanceWithAnchorElement.isInstanceWithAnchorElement)(instance) ? instance.getAnchorElement() : (0, _rootNode.getRootNode)(instance);
|
|
300
|
+
var anchorElement = _this.anchorElement;
|
|
301
301
|
|
|
302
|
+
if (childDomNode !== anchorElement) {
|
|
303
|
+
_this.removeEventListeners(anchorElement);
|
|
304
|
+
_this.anchorElement = childDomNode;
|
|
305
|
+
_this.addEventListeners(childDomNode);
|
|
306
|
+
}
|
|
307
|
+
};_this.
|
|
302
308
|
|
|
303
309
|
|
|
304
310
|
|
|
@@ -358,7 +364,8 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
358
364
|
|
|
359
365
|
calculateWidth = function (width) {
|
|
360
366
|
if (typeof width === 'string' && width.includes('%')) {
|
|
361
|
-
|
|
367
|
+
var anchorWidth = Math.floor((0, _getDOMRect.getDOMRect)(_this.anchorElement).width);
|
|
368
|
+
return _this.anchorElement ? anchorWidth * parseFloat(width) / 100 : 0;
|
|
362
369
|
}
|
|
363
370
|
return width;
|
|
364
371
|
};_this.
|
|
@@ -422,6 +429,7 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
422
429
|
|
|
423
430
|
|
|
424
431
|
|
|
432
|
+
|
|
425
433
|
|
|
426
434
|
|
|
427
435
|
resetLocation = function () {
|
|
@@ -496,22 +504,22 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
496
504
|
}
|
|
497
505
|
};return _this;}var _proto = Popup.prototype;_proto.componentDidMount = function componentDidMount() {this.updateLocation();this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);};Popup.getDerivedStateFromProps = function getDerivedStateFromProps(props, state) {/**
|
|
498
506
|
* Delaying updateLocation to ensure it happens after props update
|
|
499
|
-
*/if (props.opened) {if (!state.location) {return { location: DUMMY_LOCATION };}} else if (state.location) {return { location: DUMMY_LOCATION };}return state;};_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {var hadNoLocation = prevState.location === DUMMY_LOCATION;var hasLocation = this.state.location !== DUMMY_LOCATION;var wasClosed = prevProps.opened && !this.props.opened;if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {this.props.onOpen();}if (wasClosed && !hasLocation && this.props.onClose) {this.props.onClose();}if (this.props.opened) {this.delayUpdateLocation();}};_proto.componentWillUnmount = function componentWillUnmount() {this.cancelDelayedUpdateLocation();this.removeEventListeners(this.anchorElement);if (this.layoutEventsToken) {this.layoutEventsToken.remove();this.layoutEventsToken = null;}if (this.state.location && this.props.onClose) {this.props.onClose();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this3 = this;var location = this.state.location;var _this$props = this.props,anchorElement = _this$props.anchorElement,useWrapper = _this$props.useWrapper;var anchor = null;if ((0, _SSRSafe.
|
|
507
|
+
*/if (props.opened) {if (!state.location) {return { location: DUMMY_LOCATION };}} else if (state.location) {return { location: DUMMY_LOCATION };}return state;};_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {var hadNoLocation = prevState.location === DUMMY_LOCATION;var hasLocation = this.state.location !== DUMMY_LOCATION;var wasClosed = prevProps.opened && !this.props.opened;if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {this.props.onOpen();}if (wasClosed && !hasLocation && this.props.onClose) {this.props.onClose();}if (this.props.opened) {this.delayUpdateLocation();}};_proto.componentWillUnmount = function componentWillUnmount() {this.cancelDelayedUpdateLocation();this.removeEventListeners(this.anchorElement);if (this.layoutEventsToken) {this.layoutEventsToken.remove();this.layoutEventsToken = null;}if (this.state.location && this.props.onClose) {this.props.onClose();}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this3 = this;var location = this.state.location;var _this$props = this.props,anchorElement = _this$props.anchorElement,useWrapper = _this$props.useWrapper;var anchor = null;if ((0, _SSRSafe.isElement)(anchorElement)) {this.updateAnchorElement(anchorElement);} else if ( /*#__PURE__*/_react.default.isValidElement(anchorElement)) {anchor = useWrapper ? /*#__PURE__*/_react.default.createElement("span", null, anchorElement) : anchorElement;} else {anchor = /*#__PURE__*/_react.default.createElement("span", null, anchorElement);}var anchorWithRef = anchor && /*#__PURE__*/_react.default.isValidElement(anchor) && (0, _utils.isRefableElement)(anchor) ? /*#__PURE__*/_react.default.cloneElement(anchor, { ref: function ref(instance) {var _anchor;_this3.updateAnchorElement(instance);var originalRef = (_anchor = anchor) == null ? void 0 : _anchor.ref;originalRef && (0, _callChildRef.callChildRef)(originalRef, instance);} }) : null; // we need to get anchor's DOM node
|
|
500
508
|
// so we either set our own ref on it via cloning
|
|
501
509
|
// or relay on findDOMNode (inside getRootNode)
|
|
502
|
-
// which should be called
|
|
510
|
+
// which should be called within updateAnchorElement
|
|
503
511
|
// in the case when the anchor is not refable
|
|
504
|
-
var canGetAnchorNode = !!anchorWithRef || (0, _SSRSafe.isHTMLElement)(anchorElement);return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, { anchor: anchorWithRef || anchor, ref: canGetAnchorNode ? null : this.
|
|
512
|
+
var canGetAnchorNode = !!anchorWithRef || (0, _SSRSafe.isHTMLElement)(anchorElement);return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, { anchor: anchorWithRef || anchor, ref: canGetAnchorNode ? null : this.updateAnchorElement }, location && this.renderContent(location));};_proto.addEventListeners = function addEventListeners(element) {if (element && (0, _SSRSafe.isElement)(element)) {// @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657
|
|
513
|
+
element.addEventListener('mouseenter', this.handleMouseEnter); // @ts-expect-error: See the comment above
|
|
514
|
+
element.addEventListener('mouseleave', this.handleMouseLeave); // @ts-expect-error: See the comment above
|
|
515
|
+
element.addEventListener('click', this.handleClick);element.addEventListener('focusin', this.handleFocus);element.addEventListener('focusout', this.handleBlur);}};_proto.removeEventListeners = function removeEventListeners(element) {if (element && (0, _SSRSafe.isElement)(element)) {// @ts-expect-error: Type ElementEventMap is missing events: https://github.com/skbkontur/retail-ui/pull/2946#discussion_r931072657
|
|
516
|
+
element.removeEventListener('mouseenter', this.handleMouseEnter); // @ts-expect-error: See the comment above
|
|
517
|
+
element.removeEventListener('mouseleave', this.handleMouseLeave); // @ts-expect-error: See the comment above
|
|
518
|
+
element.removeEventListener('click', this.handleClick);element.removeEventListener('focusin', this.handleFocus);element.removeEventListener('focusout', this.handleBlur);}};_proto.renderContent = function renderContent(location) {var _this4 = this;var _this$props2 = this.props,backgroundColor = _this$props2.backgroundColor,disableAnimations = _this$props2.disableAnimations,maxWidth = _this$props2.maxWidth,hasShadow = _this$props2.hasShadow,ignoreHover = _this$props2.ignoreHover,opened = _this$props2.opened,width = _this$props2.width;var children = this.renderChildren();var _PopupHelper$getPosit = _PopupHelper.PopupHelper.getPositionObject(location.position),direction = _PopupHelper$getPosit.direction;var rootStyle = (0, _extends3.default)({}, location.coordinates, { maxWidth: maxWidth });var shouldFallbackShadow = _client.isIE11 || _client.isEdge || _client.isSafari;return /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.Transition, { timeout: TRANSITION_TIMEOUT, appear: !disableAnimations, in: Boolean(opened && children), mountOnEnter: true, unmountOnExit: true, enter: !disableAnimations, exit: !disableAnimations, onExited: this.resetLocation, nodeRef: this.refForTransition }, function (state) {var _extends2, _ref;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends3.default)({}, _this4.props, { rootNodeRef: _this4.setRootNode }), /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { "data-tid": 'Popup__root', wrapperRef: _this4.refPopupElement, priority: 'Popup', className: (0, _Emotion.cx)((0, _extends3.default)((_extends2 = {}, _extends2[_Popup.styles.popup(_this4.theme)] = true, _extends2[_Popup.styles.shadow(_this4.theme)] = hasShadow && !shouldFallbackShadow, _extends2[_Popup.styles.shadowFallback(_this4.theme)] = hasShadow && shouldFallbackShadow, _extends2[_Popup.styles.popupIgnoreHover()] = ignoreHover, _extends2), disableAnimations ? {} : (_ref = {}, _ref[_Popup.styles["transition-enter-" + direction](_this4.theme)] = true, _ref[_Popup.styles.transitionEnter()] = state === 'entering', _ref[_Popup.styles.transitionEnterActive()] = state === 'entered', _ref[_Popup.styles.transitionExit()] = state === 'exiting', _ref))), style: rootStyle, onMouseEnter: _this4.handleMouseEnter, onMouseLeave: _this4.handleMouseLeave }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.content(_this4.theme), "data-tid": 'PopupContent', ref: _this4.refForTransition }, /*#__PURE__*/_react.default.createElement("div", { className: _Popup.styles.contentInner(_this4.theme), style: { backgroundColor: backgroundColor, width: _this4.calculateWidth(width) }, "data-tid": 'PopupContentInner' }, children)), _this4.renderPin(location.position)));});};_proto.renderChildren = function renderChildren() {return (0, _utils.isFunction)(this.props.children) ? this.props.children() : this.props.children;};_proto.renderPin = function renderPin(positionName) {/**
|
|
505
519
|
* Box-shadow does not appear under the pin. Borders are used instead.
|
|
506
520
|
* In non-ie browsers drop-shadow filter is used. It is applying
|
|
507
521
|
* shadow to the pin too.
|
|
508
|
-
*/var isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;var pinBorder = _client.isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;var _this$props3 = this.props,pinSize = _this$props3.pinSize,hasShadow = _this$props3.hasShadow,backgroundColor = _this$props3.backgroundColor,borderColor = _this$props3.borderColor;var position = _PopupHelper.PopupHelper.getPositionObject(positionName);return this.props.hasPin && /*#__PURE__*/_react.default.createElement(_PopupPin.PopupPin, { popupElement: this.lastPopupElement, popupPosition: positionName, size: pinSize || parseInt(this.theme.popupPinSize), offset: this.getPinOffset(position.align), borderWidth: hasShadow ? 1 : 0, backgroundColor: backgroundColor || this.theme.popupBackground, borderColor: borderColor || pinBorder });};_proto.delayUpdateLocation = function delayUpdateLocation() {this.cancelDelayedUpdateLocation();this.locationUpdateId = (0, _raf.default)(this.updateLocation);};_proto.cancelDelayedUpdateLocation = function cancelDelayedUpdateLocation() {if (this.locationUpdateId) {_raf.default.cancel(this.locationUpdateId);this.locationUpdateId = null;}};_proto.locationEquals = function locationEquals(x, y) {if (x === y) {return true;}if (x == null || y == null) {return false;}if (!_client.isIE11 && !_client.isEdge) {
|
|
509
|
-
return (
|
|
510
|
-
x.coordinates.left === y.coordinates.left &&
|
|
511
|
-
x.coordinates.top === y.coordinates.top &&
|
|
512
|
-
x.position === y.position);
|
|
513
|
-
|
|
514
|
-
}
|
|
522
|
+
*/var isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;var pinBorder = _client.isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;var _this$props3 = this.props,pinSize = _this$props3.pinSize,hasShadow = _this$props3.hasShadow,backgroundColor = _this$props3.backgroundColor,borderColor = _this$props3.borderColor;var position = _PopupHelper.PopupHelper.getPositionObject(positionName);return this.props.hasPin && /*#__PURE__*/_react.default.createElement(_PopupPin.PopupPin, { popupElement: this.lastPopupElement, popupPosition: positionName, size: pinSize || parseInt(this.theme.popupPinSize), offset: this.getPinOffset(position.align), borderWidth: hasShadow ? 1 : 0, backgroundColor: backgroundColor || this.theme.popupBackground, borderColor: borderColor || pinBorder });};_proto.delayUpdateLocation = function delayUpdateLocation() {this.cancelDelayedUpdateLocation();this.locationUpdateId = (0, _raf.default)(this.updateLocation);};_proto.cancelDelayedUpdateLocation = function cancelDelayedUpdateLocation() {if (this.locationUpdateId) {_raf.default.cancel(this.locationUpdateId);this.locationUpdateId = null;}};_proto.locationEquals = function locationEquals(x, y) {if (x === y) {return true;}if (x == null || y == null) {return false;}if (!_client.isIE11 && !_client.isEdge) {return x.coordinates.left === y.coordinates.left && x.coordinates.top === y.coordinates.top && x.position === y.position;}
|
|
515
523
|
|
|
516
524
|
// Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность
|
|
517
525
|
// уйти в бесконечный ререндер
|
|
@@ -691,4 +699,4 @@ Popup = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functio
|
|
|
691
699
|
* на котором будет отображаться пин
|
|
692
700
|
*/positions: _propTypes.default.array, /**
|
|
693
701
|
* Игнорировать ли события hover/click
|
|
694
|
-
*/ignoreHover: _propTypes.default.bool }, _class2.defaultProps = { popupOffset: 0, hasPin: false, hasShadow: false, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, ignoreHover: false, width: 'auto' }, _temp)) || _class;exports.Popup = Popup;
|
|
702
|
+
*/ignoreHover: _propTypes.default.bool }, _class2.defaultProps = { popupOffset: 0, hasPin: false, hasShadow: false, disableAnimations: _currentEnvironment.isTestEnv, useWrapper: false, ignoreHover: false, width: 'auto' }, _class2.defaultRootNode = null, _temp)) || _class;exports.Popup = Popup;
|