@skbkontur/react-ui 3.11.0-csi.1 → 3.11.0-csi.2

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.
@@ -75,11 +75,23 @@ export declare class Modal extends React.Component<ModalProps, ModalState> {
75
75
  render(): JSX.Element;
76
76
  private renderMain;
77
77
  /**
78
- * Добавить элемент, который будет учитывать FocusLock
78
+ * Добавить элемент, который будет учитываться при блокировке фокуса
79
79
  *
80
- * @param shard
80
+ * @public
81
+ * @param shard RefObject | HTMLElement
82
+ *
83
+ * @link https://github.com/theKashey/react-focus-lock#api shards
84
+ */
85
+ addFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
86
+ /**
87
+ * Удалить элемент, чтобы он не учитывался при блокировке фокуса
88
+ *
89
+ * @public
90
+ * @param shard RefObject | HTMLElement
91
+ *
92
+ * @link https://github.com/theKashey/react-focus-lock#api shards
81
93
  */
82
- addShard: (shard: React.RefObject<any> | HTMLElement) => void;
94
+ deleteFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
83
95
  private requestClose;
84
96
  private refContainer;
85
97
  private handleStackChange;
@@ -235,9 +235,28 @@ Modal = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(M
235
235
 
236
236
 
237
237
 
238
- addShard = function (shard) {
239
- _this.shards.add(shard);
240
- _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
238
+
239
+
240
+
241
+ addFocusLockShard = function (shard) {
242
+ if (!_this.shards.has(shard)) {
243
+ _this.shards.add(shard);
244
+ _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
245
+ }
246
+ };_this.
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+ deleteFocusLockShard = function (shard) {
257
+ if (_this.shards.delete(shard)) {
258
+ _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
259
+ }
241
260
  };_this.
242
261
 
243
262
  requestClose = function () {
@@ -314,8 +333,11 @@ Modal = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(M
314
333
  setHasPanel = function (hasPanel) {if (hasPanel === void 0) {hasPanel = false;}
315
334
  _this.state.hasPanel !== hasPanel && _this.setState({ hasPanel: hasPanel });
316
335
  };return _this;}var _proto = Modal.prototype;_proto.componentDidMount = function componentDidMount() {this.stackSubscription = _ModalStack.ModalStack.add(this, this.handleStackChange);if (mountedModalsCount === 0) {window.addEventListener('resize', this.checkHorizontalScrollAppearance);}mountedModalsCount++;window.addEventListener('keydown', this.handleKeyDown);this.checkHorizontalScrollAppearance();if (this.containerNode) {this.containerNode.addEventListener('scroll', LayoutEvents.emit);}};_proto.componentWillUnmount = function componentWillUnmount() {if (--mountedModalsCount === 0) {window.removeEventListener('resize', this.checkHorizontalScrollAppearance);LayoutEvents.emit();}window.removeEventListener('keydown', this.handleKeyDown);if (this.stackSubscription != null) {this.stackSubscription.remove();}_ModalStack.ModalStack.remove(this);if (this.containerNode) {this.containerNode.removeEventListener('scroll', LayoutEvents.emit);}};_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _cx;var _this$state = this.state,hasHeader = _this$state.hasHeader,hasFooter = _this$state.hasFooter,hasPanel = _this$state.hasPanel;var modalContextProps = { hasHeader: hasHeader, horizontalScroll: this.state.horizontalScroll, setHasHeader: this.setHasHeader, setHasFooter: this.setHasFooter, setHasPanel: this.setHasPanel };if (hasHeader && !this.props.noClose) {modalContextProps.close = { disableClose: this.props.disableClose, requestClose: this.requestClose };}if (!hasFooter) {modalContextProps.additionalPadding = true;}if (hasFooter && hasPanel) {modalContextProps.additionalPadding = true;}var style = {};var containerStyle = {};if (this.props.width) {style.width = this.props.width;} else {containerStyle.width = 'auto';}return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Modal', className: _Modal.styles.root() }, /*#__PURE__*/_react.default.createElement(_HideBodyVerticalScroll.HideBodyVerticalScroll, null), this.state.hasBackground && /*#__PURE__*/_react.default.createElement("div", { className: _Modal.styles.bg(this.theme) }), /*#__PURE__*/_react.default.createElement("div", { ref: this.refContainer, className: _Modal.styles.container(), onMouseDown: this.handleContainerMouseDown, onMouseUp: this.handleContainerMouseUp, onClick: this.handleContainerClick, "data-tid": "modal-container" }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _Emotion.cx)((_cx = {}, _cx[_Modal.styles.centerContainer(this.theme)] = true, _cx[_Modal.styles.alignTop()] = Boolean(this.props.alignTop), _cx)), style: containerStyle, "data-tid": "modal-content" }, /*#__PURE__*/_react.default.createElement("div", { className: _Modal.styles.window(this.theme), style: style }, /*#__PURE__*/_react.default.createElement(_ResizeDetector.ResizeDetector, { onResize: this.handleResize }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { shards: this.state.shards, disabled: this.props.disableFocusLock, autoFocus: false }, !hasHeader && !this.props.noClose ? /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'ModalCross', className: _Modal.styles.closeWrapper(this.theme) }, /*#__PURE__*/_react.default.createElement(_ModalClose.ModalClose, { requestClose: this.requestClose, disableClose: this.props.disableClose })) : null, /*#__PURE__*/_react.default.createElement(_ModalContext.ModalContext.Provider, { value: modalContextProps }, this.props.children)))))))));} /**
317
- * Добавить элемент, который будет учитывать FocusLock
336
+ * Добавить элемент, который будет учитываться при блокировке фокуса
337
+ *
338
+ * @public
339
+ * @param shard RefObject | HTMLElement
318
340
  *
319
- * @param shard
341
+ * @link https://github.com/theKashey/react-focus-lock#api shards
320
342
  */;return Modal;}(_react.default.Component);exports.Modal = Modal;Modal.__KONTUR_REACT_UI__ = 'Modal';Modal.Header = _ModalHeader.ModalHeader;Modal.Body = _ModalBody.ModalBody;Modal.Footer = _ModalFooter.ModalFooter;Modal.defaultProps = { // NOTE: в ie нормально не работает
321
343
  disableFocusLock: _client.isIE11 };
@@ -1 +1 @@
1
- {"version":3,"sources":["Modal.tsx"],"names":["mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","Set","addShard","shard","add","setState","Array","from","values","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","indexOf","ModalStack","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","handleResize","LayoutEvents","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","styles","root","bg","container","centerContainer","alignTop","Boolean","disableFocusLock","closeWrapper","children","React","Component","__KONTUR_REACT_UI__","Header","ModalHeader","Body","ModalBody","Footer","ModalFooter","defaultProps","isIE11"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонет нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.checkHorizontalScrollAppearance);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.checkHorizontalScrollAppearance);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\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 { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (hasHeader && !this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={containerStyle}\n data-tid=\"modal-content\"\n >\n <div className={styles.window(this.theme)} style={style}>\n <ResizeDetector onResize={this.handleResize}>\n <FocusLock shards={this.state.shards} disabled={this.props.disableFocusLock} autoFocus={false}>\n {!hasHeader && !this.props.noClose ? (\n <ZIndex priority={'ModalCross'} className={styles.closeWrapper(this.theme)}>\n <ModalClose requestClose={this.requestClose} disableClose={this.props.disableClose} />\n </ZIndex>\n ) : null}\n <ModalContext.Provider value={modalContextProps}>{this.props.children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитывать FocusLock\n *\n * @param shard\n */\n public addShard = (shard: React.RefObject<any> | HTMLElement) => {\n this.shards.add(shard);\n this.setState({shards: [...Array.from(this.shards.values())]});\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"sources":["Modal.tsx"],"names":["mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","Set","addFocusLockShard","shard","has","add","setState","Array","from","values","deleteFocusLockShard","delete","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","indexOf","ModalStack","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","handleResize","LayoutEvents","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","styles","root","bg","container","centerContainer","alignTop","Boolean","disableFocusLock","closeWrapper","children","React","Component","__KONTUR_REACT_UI__","Header","ModalHeader","Body","ModalBody","Footer","ModalFooter","defaultProps","isIE11"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонет нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.checkHorizontalScrollAppearance);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.checkHorizontalScrollAppearance);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\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 { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (hasHeader && !this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={containerStyle}\n data-tid=\"modal-content\"\n >\n <div className={styles.window(this.theme)} style={style}>\n <ResizeDetector onResize={this.handleResize}>\n <FocusLock shards={this.state.shards} disabled={this.props.disableFocusLock} autoFocus={false}>\n {!hasHeader && !this.props.noClose ? (\n <ZIndex priority={'ModalCross'} className={styles.closeWrapper(this.theme)}>\n <ModalClose requestClose={this.requestClose} disableClose={this.props.disableClose} />\n </ZIndex>\n ) : null}\n <ModalContext.Provider value={modalContextProps}>{this.props.children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитываться при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public addFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (!this.shards.has(shard)) {\n this.shards.add(shard);\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n /**\n * Удалить элемент, чтобы он не учитывался при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public deleteFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (this.shards.delete(shard)) {\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
@@ -92,11 +92,23 @@ export declare class SidePage extends React.Component<SidePageProps, SidePageSta
92
92
  render(): JSX.Element;
93
93
  private renderMain;
94
94
  /**
95
- * Добавить элемент, который будет учитывать FocusLock
95
+ * Добавить элемент, который будет учитываться при блокировке фокуса
96
96
  *
97
- * @param shard
97
+ * @public
98
+ * @param shard RefObject | HTMLElement
99
+ *
100
+ * @link https://github.com/theKashey/react-focus-lock#api shards
101
+ */
102
+ addFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
103
+ /**
104
+ * Удалить элемент, чтобы он не учитывался при блокировке фокуса
105
+ *
106
+ * @public
107
+ * @param shard RefObject | HTMLElement
108
+ *
109
+ * @link https://github.com/theKashey/react-focus-lock#api shards
98
110
  */
99
- addShard: (shard: React.RefObject<any> | HTMLElement) => void;
111
+ deleteFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
100
112
  private renderContainer;
101
113
  private disablePageScroll;
102
114
  private getSidePageContextProps;
@@ -190,9 +190,28 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
190
190
 
191
191
 
192
192
 
193
- addShard = function (shard) {
194
- _this.shards.add(shard);
195
- _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
193
+
194
+
195
+
196
+ addFocusLockShard = function (shard) {
197
+ if (!_this.shards.has(shard)) {
198
+ _this.shards.add(shard);
199
+ _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
200
+ }
201
+ };_this.
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+ deleteFocusLockShard = function (shard) {
212
+ if (_this.shards.delete(shard)) {
213
+ _this.setState({ shards: [].concat(Array.from(_this.shards.values())) });
214
+ }
196
215
  };_this.
197
216
 
198
217
 
@@ -230,6 +249,11 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
230
249
 
231
250
 
232
251
 
252
+
253
+
254
+
255
+
256
+
233
257
 
234
258
 
235
259
 
@@ -360,7 +384,10 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
360
384
  * Обновляет разметку компонента.
361
385
  * @public
362
386
  */;_proto.render = function render() {var _this2 = this;return /*#__PURE__*/_react.default.createElement(_ThemeContext.ThemeContext.Consumer, null, function (theme) {_this2.theme = theme;return _this2.renderMain();});};_proto.renderMain = function renderMain() {var _this$props = this.props,blockBackground = _this$props.blockBackground,disableAnimations = _this$props.disableAnimations;return /*#__PURE__*/_react.default.createElement(_RenderContainer.RenderContainer, null, /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, this.props, /*#__PURE__*/_react.default.createElement("div", null, blockBackground && this.renderShadow(), /*#__PURE__*/_react.default.createElement(_reactTransitionGroup.CSSTransition, { in: true, classNames: this.getTransitionNames(), appear: !disableAnimations, enter: !disableAnimations, exit: false, timeout: { enter: TRANSITION_TIMEOUT, exit: TRANSITION_TIMEOUT }, nodeRef: this.rootRef }, this.renderContainer()))));} /**
363
- * Добавить элемент, который будет учитывать FocusLock
387
+ * Добавить элемент, который будет учитываться при блокировке фокуса
388
+ *
389
+ * @public
390
+ * @param shard RefObject | HTMLElement
364
391
  *
365
- * @param shard
366
- */;_proto.renderContainer = function renderContainer() {var _cx,_cx2,_this3 = this;var _this$props2 = this.props,width = _this$props2.width,blockBackground = _this$props2.blockBackground,fromLeft = _this$props2.fromLeft,disableFocusLock = _this$props2.disableFocusLock,offset = _this$props2.offset;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', "data-tid": "SidePage__root", className: (0, _Emotion.cx)((_cx = {}, _cx[_SidePage.styles.root()] = true, _cx)), onScroll: LayoutEvents.emit, createStackingContext: true, style: { width: width || (blockBackground ? 800 : 500), right: fromLeft ? 'auto' : offset, left: fromLeft ? offset : 'auto' }, wrapperRef: this.rootRef }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { disabled: disableFocusLock || !blockBackground, autoFocus: false, className: _SidePage.styles.focusLock() }, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.handleClickOutside, active: true }, /*#__PURE__*/_react.default.createElement("div", { "data-tid": "SidePage__container", className: (0, _Emotion.cx)(_SidePage.styles.wrapper(this.theme), (_cx2 = {}, _cx2[_SidePage.styles.wrapperLeft()] = fromLeft, _cx2[_SidePage.styles.wrapperMarginLeft()] = this.state.hasMargin && fromLeft, _cx2[_SidePage.styles.wrapperMarginRight()] = this.state.hasMargin && !fromLeft, _cx2[_SidePage.styles.shadow(this.theme)] = this.state.hasShadow, _cx2)), ref: function ref(_) {return _this3.layoutRef = _;} }, /*#__PURE__*/_react.default.createElement(_SidePageContext.SidePageContext.Provider, { value: this.getSidePageContextProps() }, this.props.children)))));};_proto.renderShadow = function renderShadow() {var _cx3;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', className: _SidePage.styles.overlay(), onScroll: LayoutEvents.emit }, /*#__PURE__*/_react.default.createElement(_HideBodyVerticalScroll.HideBodyVerticalScroll, { key: "hbvs" }), /*#__PURE__*/_react.default.createElement("div", { key: "overlay", className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_SidePage.styles.background()] = true, _cx3[_SidePage.styles.backgroundGray(this.theme)] = this.state.hasBackground, _cx3)) }));};_proto.getTransitionNames = function getTransitionNames() {var transition = this.props.fromLeft ? _SidePage.styles.transitionRight : _SidePage.styles.transitionLeft;return { enter: transition(), enterActive: _SidePage.styles.transitionActive(), exit: _SidePage.styles.transitionLeave(), exitActive: _SidePage.styles.transitionLeaveActive(), appear: transition(), appearActive: _SidePage.styles.transitionActive() };};return SidePage;}(_react.default.Component);exports.SidePage = SidePage;SidePage.__KONTUR_REACT_UI__ = 'SidePage';SidePage.Header = _SidePageHeader.SidePageHeader;SidePage.Body = _SidePageBody.SidePageBody;SidePage.Footer = _SidePageFooter.SidePageFooter;SidePage.Container = _SidePageContainer.SidePageContainer;SidePage.defaultProps = { disableAnimations: _currentEnvironment.isTestEnv, disableFocusLock: true, offset: 0 };
392
+ * @link https://github.com/theKashey/react-focus-lock#api shards
393
+ */;_proto.renderContainer = function renderContainer() {var _cx,_cx2,_this3 = this;var _this$props2 = this.props,width = _this$props2.width,blockBackground = _this$props2.blockBackground,fromLeft = _this$props2.fromLeft,disableFocusLock = _this$props2.disableFocusLock,offset = _this$props2.offset;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', "data-tid": "SidePage__root", className: (0, _Emotion.cx)((_cx = {}, _cx[_SidePage.styles.root()] = true, _cx)), onScroll: LayoutEvents.emit, createStackingContext: true, style: { width: width || (blockBackground ? 800 : 500), right: fromLeft ? 'auto' : offset, left: fromLeft ? offset : 'auto' }, wrapperRef: this.rootRef }, /*#__PURE__*/_react.default.createElement(_reactFocusLock.default, { shards: this.state.shards, disabled: disableFocusLock || !blockBackground, autoFocus: false, className: _SidePage.styles.focusLock() }, /*#__PURE__*/_react.default.createElement(_RenderLayer.RenderLayer, { onClickOutside: this.handleClickOutside, active: true }, /*#__PURE__*/_react.default.createElement("div", { "data-tid": "SidePage__container", className: (0, _Emotion.cx)(_SidePage.styles.wrapper(this.theme), (_cx2 = {}, _cx2[_SidePage.styles.wrapperLeft()] = fromLeft, _cx2[_SidePage.styles.wrapperMarginLeft()] = this.state.hasMargin && fromLeft, _cx2[_SidePage.styles.wrapperMarginRight()] = this.state.hasMargin && !fromLeft, _cx2[_SidePage.styles.shadow(this.theme)] = this.state.hasShadow, _cx2)), ref: function ref(_) {return _this3.layoutRef = _;} }, /*#__PURE__*/_react.default.createElement(_SidePageContext.SidePageContext.Provider, { value: this.getSidePageContextProps() }, this.props.children)))));};_proto.renderShadow = function renderShadow() {var _cx3;return /*#__PURE__*/_react.default.createElement(_ZIndex.ZIndex, { priority: 'Sidepage', className: _SidePage.styles.overlay(), onScroll: LayoutEvents.emit }, /*#__PURE__*/_react.default.createElement(_HideBodyVerticalScroll.HideBodyVerticalScroll, { key: "hbvs" }), /*#__PURE__*/_react.default.createElement("div", { key: "overlay", className: (0, _Emotion.cx)((_cx3 = {}, _cx3[_SidePage.styles.background()] = true, _cx3[_SidePage.styles.backgroundGray(this.theme)] = this.state.hasBackground, _cx3)) }));};_proto.getTransitionNames = function getTransitionNames() {var transition = this.props.fromLeft ? _SidePage.styles.transitionRight : _SidePage.styles.transitionLeft;return { enter: transition(), enterActive: _SidePage.styles.transitionActive(), exit: _SidePage.styles.transitionLeave(), exitActive: _SidePage.styles.transitionLeaveActive(), appear: transition(), appearActive: _SidePage.styles.transitionActive() };};return SidePage;}(_react.default.Component);exports.SidePage = SidePage;SidePage.__KONTUR_REACT_UI__ = 'SidePage';SidePage.Header = _SidePageHeader.SidePageHeader;SidePage.Body = _SidePageBody.SidePageBody;SidePage.Footer = _SidePageFooter.SidePageFooter;SidePage.Container = _SidePageContainer.SidePageContainer;SidePage.defaultProps = { disableAnimations: _currentEnvironment.isTestEnv, disableFocusLock: true, offset: 0 };
@@ -1 +1 @@
1
- {"version":3,"sources":["SidePage.tsx"],"names":["TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","layoutRef","footer","rootRef","React","createRef","Set","updateLayout","update","addShard","shard","add","setState","Array","from","values","disablePageScroll","e","layout","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","ModalStack","isBlocking","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","styles","root","LayoutEvents","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","SidePageHeader","Body","SidePageBody","Footer","SidePageFooter","Container","SidePageContainer","defaultProps","isTestEnv"],"mappings":"ybAAA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,IAAMA,kBAAkB,GAAG,GAA3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;AACaC,Q;;;;;;;AAOJC,IAAAA,K,GAAuB;AAC5BC,MAAAA,SAAS,EAAE,KADiB;AAE5BC,MAAAA,SAAS,EAAE,KAFiB;AAG5BC,MAAAA,QAAQ,EAAE,KAHkB;AAI5BC,MAAAA,MAAM,EAAE,EAJoB,E;;AAMtBC,IAAAA,K;AACAC,IAAAA,iB,GAAmD,I;AACnDC,IAAAA,S,GAAgC,I;AAChCC,IAAAA,M,GAAgC,I;AAChCC,IAAAA,O,gBAAUC,eAAMC,SAAN,E;AACVP,IAAAA,M,GAAS,IAAIQ,GAAJ,E;;;;;;;;;;;;;;;;;;;;;AAqBVC,IAAAA,Y,GAAe,YAAY;AAChC,UAAI,MAAKL,MAAT,EAAiB;AACf,cAAKA,MAAL,CAAYM,MAAZ;AACD;AACF,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDMC,IAAAA,Q,GAAW,UAACC,KAAD,EAA+C;AAC/D,YAAKZ,MAAL,CAAYa,GAAZ,CAAgBD,KAAhB;AACA,YAAKE,QAAL,CAAc,EAACd,MAAM,YAAMe,KAAK,CAACC,IAAN,CAAW,MAAKhB,MAAL,CAAYiB,MAAZ,EAAX,CAAN,CAAP,EAAd;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2COC,IAAAA,iB,GAAoB,UAACC,CAAD,EAAmB;AAC7C,UAAMC,MAAM,GAAG,MAAKjB,SAApB;AACA,UAAI,CAACiB,MAAL,EAAa;AACb,UAAMC,UAAU,GAAGD,MAAM,CAACE,SAAP,IAAoB,CAApB,IAAyBH,CAAC,CAACI,MAAF,GAAW,CAAvD;AACA,UAAMC,aAAa,GAAGJ,MAAM,CAACE,SAAP,IAAoBF,MAAM,CAACK,YAAP,GAAsBL,MAAM,CAACM,YAAjD,IAAiEP,CAAC,CAACI,MAAF,GAAW,CAAlG;;AAEA,UAAI,CAAC,MAAKI,KAAL,CAAWC,eAAZ,KAAgCP,UAAU,IAAIG,aAA9C,CAAJ,EAAkE;AAChEL,QAAAA,CAAC,CAACU,cAAF;AACD;AACF,K;;AAEOC,IAAAA,uB,GAA0B,YAA2B;AAC3D,aAAO;AACLjC,QAAAA,SAAS,EAAE,MAAKD,KAAL,CAAWC,SADjB;AAELC,QAAAA,SAAS,EAAE,MAAKF,KAAL,CAAWE,SAFjB;AAGLC,QAAAA,QAAQ,EAAE,MAAKH,KAAL,CAAWG,QAHhB;AAILgC,QAAAA,YAAY,EAAE,MAAKA,YAJd;AAKLC,QAAAA,QAAQ,EAAE,MAAKA,QALV;AAMLvB,QAAAA,YAAY,EAAE,MAAKA,YANd;AAOLwB,QAAAA,SAAS,EAAE,MAAKA,SAPX;AAQLC,QAAAA,YAAY,EAAE,MAAKA,YARd;AASLC,QAAAA,YAAY,EAAE,MAAKA,YATd;AAULC,QAAAA,WAAW,EAAE,MAAKA,WAVb,EAAP;;AAYD,K;;AAEOJ,IAAAA,Q,GAAW,YAAM;AACvB,UAAI,CAAC,MAAK7B,SAAV,EAAqB;AACnB,eAAO,MAAP;AACD;AACD,aAAO,MAAKA,SAAL,CAAekC,WAAtB;AACD,K;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BOC,IAAAA,iB,GAAoB,UAACC,KAAD,EAA2C;AACrE,UAAMC,SAAS,GAAGD,KAAK,CAACE,MAAN,CAAa,UAACC,CAAD,UAAOA,CAAC,YAAY/C,QAAb,IAAyB+C,CAAC,CAACf,KAAF,CAAQgB,QAAR,KAAqB,MAAKhB,KAAL,CAAWgB,QAAhE,EAAb,CAAlB;AACA,UAAMC,uBAAuB,GAAGJ,SAAS,CAACK,OAAV,6CAAhC;;AAEA,UAAMC,SAAS,GAAGN,SAAS,CAACO,MAAV,GAAmB,CAAnB,IAAwBH,uBAAuB,KAAKJ,SAAS,CAACO,MAAV,GAAmB,CAAzF;AACA,UAAMC,SAAS,GAAGR,SAAS,CAACO,MAAV,GAAmB,CAAnB,IAAwBH,uBAAuB,GAAGJ,SAAS,CAACO,MAAV,GAAmB,CAAvF;AACA,UAAME,aAAa,GAAGC,uBAAWC,UAAX,6CAAtB;;AAEA,YAAKrC,QAAL,CAAc;AACZsC,QAAAA,aAAa,EAAEb,KAAK,CAACM,OAAN,6CADH;AAEZC,QAAAA,SAAS,EAATA,SAFY;AAGZE,QAAAA,SAAS,EAATA,SAHY;AAIZC,QAAAA,aAAa,EAAbA,aAJY,EAAd;;AAMD,K;;AAEOI,IAAAA,kB,GAAqB,UAAClC,CAAD,EAAc;AACzC,UAAI,MAAKvB,KAAL,CAAWwD,aAAX,KAA6B,CAA7B,IAAkC,CAAC,MAAKzB,KAAL,CAAW2B,qBAAlD,EAAyE;AACvE;AACA,YAAInC,CAAC,YAAYoC,UAAb,IAA2BpC,CAAC,CAACqC,OAAF,GAAYC,QAAQ,CAACC,eAAT,CAAyBrB,WAApE,EAAiF;AAC/E;AACD;AACD,cAAKN,YAAL;AACD;AACF,K;;AAEO4B,IAAAA,a,GAAgB,UAACxC,CAAD,EAAsB;AAC5C,UAAI,MAAKvB,KAAL,CAAWwD,aAAX,KAA6B,CAAjC,EAAoC;AAClC;AACD;AACD,UAAI,8BAAYjC,CAAZ,CAAJ,EAAoB;AAClB,8CAAgBA,CAAhB;AACA,cAAKY,YAAL;AACD;AACF,K;;AAEOA,IAAAA,Y,GAAe,YAAM;AAC3B,UAAI,MAAKJ,KAAL,CAAWiC,YAAf,EAA6B;AAC3B;AACD;AACD,UAAI,MAAKjC,KAAL,CAAWkC,OAAf,EAAwB;AACtB,cAAKlC,KAAL,CAAWkC,OAAX;AACD;AACF,K;;AAEO5B,IAAAA,S,GAAY,UAAC6B,GAAD,EAAgC;AAClD,YAAK1D,MAAL,GAAc0D,GAAd;AACD,K;;AAEO5B,IAAAA,Y,GAAe,UAACrC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKD,KAAL,CAAWC,SAAX,KAAyBA,SAAzB,IAAsC,MAAKiB,QAAL,CAAc,EAAEjB,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,K;;AAEOsC,IAAAA,Y,GAAe,UAACrC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKF,KAAL,CAAWE,SAAX,KAAyBA,SAAzB,IAAsC,MAAKgB,QAAL,CAAc,EAAEhB,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,K;;AAEOsC,IAAAA,W,GAAc,UAACrC,QAAD,EAAsB,KAArBA,QAAqB,cAArBA,QAAqB,GAAV,KAAU;AAC1C,YAAKH,KAAL,CAAWG,QAAX,KAAwBA,QAAxB,IAAoC,MAAKe,QAAL,CAAc,EAAEf,QAAQ,EAARA,QAAF,EAAd,CAApC;AACD,K,sDAjPMgE,iB,GAAP,6BAA2B,2BACzBC,MAAM,CAACC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKN,aAAxC,EACA,8BAAKtD,OAAL,CAAa6D,OAAb,2CAAsBD,gBAAtB,CAAuC,OAAvC,EAAgD,KAAK/C,iBAArD,EAAwE,EAAEiD,OAAO,EAAE,KAAX,EAAxE,EACA,KAAKjE,iBAAL,GAAyBgD,uBAAWrC,GAAX,CAAe,IAAf,EAAqB,KAAKyB,iBAA1B,CAAzB,CACD,C,QAEM8B,oB,GAAP,gCAA8B,4BAC5BJ,MAAM,CAACK,mBAAP,CAA2B,SAA3B,EAAsC,KAAKV,aAA3C,EACA,+BAAKtD,OAAL,CAAa6D,OAAb,4CAAsBG,mBAAtB,CAA0C,OAA1C,EAAmD,KAAKnD,iBAAxD,EACA,IAAI,KAAKhB,iBAAL,IAA0B,IAA9B,EAAoC,CAClC,KAAKA,iBAAL,CAAuBoE,MAAvB,GACD,CACDpB,uBAAWoB,MAAX,CAAkB,IAAlB,EACD,C,CAED;AACF;AACA;AACA,K,QAaSC,M,GAAP,kBAA6B,mBAC3B,oBACE,6BAAC,0BAAD,CAAc,QAAd,QACG,UAACtE,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACuE,UAAL,EAAP,CACD,CAJH,CADF,CAQD,C,QAEOA,U,GAAR,sBAAqB,mBAC4B,KAAK7C,KADjC,CACXC,eADW,eACXA,eADW,CACM6C,iBADN,eACMA,iBADN,CAGnB,oBACE,6BAAC,gCAAD,qBACE,6BAAC,4BAAD,EAAmB,KAAK9C,KAAxB,eACE,0CACGC,eAAe,IAAI,KAAK8C,YAAL,EADtB,eAEE,6BAAC,mCAAD,IACE,EAAE,MADJ,EAEE,UAAU,EAAE,KAAKC,kBAAL,EAFd,EAGE,MAAM,EAAE,CAACF,iBAHX,EAIE,KAAK,EAAE,CAACA,iBAJV,EAKE,IAAI,EAAE,KALR,EAME,OAAO,EAAE,EACPG,KAAK,EAAElF,kBADA,EAEPmF,IAAI,EAAEnF,kBAFC,EANX,EAUE,OAAO,EAAE,KAAKW,OAVhB,IAYG,KAAKyE,eAAL,EAZH,CAFF,CADF,CADF,CADF,CAuBD,C,CAED;AACF;AACA;AACA;AACA,K,QAMUA,e,GAAR,2BAAuC,+CACkC,KAAKnD,KADvC,CAC7BoD,KAD6B,gBAC7BA,KAD6B,CACtBnD,eADsB,gBACtBA,eADsB,CACLe,QADK,gBACLA,QADK,CACKqC,gBADL,gBACKA,gBADL,CACuBC,MADvB,gBACuBA,MADvB,CAGrC,oBACE,6BAAC,cAAD,IACE,QAAQ,EAAE,UADZ,EAEE,YAAS,gBAFX,EAGE,SAAS,EAAE,gCACRC,iBAAOC,IAAP,EADQ,IACQ,IADR,OAHb,EAME,QAAQ,EAAEC,YAAY,CAACC,IANzB,EAOE,qBAAqB,MAPvB,EAQE,KAAK,EAAE,EACLN,KAAK,EAAEA,KAAK,KAAKnD,eAAe,GAAG,GAAH,GAAS,GAA7B,CADP,EAEL0D,KAAK,EAAE3C,QAAQ,GAAG,MAAH,GAAYsC,MAFtB,EAGLM,IAAI,EAAE5C,QAAQ,GAAGsC,MAAH,GAAY,MAHrB,EART,EAaE,UAAU,EAAE,KAAK5E,OAbnB,iBAeE,6BAAC,uBAAD,IAAW,QAAQ,EAAE2E,gBAAgB,IAAI,CAACpD,eAA1C,EAA2D,SAAS,EAAE,KAAtE,EAA6E,SAAS,EAAEsD,iBAAOM,SAAP,EAAxF,iBACE,6BAAC,wBAAD,IAAa,cAAc,EAAE,KAAKnC,kBAAlC,EAAsD,MAAM,MAA5D,iBACE,sCACE,YAAS,qBADX,EAEE,SAAS,EAAE,iBAAG6B,iBAAOO,OAAP,CAAe,KAAKxF,KAApB,CAAH,mBACRiF,iBAAOQ,WAAP,EADQ,IACe/C,QADf,OAERuC,iBAAOS,iBAAP,EAFQ,IAEqB,KAAK/F,KAAL,CAAWkD,SAAX,IAAwBH,QAF7C,OAGRuC,iBAAOU,kBAAP,EAHQ,IAGsB,KAAKhG,KAAL,CAAWkD,SAAX,IAAwB,CAACH,QAH/C,OAIRuC,iBAAOW,MAAP,CAAc,KAAK5F,KAAnB,CAJQ,IAIoB,KAAKL,KAAL,CAAWoD,SAJ/B,QAFb,EAQE,GAAG,EAAE,aAAC8C,CAAD,UAAQ,MAAI,CAAC3F,SAAL,GAAiB2F,CAAzB,EARP,iBAUE,6BAAC,gCAAD,CAAiB,QAAjB,IAA0B,KAAK,EAAE,KAAKhE,uBAAL,EAAjC,IACG,KAAKH,KAAL,CAAWoE,QADd,CAVF,CADF,CADF,CAfF,CADF,CAoCD,C,QAmCOrB,Y,GAAR,wBAAoC,UAClC,oBACE,6BAAC,cAAD,IAAQ,QAAQ,EAAE,UAAlB,EAA8B,SAAS,EAAEQ,iBAAOc,OAAP,EAAzC,EAA2D,QAAQ,EAAEZ,YAAY,CAACC,IAAlF,iBACE,6BAAC,8CAAD,IAAwB,GAAG,EAAC,MAA5B,GADF,eAEE,sCACE,GAAG,EAAC,SADN,EAEE,SAAS,EAAE,kCACRH,iBAAOe,UAAP,EADQ,IACc,IADd,OAERf,iBAAOgB,cAAP,CAAsB,KAAKjG,KAA3B,CAFQ,IAE4B,KAAKL,KAAL,CAAWqD,aAFvC,QAFb,GAFF,CADF,CAYD,C,QAEO0B,kB,GAAR,8BAAqD,CACnD,IAAMwB,UAAU,GAAG,KAAKxE,KAAL,CAAWgB,QAAX,GAAsBuC,iBAAOkB,eAA7B,GAA+ClB,iBAAOmB,cAAzE,CAEA,OAAO,EACLzB,KAAK,EAAEuB,UAAU,EADZ,EAELG,WAAW,EAAEpB,iBAAOqB,gBAAP,EAFR,EAGL1B,IAAI,EAAEK,iBAAOsB,eAAP,EAHD,EAILC,UAAU,EAAEvB,iBAAOwB,qBAAP,EAJP,EAKLC,MAAM,EAAER,UAAU,EALb,EAMLS,YAAY,EAAE1B,iBAAOqB,gBAAP,EANT,EAAP,CAQD,C,mBAxM2BjG,eAAMuG,S,8BAAvBlH,Q,CACGmH,mB,GAAsB,U,CADzBnH,Q,CAGGoH,M,GAASC,8B,CAHZrH,Q,CAIGsH,I,GAAOC,0B,CAJVvH,Q,CAKGwH,M,GAASC,8B,CALZzH,Q,CAMG0H,S,GAAYC,oC,CANf3H,Q,CA6CG4H,Y,GAAe,EAC3B9C,iBAAiB,EAAE+C,6BADQ,EAE3BxC,gBAAgB,EAAE,IAFS,EAG3BC,MAAM,EAAE,CAHmB,E","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\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 { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитывать FocusLock\n *\n * @param shard\n */\n public addShard = (shard: React.RefObject<any> | HTMLElement) => {\n this.shards.add(shard);\n this.setState({shards: [...Array.from(this.shards.values())]});\n };\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layoutRef;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"sources":["SidePage.tsx"],"names":["TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","layoutRef","footer","rootRef","React","createRef","Set","updateLayout","update","addFocusLockShard","shard","has","add","setState","Array","from","values","deleteFocusLockShard","delete","disablePageScroll","e","layout","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","ModalStack","isBlocking","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","styles","root","LayoutEvents","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","SidePageHeader","Body","SidePageBody","Footer","SidePageFooter","Container","SidePageContainer","defaultProps","isTestEnv"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\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 { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитываться при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public addFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (!this.shards.has(shard)) {\n this.shards.add(shard);\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n /**\n * Удалить элемент, чтобы он не учитывался при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public deleteFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (this.shards.delete(shard)) {\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock\n shards={this.state.shards}\n disabled={disableFocusLock || !blockBackground}\n autoFocus={false}\n className={styles.focusLock()}\n >\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layoutRef;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
@@ -12,6 +12,7 @@ export interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {
12
12
  applyZIndex?: boolean;
13
13
  className?: string;
14
14
  wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;
15
+ onlyContext: boolean;
15
16
  }
16
17
  export declare class ZIndex extends React.Component<ZIndexProps> {
17
18
  static __KONTUR_REACT_UI__: string;
@@ -22,6 +23,7 @@ export declare class ZIndex extends React.Component<ZIndexProps> {
22
23
  applyZIndex: boolean;
23
24
  coverChildren: boolean;
24
25
  createStackingContext: boolean;
26
+ onlyContext: boolean;
25
27
  };
26
28
  static propTypes: {
27
29
  delta(props: ZIndexProps): Error | undefined;
@@ -29,6 +31,7 @@ export declare class ZIndex extends React.Component<ZIndexProps> {
29
31
  private zIndex;
30
32
  private setRootNode;
31
33
  constructor(props: ZIndexProps);
34
+ componentDidUpdate(prevProps: Readonly<ZIndexProps>, prevState: Readonly<{}>): void;
32
35
  componentWillUnmount(): void;
33
36
  render(): JSX.Element;
34
37
  private wrapperRef;
@@ -25,6 +25,9 @@ ZIndexContext.displayName = 'ZIndexContext';var
25
25
 
26
26
 
27
27
 
28
+
29
+
30
+
28
31
  ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default)(ZIndex, _React$Component);
29
32
 
30
33
 
@@ -50,6 +53,7 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
50
53
 
51
54
 
52
55
 
56
+
53
57
 
54
58
 
55
59
  function ZIndex(props) {var _this;
@@ -97,6 +101,16 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
97
101
 
98
102
 
99
103
 
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
100
114
 
101
115
 
102
116
 
@@ -112,7 +126,7 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
112
126
  wrapperRef = _this.props.wrapperRef;
113
127
  _this.setRootNode(element);
114
128
  wrapperRef && (0, _callChildRef.callChildRef)(wrapperRef, element);
115
- };_this.zIndex = (0, _ZIndexStorage.incrementZIndex)(props.priority, props.delta);return _this;}var _proto = ZIndex.prototype;_proto.componentWillUnmount = function componentWillUnmount() {(0, _ZIndexStorage.removeZIndex)(this.zIndex);};_proto.render = function render() {var _this2 = this;var _this$props = this.props,style = _this$props.style,children = _this$props.children,delta = _this$props.delta,priority = _this$props.priority,applyZIndex = _this$props.applyZIndex,coverChildren = _this$props.coverChildren,createStackingContext = _this$props.createStackingContext,wrapperRef = _this$props.wrapperRef,props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["style", "children", "delta", "priority", "applyZIndex", "coverChildren", "createStackingContext", "wrapperRef"]);var wrapperStyle = {};return /*#__PURE__*/_react.default.createElement(ZIndexContext.Consumer, null, function (_ref) {var parentLayerZIndex = _ref.parentLayerZIndex,maxZIndex = _ref.maxZIndex;var zIndexContexValue = { parentLayerZIndex: parentLayerZIndex, maxZIndex: maxZIndex };if (applyZIndex) {var newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);wrapperStyle.zIndex = newZIndex;zIndexContexValue = coverChildren ? { parentLayerZIndex: parentLayerZIndex, maxZIndex: newZIndex } : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };if (createStackingContext) {_client.isBrowser && 'isolation' in document.body.style ? wrapperStyle.isolation = 'isolate' : wrapperStyle.transform = 'rotate(0)';}}return /*#__PURE__*/_react.default.createElement(ZIndexContext.Provider, { value: zIndexContexValue }, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ style: (0, _extends2.default)({}, style, wrapperStyle), ref: _this2.wrapperRef }, props), children));});};_proto.
129
+ };_this.zIndex = (0, _ZIndexStorage.incrementZIndex)(props.priority, props.delta);return _this;}var _proto = ZIndex.prototype;_proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {this.zIndex = (0, _ZIndexStorage.incrementZIndex)(this.props.priority, this.props.delta);this.forceUpdate();}};_proto.componentWillUnmount = function componentWillUnmount() {(0, _ZIndexStorage.removeZIndex)(this.zIndex);};_proto.render = function render() {var _this2 = this;var _this$props = this.props,style = _this$props.style,children = _this$props.children,delta = _this$props.delta,priority = _this$props.priority,applyZIndex = _this$props.applyZIndex,coverChildren = _this$props.coverChildren,createStackingContext = _this$props.createStackingContext,wrapperRef = _this$props.wrapperRef,onlyContext = _this$props.onlyContext,props = (0, _objectWithoutPropertiesLoose2.default)(_this$props, ["style", "children", "delta", "priority", "applyZIndex", "coverChildren", "createStackingContext", "wrapperRef", "onlyContext"]);var wrapperStyle = {};return /*#__PURE__*/_react.default.createElement(ZIndexContext.Consumer, null, function (_ref) {var parentLayerZIndex = _ref.parentLayerZIndex,maxZIndex = _ref.maxZIndex;var zIndexContexValue = { parentLayerZIndex: parentLayerZIndex, maxZIndex: maxZIndex };if (applyZIndex) {var newZIndex = _this2.calcZIndex(parentLayerZIndex, maxZIndex);wrapperStyle.zIndex = newZIndex;zIndexContexValue = coverChildren ? { parentLayerZIndex: parentLayerZIndex, maxZIndex: newZIndex } : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };if (createStackingContext) {_client.isBrowser && 'isolation' in document.body.style ? wrapperStyle.isolation = 'isolate' : wrapperStyle.transform = 'rotate(0)';}}var child = onlyContext ? children : /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ style: (0, _extends2.default)({}, style, wrapperStyle), ref: _this2.wrapperRef }, props), children);return /*#__PURE__*/_react.default.createElement(ZIndexContext.Provider, { value: zIndexContexValue }, child);});};_proto.
116
130
 
