@skbkontur/react-ui 3.12.0 → 3.12.3
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 +34 -0
- package/cjs/components/DatePicker/DatePicker.d.ts +0 -3
- package/cjs/components/DatePicker/DatePicker.js +14 -9
- package/cjs/components/DatePicker/DatePicker.js.map +1 -1
- package/cjs/components/Tooltip/Tooltip.md +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js +15 -13
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +4 -2
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/components/DatePicker/DatePicker/DatePicker.js +19 -15
- package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
- package/components/DatePicker/DatePicker.d.ts +0 -3
- package/components/Tooltip/Tooltip.md +1 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +18 -21
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/internal/Popup/Popup/Popup.js +3 -2
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Popup.tsx"],"names":["POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","rootNode","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","setRootNode","refForTransition","React","createRef","renderContainerRef","childInstance","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","LayoutEvents","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","onOpen","onClose","delayUpdateLocation","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","instance","originalRef","renderContent","childDomNode","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","styles","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","raf","cancel","x","y","Math","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\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 { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called with RenderContainer's ref\n // in the case when the anchor is not refable\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={anchorWithRef ? null : this.renderContainerRef}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private renderContainerRef = (childInstance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(childInstance);\n };\n\n private updateAnchorElement(childInstance: Nullable<React.ReactInstance>) {\n const childDomNode = getRootNode(childInstance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n this.setRootNode(childDomNode);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Popup.tsx"],"names":["POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","rootNode","state","location","props","opened","theme","layoutEventsToken","locationUpdateId","lastPopupElement","anchorElement","setRootNode","refForTransition","React","createRef","renderContainerRef","childInstance","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","LayoutEvents","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","onOpen","onClose","delayUpdateLocation","componentWillUnmount","removeEventListeners","remove","render","renderMain","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","instance","originalRef","canGetAnchorNode","renderContent","childDomNode","addEventListeners","addEventListener","removeEventListener","backgroundColor","disableAnimations","maxWidth","hasShadow","ignoreHover","children","renderChildren","PopupHelper","getPositionObject","direction","rootStyle","shouldFallbackShadow","isIE11","isEdge","isSafari","Boolean","styles","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","content","contentInner","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","raf","cancel","x","y","Math","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","isTestEnv"],"mappings":"6cAAA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,uC;;AAEA,IAAMA,0BAA0B,GAAG,aAAnC;AACA,IAAMC,kBAAkB,GAAG,EAAEC,KAAK,EAAE,CAAT,EAAYC,IAAI,EAAE,GAAlB,EAA3B;;AAEO,IAAMC,cAAc,GAAG;AAC5B,UAD4B;AAE5B,YAF4B;AAG5B,WAH4B;AAI5B,WAJ4B;AAK5B,cAL4B;AAM5B,cAN4B;AAO5B,cAP4B;AAQ5B,eAR4B;AAS5B,aAT4B;AAU5B,aAV4B;AAW5B,aAX4B;AAY5B,UAZ4B,CAAvB,C;;AAcA,IAAMC,eAAe,GAAGD,cAAc,CAAC,CAAD,CAAtC,C;;;;AAIP,IAAME,cAA6B,GAAG;AACpCC,EAAAA,QAAQ,EAAEF,eAD0B;AAEpCG,EAAAA,WAAW,EAAE;AACXC,IAAAA,GAAG,EAAE,CAAC,IADK;AAEXC,IAAAA,IAAI,EAAE,CAAC,IAFI,EAFuB,EAAtC,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEaC,K,OADZC,kB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4EQC,IAAAA,K,GAAoB,EAAEC,QAAQ,EAAE,MAAKC,KAAL,CAAWC,MAAX,GAAoBV,cAApB,GAAqC,IAAjD,E;AACnBW,IAAAA,K;AACAC,IAAAA,iB;AACAC,IAAAA,gB,GAAqC,I;AACrCC,IAAAA,gB;AACAC,IAAAA,a,GAAuC,I;AACvCC,IAAAA,W;AACAC,IAAAA,gB,gBAAmBC,eAAMC,SAAN,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGnBC,IAAAA,kB,GAAqB,UAACC,aAAD,EAAkD;AAC7E,YAAKC,mBAAL,CAAyBD,aAAzB;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCOE,IAAAA,gB,GAAmB,UAACC,KAAD,EAA2B;AACpD,UAAI,MAAKf,KAAL,CAAWgB,YAAf,EAA6B;AAC3B,cAAKhB,KAAL,CAAWgB,YAAX,CAAwBD,KAAxB;AACD;AACF,K;;AAEOE,IAAAA,gB,GAAmB,UAACF,KAAD,EAA2B;AACpD,UAAI,MAAKf,KAAL,CAAWkB,YAAf,EAA6B;AAC3B,cAAKlB,KAAL,CAAWkB,YAAX,CAAwBH,KAAxB;AACD;AACF,K;;AAEOI,IAAAA,W,GAAc,UAACJ,KAAD,EAA2B;AAC/C,UAAI,MAAKf,KAAL,CAAWoB,OAAf,EAAwB;AACtB,cAAKpB,KAAL,CAAWoB,OAAX,CAAmBL,KAAnB;AACD;AACF,K;;AAEOM,IAAAA,W,GAAc,UAACN,KAAD,EAA2B;AAC/C,UAAI,MAAKf,KAAL,CAAWsB,OAAf,EAAwB;AACtB,cAAKtB,KAAL,CAAWsB,OAAX,CAAmBP,KAAnB;AACD;AACF,K;;AAEOQ,IAAAA,U,GAAa,UAACR,KAAD,EAA2B;AAC9C,UAAI,MAAKf,KAAL,CAAWwB,MAAf,EAAuB;AACrB,cAAKxB,KAAL,CAAWwB,MAAX,CAAkBT,KAAlB;AACD;AACF,K;;AAEOU,IAAAA,c,GAAiB,UAACC,KAAD,EAAgC;AACvD,UAAI,OAAOA,KAAP,KAAiB,QAAjB,IAA6BA,KAAK,CAACC,QAAN,CAAe,GAAf,CAAjC,EAAsD;AACpD,eAAO,MAAKrB,aAAL,GAAsB,MAAKA,aAAL,CAAmBsB,WAAnB,GAAiCC,UAAU,CAACH,KAAD,CAA5C,GAAuD,GAA5E,GAAkF,CAAzF;AACD;AACD,aAAOA,KAAP;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DOI,IAAAA,a,GAAgB,YAAM;AAC5B,YAAKC,2BAAL;AACA,YAAKjC,KAAL,CAAWC,QAAX,KAAwB,IAAxB,IAAgC,MAAKiC,QAAL,CAAc,EAAEjC,QAAQ,EAAE,IAAZ,EAAd,CAAhC;AACD,K;;;;;;AAMOkC,IAAAA,e,GAAkB,UAACC,OAAD,EAAoC;AAC5D,YAAK7B,gBAAL,GAAwB6B,OAAxB;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BOC,IAAAA,iB,GAAoB,YAAM;AAChC,UAAI,CAAC,MAAKrC,KAAL,CAAWC,QAAhB,EAA0B;AACxB;AACD;AACD,YAAKqC,cAAL;AACD,K;;;;;;;;;;;;;;AAcOA,IAAAA,c,GAAiB,YAAM;AAC7B,UAAMC,YAAY,GAAG,MAAKhC,gBAA1B;;AAEA,UAAI,CAACgC,YAAL,EAAmB;AACjB;AACD;;AAED,UAAMtC,QAAQ,GAAG,MAAKuC,WAAL,CAAiBD,YAAjB,EAA+B,MAAKvC,KAAL,CAAWC,QAA1C,CAAjB;AACA,UAAI,CAAC,MAAKwC,cAAL,CAAoB,MAAKzC,KAAL,CAAWC,QAA/B,EAAyCA,QAAzC,CAAL,EAAyD;AACvD,cAAKiC,QAAL,CAAc,EAAEjC,QAAQ,EAARA,QAAF,EAAd;AACD;AACF,K,mDA7SMyC,iB,GAAP,6BAA2B,CACzB,KAAKJ,cAAL,GACA,KAAKjC,iBAAL,GAAyBsC,YAAY,CAACC,WAAb,CAAyB,KAAKP,iBAA9B,CAAzB,CACD,C,OAEaQ,wB,GAAd,kCAAuC3C,KAAvC,EAAoEF,KAApE,EAAuF,CACrF;AACJ;AACA,OACI,IAAIE,KAAK,CAACC,MAAV,EAAkB,CAChB,IAAI,CAACH,KAAK,CAACC,QAAX,EAAqB,CACnB,OAAO,EAAEA,QAAQ,EAAER,cAAZ,EAAP,CACD,CACF,CAJD,MAIO,IAAIO,KAAK,CAACC,QAAV,EAAoB,CACzB,OAAO,EAAEA,QAAQ,EAAER,cAAZ,EAAP,CACD,CACD,OAAOO,KAAP,CACD,C,QAEM8C,kB,GAAP,4BAA0BC,SAA1B,EAAiDC,SAAjD,EAAwE,CACtE,IAAMC,aAAa,GAAGD,SAAS,CAAC/C,QAAV,KAAuBR,cAA7C,CACA,IAAMyD,WAAW,GAAG,KAAKlD,KAAL,CAAWC,QAAX,KAAwBR,cAA5C,CACA,IAAM0D,SAAS,GAAGJ,SAAS,CAAC5C,MAAV,IAAoB,CAAC,KAAKD,KAAL,CAAWC,MAAlD,CAEA,IAAI,KAAKD,KAAL,CAAWC,MAAX,IAAqB8C,aAArB,IAAsCC,WAAtC,IAAqD,KAAKhD,KAAL,CAAWkD,MAApE,EAA4E,CAC1E,KAAKlD,KAAL,CAAWkD,MAAX,GACD,CACD,IAAID,SAAS,IAAI,CAACD,WAAd,IAA6B,KAAKhD,KAAL,CAAWmD,OAA5C,EAAqD,CACnD,KAAKnD,KAAL,CAAWmD,OAAX,GACD,CACD,IAAI,KAAKnD,KAAL,CAAWC,MAAf,EAAuB,CACrB,KAAKmD,mBAAL,GACD,CACF,C,QAEMC,oB,GAAP,gCAA8B,CAC5B,KAAKtB,2BAAL,GACA,KAAKuB,oBAAL,CAA0B,KAAKhD,aAA/B,EACA,IAAI,KAAKH,iBAAT,EAA4B,CAC1B,KAAKA,iBAAL,CAAuBoD,MAAvB,GACA,KAAKpD,iBAAL,GAAyB,IAAzB,CACD,CACD,IAAI,KAAKL,KAAL,CAAWC,QAAX,IAAuB,KAAKC,KAAL,CAAWmD,OAAtC,EAA+C,CAC7C,KAAKnD,KAAL,CAAWmD,OAAX,GACD,CACF,C,QAEMK,M,GAAP,kBAAgB,mBACd,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACtD,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACuD,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,QAEOA,U,GAAR,sBAAqB,uBACX1D,QADW,GACE,KAAKD,KADP,CACXC,QADW,mBAEmB,KAAKC,KAFxB,CAEXM,aAFW,eAEXA,aAFW,CAEIoD,UAFJ,eAEIA,UAFJ,CAInB,IAAIC,MAAiC,GAAG,IAAxC,CACA,IAAI,4BAAcrD,aAAd,CAAJ,EAAkC,CAChC,KAAKO,mBAAL,CAAyBP,aAAzB,EACD,CAFD,MAEO,kBAAIG,eAAMmD,cAAN,CAAqBtD,aAArB,CAAJ,EAAyC,CAC9CqD,MAAM,GAAGD,UAAU,gBAAG,2CAAOpD,aAAP,CAAH,GAAkCA,aAArD,CACD,CAFM,MAEA,CACLqD,MAAM,gBAAG,2CAAOrD,aAAP,CAAT,CACD,CAED,IAAMuD,aAAa,GACjBF,MAAM,iBAAIlD,eAAMmD,cAAN,CAAqBD,MAArB,CAAV,IAA0C,6BAAiBA,MAAjB,CAA1C,gBACIlD,eAAMqD,YAAN,CAAmBH,MAAnB,EAA2B,EACzBI,GAAG,EAAE,aAACC,QAAD,EAA6C,aAChD,MAAI,CAACnD,mBAAL,CAAyBmD,QAAzB,EACA,IAAMC,WAAW,cAAIN,MAAJ,qBAAG,QAAsCI,GAA1D,CACAE,WAAW,IAAI,gCAAaA,WAAb,EAA0BD,QAA1B,CAAf,CACD,CALwB,EAA3B,CADJ,GAQI,IATN,CAbmB,CAwBnB;AACA;AACA;AACA;AACA;AAEA,QAAME,gBAAgB,GAAG,CAAC,CAACL,aAAF,IAAmB,4BAAcvD,aAAd,CAA5C,CAEA,oBACE,6BAAC,gCAAD,IAAiB,MAAM,EAAEuD,aAAa,IAAIF,MAA1C,EAAkD,GAAG,EAAEO,gBAAgB,GAAG,IAAH,GAAU,KAAKvD,kBAAtF,IACGZ,QAAQ,IAAI,KAAKoE,aAAL,CAAmBpE,QAAnB,CADf,CADF,CAKD,C,QAMOc,mB,GAAR,6BAA4BD,aAA5B,EAA0E,CACxE,IAAMwD,YAAY,GAAG,2BAAYxD,aAAZ,CAArB,CACA,IAAMN,aAAa,GAAG,KAAKA,aAA3B,CAEA,IAAI8D,YAAY,KAAK9D,aAArB,EAAoC,CAClC,KAAKgD,oBAAL,CAA0BhD,aAA1B,EACA,KAAKA,aAAL,GAAqB8D,YAArB,CACA,KAAKC,iBAAL,CAAuBD,YAAvB,EACA,KAAK7D,WAAL,CAAiB6D,YAAjB,EACD,CACF,C,QAEOC,iB,GAAR,2BAA0BnC,OAA1B,EAA0D,CACxD,IAAIA,OAAO,IAAI,4BAAcA,OAAd,CAAf,EAAuC,CACrCA,OAAO,CAACoC,gBAAR,CAAyB,YAAzB,EAAuC,KAAKxD,gBAA5C,EACAoB,OAAO,CAACoC,gBAAR,CAAyB,YAAzB,EAAuC,KAAKrD,gBAA5C,EACAiB,OAAO,CAACoC,gBAAR,CAAyB,OAAzB,EAAkC,KAAKnD,WAAvC,EACAe,OAAO,CAACoC,gBAAR,CAAyB,SAAzB,EAAoC,KAAKjD,WAAzC,EACAa,OAAO,CAACoC,gBAAR,CAAyB,UAAzB,EAAqC,KAAK/C,UAA1C,EACD,CACF,C,QAEO+B,oB,GAAR,8BAA6BpB,OAA7B,EAA6D,CAC3D,IAAIA,OAAO,IAAI,4BAAcA,OAAd,CAAf,EAAuC,CACrCA,OAAO,CAACqC,mBAAR,CAA4B,YAA5B,EAA0C,KAAKzD,gBAA/C,EACAoB,OAAO,CAACqC,mBAAR,CAA4B,YAA5B,EAA0C,KAAKtD,gBAA/C,EACAiB,OAAO,CAACqC,mBAAR,CAA4B,OAA5B,EAAqC,KAAKpD,WAA1C,EACAe,OAAO,CAACqC,mBAAR,CAA4B,SAA5B,EAAuC,KAAKlD,WAA5C,EACAa,OAAO,CAACqC,mBAAR,CAA4B,UAA5B,EAAwC,KAAKhD,UAA7C,EACD,CACF,C,QAuCO4C,a,GAAR,uBAAsBpE,QAAtB,EAA+C,sCACmD,KAAKC,KADxD,CACrCwE,eADqC,gBACrCA,eADqC,CACpBC,iBADoB,gBACpBA,iBADoB,CACDC,QADC,gBACDA,QADC,CACSC,SADT,gBACSA,SADT,CACoBC,WADpB,gBACoBA,WADpB,CACiC3E,MADjC,gBACiCA,MADjC,CACyCyB,KADzC,gBACyCA,KADzC,CAE7C,IAAMmD,QAAQ,GAAG,KAAKC,cAAL,EAAjB,CAF6C,4BAIvBC,yBAAYC,iBAAZ,CAA8BjF,QAAQ,CAACP,QAAvC,CAJuB,CAIrCyF,SAJqC,yBAIrCA,SAJqC,CAK7C,IAAMC,SAA8B,8BAAQnF,QAAQ,CAACN,WAAjB,IAA8BiF,QAAQ,EAARA,QAA9B,GAApC,CAEA,IAAMS,oBAAoB,GAAGC,kBAAUC,cAAV,IAAoBC,gBAAjD,CAEA,oBACE,6BAAC,gCAAD,IACE,OAAO,EAAEpG,kBADX,EAEE,MAAM,EAAE,CAACuF,iBAFX,EAGE,EAAE,EAAEc,OAAO,CAACtF,MAAM,IAAI4E,QAAX,CAHb,EAIE,YAAY,MAJd,EAKE,aAAa,MALf,EAME,KAAK,EAAE,CAACJ,iBANV,EAOE,IAAI,EAAE,CAACA,iBAPT,EAQE,QAAQ,EAAE,KAAK3C,aARjB,EASE,OAAO,EAAE,KAAKtB,gBAThB,IAWG,UAACV,KAAD,2CACC,6BAAC,4BAAD,EAAmB,MAAI,CAACE,KAAxB,eACE,6BAAC,cAAD,IACE,UAAU,EAAE,MAAI,CAACiC,eADnB,EAEE,QAAQ,EAAE,OAFZ,EAGE,SAAS,EAAE,mEACRuD,cAAOC,KAAP,CAAa,MAAI,CAACvF,KAAlB,CADQ,IACmB,IADnB,YAERsF,cAAOE,MAAP,CAAc,MAAI,CAACxF,KAAnB,CAFQ,IAEoByE,SAAS,IAAI,CAACQ,oBAFlC,YAGRK,cAAOG,cAAP,CAAsB,MAAI,CAACzF,KAA3B,CAHQ,IAG4ByE,SAAS,IAAIQ,oBAHzC,YAIRK,cAAOI,gBAAP,EAJQ,IAIoBhB,WAJpB,cAKLH,iBAAiB,GACjB,EADiB,oBAGde,oCAA2BP,SAA3B,EAA+D,MAAI,CAAC/E,KAApE,CAHc,IAG+D,IAH/D,OAIdsF,cAAOK,eAAP,EAJc,IAIa/F,KAAK,KAAK,UAJvB,OAKd0F,cAAOM,qBAAP,EALc,IAKmBhG,KAAK,KAAK,SAL7B,OAMd0F,cAAOO,cAAP,EANc,IAMYjG,KAAK,KAAK,SANtB,OALZ,EAHb,EAiBE,KAAK,EAAEoF,SAjBT,EAkBE,YAAY,EAAE,MAAI,CAACpE,gBAlBrB,EAmBE,YAAY,EAAE,MAAI,CAACG,gBAnBrB,iBAqBE,sCAAK,SAAS,EAAEuE,cAAOQ,OAAP,CAAe,MAAI,CAAC9F,KAApB,CAAhB,EAA4C,YAAU,cAAtD,EAAsE,GAAG,EAAE,MAAI,CAACM,gBAAhF,iBACE,sCACE,SAAS,EAAEgF,cAAOS,YAAP,CAAoB,MAAI,CAAC/F,KAAzB,CADb,EAEE,KAAK,EAAE,EAAEsE,eAAe,EAAfA,eAAF,EAAmB9C,KAAK,EAAE,MAAI,CAACD,cAAL,CAAoBC,KAApB,CAA1B,EAFT,EAGE,YAAU,mBAHZ,IAKGmD,QALH,CADF,CArBF,EA8BG,MAAI,CAACqB,SAAL,CAAenG,QAAQ,CAACP,QAAxB,CA9BH,CADF,CADD,EAXH,CADF,CAkDD,C,QAOOsF,c,GAAR,0BAAyB,CACvB,OAAO,uBAAW,KAAK9E,KAAL,CAAW6E,QAAtB,IAAkC,KAAK7E,KAAL,CAAW6E,QAAX,EAAlC,GAA0D,KAAK7E,KAAL,CAAW6E,QAA5E,CACD,C,QAMOqB,S,GAAR,mBAAkBC,YAAlB,EAAyD,CACvD;AACJ;AACA;AACA;AACA,OACI,IAAMC,oBAAoB,GAAG,KAAKlG,KAAL,CAAWmG,gBAAX,KAAgCpH,0BAA7D,CACA,IAAMqH,SAAS,GAAGlB,kBAAUgB,oBAAV,GAAiC,qBAAjC,GAAyD,KAAKlG,KAAL,CAAWmG,gBAAtF,CAPuD,mBASM,KAAKrG,KATX,CAS/CuG,OAT+C,gBAS/CA,OAT+C,CAStC5B,SATsC,gBAStCA,SATsC,CAS3BH,eAT2B,gBAS3BA,eAT2B,CASVgC,WATU,gBASVA,WATU,CAUvD,IAAMhH,QAAQ,GAAGuF,yBAAYC,iBAAZ,CAA8BmB,YAA9B,CAAjB,CAEA,OACE,KAAKnG,KAAL,CAAWyG,MAAX,iBACE,6BAAC,kBAAD,IACE,YAAY,EAAE,KAAKpG,gBADrB,EAEE,aAAa,EAAE8F,YAFjB,EAGE,IAAI,EAAEI,OAAO,IAAIG,QAAQ,CAAC,KAAKxG,KAAL,CAAWyG,YAAZ,CAH3B,EAIE,MAAM,EAAE,KAAKC,YAAL,CAAkBpH,QAAQ,CAACqH,KAA3B,CAJV,EAKE,WAAW,EAAElC,SAAS,GAAG,CAAH,GAAO,CAL/B,EAME,eAAe,EAAEH,eAAe,IAAI,KAAKtE,KAAL,CAAW4G,eANjD,EAOE,WAAW,EAAEN,WAAW,IAAIF,SAP9B,GAFJ,CAaD,C,QASOlD,mB,GAAR,+BAA8B,CAC5B,KAAKrB,2BAAL,GACA,KAAK3B,gBAAL,GAAwB,kBAAI,KAAKgC,cAAT,CAAxB,CACD,C,QAEOL,2B,GAAR,uCAAsC,CACpC,IAAI,KAAK3B,gBAAT,EAA2B,CACzB2G,aAAIC,MAAJ,CAAW,KAAK5G,gBAAhB,EACA,KAAKA,gBAAL,GAAwB,IAAxB,CACD,CACF,C,QAeOmC,c,GAAR,wBAAuB0E,CAAvB,EAAmDC,CAAnD,EAA+E,CAC7E,IAAID,CAAC,KAAKC,CAAV,EAAa,CACX,OAAO,IAAP,CACD,CAED,IAAID,CAAC,IAAI,IAAL,IAAaC,CAAC,IAAI,IAAtB,EAA4B,CAC1B,OAAO,KAAP,CACD,CAED,IAAI,CAAC9B,cAAD,IAAW,CAACC,cAAhB,EAAwB;AACtB;AACE4B,QAAAA,CAAC,CAACxH,WAAF,CAAcE,IAAd,KAAuBuH,CAAC,CAACzH,WAAF,CAAcE,IAArC;AACAsH,QAAAA,CAAC,CAACxH,WAAF,CAAcC,GAAd,KAAsBwH,CAAC,CAACzH,WAAF,CAAcC,GADpC;AAEAuH,QAAAA,CAAC,CAACzH,QAAF,KAAe0H,CAAC,CAAC1H,QAHnB;;AAKD;;AAED;AACA;;AAEA;AACEyH,MAAAA,CAAC,CAACzH,QAAF,KAAe0H,CAAC,CAAC1H,QAAjB;AACA2H,MAAAA,IAAI,CAACC,GAAL,CAASH,CAAC,CAACxH,WAAF,CAAcC,GAAd,GAAoBwH,CAAC,CAACzH,WAAF,CAAcC,GAA3C,KAAmD,CADnD;AAEAyH,MAAAA,IAAI,CAACC,GAAL,CAASH,CAAC,CAACxH,WAAF,CAAcE,IAAd,GAAqBuH,CAAC,CAACzH,WAAF,CAAcE,IAA5C,KAAqD,CAHvD;;AAKD,G;;AAEO2C,EAAAA,W,GAAR,qBAAoBD,YAApB,EAA+CtC,QAA/C,EAAmF;AACzB,SAAKC,KADoB,CACzEqH,SADyE,gBACzEA,SADyE,CAC9DC,gCAD8D,gBAC9DA,gCAD8D;AAEjF,QAAMhH,aAAa,GAAG,KAAKA,aAA3B;;AAEA;AACEA,IAAAA,aAAa,IAAI,4BAAcA,aAAd,CADnB;AAEE,kEAFF;;;AAKA,QAAI,EAAEA,aAAa,IAAI,4BAAcA,aAAd,CAAnB,CAAJ,EAAsD;AACpD,aAAOP,QAAP;AACD;;AAED,QAAMwH,UAAU,GAAGxC,yBAAYyC,sBAAZ,CAAmClH,aAAnC,CAAnB;AACA,QAAMmH,SAAS,GAAG1C,yBAAYyC,sBAAZ,CAAmCnF,YAAnC,CAAlB;;AAEA,QAAI7C,QAAJ;AACA,QAAIC,WAAJ;;AAEA,QAAIM,QAAQ,IAAIA,QAAQ,KAAKR,cAAzB,IAA2CQ,QAAQ,CAACP,QAAxD,EAAkE;AAChEA,MAAAA,QAAQ,GAAGO,QAAQ,CAACP,QAApB;AACAC,MAAAA,WAAW,GAAG,KAAKiI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CjI,QAA3C,CAAd;;AAEA,UAAMmI,cAAc,GAAG5C,yBAAY4C,cAAZ,CAA2BlI,WAA3B,EAAwCgI,SAAxC,CAAvB;AACA,UAAMG,gBAAgB,GAAG,CAACD,cAAD,IAAmB5C,yBAAY8C,qBAAZ,CAAkCrI,QAAlC,EAA4CC,WAA5C,CAA5C;;AAEA;AACE;AACA;AACC6H,MAAAA,gCAAgC,KAAKK,cAAc,IAAIC,gBAAvB,CAAjC;AACA;AACA;AACCD,MAAAA,cAAc,IAAInI,QAAQ,KAAK6H,SAAS,CAAC,CAAD,CAN3C;AAOE;AACA;AACA,eAAO,EAAE5H,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAED,yDAAiB6H,SAAjB,wCAA4B,CAAvB7H,QAAuB;AAC1BC,MAAAA,WAAW,GAAG,KAAKiI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CjI,QAA3C,CAAd;AACA,UAAIuF,yBAAY4C,cAAZ,CAA2BlI,WAA3B,EAAwCgI,SAAxC,CAAJ,EAAwD;AACtD,eAAO,EAAEhI,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD;AACF;;AAEDA,IAAAA,QAAQ,GAAG6H,SAAS,CAAC,CAAD,CAApB;AACA5H,IAAAA,WAAW,GAAG,KAAKiI,cAAL,CAAoBH,UAApB,EAAgCE,SAAhC,EAA2CjI,QAA3C,CAAd;AACA,WAAO,EAAEC,WAAW,EAAXA,WAAF,EAAeD,QAAQ,EAARA,QAAf,EAAP;AACD,G;;AAEOsI,EAAAA,oB,GAAR,8BAA6BP,UAA7B,EAA+C/H,QAA/C,EAAyE;AACvE,QAAI,CAAC,KAAKQ,KAAL,CAAWyG,MAAZ,IAAsB,gBAAgBsB,IAAhB,CAAqBvI,QAAQ,CAACqH,KAA9B,CAA1B,EAAgE;AAC9D,aAAO,CAAP;AACD;;AAED,QAAMmB,UAAU,GAAG,aAAaD,IAAb,CAAkBvI,QAAQ,CAACyF,SAA3B,IAAwCsC,UAAU,CAAC7F,KAAnD,GAA2D6F,UAAU,CAACU,MAAzF,CALuE;;AAO/D1B,IAAAA,OAP+D,GAOnD,KAAKvG,KAP8C,CAO/DuG,OAP+D;;AASvE,WAAOY,IAAI,CAACe,GAAL;AACL,KADK;AAEL,SAAKtB,YAAL,CAAkBpH,QAAQ,CAACqH,KAA3B,KAAqCN,OAAO,IAAIG,QAAQ,CAAC,KAAKxG,KAAL,CAAWyG,YAAZ,CAAxD,IAAqFqB,UAAU,GAAG,CAF7F,CAAP;;AAID,G;;AAEON,EAAAA,c,GAAR,wBAAuBH,UAAvB,EAAyCE,SAAzC,EAA0DtB,YAA1D,EAAgF;AAC9DgC,IAAAA,eAD8D,GAC1C,KAAKnI,KADqC,CACtEoI,MADsE;AAE9E,QAAMA,MAAM;AACV,8BAAcD,eAAd,KAAkC,CAACE,KAAK,CAACF,eAAD,CAAxC;AACIA,IAAAA,eADJ;AAEIzB,IAAAA,QAAQ,CAAC,KAAKxG,KAAL,CAAWoI,WAAZ,CAAR,IAAoC,CAH1C;AAIA,QAAM9I,QAAQ,GAAGuF,yBAAYC,iBAAZ,CAA8BmB,YAA9B,CAAjB;AACA,QAAMoC,WAAW,GAAG,KAAKvI,KAAL,CAAWuI,WAAX,GAAyB,KAAKT,oBAAL,CAA0BP,UAA1B,EAAsC/H,QAAtC,CAA7C;;AAEA,YAAQA,QAAQ,CAACyF,SAAjB;AACE,WAAK,KAAL;AACE,eAAO;AACLvF,UAAAA,GAAG,EAAE6H,UAAU,CAAC7H,GAAX,GAAiB+H,SAAS,CAACQ,MAA3B,GAAoCG,MADpC;AAELzI,UAAAA,IAAI,EAAE,KAAK6I,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDjI,QAAQ,CAACqH,KAA3D,EAAkE0B,WAAlE,CAFD,EAAP;;AAIF,WAAK,QAAL;AACE,eAAO;AACL7I,UAAAA,GAAG,EAAE6H,UAAU,CAAC7H,GAAX,GAAiB6H,UAAU,CAACU,MAA5B,GAAqCG,MADrC;AAELzI,UAAAA,IAAI,EAAE,KAAK6I,qBAAL,CAA2BjB,UAA3B,EAAuCE,SAAvC,EAAkDjI,QAAQ,CAACqH,KAA3D,EAAkE0B,WAAlE,CAFD,EAAP;;AAIF,WAAK,MAAL;AACE,eAAO;AACL7I,UAAAA,GAAG,EAAE,KAAK+I,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDjI,QAAQ,CAACqH,KAAzD,EAAgE0B,WAAhE,CADA;AAEL5I,UAAAA,IAAI,EAAE4H,UAAU,CAAC5H,IAAX,GAAkB8H,SAAS,CAAC/F,KAA5B,GAAoC0G,MAFrC,EAAP;;AAIF,WAAK,OAAL;AACE,eAAO;AACL1I,UAAAA,GAAG,EAAE,KAAK+I,mBAAL,CAAyBlB,UAAzB,EAAqCE,SAArC,EAAgDjI,QAAQ,CAACqH,KAAzD,EAAgE0B,WAAhE,CADA;AAEL5I,UAAAA,IAAI,EAAE4H,UAAU,CAAC5H,IAAX,GAAkB4H,UAAU,CAAC7F,KAA7B,GAAqC0G,MAFtC,EAAP;;AAIF;AACE,cAAM,IAAIM,KAAJ,4BAAmClJ,QAAQ,CAACyF,SAA5C,OAAN,CAtBJ;;AAwBD,G;;AAEO2B,EAAAA,Y,GAAR,sBAAqBC,KAArB,EAAoC;AAC1B8B,IAAAA,SAD0B,GACZ,KAAK3I,KADO,CAC1B2I,SAD0B;;AAGlC,YAAQ9B,KAAR;AACE,WAAK,KAAL;AACA,WAAK,QAAL;AACE,eAAO8B,SAAS,IAAIjC,QAAQ,CAAC,KAAKxG,KAAL,CAAW0I,cAAZ,CAArB,IAAoDlC,QAAQ,CAAC,KAAKxG,KAAL,CAAW2I,eAAZ,CAAnE;AACF,WAAK,MAAL;AACA,WAAK,OAAL;AACE,eAAOF,SAAS,IAAIjC,QAAQ,CAAC,KAAKxG,KAAL,CAAW0I,cAAZ,CAArB,IAAoDlC,QAAQ,CAAC,KAAKxG,KAAL,CAAW4I,eAAZ,CAAnE;AACF,WAAK,QAAL;AACA,WAAK,QAAL;AACE,eAAO,CAAP;AACF;AACE,cAAM,IAAIJ,KAAJ,wBAA+B7B,KAA/B,OAAN,CAXJ;;AAaD,G;;AAEO2B,EAAAA,qB,GAAR,+BAA8BjB,UAA9B,EAAgDE,SAAhD,EAAiEZ,KAAjE,EAAgF0B,WAAhF,EAAqG;AACnG,YAAQ1B,KAAR;AACE,WAAK,MAAL;AACE,eAAOU,UAAU,CAAC5H,IAAX,GAAkB4I,WAAzB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAAC5H,IAAX,GAAkB,CAAC8H,SAAS,CAAC/F,KAAV,GAAkB6F,UAAU,CAAC7F,KAA9B,IAAuC,CAAhE;AACF,WAAK,OAAL;AACE,eAAO6F,UAAU,CAAC5H,IAAX,IAAmB8H,SAAS,CAAC/F,KAAV,GAAkB6F,UAAU,CAAC7F,KAAhD,IAAyD6G,WAAhE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B7B,KAA/B,OAAN,CARJ;;AAUD,G;;AAEO4B,EAAAA,mB,GAAR,6BAA4BlB,UAA5B,EAA8CE,SAA9C,EAA+DZ,KAA/D,EAA8E0B,WAA9E,EAAmG;AACjG,YAAQ1B,KAAR;AACE,WAAK,KAAL;AACE,eAAOU,UAAU,CAAC7H,GAAX,GAAiB6I,WAAxB;AACF,WAAK,QAAL;AACE,eAAOhB,UAAU,CAAC7H,GAAX,GAAiB,CAAC+H,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAA/B,IAAyC,CAAjE;AACF,WAAK,QAAL;AACE,eAAOV,UAAU,CAAC7H,GAAX,IAAkB+H,SAAS,CAACQ,MAAV,GAAmBV,UAAU,CAACU,MAAhD,IAA0DM,WAAjE;AACF;AACE,cAAM,IAAIG,KAAJ,wBAA+B7B,KAA/B,OAAN,CARJ;;AAUD,G,gBA7iBwBpG,eAAMsI,S,WACjBC,mB,GAAsB,O,UAEtBC,S,GAAY,EACxB;AACJ;AACA,KACI3I,aAAa,EAAE4I,mBAAUC,SAAV,CAAoB,CAAC,sCAAwB,oBAAMC,WAAN,EAAxB,CAAD,EAA6CF,mBAAUG,IAAvD,CAApB,EAAkFC,UAJzE,EAMxB;AACJ;AACA,KACI9E,eAAe,EAAE0E,mBAAUK,MATH,EAWxB1E,QAAQ,EAAEqE,mBAAUC,SAAV,CAAoB,CAACD,mBAAUG,IAAX,EAAiBH,mBAAUM,IAA3B,CAApB,CAXc,EAaxB;AACJ;AACA,KACI/C,MAAM,EAAEyC,mBAAUO,IAhBM,EAkBxB;AACJ;AACA,KACI9E,SAAS,EAAEuE,mBAAUO,IArBG,EAuBxB;AACJ;AACA,KACIrB,MAAM,EAAEc,mBAAUQ,MA1BM,EA4BxB;AACJ;AACA,KACIzJ,MAAM,EAAEiJ,mBAAUO,IA/BM,EAiCxB;AACJ;AACA,KACId,SAAS,EAAEO,mBAAUQ,MApCG,EAsCxB;AACJ;AACA;AACA;AACA,KACInD,OAAO,EAAE2C,mBAAUQ,MA3CK,EA6CxB;AACJ;AACA,KACInB,WAAW,EAAEW,mBAAUQ,MAhDC,EAkDxB;AACJ;AACA;AACA,KACIrC,SAAS,EAAE6B,mBAAUS,KAtDG,EAwDxB;AACJ;AACA,KACI/E,WAAW,EAAEsE,mBAAUO,IA3DC,E,UA8DZG,Y,GAAe,EAC3BrB,WAAW,EAAE,CADc,EAE3B9B,MAAM,EAAE,KAFmB,EAG3B9B,SAAS,EAAE,KAHgB,EAI3BF,iBAAiB,EAAEoF,6BAJQ,EAK3BnG,UAAU,EAAE,KALe,EAM3BkB,WAAW,EAAE,KANc,EAO3BlD,KAAK,EAAE,MAPoB,E","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private anchorElement: Nullable<HTMLElement> = null;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\n }\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 { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called with RenderContainer's ref\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.renderContainerRef}>\n {location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private renderContainerRef = (childInstance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(childInstance);\n };\n\n private updateAnchorElement(childInstance: Nullable<React.ReactInstance>) {\n const childDomNode = getRootNode(childInstance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n this.setRootNode(childDomNode);\n }\n }\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private renderContent(location: PopupLocation) {\n const { backgroundColor, disableAnimations, maxWidth, hasShadow, ignoreHover, opened, width } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props}>\n <ZIndex\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <div className={styles.content(this.theme)} data-tid={'PopupContent'} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={'PopupContentInner'}\n >\n {children}\n </div>\n </div>\n {this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (x == null || y == null) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
|
|
@@ -46,14 +46,26 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
|
|
|
46
46
|
};
|
|
47
47
|
_this.input = null;
|
|
48
48
|
_this.focused = false;
|
|
49
|
-
_this.internalDate = _this.parseValueToDate(_this.props.value);
|
|
50
|
-
_this.minDate = _this.parseValueToDate(_this.props.minDate);
|
|
51
|
-
_this.maxDate = _this.parseValueToDate(_this.props.maxDate);
|
|
52
49
|
_this.setRootNode = void 0;
|
|
53
50
|
|
|
54
51
|
_this.renderMain = function (props) {
|
|
55
52
|
var picker = null;
|
|
56
|
-
var
|
|
53
|
+
var _this$props = _this.props,
|
|
54
|
+
value = _this$props.value,
|
|
55
|
+
minDate = _this$props.minDate,
|
|
56
|
+
maxDate = _this$props.maxDate;
|
|
57
|
+
|
|
58
|
+
var internalDate = _this.parseValueToDate(value);
|
|
59
|
+
|
|
60
|
+
var date = internalDate ? internalDate.toNativeFormat() : null;
|
|
61
|
+
|
|
62
|
+
var parsedMinDate = _this.parseValueToDate(minDate);
|
|
63
|
+
|
|
64
|
+
var formattedMinDate = parsedMinDate && parsedMinDate.toNativeFormat() || undefined;
|
|
65
|
+
|
|
66
|
+
var parsedMaxDate = _this.parseValueToDate(maxDate);
|
|
67
|
+
|
|
68
|
+
var formattedMaxDate = parsedMaxDate && parsedMaxDate.toNativeFormat() || undefined;
|
|
57
69
|
|
|
58
70
|
if (_this.state.opened) {
|
|
59
71
|
picker = /*#__PURE__*/React.createElement(DropdownContainer, {
|
|
@@ -62,8 +74,8 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
|
|
|
62
74
|
align: _this.props.menuAlign
|
|
63
75
|
}, /*#__PURE__*/React.createElement(Picker, {
|
|
64
76
|
value: date,
|
|
65
|
-
minDate:
|
|
66
|
-
maxDate:
|
|
77
|
+
minDate: formattedMinDate,
|
|
78
|
+
maxDate: formattedMaxDate,
|
|
67
79
|
onPick: _this.handlePick,
|
|
68
80
|
onSelect: _this.handleSelect,
|
|
69
81
|
enableTodayLink: _this.props.enableTodayLink,
|
|
@@ -195,20 +207,12 @@ export var DatePicker = rootNode(_class = (_temp = _class2 = /*#__PURE__*/functi
|
|
|
195
207
|
};
|
|
196
208
|
|
|
197
209
|
_proto.componentDidUpdate = function componentDidUpdate() {
|
|
198
|
-
var
|
|
199
|
-
disabled = _this$props.disabled,
|
|
200
|
-
value = _this$props.value,
|
|
201
|
-
minDate = _this$props.minDate,
|
|
202
|
-
maxDate = _this$props.maxDate;
|
|
210
|
+
var disabled = this.props.disabled;
|
|
203
211
|
var opened = this.state.opened;
|
|
204
212
|
|
|
205
213
|
if (disabled && opened) {
|
|
206
214
|
this.close();
|
|
207
215
|
}
|
|
208
|
-
|
|
209
|
-
this.internalDate = this.parseValueToDate(value);
|
|
210
|
-
this.minDate = this.parseValueToDate(minDate);
|
|
211
|
-
this.maxDate = this.parseValueToDate(maxDate);
|
|
212
216
|
}
|
|
213
217
|
/**
|
|
214
218
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","internalDate","parseValueToDate","props","value","minDate","maxDate","setRootNode","renderMain","picker","date","toNativeFormat","getParent","menuAlign","undefined","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private internalDate?: InternalDate = this.parseValueToDate(this.props.value);\n private minDate?: InternalDate = this.parseValueToDate(this.props.minDate);\n private maxDate?: InternalDate = this.parseValueToDate(this.props.maxDate);\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled, value, minDate, maxDate } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n this.internalDate = this.parseValueToDate(value);\n this.minDate = this.parseValueToDate(minDate);\n this.maxDate = this.parseValueToDate(maxDate);\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n const date = this.internalDate ? this.internalDate.toNativeFormat() : null;\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={(this.minDate && this.minDate.toNativeFormat()) || undefined}\n maxDate={(this.maxDate && this.maxDate.toNativeFormat()) || undefined}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["DatePicker.tsx"],"names":["PropTypes","React","InternalDate","InternalDateTransformer","MAX_FULLDATE","MIN_FULLDATE","InternalDateOrder","InternalDateSeparator","InternalDateValidateCheck","DateInput","DropdownContainer","filterProps","CommonWrapper","isMobile","NativeDateInput","getRootNode","rootNode","isNonNullable","Picker","styles","INPUT_PASS_PROPS","autoFocus","disabled","warning","error","size","onKeyDown","MIN_WIDTH","DatePicker","state","opened","canUseMobileNativeDatePicker","input","focused","setRootNode","renderMain","props","picker","value","minDate","maxDate","internalDate","parseValueToDate","date","toNativeFormat","parsedMinDate","formattedMinDate","undefined","parsedMaxDate","formattedMaxDate","getParent","menuAlign","handlePick","handleSelect","enableTodayLink","isHoliday","root","getRootStyle","onMouseEnter","onMouseLeave","onMouseOver","getInputRef","handleBlur","handleFocus","onValueChange","width","minWidth","ref","setState","onFocus","close","onBlur","dateShape","blur","month","year","dateToInternalString","isWeekend","dateString","componentDidMount","useMobileNativeDatePicker","focus","componentDidUpdate","render","validate","checks","NotNull","Native","PureComponent","__KONTUR_REACT_UI__","propTypes","bool","string","isRequired","oneOf","oneOfType","number","func","defaultProps","_day","range","order","DMY","separator","Dot","setRangeStart","setRangeEnd","parseValue","Number","Limits","Range"],"mappings":"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","sourcesContent":["import PropTypes from 'prop-types';\nimport React from 'react';\n\nimport { InternalDate } from '../../lib/date/InternalDate';\nimport { InternalDateTransformer } from '../../lib/date/InternalDateTransformer';\nimport { MAX_FULLDATE, MIN_FULLDATE } from '../../lib/date/constants';\nimport { InternalDateOrder, InternalDateSeparator, InternalDateValidateCheck } from '../../lib/date/types';\nimport { Nullable } from '../../typings/utility-types';\nimport { CalendarDateShape } from '../../internal/Calendar';\nimport { DateInput } from '../DateInput';\nimport { DropdownContainer } from '../../internal/DropdownContainer';\nimport { filterProps } from '../../lib/filterProps';\nimport { CommonWrapper, CommonProps, CommonWrapperRestProps } from '../../internal/CommonWrapper';\nimport { isMobile } from '../../lib/client';\nimport { NativeDateInput } from '../../internal/NativeDateInput';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isNonNullable } from '../../lib/utils';\n\nimport { Picker } from './Picker';\nimport { styles } from './DatePicker.styles';\n\nconst INPUT_PASS_PROPS = {\n autoFocus: true,\n disabled: true,\n warning: true,\n error: true,\n size: true,\n onKeyDown: true,\n};\n\nexport const MIN_WIDTH = 120;\n\nexport interface DatePickerProps<T> extends CommonProps {\n autoFocus?: boolean;\n disabled?: boolean;\n enableTodayLink?: boolean;\n /**\n * Cостояние валидации при ошибке.\n */\n error?: boolean;\n minDate: T;\n maxDate: T;\n menuAlign?: 'left' | 'right';\n size?: 'small' | 'medium' | 'large';\n value?: T | null;\n /**\n * Cостояние валидации при предупреждении.\n */\n warning?: boolean;\n width?: number | string;\n onBlur?: () => void;\n /**\n * Вызывается при изменении `value`\n *\n * @param value - строка в формате `dd.mm.yyyy`.\n */\n onValueChange: (value: T) => void;\n onFocus?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<any>) => void;\n onMouseEnter?: (e: React.MouseEvent<any>) => void;\n onMouseLeave?: (e: React.MouseEvent<any>) => void;\n onMouseOver?: (e: React.MouseEvent<any>) => void;\n /**\n * Использовать на мобильных устройствах нативный календарь для выбора дат.\n *\n * - На iOS нативный календарь не умеет работать с minDate и maxDate\n */\n useMobileNativeDatePicker?: boolean;\n\n /**\n * Функция для определения праздничных дней\n * @default (_day, isWeekend) => isWeekend\n * @param {T} day - строка в формате `dd.mm.yyyy`\n * @param {boolean} isWeekend - флаг выходного (суббота или воскресенье)\n *\n * @returns {boolean} `true` для выходного или `false` для рабочего дня\n */\n isHoliday: (day: T, isWeekend: boolean) => boolean;\n}\n\nexport interface DatePickerState {\n opened: boolean;\n canUseMobileNativeDatePicker: boolean;\n}\n\ntype DatePickerValue = string;\n\n@rootNode\nexport class DatePicker extends React.PureComponent<DatePickerProps<DatePickerValue>, DatePickerState> {\n public static __KONTUR_REACT_UI__ = 'DatePicker';\n\n public static propTypes = {\n autoFocus: PropTypes.bool,\n\n disabled: PropTypes.bool,\n\n /**\n * Включает кнопку сегодня в календаре\n */\n enableTodayLink: PropTypes.bool,\n\n error: PropTypes.bool,\n\n /**\n * Максимальная дата в календаре.\n */\n maxDate: PropTypes.string.isRequired,\n\n menuAlign: PropTypes.oneOf(['left', 'right'] as Array<'left' | 'right'>),\n\n /**\n * Минимальная дата в календаре.\n */\n minDate: PropTypes.string.isRequired,\n\n /**\n * Строка формата `dd.mm.yyyy`\n */\n value: PropTypes.string,\n\n warning: PropTypes.bool,\n\n width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]).isRequired,\n\n onBlur: PropTypes.func,\n\n onValueChange: PropTypes.func.isRequired,\n\n onFocus: PropTypes.func,\n\n onKeyDown: PropTypes.func,\n\n onMouseEnter: PropTypes.func,\n\n onMouseLeave: PropTypes.func,\n\n onMouseOver: PropTypes.func,\n\n isHoliday: PropTypes.func.isRequired,\n };\n\n public static defaultProps = {\n minDate: MIN_FULLDATE,\n maxDate: MAX_FULLDATE,\n isHoliday: (_day: DatePickerValue, isWeekend: boolean) => isWeekend,\n };\n\n public static validate = (value: Nullable<string>, range: { minDate?: string; maxDate?: string } = {}) => {\n if (!value) {\n return false;\n }\n\n const { minDate = MIN_FULLDATE, maxDate = MAX_FULLDATE } = range;\n const internalDate = new InternalDate({\n order: InternalDateOrder.DMY,\n separator: InternalDateSeparator.Dot,\n })\n .setRangeStart(new InternalDate({ value: minDate }))\n .setRangeEnd(new InternalDate({ value: maxDate }))\n .parseValue(value);\n\n return internalDate.validate({\n checks: [\n InternalDateValidateCheck.NotNull,\n InternalDateValidateCheck.Number,\n InternalDateValidateCheck.Native,\n InternalDateValidateCheck.Limits,\n InternalDateValidateCheck.Range,\n ],\n });\n };\n\n public state: DatePickerState = { opened: false, canUseMobileNativeDatePicker: false };\n\n private input: DateInput | null = null;\n private focused = false;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n if (this.props.useMobileNativeDatePicker && isMobile) {\n this.setState({\n canUseMobileNativeDatePicker: true,\n });\n }\n if (this.props.autoFocus) {\n this.focus();\n }\n }\n\n public componentDidUpdate() {\n const { disabled } = this.props;\n const { opened } = this.state;\n if (disabled && opened) {\n this.close();\n }\n }\n\n /**\n * @public\n */\n public blur() {\n if (this.input) {\n this.input.blur();\n }\n this.handleBlur();\n }\n\n /**\n * @public\n */\n public focus() {\n if (this.props.disabled) {\n return;\n }\n if (this.input) {\n this.input.focus();\n }\n this.handleFocus();\n }\n\n /**\n * Закрывает выпадашку выбора дня\n * @public\n */\n public close() {\n this.setState({ opened: false });\n }\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n {this.renderMain}\n </CommonWrapper>\n );\n }\n\n public renderMain = (props: CommonWrapperRestProps<DatePickerProps<DatePickerValue>>) => {\n let picker = null;\n\n const { value, minDate, maxDate } = this.props;\n\n const internalDate = this.parseValueToDate(value);\n const date = internalDate ? internalDate.toNativeFormat() : null;\n\n const parsedMinDate = this.parseValueToDate(minDate);\n const formattedMinDate = (parsedMinDate && parsedMinDate.toNativeFormat()) || undefined;\n\n const parsedMaxDate = this.parseValueToDate(maxDate);\n const formattedMaxDate = (parsedMaxDate && parsedMaxDate.toNativeFormat()) || undefined;\n\n if (this.state.opened) {\n picker = (\n <DropdownContainer getParent={this.getParent} offsetY={2} align={this.props.menuAlign}>\n <Picker\n value={date}\n minDate={formattedMinDate}\n maxDate={formattedMaxDate}\n onPick={this.handlePick}\n onSelect={this.handleSelect}\n enableTodayLink={this.props.enableTodayLink}\n isHoliday={this.isHoliday}\n />\n </DropdownContainer>\n );\n }\n\n return (\n <label\n className={styles.root()}\n style={this.getRootStyle()}\n onMouseEnter={this.props.onMouseEnter}\n onMouseLeave={this.props.onMouseLeave}\n onMouseOver={this.props.onMouseOver}\n >\n <DateInput\n {...filterProps(props, INPUT_PASS_PROPS)}\n ref={this.getInputRef}\n value={this.props.value || ''}\n width=\"100%\"\n withIcon\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n onBlur={this.handleBlur}\n onFocus={this.handleFocus}\n onValueChange={this.props.onValueChange}\n />\n {this.state.canUseMobileNativeDatePicker && (\n <NativeDateInput\n onValueChange={this.props.onValueChange}\n value={this.props.value || ''}\n minDate={this.props.minDate}\n maxDate={this.props.maxDate}\n disabled={this.props.disabled}\n />\n )}\n {!this.state.canUseMobileNativeDatePicker && picker}\n </label>\n );\n };\n\n public getParent = () => {\n return getRootNode(this);\n };\n\n private getRootStyle = () => {\n const { width } = this.props;\n return isNonNullable(width) ? { width } : { minWidth: MIN_WIDTH };\n };\n\n private getInputRef = (ref: DateInput | null) => {\n this.input = ref;\n };\n\n private parseValueToDate(value?: Nullable<string>): InternalDate | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n const date = new InternalDate({ value });\n if (date.validate({ checks: [InternalDateValidateCheck.NotNull, InternalDateValidateCheck.Native] })) {\n return date;\n }\n return undefined;\n }\n\n private handleFocus = () => {\n if (this.focused) {\n return;\n }\n\n this.focused = true;\n\n this.setState({ opened: true });\n\n if (this.props.onFocus) {\n this.props.onFocus();\n }\n };\n\n private handleBlur = () => {\n if (!this.focused) {\n return;\n }\n\n this.focused = false;\n this.close();\n\n if (this.props.onBlur) {\n this.props.onBlur();\n }\n };\n\n private handlePick = (dateShape: CalendarDateShape) => {\n this.handleSelect(dateShape);\n this.blur();\n };\n\n private handleSelect = ({ date, month, year }: CalendarDateShape) => {\n const value = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n if (this.props.onValueChange) {\n this.props.onValueChange(value);\n }\n };\n\n private isHoliday = ({ date, month, year, isWeekend }: CalendarDateShape & { isWeekend: boolean }) => {\n const dateString = InternalDateTransformer.dateToInternalString({ date, month: month + 1, year });\n return this.props.isHoliday(dateString, isWeekend);\n };\n}\n"]}
|
|
@@ -100,9 +100,6 @@ export declare class DatePicker extends React.PureComponent<DatePickerProps<Date
|
|
|
100
100
|
state: DatePickerState;
|
|
101
101
|
private input;
|
|
102
102
|
private focused;
|
|
103
|
-
private internalDate?;
|
|
104
|
-
private minDate?;
|
|
105
|
-
private maxDate?;
|
|
106
103
|
private setRootNode;
|
|
107
104
|
componentDidMount(): void;
|
|
108
105
|
componentDidUpdate(): void;
|
|
@@ -270,7 +270,7 @@ class AnchorTooltipExample extends React.Component {
|
|
|
270
270
|
return (
|
|
271
271
|
<>
|
|
272
272
|
{this.state.anchor ? (
|
|
273
|
-
<Tooltip anchorElement={this.state.anchor} render={() => 'Hello React'} trigger="
|
|
273
|
+
<Tooltip anchorElement={this.state.anchor} render={() => 'Hello React'} trigger="hover" />
|
|
274
274
|
) : null}
|
|
275
275
|
<div style={containerStyle}>
|
|
276
276
|
{this.state.blocks.map(({ top, left }, i) => (
|
|
@@ -11,19 +11,10 @@ import { styles } from "../DropdownContainer.styles";
|
|
|
11
11
|
export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
|
|
12
12
|
_inheritsLoose(DropdownContainer, _React$PureComponent);
|
|
13
13
|
|
|
14
|
-
function DropdownContainer() {
|
|
14
|
+
function DropdownContainer(props) {
|
|
15
15
|
var _this;
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
args[_key] = arguments[_key];
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
_this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;
|
|
22
|
-
_this.state = {
|
|
23
|
-
position: null,
|
|
24
|
-
minWidth: 0,
|
|
25
|
-
isDocumentElementRoot: true
|
|
26
|
-
};
|
|
17
|
+
_this = _React$PureComponent.call(this, props) || this;
|
|
27
18
|
_this.getProps = createPropsGetter(DropdownContainer.defaultProps);
|
|
28
19
|
_this.dom = void 0;
|
|
29
20
|
_this.layoutSub = void 0;
|
|
@@ -146,6 +137,11 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
146
137
|
};
|
|
147
138
|
};
|
|
148
139
|
|
|
140
|
+
_this.state = {
|
|
141
|
+
position: null,
|
|
142
|
+
minWidth: 0,
|
|
143
|
+
isDocumentElementRoot: getIsDocumentElementRoot()
|
|
144
|
+
};
|
|
149
145
|
return _this;
|
|
150
146
|
}
|
|
151
147
|
|
|
@@ -154,16 +150,6 @@ export var DropdownContainer = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
154
150
|
_proto.componentDidMount = function componentDidMount() {
|
|
155
151
|
this.position();
|
|
156
152
|
this.layoutSub = LayoutEvents.addListener(this.position);
|
|
157
|
-
var _document2 = document,
|
|
158
|
-
body = _document2.body,
|
|
159
|
-
docEl = _document2.documentElement;
|
|
160
|
-
var htmlPosition = getComputedStyle(docEl).position;
|
|
161
|
-
var bodyPosition = getComputedStyle(body).position;
|
|
162
|
-
var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;
|
|
163
|
-
var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';
|
|
164
|
-
this.setState({
|
|
165
|
-
isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot
|
|
166
|
-
});
|
|
167
153
|
};
|
|
168
154
|
|
|
169
155
|
_proto.componentWillUnmount = function componentWillUnmount() {
|
|
@@ -213,4 +199,15 @@ DropdownContainer.defaultProps = {
|
|
|
213
199
|
disablePortal: false,
|
|
214
200
|
offsetX: 0,
|
|
215
201
|
offsetY: -1
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
var getIsDocumentElementRoot = function getIsDocumentElementRoot() {
|
|
205
|
+
var _document2 = document,
|
|
206
|
+
body = _document2.body,
|
|
207
|
+
documentElement = _document2.documentElement;
|
|
208
|
+
var htmlPosition = getComputedStyle(documentElement).position;
|
|
209
|
+
var bodyPosition = getComputedStyle(body).position;
|
|
210
|
+
var hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;
|
|
211
|
+
var hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';
|
|
212
|
+
return hasLimitedHeightRoot || hasStaticRoot;
|
|
216
213
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["DropdownContainer.tsx"],"names":["React","LayoutEvents","RenderContainer","ZIndex","createPropsGetter","cx","isIE11","styles","DropdownContainer","state","position","minWidth","isDocumentElementRoot","getProps","defaultProps","dom","layoutSub","ZIndexRef","element","isElement","node","Element","target","props","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","scrollHeight","setState","getMinWidth","disablePortal","convertToRelativePosition","child","children","item","height","width","targetHeight","componentDidMount","addListener","htmlPosition","getComputedStyle","bodyPosition","hasLimitedHeightRoot","hasStaticRoot","componentWillUnmount","remove","render","style","undefined","maxWidth","hasFixedWidth","content","alignRight","PureComponent","__KONTUR_REACT_UI__"],"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 public state: DropdownContainerState = {\n position: null,\n minWidth: 0,\n isDocumentElementRoot: true,\n };\n\n private getProps = createPropsGetter(DropdownContainer.defaultProps);\n\n private dom: Nullable<HTMLDivElement>;\n private layoutSub: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n\n public componentDidMount() {\n this.position();\n this.layoutSub = LayoutEvents.addListener(this.position);\n\n const { body, documentElement: docEl } = document;\n const htmlPosition = getComputedStyle(docEl).position;\n const bodyPosition = getComputedStyle(body).position;\n\n const hasLimitedHeightRoot = body.scrollHeight > body.clientHeight;\n const hasStaticRoot = htmlPosition === 'static' && bodyPosition === 'static';\n\n this.setState({ isDocumentElementRoot: hasLimitedHeightRoot || hasStaticRoot });\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"]}
|
|
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"]}
|
|
@@ -28,10 +28,10 @@ export declare class DropdownContainer extends React.PureComponent<DropdownConta
|
|
|
28
28
|
offsetX: number;
|
|
29
29
|
offsetY: number;
|
|
30
30
|
};
|
|
31
|
-
state: DropdownContainerState;
|
|
32
31
|
private getProps;
|
|
33
32
|
private dom;
|
|
34
33
|
private layoutSub;
|
|
34
|
+
constructor(props: DropdownContainerProps);
|
|
35
35
|
componentDidMount(): void;
|
|
36
36
|
componentWillUnmount(): void;
|
|
37
37
|
render(): JSX.Element;
|
|
@@ -215,7 +215,7 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
215
215
|
var hasLocation = this.state.location !== DUMMY_LOCATION;
|
|
216
216
|
var wasClosed = prevProps.opened && !this.props.opened;
|
|
217
217
|
|
|
218
|
-
if (hadNoLocation && hasLocation && this.props.onOpen) {
|
|
218
|
+
if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {
|
|
219
219
|
this.props.onOpen();
|
|
220
220
|
}
|
|
221
221
|
|
|
@@ -283,9 +283,10 @@ export var Popup = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_
|
|
|
283
283
|
// which should be called with RenderContainer's ref
|
|
284
284
|
// in the case when the anchor is not refable
|
|
285
285
|
|
|
286
|
+
var canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);
|
|
286
287
|
return /*#__PURE__*/React.createElement(RenderContainer, {
|
|
287
288
|
anchor: anchorWithRef || anchor,
|
|
288
|
-
ref:
|
|
289
|
+
ref: canGetAnchorNode ? null : this.renderContainerRef
|
|
289
290
|
}, location && this.renderContent(location));
|
|
290
291
|
};
|
|
291
292
|
|