@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.
- package/cjs/components/Modal/Modal.d.ts +15 -3
- package/cjs/components/Modal/Modal.js +27 -5
- package/cjs/components/Modal/Modal.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +15 -3
- package/cjs/components/SidePage/SidePage.js +33 -6
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/internal/ZIndex/ZIndex.d.ts +3 -0
- package/cjs/internal/ZIndex/ZIndex.js +16 -2
- package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
- package/cjs/lib/ModalStack.d.ts +6 -1
- package/cjs/lib/ModalStack.js.map +1 -1
- package/components/Modal/Modal/Modal.js +20 -7
- package/components/Modal/Modal/Modal.js.map +1 -1
- package/components/Modal/Modal.d.ts +15 -3
- package/components/SidePage/SidePage/SidePage.js +21 -7
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +15 -3
- package/internal/ZIndex/ZIndex/ZIndex.js +16 -6
- package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
- package/internal/ZIndex/ZIndex.d.ts +3 -0
- package/lib/ModalStack/ModalStack.js.map +1 -1
- package/lib/ModalStack.d.ts +6 -1
- package/package.json +1 -2
- package/skbkontur-react-ui-3.11.0-csi.2.tgz +0 -0
- package/skbkontur-react-ui-3.11.0.tgz +0 -0
|
@@ -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
|
-
* Добавить элемент, который будет
|
|
78
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
79
79
|
*
|
|
80
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
239
|
-
|
|
240
|
-
|
|
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
|
-
* Добавить элемент, который будет
|
|
336
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
337
|
+
*
|
|
338
|
+
* @public
|
|
339
|
+
* @param shard RefObject | HTMLElement
|
|
318
340
|
*
|
|
319
|
-
* @
|
|
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
|
-
* Добавить элемент, который будет
|
|
95
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
96
96
|
*
|
|
97
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
* Добавить элемент, который будет
|
|
387
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
388
|
+
*
|
|
389
|
+
* @public
|
|
390
|
+
* @param shard RefObject | HTMLElement
|
|
364
391
|
*
|
|
365
|
-
* @
|
|
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":"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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":["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)';}}
|
|
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":"gcAAA;;AAEA;AACA;AACA;;AAEA,gD;;AAEA,IAAMA,aAAa,gBAAGC,eAAMC,aAAN,CAAoB,EAAEC,iBAAiB,EAAE,CAArB,EAAwBC,SAAS,EAAEC,QAAnC,EAApB,CAAtB;;AAEAL,aAAa,CAACM,WAAd,GAA4B,eAA5B,C
|
|
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"]}
|
package/cjs/lib/ModalStack.d.ts
CHANGED
|
@@ -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
|
-
|
|
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":";AACA,qE;;;;;;;;;;;;;;;;;;AAkBaA,U;AACGC,EAAAA,G,GAAd;AACEC,EAAAA,SADF;AAEEC,EAAAA,QAFF;AAG0B;AACKH,IAAAA,UAAU,CAACI,YAAX,EADL,CAChBC,OADgB,yBAChBA,OADgB,CACPC,OADO,yBACPA,OADO;AAExBA,IAAAA,OAAO,CAACC,OAAR,CAAgBL,SAAhB;AACA,QAAMM,aAAa,GAAG,SAAhBA,aAAgB,WAAML,QAAQ,WAAKG,OAAL,EAAd,EAAtB;AACA,QAAMG,MAAM,GAAGJ,OAAO,CAACK,WAAR,CAAoB,QAApB,EAA8BF,aAA9B,CAAf;AACAH,IAAAA,OAAO,CAACM,IAAR,CAAa,QAAb;AACA,WAAO;AACLC,MAAAA,MAAM,EAAE,kBAAM;AACZ;AACA,YAAI,YAAYH,MAAhB,EAAwB;AACtB;AACAA,UAAAA,MAAM,CAACG,MAAP;AACA;AACD;;AAEDP,QAAAA,OAAO,CAACQ,cAAR,CAAuB,QAAvB,EAAiCL,aAAjC;AACD,OAVI,EAAP;;AAYD,G;;AAEaI,EAAAA,M,GAAd,gBAAqBV,SAArB,EAAiD;AAClBF,IAAAA,UAAU,CAACI,YAAX,EADkB,CACvCC,OADuC,0BACvCA,OADuC,CAC9BC,OAD8B,0BAC9BA,OAD8B;AAE/C,QAAMQ,KAAK,GAAGR,OAAO,CAACS,OAAR,CAAgBb,SAAhB,CAAd;AACA,QAAIY,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChBR,MAAAA,OAAO,CAACU,MAAR,CAAeF,KAAf,EAAsB,CAAtB;AACD;AACDT,IAAAA,OAAO,CAACM,IAAR,CAAa,QAAb;AACD;;AAED;AACF;AACA,K;AACgBM,EAAAA,U,GAAd,oBAAyBf,SAAzB,EAA8D;AACxCF,IAAAA,UAAU,CAACI,YAAX,EADwC,CACpDE,OADoD,0BACpDA,OADoD;AAE5D,SAAK,IAAIQ,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGR,OAAO,CAACY,MAApC,EAA4CJ,KAAK,EAAjD,EAAqD;AACnD,UAAId,UAAU,CAACmB,YAAX,CAAwBb,OAAO,CAACQ,KAAD,CAA/B,CAAJ,EAA6C;AAC3C;AACA;AACA,eAAOZ,SAAS,KAAKI,OAAO,CAACQ,KAAD,CAA5B;AACD;AACF;AACD,WAAO,KAAP;AACD,G;;
|
|
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.
|
|
67
|
-
_this.shards.
|
|
66
|
+
_this.addFocusLockShard = function (shard) {
|
|
67
|
+
if (!_this.shards.has(shard)) {
|
|
68
|
+
_this.shards.add(shard);
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
* Добавить элемент, который будет
|
|
314
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
315
|
+
*
|
|
316
|
+
* @public
|
|
317
|
+
* @param shard RefObject | HTMLElement
|
|
305
318
|
*
|
|
306
|
-
* @
|
|
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
|
-
* Добавить элемент, который будет
|
|
78
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
79
79
|
*
|
|
80
|
-
* @
|
|
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
|
-
|
|
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.
|
|
66
|
-
_this.shards.
|
|
65
|
+
_this.addFocusLockShard = function (shard) {
|
|
66
|
+
if (!_this.shards.has(shard)) {
|
|
67
|
+
_this.shards.add(shard);
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
* Добавить элемент, который будет
|
|
261
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
262
|
+
*
|
|
263
|
+
* @public
|
|
264
|
+
* @param shard RefObject | HTMLElement
|
|
252
265
|
*
|
|
253
|
-
* @
|
|
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":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FSC,IAAAA,QA/FT,GA+FoB,UAACC,KAAD,EAA+C;AAC/D,YAAKX,MAAL,CAAYY,GAAZ,CAAgBD,KAAhB;AACA,YAAKE,QAAL,CAAc,EAACb,MAAM,YAAMc,KAAK,CAACC,IAAN,CAAW,MAAKf,MAAL,CAAYgB,MAAZ,EAAX,CAAN,CAAP,EAAd;AACD,KAlGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6IUC,IAAAA,iBA7IV,GA6I8B,UAACC,CAAD,EAAmB;AAC7C,UAAMC,MAAM,GAAG,MAAKhB,SAApB;AACA,UAAI,CAACgB,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,KAtJH;;AAwJUC,IAAAA,uBAxJV,GAwJoC,YAA2B;AAC3D,aAAO;AACLhC,QAAAA,SAAS,EAAE,MAAKD,KAAL,CAAWC,SADjB;AAELC,QAAAA,SAAS,EAAE,MAAKF,KAAL,CAAWE,SAFjB;AAGLC,QAAAA,QAAQ,EAAE,MAAKH,KAAL,CAAWG,QAHhB;AAIL+B,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,KArKH;;AAuKUJ,IAAAA,QAvKV,GAuKqB,YAAM;AACvB,UAAI,CAAC,MAAK5B,SAAV,EAAqB;AACnB,eAAO,MAAP;AACD;AACD,aAAO,MAAKA,SAAL,CAAeiC,WAAtB;AACD,KA5KH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0MUC,IAAAA,iBA1MV,GA0M8B,UAACC,KAAD,EAA2C;AACrE,UAAMC,SAAS,GAAGD,KAAK,CAACE,MAAN,CAAa,UAACC,CAAD,UAAOA,CAAC,YAAY9C,QAAb,IAAyB8C,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,GAAGpE,UAAU,CAACqE,UAAX,+BAAtB;;AAEA,YAAKpC,QAAL,CAAc;AACZqC,QAAAA,aAAa,EAAEZ,KAAK,CAACM,OAAN,+BADH;AAEZC,QAAAA,SAAS,EAATA,SAFY;AAGZE,QAAAA,SAAS,EAATA,SAHY;AAIZC,QAAAA,aAAa,EAAbA,aAJY,EAAd;;AAMD,KAxNH;;AA0NUG,IAAAA,kBA1NV,GA0N+B,UAACjC,CAAD,EAAc;AACzC,UAAI,MAAKtB,KAAL,CAAWsD,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,KAlOH;;AAoOU2B,IAAAA,aApOV,GAoO0B,UAACvC,CAAD,EAAsB;AAC5C,UAAI,MAAKtB,KAAL,CAAWsD,aAAX,KAA6B,CAAjC,EAAoC;AAClC;AACD;AACD,UAAI1E,WAAW,CAAC0C,CAAD,CAAf,EAAoB;AAClBxC,QAAAA,eAAe,CAACwC,CAAD,CAAf;AACA,cAAKY,YAAL;AACD;AACF,KA5OH;;AA8OUA,IAAAA,YA9OV,GA8OyB,YAAM;AAC3B,UAAI,MAAKJ,KAAL,CAAWgC,YAAf,EAA6B;AAC3B;AACD;AACD,UAAI,MAAKhC,KAAL,CAAWiC,OAAf,EAAwB;AACtB,cAAKjC,KAAL,CAAWiC,OAAX;AACD;AACF,KArPH;;AAuPU3B,IAAAA,SAvPV,GAuPsB,UAAC4B,GAAD,EAAgC;AAClD,YAAKxD,MAAL,GAAcwD,GAAd;AACD,KAzPH;;AA2PU3B,IAAAA,YA3PV,GA2PyB,UAACpC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKD,KAAL,CAAWC,SAAX,KAAyBA,SAAzB,IAAsC,MAAKgB,QAAL,CAAc,EAAEhB,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,KA7PH;;AA+PUqC,IAAAA,YA/PV,GA+PyB,UAACpC,SAAD,EAAsB,KAArBA,SAAqB,cAArBA,SAAqB,GAAT,IAAS;AAC3C,YAAKF,KAAL,CAAWE,SAAX,KAAyBA,SAAzB,IAAsC,MAAKe,QAAL,CAAc,EAAEf,SAAS,EAATA,SAAF,EAAd,CAAtC;AACD,KAjQH;;AAmQUqC,IAAAA,WAnQV,GAmQwB,UAACpC,QAAD,EAAsB,KAArBA,QAAqB,cAArBA,QAAqB,GAAV,KAAU;AAC1C,YAAKH,KAAL,CAAWG,QAAX,KAAwBA,QAAxB,IAAoC,MAAKc,QAAL,CAAc,EAAEd,QAAQ,EAARA,QAAF,EAAd,CAApC;AACD,KArQH,sDAoBS8D,iBApBT,GAoBE,6BAA2B,2BACzBC,MAAM,CAACC,gBAAP,CAAwB,SAAxB,EAAmC,KAAKN,aAAxC,EACA,8BAAKpD,OAAL,CAAa2D,OAAb,2CAAsBD,gBAAtB,CAAuC,OAAvC,EAAgD,KAAK9C,iBAArD,EAAwE,EAAEgD,OAAO,EAAE,KAAX,EAAxE,EACA,KAAK/D,iBAAL,GAAyBtB,UAAU,CAACgC,GAAX,CAAe,IAAf,EAAqB,KAAKyB,iBAA1B,CAAzB,CACD,CAxBH,QA0BS6B,oBA1BT,GA0BE,gCAA8B,4BAC5BJ,MAAM,CAACK,mBAAP,CAA2B,SAA3B,EAAsC,KAAKV,aAA3C,EACA,+BAAKpD,OAAL,CAAa2D,OAAb,4CAAsBG,mBAAtB,CAA0C,OAA1C,EAAmD,KAAKlD,iBAAxD,EACA,IAAI,KAAKf,iBAAL,IAA0B,IAA9B,EAAoC,CAClC,KAAKA,iBAAL,CAAuBkE,MAAvB,GACD,CACDxF,UAAU,CAACwF,MAAX,CAAkB,IAAlB,EACD,CAjCH,CAmCE;AACF;AACA;AACA,KAtCA,QAmDSC,MAnDT,GAmDE,kBAA6B,mBAC3B,oBACE,oBAAC,YAAD,CAAc,QAAd,QACG,UAACpE,KAAD,EAAW,CACV,MAAI,CAACA,KAAL,GAAaA,KAAb,CACA,OAAO,MAAI,CAACqE,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,EAAEhF,kBADA,EAEPiF,IAAI,EAAEjF,kBAFC,EANX,EAUE,OAAO,EAAE,KAAKW,OAVhB,IAYG,KAAKuE,eAAL,EAZH,CAFF,CADF,CADF,CADF,CAuBD,CAxFH,CA0FE;AACF;AACA;AACA;AACA,KA9FA,QAoGUA,eApGV,GAoGE,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,EAAE7F,EAAE,gBACVO,MAAM,CAACuF,IAAP,EADU,IACM,IADN,OAHf,EAME,QAAQ,EAAEvG,YAAY,CAACwG,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,KAAK1E,OAbnB,iBAeE,oBAAC,SAAD,IAAW,QAAQ,EAAEyE,gBAAgB,IAAI,CAACnD,eAA1C,EAA2D,SAAS,EAAE,KAAtE,EAA6E,SAAS,EAAElC,MAAM,CAAC2F,SAAP,EAAxF,iBACE,oBAAC,WAAD,IAAa,cAAc,EAAE,KAAKjC,kBAAlC,EAAsD,MAAM,MAA5D,iBACE,6BACE,YAAS,qBADX,EAEE,SAAS,EAAEjE,EAAE,CAACO,MAAM,CAAC4F,OAAP,CAAe,KAAKpF,KAApB,CAAD,mBACVR,MAAM,CAAC6F,WAAP,EADU,IACa5C,QADb,OAEVjD,MAAM,CAAC8F,iBAAP,EAFU,IAEmB,KAAK3F,KAAL,CAAWiD,SAAX,IAAwBH,QAF3C,OAGVjD,MAAM,CAAC+F,kBAAP,EAHU,IAGoB,KAAK5F,KAAL,CAAWiD,SAAX,IAAwB,CAACH,QAH7C,OAIVjD,MAAM,CAACgG,MAAP,CAAc,KAAKxF,KAAnB,CAJU,IAIkB,KAAKL,KAAL,CAAWmD,SAJ7B,QAFf,EAQE,GAAG,EAAE,aAAC2C,CAAD,UAAQ,MAAI,CAACvF,SAAL,GAAiBuF,CAAzB,EARP,iBAUE,oBAAC,eAAD,CAAiB,QAAjB,IAA0B,KAAK,EAAE,KAAK7D,uBAAL,EAAjC,IACG,KAAKH,KAAL,CAAWiE,QADd,CAVF,CADF,CADF,CAfF,CADF,CAoCD,CA3IH,QA8KUnB,YA9KV,GA8KE,wBAAoC,UAClC,oBACE,oBAAC,MAAD,IAAQ,QAAQ,EAAE,UAAlB,EAA8B,SAAS,EAAE/E,MAAM,CAACmG,OAAP,EAAzC,EAA2D,QAAQ,EAAEnH,YAAY,CAACwG,IAAlF,iBACE,oBAAC,sBAAD,IAAwB,GAAG,EAAC,MAA5B,GADF,eAEE,6BACE,GAAG,EAAC,SADN,EAEE,SAAS,EAAE/F,EAAE,kBACVO,MAAM,CAACoG,UAAP,EADU,IACY,IADZ,OAEVpG,MAAM,CAACqG,cAAP,CAAsB,KAAK7F,KAA3B,CAFU,IAE0B,KAAKL,KAAL,CAAWoD,aAFrC,QAFf,GAFF,CADF,CAYD,CA3LH,QA6LUyB,kBA7LV,GA6LE,8BAAqD,CACnD,IAAMsB,UAAU,GAAG,KAAKrE,KAAL,CAAWgB,QAAX,GAAsBjD,MAAM,CAACuG,eAA7B,GAA+CvG,MAAM,CAACwG,cAAzE,CAEA,OAAO,EACLvB,KAAK,EAAEqB,UAAU,EADZ,EAELG,WAAW,EAAEzG,MAAM,CAAC0G,gBAAP,EAFR,EAGLxB,IAAI,EAAElF,MAAM,CAAC2G,eAAP,EAHD,EAILC,UAAU,EAAE5G,MAAM,CAAC6G,qBAAP,EAJP,EAKLC,MAAM,EAAER,UAAU,EALb,EAMLS,YAAY,EAAE/G,MAAM,CAAC0G,gBAAP,EANT,EAAP,CAQD,CAxMH,mBAA8B9H,KAAK,CAACoI,SAApC,EAAa9G,Q,CACG+G,mB,GAAsB,U,CADzB/G,Q,CAGGgH,M,GAASnH,c,CAHZG,Q,CAIGiH,I,GAAOxH,Y,CAJVO,Q,CAKGkH,M,GAAStH,c,CALZI,Q,CAMGmH,S,GAAYzH,iB,CANfM,Q,CA6CGoH,Y,GAAe,EAC3BxC,iBAAiB,EAAEpF,SADQ,EAE3B2F,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":["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":"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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"]}
|
|
@@ -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
|
-
* Добавить элемент, который будет
|
|
95
|
+
* Добавить элемент, который будет учитываться при блокировке фокуса
|
|
96
96
|
*
|
|
97
|
-
* @
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"+PAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA,SAASC,YAAT,QAA6B,qCAA7B;AACA,SAASC,QAAT,QAAuC,oBAAvC;AACA,SAASC,SAAT,QAA0B,kBAA1B;;AAEA,SAASC,eAAT,EAA0BC,YAA1B,EAAwCC,WAAxC,QAA+E,iBAA/E;;AAEA,IAAMC,aAAa,gBAAGP,KAAK,CAACQ,aAAN,CAAoB,EAAEC,iBAAiB,EAAE,CAArB,EAAwBC,SAAS,EAAEC,QAAnC,EAApB,CAAtB;;AAEAJ,aAAa,CAACK,WAAd,GAA4B,eAA5B
|
|
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":";AACA,OAAOA,YAAP,MAAyB,eAAzB;;;;;;;;;;;;;;;;;;AAkBA,WAAaC,UAAb;AACgBC,EAAAA,GADhB,GACE;AACEC,EAAAA,SADF;AAEEC,EAAAA,QAFF;AAG0B;AACKH,IAAAA,UAAU,CAACI,YAAX,EADL,CAChBC,OADgB,yBAChBA,OADgB,CACPC,OADO,yBACPA,OADO;AAExBA,IAAAA,OAAO,CAACC,OAAR,CAAgBL,SAAhB;AACA,QAAMM,aAAa,GAAG,SAAhBA,aAAgB,WAAML,QAAQ,WAAKG,OAAL,EAAd,EAAtB;AACA,QAAMG,MAAM,GAAGJ,OAAO,CAACK,WAAR,CAAoB,QAApB,EAA8BF,aAA9B,CAAf;AACAH,IAAAA,OAAO,CAACM,IAAR,CAAa,QAAb;AACA,WAAO;AACLC,MAAAA,MAAM,EAAE,kBAAM;AACZ;AACA,YAAI,YAAYH,MAAhB,EAAwB;AACtB;AACAA,UAAAA,MAAM,CAACG,MAAP;AACA;AACD;;AAEDP,QAAAA,OAAO,CAACQ,cAAR,CAAuB,QAAvB,EAAiCL,aAAjC;AACD,OAVI,EAAP;;AAYD,GAtBH;;AAwBgBI,EAAAA,MAxBhB,GAwBE,gBAAqBV,SAArB,EAAiD;AAClBF,IAAAA,UAAU,CAACI,YAAX,EADkB,CACvCC,OADuC,0BACvCA,OADuC,CAC9BC,OAD8B,0BAC9BA,OAD8B;AAE/C,QAAMQ,KAAK,GAAGR,OAAO,CAACS,OAAR,CAAgBb,SAAhB,CAAd;AACA,QAAIY,KAAK,KAAK,CAAC,CAAf,EAAkB;AAChBR,MAAAA,OAAO,CAACU,MAAR,CAAeF,KAAf,EAAsB,CAAtB;AACD;AACDT,IAAAA,OAAO,CAACM,IAAR,CAAa,QAAb;AACD;;AAED;AACF;AACA,KAnCA;AAoCgBM,EAAAA,UApChB,GAoCE,oBAAyBf,SAAzB,EAA8D;AACxCF,IAAAA,UAAU,CAACI,YAAX,EADwC,CACpDE,OADoD,0BACpDA,OADoD;AAE5D,SAAK,IAAIQ,KAAK,GAAG,CAAjB,EAAoBA,KAAK,GAAGR,OAAO,CAACY,MAApC,EAA4CJ,KAAK,EAAjD,EAAqD;AACnD,UAAId,UAAU,CAACmB,YAAX,CAAwBb,OAAO,CAACQ,KAAD,CAA/B,CAAJ,EAA6C;AAC3C;AACA;AACA,eAAOZ,SAAS,KAAKI,OAAO,CAACQ,KAAD,CAA5B;AACD;AACF;AACD,WAAO,KAAP;AACD,GA9CH;;
|
|
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"]}
|
package/lib/ModalStack.d.ts
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
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
|
|
Binary file
|