117
131
  calcZIndex = function calcZIndex(parentLayerZIndex, maxZIndex) {
118
132
  var newZIndex = this.zIndex;
@@ -126,4 +140,4 @@ ZIndex = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
126
140
  newZIndex += parentLayerZIndex;
127
141
 
128
142
  return newZIndex;
129
- };return ZIndex;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ZIndex', _class2.defaultProps = { delta: 10, priority: 0, style: {}, applyZIndex: true, coverChildren: false, createStackingContext: false }, _class2.propTypes = { delta: function delta(props) {if (props.delta <= 0) {return new Error("[ZIndex]: Prop 'delta' must be greater than 0, received " + props.delta);}if (Math.trunc(props.delta) !== props.delta) {return new Error("[ZIndex]: Prop 'delta' must be integer, received " + props.delta);}} }, _temp)) || _class;exports.ZIndex = ZIndex;
143
+ };return ZIndex;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'ZIndex', _class2.defaultProps = { delta: 10, priority: 0, style: {}, applyZIndex: true, coverChildren: false, createStackingContext: false, onlyContext: false }, _class2.propTypes = { delta: function delta(props) {if (props.delta <= 0) {return new Error("[ZIndex]: Prop 'delta' must be greater than 0, received " + props.delta);}if (Math.trunc(props.delta) !== props.delta) {return new Error("[ZIndex]: Prop 'delta' must be integer, received " + props.delta);}} }, _temp)) || _class;exports.ZIndex = ZIndex;
@@ -1 +1 @@
1
- {"version":3,"sources":["ZIndex.tsx"],"names":["ZIndexContext","React","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","rootNode","props","zIndex","setRootNode","wrapperRef","element","priority","delta","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","wrapperStyle","zIndexContexValue","newZIndex","calcZIndex","Number","isFinite","isBrowser","document","body","isolation","transform","allowedValuesIntervalLength","scale","upperBorder","Math","ceil","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isBrowser } from '../../lib/client';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta: number;\n priority: number | LayerComponentName;\n style: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n\n public static defaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n };\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if (props.delta <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private zIndex = 0;\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.zIndex = incrementZIndex(props.priority, props.delta);\n }\n\n public componentWillUnmount() {\n removeZIndex(this.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n ...props\n } = this.props;\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContexValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContexValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser && 'isolation' in document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n return (\n <ZIndexContext.Provider value={zIndexContexValue}>\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...props}>\n {children}\n </div>\n </ZIndexContext.Provider>\n );\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n}\n"]}
1
+ {"version":3,"sources":["ZIndex.tsx"],"names":["ZIndexContext","React","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","rootNode","props","zIndex","setRootNode","wrapperRef","element","priority","delta","componentDidUpdate","prevProps","prevState","forceUpdate","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","onlyContext","wrapperStyle","zIndexContexValue","newZIndex","calcZIndex","Number","isFinite","isBrowser","document","body","isolation","transform","child","allowedValuesIntervalLength","scale","upperBorder","Math","ceil","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isBrowser } from '../../lib/client';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta: number;\n priority: number | LayerComponentName;\n style: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n // Не добавлять обёртку, атрибуты и z-index\n onlyContext: boolean;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n\n public static defaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n onlyContext: false,\n };\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if (props.delta <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private zIndex = 0;\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.zIndex = incrementZIndex(props.priority, props.delta);\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>, prevState: Readonly<{}>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n this.zIndex = incrementZIndex(this.props.priority, this.props.delta);\n this.forceUpdate();\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n onlyContext,\n ...props\n } = this.props;\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContexValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContexValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser && 'isolation' in document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = onlyContext ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...props}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContexValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n}\n"]}
@@ -1,4 +1,9 @@
1
1
  import React from 'react';
