@skbkontur/react-ui 4.0.1 → 4.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/cjs/components/Button/Button.d.ts +2 -2
  3. package/cjs/components/Button/Button.js +1 -1
  4. package/cjs/components/Button/Button.js.map +1 -1
  5. package/cjs/components/Checkbox/Checkbox.d.ts +2 -2
  6. package/cjs/components/Checkbox/Checkbox.js.map +1 -1
  7. package/cjs/components/ComboBox/ComboBox.d.ts +3 -3
  8. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  9. package/cjs/components/CurrencyInput/CurrencyInput.d.ts +1 -1
  10. package/cjs/components/CurrencyInput/CurrencyInput.js +3 -3
  11. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  12. package/cjs/components/DateInput/DateInput.d.ts +2 -2
  13. package/cjs/components/DateInput/DateInput.js.map +1 -1
  14. package/cjs/components/DatePicker/DatePicker.d.ts +2 -2
  15. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  16. package/cjs/components/Dropdown/Dropdown.d.ts +2 -2
  17. package/cjs/components/Dropdown/Dropdown.js.map +1 -1
  18. package/cjs/components/Hint/Hint.d.ts +1 -1
  19. package/cjs/components/Hint/Hint.js.map +1 -1
  20. package/cjs/components/Input/Input.d.ts +3 -3
  21. package/cjs/components/Input/Input.js +1 -1
  22. package/cjs/components/Input/Input.js.map +1 -1
  23. package/cjs/components/Modal/Modal.d.ts +1 -1
  24. package/cjs/components/Modal/Modal.js +1 -1
  25. package/cjs/components/Modal/Modal.js.map +1 -1
  26. package/cjs/components/Radio/Radio.d.ts +2 -2
  27. package/cjs/components/Radio/Radio.js.map +1 -1
  28. package/cjs/components/RadioGroup/RadioGroup.d.ts +1 -1
  29. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  30. package/cjs/components/Select/Select.d.ts +3 -3
  31. package/cjs/components/Select/Select.js.map +1 -1
  32. package/cjs/components/SidePage/SidePage.styles.js +2 -2
  33. package/cjs/components/SidePage/SidePage.styles.js.map +1 -1
  34. package/cjs/components/Tabs/Tab.d.ts +2 -2
  35. package/cjs/components/Tabs/Tab.js.map +1 -1
  36. package/cjs/components/Textarea/Textarea.d.ts +4 -4
  37. package/cjs/components/Textarea/Textarea.js.map +1 -1
  38. package/cjs/components/Toast/Toast.styles.js +2 -2
  39. package/cjs/components/Toast/Toast.styles.js.map +1 -1
  40. package/cjs/components/Toggle/Toggle.d.ts +2 -2
  41. package/cjs/components/Toggle/Toggle.js.map +1 -1
  42. package/cjs/components/Token/Token.d.ts +2 -2
  43. package/cjs/components/Token/Token.js.map +1 -1
  44. package/cjs/components/TokenInput/TokenInput.d.ts +2 -2
  45. package/cjs/components/TokenInput/TokenInput.js +1 -1
  46. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  47. package/cjs/internal/Popup/Popup.js +1 -1
  48. package/cjs/internal/Popup/Popup.js.map +1 -1
  49. package/cjs/internal/ThemePlayground/ThemeContextPlayground.js +3 -12
  50. package/cjs/internal/ThemePlayground/ThemeContextPlayground.js.map +1 -1
  51. package/cjs/lib/theming/ThemeFactory.d.ts +1 -1
  52. package/cjs/lib/theming/ThemeFactory.js +4 -3
  53. package/cjs/lib/theming/ThemeFactory.js.map +1 -1
  54. package/cjs/lib/theming/ThemeHelpers.d.ts +1 -0
  55. package/cjs/lib/theming/ThemeHelpers.js +11 -2
  56. package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
  57. package/components/Button/Button/Button.js +1 -2
  58. package/components/Button/Button/Button.js.map +1 -1
  59. package/components/Button/Button.d.ts +2 -2
  60. package/components/Checkbox/Checkbox/Checkbox.js.map +1 -1
  61. package/components/Checkbox/Checkbox.d.ts +2 -2
  62. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  63. package/components/ComboBox/ComboBox.d.ts +3 -3
  64. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +3 -3
  65. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  66. package/components/CurrencyInput/CurrencyInput.d.ts +1 -1
  67. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  68. package/components/DateInput/DateInput.d.ts +2 -2
  69. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  70. package/components/DatePicker/DatePicker.d.ts +2 -2
  71. package/components/Dropdown/Dropdown/Dropdown.js.map +1 -1
  72. package/components/Dropdown/Dropdown.d.ts +2 -2
  73. package/components/Hint/Hint/Hint.js.map +1 -1
  74. package/components/Hint/Hint.d.ts +1 -1
  75. package/components/Input/Input/Input.js +1 -1
  76. package/components/Input/Input/Input.js.map +1 -1
  77. package/components/Input/Input.d.ts +3 -3
  78. package/components/Modal/Modal/Modal.js +1 -1
  79. package/components/Modal/Modal/Modal.js.map +1 -1
  80. package/components/Modal/Modal.d.ts +1 -1
  81. package/components/Radio/Radio/Radio.js.map +1 -1
  82. package/components/Radio/Radio.d.ts +2 -2
  83. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  84. package/components/RadioGroup/RadioGroup.d.ts +1 -1
  85. package/components/Select/Select/Select.js.map +1 -1
  86. package/components/Select/Select.d.ts +3 -3
  87. package/components/SidePage/SidePage.styles/SidePage.styles.js +2 -2
  88. package/components/SidePage/SidePage.styles/SidePage.styles.js.map +1 -1
  89. package/components/Tabs/Tab/Tab.js.map +1 -1
  90. package/components/Tabs/Tab.d.ts +2 -2
  91. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  92. package/components/Textarea/Textarea.d.ts +4 -4
  93. package/components/Toast/Toast.styles/Toast.styles.js +2 -2
  94. package/components/Toast/Toast.styles/Toast.styles.js.map +1 -1
  95. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  96. package/components/Toggle/Toggle.d.ts +2 -2
  97. package/components/Token/Token/Token.js.map +1 -1
  98. package/components/Token/Token.d.ts +2 -2
  99. package/components/TokenInput/TokenInput/TokenInput.js +1 -1
  100. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  101. package/components/TokenInput/TokenInput.d.ts +2 -2
  102. package/internal/Popup/Popup/Popup.js +1 -1
  103. package/internal/Popup/Popup/Popup.js.map +1 -1
  104. package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js +2 -11
  105. package/internal/ThemePlayground/ThemeContextPlayground/ThemeContextPlayground.js.map +1 -1
  106. package/lib/theming/ThemeFactory/ThemeFactory.js +3 -2
  107. package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
  108. package/lib/theming/ThemeFactory.d.ts +1 -1
  109. package/lib/theming/ThemeHelpers/ThemeHelpers.js +10 -1
  110. package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
  111. package/lib/theming/ThemeHelpers.d.ts +1 -0
  112. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","state","location","props","opened","locationUpdateId","anchorElement","refForTransition","createRef","renderContainerRef","childInstance","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","content","children","backgroundColor","theme","contentInner","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","removeEventListeners","remove","render","renderMain","renderMobile","mobileOnCloseRequest","renderChildren","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","instance","originalRef","canGetAnchorNode","withoutMobile","renderContent","childDomNode","addEventListeners","setRootNode","addEventListener","removeEventListener","disableAnimations","maxWidth","hasShadow","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","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","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps"],"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 { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\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 withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\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@responsiveLayout\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 isMobileLayout!: boolean;\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.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\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 renderMobile() {\n const { opened } = this.props;\n\n return (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(this.renderChildren())}\n </MobilePopup>\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 {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\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 content = (children: React.ReactNode) => {\n const { backgroundColor, width } = this.props;\n\n return (\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 );\n };\n\n private renderContent(location: PopupLocation) {\n const { disableAnimations, maxWidth, hasShadow, ignoreHover, opened } = 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 {this.content(children)}\n {!this.isMobileLayout && 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":["React","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","Popup","state","location","props","opened","locationUpdateId","anchorElement","refForTransition","createRef","renderContainerRef","childInstance","updateAnchorElement","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","content","children","backgroundColor","theme","contentInner","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","removeEventListeners","remove","render","renderMain","renderMobile","mobileOnCloseRequest","renderChildren","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","instance","originalRef","canGetAnchorNode","withoutMobile","renderContent","childDomNode","addEventListeners","setRootNode","addEventListener","removeEventListener","disableAnimations","maxWidth","hasShadow","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","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","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps"],"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 { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\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 withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\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@responsiveLayout\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 isMobileLayout!: boolean;\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.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\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 renderMobile() {\n const { opened } = this.props;\n\n return (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(this.renderChildren())}\n </MobilePopup>\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 {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\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 content = (children: React.ReactNode) => {\n const { backgroundColor, width } = this.props;\n\n return (\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 );\n };\n\n private renderContent(location: PopupLocation) {\n const { disableAnimations, maxWidth, hasShadow, ignoreHover, opened } = 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 {this.content(children)}\n {!this.isMobileLayout && 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"]}
@@ -12,6 +12,7 @@ import { Gapped } from "../../../components/Gapped";
12
12
  import { ComboBox } from "../../../components/ComboBox";
13
13
  import { Link } from "../../../components/Link";
14
14
  import * as ColorFunctions from "../../../lib/styles/ColorFunctions";
15
+ import { findPropertyDescriptor } from "../../../lib/theming/ThemeHelpers";
15
16
  import { ThemeEditor } from "../ThemeEditor";
16
17
  import { styles } from "../Playground.styles";
17
18
  import { Playground } from "../Playground";
@@ -220,14 +221,4 @@ export var ThemeContextPlayground = /*#__PURE__*/function (_React$Component) {
220
221
  };
221
222
 
222
223
  return ThemeContextPlayground;
223
- }(React.Component);
224
-
225
- function findPropertyDescriptor(theme, propName) {
226
- for (; theme != null; theme = Object.getPrototypeOf(theme)) {
227
- if (Object.prototype.hasOwnProperty.call(theme, propName)) {
228
- return Object.getOwnPropertyDescriptor(theme, propName) || {};
229
- }
230
- }
231
-
232
- return {};
233
- }
224
+ }(React.Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["ThemeContextPlayground.tsx"],"names":["React","ThemeContext","ThemeFactory","FLAT_THEME_8PX_OLD","DEFAULT_THEME_8PX_OLD","DEFAULT_THEME","DARK_THEME","SidePage","Gapped","ComboBox","Link","ColorFunctions","ThemeEditor","styles","Playground","ThemeType","ThemeContextPlayground","props","editableThemesItems","value","Default","label","Dark","DefaultOld","FlatOld","renderSidePage","state","currentTheme","themesErrors","editingThemeItem","themes","themeErrors","handleClose","editorHeaderWrapper","getEditableThemesItems","handleEditingThemeSwitch","fontSize","marginTop","handelGetTheme","sidePageBody","handleThemeVariableChange","themeObject","getKeys","forEach","key","descriptor","Object","getOwnPropertyDescriptor","get","console","log","JSON","stringify","handleOpen","setState","editorOpened","find","i","currentThemeType","handleThemeChange","themeType","variable","editingThemeType","theme","currentValue","canSetVariable","isValid","nextThemeErrors","stateUpdate","result","changeThemeVariable","query","Promise","resolve","filter","toLowerCase","includes","item","variableName","variableValue","findPropertyDescriptor","enumerable","configurable","set","defineProperty","create","defaultOld","dark","flatOld","render","Component","propName","getPrototypeOf","prototype","hasOwnProperty","call"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { FLAT_THEME_8PX_OLD } from '../../lib/theming/themes/FlatTheme8pxOld';\nimport { DEFAULT_THEME_8PX_OLD } from '../../lib/theming/themes/DefaultTheme8pxOld';\nimport { DEFAULT_THEME } from '../../lib/theming/themes/DefaultTheme';\nimport { DARK_THEME } from '../../lib/theming/themes/DarkTheme';\nimport { SidePage } from '../../components/SidePage';\nimport { Gapped } from '../../components/Gapped';\nimport { ComboBox } from '../../components/ComboBox';\nimport { Link } from '../../components/Link';\nimport * as ColorFunctions from '../../lib/styles/ColorFunctions';\nimport { Writeable } from '../../typings/utility-types';\n\nimport { ThemeEditor } from './ThemeEditor';\nimport { styles } from './Playground.styles';\nimport { Playground } from './Playground';\nimport { ThemeType } from './constants';\n\ninterface PlaygroundState {\n editorOpened: boolean;\n editingThemeItem?: EditingThemeItem;\n themes: Themes;\n themesErrors: ThemesErrors;\n currentTheme: Theme;\n currentThemeType: ThemeType;\n}\ninterface Themes {\n default: Theme;\n dark: Theme;\n defaultOld: Theme;\n flatOld: Theme;\n}\ninterface ThemesErrors {\n default: ThemeErrorsType;\n dark: ThemeErrorsType;\n defaultOld: ThemeErrorsType;\n flatOld: ThemeErrorsType;\n}\ninterface EditingThemeItem {\n value: ThemeType;\n label: string;\n}\ninterface PlaygroundProps {\n children?: ReactNode;\n}\nexport type ThemeErrorsType = Writeable<{ [key in keyof Theme]?: boolean }>;\n\nexport class ThemeContextPlayground extends React.Component<PlaygroundProps, PlaygroundState> {\n private readonly editableThemesItems = [\n { value: ThemeType.Default, label: 'Дефолтная' },\n { value: ThemeType.Dark, label: 'Темная' },\n { value: ThemeType.DefaultOld, label: 'Старая дефолтная' },\n { value: ThemeType.FlatOld, label: 'Старая плоская' },\n ];\n\n constructor(props: PlaygroundProps) {\n super(props);\n this.state = {\n currentTheme: DEFAULT_THEME,\n currentThemeType: ThemeType.Default,\n editorOpened: false,\n themes: {\n default: DEFAULT_THEME,\n defaultOld: DEFAULT_THEME_8PX_OLD,\n dark: DARK_THEME,\n flatOld: FLAT_THEME_8PX_OLD,\n },\n themesErrors: {\n default: {},\n defaultOld: {},\n dark: {},\n flatOld: {},\n },\n };\n }\n\n public render() {\n const { currentTheme, editorOpened, currentThemeType } = this.state;\n return (\n <ThemeContext.Provider value={currentTheme}>\n {editorOpened && this.renderSidePage()}\n {\n <Playground\n onThemeChange={this.handleThemeChange}\n currentThemeType={currentThemeType}\n onEditLinkClick={this.handleOpen}\n />\n }\n </ThemeContext.Provider>\n );\n }\n\n private renderSidePage = () => {\n const { currentTheme, themesErrors, editingThemeItem, themes } = this.state;\n const themeErrors = themesErrors[editingThemeItem ? editingThemeItem.value : 'default'];\n return (\n <SidePage disableAnimations ignoreBackgroundClick blockBackground width={600} onClose={this.handleClose}>\n <SidePage.Header>\n <div className={styles.editorHeaderWrapper(currentTheme)}>\n <Gapped wrap verticalAlign=\"middle\">\n <span>Тема для редактирования:</span>\n <ComboBox\n getItems={this.getEditableThemesItems}\n value={editingThemeItem}\n onValueChange={this.handleEditingThemeSwitch}\n />\n </Gapped>\n </div>\n <div style={{ fontSize: 14, marginTop: 8 }}>\n <Link onClick={this.handelGetTheme}>Вывести тему в консоль</Link>\n </div>\n </SidePage.Header>\n <SidePage.Body>\n <div className={styles.sidePageBody()}>\n <ThemeEditor\n editingTheme={themes[editingThemeItem!.value]}\n currentTheme={currentTheme}\n currentErrors={themeErrors}\n onValueChange={this.handleThemeVariableChange}\n />\n </div>\n </SidePage.Body>\n </SidePage>\n );\n };\n\n private handelGetTheme = () => {\n const currentTheme = this.state.currentTheme;\n const themeObject: Writeable<ThemeIn> = {};\n ThemeFactory.getKeys(currentTheme).forEach((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(currentTheme, key);\n if (descriptor && !descriptor.get && DEFAULT_THEME[key] && currentTheme[key] !== DEFAULT_THEME[key]) {\n themeObject[key] = currentTheme[key] as keyof Theme;\n }\n });\n\n console.log(JSON.stringify(themeObject));\n };\n\n private handleOpen = () => {\n this.setState((state) => ({\n editorOpened: true,\n editingThemeItem: this.editableThemesItems.find((i) => i.value === state.currentThemeType),\n }));\n };\n\n private handleClose = () => {\n this.setState({\n editorOpened: false,\n });\n };\n\n private handleThemeChange = (value: string) => {\n const themeType = value as ThemeType;\n this.setState({\n currentThemeType: themeType,\n currentTheme: this.state.themes[themeType],\n });\n };\n\n private handleThemeVariableChange = (variable: keyof Theme, value: string) => {\n const { editingThemeItem, currentTheme, themes, themesErrors } = this.state;\n const editingThemeType = editingThemeItem!.value;\n\n const theme = themes[editingThemeType];\n const currentValue = theme[variable] as string;\n\n let canSetVariable = true;\n if (ColorFunctions.isValid(currentValue)) {\n canSetVariable = ColorFunctions.isValid(value);\n themesErrors[editingThemeType][variable] = !canSetVariable;\n }\n\n const nextThemeErrors: ThemesErrors = { ...themesErrors };\n nextThemeErrors[editingThemeType][variable] = !canSetVariable;\n const stateUpdate = { themes, currentTheme, themesErrors: nextThemeErrors };\n\n if (canSetVariable) {\n const result = this.changeThemeVariable(theme, variable, value);\n stateUpdate.themes[editingThemeType] = result;\n if (this.state.currentThemeType === editingThemeType) {\n stateUpdate.currentTheme = result;\n }\n }\n\n this.setState(stateUpdate);\n };\n\n private getEditableThemesItems = (query: string) => {\n return Promise.resolve(this.editableThemesItems.filter((i) => i.label.toLowerCase().includes(query.toLowerCase())));\n };\n\n private handleEditingThemeSwitch = (item: EditingThemeItem) => {\n this.setState({ editingThemeItem: item });\n };\n\n private changeThemeVariable = (theme: Theme, variableName: keyof Theme, variableValue: string): Theme => {\n const result: ThemeIn = {};\n ThemeFactory.getKeys(theme).forEach((key) => {\n const descriptor = findPropertyDescriptor(theme, key);\n descriptor.enumerable = true;\n descriptor.configurable = true;\n if (key === variableName) {\n delete descriptor.get;\n delete descriptor.set;\n descriptor.value = variableValue;\n }\n Object.defineProperty(result, key, descriptor);\n });\n\n return ThemeFactory.create<ThemeIn>(result);\n };\n}\n\nfunction findPropertyDescriptor(theme: Theme, propName: keyof Theme) {\n for (; theme != null; theme = Object.getPrototypeOf(theme)) {\n if (Object.prototype.hasOwnProperty.call(theme, propName)) {\n return Object.getOwnPropertyDescriptor(theme, propName) || {};\n }\n }\n return {};\n}\n"]}
1
+ {"version":3,"sources":["ThemeContextPlayground.tsx"],"names":["React","ThemeContext","ThemeFactory","FLAT_THEME_8PX_OLD","DEFAULT_THEME_8PX_OLD","DEFAULT_THEME","DARK_THEME","SidePage","Gapped","ComboBox","Link","ColorFunctions","findPropertyDescriptor","ThemeEditor","styles","Playground","ThemeType","ThemeContextPlayground","props","editableThemesItems","value","Default","label","Dark","DefaultOld","FlatOld","renderSidePage","state","currentTheme","themesErrors","editingThemeItem","themes","themeErrors","handleClose","editorHeaderWrapper","getEditableThemesItems","handleEditingThemeSwitch","fontSize","marginTop","handelGetTheme","sidePageBody","handleThemeVariableChange","themeObject","getKeys","forEach","key","descriptor","Object","getOwnPropertyDescriptor","get","console","log","JSON","stringify","handleOpen","setState","editorOpened","find","i","currentThemeType","handleThemeChange","themeType","variable","editingThemeType","theme","currentValue","canSetVariable","isValid","nextThemeErrors","stateUpdate","result","changeThemeVariable","query","Promise","resolve","filter","toLowerCase","includes","item","variableName","variableValue","enumerable","configurable","set","defineProperty","create","defaultOld","dark","flatOld","render","Component"],"mappings":"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","sourcesContent":["import React, { ReactNode } from 'react';\n\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme, ThemeIn } from '../../lib/theming/Theme';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { FLAT_THEME_8PX_OLD } from '../../lib/theming/themes/FlatTheme8pxOld';\nimport { DEFAULT_THEME_8PX_OLD } from '../../lib/theming/themes/DefaultTheme8pxOld';\nimport { DEFAULT_THEME } from '../../lib/theming/themes/DefaultTheme';\nimport { DARK_THEME } from '../../lib/theming/themes/DarkTheme';\nimport { SidePage } from '../../components/SidePage';\nimport { Gapped } from '../../components/Gapped';\nimport { ComboBox } from '../../components/ComboBox';\nimport { Link } from '../../components/Link';\nimport * as ColorFunctions from '../../lib/styles/ColorFunctions';\nimport { Writeable } from '../../typings/utility-types';\nimport { findPropertyDescriptor } from '../../lib/theming/ThemeHelpers';\n\nimport { ThemeEditor } from './ThemeEditor';\nimport { styles } from './Playground.styles';\nimport { Playground } from './Playground';\nimport { ThemeType } from './constants';\n\ninterface PlaygroundState {\n editorOpened: boolean;\n editingThemeItem?: EditingThemeItem;\n themes: Themes;\n themesErrors: ThemesErrors;\n currentTheme: Theme;\n currentThemeType: ThemeType;\n}\ninterface Themes {\n default: Theme;\n dark: Theme;\n defaultOld: Theme;\n flatOld: Theme;\n}\ninterface ThemesErrors {\n default: ThemeErrorsType;\n dark: ThemeErrorsType;\n defaultOld: ThemeErrorsType;\n flatOld: ThemeErrorsType;\n}\ninterface EditingThemeItem {\n value: ThemeType;\n label: string;\n}\ninterface PlaygroundProps {\n children?: ReactNode;\n}\nexport type ThemeErrorsType = Writeable<{ [key in keyof Theme]?: boolean }>;\n\nexport class ThemeContextPlayground extends React.Component<PlaygroundProps, PlaygroundState> {\n private readonly editableThemesItems = [\n { value: ThemeType.Default, label: 'Дефолтная' },\n { value: ThemeType.Dark, label: 'Темная' },\n { value: ThemeType.DefaultOld, label: 'Старая дефолтная' },\n { value: ThemeType.FlatOld, label: 'Старая плоская' },\n ];\n\n constructor(props: PlaygroundProps) {\n super(props);\n this.state = {\n currentTheme: DEFAULT_THEME,\n currentThemeType: ThemeType.Default,\n editorOpened: false,\n themes: {\n default: DEFAULT_THEME,\n defaultOld: DEFAULT_THEME_8PX_OLD,\n dark: DARK_THEME,\n flatOld: FLAT_THEME_8PX_OLD,\n },\n themesErrors: {\n default: {},\n defaultOld: {},\n dark: {},\n flatOld: {},\n },\n };\n }\n\n public render() {\n const { currentTheme, editorOpened, currentThemeType } = this.state;\n return (\n <ThemeContext.Provider value={currentTheme}>\n {editorOpened && this.renderSidePage()}\n {\n <Playground\n onThemeChange={this.handleThemeChange}\n currentThemeType={currentThemeType}\n onEditLinkClick={this.handleOpen}\n />\n }\n </ThemeContext.Provider>\n );\n }\n\n private renderSidePage = () => {\n const { currentTheme, themesErrors, editingThemeItem, themes } = this.state;\n const themeErrors = themesErrors[editingThemeItem ? editingThemeItem.value : 'default'];\n return (\n <SidePage disableAnimations ignoreBackgroundClick blockBackground width={600} onClose={this.handleClose}>\n <SidePage.Header>\n <div className={styles.editorHeaderWrapper(currentTheme)}>\n <Gapped wrap verticalAlign=\"middle\">\n <span>Тема для редактирования:</span>\n <ComboBox\n getItems={this.getEditableThemesItems}\n value={editingThemeItem}\n onValueChange={this.handleEditingThemeSwitch}\n />\n </Gapped>\n </div>\n <div style={{ fontSize: 14, marginTop: 8 }}>\n <Link onClick={this.handelGetTheme}>Вывести тему в консоль</Link>\n </div>\n </SidePage.Header>\n <SidePage.Body>\n <div className={styles.sidePageBody()}>\n <ThemeEditor\n editingTheme={themes[editingThemeItem!.value]}\n currentTheme={currentTheme}\n currentErrors={themeErrors}\n onValueChange={this.handleThemeVariableChange}\n />\n </div>\n </SidePage.Body>\n </SidePage>\n );\n };\n\n private handelGetTheme = () => {\n const currentTheme = this.state.currentTheme;\n const themeObject: Writeable<ThemeIn> = {};\n ThemeFactory.getKeys(currentTheme).forEach((key) => {\n const descriptor = Object.getOwnPropertyDescriptor(currentTheme, key);\n if (descriptor && !descriptor.get && DEFAULT_THEME[key] && currentTheme[key] !== DEFAULT_THEME[key]) {\n themeObject[key] = currentTheme[key] as keyof Theme;\n }\n });\n\n console.log(JSON.stringify(themeObject));\n };\n\n private handleOpen = () => {\n this.setState((state) => ({\n editorOpened: true,\n editingThemeItem: this.editableThemesItems.find((i) => i.value === state.currentThemeType),\n }));\n };\n\n private handleClose = () => {\n this.setState({\n editorOpened: false,\n });\n };\n\n private handleThemeChange = (value: string) => {\n const themeType = value as ThemeType;\n this.setState({\n currentThemeType: themeType,\n currentTheme: this.state.themes[themeType],\n });\n };\n\n private handleThemeVariableChange = (variable: keyof Theme, value: string) => {\n const { editingThemeItem, currentTheme, themes, themesErrors } = this.state;\n const editingThemeType = editingThemeItem!.value;\n\n const theme = themes[editingThemeType];\n const currentValue = theme[variable] as string;\n\n let canSetVariable = true;\n if (ColorFunctions.isValid(currentValue)) {\n canSetVariable = ColorFunctions.isValid(value);\n themesErrors[editingThemeType][variable] = !canSetVariable;\n }\n\n const nextThemeErrors: ThemesErrors = { ...themesErrors };\n nextThemeErrors[editingThemeType][variable] = !canSetVariable;\n const stateUpdate = { themes, currentTheme, themesErrors: nextThemeErrors };\n\n if (canSetVariable) {\n const result = this.changeThemeVariable(theme, variable, value);\n stateUpdate.themes[editingThemeType] = result;\n if (this.state.currentThemeType === editingThemeType) {\n stateUpdate.currentTheme = result;\n }\n }\n\n this.setState(stateUpdate);\n };\n\n private getEditableThemesItems = (query: string) => {\n return Promise.resolve(this.editableThemesItems.filter((i) => i.label.toLowerCase().includes(query.toLowerCase())));\n };\n\n private handleEditingThemeSwitch = (item: EditingThemeItem) => {\n this.setState({ editingThemeItem: item });\n };\n\n private changeThemeVariable = (theme: Theme, variableName: keyof Theme, variableValue: string): Theme => {\n const result: ThemeIn = {};\n ThemeFactory.getKeys(theme).forEach((key) => {\n const descriptor = findPropertyDescriptor(theme, key);\n descriptor.enumerable = true;\n descriptor.configurable = true;\n if (key === variableName) {\n delete descriptor.get;\n delete descriptor.set;\n descriptor.value = variableValue;\n }\n Object.defineProperty(result, key, descriptor);\n });\n\n return ThemeFactory.create<ThemeIn>(result);\n };\n}\n"]}
@@ -1,4 +1,5 @@
1
1
  import { DefaultThemeInternal } from "../../../internal/themes/DefaultTheme";
2
+ import { findPropertyDescriptor } from "../ThemeHelpers";
2
3
  export var ThemeFactory = /*#__PURE__*/function () {
3
4
  function ThemeFactory() {}
4
5
 
@@ -8,8 +9,8 @@ export var ThemeFactory = /*#__PURE__*/function () {
8
9
  };
9
10
 
10
11
  ThemeFactory.overrideDefaultTheme = function overrideDefaultTheme(theme) {
11
- Object.keys(theme).forEach(function (variableName) {
12
- var descriptor = Object.getOwnPropertyDescriptor(theme, variableName);
12
+ ThemeFactory.getKeys(DefaultThemeInternal).forEach(function (variableName) {
13
+ var descriptor = findPropertyDescriptor(theme, variableName);
13
14
  Object.defineProperty(DefaultThemeInternal, variableName, descriptor);
14
15
  });
15
16
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["ThemeFactory.ts"],"names":["DefaultThemeInternal","ThemeFactory","create","theme","baseTheme","base","constructTheme","overrideDefaultTheme","Object","keys","forEach","variableName","descriptor","getOwnPropertyDescriptor","defineProperty","getKeys","key","includes","push","getPrototypeOf","sort","newTheme","propName","freeze"],"mappings":"AAAA,SAASA,oBAAT,QAAqC,oCAArC;;;;AAIA,WAAaC,YAAb;AACgBC,EAAAA,MADhB,GACE,gBAAmCC,KAAnC,EAAuDC,SAAvD,EAA+F;AAC7F,QAAMC,IAAI,GAAGD,SAAS,IAAIJ,oBAA1B;AACA,WAAO,KAAKM,cAAL,CAAoBD,IAApB,EAA0BF,KAA1B,CAAP;AACD,GAJH;;AAMgBI,EAAAA,oBANhB,GAME,8BAAmCJ,KAAnC,EAAmD;AACjDK,IAAAA,MAAM,CAACC,IAAP,CAAYN,KAAZ,EAAmBO,OAAnB,CAA2B,UAACC,YAAD,EAAkB;AAC3C,UAAMC,UAAU,GAAGJ,MAAM,CAACK,wBAAP,CAAgCV,KAAhC,EAAuCQ,YAAvC,CAAnB;AACAH,MAAAA,MAAM,CAACM,cAAP,CAAsBd,oBAAtB,EAA4CW,YAA5C,EAA0DC,UAA1D;AACD,KAHD;AAID,GAXH;;AAagBG,EAAAA,OAbhB,GAaE,iBAAuCZ,KAAvC,EAAiD;AAC/C,QAAMM,IAAoB,GAAG,EAA7B;AACA,WAAON,KAAK,IAAI,IAAhB,EAAsB;AACnBK,MAAAA,MAAM,CAACC,IAAP,CAAYN,KAAZ,CAAD,CAAuCO,OAAvC,CAA+C,UAACM,GAAD,EAAS;AACtD,YAAI,CAACP,IAAI,CAACQ,QAAL,CAAcD,GAAd,CAAL,EAAyB;AACvBP,UAAAA,IAAI,CAACS,IAAL,CAAUF,GAAV;AACD;AACF,OAJD;AAKAb,MAAAA,KAAK,GAAGK,MAAM,CAACW,cAAP,CAAsBhB,KAAtB,CAAR;AACD;AACD,WAAOM,IAAI,CAACW,IAAL,EAAP;AACD,GAxBH;;AA0BiBd,EAAAA,cA1BjB,GA0BE,wBAA8BD,IAA9B,EAA2CF,KAA3C,EAA2D;AACzD,QAAMkB,QAAQ,GAAGb,MAAM,CAACN,MAAP,CAAcG,IAAd,CAAjB;AACAG,IAAAA,MAAM,CAACC,IAAP,CAAYN,KAAZ,EAAmBO,OAAnB,CAA2B,UAACY,QAAD,EAAc;AACvC,UAAMV,UAAU,GAAGJ,MAAM,CAACK,wBAAP,CAAgCV,KAAhC,EAAuCmB,QAAvC,CAAnB;AACAd,MAAAA,MAAM,CAACM,cAAP,CAAsBO,QAAtB,EAAgCC,QAAhC,EAA0CV,UAA1C;AACD,KAHD;;AAKA,WAAOJ,MAAM,CAACe,MAAP,CAAcF,QAAd,CAAP;AACD,GAlCH","sourcesContent":["import { DefaultThemeInternal } from '../../internal/themes/DefaultTheme';\n\nimport { Theme, ThemeIn } from './Theme';\n\nexport class ThemeFactory {\n public static create<T extends {}>(theme: ThemeIn & T, baseTheme?: Theme): Readonly<Theme & T> {\n const base = baseTheme || DefaultThemeInternal;\n return this.constructTheme(base, theme);\n }\n\n public static overrideDefaultTheme(theme: ThemeIn) {\n Object.keys(theme).forEach((variableName) => {\n const descriptor = Object.getOwnPropertyDescriptor(theme, variableName)!;\n Object.defineProperty(DefaultThemeInternal, variableName, descriptor);\n });\n }\n\n public static getKeys<T extends Theme>(theme: T) {\n const keys: Array<keyof T> = [];\n while (theme != null) {\n (Object.keys(theme) as Array<keyof T>).forEach((key) => {\n if (!keys.includes(key)) {\n keys.push(key);\n }\n });\n theme = Object.getPrototypeOf(theme);\n }\n return keys.sort();\n }\n\n private static constructTheme(base: Theme, theme: ThemeIn) {\n const newTheme = Object.create(base);\n Object.keys(theme).forEach((propName) => {\n const descriptor = Object.getOwnPropertyDescriptor(theme, propName)!;\n Object.defineProperty(newTheme, propName, descriptor);\n });\n\n return Object.freeze(newTheme);\n }\n}\n"]}
1
+ {"version":3,"sources":["ThemeFactory.ts"],"names":["DefaultThemeInternal","findPropertyDescriptor","ThemeFactory","create","theme","baseTheme","base","constructTheme","overrideDefaultTheme","getKeys","forEach","variableName","descriptor","Object","defineProperty","keys","key","includes","push","getPrototypeOf","sort","newTheme","propName","getOwnPropertyDescriptor","freeze"],"mappings":"AAAA,SAASA,oBAAT,QAAqC,oCAArC;;;AAGA,SAASC,sBAAT,QAAuC,gBAAvC;;AAEA,WAAaC,YAAb;AACgBC,EAAAA,MADhB,GACE,gBAAmCC,KAAnC,EAAuDC,SAAvD,EAA+F;AAC7F,QAAMC,IAAI,GAAGD,SAAS,IAAIL,oBAA1B;AACA,WAAO,KAAKO,cAAL,CAAoBD,IAApB,EAA0BF,KAA1B,CAAP;AACD,GAJH;;AAMgBI,EAAAA,oBANhB,GAME,8BAAmCJ,KAAnC,EAAiD;AAC/CF,IAAAA,YAAY,CAACO,OAAb,CAAqBT,oBAArB,EAA2CU,OAA3C,CAAmD,UAACC,YAAD,EAAkB;AACnE,UAAMC,UAAU,GAAGX,sBAAsB,CAACG,KAAD,EAAQO,YAAR,CAAzC;AACAE,MAAAA,MAAM,CAACC,cAAP,CAAsBd,oBAAtB,EAA4CW,YAA5C,EAA0DC,UAA1D;AACD,KAHD;AAID,GAXH;;AAagBH,EAAAA,OAbhB,GAaE,iBAAuCL,KAAvC,EAAiD;AAC/C,QAAMW,IAAoB,GAAG,EAA7B;AACA,WAAOX,KAAK,IAAI,IAAhB,EAAsB;AACnBS,MAAAA,MAAM,CAACE,IAAP,CAAYX,KAAZ,CAAD,CAAuCM,OAAvC,CAA+C,UAACM,GAAD,EAAS;AACtD,YAAI,CAACD,IAAI,CAACE,QAAL,CAAcD,GAAd,CAAL,EAAyB;AACvBD,UAAAA,IAAI,CAACG,IAAL,CAAUF,GAAV;AACD;AACF,OAJD;AAKAZ,MAAAA,KAAK,GAAGS,MAAM,CAACM,cAAP,CAAsBf,KAAtB,CAAR;AACD;AACD,WAAOW,IAAI,CAACK,IAAL,EAAP;AACD,GAxBH;;AA0BiBb,EAAAA,cA1BjB,GA0BE,wBAA8BD,IAA9B,EAA2CF,KAA3C,EAA2D;AACzD,QAAMiB,QAAQ,GAAGR,MAAM,CAACV,MAAP,CAAcG,IAAd,CAAjB;AACAO,IAAAA,MAAM,CAACE,IAAP,CAAYX,KAAZ,EAAmBM,OAAnB,CAA2B,UAACY,QAAD,EAAc;AACvC,UAAMV,UAAU,GAAGC,MAAM,CAACU,wBAAP,CAAgCnB,KAAhC,EAAuCkB,QAAvC,CAAnB;AACAT,MAAAA,MAAM,CAACC,cAAP,CAAsBO,QAAtB,EAAgCC,QAAhC,EAA0CV,UAA1C;AACD,KAHD;;AAKA,WAAOC,MAAM,CAACW,MAAP,CAAcH,QAAd,CAAP;AACD,GAlCH","sourcesContent":["import { DefaultThemeInternal } from '../../internal/themes/DefaultTheme';\n\nimport { Theme, ThemeIn } from './Theme';\nimport { findPropertyDescriptor } from './ThemeHelpers';\n\nexport class ThemeFactory {\n public static create<T extends {}>(theme: ThemeIn & T, baseTheme?: Theme): Readonly<Theme & T> {\n const base = baseTheme || DefaultThemeInternal;\n return this.constructTheme(base, theme);\n }\n\n public static overrideDefaultTheme(theme: Theme) {\n ThemeFactory.getKeys(DefaultThemeInternal).forEach((variableName) => {\n const descriptor = findPropertyDescriptor(theme, variableName);\n Object.defineProperty(DefaultThemeInternal, variableName, descriptor);\n });\n }\n\n public static getKeys<T extends Theme>(theme: T) {\n const keys: Array<keyof T> = [];\n while (theme != null) {\n (Object.keys(theme) as Array<keyof T>).forEach((key) => {\n if (!keys.includes(key)) {\n keys.push(key);\n }\n });\n theme = Object.getPrototypeOf(theme);\n }\n return keys.sort();\n }\n\n private static constructTheme(base: Theme, theme: ThemeIn) {\n const newTheme = Object.create(base);\n Object.keys(theme).forEach((propName) => {\n const descriptor = Object.getOwnPropertyDescriptor(theme, propName)!;\n Object.defineProperty(newTheme, propName, descriptor);\n });\n\n return Object.freeze(newTheme);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Theme, ThemeIn } from './Theme';
2
2
  export declare class ThemeFactory {
3
3
  static create<T extends {}>(theme: ThemeIn & T, baseTheme?: Theme): Readonly<Theme & T>;
4
- static overrideDefaultTheme(theme: ThemeIn): void;
4
+ static overrideDefaultTheme(theme: Theme): void;
5
5
  static getKeys<T extends Theme>(theme: T): (keyof T)[];
6
6
  private static constructTheme;
7
7
  }
@@ -24,4 +24,13 @@ export var markAsDarkTheme = function markAsDarkTheme(theme) {
24
24
  enumerable: false,
25
25
  configurable: false
26
26
  }, _Object$create));
27
- };
27
+ };
28
+ export function findPropertyDescriptor(theme, propName) {
29
+ for (; theme != null; theme = Object.getPrototypeOf(theme)) {
30
+ if (Object.prototype.hasOwnProperty.call(theme, propName)) {
31
+ return Object.getOwnPropertyDescriptor(theme, propName) || {};
32
+ }
33
+ }
34
+
35
+ return {};
36
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["ThemeHelpers.ts"],"names":["exposeGetters","theme","descriptors","Object","getOwnPropertyDescriptors","keys","forEach","key","descriptor","get","configurable","enumerable","defineProperty","REACT_UI_DARK_THEME_KEY","isDarkTheme","markAsDarkTheme","create","value","writable"],"mappings":";;AAEA,OAAO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAAmBC,KAAnB,EAAmC;AAC9D,MAAMC,WAAW,GAAGC,MAAM,CAACC,yBAAP,CAAiCH,KAAjC,CAApB;AACAE,EAAAA,MAAM,CAACE,IAAP,CAAYH,WAAZ,EAAyBI,OAAzB,CAAiC,UAACC,GAAD,EAAS;AACxC,QAAMC,UAAU,GAAGN,WAAW,CAACK,GAAD,CAA9B;AACA,QAAI,OAAOC,UAAU,CAACC,GAAlB,KAA0B,UAA1B,IAAwCD,UAAU,CAACE,YAAvD,EAAqE;AACnEF,MAAAA,UAAU,CAACG,UAAX,GAAwB,IAAxB;AACAR,MAAAA,MAAM,CAACS,cAAP,CAAsBX,KAAtB,EAA6BM,GAA7B,EAAkCC,UAAlC;AACD;AACF,GAND;AAOA,SAAOP,KAAP;AACD,CAVM;;AAYP,OAAO,IAAMY,uBAAuB,GAAG,4BAAhC;;AAEP,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACb,KAAD,EAAqC;AAC9D;AACA,SAAOA,KAAK,CAACY,uBAAD,CAAL,KAAmC,IAA1C;AACD,CAHM;;AAKP,OAAO,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAAmBd,KAAnB,EAAmC;AAChE,SAAOE,MAAM,CAACa,MAAP,CAAcf,KAAd;AACJY,EAAAA,uBADI,IACsB;AACzBI,IAAAA,KAAK,EAAE,IADkB;AAEzBC,IAAAA,QAAQ,EAAE,KAFe;AAGzBP,IAAAA,UAAU,EAAE,KAHa;AAIzBD,IAAAA,YAAY,EAAE,KAJW,EADtB,kBAAP;;;AAQD,CATM","sourcesContent":["import { Theme, ThemeIn } from './Theme';\n\nexport const exposeGetters = <T extends object>(theme: T): T => {\n const descriptors = Object.getOwnPropertyDescriptors(theme);\n Object.keys(descriptors).forEach((key) => {\n const descriptor = descriptors[key];\n if (typeof descriptor.get === 'function' && descriptor.configurable) {\n descriptor.enumerable = true;\n Object.defineProperty(theme, key, descriptor);\n }\n });\n return theme;\n};\n\nexport const REACT_UI_DARK_THEME_KEY = '__IS_REACT_UI_DARK_THEME__';\n\nexport const isDarkTheme = (theme: Theme | ThemeIn): boolean => {\n //@ts-ignore\n return theme[REACT_UI_DARK_THEME_KEY] === true;\n};\n\nexport const markAsDarkTheme = <T extends object>(theme: T): T => {\n return Object.create(theme, {\n [REACT_UI_DARK_THEME_KEY]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n });\n};\n"]}
1
+ {"version":3,"sources":["ThemeHelpers.ts"],"names":["exposeGetters","theme","descriptors","Object","getOwnPropertyDescriptors","keys","forEach","key","descriptor","get","configurable","enumerable","defineProperty","REACT_UI_DARK_THEME_KEY","isDarkTheme","markAsDarkTheme","create","value","writable","findPropertyDescriptor","propName","getPrototypeOf","prototype","hasOwnProperty","call","getOwnPropertyDescriptor"],"mappings":";;AAEA,OAAO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAAmBC,KAAnB,EAAmC;AAC9D,MAAMC,WAAW,GAAGC,MAAM,CAACC,yBAAP,CAAiCH,KAAjC,CAApB;AACAE,EAAAA,MAAM,CAACE,IAAP,CAAYH,WAAZ,EAAyBI,OAAzB,CAAiC,UAACC,GAAD,EAAS;AACxC,QAAMC,UAAU,GAAGN,WAAW,CAACK,GAAD,CAA9B;AACA,QAAI,OAAOC,UAAU,CAACC,GAAlB,KAA0B,UAA1B,IAAwCD,UAAU,CAACE,YAAvD,EAAqE;AACnEF,MAAAA,UAAU,CAACG,UAAX,GAAwB,IAAxB;AACAR,MAAAA,MAAM,CAACS,cAAP,CAAsBX,KAAtB,EAA6BM,GAA7B,EAAkCC,UAAlC;AACD;AACF,GAND;AAOA,SAAOP,KAAP;AACD,CAVM;;AAYP,OAAO,IAAMY,uBAAuB,GAAG,4BAAhC;;AAEP,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAACb,KAAD,EAAqC;AAC9D;AACA,SAAOA,KAAK,CAACY,uBAAD,CAAL,KAAmC,IAA1C;AACD,CAHM;;AAKP,OAAO,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAAmBd,KAAnB,EAAmC;AAChE,SAAOE,MAAM,CAACa,MAAP,CAAcf,KAAd;AACJY,EAAAA,uBADI,IACsB;AACzBI,IAAAA,KAAK,EAAE,IADkB;AAEzBC,IAAAA,QAAQ,EAAE,KAFe;AAGzBP,IAAAA,UAAU,EAAE,KAHa;AAIzBD,IAAAA,YAAY,EAAE,KAJW,EADtB,kBAAP;;;AAQD,CATM;;AAWP,OAAO,SAASS,sBAAT,CAAgClB,KAAhC,EAA8CmB,QAA9C,EAAqE;AAC1E,SAAOnB,KAAK,IAAI,IAAhB,EAAsBA,KAAK,GAAGE,MAAM,CAACkB,cAAP,CAAsBpB,KAAtB,CAA9B,EAA4D;AAC1D,QAAIE,MAAM,CAACmB,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCvB,KAArC,EAA4CmB,QAA5C,CAAJ,EAA2D;AACzD,aAAOjB,MAAM,CAACsB,wBAAP,CAAgCxB,KAAhC,EAAuCmB,QAAvC,KAAoD,EAA3D;AACD;AACF;AACD,SAAO,EAAP;AACD","sourcesContent":["import { Theme, ThemeIn } from './Theme';\n\nexport const exposeGetters = <T extends object>(theme: T): T => {\n const descriptors = Object.getOwnPropertyDescriptors(theme);\n Object.keys(descriptors).forEach((key) => {\n const descriptor = descriptors[key];\n if (typeof descriptor.get === 'function' && descriptor.configurable) {\n descriptor.enumerable = true;\n Object.defineProperty(theme, key, descriptor);\n }\n });\n return theme;\n};\n\nexport const REACT_UI_DARK_THEME_KEY = '__IS_REACT_UI_DARK_THEME__';\n\nexport const isDarkTheme = (theme: Theme | ThemeIn): boolean => {\n //@ts-ignore\n return theme[REACT_UI_DARK_THEME_KEY] === true;\n};\n\nexport const markAsDarkTheme = <T extends object>(theme: T): T => {\n return Object.create(theme, {\n [REACT_UI_DARK_THEME_KEY]: {\n value: true,\n writable: false,\n enumerable: false,\n configurable: false,\n },\n });\n};\n\nexport function findPropertyDescriptor(theme: Theme, propName: keyof Theme) {\n for (; theme != null; theme = Object.getPrototypeOf(theme)) {\n if (Object.prototype.hasOwnProperty.call(theme, propName)) {\n return Object.getOwnPropertyDescriptor(theme, propName) || {};\n }\n }\n return {};\n}\n"]}
@@ -3,3 +3,4 @@ export declare const exposeGetters: <T extends object>(theme: T) => T;
3
3
  export declare const REACT_UI_DARK_THEME_KEY = "__IS_REACT_UI_DARK_THEME__";
4
4
  export declare const isDarkTheme: (theme: Theme | ThemeIn) => boolean;
5
5
  export declare const markAsDarkTheme: <T extends object>(theme: T) => T;
6
+ export declare function findPropertyDescriptor(theme: Theme, propName: keyof Theme): PropertyDescriptor;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "4.0.1",
3
+ "version": "4.0.4",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
7
7
  "sideEffects": false,
8
- "homepage": "https://tech.skbkontur.ru/react-ui/4.0.1/",
8
+ "homepage": "https://tech.skbkontur.ru/react-ui/4.0.4/",
9
9
  "repository": {
10
10
  "type": "git",
11
11
  "url": "git@github.com:skbkontur/retail-ui.git"