@skbkontur/react-ui 3.11.0-select-right-2 → 3.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/LICENSE +21 -21
- package/cjs/components/CurrencyLabel/CurrencyLabel.md +23 -23
- package/cjs/components/Gapped/Gapped.md +43 -43
- package/cjs/components/Input/Input.md +13 -13
- package/cjs/components/PasswordInput/PasswordInput.md +9 -9
- package/cjs/components/RadioGroup/RadioGroup.md +43 -43
- package/cjs/components/Select/Select.js +2 -1
- package/cjs/components/Select/Select.js.map +1 -1
- package/cjs/components/SidePage/SidePage.d.ts +4 -1
- package/cjs/components/SidePage/SidePage.js +18 -9
- package/cjs/components/SidePage/SidePage.js.map +1 -1
- package/cjs/components/SidePage/SidePageContext.d.ts +2 -0
- package/cjs/components/SidePage/SidePageContext.js +3 -0
- package/cjs/components/SidePage/SidePageContext.js.map +1 -1
- package/cjs/components/SidePage/SidePageHeader.d.ts +3 -0
- package/cjs/components/SidePage/SidePageHeader.js +26 -8
- package/cjs/components/SidePage/SidePageHeader.js.map +1 -1
- package/cjs/components/Sticky/Sticky.d.ts +6 -1
- package/cjs/components/Sticky/Sticky.js +5 -0
- package/cjs/components/Sticky/Sticky.js.map +1 -1
- package/cjs/components/Token/Token.md +112 -112
- package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js +1 -1
- package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
- package/cjs/internal/Menu/Menu.js +29 -23
- package/cjs/internal/Menu/Menu.js.map +1 -1
- package/cjs/internal/Menu/Menu.styles.d.ts +1 -1
- package/cjs/internal/Menu/Menu.styles.js +3 -2
- package/cjs/internal/Menu/Menu.styles.js.map +1 -1
- package/cjs/internal/Popup/Popup.js +3 -1
- package/cjs/internal/Popup/Popup.js.map +1 -1
- package/cjs/internal/ThemeShowcase/ThemeShowcase.md +13 -13
- package/components/CurrencyLabel/CurrencyLabel.md +23 -23
- package/components/Gapped/Gapped.md +43 -43
- package/components/Input/Input.md +13 -13
- package/components/PasswordInput/PasswordInput.md +9 -9
- package/components/RadioGroup/RadioGroup.md +43 -43
- package/components/Select/Select/Select.js +2 -1
- package/components/Select/Select/Select.js.map +1 -1
- package/components/SidePage/SidePage/SidePage.js +20 -13
- package/components/SidePage/SidePage/SidePage.js.map +1 -1
- package/components/SidePage/SidePage.d.ts +4 -1
- package/components/SidePage/SidePageContext/SidePageContext.js +3 -0
- package/components/SidePage/SidePageContext/SidePageContext.js.map +1 -1
- package/components/SidePage/SidePageContext.d.ts +2 -0
- package/components/SidePage/SidePageHeader/SidePageHeader.js +21 -2
- package/components/SidePage/SidePageHeader/SidePageHeader.js.map +1 -1
- package/components/SidePage/SidePageHeader.d.ts +3 -0
- package/components/Sticky/Sticky/Sticky.js.map +1 -1
- package/components/Sticky/Sticky.d.ts +6 -1
- package/components/Token/Token.md +112 -112
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +1 -1
- package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
- package/internal/DropdownContainer/DropdownContainer.d.ts +1 -1
- package/internal/Menu/Menu/Menu.js +28 -13
- package/internal/Menu/Menu/Menu.js.map +1 -1
- package/internal/Menu/Menu.styles/Menu.styles.js +2 -2
- package/internal/Menu/Menu.styles/Menu.styles.js.map +1 -1
- package/internal/Menu/Menu.styles.d.ts +1 -1
- package/internal/Popup/Popup/Popup.js +2 -1
- package/internal/Popup/Popup/Popup.js.map +1 -1
- package/internal/ThemeShowcase/ThemeShowcase.md +13 -13
- package/package.json +6 -2
|
@@ -108,7 +108,8 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
108
108
|
|
|
109
109
|
theme = void 0;_this.
|
|
110
110
|
stackSubscription = null;_this.
|
|
111
|
-
|
|
111
|
+
layout = null;_this.
|
|
112
|
+
header = null;_this.
|
|
112
113
|
footer = null;_this.
|
|
113
114
|
rootRef = /*#__PURE__*/_react.default.createRef();_this.
|
|
114
115
|
|
|
@@ -131,10 +132,9 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
131
132
|
|
|
132
133
|
|
|
133
134
|
|
|
134
|
-
updateLayout = function () {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
135
|
+
updateLayout = function () {var _this$header, _this$footer;
|
|
136
|
+
(_this$header = _this.header) == null ? void 0 : _this$header.update();
|
|
137
|
+
(_this$footer = _this.footer) == null ? void 0 : _this$footer.update();
|
|
138
138
|
};_this.
|
|
139
139
|
|
|
140
140
|
|
|
@@ -224,7 +224,7 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
224
224
|
|
|
225
225
|
|
|
226
226
|
disablePageScroll = function (e) {
|
|
227
|
-
var layout = _this.
|
|
227
|
+
var layout = _this.layout;
|
|
228
228
|
if (!layout) return;
|
|
229
229
|
var reachedTop = layout.scrollTop <= 0 && e.deltaY < 0;
|
|
230
230
|
var reachedBottom = layout.scrollTop >= layout.scrollHeight - layout.offsetHeight && e.deltaY > 0;
|
|
@@ -242,6 +242,7 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
242
242
|
requestClose: _this.requestClose,
|
|
243
243
|
getWidth: _this.getWidth,
|
|
244
244
|
updateLayout: _this.updateLayout,
|
|
245
|
+
headerRef: _this.headerRef,
|
|
245
246
|
footerRef: _this.footerRef,
|
|
246
247
|
setHasHeader: _this.setHasHeader,
|
|
247
248
|
setHasFooter: _this.setHasFooter,
|
|
@@ -250,10 +251,10 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
250
251
|
};_this.
|
|
251
252
|
|
|
252
253
|
getWidth = function () {
|
|
253
|
-
if (!_this.
|
|
254
|
+
if (!_this.layout) {
|
|
254
255
|
return 'auto';
|
|
255
256
|
}
|
|
256
|
-
return _this.
|
|
257
|
+
return _this.layout.clientWidth;
|
|
257
258
|
};_this.
|
|
258
259
|
|
|
259
260
|
|
|
@@ -329,10 +330,18 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
329
330
|
}
|
|
330
331
|
};_this.
|
|
331
332
|
|
|
333
|
+
headerRef = function (ref) {
|
|
334
|
+
_this.header = ref;
|
|
335
|
+
};_this.
|
|
336
|
+
|
|
332
337
|
footerRef = function (ref) {
|
|
333
338
|
_this.footer = ref;
|
|
334
339
|
};_this.
|
|
335
340
|
|
|
341
|
+
layoutRef = function (ref) {
|
|
342
|
+
_this.layout = ref;
|
|
343
|
+
};_this.
|
|
344
|
+
|
|
336
345
|
setHasHeader = function (hasHeader) {if (hasHeader === void 0) {hasHeader = true;}
|
|
337
346
|
_this.state.hasHeader !== hasHeader && _this.setState({ hasHeader: hasHeader });
|
|
338
347
|
};_this.
|
|
@@ -346,4 +355,4 @@ SidePage = /*#__PURE__*/function (_React$Component) {(0, _inheritsLoose2.default
|
|
|
346
355
|
};return _this;}var _proto = SidePage.prototype;_proto.componentDidMount = function componentDidMount() {var _this$rootRef$current;window.addEventListener('keydown', this.handleKeyDown);(_this$rootRef$current = this.rootRef.current) == null ? void 0 : _this$rootRef$current.addEventListener('wheel', this.disablePageScroll, { passive: false });this.stackSubscription = _ModalStack.ModalStack.add(this, this.handleStackChange);};_proto.componentWillUnmount = function componentWillUnmount() {var _this$rootRef$current2;window.removeEventListener('keydown', this.handleKeyDown);(_this$rootRef$current2 = this.rootRef.current) == null ? void 0 : _this$rootRef$current2.removeEventListener('wheel', this.disablePageScroll);if (this.stackSubscription != null) {this.stackSubscription.remove();}_ModalStack.ModalStack.remove(this);} /**
|
|
347
356
|
* Обновляет разметку компонента.
|
|
348
357
|
* @public
|
|
349
|
-
*/;_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()))));};_proto.renderContainer = function renderContainer() {var _cx,_cx2
|
|
358
|
+
*/;_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()))));};_proto.renderContainer = function renderContainer() {var _cx, _cx2;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: this.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","theme","stackSubscription","layoutRef","footer","rootRef","React","createRef","updateLayout","update","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","setState","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","componentDidMount","window","addEventListener","current","passive","add","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}\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 };\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\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 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","theme","stackSubscription","layout","header","footer","rootRef","React","createRef","updateLayout","update","disablePageScroll","e","reachedTop","scrollTop","deltaY","reachedBottom","scrollHeight","offsetHeight","props","blockBackground","preventDefault","getSidePageContextProps","requestClose","getWidth","headerRef","footerRef","setHasHeader","setHasFooter","setHasPanel","clientWidth","handleStackChange","stack","sidePages","filter","x","fromLeft","currentSidePagePosition","indexOf","hasMargin","length","hasShadow","hasBackground","ModalStack","isBlocking","setState","stackPosition","handleClickOutside","ignoreBackgroundClick","MouseEvent","clientX","document","documentElement","handleKeyDown","disableClose","onClose","ref","layoutRef","componentDidMount","window","addEventListener","current","passive","add","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}\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 };\n private theme!: Theme;\n private stackSubscription: ModalStackSubscription | null = null;\n private layout: HTMLElement | null = null;\n private header: SidePageHeader | null = null;\n private footer: SidePageFooter | null = null;\n private rootRef = React.createRef<HTMLDivElement>();\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 this.header?.update();\n this.footer?.update();\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 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.layout;\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 headerRef: this.headerRef,\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.layout) {\n return 'auto';\n }\n return this.layout.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 headerRef = (ref: SidePageHeader | null) => {\n this.header = ref;\n };\n\n private footerRef = (ref: SidePageFooter | null) => {\n this.footer = ref;\n };\n\n private layoutRef = (ref: HTMLDivElement | null) => {\n this.layout = 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,9 +1,11 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { SidePageFooter } from './SidePageFooter';
|
|
3
|
+
import { SidePageHeader } from './SidePageHeader';
|
|
3
4
|
export interface SidePageContextType {
|
|
4
5
|
requestClose: () => void;
|
|
5
6
|
getWidth: () => number | string;
|
|
6
7
|
updateLayout: () => void;
|
|
8
|
+
headerRef: (ref: SidePageHeader | null) => void;
|
|
7
9
|
footerRef: (ref: SidePageFooter | null) => void;
|
|
8
10
|
hasHeader?: boolean;
|
|
9
11
|
hasFooter?: boolean;
|
|
@@ -15,10 +15,13 @@
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
|
|
19
|
+
|
|
18
20
|
var SidePageContext = /*#__PURE__*/_react.default.createContext({
|
|
19
21
|
requestClose: function requestClose() {return undefined;},
|
|
20
22
|
getWidth: function getWidth() {return 'auto';},
|
|
21
23
|
updateLayout: function updateLayout() {return undefined;},
|
|
24
|
+
headerRef: function headerRef() {return undefined;},
|
|
22
25
|
footerRef: function footerRef() {return undefined;} });exports.SidePageContext = SidePageContext;
|
|
23
26
|
|
|
24
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePageContext.ts"],"names":["SidePageContext","React","createContext","requestClose","undefined","getWidth","updateLayout","footerRef","displayName"],"mappings":"6JAAA
|
|
1
|
+
{"version":3,"sources":["SidePageContext.ts"],"names":["SidePageContext","React","createContext","requestClose","undefined","getWidth","updateLayout","headerRef","footerRef","displayName"],"mappings":"6JAAA;;;;;;;;;;;;;;;;;;;AAmBO,IAAMA,eAAe,gBAAGC,eAAMC,aAAN,CAAyC;AACtEC,EAAAA,YAAY,EAAE,gCAAMC,SAAN,EADwD;AAEtEC,EAAAA,QAAQ,EAAE,4BAAM,MAAN,EAF4D;AAGtEC,EAAAA,YAAY,EAAE,gCAAMF,SAAN,EAHwD;AAItEG,EAAAA,SAAS,EAAE,6BAAMH,SAAN,EAJ2D;AAKtEI,EAAAA,SAAS,EAAE,6BAAMJ,SAAN,EAL2D,EAAzC,CAAxB,C;;;AAQPJ,eAAe,CAACS,WAAhB,GAA8B,iBAA9B","sourcesContent":["import React from 'react';\n\nimport { SidePageFooter } from './SidePageFooter';\nimport { SidePageHeader } from './SidePageHeader';\n\nexport interface SidePageContextType {\n requestClose: () => void;\n getWidth: () => number | string;\n updateLayout: () => void;\n headerRef: (ref: SidePageHeader | null) => void;\n footerRef: (ref: SidePageFooter | null) => void;\n hasHeader?: boolean;\n hasFooter?: boolean;\n hasPanel?: boolean;\n setHasHeader?: (value?: boolean) => void;\n setHasFooter?: (value?: boolean) => void;\n setHasPanel?: (value?: boolean) => void;\n}\n\nexport const SidePageContext = React.createContext<SidePageContextType>({\n requestClose: () => undefined,\n getWidth: () => 'auto',\n updateLayout: () => undefined,\n headerRef: () => undefined,\n footerRef: () => undefined,\n});\n\nSidePageContext.displayName = 'SidePageContext';\n"]}
|
|
@@ -23,6 +23,7 @@ export declare class SidePageHeader extends React.Component<SidePageHeaderProps,
|
|
|
23
23
|
};
|
|
24
24
|
private theme;
|
|
25
25
|
private wrapper;
|
|
26
|
+
private sticky;
|
|
26
27
|
private lastRegularHeight;
|
|
27
28
|
private setRootNode;
|
|
28
29
|
get regularHeight(): number;
|
|
@@ -34,8 +35,10 @@ export declare class SidePageHeader extends React.Component<SidePageHeaderProps,
|
|
|
34
35
|
private renderMain;
|
|
35
36
|
private renderHeader;
|
|
36
37
|
private renderClose;
|
|
38
|
+
private closeIcon;
|
|
37
39
|
private updateReadyToFix;
|
|
38
40
|
private wrapperRef;
|
|
41
|
+
private stickyRef;
|
|
39
42
|
private handleFocus;
|
|
40
43
|
private handleBlur;
|
|
41
44
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.SidePageHeader = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.SidePageHeader = void 0;var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));var _react = _interopRequireDefault(require("react"));
|
|
2
2
|
|
|
3
3
|
var _Sticky = require("../Sticky");
|
|
4
4
|
var _CrossIcon = require("../../internal/icons/CrossIcon");
|
|
@@ -41,6 +41,7 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
41
41
|
|
|
42
42
|
theme = void 0;_this.
|
|
43
43
|
wrapper = null;_this.
|
|
44
|
+
sticky = null;_this.
|
|
44
45
|
lastRegularHeight = 0;_this.
|
|
45
46
|
setRootNode = void 0;_this.
|
|
46
47
|
|
|
@@ -63,14 +64,17 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
63
64
|
componentDidMount = function () {
|
|
64
65
|
window.addEventListener('scroll', _this.update, true);
|
|
65
66
|
_this.context.setHasHeader == null ? void 0 : _this.context.setHasHeader();
|
|
67
|
+
_this.context.headerRef((0, _assertThisInitialized2.default)(_this));
|
|
66
68
|
};_this.
|
|
67
69
|
|
|
68
70
|
componentWillUnmount = function () {
|
|
69
71
|
window.removeEventListener('scroll', _this.update, true);
|
|
70
72
|
_this.context.setHasHeader == null ? void 0 : _this.context.setHasHeader(false);
|
|
73
|
+
_this.context.headerRef(null);
|
|
71
74
|
};_this.
|
|
72
75
|
|
|
73
|
-
update = function () {
|
|
76
|
+
update = function () {var _this$sticky;
|
|
77
|
+
(_this$sticky = _this.sticky) == null ? void 0 : _this$sticky.reflow();
|
|
74
78
|
_this.updateReadyToFix();
|
|
75
79
|
};_this.
|
|
76
80
|
|
|
@@ -89,6 +93,12 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
89
93
|
|
|
90
94
|
|
|
91
95
|
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
92
102
|
|
|
93
103
|
|
|
94
104
|
|
|
@@ -112,7 +122,14 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
112
122
|
|
|
113
123
|
return /*#__PURE__*/(
|
|
114
124
|
_react.default.createElement("div", { className: (0, _Emotion.cx)(_SidePage.styles.wrapperClose(_this.theme), fixed && _SidePage.styles.fixed(_this.theme)) }, /*#__PURE__*/
|
|
115
|
-
_react.default.createElement(_Sticky.Sticky, { side: "top", offset: stickyOffset },
|
|
125
|
+
_react.default.createElement(_Sticky.Sticky, { side: "top", offset: stickyOffset },
|
|
126
|
+
_this.closeIcon)));
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
};_this.
|
|
131
|
+
|
|
132
|
+
closeIcon = function () {return /*#__PURE__*/(
|
|
116
133
|
_react.default.createElement(_SidePageContext.SidePageContext.Consumer, null,
|
|
117
134
|
function (_ref) {var _cx3;var requestClose = _ref.requestClose;return /*#__PURE__*/(
|
|
118
135
|
_react.default.createElement("button", {
|
|
@@ -125,15 +142,12 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
125
142
|
"data-tid": "SidePage__close",
|
|
126
143
|
tabIndex: 0 }, /*#__PURE__*/
|
|
127
144
|
|
|
128
|
-
_react.default.createElement(_CrossIcon.CrossIcon, null)));}))
|
|
129
|
-
|
|
145
|
+
_react.default.createElement(_CrossIcon.CrossIcon, null)));}));};_this.
|
|
130
146
|
|
|
131
147
|
|
|
132
148
|
|
|
133
149
|
|
|
134
150
|
|
|
135
|
-
};_this.
|
|
136
|
-
|
|
137
151
|
updateReadyToFix = function () {
|
|
138
152
|
if (_this.wrapper) {
|
|
139
153
|
var wrapperScrolledUp = _this.wrapper.getBoundingClientRect().top;
|
|
@@ -146,6 +160,10 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
146
160
|
_this.wrapper = el;
|
|
147
161
|
};_this.
|
|
148
162
|
|
|
163
|
+
stickyRef = function (el) {
|
|
164
|
+
_this.sticky = el;
|
|
165
|
+
};_this.
|
|
166
|
+
|
|
149
167
|
handleFocus = function () {
|
|
150
168
|
requestAnimationFrame(function () {
|
|
151
169
|
if (_keyListener.keyListener.isTabPressed) {
|
|
@@ -156,4 +174,4 @@ SidePageHeader = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__
|
|
|
156
174
|
|
|
157
175
|
handleBlur = function () {
|
|
158
176
|
_this.setState({ focusedByTab: false });
|
|
159
|
-
};return _this;}var _proto = SidePageHeader.prototype;_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 isReadyToFix = this.state.isReadyToFix;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("div", { ref: this.wrapperRef, className: _SidePage.styles.headerWrapper() }, isReadyToFix ? /*#__PURE__*/_react.default.createElement(_Sticky.Sticky, { side: "top" }, this.renderHeader) : this.renderHeader()));};(0, _createClass2.default)(SidePageHeader, [{ key: "regularHeight", get: function get() {var isReadyToFix = this.state.isReadyToFix;if (!this.wrapper) {return 0;}if (!isReadyToFix) {this.lastRegularHeight = this.wrapper.getBoundingClientRect().height;}return this.lastRegularHeight;} }, { key: "fixedHeaderHeight", get: function get() {var theme = this.theme;return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;} }]);return SidePageHeader;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'SidePageHeader', _class2.contextType = _SidePageContext.SidePageContext, _temp)) || _class;exports.SidePageHeader = SidePageHeader;
|
|
177
|
+
};return _this;}var _proto = SidePageHeader.prototype;_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 isReadyToFix = this.state.isReadyToFix;return /*#__PURE__*/_react.default.createElement(_CommonWrapper.CommonWrapper, (0, _extends2.default)({ rootNodeRef: this.setRootNode }, this.props), /*#__PURE__*/_react.default.createElement("div", { ref: this.wrapperRef, className: _SidePage.styles.headerWrapper() }, isReadyToFix ? /*#__PURE__*/_react.default.createElement(_Sticky.Sticky, { ref: this.stickyRef, side: "top" }, this.renderHeader) : this.renderHeader()));};(0, _createClass2.default)(SidePageHeader, [{ key: "regularHeight", get: function get() {var isReadyToFix = this.state.isReadyToFix;if (!this.wrapper) {return 0;}if (!isReadyToFix) {this.lastRegularHeight = this.wrapper.getBoundingClientRect().height;}return this.lastRegularHeight;} }, { key: "fixedHeaderHeight", get: function get() {var theme = this.theme;return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;} }]);return SidePageHeader;}(_react.default.Component), _class2.__KONTUR_REACT_UI__ = 'SidePageHeader', _class2.contextType = _SidePageContext.SidePageContext, _temp)) || _class;exports.SidePageHeader = SidePageHeader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["SidePageHeader.tsx"],"names":["SidePageHeader","rootNode","context","state","isReadyToFix","focusedByTab","theme","wrapper","lastRegularHeight","setRootNode","componentDidMount","window","addEventListener","update","setHasHeader","componentWillUnmount","removeEventListener","updateReadyToFix","renderHeader","fixed","styles","header","headerFixed","renderClose","title","titleFixed","props","children","stickyOffset","parseInt","sidePageHeaderStickyOffset","wrapperClose","requestClose","close","closeFocus","handleFocus","handleBlur","wrapperScrolledUp","getBoundingClientRect","top","regularHeight","fixedHeaderHeight","setState","wrapperRef","el","requestAnimationFrame","keyListener","isTabPressed","render","renderMain","headerWrapper","height","sidePageHeaderFixedLineHeight","sidePageHeaderFixedPaddingY","React","Component","__KONTUR_REACT_UI__","contextType","SidePageContext"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["SidePageHeader.tsx"],"names":["SidePageHeader","rootNode","context","state","isReadyToFix","focusedByTab","theme","wrapper","sticky","lastRegularHeight","setRootNode","componentDidMount","window","addEventListener","update","setHasHeader","headerRef","componentWillUnmount","removeEventListener","reflow","updateReadyToFix","renderHeader","fixed","styles","header","headerFixed","renderClose","title","titleFixed","props","children","stickyOffset","parseInt","sidePageHeaderStickyOffset","wrapperClose","closeIcon","requestClose","close","closeFocus","handleFocus","handleBlur","wrapperScrolledUp","getBoundingClientRect","top","regularHeight","fixedHeaderHeight","setState","wrapperRef","el","stickyRef","requestAnimationFrame","keyListener","isTabPressed","render","renderMain","headerWrapper","height","sidePageHeaderFixedLineHeight","sidePageHeaderFixedPaddingY","React","Component","__KONTUR_REACT_UI__","contextType","SidePageContext"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { Sticky } from '../Sticky';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { isFunction } from '../../lib/utils';\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 { keyListener } from '../../lib/events/keyListener';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './SidePage.styles';\nimport { SidePageContext, SidePageContextType } from './SidePageContext';\n\nexport interface SidePageHeaderProps extends CommonProps {\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface SidePageHeaderState {\n isReadyToFix: boolean;\n focusedByTab: boolean;\n}\n\n/**\n * Шапка сайдпейджа\n *\n * @visibleName SidePage.Header\n */\n@rootNode\nexport class SidePageHeader extends React.Component<SidePageHeaderProps, SidePageHeaderState> {\n public static __KONTUR_REACT_UI__ = 'SidePageHeader';\n\n public static contextType = SidePageContext;\n public context: SidePageContextType = this.context;\n\n public state = {\n isReadyToFix: false,\n focusedByTab: false,\n };\n\n private theme!: Theme;\n private wrapper: HTMLElement | null = null;\n private sticky: Sticky | null = null;\n private lastRegularHeight = 0;\n private setRootNode!: TSetRootNode;\n\n public get regularHeight(): number {\n const { isReadyToFix } = this.state;\n if (!this.wrapper) {\n return 0;\n }\n if (!isReadyToFix) {\n this.lastRegularHeight = this.wrapper.getBoundingClientRect().height;\n }\n return this.lastRegularHeight;\n }\n\n public get fixedHeaderHeight(): number {\n const { theme } = this;\n return parseInt(theme.sidePageHeaderFixedLineHeight) + parseInt(theme.sidePageHeaderFixedPaddingY) * 2;\n }\n\n public componentDidMount = () => {\n window.addEventListener('scroll', this.update, true);\n this.context.setHasHeader?.();\n this.context.headerRef(this);\n };\n\n public componentWillUnmount = () => {\n window.removeEventListener('scroll', this.update, true);\n this.context.setHasHeader?.(false);\n this.context.headerRef(null);\n };\n\n public update = () => {\n this.sticky?.reflow();\n this.updateReadyToFix();\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 { isReadyToFix } = this.state;\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div ref={this.wrapperRef} className={styles.headerWrapper()}>\n {isReadyToFix ? (\n <Sticky ref={this.stickyRef} side=\"top\">\n {this.renderHeader}\n </Sticky>\n ) : (\n this.renderHeader()\n )}\n </div>\n </CommonWrapper>\n );\n }\n\n private renderHeader = (fixed = false) => {\n return (\n <div className={cx(styles.header(this.theme), { [styles.headerFixed(this.theme)]: fixed })}>\n {this.renderClose(fixed)}\n <div className={cx(styles.title(this.theme), { [styles.titleFixed()]: fixed })}>\n {isFunction(this.props.children) ? this.props.children(fixed) : this.props.children}\n </div>\n </div>\n );\n };\n\n private renderClose = (fixed: boolean) => {\n const stickyOffset = parseInt(this.theme.sidePageHeaderStickyOffset);\n\n return (\n <div className={cx(styles.wrapperClose(this.theme), fixed && styles.fixed(this.theme))}>\n <Sticky side=\"top\" offset={stickyOffset}>\n {this.closeIcon}\n </Sticky>\n </div>\n );\n };\n\n private closeIcon = () => (\n <SidePageContext.Consumer>\n {({ requestClose }) => (\n <button\n className={cx(styles.close(this.theme), {\n [styles.closeFocus(this.theme)]: this.state.focusedByTab,\n })}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n onClick={requestClose}\n data-tid=\"SidePage__close\"\n tabIndex={0}\n >\n <CrossIcon />\n </button>\n )}\n </SidePageContext.Consumer>\n );\n\n private updateReadyToFix = () => {\n if (this.wrapper) {\n const wrapperScrolledUp = this.wrapper.getBoundingClientRect().top;\n const isReadyToFix = this.regularHeight + wrapperScrolledUp <= this.fixedHeaderHeight;\n this.setState((state) => (state.isReadyToFix !== isReadyToFix ? { ...state, isReadyToFix } : state));\n }\n };\n\n private wrapperRef = (el: HTMLElement | null) => {\n this.wrapper = el;\n };\n\n private stickyRef = (el: Sticky | null) => {\n this.sticky = el;\n };\n\n private handleFocus = () => {\n requestAnimationFrame(() => {\n if (keyListener.isTabPressed) {\n this.setState({ focusedByTab: true });\n }\n });\n };\n\n private handleBlur = () => {\n this.setState({ focusedByTab: false });\n };\n}\n"]}
|
|
@@ -50,5 +50,10 @@ export declare class Sticky extends React.Component<StickyProps, StickyState> {
|
|
|
50
50
|
render(): JSX.Element;
|
|
51
51
|
private refWrapper;
|
|
52
52
|
private refInner;
|
|
53
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Пересчитать габариты и позицию залипшего элемента
|
|
55
|
+
*
|
|
56
|
+
* @public
|
|
57
|
+
*/
|
|
58
|
+
reflow: () => void;
|
|
54
59
|
}
|
|
@@ -139,6 +139,11 @@ Sticky = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/functi
|
|
|
139
139
|
|
|
140
140
|
refInner = function (ref) {return _this.inner = ref;};_this.
|
|
141
141
|
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
142
147
|
reflow = function () {var _document =
|
|
143
148
|
document,documentElement = _document.documentElement;
|
|
144
149
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Sticky.tsx"],"names":["MAX_REFLOW_RETRIES","Sticky","rootNode","state","fixed","deltaHeight","stopped","relativeTop","wrapper","inner","layoutSubscription","remove","reflowCounter","setRootNode","refWrapper","ref","refInner","reflow","document","documentElement","Error","windowHeight","window","innerHeight","clientHeight","getBoundingClientRect","top","bottom","left","width","height","props","offset","getStop","side","prevFixed","prevHeight","setState","stop","stopRect","outerHeight","componentDidMount","LayoutEvents","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","emit","render","children","innerStyle","styles","container","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","node","func","number","oneOf","isRequired","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends CommonProps {\n side: 'top' | 'bottom';\n /**\n * Отступ в пикселях от края экрана, на сколько сдвигается элемент в залипшем состоянии\n * @default 0\n */\n offset: number;\n getStop?: () => Nullable<HTMLElement>;\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps = { offset: 0 };\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n let { children } = this.props;\n const { side, offset } = this.props;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n private reflow = () => {\n const { documentElement } = document;\n\n if (!documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = window.innerHeight || documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left } = this.wrapper.getBoundingClientRect();\n const { width, height } = this.inner.getBoundingClientRect();\n const { offset, getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const fixed = side === 'top' ? top < offset : bottom > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = stop.getBoundingClientRect();\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Sticky.tsx"],"names":["MAX_REFLOW_RETRIES","Sticky","rootNode","state","fixed","deltaHeight","stopped","relativeTop","wrapper","inner","layoutSubscription","remove","reflowCounter","setRootNode","refWrapper","ref","refInner","reflow","document","documentElement","Error","windowHeight","window","innerHeight","clientHeight","getBoundingClientRect","top","bottom","left","width","height","props","offset","getStop","side","prevFixed","prevHeight","setState","stop","stopRect","outerHeight","componentDidMount","LayoutEvents","addListener","componentWillUnmount","componentDidUpdate","prevProps","prevState","emit","render","children","innerStyle","styles","container","React","Component","__KONTUR_REACT_UI__","propTypes","PropTypes","oneOfType","node","func","number","oneOf","isRequired","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport shallowEqual from 'shallowequal';\n\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Nullable } from '../../typings/utility-types';\nimport { isFunction } from '../../lib/utils';\nimport { ZIndex } from '../../internal/ZIndex';\nimport { CommonWrapper, CommonProps } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { styles } from './Sticky.styles';\n\nconst MAX_REFLOW_RETRIES = 5;\n\nexport interface StickyProps extends CommonProps {\n side: 'top' | 'bottom';\n /**\n * Отступ в пикселях от края экрана, на сколько сдвигается элемент в залипшем состоянии\n * @default 0\n */\n offset: number;\n getStop?: () => Nullable<HTMLElement>;\n children?: React.ReactNode | ((fixed: boolean) => React.ReactNode);\n}\n\nexport interface StickyState {\n fixed: boolean;\n deltaHeight: number;\n height?: number;\n width?: number;\n left?: number;\n stopped: boolean;\n relativeTop: number;\n}\n\n@rootNode\nexport class Sticky extends React.Component<StickyProps, StickyState> {\n public static __KONTUR_REACT_UI__ = 'Sticky';\n\n public static propTypes = {\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Функция, которая возвращает DOM-элемент, который нельзя пересекать.\n */\n getStop: PropTypes.func,\n\n /**\n * Отступ от границы в пикселях\n */\n offset: PropTypes.number,\n\n side: PropTypes.oneOf(['top', 'bottom']).isRequired,\n };\n\n public static defaultProps = { offset: 0 };\n\n public state: StickyState = {\n fixed: false,\n deltaHeight: 0,\n stopped: false,\n relativeTop: 0,\n };\n\n private wrapper: Nullable<HTMLElement>;\n private inner: Nullable<HTMLElement>;\n private layoutSubscription: { remove: Nullable<() => void> } = { remove: null };\n private reflowCounter = 0;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.reflow();\n\n this.layoutSubscription = LayoutEvents.addListener(this.reflow);\n }\n\n public componentWillUnmount() {\n if (this.layoutSubscription.remove) {\n this.layoutSubscription.remove();\n }\n }\n\n public componentDidUpdate(prevProps: StickyProps, prevState: StickyState) {\n if (!shallowEqual(prevProps, this.props) || !shallowEqual(prevState, this.state)) {\n if (this.reflowCounter < MAX_REFLOW_RETRIES) {\n LayoutEvents.emit();\n this.reflowCounter += 1;\n return;\n }\n }\n this.reflowCounter = 0;\n }\n\n public render() {\n let { children } = this.props;\n const { side, offset } = this.props;\n const { fixed, stopped, relativeTop, deltaHeight, width, height, left } = this.state;\n const innerStyle: React.CSSProperties = {};\n\n if (fixed) {\n if (stopped) {\n innerStyle.top = relativeTop;\n innerStyle[side === 'top' ? 'marginTop' : 'marginBottom'] = deltaHeight;\n } else {\n innerStyle.width = width;\n innerStyle[side] = offset;\n innerStyle.left = left;\n }\n }\n\n if (isFunction(children)) {\n children = children(fixed);\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div ref={this.refWrapper} className={styles.wrapper()}>\n <ZIndex\n priority=\"Sticky\"\n applyZIndex={fixed}\n className={cx(styles.inner(), {\n [styles.fixed()]: fixed && !stopped,\n [styles.stopped()]: stopped,\n })}\n style={innerStyle}\n wrapperRef={this.refInner}\n >\n <div className={styles.container()}>{children}</div>\n </ZIndex>\n {fixed && !stopped ? <div style={{ width, height }} /> : null}\n </div>\n </CommonWrapper>\n );\n }\n\n private refWrapper = (ref: Nullable<HTMLElement>) => (this.wrapper = ref);\n\n private refInner = (ref: Nullable<HTMLElement>) => (this.inner = ref);\n\n /**\n * Пересчитать габариты и позицию залипшего элемента\n *\n * @public\n */\n public reflow = () => {\n const { documentElement } = document;\n\n if (!documentElement) {\n throw Error('There is no \"documentElement\" in document');\n }\n\n const windowHeight = window.innerHeight || documentElement.clientHeight;\n if (!this.wrapper || !this.inner) {\n return;\n }\n const { top, bottom, left } = this.wrapper.getBoundingClientRect();\n const { width, height } = this.inner.getBoundingClientRect();\n const { offset, getStop, side } = this.props;\n const { fixed: prevFixed, height: prevHeight = height } = this.state;\n const fixed = side === 'top' ? top < offset : bottom > windowHeight - offset;\n\n this.setState({ fixed, left });\n\n if (fixed && !prevFixed) {\n this.setState({ width, height });\n }\n\n if (fixed) {\n const stop = getStop && getStop();\n if (stop) {\n const deltaHeight = prevHeight - height;\n const stopRect = stop.getBoundingClientRect();\n const outerHeight = height + offset;\n let stopped = false;\n let relativeTop = 0;\n\n if (side === 'top') {\n stopped = stopRect.top - outerHeight < 0;\n relativeTop = stopRect.top - prevHeight - top;\n } else {\n stopped = stopRect.bottom + outerHeight > windowHeight;\n relativeTop = stopRect.bottom - top;\n }\n\n this.setState({ relativeTop, deltaHeight, stopped });\n }\n }\n };\n}\n"]}
|