2
+ import EventEmitter from 'eventemitter3';
3
+ export interface StackInfo {
4
+ emitter: EventEmitter;
5
+ mounted: React.Component[];
6
+ }
2
7
  export interface ModalStackSubscription {
3
8
  remove: () => void;
4
9
  }
@@ -9,6 +14,6 @@ export declare class ModalStack {
9
14
  * Determines if stack component is allowed to block background
10
15
  */
11
16
  static isBlocking(component: React.Component): boolean;
12
- private static getStackInfo;
17
+ static getStackInfo(): StackInfo;
13
18
  private static wantsToBlock;
14
19
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalStack.ts"],"names":["ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","EventEmitter","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\ninterface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n private static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = <T>(componentName: string) => {\n return (instance: React.Component): instance is React.Component<T> => {\n const { constructor } = instance;\n\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n };\n};\n\nconst isSidePage = isReactUIInstance<SidePageProps>('SidePage');\n\nconst isModal = isReactUIInstance<ModalProps>('Modal');\n"]}
1
+ {"version":3,"sources":["ModalStack.ts"],"names":["ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","EventEmitter","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\nexport interface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n public static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = <T>(componentName: string) => {\n return (instance: React.Component): instance is React.Component<T> => {\n const { constructor } = instance;\n\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n };\n};\n\nconst isSidePage = isReactUIInstance<SidePageProps>('SidePage');\n\nconst isModal = isReactUIInstance<ModalProps>('Modal');\n"]}
@@ -63,12 +63,22 @@ export var Modal = /*#__PURE__*/function (_React$Component) {
63
63
  _this.mouseUpTarget = null;
64
64
  _this.shards = new Set();
65
65
 
66
- _this.addShard = function (shard) {
67
- _this.shards.add(shard);
66
+ _this.addFocusLockShard = function (shard) {
67
+ if (!_this.shards.has(shard)) {
68
+ _this.shards.add(shard);
68
69
 
69
- _this.setState({
70
- shards: [].concat(Array.from(_this.shards.values()))
71
- });
70
+ _this.setState({
71
+ shards: [].concat(Array.from(_this.shards.values()))
72
+ });
73
+ }
74
+ };
75
+
76
+ _this.deleteFocusLockShard = function (shard) {
77
+ if (_this.shards["delete"](shard)) {
78
+ _this.setState({
79
+ shards: [].concat(Array.from(_this.shards.values()))
80
+ });
81
+ }
72
82
  };
73
83
 
74
84
  _this.requestClose = function () {
@@ -301,9 +311,12 @@ export var Modal = /*#__PURE__*/function (_React$Component) {
301
311
  }, this.props.children)))))))));
