@alfalab/core-components-base-modal 5.8.10 → 6.0.0-snapshot-f57d3d0
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/Component.d.ts +16 -11
- package/Component.js +26 -27
- package/Component.js.map +1 -0
- package/cssm/Component.d.ts +16 -11
- package/cssm/Component.js +26 -25
- package/cssm/Component.js.map +1 -0
- package/cssm/helpers/lockScroll.d.ts +8 -5
- package/cssm/helpers/lockScroll.js +1 -0
- package/cssm/helpers/lockScroll.js.map +1 -0
- package/cssm/index.d.ts +3 -3
- package/cssm/index.js +6 -5
- package/cssm/index.js.map +1 -0
- package/cssm/index.module.css +3 -23
- package/cssm/matches-polyfill.js +1 -0
- package/cssm/matches-polyfill.js.map +1 -0
- package/cssm/utils.d.ts +5 -6
- package/cssm/utils.js +6 -5
- package/cssm/utils.js.map +1 -0
- package/esm/Component.d.ts +16 -11
- package/esm/Component.js +13 -14
- package/esm/Component.js.map +1 -0
- package/esm/helpers/lockScroll.d.ts +8 -5
- package/esm/helpers/lockScroll.js +1 -0
- package/esm/helpers/lockScroll.js.map +1 -0
- package/esm/index.css +17 -38
- package/esm/index.d.ts +3 -3
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -0
- package/esm/index.module.css.js +6 -0
- package/esm/index.module.css.js.map +1 -0
- package/esm/matches-polyfill.js +1 -0
- package/esm/matches-polyfill.js.map +1 -0
- package/esm/utils.d.ts +5 -6
- package/esm/utils.js +1 -0
- package/esm/utils.js.map +1 -0
- package/helpers/lockScroll.d.ts +8 -5
- package/helpers/lockScroll.js +1 -0
- package/helpers/lockScroll.js.map +1 -0
- package/index.css +17 -38
- package/index.d.ts +3 -3
- package/index.js +6 -5
- package/index.js.map +1 -0
- package/index.module.css.js +8 -0
- package/index.module.css.js.map +1 -0
- package/matches-polyfill.js +1 -0
- package/matches-polyfill.js.map +1 -0
- package/modern/Component.d.ts +16 -11
- package/modern/Component.js +6 -7
- package/modern/Component.js.map +1 -0
- package/modern/helpers/lockScroll.d.ts +8 -5
- package/modern/helpers/lockScroll.js +1 -0
- package/modern/helpers/lockScroll.js.map +1 -0
- package/modern/index.css +17 -38
- package/modern/index.d.ts +3 -3
- package/modern/index.js +1 -0
- package/modern/index.js.map +1 -0
- package/modern/index.module.css.js +6 -0
- package/modern/index.module.css.js.map +1 -0
- package/modern/matches-polyfill.js +1 -0
- package/modern/matches-polyfill.js.map +1 -0
- package/modern/utils.d.ts +5 -6
- package/modern/utils.js +1 -0
- package/modern/utils.js.map +1 -0
- package/moderncssm/Component.d.ts +16 -11
- package/moderncssm/Component.js +5 -4
- package/moderncssm/Component.js.map +1 -0
- package/moderncssm/helpers/lockScroll.d.ts +8 -5
- package/moderncssm/helpers/lockScroll.js +1 -0
- package/moderncssm/helpers/lockScroll.js.map +1 -0
- package/moderncssm/index.d.ts +3 -3
- package/moderncssm/index.js +1 -0
- package/moderncssm/index.js.map +1 -0
- package/moderncssm/index.module.css +1 -3
- package/moderncssm/matches-polyfill.js +1 -0
- package/moderncssm/matches-polyfill.js.map +1 -0
- package/moderncssm/utils.d.ts +5 -6
- package/moderncssm/utils.js +1 -0
- package/moderncssm/utils.js.map +1 -0
- package/package.json +10 -11
- package/src/Component.tsx +16 -1
- package/utils.d.ts +5 -6
- package/utils.js +1 -0
- package/utils.js.map +1 -0
- package/cssm/matches-polyfill.d.ts +0 -1
- package/esm/matches-polyfill.d.ts +0 -1
- package/matches-polyfill.d.ts +0 -1
- package/modern/matches-polyfill.d.ts +0 -1
- package/moderncssm/matches-polyfill.d.ts +0 -1
package/Component.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="react-transition-group" />
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { ComponentType, KeyboardEvent, MouseEvent, MutableRefObject, ReactNode, Ref } from "react";
|
|
1
|
+
import React, { ComponentType, KeyboardEvent, MouseEvent, MutableRefObject, ReactNode, Ref, WheelEvent } from 'react';
|
|
5
2
|
import { TransitionProps } from 'react-transition-group/Transition';
|
|
6
|
-
import { BackdropProps } from
|
|
7
|
-
import { PortalProps } from
|
|
8
|
-
|
|
3
|
+
import { BackdropProps } from '@alfalab/core-components-backdrop';
|
|
4
|
+
import { PortalProps } from '@alfalab/core-components-portal';
|
|
5
|
+
import './matches-polyfill';
|
|
6
|
+
export declare type BaseModalProps = {
|
|
9
7
|
/**
|
|
10
8
|
* Контент
|
|
11
9
|
*/
|
|
@@ -134,12 +132,20 @@ type BaseModalProps = {
|
|
|
134
132
|
* Реф, который должен быть установлен компонентной области
|
|
135
133
|
*/
|
|
136
134
|
componentRef?: MutableRefObject<HTMLDivElement | null>;
|
|
135
|
+
/**
|
|
136
|
+
* Реф контентной области
|
|
137
|
+
*/
|
|
138
|
+
contentElementRef?: MutableRefObject<HTMLDivElement | null>;
|
|
137
139
|
/**
|
|
138
140
|
* Блокирует скролл когда модальное окно открыто. Работает только на iOS.
|
|
139
141
|
*/
|
|
140
142
|
iOSLock?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Хэндлер события прокрутки колесиком
|
|
145
|
+
*/
|
|
146
|
+
onWheel?: (e: WheelEvent<HTMLElement>) => void;
|
|
141
147
|
};
|
|
142
|
-
type BaseModalContext = {
|
|
148
|
+
export declare type BaseModalContext = {
|
|
143
149
|
parentRef: React.RefObject<HTMLDivElement>;
|
|
144
150
|
componentRef: React.RefObject<HTMLDivElement>;
|
|
145
151
|
hasFooter?: boolean;
|
|
@@ -154,6 +160,5 @@ type BaseModalContext = {
|
|
|
154
160
|
setHasFooter: (exists: boolean) => void;
|
|
155
161
|
onClose: Required<BaseModalProps>['onClose'];
|
|
156
162
|
};
|
|
157
|
-
declare const BaseModalContext: React.Context<BaseModalContext>;
|
|
158
|
-
declare const BaseModal: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
159
|
-
export { BaseModalProps, BaseModalContext, BaseModal };
|
|
163
|
+
export declare const BaseModalContext: React.Context<BaseModalContext>;
|
|
164
|
+
export declare const BaseModal: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
|
package/Component.js
CHANGED
|
@@ -13,9 +13,10 @@ var coreComponentsBackdrop = require('@alfalab/core-components-backdrop');
|
|
|
13
13
|
var coreComponentsPortal = require('@alfalab/core-components-portal');
|
|
14
14
|
var coreComponentsShared = require('@alfalab/core-components-shared');
|
|
15
15
|
var coreComponentsStack = require('@alfalab/core-components-stack');
|
|
16
|
-
var
|
|
17
|
-
var
|
|
16
|
+
var coreComponentsStackContext = require('@alfalab/core-components-stack-context');
|
|
17
|
+
var lockScroll = require('./helpers/lockScroll.js');
|
|
18
18
|
var utils = require('./utils.js');
|
|
19
|
+
var index_module = require('./index.module.css.js');
|
|
19
20
|
require('./matches-polyfill.js');
|
|
20
21
|
|
|
21
22
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -25,9 +26,6 @@ var FocusLock__default = /*#__PURE__*/_interopDefaultCompat(FocusLock);
|
|
|
25
26
|
var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
|
|
26
27
|
var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
27
28
|
|
|
28
|
-
var styles = {"component":"base-modal__component_1wjpm","wrapper":"base-modal__wrapper_1wjpm","content":"base-modal__content_1wjpm","hasFooter":"base-modal__hasFooter_1wjpm","hasHeader":"base-modal__hasHeader_1wjpm","hidden":"base-modal__hidden_1wjpm","backdrop":"base-modal__backdrop_1wjpm","appear":"base-modal__appear_1wjpm","enter":"base-modal__enter_1wjpm","appearActive":"base-modal__appearActive_1wjpm","enterActive":"base-modal__enterActive_1wjpm","exit":"base-modal__exit_1wjpm","exitActive":"base-modal__exitActive_1wjpm","exitDone":"base-modal__exitDone_1wjpm"};
|
|
29
|
-
require('./index.css')
|
|
30
|
-
|
|
31
29
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
32
30
|
var BaseModalContext = React__default.default.createContext({
|
|
33
31
|
parentRef: { current: null },
|
|
@@ -45,14 +43,14 @@ var BaseModalContext = React__default.default.createContext({
|
|
|
45
43
|
onClose: function () { return null; },
|
|
46
44
|
});
|
|
47
45
|
var BaseModal = React.forwardRef(function (_a, ref) {
|
|
48
|
-
var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ?
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var
|
|
55
|
-
var
|
|
46
|
+
var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? coreComponentsBackdrop.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? coreComponentsStackContext.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.contentElementRef, contentElementRef = _p === void 0 ? null : _p, _q = _a.usePortal, usePortal = _q === void 0 ? true : _q, _r = _a.iOSLock, iOSLock = _r === void 0 ? false : _r, onWheel = _a.onWheel;
|
|
47
|
+
var _s = React.useState(null), exited = _s[0], setExited = _s[1];
|
|
48
|
+
var _t = React.useState(false), hasScroll = _t[0], setHasScroll = _t[1];
|
|
49
|
+
var _u = React.useState(false), hasHeader = _u[0], setHasHeader = _u[1];
|
|
50
|
+
var _v = React.useState(false), hasFooter = _v[0], setHasFooter = _v[1];
|
|
51
|
+
var _w = React.useState(false), headerHighlighted = _w[0], setHeaderHighlighted = _w[1];
|
|
52
|
+
var _x = React.useState(false), footerHighlighted = _x[0], setFooterHighlighted = _x[1];
|
|
53
|
+
var _y = React.useState(0), headerOffset = _y[0], setHeaderOffset = _y[1];
|
|
56
54
|
var componentNodeRef = React.useRef(null);
|
|
57
55
|
var wrapperRef = React.useRef(null);
|
|
58
56
|
var scrollableNodeRef = React.useRef(null);
|
|
@@ -105,7 +103,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
105
103
|
}, [hasFooter, hasHeader, headerOffset]);
|
|
106
104
|
var handleClose = React.useCallback(function (event, reason) {
|
|
107
105
|
if (iOSLock && coreComponentsShared.os.isIOS()) {
|
|
108
|
-
|
|
106
|
+
lockScroll.unlockScroll();
|
|
109
107
|
}
|
|
110
108
|
if (onClose) {
|
|
111
109
|
onClose(event, reason);
|
|
@@ -195,8 +193,8 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
195
193
|
var shouldIOSLock = iOSLock && coreComponentsShared.os.isIOS();
|
|
196
194
|
utils.handleContainer(el_1, shouldIOSLock);
|
|
197
195
|
if (shouldIOSLock) {
|
|
198
|
-
|
|
199
|
-
|
|
196
|
+
lockScroll.syncHeight();
|
|
197
|
+
lockScroll.lockScroll();
|
|
200
198
|
}
|
|
201
199
|
restoreContainerStylesRef.current = function () {
|
|
202
200
|
restoreContainerStylesRef.current = null;
|
|
@@ -206,7 +204,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
206
204
|
setExited(false);
|
|
207
205
|
}
|
|
208
206
|
if (!open) {
|
|
209
|
-
|
|
207
|
+
lockScroll.unlockScroll();
|
|
210
208
|
}
|
|
211
209
|
}, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
|
|
212
210
|
React.useEffect(function () {
|
|
@@ -256,28 +254,28 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
256
254
|
var _a, _b;
|
|
257
255
|
return (React__default.default.createElement(BaseModalContext.Provider, { value: contextValue },
|
|
258
256
|
React__default.default.createElement(FocusLock__default.default, { disabled: disableFocusLock || !open, returnFocus: !disableRestoreFocus },
|
|
259
|
-
Backdrop && (React__default.default.createElement(Backdrop, tslib.__assign({}, backdropProps, { className: cn__default.default(backdropProps.className,
|
|
257
|
+
Backdrop && (React__default.default.createElement(Backdrop, tslib.__assign({}, backdropProps, { className: cn__default.default(backdropProps.className, index_module.backdrop), open: open, style: {
|
|
260
258
|
zIndex: computedZIndex,
|
|
261
259
|
} }))),
|
|
262
|
-
React__default.default.createElement("div", tslib.__assign({}, wrapperProps, { role: 'dialog', className: cn__default.default(
|
|
263
|
-
_a[
|
|
260
|
+
React__default.default.createElement("div", tslib.__assign({}, wrapperProps, { role: 'dialog', className: cn__default.default(index_module.wrapper, wrapperClassName, wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.className, (_a = {},
|
|
261
|
+
_a[index_module.hidden] = !open && isExited,
|
|
264
262
|
_a)), ref: mergeRefs__default.default([
|
|
265
263
|
ref,
|
|
266
264
|
wrapperRef,
|
|
267
265
|
wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.ref,
|
|
268
|
-
]), onKeyDown: handleKeyDown, onMouseDown: handleBackdropMouseDown, onMouseUp: handleBackdropMouseUp, tabIndex: -1, "data-test-id": dataTestId, style: {
|
|
266
|
+
]), onKeyDown: handleKeyDown, onMouseDown: handleBackdropMouseDown, onMouseUp: handleBackdropMouseUp, onWheel: onWheel, tabIndex: -1, "data-test-id": dataTestId, style: {
|
|
269
267
|
zIndex: computedZIndex,
|
|
270
268
|
} }),
|
|
271
|
-
React__default.default.createElement(reactTransitionGroup.CSSTransition, tslib.__assign({ appear: true, timeout: 200, classNames:
|
|
272
|
-
React__default.default.createElement("div", tslib.__assign({}, componentDivProps, { className: cn__default.default(
|
|
269
|
+
React__default.default.createElement(reactTransitionGroup.CSSTransition, tslib.__assign({ appear: true, timeout: 200, classNames: index_module, nodeRef: componentNodeRef }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
|
|
270
|
+
React__default.default.createElement("div", tslib.__assign({}, componentDivProps, { className: cn__default.default(index_module.component, className, componentDivProps === null || componentDivProps === void 0 ? void 0 : componentDivProps.className), ref: mergeRefs__default.default([
|
|
273
271
|
componentRef,
|
|
274
272
|
componentNodeRef,
|
|
275
273
|
(componentDivProps === null || componentDivProps === void 0 ? void 0 : componentDivProps.ref) || null,
|
|
276
274
|
]) }),
|
|
277
|
-
React__default.default.createElement("div", tslib.__assign({}, contentProps, { className: cn__default.default(
|
|
278
|
-
_b[
|
|
279
|
-
_b[
|
|
280
|
-
_b)) }), children)))))));
|
|
275
|
+
React__default.default.createElement("div", tslib.__assign({}, contentProps, { className: cn__default.default(index_module.content, contentClassName, contentProps === null || contentProps === void 0 ? void 0 : contentProps.className, (_b = {},
|
|
276
|
+
_b[index_module.hasFooter] = hasFooter,
|
|
277
|
+
_b[index_module.hasHeader] = hasHeader,
|
|
278
|
+
_b)), ref: contentElementRef }), children)))))));
|
|
281
279
|
})); };
|
|
282
280
|
if (!shouldRender)
|
|
283
281
|
return null;
|
|
@@ -288,3 +286,4 @@ BaseModalContext.displayName = 'BaseModalContext';
|
|
|
288
286
|
|
|
289
287
|
exports.BaseModal = BaseModal;
|
|
290
288
|
exports.BaseModalContext = BaseModalContext;
|
|
289
|
+
//# sourceMappingURL=Component.js.map
|
package/Component.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n ComponentType,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { CSSTransition } from 'react-transition-group';\nimport { TransitionProps } from 'react-transition-group/Transition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, PortalProps } from '@alfalab/core-components-portal';\nimport { browser, os } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\n\nimport { lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll';\nimport {\n handleContainer,\n hasScrollbar,\n isScrolledToBottom,\n isScrolledToTop,\n restoreContainerStyles,\n} from './utils';\n\nimport styles from './index.module.css';\n\n// TODO Без полифила крашится FocusLock в IE11. Выпилить в будущем!!!.\nimport './matches-polyfill';\n\nexport type BaseModalProps = {\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Компонент бэкдропа\n */\n Backdrop?: ComponentType<BackdropProps>;\n\n /**\n * Свойства для Бэкдропа\n */\n backdropProps?: Partial<BackdropProps> & Record<string, unknown>;\n\n /**\n * Нода, компонент или функция возвращающая их\n *\n * Контейнер к которому будут добавляться порталы\n */\n container?: PortalProps['getPortalContainer'];\n\n /**\n * Отключает автоматический перевод фокуса на модалку при открытии\n * @default false\n */\n disableAutoFocus?: boolean;\n\n /**\n * Отключает ловушку фокуса\n * @default false\n */\n disableFocusLock?: boolean;\n\n /**\n * Отключает восстановление фокуса на предыдущем элементе после закрытия модалки\n * @default false\n */\n disableRestoreFocus?: boolean;\n\n /**\n * Отключает вызов `callback` при нажатии Escape\n * @default false\n */\n disableEscapeKeyDown?: boolean;\n\n /**\n * Отключает вызов `callback` при клике на бэкдроп\n * @default false\n */\n disableBackdropClick?: boolean;\n\n /**\n * Отключает блокировку скролла при открытии модального окна\n * @default false\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Содержимое модалки всегда в DOM\n * @default false\n */\n keepMounted?: boolean;\n\n /**\n * Управление видимостью модалки\n */\n open: boolean;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс\n */\n contentClassName?: string;\n\n /**\n * Дополнительные пропсы на dialog wrapper\n */\n wrapperProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n /**\n * Дополнительные пропсы на обертку контента\n */\n contentProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n /**\n * Дополнительные пропсы на компонентную обертку контента\n */\n componentDivProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n\n /**\n * Дополнительный класс для обертки (Modal)\n */\n wrapperClassName?: string;\n\n /**\n * Обработчик скролла контента\n */\n scrollHandler?: 'wrapper' | 'content' | MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Пропсы для анимации (CSSTransition)\n */\n transitionProps?: Partial<TransitionProps>;\n\n /**\n * Рендерить ли в контейнер через портал.\n * @default true\n */\n usePortal?: boolean;\n\n /**\n * Обработчик события нажатия на бэкдроп\n */\n onBackdropClick?: (event: MouseEvent) => void;\n\n /**\n * Обработчик события нажатия на Escape\n *\n * Если `disableEscapeKeyDown` - false и модальное окно в фокусе\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n\n /**\n * Обработчик закрытия\n */\n onClose?: (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick',\n ) => void;\n\n /**\n * Обработчик события onEntered компонента Transition\n */\n onMount?: () => void;\n\n /**\n * Обработчик события onExited компонента Transition\n */\n onUnmount?: () => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Реф, который должен быть установлен компонентной области\n */\n componentRef?: MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Реф контентной области\n */\n contentElementRef?: MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Блокирует скролл когда модальное окно открыто. Работает только на iOS.\n */\n iOSLock?: boolean;\n\n /**\n * Хэндлер события прокрутки колесиком\n */\n onWheel?: (e: WheelEvent<HTMLElement>) => void;\n};\n\nexport type BaseModalContext = {\n parentRef: React.RefObject<HTMLDivElement>;\n componentRef: React.RefObject<HTMLDivElement>;\n hasFooter?: boolean;\n hasHeader?: boolean;\n hasScroll?: boolean;\n headerHighlighted?: boolean;\n footerHighlighted?: boolean;\n headerOffset?: number;\n setHeaderOffset: (offset: number) => void;\n contentRef: Ref<HTMLElement>;\n setHasHeader: (exists: boolean) => void;\n setHasFooter: (exists: boolean) => void;\n onClose: Required<BaseModalProps>['onClose'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const BaseModalContext = React.createContext<BaseModalContext>({\n parentRef: { current: null },\n componentRef: { current: null },\n hasFooter: false,\n hasHeader: false,\n hasScroll: false,\n headerHighlighted: false,\n footerHighlighted: false,\n headerOffset: 0,\n setHeaderOffset: () => null,\n contentRef: () => null,\n setHasHeader: () => null,\n setHasFooter: () => null,\n onClose: () => null,\n});\n\nexport const BaseModal = forwardRef<HTMLDivElement, BaseModalProps>(\n (\n {\n open,\n container,\n children,\n scrollHandler = 'wrapper',\n Backdrop = DefaultBackdrop,\n backdropProps = {},\n transitionProps = {},\n disableBackdropClick,\n disableAutoFocus = false,\n disableFocusLock = false,\n disableEscapeKeyDown = false,\n disableRestoreFocus = false,\n disableBlockingScroll = false,\n keepMounted = false,\n className,\n contentClassName,\n wrapperProps,\n contentProps,\n componentDivProps,\n wrapperClassName,\n onBackdropClick,\n onClose,\n onEscapeKeyDown,\n onMount,\n onUnmount,\n dataTestId,\n zIndex = stackingOrder.MODAL,\n componentRef = null,\n contentElementRef = null,\n usePortal = true,\n iOSLock = false,\n onWheel,\n },\n ref,\n ) => {\n const [exited, setExited] = useState<boolean | null>(null);\n const [hasScroll, setHasScroll] = useState(false);\n const [hasHeader, setHasHeader] = useState(false);\n const [hasFooter, setHasFooter] = useState(false);\n const [headerHighlighted, setHeaderHighlighted] = useState(false);\n const [footerHighlighted, setFooterHighlighted] = useState(false);\n const [headerOffset, setHeaderOffset] = useState(0);\n\n const componentNodeRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollableNodeRef = useRef<HTMLDivElement | null>(null);\n const contentNodeRef = useRef<HTMLDivElement | null>(null);\n const restoreContainerStylesRef = useRef<null | (() => void)>(null);\n const mouseDownTarget = useRef<HTMLElement>();\n const resizeObserverRef = useRef<ResizeObserver>();\n\n const checkToHasScrollBar = () => {\n if (scrollableNodeRef.current) {\n const scrollExists = hasScrollbar(scrollableNodeRef.current);\n\n setFooterHighlighted(scrollExists);\n setHasScroll(scrollExists);\n }\n };\n\n const isExited = exited || exited === null;\n const shouldRender = keepMounted || open || !isExited;\n\n const getContainer = useCallback(\n () => (container ? container() : document.body) as HTMLElement,\n [container],\n );\n\n const addResizeHandle = useCallback(() => {\n if (!resizeObserverRef.current) return;\n\n if (scrollableNodeRef.current) {\n resizeObserverRef.current.observe(scrollableNodeRef.current);\n }\n if (contentNodeRef.current) {\n resizeObserverRef.current.observe(contentNodeRef.current);\n }\n }, []);\n\n const removeResizeHandle = useCallback(() => resizeObserverRef.current?.disconnect(), []);\n\n const contentRef = useCallback((node: HTMLDivElement) => {\n if (node !== null) {\n contentNodeRef.current = node;\n if (resizeObserverRef.current) {\n resizeObserverRef.current.observe(node);\n }\n checkToHasScrollBar();\n }\n }, []);\n\n const handleScroll = useCallback(() => {\n if (!scrollableNodeRef.current || !componentNodeRef.current) return;\n\n if (hasHeader) {\n setHeaderHighlighted(\n !isScrolledToTop(scrollableNodeRef.current) &&\n componentNodeRef.current.getBoundingClientRect().top - headerOffset <= 1,\n );\n }\n\n if (hasFooter) {\n setFooterHighlighted(\n !isScrolledToBottom(scrollableNodeRef.current) &&\n componentNodeRef.current.getBoundingClientRect().bottom >=\n window.innerHeight - 1,\n );\n }\n }, [hasFooter, hasHeader, headerOffset]);\n\n const handleClose = useCallback<Required<BaseModalProps>['onClose']>(\n (event, reason) => {\n if (iOSLock && os.isIOS()) {\n unlockScroll();\n }\n\n if (onClose) {\n onClose(event, reason);\n }\n\n if (reason === 'backdropClick' && onBackdropClick) {\n onBackdropClick(event as MouseEvent);\n }\n\n if (reason === 'escapeKeyDown' && onEscapeKeyDown) {\n onEscapeKeyDown(event as KeyboardEvent);\n }\n\n return null;\n },\n [onBackdropClick, onClose, onEscapeKeyDown, iOSLock],\n );\n\n const handleBackdropMouseDown = (event: MouseEvent<HTMLElement>) => {\n let clickedOnScrollbar = false;\n const clientWidth = (event.target as HTMLElement)?.clientWidth;\n\n if (event.clientX && clientWidth) {\n // Устанавливаем смещение для абсолютно спозиционированного скроллбара в OSX в 17px.\n const offset = browser.getScrollbarSize() === 0 ? 17 : 0;\n\n clickedOnScrollbar = event.clientX + offset > clientWidth;\n }\n\n if (!disableBackdropClick && !clickedOnScrollbar) {\n mouseDownTarget.current = event.target as HTMLElement;\n }\n };\n\n const handleBackdropMouseUp = (event: MouseEvent<HTMLElement>) => {\n if (\n !disableBackdropClick &&\n event.target === wrapperRef.current &&\n mouseDownTarget.current === wrapperRef.current\n ) {\n handleClose(event, 'backdropClick');\n }\n\n mouseDownTarget.current = undefined;\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n /*\n * Чтобы сохранить дефолтное поведение элементов и событий форм,\n * обработчик не устанавливает event.preventDefault()\n */\n if (event.key !== 'Escape') {\n return;\n }\n\n // Если есть обработчик escape на body\n event.stopPropagation();\n\n if (!disableEscapeKeyDown && handleClose) {\n handleClose(event, 'escapeKeyDown');\n }\n },\n [disableEscapeKeyDown, handleClose],\n );\n\n const getScrollHandler = useCallback(() => {\n if (scrollHandler === 'wrapper') return wrapperRef.current;\n if (scrollHandler === 'content') return componentNodeRef.current;\n\n return scrollHandler.current || wrapperRef.current;\n }, [scrollHandler]);\n\n const handleEntered: Required<TransitionProps>['onEntered'] = useCallback(\n (node, isAppearing) => {\n scrollableNodeRef.current = getScrollHandler();\n\n addResizeHandle();\n\n if (scrollableNodeRef.current) {\n scrollableNodeRef.current.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n if (transitionProps.onEntered) {\n transitionProps.onEntered(node, isAppearing);\n }\n\n if (onMount) onMount();\n },\n [addResizeHandle, getScrollHandler, handleScroll, onMount, transitionProps],\n );\n\n const handleExited: Required<TransitionProps>['onExited'] = useCallback(\n (node) => {\n removeResizeHandle();\n\n setExited(true);\n\n if (scrollableNodeRef.current) {\n scrollableNodeRef.current.removeEventListener('scroll', handleScroll);\n }\n\n if (transitionProps.onExited) {\n transitionProps.onExited(node);\n }\n\n if (onUnmount) onUnmount();\n\n if (restoreContainerStylesRef.current) {\n restoreContainerStylesRef.current();\n }\n },\n [handleScroll, onUnmount, removeResizeHandle, transitionProps],\n );\n\n useEffect(() => {\n if (open && isExited) {\n if (!disableBlockingScroll) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && os.isIOS();\n\n handleContainer(el, shouldIOSLock);\n if (shouldIOSLock) {\n syncHeight();\n lockScroll();\n }\n\n restoreContainerStylesRef.current = () => {\n restoreContainerStylesRef.current = null;\n restoreContainerStyles(el);\n };\n }\n\n setExited(false);\n }\n\n if (!open) {\n unlockScroll();\n }\n }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);\n\n useEffect(() => {\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n\n resizeObserverRef.current = new ResizeObserver(checkToHasScrollBar);\n\n return () => {\n if (restoreContainerStylesRef.current) {\n restoreContainerStylesRef.current();\n }\n\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n };\n }, []);\n\n useEffect(() => {\n if (disableAutoFocus || !open) return;\n\n wrapperRef.current?.focus();\n }, [open, disableAutoFocus]);\n\n const contextValue = useMemo<BaseModalContext>(\n () => ({\n parentRef: wrapperRef,\n componentRef: componentNodeRef,\n hasHeader,\n hasFooter,\n hasScroll,\n headerHighlighted,\n footerHighlighted,\n headerOffset,\n setHeaderOffset,\n contentRef,\n setHasHeader,\n setHasFooter,\n onClose: handleClose,\n }),\n [\n contentRef,\n hasHeader,\n hasFooter,\n hasScroll,\n headerHighlighted,\n footerHighlighted,\n headerOffset,\n setHeaderOffset,\n handleClose,\n ],\n );\n\n const renderContent = () => (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <BaseModalContext.Provider value={contextValue}>\n <FocusLock\n disabled={disableFocusLock || !open}\n returnFocus={!disableRestoreFocus}\n >\n {Backdrop && (\n <Backdrop\n {...backdropProps}\n className={cn(backdropProps.className, styles.backdrop)}\n open={open}\n style={{\n zIndex: computedZIndex,\n }}\n />\n )}\n <div\n {...wrapperProps}\n role='dialog'\n className={cn(\n styles.wrapper,\n wrapperClassName,\n wrapperProps?.className,\n {\n [styles.hidden]: !open && isExited,\n },\n )}\n ref={mergeRefs([\n ref,\n wrapperRef,\n wrapperProps?.ref as Ref<HTMLDivElement>,\n ])}\n onKeyDown={handleKeyDown}\n onMouseDown={handleBackdropMouseDown}\n onMouseUp={handleBackdropMouseUp}\n onWheel={onWheel}\n tabIndex={-1}\n data-test-id={dataTestId}\n style={{\n zIndex: computedZIndex,\n }}\n >\n <CSSTransition\n appear={true}\n timeout={200}\n classNames={styles}\n nodeRef={componentNodeRef}\n {...transitionProps}\n in={open}\n onEntered={handleEntered}\n onExited={handleExited}\n >\n <div\n {...componentDivProps}\n className={cn(\n styles.component,\n className,\n componentDivProps?.className,\n )}\n ref={mergeRefs([\n componentRef,\n componentNodeRef,\n componentDivProps?.ref || null,\n ])}\n >\n <div\n {...contentProps}\n className={cn(\n styles.content,\n contentClassName,\n contentProps?.className,\n {\n [styles.hasFooter]: hasFooter,\n [styles.hasHeader]: hasHeader,\n },\n )}\n ref={contentElementRef}\n >\n {children}\n </div>\n </div>\n </CSSTransition>\n </div>\n </FocusLock>\n </BaseModalContext.Provider>\n )}\n </Stack>\n );\n\n if (!shouldRender) return null;\n\n return usePortal ? (\n <Portal getPortalContainer={container} immediateMount={true}>\n {renderContent()}\n </Portal>\n ) : (\n renderContent()\n );\n },\n);\n\nBaseModal.displayName = 'BaseModal';\nBaseModalContext.displayName = 'BaseModalContext';\n"],"names":["React","forwardRef","DefaultBackdrop","stackingOrder","useState","useRef","hasScrollbar","useCallback","isScrolledToTop","isScrolledToBottom","os","unlockScroll","browser","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","Stack","FocusLock","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
|
package/cssm/Component.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="react-transition-group" />
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import { ComponentType, KeyboardEvent, MouseEvent, MutableRefObject, ReactNode, Ref } from "react";
|
|
1
|
+
import React, { ComponentType, KeyboardEvent, MouseEvent, MutableRefObject, ReactNode, Ref, WheelEvent } from 'react';
|
|
5
2
|
import { TransitionProps } from 'react-transition-group/Transition';
|
|
6
|
-
import { BackdropProps } from
|
|
7
|
-
import { PortalProps } from
|
|
8
|
-
|
|
3
|
+
import { BackdropProps } from '@alfalab/core-components-backdrop';
|
|
4
|
+
import { PortalProps } from '@alfalab/core-components-portal';
|
|
5
|
+
import './matches-polyfill';
|
|
6
|
+
export declare type BaseModalProps = {
|
|
9
7
|
/**
|
|
10
8
|
* Контент
|
|
11
9
|
*/
|
|
@@ -134,12 +132,20 @@ type BaseModalProps = {
|
|
|
134
132
|
* Реф, который должен быть установлен компонентной области
|
|
135
133
|
*/
|
|
136
134
|
componentRef?: MutableRefObject<HTMLDivElement | null>;
|
|
135
|
+
/**
|
|
136
|
+
* Реф контентной области
|
|
137
|
+
*/
|
|
138
|
+
contentElementRef?: MutableRefObject<HTMLDivElement | null>;
|
|
137
139
|
/**
|
|
138
140
|
* Блокирует скролл когда модальное окно открыто. Работает только на iOS.
|
|
139
141
|
*/
|
|
140
142
|
iOSLock?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Хэндлер события прокрутки колесиком
|
|
145
|
+
*/
|
|
146
|
+
onWheel?: (e: WheelEvent<HTMLElement>) => void;
|
|
141
147
|
};
|
|
142
|
-
type BaseModalContext = {
|
|
148
|
+
export declare type BaseModalContext = {
|
|
143
149
|
parentRef: React.RefObject<HTMLDivElement>;
|
|
144
150
|
componentRef: React.RefObject<HTMLDivElement>;
|
|
145
151
|
hasFooter?: boolean;
|
|
@@ -154,6 +160,5 @@ type BaseModalContext = {
|
|
|
154
160
|
setHasFooter: (exists: boolean) => void;
|
|
155
161
|
onClose: Required<BaseModalProps>['onClose'];
|
|
156
162
|
};
|
|
157
|
-
declare const BaseModalContext: React.Context<BaseModalContext>;
|
|
158
|
-
declare const BaseModal: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
|
|
159
|
-
export { BaseModalProps, BaseModalContext, BaseModal };
|
|
163
|
+
export declare const BaseModalContext: React.Context<BaseModalContext>;
|
|
164
|
+
export declare const BaseModal: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
|
package/cssm/Component.js
CHANGED
|
@@ -9,12 +9,12 @@ var mergeRefs = require('react-merge-refs');
|
|
|
9
9
|
var reactTransitionGroup = require('react-transition-group');
|
|
10
10
|
var resizeObserver = require('@juggle/resize-observer');
|
|
11
11
|
var cn = require('classnames');
|
|
12
|
-
var
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var
|
|
16
|
-
var
|
|
17
|
-
var
|
|
12
|
+
var cssm$4 = require('@alfalab/core-components-backdrop/cssm');
|
|
13
|
+
var cssm$2 = require('@alfalab/core-components-portal/cssm');
|
|
14
|
+
var cssm$1 = require('@alfalab/core-components-shared/cssm');
|
|
15
|
+
var cssm$3 = require('@alfalab/core-components-stack/cssm');
|
|
16
|
+
var cssm = require('@alfalab/core-components-stack-context/cssm');
|
|
17
|
+
var lockScroll = require('./helpers/lockScroll.js');
|
|
18
18
|
var utils = require('./utils.js');
|
|
19
19
|
var styles = require('./index.module.css');
|
|
20
20
|
require('./matches-polyfill.js');
|
|
@@ -44,14 +44,14 @@ var BaseModalContext = React__default.default.createContext({
|
|
|
44
44
|
onClose: function () { return null; },
|
|
45
45
|
});
|
|
46
46
|
var BaseModal = React.forwardRef(function (_a, ref) {
|
|
47
|
-
var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ?
|
|
48
|
-
var
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
53
|
-
var
|
|
54
|
-
var
|
|
47
|
+
var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop = _c === void 0 ? cssm$4.Backdrop : _c, _d = _a.backdropProps, backdropProps = _d === void 0 ? {} : _d, _e = _a.transitionProps, transitionProps = _e === void 0 ? {} : _e, disableBackdropClick = _a.disableBackdropClick, _f = _a.disableAutoFocus, disableAutoFocus = _f === void 0 ? false : _f, _g = _a.disableFocusLock, disableFocusLock = _g === void 0 ? false : _g, _h = _a.disableEscapeKeyDown, disableEscapeKeyDown = _h === void 0 ? false : _h, _j = _a.disableRestoreFocus, disableRestoreFocus = _j === void 0 ? false : _j, _k = _a.disableBlockingScroll, disableBlockingScroll = _k === void 0 ? false : _k, _l = _a.keepMounted, keepMounted = _l === void 0 ? false : _l, className = _a.className, contentClassName = _a.contentClassName, wrapperProps = _a.wrapperProps, contentProps = _a.contentProps, componentDivProps = _a.componentDivProps, wrapperClassName = _a.wrapperClassName, onBackdropClick = _a.onBackdropClick, onClose = _a.onClose, onEscapeKeyDown = _a.onEscapeKeyDown, onMount = _a.onMount, onUnmount = _a.onUnmount, dataTestId = _a.dataTestId, _m = _a.zIndex, zIndex = _m === void 0 ? cssm.stackingOrder.MODAL : _m, _o = _a.componentRef, componentRef = _o === void 0 ? null : _o, _p = _a.contentElementRef, contentElementRef = _p === void 0 ? null : _p, _q = _a.usePortal, usePortal = _q === void 0 ? true : _q, _r = _a.iOSLock, iOSLock = _r === void 0 ? false : _r, onWheel = _a.onWheel;
|
|
48
|
+
var _s = React.useState(null), exited = _s[0], setExited = _s[1];
|
|
49
|
+
var _t = React.useState(false), hasScroll = _t[0], setHasScroll = _t[1];
|
|
50
|
+
var _u = React.useState(false), hasHeader = _u[0], setHasHeader = _u[1];
|
|
51
|
+
var _v = React.useState(false), hasFooter = _v[0], setHasFooter = _v[1];
|
|
52
|
+
var _w = React.useState(false), headerHighlighted = _w[0], setHeaderHighlighted = _w[1];
|
|
53
|
+
var _x = React.useState(false), footerHighlighted = _x[0], setFooterHighlighted = _x[1];
|
|
54
|
+
var _y = React.useState(0), headerOffset = _y[0], setHeaderOffset = _y[1];
|
|
55
55
|
var componentNodeRef = React.useRef(null);
|
|
56
56
|
var wrapperRef = React.useRef(null);
|
|
57
57
|
var scrollableNodeRef = React.useRef(null);
|
|
@@ -103,8 +103,8 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
103
103
|
}
|
|
104
104
|
}, [hasFooter, hasHeader, headerOffset]);
|
|
105
105
|
var handleClose = React.useCallback(function (event, reason) {
|
|
106
|
-
if (iOSLock &&
|
|
107
|
-
|
|
106
|
+
if (iOSLock && cssm$1.os.isIOS()) {
|
|
107
|
+
lockScroll.unlockScroll();
|
|
108
108
|
}
|
|
109
109
|
if (onClose) {
|
|
110
110
|
onClose(event, reason);
|
|
@@ -123,7 +123,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
123
123
|
var clientWidth = (_a = event.target) === null || _a === void 0 ? void 0 : _a.clientWidth;
|
|
124
124
|
if (event.clientX && clientWidth) {
|
|
125
125
|
// Устанавливаем смещение для абсолютно спозиционированного скроллбара в OSX в 17px.
|
|
126
|
-
var offset =
|
|
126
|
+
var offset = cssm$1.browser.getScrollbarSize() === 0 ? 17 : 0;
|
|
127
127
|
clickedOnScrollbar = event.clientX + offset > clientWidth;
|
|
128
128
|
}
|
|
129
129
|
if (!disableBackdropClick && !clickedOnScrollbar) {
|
|
@@ -191,11 +191,11 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
191
191
|
if (open && isExited) {
|
|
192
192
|
if (!disableBlockingScroll) {
|
|
193
193
|
var el_1 = getContainer();
|
|
194
|
-
var shouldIOSLock = iOSLock &&
|
|
194
|
+
var shouldIOSLock = iOSLock && cssm$1.os.isIOS();
|
|
195
195
|
utils.handleContainer(el_1, shouldIOSLock);
|
|
196
196
|
if (shouldIOSLock) {
|
|
197
|
-
|
|
198
|
-
|
|
197
|
+
lockScroll.syncHeight();
|
|
198
|
+
lockScroll.lockScroll();
|
|
199
199
|
}
|
|
200
200
|
restoreContainerStylesRef.current = function () {
|
|
201
201
|
restoreContainerStylesRef.current = null;
|
|
@@ -205,7 +205,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
205
205
|
setExited(false);
|
|
206
206
|
}
|
|
207
207
|
if (!open) {
|
|
208
|
-
|
|
208
|
+
lockScroll.unlockScroll();
|
|
209
209
|
}
|
|
210
210
|
}, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
|
|
211
211
|
React.useEffect(function () {
|
|
@@ -251,7 +251,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
251
251
|
setHeaderOffset,
|
|
252
252
|
handleClose,
|
|
253
253
|
]);
|
|
254
|
-
var renderContent = function () { return (React__default.default.createElement(
|
|
254
|
+
var renderContent = function () { return (React__default.default.createElement(cssm$3.Stack, { value: zIndex }, function (computedZIndex) {
|
|
255
255
|
var _a, _b;
|
|
256
256
|
return (React__default.default.createElement(BaseModalContext.Provider, { value: contextValue },
|
|
257
257
|
React__default.default.createElement(FocusLock__default.default, { disabled: disableFocusLock || !open, returnFocus: !disableRestoreFocus },
|
|
@@ -264,7 +264,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
264
264
|
ref,
|
|
265
265
|
wrapperRef,
|
|
266
266
|
wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.ref,
|
|
267
|
-
]), onKeyDown: handleKeyDown, onMouseDown: handleBackdropMouseDown, onMouseUp: handleBackdropMouseUp, tabIndex: -1, "data-test-id": dataTestId, style: {
|
|
267
|
+
]), onKeyDown: handleKeyDown, onMouseDown: handleBackdropMouseDown, onMouseUp: handleBackdropMouseUp, onWheel: onWheel, tabIndex: -1, "data-test-id": dataTestId, style: {
|
|
268
268
|
zIndex: computedZIndex,
|
|
269
269
|
} }),
|
|
270
270
|
React__default.default.createElement(reactTransitionGroup.CSSTransition, tslib.__assign({ appear: true, timeout: 200, classNames: styles__default.default, nodeRef: componentNodeRef }, transitionProps, { in: open, onEntered: handleEntered, onExited: handleExited }),
|
|
@@ -276,14 +276,15 @@ var BaseModal = React.forwardRef(function (_a, ref) {
|
|
|
276
276
|
React__default.default.createElement("div", tslib.__assign({}, contentProps, { className: cn__default.default(styles__default.default.content, contentClassName, contentProps === null || contentProps === void 0 ? void 0 : contentProps.className, (_b = {},
|
|
277
277
|
_b[styles__default.default.hasFooter] = hasFooter,
|
|
278
278
|
_b[styles__default.default.hasHeader] = hasHeader,
|
|
279
|
-
_b)) }), children)))))));
|
|
279
|
+
_b)), ref: contentElementRef }), children)))))));
|
|
280
280
|
})); };
|
|
281
281
|
if (!shouldRender)
|
|
282
282
|
return null;
|
|
283
|
-
return usePortal ? (React__default.default.createElement(
|
|
283
|
+
return usePortal ? (React__default.default.createElement(cssm$2.Portal, { getPortalContainer: container, immediateMount: true }, renderContent())) : (renderContent());
|
|
284
284
|
});
|
|
285
285
|
BaseModal.displayName = 'BaseModal';
|
|
286
286
|
BaseModalContext.displayName = 'BaseModalContext';
|
|
287
287
|
|
|
288
288
|
exports.BaseModal = BaseModal;
|
|
289
289
|
exports.BaseModalContext = BaseModalContext;
|
|
290
|
+
//# sourceMappingURL=Component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n ComponentType,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n ReactNode,\n Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { CSSTransition } from 'react-transition-group';\nimport { TransitionProps } from 'react-transition-group/Transition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, PortalProps } from '@alfalab/core-components-portal';\nimport { browser, os } from '@alfalab/core-components-shared';\nimport { Stack } from '@alfalab/core-components-stack';\nimport { stackingOrder } from '@alfalab/core-components-stack-context';\n\nimport { lockScroll, syncHeight, unlockScroll } from './helpers/lockScroll';\nimport {\n handleContainer,\n hasScrollbar,\n isScrolledToBottom,\n isScrolledToTop,\n restoreContainerStyles,\n} from './utils';\n\nimport styles from './index.module.css';\n\n// TODO Без полифила крашится FocusLock в IE11. Выпилить в будущем!!!.\nimport './matches-polyfill';\n\nexport type BaseModalProps = {\n /**\n * Контент\n */\n children?: ReactNode;\n\n /**\n * Компонент бэкдропа\n */\n Backdrop?: ComponentType<BackdropProps>;\n\n /**\n * Свойства для Бэкдропа\n */\n backdropProps?: Partial<BackdropProps> & Record<string, unknown>;\n\n /**\n * Нода, компонент или функция возвращающая их\n *\n * Контейнер к которому будут добавляться порталы\n */\n container?: PortalProps['getPortalContainer'];\n\n /**\n * Отключает автоматический перевод фокуса на модалку при открытии\n * @default false\n */\n disableAutoFocus?: boolean;\n\n /**\n * Отключает ловушку фокуса\n * @default false\n */\n disableFocusLock?: boolean;\n\n /**\n * Отключает восстановление фокуса на предыдущем элементе после закрытия модалки\n * @default false\n */\n disableRestoreFocus?: boolean;\n\n /**\n * Отключает вызов `callback` при нажатии Escape\n * @default false\n */\n disableEscapeKeyDown?: boolean;\n\n /**\n * Отключает вызов `callback` при клике на бэкдроп\n * @default false\n */\n disableBackdropClick?: boolean;\n\n /**\n * Отключает блокировку скролла при открытии модального окна\n * @default false\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Содержимое модалки всегда в DOM\n * @default false\n */\n keepMounted?: boolean;\n\n /**\n * Управление видимостью модалки\n */\n open: boolean;\n\n /**\n * Дополнительный класс\n */\n className?: string;\n\n /**\n * Дополнительный класс\n */\n contentClassName?: string;\n\n /**\n * Дополнительные пропсы на dialog wrapper\n */\n wrapperProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n /**\n * Дополнительные пропсы на обертку контента\n */\n contentProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n /**\n * Дополнительные пропсы на компонентную обертку контента\n */\n componentDivProps?: React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n >;\n\n /**\n * Дополнительный класс для обертки (Modal)\n */\n wrapperClassName?: string;\n\n /**\n * Обработчик скролла контента\n */\n scrollHandler?: 'wrapper' | 'content' | MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Пропсы для анимации (CSSTransition)\n */\n transitionProps?: Partial<TransitionProps>;\n\n /**\n * Рендерить ли в контейнер через портал.\n * @default true\n */\n usePortal?: boolean;\n\n /**\n * Обработчик события нажатия на бэкдроп\n */\n onBackdropClick?: (event: MouseEvent) => void;\n\n /**\n * Обработчик события нажатия на Escape\n *\n * Если `disableEscapeKeyDown` - false и модальное окно в фокусе\n */\n onEscapeKeyDown?: (event: KeyboardEvent) => void;\n\n /**\n * Обработчик закрытия\n */\n onClose?: (\n event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>,\n reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick',\n ) => void;\n\n /**\n * Обработчик события onEntered компонента Transition\n */\n onMount?: () => void;\n\n /**\n * Обработчик события onExited компонента Transition\n */\n onUnmount?: () => void;\n\n /**\n * Идентификатор для систем автоматизированного тестирования\n */\n dataTestId?: string;\n\n /**\n * z-index компонента\n */\n zIndex?: number;\n\n /**\n * Реф, который должен быть установлен компонентной области\n */\n componentRef?: MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Реф контентной области\n */\n contentElementRef?: MutableRefObject<HTMLDivElement | null>;\n\n /**\n * Блокирует скролл когда модальное окно открыто. Работает только на iOS.\n */\n iOSLock?: boolean;\n\n /**\n * Хэндлер события прокрутки колесиком\n */\n onWheel?: (e: WheelEvent<HTMLElement>) => void;\n};\n\nexport type BaseModalContext = {\n parentRef: React.RefObject<HTMLDivElement>;\n componentRef: React.RefObject<HTMLDivElement>;\n hasFooter?: boolean;\n hasHeader?: boolean;\n hasScroll?: boolean;\n headerHighlighted?: boolean;\n footerHighlighted?: boolean;\n headerOffset?: number;\n setHeaderOffset: (offset: number) => void;\n contentRef: Ref<HTMLElement>;\n setHasHeader: (exists: boolean) => void;\n setHasFooter: (exists: boolean) => void;\n onClose: Required<BaseModalProps>['onClose'];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport const BaseModalContext = React.createContext<BaseModalContext>({\n parentRef: { current: null },\n componentRef: { current: null },\n hasFooter: false,\n hasHeader: false,\n hasScroll: false,\n headerHighlighted: false,\n footerHighlighted: false,\n headerOffset: 0,\n setHeaderOffset: () => null,\n contentRef: () => null,\n setHasHeader: () => null,\n setHasFooter: () => null,\n onClose: () => null,\n});\n\nexport const BaseModal = forwardRef<HTMLDivElement, BaseModalProps>(\n (\n {\n open,\n container,\n children,\n scrollHandler = 'wrapper',\n Backdrop = DefaultBackdrop,\n backdropProps = {},\n transitionProps = {},\n disableBackdropClick,\n disableAutoFocus = false,\n disableFocusLock = false,\n disableEscapeKeyDown = false,\n disableRestoreFocus = false,\n disableBlockingScroll = false,\n keepMounted = false,\n className,\n contentClassName,\n wrapperProps,\n contentProps,\n componentDivProps,\n wrapperClassName,\n onBackdropClick,\n onClose,\n onEscapeKeyDown,\n onMount,\n onUnmount,\n dataTestId,\n zIndex = stackingOrder.MODAL,\n componentRef = null,\n contentElementRef = null,\n usePortal = true,\n iOSLock = false,\n onWheel,\n },\n ref,\n ) => {\n const [exited, setExited] = useState<boolean | null>(null);\n const [hasScroll, setHasScroll] = useState(false);\n const [hasHeader, setHasHeader] = useState(false);\n const [hasFooter, setHasFooter] = useState(false);\n const [headerHighlighted, setHeaderHighlighted] = useState(false);\n const [footerHighlighted, setFooterHighlighted] = useState(false);\n const [headerOffset, setHeaderOffset] = useState(0);\n\n const componentNodeRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const scrollableNodeRef = useRef<HTMLDivElement | null>(null);\n const contentNodeRef = useRef<HTMLDivElement | null>(null);\n const restoreContainerStylesRef = useRef<null | (() => void)>(null);\n const mouseDownTarget = useRef<HTMLElement>();\n const resizeObserverRef = useRef<ResizeObserver>();\n\n const checkToHasScrollBar = () => {\n if (scrollableNodeRef.current) {\n const scrollExists = hasScrollbar(scrollableNodeRef.current);\n\n setFooterHighlighted(scrollExists);\n setHasScroll(scrollExists);\n }\n };\n\n const isExited = exited || exited === null;\n const shouldRender = keepMounted || open || !isExited;\n\n const getContainer = useCallback(\n () => (container ? container() : document.body) as HTMLElement,\n [container],\n );\n\n const addResizeHandle = useCallback(() => {\n if (!resizeObserverRef.current) return;\n\n if (scrollableNodeRef.current) {\n resizeObserverRef.current.observe(scrollableNodeRef.current);\n }\n if (contentNodeRef.current) {\n resizeObserverRef.current.observe(contentNodeRef.current);\n }\n }, []);\n\n const removeResizeHandle = useCallback(() => resizeObserverRef.current?.disconnect(), []);\n\n const contentRef = useCallback((node: HTMLDivElement) => {\n if (node !== null) {\n contentNodeRef.current = node;\n if (resizeObserverRef.current) {\n resizeObserverRef.current.observe(node);\n }\n checkToHasScrollBar();\n }\n }, []);\n\n const handleScroll = useCallback(() => {\n if (!scrollableNodeRef.current || !componentNodeRef.current) return;\n\n if (hasHeader) {\n setHeaderHighlighted(\n !isScrolledToTop(scrollableNodeRef.current) &&\n componentNodeRef.current.getBoundingClientRect().top - headerOffset <= 1,\n );\n }\n\n if (hasFooter) {\n setFooterHighlighted(\n !isScrolledToBottom(scrollableNodeRef.current) &&\n componentNodeRef.current.getBoundingClientRect().bottom >=\n window.innerHeight - 1,\n );\n }\n }, [hasFooter, hasHeader, headerOffset]);\n\n const handleClose = useCallback<Required<BaseModalProps>['onClose']>(\n (event, reason) => {\n if (iOSLock && os.isIOS()) {\n unlockScroll();\n }\n\n if (onClose) {\n onClose(event, reason);\n }\n\n if (reason === 'backdropClick' && onBackdropClick) {\n onBackdropClick(event as MouseEvent);\n }\n\n if (reason === 'escapeKeyDown' && onEscapeKeyDown) {\n onEscapeKeyDown(event as KeyboardEvent);\n }\n\n return null;\n },\n [onBackdropClick, onClose, onEscapeKeyDown, iOSLock],\n );\n\n const handleBackdropMouseDown = (event: MouseEvent<HTMLElement>) => {\n let clickedOnScrollbar = false;\n const clientWidth = (event.target as HTMLElement)?.clientWidth;\n\n if (event.clientX && clientWidth) {\n // Устанавливаем смещение для абсолютно спозиционированного скроллбара в OSX в 17px.\n const offset = browser.getScrollbarSize() === 0 ? 17 : 0;\n\n clickedOnScrollbar = event.clientX + offset > clientWidth;\n }\n\n if (!disableBackdropClick && !clickedOnScrollbar) {\n mouseDownTarget.current = event.target as HTMLElement;\n }\n };\n\n const handleBackdropMouseUp = (event: MouseEvent<HTMLElement>) => {\n if (\n !disableBackdropClick &&\n event.target === wrapperRef.current &&\n mouseDownTarget.current === wrapperRef.current\n ) {\n handleClose(event, 'backdropClick');\n }\n\n mouseDownTarget.current = undefined;\n };\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n /*\n * Чтобы сохранить дефолтное поведение элементов и событий форм,\n * обработчик не устанавливает event.preventDefault()\n */\n if (event.key !== 'Escape') {\n return;\n }\n\n // Если есть обработчик escape на body\n event.stopPropagation();\n\n if (!disableEscapeKeyDown && handleClose) {\n handleClose(event, 'escapeKeyDown');\n }\n },\n [disableEscapeKeyDown, handleClose],\n );\n\n const getScrollHandler = useCallback(() => {\n if (scrollHandler === 'wrapper') return wrapperRef.current;\n if (scrollHandler === 'content') return componentNodeRef.current;\n\n return scrollHandler.current || wrapperRef.current;\n }, [scrollHandler]);\n\n const handleEntered: Required<TransitionProps>['onEntered'] = useCallback(\n (node, isAppearing) => {\n scrollableNodeRef.current = getScrollHandler();\n\n addResizeHandle();\n\n if (scrollableNodeRef.current) {\n scrollableNodeRef.current.addEventListener('scroll', handleScroll);\n handleScroll();\n }\n\n if (transitionProps.onEntered) {\n transitionProps.onEntered(node, isAppearing);\n }\n\n if (onMount) onMount();\n },\n [addResizeHandle, getScrollHandler, handleScroll, onMount, transitionProps],\n );\n\n const handleExited: Required<TransitionProps>['onExited'] = useCallback(\n (node) => {\n removeResizeHandle();\n\n setExited(true);\n\n if (scrollableNodeRef.current) {\n scrollableNodeRef.current.removeEventListener('scroll', handleScroll);\n }\n\n if (transitionProps.onExited) {\n transitionProps.onExited(node);\n }\n\n if (onUnmount) onUnmount();\n\n if (restoreContainerStylesRef.current) {\n restoreContainerStylesRef.current();\n }\n },\n [handleScroll, onUnmount, removeResizeHandle, transitionProps],\n );\n\n useEffect(() => {\n if (open && isExited) {\n if (!disableBlockingScroll) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && os.isIOS();\n\n handleContainer(el, shouldIOSLock);\n if (shouldIOSLock) {\n syncHeight();\n lockScroll();\n }\n\n restoreContainerStylesRef.current = () => {\n restoreContainerStylesRef.current = null;\n restoreContainerStyles(el);\n };\n }\n\n setExited(false);\n }\n\n if (!open) {\n unlockScroll();\n }\n }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);\n\n useEffect(() => {\n const ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;\n\n resizeObserverRef.current = new ResizeObserver(checkToHasScrollBar);\n\n return () => {\n if (restoreContainerStylesRef.current) {\n restoreContainerStylesRef.current();\n }\n\n if (resizeObserverRef.current) {\n resizeObserverRef.current.disconnect();\n }\n };\n }, []);\n\n useEffect(() => {\n if (disableAutoFocus || !open) return;\n\n wrapperRef.current?.focus();\n }, [open, disableAutoFocus]);\n\n const contextValue = useMemo<BaseModalContext>(\n () => ({\n parentRef: wrapperRef,\n componentRef: componentNodeRef,\n hasHeader,\n hasFooter,\n hasScroll,\n headerHighlighted,\n footerHighlighted,\n headerOffset,\n setHeaderOffset,\n contentRef,\n setHasHeader,\n setHasFooter,\n onClose: handleClose,\n }),\n [\n contentRef,\n hasHeader,\n hasFooter,\n hasScroll,\n headerHighlighted,\n footerHighlighted,\n headerOffset,\n setHeaderOffset,\n handleClose,\n ],\n );\n\n const renderContent = () => (\n <Stack value={zIndex}>\n {(computedZIndex) => (\n <BaseModalContext.Provider value={contextValue}>\n <FocusLock\n disabled={disableFocusLock || !open}\n returnFocus={!disableRestoreFocus}\n >\n {Backdrop && (\n <Backdrop\n {...backdropProps}\n className={cn(backdropProps.className, styles.backdrop)}\n open={open}\n style={{\n zIndex: computedZIndex,\n }}\n />\n )}\n <div\n {...wrapperProps}\n role='dialog'\n className={cn(\n styles.wrapper,\n wrapperClassName,\n wrapperProps?.className,\n {\n [styles.hidden]: !open && isExited,\n },\n )}\n ref={mergeRefs([\n ref,\n wrapperRef,\n wrapperProps?.ref as Ref<HTMLDivElement>,\n ])}\n onKeyDown={handleKeyDown}\n onMouseDown={handleBackdropMouseDown}\n onMouseUp={handleBackdropMouseUp}\n onWheel={onWheel}\n tabIndex={-1}\n data-test-id={dataTestId}\n style={{\n zIndex: computedZIndex,\n }}\n >\n <CSSTransition\n appear={true}\n timeout={200}\n classNames={styles}\n nodeRef={componentNodeRef}\n {...transitionProps}\n in={open}\n onEntered={handleEntered}\n onExited={handleExited}\n >\n <div\n {...componentDivProps}\n className={cn(\n styles.component,\n className,\n componentDivProps?.className,\n )}\n ref={mergeRefs([\n componentRef,\n componentNodeRef,\n componentDivProps?.ref || null,\n ])}\n >\n <div\n {...contentProps}\n className={cn(\n styles.content,\n contentClassName,\n contentProps?.className,\n {\n [styles.hasFooter]: hasFooter,\n [styles.hasHeader]: hasHeader,\n },\n )}\n ref={contentElementRef}\n >\n {children}\n </div>\n </div>\n </CSSTransition>\n </div>\n </FocusLock>\n </BaseModalContext.Provider>\n )}\n </Stack>\n );\n\n if (!shouldRender) return null;\n\n return usePortal ? (\n <Portal getPortalContainer={container} immediateMount={true}>\n {renderContent()}\n </Portal>\n ) : (\n renderContent()\n );\n },\n);\n\nBaseModal.displayName = 'BaseModal';\nBaseModalContext.displayName = 'BaseModalContext';\n"],"names":["React","forwardRef","DefaultBackdrop","stackingOrder","useState","useRef","hasScrollbar","useCallback","isScrolledToTop","isScrolledToBottom","os","unlockScroll","browser","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","Stack","FocusLock","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export
|
|
1
|
+
/**
|
|
2
|
+
* Хелпер для блокирования скроллинга в iOS
|
|
3
|
+
* В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
|
|
4
|
+
*/
|
|
5
|
+
export declare const isScrollLocked: () => boolean;
|
|
6
|
+
export declare const lockScroll: () => void;
|
|
7
|
+
export declare const unlockScroll: () => void;
|
|
8
|
+
export declare const syncHeight: () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lockScroll.js","sources":["../../src/helpers/lockScroll.ts"],"sourcesContent":["/**\n * Хелпер для блокирования скроллинга в iOS\n * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему\n */\n\nlet scrollY: number;\n\nexport const isScrollLocked = () => document.body.classList.contains('is-locked');\n\nexport const lockScroll = () => {\n scrollY = window.scrollY;\n document.body.classList.add('is-locked');\n};\n\nexport const unlockScroll = () => {\n if (!isScrollLocked()) return;\n\n document.body.classList.remove('is-locked');\n window.scrollTo(0, scrollY);\n};\n\nexport const syncHeight = () => {\n document.body.style.setProperty('--window-inner-scrollY', `${window.scrollY}px`);\n};\n"],"names":[],"mappings":";;;;AAAA;;;AAGG;AAEH,IAAI,OAAe;AAEN,IAAA,cAAc,GAAG,YAAM,EAAA,OAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;AAEpE,IAAA,UAAU,GAAG,YAAA;AACtB,IAAA,OAAO,GAAG,MAAM,CAAC,OAAO;IACxB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;AAC5C;AAEa,IAAA,YAAY,GAAG,YAAA;IACxB,IAAI,CAAC,cAAc,EAAE;QAAE;IAEvB,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;AAC3C,IAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;AAC/B;AAEa,IAAA,UAAU,GAAG,YAAA;AACtB,IAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,EAAE,UAAG,MAAM,CAAC,OAAO,EAAA,IAAA,CAAI,CAAC;AACpF;;;;;;;"}
|
package/cssm/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
export * from
|
|
3
|
-
export * from
|
|
1
|
+
export * from './Component';
|
|
2
|
+
export * from './utils';
|
|
3
|
+
export * from './helpers/lockScroll';
|
package/cssm/index.js
CHANGED
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var Component = require('./Component.js');
|
|
6
6
|
var utils = require('./utils.js');
|
|
7
|
-
var
|
|
7
|
+
var lockScroll = require('./helpers/lockScroll.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
@@ -15,7 +15,8 @@ exports.hasScrollbar = utils.hasScrollbar;
|
|
|
15
15
|
exports.isScrolledToBottom = utils.isScrolledToBottom;
|
|
16
16
|
exports.isScrolledToTop = utils.isScrolledToTop;
|
|
17
17
|
exports.restoreContainerStyles = utils.restoreContainerStyles;
|
|
18
|
-
exports.isScrollLocked =
|
|
19
|
-
exports.lockScroll =
|
|
20
|
-
exports.syncHeight =
|
|
21
|
-
exports.unlockScroll =
|
|
18
|
+
exports.isScrollLocked = lockScroll.isScrollLocked;
|
|
19
|
+
exports.lockScroll = lockScroll.lockScroll;
|
|
20
|
+
exports.syncHeight = lockScroll.syncHeight;
|
|
21
|
+
exports.unlockScroll = lockScroll.unlockScroll;
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
|