302
312
  }
303
313
  /**
304
- * Добавить элемент, который будет учитывать FocusLock
314
+ * Добавить элемент, который будет учитываться при блокировке фокуса
315
+ *
316
+ * @public
317
+ * @param shard RefObject | HTMLElement
305
318
  *
306
- * @param shard
319
+ * @link https://github.com/theKashey/react-focus-lock#api shards
307
320
  */
308
321
  ;
309
322
 
@@ -1 +1 @@
1
- {"version":3,"sources":["Modal.tsx"],"names":["React","FocusLock","isKeyEscape","LayoutEvents","RenderContainer","ZIndex","stopPropagation","HideBodyVerticalScroll","ModalStack","ResizeDetector","ThemeContext","isIE11","CommonWrapper","cx","ModalContext","ModalFooter","ModalHeader","ModalBody","ModalClose","styles","mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","Set","addShard","shard","add","setState","Array","from","values","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","indexOf","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","handleResize","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","root","bg","container","centerContainer","alignTop","Boolean","disableFocusLock","closeWrapper","children","Component","__KONTUR_REACT_UI__","Header","Body","Footer","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонет нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.checkHorizontalScrollAppearance);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.checkHorizontalScrollAppearance);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\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 { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (hasHeader && !this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={containerStyle}\n data-tid=\"modal-content\"\n >\n <div className={styles.window(this.theme)} style={style}>\n <ResizeDetector onResize={this.handleResize}>\n <FocusLock shards={this.state.shards} disabled={this.props.disableFocusLock} autoFocus={false}>\n {!hasHeader && !this.props.noClose ? (\n <ZIndex priority={'ModalCross'} className={styles.closeWrapper(this.theme)}>\n <ModalClose requestClose={this.requestClose} disableClose={this.props.disableClose} />\n </ZIndex>\n ) : null}\n <ModalContext.Provider value={modalContextProps}>{this.props.children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитывать FocusLock\n *\n * @param shard\n */\n public addShard = (shard: React.RefObject<any> | HTMLElement) => {\n this.shards.add(shard);\n this.setState({shards: [...Array.from(this.shards.values())]});\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"sources":["Modal.tsx"],"names":["React","FocusLock","isKeyEscape","LayoutEvents","RenderContainer","ZIndex","stopPropagation","HideBodyVerticalScroll","ModalStack","ResizeDetector","ThemeContext","isIE11","CommonWrapper","cx","ModalContext","ModalFooter","ModalHeader","ModalBody","ModalClose","styles","mountedModalsCount","Modal","state","stackPosition","hasBackground","horizontalScroll","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","containerNode","mouseDownTarget","mouseUpTarget","Set","addFocusLockShard","shard","has","add","setState","Array","from","values","deleteFocusLockShard","requestClose","props","disableClose","onClose","refContainer","center","handleStackChange","stack","indexOf","isBlocking","handleContainerMouseDown","event","target","handleContainerMouseUp","handleContainerClick","ignoreBackgroundClick","currentTarget","handleKeyDown","e","checkHorizontalScrollAppearance","hasScroll","containerClientWidth","clientWidth","containerScrollWidth","scrollWidth","handleResize","emit","setHasHeader","setHasFooter","setHasPanel","componentDidMount","window","addEventListener","componentWillUnmount","removeEventListener","remove","render","renderMain","modalContextProps","noClose","close","additionalPadding","style","containerStyle","width","root","bg","container","centerContainer","alignTop","Boolean","disableFocusLock","closeWrapper","children","Component","__KONTUR_REACT_UI__","Header","Body","Footer","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { ResizeDetector } from '../../internal/ResizeDetector';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isIE11 } from '../../lib/client';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { ModalContext, ModalContextProps } from './ModalContext';\nimport { ModalFooter } from './ModalFooter';\nimport { ModalHeader } from './ModalHeader';\nimport { ModalBody } from './ModalBody';\nimport { ModalClose } from './ModalClose';\nimport { styles } from './Modal.styles';\n\nlet mountedModalsCount = 0;\n\nexport interface ModalProps extends CommonProps {\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия модалки\n */\n disableClose?: boolean;\n\n /**\n * Выравнивание окна по верху страницы.\n */\n alignTop?: boolean;\n\n /**\n * Не закрывать окно при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Не показывать крестик для закрытия окна.\n */\n noClose?: boolean;\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие окна (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Не использовать фокус-лок внутри модалки.\n * По умолчанию true для IE11.\n */\n disableFocusLock?: boolean;\n}\n\nexport interface ModalState {\n stackPosition: number;\n hasBackground: boolean;\n horizontalScroll: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\n/**\n * Модальное окно\n *\n * Содержит в себе три компоненты: **Modal.Header**,\n * **Modal.Body** и **Modal.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n *\n * Для отключения прилипания шапки и футера\n * в соответствующий компонет нужно передать\n * проп **sticky** со значением **false**\n * (по-умолчанию прилипание включено)\n */\nexport class Modal extends React.Component<ModalProps, ModalState> {\n public static __KONTUR_REACT_UI__ = 'Modal';\n\n public static Header = ModalHeader;\n public static Body = ModalBody;\n public static Footer = ModalFooter;\n\n public static defaultProps = {\n // NOTE: в ie нормально не работает\n disableFocusLock: isIE11,\n };\n\n public state: ModalState = {\n stackPosition: 0,\n hasBackground: true,\n horizontalScroll: false,\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private containerNode: HTMLDivElement | null = null;\n private mouseDownTarget: EventTarget | null = null;\n private mouseUpTarget: EventTarget | null = null;\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n\n if (mountedModalsCount === 0) {\n window.addEventListener('resize', this.checkHorizontalScrollAppearance);\n }\n\n mountedModalsCount++;\n window.addEventListener('keydown', this.handleKeyDown);\n this.checkHorizontalScrollAppearance();\n\n if (this.containerNode) {\n this.containerNode.addEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public componentWillUnmount() {\n if (--mountedModalsCount === 0) {\n window.removeEventListener('resize', this.checkHorizontalScrollAppearance);\n LayoutEvents.emit();\n }\n\n window.removeEventListener('keydown', this.handleKeyDown);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n\n if (this.containerNode) {\n this.containerNode.removeEventListener('scroll', LayoutEvents.emit);\n }\n }\n\n public render(): JSX.Element {\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 { hasHeader, hasFooter, hasPanel } = this.state;\n\n const modalContextProps: ModalContextProps = {\n hasHeader,\n horizontalScroll: this.state.horizontalScroll,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n if (hasHeader && !this.props.noClose) {\n modalContextProps.close = {\n disableClose: this.props.disableClose,\n requestClose: this.requestClose,\n };\n }\n if (!hasFooter) {\n modalContextProps.additionalPadding = true;\n }\n if (hasFooter && hasPanel) {\n modalContextProps.additionalPadding = true;\n }\n\n const style: { width?: number | string } = {};\n const containerStyle: { width?: number | string } = {};\n\n if (this.props.width) {\n style.width = this.props.width;\n } else {\n containerStyle.width = 'auto';\n }\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <ZIndex priority={'Modal'} className={styles.root()}>\n <HideBodyVerticalScroll />\n {this.state.hasBackground && <div className={styles.bg(this.theme)} />}\n <div\n ref={this.refContainer}\n className={styles.container()}\n onMouseDown={this.handleContainerMouseDown}\n onMouseUp={this.handleContainerMouseUp}\n onClick={this.handleContainerClick}\n data-tid=\"modal-container\"\n >\n <div\n className={cx({\n [styles.centerContainer(this.theme)]: true,\n [styles.alignTop()]: Boolean(this.props.alignTop),\n })}\n style={containerStyle}\n data-tid=\"modal-content\"\n >\n <div className={styles.window(this.theme)} style={style}>\n <ResizeDetector onResize={this.handleResize}>\n <FocusLock shards={this.state.shards} disabled={this.props.disableFocusLock} autoFocus={false}>\n {!hasHeader && !this.props.noClose ? (\n <ZIndex priority={'ModalCross'} className={styles.closeWrapper(this.theme)}>\n <ModalClose requestClose={this.requestClose} disableClose={this.props.disableClose} />\n </ZIndex>\n ) : null}\n <ModalContext.Provider value={modalContextProps}>{this.props.children}</ModalContext.Provider>\n </FocusLock>\n </ResizeDetector>\n </div>\n </div>\n </div>\n </ZIndex>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитываться при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public addFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (!this.shards.has(shard)) {\n this.shards.add(shard);\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n /**\n * Удалить элемент, чтобы он не учитывался при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public deleteFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (this.shards.delete(shard)) {\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private refContainer = (center: HTMLDivElement | null) => {\n this.containerNode = center;\n };\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n this.setState({ stackPosition: stack.indexOf(this), hasBackground: ModalStack.isBlocking(this) });\n };\n\n private handleContainerMouseDown = (event: React.MouseEvent) => {\n this.mouseDownTarget = event.target;\n };\n\n private handleContainerMouseUp = (event: React.MouseEvent) => {\n this.mouseUpTarget = event.target;\n };\n\n private handleContainerClick = (event: React.MouseEvent<HTMLDivElement>) => {\n if (!this.props.ignoreBackgroundClick) {\n const { target, currentTarget } = event;\n if (target === currentTarget && this.mouseDownTarget === currentTarget && this.mouseUpTarget === currentTarget) {\n this.requestClose();\n }\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private checkHorizontalScrollAppearance = () => {\n let hasScroll = false;\n\n if (this.containerNode) {\n const containerClientWidth = this.containerNode.clientWidth;\n const containerScrollWidth = this.containerNode.scrollWidth;\n hasScroll = containerClientWidth < containerScrollWidth;\n }\n if (hasScroll && !this.state.horizontalScroll) {\n this.setState({ horizontalScroll: true });\n } else if (this.state.horizontalScroll) {\n this.setState({ horizontalScroll: false });\n }\n };\n\n private handleResize = (event: UIEvent) => {\n LayoutEvents.emit();\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
@@ -75,11 +75,23 @@ export declare class Modal extends React.Component<ModalProps, ModalState> {
75
75
  render(): JSX.Element;
76
76
  private renderMain;
77
77
  /**
78
- * Добавить элемент, который будет учитывать FocusLock
78
+ * Добавить элемент, который будет учитываться при блокировке фокуса
79
79
  *
80
- * @param shard
80
+ * @public
81
+ * @param shard RefObject | HTMLElement
82
+ *
83
+ * @link https://github.com/theKashey/react-focus-lock#api shards
84
+ */
85
+ addFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
86
+ /**
87
+ * Удалить элемент, чтобы он не учитывался при блокировке фокуса
88
+ *
89
+ * @public
90
+ * @param shard RefObject | HTMLElement
91
+ *
92
+ * @link https://github.com/theKashey/react-focus-lock#api shards
81
93
  */
82
- addShard: (shard: React.RefObject<any> | HTMLElement) => void;
94
+ deleteFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
83
95
  private requestClose;
84
96
  private refContainer;
85
97
  private handleStackChange;
@@ -62,12 +62,22 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
62
62
  }
63
63
  };
64
64
 
65
- _this.addShard = function (shard) {
66
- _this.shards.add(shard);
65
+ _this.addFocusLockShard = function (shard) {
66
+ if (!_this.shards.has(shard)) {
67
+ _this.shards.add(shard);
67
68
 
68
- _this.setState({
69
- shards: [].concat(Array.from(_this.shards.values()))
70
- });
69
+ _this.setState({
70
+ shards: [].concat(Array.from(_this.shards.values()))
71
+ });
72
+ }
73
+ };
74
+
75
+ _this.deleteFocusLockShard = function (shard) {
76
+ if (_this.shards["delete"](shard)) {
77
+ _this.setState({
78
+ shards: [].concat(Array.from(_this.shards.values()))
79
+ });
80
+ }
71
81
  };
72
82
 
73
83
  _this.disablePageScroll = function (e) {
@@ -248,9 +258,12 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
248
258
  }, this.renderContainer()))));
249
259
  }
250
260
  /**
251
- * Добавить элемент, который будет учитывать FocusLock
261
+ * Добавить элемент, который будет учитываться при блокировке фокуса
262
+ *
263
+ * @public
264
+ * @param shard RefObject | HTMLElement
252
265
  *
253
- * @param shard
266
+ * @link https://github.com/theKashey/react-focus-lock#api shards
254
267
  */
255
268
  ;
256
269
 
@@ -278,6 +291,7 @@ export var SidePage = /*#__PURE__*/function (_React$Component) {
278
291
  },
279
292
  wrapperRef: this.rootRef
280
293
  }, /*#__PURE__*/React.createElement(FocusLock, {
294
+ shards: this.state.shards,
281
295
  disabled: disableFocusLock || !blockBackground,
282
296
  autoFocus: false,
283
297
  className: styles.focusLock()
@@ -1 +1 @@
1
- {"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","layoutRef","footer","rootRef","createRef","Set","updateLayout","update","addShard","shard","add","setState","Array","from","values","disablePageScroll","e","layout","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\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 { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитывать FocusLock\n *\n * @param shard\n */\n public addShard = (shard: React.RefObject<any> | HTMLElement) => {\n this.shards.add(shard);\n this.setState({shards: [...Array.from(this.shards.values())]});\n };\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock disabled={disableFocusLock || !blockBackground} autoFocus={false} className={styles.focusLock()}>\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layoutRef;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
1
+ {"version":3,"sources":["SidePage.tsx"],"names":["React","CSSTransition","FocusLock","isKeyEscape","LayoutEvents","stopPropagation","HideBodyVerticalScroll","ModalStack","RenderContainer","RenderLayer","ZIndex","ThemeContext","CommonWrapper","cx","isTestEnv","SidePageBody","SidePageContainer","SidePageContext","SidePageFooter","SidePageHeader","styles","TRANSITION_TIMEOUT","SidePage","state","hasHeader","hasFooter","hasPanel","shards","theme","stackSubscription","layoutRef","footer","rootRef","createRef","Set","updateLayout","update","addFocusLockShard","shard","has","add","setState","Array","from","values","deleteFocusLockShard","disablePageScroll","e","layout","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","isBlocking","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","componentWillUnmount","removeEventListener","remove","render","renderMain","disableAnimations","renderShadow","getTransitionNames","enter","exit","renderContainer","width","disableFocusLock","offset","root","emit","right","left","focusLock","wrapper","wrapperLeft","wrapperMarginLeft","wrapperMarginRight","shadow","_","children","overlay","background","backgroundGray","transition","transitionRight","transitionLeft","enterActive","transitionActive","transitionLeave","exitActive","transitionLeaveActive","appear","appearActive","Component","__KONTUR_REACT_UI__","Header","Body","Footer","Container","defaultProps"],"mappings":"4JAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,OAAOC,SAAP,MAAsB,kBAAtB;;AAEA,SAASC,WAAT,QAA4B,uCAA5B;AACA,OAAO,KAAKC,YAAZ,MAA8B,wBAA9B;AACA,SAASC,eAAT,QAAgC,kCAAhC;AACA,SAASC,sBAAT,QAAuC,uCAAvC;AACA,SAASC,UAAT,QAAmD,sBAAnD;AACA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,WAAT,QAA4B,4BAA5B;AACA,SAASC,MAAT,QAAuB,uBAAvB;AACA,SAASC,YAAT,QAA6B,gCAA7B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,EAAT,QAAmB,2BAAnB;AACA,SAASC,SAAT,QAA0B,8BAA1B;;AAEA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASC,iBAAT,QAAkC,qBAAlC;AACA,SAASC,eAAT,QAAqD,mBAArD;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,MAAT,QAAuB,mBAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+DA,IAAMC,kBAAkB,GAAG,GAA3B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAaC,QAAb;;;;;;;AAOSC,IAAAA,KAPT,GAOgC;AAC5BC,MAAAA,SAAS,EAAE,KADiB;AAE5BC,MAAAA,SAAS,EAAE,KAFiB;AAG5BC,MAAAA,QAAQ,EAAE,KAHkB;AAI5BC,MAAAA,MAAM,EAAE,EAJoB,EAPhC;;AAaUC,IAAAA,KAbV;AAcUC,IAAAA,iBAdV,GAc6D,IAd7D;AAeUC,IAAAA,SAfV,GAe0C,IAf1C;AAgBUC,IAAAA,MAhBV,GAgB0C,IAhB1C;AAiBUC,IAAAA,OAjBV,gBAiBoBhC,KAAK,CAACiC,SAAN,EAjBpB;AAkBUN,IAAAA,MAlBV,GAkBmB,IAAIO,GAAJ,EAlBnB;;;;;;;;;;;;;;;;;;;;;AAuCSC,IAAAA,YAvCT,GAuCwB,YAAY;AAChC,UAAI,MAAKJ,MAAT,EAAiB;AACf,cAAKA,MAAL,CAAYK,MAAZ;AACD;AACF,KA3CH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkGSC,IAAAA,iBAlGT,GAkG6B,UAACC,KAAD,EAA+C;AACxE,UAAI,CAAC,MAAKX,MAAL,CAAYY,GAAZ,CAAgBD,KAAhB,CAAL,EAA6B;AAC3B,cAAKX,MAAL,CAAYa,GAAZ,CAAgBF,KAAhB;AACA,cAAKG,QAAL,CAAc,EAAEd,MAAM,YAAMe,KAAK,CAACC,IAAN,CAAW,MAAKhB,MAAL,CAAYiB,MAAZ,EAAX,CAAN,CAAR,EAAd;AACD;AACF,KAvGH;;;;;;;;;;AAiHSC,IAAAA,oBAjHT,GAiHgC,UAACP,KAAD,EAA+C;AAC3E,UAAI,MAAKX,MAAL,WAAmBW,KAAnB,CAAJ,EAA+B;AAC7B,cAAKG,QAAL,CAAc,EAAEd,MAAM,YAAMe,KAAK,CAACC,IAAN,CAAW,MAAKhB,MAAL,CAAYiB,MAAZ,EAAX,CAAN,CAAR,EAAd;AACD;AACF,KArHH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqKUE,IAAAA,iBArKV,GAqK8B,UAACC,CAAD,EAAmB;AAC7C,UAAMC,MAAM,GAAG,MAAKlB,SAApB;AACA,UAAI,CAACkB,MAAL,EAAa;AACb,UAAMC,UAAU,GAAGD,MAAM,CAACE,SAAP,IAAoB,CAApB,IAAyBH,CAAC,CAACI,MAAF,GAAW,CAAvD;AACA,UAAMC,aAAa,GAAGJ,MAAM,CAACE,SAAP,IAAoBF,MAAM,CAACK,YAAP,GAAsBL,MAAM,CAACM,YAAjD,IAAiEP,CAAC,CAACI,MAAF,GAAW,CAAlG;;AAEA,UAAI,CAAC,MAAKI,KAAL,CAAWC,eAAZ,KAAgCP,UAAU,IAAIG,aAA9C,CAAJ,EAAkE;AAChEL,QAAAA,CAAC,CAACU,cAAF;AACD;AACF,KA9KH;;AAgLUC,IAAAA,uBAhLV,GAgLoC,YAA2B;AAC3D,aAAO;AACLlC,QAAAA,SAAS,EAAE,MAAKD,KAAL,CAAWC,SADjB;AAELC,QAAAA,SAAS,EAAE,MAAKF,KAAL,CAAWE,SAFjB;AAGLC,QAAAA,QAAQ,EAAE,MAAKH,KAAL,CAAWG,QAHhB;AAILiC,QAAAA,YAAY,EAAE,MAAKA,YAJd;AAKLC,QAAAA,QAAQ,EAAE,MAAKA,QALV;AAMLzB,QAAAA,YAAY,EAAE,MAAKA,YANd;AAOL0B,QAAAA,SAAS,EAAE,MAAKA,SAPX;AAQLC,QAAAA,YAAY,EAAE,MAAKA,YARd;AASLC,QAAAA,YAAY,EAAE,MAAKA,YATd;AAULC,QAAAA,WAAW,EAAE,MAAKA,WAVb,EAAP;;AAYD,KA7LH;;AA+LUJ,IAAAA,QA/LV,GA+LqB,YAAM;AACvB,UAAI,CAAC,MAAK9B,SAAV,EAAqB;AACnB,eAAO,MAAP;AACD;AACD,aAAO,MAAKA,SAAL,CAAemC,WAAtB;AACD,KApMH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkOUC,IAAAA,iBAlOV,GAkO8B,UAACC,KAAD,EAA2C;AACrE,UAAMC,SAAS,GAAGD,KAAK,CAACE,MAAN,CAAa,UAACC,CAAD,UAAOA,CAAC,YAAYhD,QAAb,IAAyBgD,CAAC,CAACf,KAAF,CAAQgB,QAAR,KAAqB,MAAKhB,KAAL,CAAWgB,QAAhE,EAAb,CAAlB;AACA,UAAMC,uBAAuB,GAAGJ,SAAS,CAACK,OAAV,+BAAhC;;AAEA,UAAMC,SAAS,GAAGN,SAAS,CAACO,MAAV,GAAmB,CAAnB,IAAwBH,uBAAuB,KAAKJ,SAAS,CAACO,MAAV,GAAmB,CAAzF;AACA,UAAMC,SAAS,GAAGR,SAAS,CAACO,MAAV,GAAmB,CAAnB,IAAwBH,uBAAuB,GAAGJ,SAAS,CAACO,MAAV,GAAmB,CAAvF;AACA,UAAME,aAAa,GAAGtE,UAAU,CAACuE,UAAX,+BAAtB;;AAEA,YAAKrC,QAAL,CAAc;AACZsC,QAAAA,aAAa,EAAEZ,KAAK,CAACM,OAAN,+BADH;AAEZC,QAAAA,SAAS,EAATA,SAFY;AAGZE,QAAAA,SAAS,EAATA,SAHY;AAIZC,QAAAA,aAAa,EAAbA,aAJY,EAAd;;AAMD,KAhPH;;AAkPUG,IAAAA,kBAlPV,GAkP+B,UAACjC,CAAD,EAAc;AACzC,UAAI,MAAKxB,KAAL,CAAWwD,aAAX,KAA6B,CAA7B,IAAkC,CAAC,MAAKxB,KAAL,CAAW0B,qBAAlD,EAAyE;AACvE;AACA,YAAIlC,CAAC,YAAYmC,UAAb,IAA2BnC,CAAC,CAACoC,OAAF,GAAYC,QAAQ,CAACC,eAAT,CAAyBpB,WAApE,EAAiF;AAC/E;AACD;AACD,cAAKN,YAAL;AACD;AACF,KA1PH;;AA4PU2B,IAAAA,aA5PV,GA4P0B,UAACvC,CAAD,EAAsB;AAC5C,UAAI,MAAKxB,KAAL,CAAWwD,aAAX,KAA6B,CAAjC,EAAoC;AAClC;AACD;AACD,UAAI5E,WAAW,CAAC4C,CAAD,CAAf,EAAoB;AAClB1C,QAAAA,eAAe,CAAC0C,CAAD,CAAf;AACA,cAAKY,YAAL;AACD;AACF,KApQH;;AAsQUA,IAAAA,YAtQV,GAsQyB,YAAM;AAC3B,UAAI,MAAKJ,KAAL,CAAWgC,YAAf,EAA6B;AAC3B;AACD;AACD,UAAI,MAAKhC,KAAL,CAAWiC,OAAf,EAAwB;AACtB,cAAKjC,KAAL,CAAWiC,OAAX;AACD;AACF,KA7QH;;AA+QU3B,IAAAA,SA/QV,GA+QsB,UAAC4B,GAAD,EAAgC;AAClD,YAAK1D,MAAL,GAAc0D,GAAd;AACD,KAjRH;;AAmRU3B,IAAAA,YAnRV,GAmRyB,UAACtC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKD,KAAL,CAAWC,SAAX,KAAyBA,SAAzB,IAAsC,MAAKiB,QAAL,CAAc,EAAEjB,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,KArRH;;AAuRUuC,IAAAA,YAvRV,GAuRyB,UAACtC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKF,KAAL,CAAWE,SAAX,KAAyBA,SAAzB,IAAsC,MAAKgB,QAAL,CAAc,EAAEhB,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,KAzRH;;AA2RUuC,IAAAA,WA3RV,GA2RwB,UAACtC,QAAD,EAAsB,KAArBA,QAAqB,cAArBA,QAAqB,GAAV,KAAU;AAC1C,YAAKH,KAAL,CAAWG,QAAX,KAAwBA,QAAxB,IAAoC,MAAKe,QAAL,CAAc,EAAEf,QAAQ,EAARA,QAAF,EAAd,CAApC;AACD,KA7RH,sDAoBSgE,iBApBT,GAoBE,6BAA2B,2BACzBC,MAAM,CAACC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKN,aAAxC,EACA,8BAAKtD,OAAL,CAAa6D,OAAb,2CAAsBD,gBAAtB,CAAuC,OAAvC,EAAgD,KAAK9C,iBAArD,EAAwE,EAAEgD,OAAO,EAAE,KAAX,EAAxE,EACA,KAAKjE,iBAAL,GAAyBtB,UAAU,CAACiC,GAAX,CAAe,IAAf,EAAqB,KAAK0B,iBAA1B,CAAzB,CACD,CAxBH,QA0BS6B,oBA1BT,GA0BE,gCAA8B,4BAC5BJ,MAAM,CAACK,mBAAP,CAA2B,SAA3B,EAAsC,KAAKV,aAA3C,EACA,+BAAKtD,OAAL,CAAa6D,OAAb,4CAAsBG,mBAAtB,CAA0C,OAA1C,EAAmD,KAAKlD,iBAAxD,EACA,IAAI,KAAKjB,iBAAL,IAA0B,IAA9B,EAAoC,CAClC,KAAKA,iBAAL,CAAuBoE,MAAvB,GACD,CACD1F,UAAU,CAAC0F,MAAX,CAAkB,IAAlB,EACD,CAjCH,CAmCE;AACF;AACA;AACA,KAtCA,QAmDSC,MAnDT,GAmDE,kBAA6B,mBAC3B,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACtE,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACuE,UAAL,EAAP,CACD,CAJH,CADF,CAQD,CA5DH,QA8DUA,UA9DV,GA8DE,sBAAqB,mBAC4B,KAAK5C,KADjC,CACXC,eADW,eACXA,eADW,CACM4C,iBADN,eACMA,iBADN,CAGnB,oBACE,oBAAC,eAAD,qBACE,oBAAC,aAAD,EAAmB,KAAK7C,KAAxB,eACE,iCACGC,eAAe,IAAI,KAAK6C,YAAL,EADtB,eAEE,oBAAC,aAAD,IACE,UADF,EAEE,UAAU,EAAE,KAAKC,kBAAL,EAFd,EAGE,MAAM,EAAE,CAACF,iBAHX,EAIE,KAAK,EAAE,CAACA,iBAJV,EAKE,IAAI,EAAE,KALR,EAME,OAAO,EAAE,EACPG,KAAK,EAAElF,kBADA,EAEPmF,IAAI,EAAEnF,kBAFC,EANX,EAUE,OAAO,EAAE,KAAKW,OAVhB,IAYG,KAAKyE,eAAL,EAZH,CAFF,CADF,CADF,CADF,CAuBD,CAxFH,CA0FE;AACF;AACA;AACA;AACA;AACA;AACA;AACA,KAjGA,QAuHUA,eAvHV,GAuHE,2BAAuC,+CACkC,KAAKlD,KADvC,CAC7BmD,KAD6B,gBAC7BA,KAD6B,CACtBlD,eADsB,gBACtBA,eADsB,CACLe,QADK,gBACLA,QADK,CACKoC,gBADL,gBACKA,gBADL,CACuBC,MADvB,gBACuBA,MADvB,CAGrC,oBACE,oBAAC,MAAD,IACE,QAAQ,EAAE,UADZ,EAEE,YAAS,gBAFX,EAGE,SAAS,EAAE/F,EAAE,gBACVO,MAAM,CAACyF,IAAP,EADU,IACM,IADN,OAHf,EAME,QAAQ,EAAEzG,YAAY,CAAC0G,IANzB,EAOE,qBAAqB,MAPvB,EAQE,KAAK,EAAE,EACLJ,KAAK,EAAEA,KAAK,KAAKlD,eAAe,GAAG,GAAH,GAAS,GAA7B,CADP,EAELuD,KAAK,EAAExC,QAAQ,GAAG,MAAH,GAAYqC,MAFtB,EAGLI,IAAI,EAAEzC,QAAQ,GAAGqC,MAAH,GAAY,MAHrB,EART,EAaE,UAAU,EAAE,KAAK5E,OAbnB,iBAeE,oBAAC,SAAD,IACE,MAAM,EAAE,KAAKT,KAAL,CAAWI,MADrB,EAEE,QAAQ,EAAEgF,gBAAgB,IAAI,CAACnD,eAFjC,EAGE,SAAS,EAAE,KAHb,EAIE,SAAS,EAAEpC,MAAM,CAAC6F,SAAP,EAJb,iBAME,oBAAC,WAAD,IAAa,cAAc,EAAE,KAAKjC,kBAAlC,EAAsD,MAAM,MAA5D,iBACE,6BACE,YAAS,qBADX,EAEE,SAAS,EAAEnE,EAAE,CAACO,MAAM,CAAC8F,OAAP,CAAe,KAAKtF,KAApB,CAAD,mBACVR,MAAM,CAAC+F,WAAP,EADU,IACa5C,QADb,OAEVnD,MAAM,CAACgG,iBAAP,EAFU,IAEmB,KAAK7F,KAAL,CAAWmD,SAAX,IAAwBH,QAF3C,OAGVnD,MAAM,CAACiG,kBAAP,EAHU,IAGoB,KAAK9F,KAAL,CAAWmD,SAAX,IAAwB,CAACH,QAH7C,OAIVnD,MAAM,CAACkG,MAAP,CAAc,KAAK1F,KAAnB,CAJU,IAIkB,KAAKL,KAAL,CAAWqD,SAJ7B,QAFf,EAQE,GAAG,EAAE,aAAC2C,CAAD,UAAQ,MAAI,CAACzF,SAAL,GAAiByF,CAAzB,EARP,iBAUE,oBAAC,eAAD,CAAiB,QAAjB,IAA0B,KAAK,EAAE,KAAK7D,uBAAL,EAAjC,IACG,KAAKH,KAAL,CAAWiE,QADd,CAVF,CADF,CANF,CAfF,CADF,CAyCD,CAnKH,QAsMUnB,YAtMV,GAsME,wBAAoC,UAClC,oBACE,oBAAC,MAAD,IAAQ,QAAQ,EAAE,UAAlB,EAA8B,SAAS,EAAEjF,MAAM,CAACqG,OAAP,EAAzC,EAA2D,QAAQ,EAAErH,YAAY,CAAC0G,IAAlF,iBACE,oBAAC,sBAAD,IAAwB,GAAG,EAAC,MAA5B,GADF,eAEE,6BACE,GAAG,EAAC,SADN,EAEE,SAAS,EAAEjG,EAAE,kBACVO,MAAM,CAACsG,UAAP,EADU,IACY,IADZ,OAEVtG,MAAM,CAACuG,cAAP,CAAsB,KAAK/F,KAA3B,CAFU,IAE0B,KAAKL,KAAL,CAAWsD,aAFrC,QAFf,GAFF,CADF,CAYD,CAnNH,QAqNUyB,kBArNV,GAqNE,8BAAqD,CACnD,IAAMsB,UAAU,GAAG,KAAKrE,KAAL,CAAWgB,QAAX,GAAsBnD,MAAM,CAACyG,eAA7B,GAA+CzG,MAAM,CAAC0G,cAAzE,CAEA,OAAO,EACLvB,KAAK,EAAEqB,UAAU,EADZ,EAELG,WAAW,EAAE3G,MAAM,CAAC4G,gBAAP,EAFR,EAGLxB,IAAI,EAAEpF,MAAM,CAAC6G,eAAP,EAHD,EAILC,UAAU,EAAE9G,MAAM,CAAC+G,qBAAP,EAJP,EAKLC,MAAM,EAAER,UAAU,EALb,EAMLS,YAAY,EAAEjH,MAAM,CAAC4G,gBAAP,EANT,EAAP,CAQD,CAhOH,mBAA8BhI,KAAK,CAACsI,SAApC,EAAahH,Q,CACGiH,mB,GAAsB,U,CADzBjH,Q,CAGGkH,M,GAASrH,c,CAHZG,Q,CAIGmH,I,GAAO1H,Y,CAJVO,Q,CAKGoH,M,GAASxH,c,CALZI,Q,CAMGqH,S,GAAY3H,iB,CANfM,Q,CA6CGsH,Y,GAAe,EAC3BxC,iBAAiB,EAAEtF,SADQ,EAE3B6F,gBAAgB,EAAE,IAFS,EAG3BC,MAAM,EAAE,CAHmB,E","sourcesContent":["import React from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport FocusLock from 'react-focus-lock';\n\nimport { isKeyEscape } from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { stopPropagation } from '../../lib/events/stopPropagation';\nimport { HideBodyVerticalScroll } from '../../internal/HideBodyVerticalScroll';\nimport { ModalStack, ModalStackSubscription } from '../../lib/ModalStack';\nimport { RenderContainer } from '../../internal/RenderContainer';\nimport { RenderLayer } from '../../internal/RenderLayer';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { isTestEnv } from '../../lib/currentEnvironment';\n\nimport { SidePageBody } from './SidePageBody';\nimport { SidePageContainer } from './SidePageContainer';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\nimport { styles } from './SidePage.styles';\n\nexport interface SidePageProps extends CommonProps {\n /**\n * Добавить блокирующий фон, когда сайдпейдж открыт\n */\n blockBackground?: boolean;\n\n /**\n * Отключает событие onClose, также дизейблит кнопку закрытия сайдпейджа\n */\n disableClose?: boolean;\n\n /**\n * Не закрывать сайдпейдж при клике на фон.\n */\n ignoreBackgroundClick?: boolean;\n\n /**\n * Задать ширину сайдпейджа\n */\n width?: number | string;\n\n /**\n * Вызывается, когда пользователь запросил закрытие сайдпейджа (нажал на фон, на\n * Escape или на крестик).\n */\n onClose?: () => void;\n\n /**\n * Показывать сайдпэйдж слева\n *\n */\n fromLeft?: boolean;\n\n /**\n * Отключить анимации\n *\n */\n disableAnimations?: boolean;\n\n /**\n * Работает только при заблокированном фоне: `blockBackground = true`\n */\n disableFocusLock: boolean;\n\n /**\n * задает отступ от края экрана\n */\n offset?: number | string;\n}\n\nexport interface SidePageState {\n stackPosition?: number;\n hasMargin?: boolean;\n hasShadow?: boolean;\n hasBackground?: boolean;\n hasHeader: boolean;\n hasFooter: boolean;\n hasPanel: boolean;\n shards: Array<React.RefObject<any> | HTMLElement>;\n}\n\nconst TRANSITION_TIMEOUT = 200;\n\n/**\n * Сайдпейдж\n *\n * Содержит в себе три компоненты: **SidePage.Header**,\n * **SidePage.Body** и **SidePage.Footer**\n *\n * Для отображения серой плашки в футере в компонент\n * **Footer** необходимо передать пропс **panel**\n */\nexport class SidePage extends React.Component<SidePageProps, SidePageState> {\n public static __KONTUR_REACT_UI__ = 'SidePage';\n\n public static Header = SidePageHeader;\n public static Body = SidePageBody;\n public static Footer = SidePageFooter;\n public static Container = SidePageContainer;\n public state: SidePageState = {\n hasHeader: false,\n hasFooter: false,\n hasPanel: false,\n shards: [],\n };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layoutRef: HTMLElement | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\n private shards = new Set<React.RefObject<any> | HTMLElement>();\n\n public componentDidMount() {\n window.addEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.addEventListener('wheel', this.disablePageScroll, { passive: false });\n this.stackSubscription = ModalStack.add(this, this.handleStackChange);\n }\n\n public componentWillUnmount() {\n window.removeEventListener('keydown', this.handleKeyDown);\n this.rootRef.current?.removeEventListener('wheel', this.disablePageScroll);\n if (this.stackSubscription != null) {\n this.stackSubscription.remove();\n }\n ModalStack.remove(this);\n }\n\n /**\n * Обновляет разметку компонента.\n * @public\n */\n public updateLayout = (): void => {\n if (this.footer) {\n this.footer.update();\n }\n };\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n disableFocusLock: true,\n offset: 0,\n };\n\n public render(): JSX.Element {\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 { blockBackground, disableAnimations } = this.props;\n\n return (\n <RenderContainer>\n <CommonWrapper {...this.props}>\n <div>\n {blockBackground && this.renderShadow()}\n <CSSTransition\n in\n classNames={this.getTransitionNames()}\n appear={!disableAnimations}\n enter={!disableAnimations}\n exit={false}\n timeout={{\n enter: TRANSITION_TIMEOUT,\n exit: TRANSITION_TIMEOUT,\n }}\n nodeRef={this.rootRef}\n >\n {this.renderContainer()}\n </CSSTransition>\n </div>\n </CommonWrapper>\n </RenderContainer>\n );\n }\n\n /**\n * Добавить элемент, который будет учитываться при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public addFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (!this.shards.has(shard)) {\n this.shards.add(shard);\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n /**\n * Удалить элемент, чтобы он не учитывался при блокировке фокуса\n *\n * @public\n * @param shard RefObject | HTMLElement\n *\n * @link https://github.com/theKashey/react-focus-lock#api shards\n */\n public deleteFocusLockShard = (shard: React.RefObject<any> | HTMLElement) => {\n if (this.shards.delete(shard)) {\n this.setState({ shards: [...Array.from(this.shards.values())] });\n }\n };\n\n private renderContainer(): JSX.Element {\n const { width, blockBackground, fromLeft, disableFocusLock, offset } = this.props;\n\n return (\n <ZIndex\n priority={'Sidepage'}\n data-tid=\"SidePage__root\"\n className={cx({\n [styles.root()]: true,\n })}\n onScroll={LayoutEvents.emit}\n createStackingContext\n style={{\n width: width || (blockBackground ? 800 : 500),\n right: fromLeft ? 'auto' : offset,\n left: fromLeft ? offset : 'auto',\n }}\n wrapperRef={this.rootRef}\n >\n <FocusLock\n shards={this.state.shards}\n disabled={disableFocusLock || !blockBackground}\n autoFocus={false}\n className={styles.focusLock()}\n >\n <RenderLayer onClickOutside={this.handleClickOutside} active>\n <div\n data-tid=\"SidePage__container\"\n className={cx(styles.wrapper(this.theme), {\n [styles.wrapperLeft()]: fromLeft,\n [styles.wrapperMarginLeft()]: this.state.hasMargin && fromLeft,\n [styles.wrapperMarginRight()]: this.state.hasMargin && !fromLeft,\n [styles.shadow(this.theme)]: this.state.hasShadow,\n })}\n ref={(_) => (this.layoutRef = _)}\n >\n <SidePageContext.Provider value={this.getSidePageContextProps()}>\n {this.props.children}\n </SidePageContext.Provider>\n </div>\n </RenderLayer>\n </FocusLock>\n </ZIndex>\n );\n }\n\n private disablePageScroll = (e: WheelEvent) => {\n const layout = this.layoutRef;\n if (!layout) return;\n const reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;\n const reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;\n\n if (!this.props.blockBackground && (reachedTop || reachedBottom)) {\n e.preventDefault();\n }\n };\n\n private getSidePageContextProps = (): SidePageContextType => {\n return {\n hasHeader: this.state.hasHeader,\n hasFooter: this.state.hasFooter,\n hasPanel: this.state.hasPanel,\n requestClose: this.requestClose,\n getWidth: this.getWidth,\n updateLayout: this.updateLayout,\n footerRef: this.footerRef,\n setHasHeader: this.setHasHeader,\n setHasFooter: this.setHasFooter,\n setHasPanel: this.setHasPanel,\n };\n };\n\n private getWidth = () => {\n if (!this.layoutRef) {\n return 'auto';\n }\n return this.layoutRef.clientWidth;\n };\n\n private renderShadow(): JSX.Element {\n return (\n <ZIndex priority={'Sidepage'} className={styles.overlay()} onScroll={LayoutEvents.emit}>\n <HideBodyVerticalScroll key=\"hbvs\" />\n <div\n key=\"overlay\"\n className={cx({\n [styles.background()]: true,\n [styles.backgroundGray(this.theme)]: this.state.hasBackground,\n })}\n />\n </ZIndex>\n );\n }\n\n private getTransitionNames(): Record<string, string> {\n const transition = this.props.fromLeft ? styles.transitionRight : styles.transitionLeft;\n\n return {\n enter: transition(),\n enterActive: styles.transitionActive(),\n exit: styles.transitionLeave(),\n exitActive: styles.transitionLeaveActive(),\n appear: transition(),\n appearActive: styles.transitionActive(),\n };\n }\n\n private handleStackChange = (stack: ReadonlyArray<React.Component>) => {\n const sidePages = stack.filter((x) => x instanceof SidePage && x.props.fromLeft === this.props.fromLeft);\n const currentSidePagePosition = sidePages.indexOf(this);\n\n const hasMargin = sidePages.length > 1 && currentSidePagePosition === sidePages.length - 1;\n const hasShadow = sidePages.length < 3 || currentSidePagePosition > sidePages.length - 3;\n const hasBackground = ModalStack.isBlocking(this);\n\n this.setState({\n stackPosition: stack.indexOf(this),\n hasMargin,\n hasShadow,\n hasBackground,\n });\n };\n\n private handleClickOutside = (e: Event) => {\n if (this.state.stackPosition === 0 && !this.props.ignoreBackgroundClick) {\n // ignore mousedown on window scrollbar\n if (e instanceof MouseEvent && e.clientX > document.documentElement.clientWidth) {\n return;\n }\n this.requestClose();\n }\n };\n\n private handleKeyDown = (e: KeyboardEvent) => {\n if (this.state.stackPosition !== 0) {\n return;\n }\n if (isKeyEscape(e)) {\n stopPropagation(e);\n this.requestClose();\n }\n };\n\n private requestClose = () => {\n if (this.props.disableClose) {\n return;\n }\n if (this.props.onClose) {\n this.props.onClose();\n }\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private setHasHeader = (hasHeader = true) => {\n this.state.hasHeader !== hasHeader && this.setState({ hasHeader });\n };\n\n private setHasFooter = (hasFooter = true) => {\n this.state.hasFooter !== hasFooter && this.setState({ hasFooter });\n };\n\n private setHasPanel = (hasPanel = false) => {\n this.state.hasPanel !== hasPanel && this.setState({ hasPanel });\n };\n}\n"]}
@@ -92,11 +92,23 @@ export declare class SidePage extends React.Component<SidePageProps, SidePageSta
92
92
  render(): JSX.Element;
93
93
  private renderMain;
94
94
  /**
95
- * Добавить элемент, который будет учитывать FocusLock
95
+ * Добавить элемент, который будет учитываться при блокировке фокуса
96
96
  *
97
- * @param shard
97
+ * @public
98
+ * @param shard RefObject | HTMLElement
99
+ *
100
+ * @link https://github.com/theKashey/react-focus-lock#api shards
101
+ */
102
+ addFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
103
+ /**
104
+ * Удалить элемент, чтобы он не учитывался при блокировке фокуса
105
+ *
106
+ * @public
107
+ * @param shard RefObject | HTMLElement
108
+ *
109
+ * @link https://github.com/theKashey/react-focus-lock#api shards
98
110
  */
99
- addShard: (shard: React.RefObject<any> | HTMLElement) => void;
111
+ deleteFocusLockShard: (shard: React.RefObject<any> | HTMLElement) => void;
100
112
  private renderContainer;
101
113
  private disablePageScroll;
102
114
  private getSidePageContextProps;
@@ -38,6 +38,13 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
38
38
 
39
39
  var _proto = ZIndex.prototype;
40
40
 
41
+ _proto.componentDidUpdate = function componentDidUpdate(prevProps, prevState) {
42
+ if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {
43
+ this.zIndex = incrementZIndex(this.props.priority, this.props.delta);
44
+ this.forceUpdate();
45
+ }
46
+ };
47
+
41
48
  _proto.componentWillUnmount = function componentWillUnmount() {
42
49
  removeZIndex(this.zIndex);
43
50
  };
@@ -54,7 +61,8 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
54
61
  coverChildren = _this$props.coverChildren,
55
62
  createStackingContext = _this$props.createStackingContext,
56
63
  wrapperRef = _this$props.wrapperRef,
57
- props = _objectWithoutPropertiesLoose(_this$props, ["style", "children", "delta", "priority", "applyZIndex", "coverChildren", "createStackingContext", "wrapperRef"]);
64
+ onlyContext = _this$props.onlyContext,
65
+ props = _objectWithoutPropertiesLoose(_this$props, ["style", "children", "delta", "priority", "applyZIndex", "coverChildren", "createStackingContext", "wrapperRef", "onlyContext"]);
58
66
 
59
67
  var wrapperStyle = {};
60
68
  return /*#__PURE__*/React.createElement(ZIndexContext.Consumer, null, function (_ref) {
@@ -82,12 +90,13 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
82
90
  }
83
91
  }
84
92
 
85
- return /*#__PURE__*/React.createElement(ZIndexContext.Provider, {
86
- value: zIndexContexValue
87
- }, /*#__PURE__*/React.createElement("div", _extends({
93
+ var child = onlyContext ? children : /*#__PURE__*/React.createElement("div", _extends({
88
94
  style: _extends({}, style, wrapperStyle),
89
95
  ref: _this2.wrapperRef
90
- }, props), children));
96
+ }, props), children);
97
+ return /*#__PURE__*/React.createElement(ZIndexContext.Provider, {
98
+ value: zIndexContexValue
99
+ }, child);
91
100
  });
92
101
  };
93
102
 
@@ -111,7 +120,8 @@ export var ZIndex = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (
111
120
  style: {},
112
121
  applyZIndex: true,
113
122
  coverChildren: false,
114
- createStackingContext: false
123
+ createStackingContext: false,
124
+ onlyContext: false
115
125
  }, _class2.propTypes = {
116
126
  delta: function delta(props) {
117
127
  if (props.delta <= 0) {
@@ -1 +1 @@
1
- {"version":3,"sources":["ZIndex.tsx"],"names":["React","callChildRef","rootNode","isBrowser","incrementZIndex","removeZIndex","upperBorder","ZIndexContext","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","props","zIndex","setRootNode","wrapperRef","element","priority","delta","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","wrapperStyle","zIndexContexValue","newZIndex","calcZIndex","Number","isFinite","document","body","isolation","transform","allowedValuesIntervalLength","scale","Math","ceil","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isBrowser } from '../../lib/client';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta: number;\n priority: number | LayerComponentName;\n style: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n\n public static defaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n };\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if (props.delta <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private zIndex = 0;\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.zIndex = incrementZIndex(props.priority, props.delta);\n }\n\n public componentWillUnmount() {\n removeZIndex(this.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n ...props\n } = this.props;\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContexValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContexValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser && 'isolation' in document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n return (\n <ZIndexContext.Provider value={zIndexContexValue}>\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...props}>\n {children}\n </div>\n </ZIndexContext.Provider>\n );\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n}\n"]}
1
+ {"version":3,"sources":["ZIndex.tsx"],"names":["React","callChildRef","rootNode","isBrowser","incrementZIndex","removeZIndex","upperBorder","ZIndexContext","createContext","parentLayerZIndex","maxZIndex","Infinity","displayName","ZIndex","props","zIndex","setRootNode","wrapperRef","element","priority","delta","componentDidUpdate","prevProps","prevState","forceUpdate","componentWillUnmount","render","style","children","applyZIndex","coverChildren","createStackingContext","onlyContext","wrapperStyle","zIndexContexValue","newZIndex","calcZIndex","Number","isFinite","document","body","isolation","transform","child","allowedValuesIntervalLength","scale","Math","ceil","Component","__KONTUR_REACT_UI__","defaultProps","propTypes","Error","trunc"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { isBrowser } from '../../lib/client';\n\nimport { incrementZIndex, removeZIndex, upperBorder, LayerComponentName } from './ZIndexStorage';\n\nconst ZIndexContext = React.createContext({ parentLayerZIndex: 0, maxZIndex: Infinity });\n\nZIndexContext.displayName = 'ZIndexContext';\n\nexport interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Приращение к z-index\n */\n delta: number;\n priority: number | LayerComponentName;\n style: React.CSSProperties;\n createStackingContext?: boolean;\n coverChildren?: boolean;\n applyZIndex?: boolean;\n className?: string;\n wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;\n\n // Не добавлять обёртку, атрибуты и z-index\n onlyContext: boolean;\n}\n\n@rootNode\nexport class ZIndex extends React.Component<ZIndexProps> {\n public static __KONTUR_REACT_UI__ = 'ZIndex';\n\n public static defaultProps = {\n delta: 10,\n priority: 0,\n style: {},\n applyZIndex: true,\n coverChildren: false,\n createStackingContext: false,\n onlyContext: false,\n };\n\n public static propTypes = {\n delta(props: ZIndexProps) {\n if (props.delta <= 0) {\n return new Error(`[ZIndex]: Prop 'delta' must be greater than 0, received ${props.delta}`);\n }\n if (Math.trunc(props.delta) !== props.delta) {\n return new Error(`[ZIndex]: Prop 'delta' must be integer, received ${props.delta}`);\n }\n },\n };\n\n private zIndex = 0;\n\n private setRootNode!: TSetRootNode;\n\n constructor(props: ZIndexProps) {\n super(props);\n this.zIndex = incrementZIndex(props.priority, props.delta);\n }\n\n public componentDidUpdate(prevProps: Readonly<ZIndexProps>, prevState: Readonly<{}>) {\n if (prevProps.priority !== this.props.priority || prevProps.delta !== this.props.delta) {\n this.zIndex = incrementZIndex(this.props.priority, this.props.delta);\n this.forceUpdate();\n }\n }\n\n public componentWillUnmount() {\n removeZIndex(this.zIndex);\n }\n\n public render() {\n const {\n style,\n children,\n delta,\n priority,\n applyZIndex,\n coverChildren,\n createStackingContext,\n wrapperRef,\n onlyContext,\n ...props\n } = this.props;\n\n const wrapperStyle: React.CSSProperties = {};\n\n return (\n <ZIndexContext.Consumer>\n {({ parentLayerZIndex, maxZIndex }) => {\n let zIndexContexValue = { parentLayerZIndex, maxZIndex };\n\n if (applyZIndex) {\n const newZIndex = this.calcZIndex(parentLayerZIndex, maxZIndex);\n wrapperStyle.zIndex = newZIndex;\n\n zIndexContexValue = coverChildren\n ? { parentLayerZIndex, maxZIndex: newZIndex }\n : { parentLayerZIndex: newZIndex, maxZIndex: Number.isFinite(maxZIndex) ? newZIndex : Infinity };\n\n if (createStackingContext) {\n isBrowser && 'isolation' in document.body.style\n ? (wrapperStyle.isolation = 'isolate')\n : (wrapperStyle.transform = 'rotate(0)');\n }\n }\n\n const child = onlyContext ? (\n children\n ) : (\n <div style={{ ...style, ...wrapperStyle }} ref={this.wrapperRef} {...props}>\n {children}\n </div>\n );\n\n return <ZIndexContext.Provider value={zIndexContexValue}>{child}</ZIndexContext.Provider>;\n }}\n </ZIndexContext.Consumer>\n );\n }\n\n private wrapperRef = (element: HTMLDivElement | null) => {\n const { wrapperRef } = this.props;\n this.setRootNode(element);\n wrapperRef && callChildRef(wrapperRef, element);\n };\n\n private calcZIndex(parentLayerZIndex: number, maxZIndex: number) {\n let newZIndex = this.zIndex;\n\n if (Number.isFinite(maxZIndex)) {\n const allowedValuesIntervalLength = maxZIndex - parentLayerZIndex;\n const scale = upperBorder / allowedValuesIntervalLength;\n newZIndex = Math.ceil(newZIndex / scale);\n }\n\n newZIndex += parentLayerZIndex;\n\n return newZIndex;\n }\n}\n"]}
@@ -12,6 +12,7 @@ export interface ZIndexProps extends React.HTMLAttributes<HTMLDivElement> {
12
12
  applyZIndex?: boolean;
13
13
  className?: string;
14
14
  wrapperRef?: React.Ref<HTMLDivElement> | undefined | null;
15
+ onlyContext: boolean;
15
16
  }
16
17
  export declare class ZIndex extends React.Component<ZIndexProps> {
17
18
  static __KONTUR_REACT_UI__: string;
@@ -22,6 +23,7 @@ export declare class ZIndex extends React.Component<ZIndexProps> {
22
23
  applyZIndex: boolean;
23
24
  coverChildren: boolean;
24
25
  createStackingContext: boolean;
26
+ onlyContext: boolean;
25
27
  };
26
28
  static propTypes: {
27
29
  delta(props: ZIndexProps): Error | undefined;
@@ -29,6 +31,7 @@ export declare class ZIndex extends React.Component<ZIndexProps> {
29
31
  private zIndex;
30
32
  private setRootNode;
31
33
  constructor(props: ZIndexProps);
34
+ componentDidUpdate(prevProps: Readonly<ZIndexProps>, prevState: Readonly<{}>): void;
32
35
  componentWillUnmount(): void;
33
36
  render(): JSX.Element;
34
37
  private wrapperRef;
@@ -1 +1 @@
1
- {"version":3,"sources":["ModalStack.ts"],"names":["EventEmitter","ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\ninterface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n private static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = <T>(componentName: string) => {\n return (instance: React.Component): instance is React.Component<T> => {\n const { constructor } = instance;\n\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n };\n};\n\nconst isSidePage = isReactUIInstance<SidePageProps>('SidePage');\n\nconst isModal = isReactUIInstance<ModalProps>('Modal');\n"]}
1
+ {"version":3,"sources":["ModalStack.ts"],"names":["EventEmitter","ModalStack","add","component","onChange","getStackInfo","emitter","mounted","unshift","changeHandler","_token","addListener","emit","remove","removeListener","index","indexOf","splice","isBlocking","length","wantsToBlock","globalWithStack","global","__ReactUIStackInfo","isModal","isSidePage","deepestSidePages","filter","i","pop","props","blockBackground","isReactUIInstance","componentName","instance","constructor","Object","prototype","hasOwnProperty","call","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport EventEmitter from 'eventemitter3';\n\nimport { SidePageProps } from '../components/SidePage';\nimport { ModalProps } from '../components/Modal';\n\nexport interface StackInfo {\n emitter: EventEmitter;\n mounted: React.Component[];\n}\n\ninterface GlobalWithStackInfo {\n __ReactUIStackInfo?: StackInfo;\n}\n\nexport interface ModalStackSubscription {\n remove: () => void;\n}\n\nexport class ModalStack {\n public static add(\n component: React.Component,\n onChange: (stack: ReadonlyArray<React.Component>) => void,\n ): ModalStackSubscription {\n const { emitter, mounted } = ModalStack.getStackInfo();\n mounted.unshift(component);\n const changeHandler = () => onChange([...mounted]);\n const _token = emitter.addListener('change', changeHandler);\n emitter.emit('change');\n return {\n remove: () => {\n // Backwards compatible with versions 0.x and 1.w which using the fbemitter package\n if ('remove' in _token) {\n // @ts-ignore\n _token.remove();\n return;\n }\n\n emitter.removeListener('change', changeHandler);\n },\n };\n }\n\n public static remove(component: React.Component) {\n const { emitter, mounted } = ModalStack.getStackInfo();\n const index = mounted.indexOf(component);\n if (index !== -1) {\n mounted.splice(index, 1);\n }\n emitter.emit('change');\n }\n\n /**\n * Determines if stack component is allowed to block background\n */\n public static isBlocking(component: React.Component): boolean {\n const { mounted } = ModalStack.getStackInfo();\n for (let index = 0; index < mounted.length; index++) {\n if (ModalStack.wantsToBlock(mounted[index])) {\n // only the highest component in stack\n // that wants to block is allowed to do it\n return component === mounted[index];\n }\n }\n return false;\n }\n\n public static getStackInfo(): StackInfo {\n const globalWithStack = global as GlobalWithStackInfo;\n return (\n globalWithStack.__ReactUIStackInfo ||\n (globalWithStack.__ReactUIStackInfo = {\n emitter: new EventEmitter(),\n mounted: [],\n })\n );\n }\n\n private static wantsToBlock(component: React.Component): boolean {\n if (isModal(component)) {\n return true;\n }\n\n if (isSidePage(component)) {\n const { mounted } = ModalStack.getStackInfo();\n const deepestSidePages = mounted.filter((i) => isSidePage(i)).pop();\n return !!component.props.blockBackground && component === deepestSidePages;\n }\n\n return false;\n }\n}\n\n/**\n * Specific check for component type by its instance\n */\nconst isReactUIInstance = <T>(componentName: string) => {\n return (instance: React.Component): instance is React.Component<T> => {\n const { constructor } = instance;\n\n return (\n Object.prototype.hasOwnProperty.call(constructor, '__KONTUR_REACT_UI__') &&\n // @ts-ignore\n constructor.__KONTUR_REACT_UI__ === componentName\n );\n };\n};\n\nconst isSidePage = isReactUIInstance<SidePageProps>('SidePage');\n\nconst isModal = isReactUIInstance<ModalProps>('Modal');\n"]}
@@ -1,4 +1,9 @@
1
1
  import React from 'react';
2
+ import EventEmitter from 'eventemitter3';
3
+ export interface StackInfo {
4
+ emitter: EventEmitter;
5
+ mounted: React.Component[];
6
+ }
2
7
  export interface ModalStackSubscription {
3
8
  remove: () => void;
4
9
  }
@@ -9,6 +14,6 @@ export declare class ModalStack {
9
14
  * Determines if stack component is allowed to block background
10
15
  */
11
16
  static isBlocking(component: React.Component): boolean;
12
- private static getStackInfo;
17
+ static getStackInfo(): StackInfo;
13
18
  private static wantsToBlock;
14
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skbkontur/react-ui",
3
- "version": "3.11.0-csi.1",
3
+ "version": "3.11.0-csi.2",
4
4
  "description": "UI Components",
5
5
  "main": "cjs/index.js",
6
6
  "module": "index.js",
@@ -48,7 +48,6 @@
48
48
  "dependencies": {
49
49
  "@babel/runtime": "7.13.10",
50
50
  "@emotion/css": "^11.1.3",
51
- "@skbkontur/support-center-widget": "^0.4.2",
52
51
  "eventemitter3": "^4.0.7",
53
52
  "invariant": "2.2.4",
54
53
  "lodash.debounce": "^4.0.8",
Binary file