@alfalab/core-components-base-modal 6.0.0 → 6.1.0-snapshot-92b8690

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.
@@ -0,0 +1,164 @@
1
+ import React, { ComponentType, KeyboardEvent, MouseEvent, MutableRefObject, ReactNode, Ref, WheelEvent } from 'react';
2
+ import { CSSTransitionProps } from 'react-transition-group/CSSTransition';
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 = {
7
+ /**
8
+ * Контент
9
+ */
10
+ children?: ReactNode;
11
+ /**
12
+ * Компонент бэкдропа
13
+ */
14
+ Backdrop?: ComponentType<BackdropProps>;
15
+ /**
16
+ * Свойства для Бэкдропа
17
+ */
18
+ backdropProps?: Partial<BackdropProps> & Record<string, unknown>;
19
+ /**
20
+ * Нода, компонент или функция возвращающая их
21
+ *
22
+ * Контейнер к которому будут добавляться порталы
23
+ */
24
+ container?: PortalProps['getPortalContainer'];
25
+ /**
26
+ * Отключает автоматический перевод фокуса на модалку при открытии
27
+ * @default false
28
+ */
29
+ disableAutoFocus?: boolean;
30
+ /**
31
+ * Отключает ловушку фокуса
32
+ * @default false
33
+ */
34
+ disableFocusLock?: boolean;
35
+ /**
36
+ * Отключает восстановление фокуса на предыдущем элементе после закрытия модалки
37
+ * @default false
38
+ */
39
+ disableRestoreFocus?: boolean;
40
+ /**
41
+ * Отключает вызов `callback` при нажатии Escape
42
+ * @default false
43
+ */
44
+ disableEscapeKeyDown?: boolean;
45
+ /**
46
+ * Отключает вызов `callback` при клике на бэкдроп
47
+ * @default false
48
+ */
49
+ disableBackdropClick?: boolean;
50
+ /**
51
+ * Отключает блокировку скролла при открытии модального окна
52
+ * @default false
53
+ */
54
+ disableBlockingScroll?: boolean;
55
+ /**
56
+ * Содержимое модалки всегда в DOM
57
+ * @default false
58
+ */
59
+ keepMounted?: boolean;
60
+ /**
61
+ * Управление видимостью модалки
62
+ */
63
+ open: boolean;
64
+ /**
65
+ * Дополнительный класс
66
+ */
67
+ className?: string;
68
+ /**
69
+ * Дополнительный класс
70
+ */
71
+ contentClassName?: string;
72
+ /**
73
+ * Дополнительные пропсы на dialog wrapper
74
+ */
75
+ wrapperProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
76
+ /**
77
+ * Дополнительные пропсы на обертку контента
78
+ */
79
+ contentProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
80
+ /**
81
+ * Дополнительные пропсы на компонентную обертку контента
82
+ */
83
+ componentDivProps?: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>;
84
+ /**
85
+ * Дополнительный класс для обертки (Modal)
86
+ */
87
+ wrapperClassName?: string;
88
+ /**
89
+ * Обработчик скролла контента
90
+ */
91
+ scrollHandler?: 'wrapper' | 'content' | MutableRefObject<HTMLDivElement | null>;
92
+ /**
93
+ * Пропсы для анимации (CSSTransition)
94
+ */
95
+ transitionProps?: Partial<CSSTransitionProps>;
96
+ /**
97
+ * Рендерить ли в контейнер через портал.
98
+ * @default true
99
+ */
100
+ usePortal?: boolean;
101
+ /**
102
+ * Обработчик события нажатия на бэкдроп
103
+ */
104
+ onBackdropClick?: (event: MouseEvent) => void;
105
+ /**
106
+ * Обработчик события нажатия на Escape
107
+ *
108
+ * Если `disableEscapeKeyDown` - false и модальное окно в фокусе
109
+ */
110
+ onEscapeKeyDown?: (event: KeyboardEvent) => void;
111
+ /**
112
+ * Обработчик закрытия
113
+ */
114
+ onClose?: (event: MouseEvent<HTMLElement> | KeyboardEvent<HTMLElement>, reason?: 'backdropClick' | 'escapeKeyDown' | 'closerClick') => void;
115
+ /**
116
+ * Обработчик события onEntered компонента Transition
117
+ */
118
+ onMount?: () => void;
119
+ /**
120
+ * Обработчик события onExited компонента Transition
121
+ */
122
+ onUnmount?: () => void;
123
+ /**
124
+ * Идентификатор для систем автоматизированного тестирования
125
+ */
126
+ dataTestId?: string;
127
+ /**
128
+ * z-index компонента
129
+ */
130
+ zIndex?: number;
131
+ /**
132
+ * Реф, который должен быть установлен компонентной области
133
+ */
134
+ componentRef?: MutableRefObject<HTMLDivElement | null>;
135
+ /**
136
+ * Реф контентной области
137
+ */
138
+ contentElementRef?: MutableRefObject<HTMLDivElement | null>;
139
+ /**
140
+ * Блокирует скролл когда модальное окно открыто. Работает только на iOS.
141
+ */
142
+ iOSLock?: boolean;
143
+ /**
144
+ * Хэндлер события прокрутки колесиком
145
+ */
146
+ onWheel?: (e: WheelEvent<HTMLElement>) => void;
147
+ };
148
+ export declare type BaseModalContext = {
149
+ parentRef: React.RefObject<HTMLDivElement>;
150
+ componentRef: React.RefObject<HTMLDivElement>;
151
+ hasFooter?: boolean;
152
+ hasHeader?: boolean;
153
+ hasScroll?: boolean;
154
+ headerHighlighted?: boolean;
155
+ footerHighlighted?: boolean;
156
+ headerOffset?: number;
157
+ setHeaderOffset: (offset: number) => void;
158
+ contentRef: Ref<HTMLElement>;
159
+ setHasHeader: (exists: boolean) => void;
160
+ setHasFooter: (exists: boolean) => void;
161
+ onClose: Required<BaseModalProps>['onClose'];
162
+ };
163
+ export declare const BaseModalContext: React.Context<BaseModalContext>;
164
+ export declare const BaseModal: React.ForwardRefExoticComponent<BaseModalProps & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,289 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var tslib = require('tslib');
6
+ var React = require('react');
7
+ var FocusLock = require('react-focus-lock');
8
+ var mergeRefs = require('react-merge-refs');
9
+ var reactTransitionGroup = require('react-transition-group');
10
+ var resizeObserver = require('@juggle/resize-observer');
11
+ var cn = require('classnames');
12
+ var dynamicMixins$4 = require('@alfalab/core-components-backdrop/dynamic-mixins');
13
+ var dynamicMixins$2 = require('@alfalab/core-components-portal/dynamic-mixins');
14
+ var dynamicMixins$1 = require('@alfalab/core-components-shared/dynamic-mixins');
15
+ var dynamicMixins$3 = require('@alfalab/core-components-stack/dynamic-mixins');
16
+ var dynamicMixins = require('@alfalab/core-components-stack-context/dynamic-mixins');
17
+ var lockScroll = require('./helpers/lockScroll.js');
18
+ var utils = require('./utils.js');
19
+ var index_module = require('./index.module.css.js');
20
+ require('./matches-polyfill.js');
21
+
22
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
23
+
24
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
25
+ var FocusLock__default = /*#__PURE__*/_interopDefaultCompat(FocusLock);
26
+ var mergeRefs__default = /*#__PURE__*/_interopDefaultCompat(mergeRefs);
27
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
28
+
29
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
30
+ var BaseModalContext = React__default.default.createContext({
31
+ parentRef: { current: null },
32
+ componentRef: { current: null },
33
+ hasFooter: false,
34
+ hasHeader: false,
35
+ hasScroll: false,
36
+ headerHighlighted: false,
37
+ footerHighlighted: false,
38
+ headerOffset: 0,
39
+ setHeaderOffset: function () { return null; },
40
+ contentRef: function () { return null; },
41
+ setHasHeader: function () { return null; },
42
+ setHasFooter: function () { return null; },
43
+ onClose: function () { return null; },
44
+ });
45
+ var BaseModal = React.forwardRef(function (_a, ref) {
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 ? dynamicMixins$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 ? dynamicMixins.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];
54
+ var componentNodeRef = React.useRef(null);
55
+ var wrapperRef = React.useRef(null);
56
+ var scrollableNodeRef = React.useRef(null);
57
+ var contentNodeRef = React.useRef(null);
58
+ var restoreContainerStylesRef = React.useRef(null);
59
+ var mouseDownTarget = React.useRef();
60
+ var resizeObserverRef = React.useRef();
61
+ var checkToHasScrollBar = function () {
62
+ if (scrollableNodeRef.current) {
63
+ var scrollExists = utils.hasScrollbar(scrollableNodeRef.current);
64
+ setFooterHighlighted(scrollExists);
65
+ setHasScroll(scrollExists);
66
+ }
67
+ };
68
+ var isExited = exited || exited === null;
69
+ var shouldRender = keepMounted || open || !isExited;
70
+ var getContainer = React.useCallback(function () { return (container ? container() : document.body); }, [container]);
71
+ var addResizeHandle = React.useCallback(function () {
72
+ if (!resizeObserverRef.current)
73
+ return;
74
+ if (scrollableNodeRef.current) {
75
+ resizeObserverRef.current.observe(scrollableNodeRef.current);
76
+ }
77
+ if (contentNodeRef.current) {
78
+ resizeObserverRef.current.observe(contentNodeRef.current);
79
+ }
80
+ }, []);
81
+ var removeResizeHandle = React.useCallback(function () { var _a; return (_a = resizeObserverRef.current) === null || _a === void 0 ? void 0 : _a.disconnect(); }, []);
82
+ var contentRef = React.useCallback(function (node) {
83
+ if (node !== null) {
84
+ contentNodeRef.current = node;
85
+ if (resizeObserverRef.current) {
86
+ resizeObserverRef.current.observe(node);
87
+ }
88
+ checkToHasScrollBar();
89
+ }
90
+ }, []);
91
+ var handleScroll = React.useCallback(function () {
92
+ if (!scrollableNodeRef.current || !componentNodeRef.current)
93
+ return;
94
+ if (hasHeader) {
95
+ setHeaderHighlighted(!utils.isScrolledToTop(scrollableNodeRef.current) &&
96
+ componentNodeRef.current.getBoundingClientRect().top - headerOffset <= 1);
97
+ }
98
+ if (hasFooter) {
99
+ setFooterHighlighted(!utils.isScrolledToBottom(scrollableNodeRef.current) &&
100
+ componentNodeRef.current.getBoundingClientRect().bottom >=
101
+ window.innerHeight - 1);
102
+ }
103
+ }, [hasFooter, hasHeader, headerOffset]);
104
+ var handleClose = React.useCallback(function (event, reason) {
105
+ if (iOSLock && dynamicMixins$1.os.isIOS()) {
106
+ lockScroll.unlockScroll();
107
+ }
108
+ if (onClose) {
109
+ onClose(event, reason);
110
+ }
111
+ if (reason === 'backdropClick' && onBackdropClick) {
112
+ onBackdropClick(event);
113
+ }
114
+ if (reason === 'escapeKeyDown' && onEscapeKeyDown) {
115
+ onEscapeKeyDown(event);
116
+ }
117
+ return null;
118
+ }, [onBackdropClick, onClose, onEscapeKeyDown, iOSLock]);
119
+ var handleBackdropMouseDown = function (event) {
120
+ var _a;
121
+ var clickedOnScrollbar = false;
122
+ var clientWidth = (_a = event.target) === null || _a === void 0 ? void 0 : _a.clientWidth;
123
+ if (event.clientX && clientWidth) {
124
+ // Устанавливаем смещение для абсолютно спозиционированного скроллбара в OSX в 17px.
125
+ var offset = dynamicMixins$1.browser.getScrollbarSize() === 0 ? 17 : 0;
126
+ clickedOnScrollbar = event.clientX + offset > clientWidth;
127
+ }
128
+ if (!disableBackdropClick && !clickedOnScrollbar) {
129
+ mouseDownTarget.current = event.target;
130
+ }
131
+ };
132
+ var handleBackdropMouseUp = function (event) {
133
+ if (!disableBackdropClick &&
134
+ event.target === wrapperRef.current &&
135
+ mouseDownTarget.current === wrapperRef.current) {
136
+ handleClose(event, 'backdropClick');
137
+ }
138
+ mouseDownTarget.current = undefined;
139
+ };
140
+ var handleKeyDown = React.useCallback(function (event) {
141
+ /*
142
+ * Чтобы сохранить дефолтное поведение элементов и событий форм,
143
+ * обработчик не устанавливает event.preventDefault()
144
+ */
145
+ if (event.key !== 'Escape') {
146
+ return;
147
+ }
148
+ // Если есть обработчик escape на body
149
+ event.stopPropagation();
150
+ if (!disableEscapeKeyDown && handleClose) {
151
+ handleClose(event, 'escapeKeyDown');
152
+ }
153
+ }, [disableEscapeKeyDown, handleClose]);
154
+ var getScrollHandler = React.useCallback(function () {
155
+ if (scrollHandler === 'wrapper')
156
+ return wrapperRef.current;
157
+ if (scrollHandler === 'content')
158
+ return componentNodeRef.current;
159
+ return scrollHandler.current || wrapperRef.current;
160
+ }, [scrollHandler]);
161
+ var handleEntered = React.useCallback(function (node, isAppearing) {
162
+ scrollableNodeRef.current = getScrollHandler();
163
+ addResizeHandle();
164
+ if (scrollableNodeRef.current) {
165
+ scrollableNodeRef.current.addEventListener('scroll', handleScroll);
166
+ handleScroll();
167
+ }
168
+ if (transitionProps.onEntered) {
169
+ transitionProps.onEntered(node, isAppearing);
170
+ }
171
+ if (onMount)
172
+ onMount();
173
+ }, [addResizeHandle, getScrollHandler, handleScroll, onMount, transitionProps]);
174
+ var handleExited = React.useCallback(function (node) {
175
+ removeResizeHandle();
176
+ setExited(true);
177
+ if (scrollableNodeRef.current) {
178
+ scrollableNodeRef.current.removeEventListener('scroll', handleScroll);
179
+ }
180
+ if (transitionProps.onExited) {
181
+ transitionProps.onExited(node);
182
+ }
183
+ if (onUnmount)
184
+ onUnmount();
185
+ if (restoreContainerStylesRef.current) {
186
+ restoreContainerStylesRef.current();
187
+ }
188
+ }, [handleScroll, onUnmount, removeResizeHandle, transitionProps]);
189
+ React.useEffect(function () {
190
+ if (open && isExited) {
191
+ if (!disableBlockingScroll) {
192
+ var el_1 = getContainer();
193
+ var shouldIOSLock = iOSLock && dynamicMixins$1.os.isIOS();
194
+ utils.handleContainer(el_1, shouldIOSLock);
195
+ if (shouldIOSLock) {
196
+ lockScroll.syncHeight();
197
+ lockScroll.lockScroll();
198
+ }
199
+ restoreContainerStylesRef.current = function () {
200
+ restoreContainerStylesRef.current = null;
201
+ utils.restoreContainerStyles(el_1);
202
+ };
203
+ }
204
+ setExited(false);
205
+ }
206
+ if (!open) {
207
+ lockScroll.unlockScroll();
208
+ }
209
+ }, [getContainer, open, disableBlockingScroll, isExited, iOSLock]);
210
+ React.useEffect(function () {
211
+ var ResizeObserver = window.ResizeObserver || resizeObserver.ResizeObserver;
212
+ resizeObserverRef.current = new ResizeObserver(checkToHasScrollBar);
213
+ return function () {
214
+ if (restoreContainerStylesRef.current) {
215
+ restoreContainerStylesRef.current();
216
+ }
217
+ if (resizeObserverRef.current) {
218
+ resizeObserverRef.current.disconnect();
219
+ }
220
+ };
221
+ }, []);
222
+ React.useEffect(function () {
223
+ var _a;
224
+ if (disableAutoFocus || !open)
225
+ return;
226
+ (_a = wrapperRef.current) === null || _a === void 0 ? void 0 : _a.focus();
227
+ }, [open, disableAutoFocus]);
228
+ var contextValue = React.useMemo(function () { return ({
229
+ parentRef: wrapperRef,
230
+ componentRef: componentNodeRef,
231
+ hasHeader: hasHeader,
232
+ hasFooter: hasFooter,
233
+ hasScroll: hasScroll,
234
+ headerHighlighted: headerHighlighted,
235
+ footerHighlighted: footerHighlighted,
236
+ headerOffset: headerOffset,
237
+ setHeaderOffset: setHeaderOffset,
238
+ contentRef: contentRef,
239
+ setHasHeader: setHasHeader,
240
+ setHasFooter: setHasFooter,
241
+ onClose: handleClose,
242
+ }); }, [
243
+ contentRef,
244
+ hasHeader,
245
+ hasFooter,
246
+ hasScroll,
247
+ headerHighlighted,
248
+ footerHighlighted,
249
+ headerOffset,
250
+ setHeaderOffset,
251
+ handleClose,
252
+ ]);
253
+ var renderContent = function () { return (React__default.default.createElement(dynamicMixins$3.Stack, { value: zIndex }, function (computedZIndex) {
254
+ var _a, _b;
255
+ return (React__default.default.createElement(BaseModalContext.Provider, { value: contextValue },
256
+ React__default.default.createElement(FocusLock__default.default, { disabled: disableFocusLock || !open, returnFocus: !disableRestoreFocus },
257
+ Backdrop && (React__default.default.createElement(Backdrop, tslib.__assign({}, backdropProps, { className: cn__default.default(backdropProps.className, index_module.backdrop), open: open, style: {
258
+ zIndex: computedZIndex,
259
+ } }))),
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,
262
+ _a)), ref: mergeRefs__default.default([
263
+ ref,
264
+ wrapperRef,
265
+ wrapperProps === null || wrapperProps === void 0 ? void 0 : wrapperProps.ref,
266
+ ]), onKeyDown: handleKeyDown, onMouseDown: handleBackdropMouseDown, onMouseUp: handleBackdropMouseUp, onWheel: onWheel, tabIndex: -1, "data-test-id": dataTestId, style: {
267
+ zIndex: computedZIndex,
268
+ } }),
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([
271
+ componentRef,
272
+ componentNodeRef,
273
+ (componentDivProps === null || componentDivProps === void 0 ? void 0 : componentDivProps.ref) || null,
274
+ ]) }),
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)))))));
279
+ })); };
280
+ if (!shouldRender)
281
+ return null;
282
+ return usePortal ? (React__default.default.createElement(dynamicMixins$2.Portal, { getPortalContainer: container, immediateMount: true }, renderContent())) : (renderContent());
283
+ });
284
+ BaseModal.displayName = 'BaseModal';
285
+ BaseModalContext.displayName = 'BaseModalContext';
286
+
287
+ exports.BaseModal = BaseModal;
288
+ exports.BaseModalContext = BaseModalContext;
289
+ //# 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 { CSSTransitionProps } from 'react-transition-group/CSSTransition';\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<CSSTransitionProps>;\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<CSSTransitionProps>['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<CSSTransitionProps>['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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"}
@@ -0,0 +1,8 @@
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,29 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ /**
6
+ * Хелпер для блокирования скроллинга в iOS
7
+ * В проекте используется overflow: hidden для блокировки, но в некоторых случаях этого недостаточно. Данный хелпер призван решать эту проблему
8
+ */
9
+ var scrollY;
10
+ var isScrollLocked = function () { return document.body.classList.contains('is-locked'); };
11
+ var lockScroll = function () {
12
+ scrollY = window.scrollY;
13
+ document.body.classList.add('is-locked');
14
+ };
15
+ var unlockScroll = function () {
16
+ if (!isScrollLocked())
17
+ return;
18
+ document.body.classList.remove('is-locked');
19
+ window.scrollTo(0, scrollY);
20
+ };
21
+ var syncHeight = function () {
22
+ document.body.style.setProperty('--window-inner-scrollY', "".concat(window.scrollY, "px"));
23
+ };
24
+
25
+ exports.isScrollLocked = isScrollLocked;
26
+ exports.lockScroll = lockScroll;
27
+ exports.syncHeight = syncHeight;
28
+ exports.unlockScroll = unlockScroll;
29
+ //# sourceMappingURL=lockScroll.js.map
@@ -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;;;;;;;"}
@@ -0,0 +1,59 @@
1
+ :root {
2
+ --color-light-modal-bg-primary: #fff;
3
+ } :root {
4
+ --gap-0: 0px;
5
+ } :root {
6
+ --window-inner-scrollY: 10px;
7
+ } body.is-locked {
8
+ margin-top: calc(var(--window-inner-scrollY) * -1);
9
+ position: fixed;
10
+ overflow: hidden;
11
+ } .base-modal__component_1equ8 {
12
+ position: relative;
13
+ box-sizing: border-box;
14
+ background: var(--color-light-modal-bg-primary);
15
+ margin: auto;
16
+ flex-shrink: 0;
17
+ } .base-modal__wrapper_1equ8 {
18
+ position: fixed;
19
+ top: var(--gap-0);
20
+ left: var(--gap-0);
21
+ right: var(--gap-0);
22
+ bottom: var(--gap-0);
23
+
24
+ overflow: auto;
25
+ display: flex;
26
+ flex-direction: column;
27
+ align-items: center;
28
+ outline: 0;
29
+ overscroll-behavior: none;
30
+ } .base-modal__content_1equ8 {
31
+ width: 100%;
32
+ height: 100%;
33
+ display: flex;
34
+ flex-direction: column;
35
+ flex: 1
36
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasFooter_1equ8 {
37
+ padding-bottom: unset
38
+ }
39
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasHeader_1equ8 {
40
+ padding-top: unset
41
+ }
42
+ } .base-modal__hidden_1equ8 {
43
+ display: none;
44
+ } .base-modal__backdrop_1equ8 {
45
+ z-index: 0;
46
+ } .base-modal__appear_1equ8,
47
+ .base-modal__enter_1equ8 {
48
+ opacity: 0;
49
+ } .base-modal__appearActive_1equ8,
50
+ .base-modal__enterActive_1equ8 {
51
+ opacity: 1;
52
+ transition: opacity 200ms ease-in;
53
+ } .base-modal__exit_1equ8 {
54
+ opacity: 1;
55
+ } .base-modal__exitActive_1equ8,
56
+ .base-modal__exitDone_1equ8 {
57
+ opacity: 0;
58
+ transition: opacity 200ms ease-out;
59
+ }
@@ -0,0 +1,3 @@
1
+ export * from './Component';
2
+ export * from './utils';
3
+ export * from './helpers/lockScroll';
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var Component = require('./Component.js');
6
+ var utils = require('./utils.js');
7
+ var lockScroll = require('./helpers/lockScroll.js');
8
+
9
+
10
+
11
+ exports.BaseModal = Component.BaseModal;
12
+ exports.BaseModalContext = Component.BaseModalContext;
13
+ exports.handleContainer = utils.handleContainer;
14
+ exports.hasScrollbar = utils.hasScrollbar;
15
+ exports.isScrolledToBottom = utils.isScrolledToBottom;
16
+ exports.isScrolledToTop = utils.isScrolledToTop;
17
+ exports.restoreContainerStyles = utils.restoreContainerStyles;
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":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ require('./index.css');
4
+
5
+ var styles = {"component":"base-modal__component_1equ8","wrapper":"base-modal__wrapper_1equ8","content":"base-modal__content_1equ8","hasFooter":"base-modal__hasFooter_1equ8","hasHeader":"base-modal__hasHeader_1equ8","hidden":"base-modal__hidden_1equ8","backdrop":"base-modal__backdrop_1equ8","appear":"base-modal__appear_1equ8","enter":"base-modal__enter_1equ8","appearActive":"base-modal__appearActive_1equ8","enterActive":"base-modal__enterActive_1equ8","exit":"base-modal__exit_1equ8","exitActive":"base-modal__exitActive_1equ8","exitDone":"base-modal__exitDone_1equ8"};
6
+
7
+ module.exports = styles;
8
+ //# sourceMappingURL=index.module.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-dynamic-mixins-index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ /* eslint-disable */
4
+ // @ts-nocheck
5
+ if (typeof window !== 'undefined') {
6
+ if (Element && !Element.prototype.matches) {
7
+ Element.prototype.matches =
8
+ Element.prototype.matchesSelector ||
9
+ Element.prototype.mozMatchesSelector ||
10
+ Element.prototype.msMatchesSelector ||
11
+ Element.prototype.oMatchesSelector ||
12
+ Element.prototype.webkitMatchesSelector ||
13
+ function (s) {
14
+ var matches = (this.document || this.ownerDocument).querySelectorAll(s);
15
+ var i = matches.length;
16
+ while (--i >= 0 && matches.item(i) !== this) { }
17
+ return i > -1;
18
+ };
19
+ }
20
+ }
21
+ //# sourceMappingURL=matches-polyfill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matches-polyfill.js","sources":["../src/matches-polyfill.ts"],"sourcesContent":["/* eslint-disable */\n// @ts-nocheck\n\nif (typeof window !== 'undefined') {\n if (Element && !Element.prototype.matches) {\n Element.prototype.matches =\n Element.prototype.matchesSelector ||\n Element.prototype.mozMatchesSelector ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.oMatchesSelector ||\n Element.prototype.webkitMatchesSelector ||\n function (s) {\n const matches = (this.document || this.ownerDocument).querySelectorAll(s);\n let i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n}\n\nexport {};\n"],"names":[],"mappings":";;AAAA;AACA;AAEA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC/B,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE;QACvC,OAAO,CAAC,SAAS,CAAC,OAAO;YACrB,OAAO,CAAC,SAAS,CAAC,eAAe;gBACjC,OAAO,CAAC,SAAS,CAAC,kBAAkB;gBACpC,OAAO,CAAC,SAAS,CAAC,iBAAiB;gBACnC,OAAO,CAAC,SAAS,CAAC,gBAAgB;gBAClC,OAAO,CAAC,SAAS,CAAC,qBAAqB;AACvC,gBAAA,UAAU,CAAC,EAAA;AACP,oBAAA,IAAM,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,CAAC;AACzE,oBAAA,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM;AACtB,oBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC7C,oBAAA,OAAO,CAAC,GAAG,EAAE;AACjB,iBAAC;AACR;AACJ;;"}
@@ -0,0 +1,5 @@
1
+ export declare function isScrolledToTop(target: HTMLElement): boolean;
2
+ export declare function isScrolledToBottom(target: HTMLElement): boolean;
3
+ export declare function hasScrollbar(target: HTMLElement): boolean;
4
+ export declare const restoreContainerStyles: (container: HTMLElement) => void;
5
+ export declare const handleContainer: (container?: HTMLElement, shouldIOSLock?: boolean) => void;
@@ -0,0 +1,100 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var dynamicMixins = require('@alfalab/core-components-global-store/dynamic-mixins');
6
+ var dynamicMixins$1 = require('@alfalab/core-components-shared/dynamic-mixins');
7
+
8
+ function isScrolledToTop(target) {
9
+ return target.scrollTop <= 0;
10
+ }
11
+ function isScrolledToBottom(target) {
12
+ return target.scrollHeight - target.offsetHeight <= target.scrollTop;
13
+ }
14
+ function hasScrollbar(target) {
15
+ return target.scrollHeight > target.clientHeight;
16
+ }
17
+ var isOverflowing = function (container) {
18
+ if (document.body === container) {
19
+ return window.innerWidth > document.documentElement.clientWidth;
20
+ }
21
+ return container.scrollHeight > container.clientHeight;
22
+ };
23
+ var getPaddingRight = function (node) {
24
+ return parseInt(window.getComputedStyle(node).paddingRight, 10) || 0;
25
+ };
26
+ var restoreContainerStyles = function (container) {
27
+ var modalRestoreStyles = dynamicMixins.getModalStore().getRestoreStyles();
28
+ var index = modalRestoreStyles.findIndex(function (s) { return s.container === container; });
29
+ var existingStyles = modalRestoreStyles[index];
30
+ if (!existingStyles)
31
+ return;
32
+ existingStyles.modals -= 1;
33
+ if (existingStyles.modals <= 0) {
34
+ modalRestoreStyles.splice(index, 1);
35
+ existingStyles.styles.forEach(function (_a) {
36
+ var value = _a.value, el = _a.el, key = _a.key;
37
+ if (value) {
38
+ el.style.setProperty(key, value);
39
+ }
40
+ else {
41
+ el.style.removeProperty(key);
42
+ }
43
+ });
44
+ }
45
+ };
46
+ var handleContainer = function (container, shouldIOSLock) {
47
+ if (shouldIOSLock === void 0) { shouldIOSLock = false; }
48
+ if (!container)
49
+ return;
50
+ var modalRestoreStyles = dynamicMixins.getModalStore().getRestoreStyles();
51
+ var existingStyles = modalRestoreStyles.find(function (s) { return s.container === container; });
52
+ if (existingStyles) {
53
+ existingStyles.modals += 1;
54
+ return;
55
+ }
56
+ var containerStyles = [];
57
+ if (isOverflowing(container)) {
58
+ // Вычисляет размер до применения `overflow hidden` для избежания скачков
59
+ var scrollbarSize = dynamicMixins$1.browser.getScrollbarSize();
60
+ containerStyles.push({
61
+ value: container.style.paddingRight,
62
+ key: 'padding-right',
63
+ el: container,
64
+ });
65
+ // Вычисляем стили, чтобы получить реальный `padding` c шириной сколлбара
66
+ // eslint-disable-next-line no-param-reassign
67
+ container.style.paddingRight = "".concat(getPaddingRight(container) + scrollbarSize, "px");
68
+ }
69
+ var parent = container.parentElement;
70
+ var scrollContainer =
71
+ // TODO: заменить на optional chaining
72
+ parent &&
73
+ parent.nodeName === 'HTML' &&
74
+ window.getComputedStyle(parent).overflowY === 'scroll'
75
+ ? parent
76
+ : container;
77
+ // Блокируем скролл даже если отсутствует скроллбар
78
+ if (scrollContainer.style.overflow !== 'hidden') {
79
+ containerStyles.push({
80
+ value: scrollContainer.style.overflow,
81
+ key: 'overflow',
82
+ el: scrollContainer,
83
+ });
84
+ }
85
+ if (!shouldIOSLock) {
86
+ scrollContainer.style.overflow = 'hidden';
87
+ }
88
+ modalRestoreStyles.push({
89
+ container: container,
90
+ modals: 1,
91
+ styles: containerStyles,
92
+ });
93
+ };
94
+
95
+ exports.handleContainer = handleContainer;
96
+ exports.hasScrollbar = hasScrollbar;
97
+ exports.isScrolledToBottom = isScrolledToBottom;
98
+ exports.isScrolledToTop = isScrolledToTop;
99
+ exports.restoreContainerStyles = restoreContainerStyles;
100
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../src/utils.ts"],"sourcesContent":["import { getModalStore, SavedStyle } from '@alfalab/core-components-global-store';\nimport { browser } from '@alfalab/core-components-shared';\n\nexport function isScrolledToTop(target: HTMLElement) {\n return target.scrollTop <= 0;\n}\n\nexport function isScrolledToBottom(target: HTMLElement) {\n return target.scrollHeight - target.offsetHeight <= target.scrollTop;\n}\n\nexport function hasScrollbar(target: HTMLElement) {\n return target.scrollHeight > target.clientHeight;\n}\n\nconst isOverflowing = (container: Element) => {\n if (document.body === container) {\n return window.innerWidth > document.documentElement.clientWidth;\n }\n\n return container.scrollHeight > container.clientHeight;\n};\n\nconst getPaddingRight = (node: Element) =>\n parseInt(window.getComputedStyle(node).paddingRight, 10) || 0;\n\nexport const restoreContainerStyles = (container: HTMLElement) => {\n const modalRestoreStyles = getModalStore().getRestoreStyles();\n\n const index = modalRestoreStyles.findIndex((s) => s.container === container);\n const existingStyles = modalRestoreStyles[index];\n\n if (!existingStyles) return;\n\n existingStyles.modals -= 1;\n\n if (existingStyles.modals <= 0) {\n modalRestoreStyles.splice(index, 1);\n\n existingStyles.styles.forEach(({ value, el, key }) => {\n if (value) {\n el.style.setProperty(key, value);\n } else {\n el.style.removeProperty(key);\n }\n });\n }\n};\n\nexport const handleContainer = (container?: HTMLElement, shouldIOSLock = false) => {\n if (!container) return;\n\n const modalRestoreStyles = getModalStore().getRestoreStyles();\n\n const existingStyles = modalRestoreStyles.find((s) => s.container === container);\n\n if (existingStyles) {\n existingStyles.modals += 1;\n\n return;\n }\n\n const containerStyles: SavedStyle[] = [];\n\n if (isOverflowing(container)) {\n // Вычисляет размер до применения `overflow hidden` для избежания скачков\n const scrollbarSize = browser.getScrollbarSize();\n\n containerStyles.push({\n value: container.style.paddingRight,\n key: 'padding-right',\n el: container,\n });\n // Вычисляем стили, чтобы получить реальный `padding` c шириной сколлбара\n // eslint-disable-next-line no-param-reassign\n container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`;\n }\n\n const parent = container.parentElement;\n const scrollContainer =\n // TODO: заменить на optional chaining\n parent &&\n parent.nodeName === 'HTML' &&\n window.getComputedStyle(parent).overflowY === 'scroll'\n ? parent\n : container;\n\n // Блокируем скролл даже если отсутствует скроллбар\n if (scrollContainer.style.overflow !== 'hidden') {\n containerStyles.push({\n value: scrollContainer.style.overflow,\n key: 'overflow',\n el: scrollContainer,\n });\n }\n\n if (!shouldIOSLock) {\n scrollContainer.style.overflow = 'hidden';\n }\n\n modalRestoreStyles.push({\n container,\n modals: 1,\n styles: containerStyles,\n });\n};\n"],"names":["getModalStore","browser"],"mappings":"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"}
package/esm/index.css CHANGED
@@ -8,13 +8,13 @@
8
8
  margin-top: calc(var(--window-inner-scrollY) * -1);
9
9
  position: fixed;
10
10
  overflow: hidden;
11
- } .base-modal__component_4miwd {
11
+ } .base-modal__component_1equ8 {
12
12
  position: relative;
13
13
  box-sizing: border-box;
14
14
  background: var(--color-light-modal-bg-primary);
15
15
  margin: auto;
16
16
  flex-shrink: 0;
17
- } .base-modal__wrapper_4miwd {
17
+ } .base-modal__wrapper_1equ8 {
18
18
  position: fixed;
19
19
  top: var(--gap-0);
20
20
  left: var(--gap-0);
@@ -27,33 +27,33 @@
27
27
  align-items: center;
28
28
  outline: 0;
29
29
  overscroll-behavior: none;
30
- } .base-modal__content_4miwd {
30
+ } .base-modal__content_1equ8 {
31
31
  width: 100%;
32
32
  height: 100%;
33
33
  display: flex;
34
34
  flex-direction: column;
35
35
  flex: 1
36
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasFooter_4miwd {
36
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasFooter_1equ8 {
37
37
  padding-bottom: unset
38
38
  }
39
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasHeader_4miwd {
39
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasHeader_1equ8 {
40
40
  padding-top: unset
41
41
  }
42
- } .base-modal__hidden_4miwd {
42
+ } .base-modal__hidden_1equ8 {
43
43
  display: none;
44
- } .base-modal__backdrop_4miwd {
44
+ } .base-modal__backdrop_1equ8 {
45
45
  z-index: 0;
46
- } .base-modal__appear_4miwd,
47
- .base-modal__enter_4miwd {
46
+ } .base-modal__appear_1equ8,
47
+ .base-modal__enter_1equ8 {
48
48
  opacity: 0;
49
- } .base-modal__appearActive_4miwd,
50
- .base-modal__enterActive_4miwd {
49
+ } .base-modal__appearActive_1equ8,
50
+ .base-modal__enterActive_1equ8 {
51
51
  opacity: 1;
52
52
  transition: opacity 200ms ease-in;
53
- } .base-modal__exit_4miwd {
53
+ } .base-modal__exit_1equ8 {
54
54
  opacity: 1;
55
- } .base-modal__exitActive_4miwd,
56
- .base-modal__exitDone_4miwd {
55
+ } .base-modal__exitActive_1equ8,
56
+ .base-modal__exitDone_1equ8 {
57
57
  opacity: 0;
58
58
  transition: opacity 200ms ease-out;
59
59
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- var styles = {"component":"base-modal__component_4miwd","wrapper":"base-modal__wrapper_4miwd","content":"base-modal__content_4miwd","hasFooter":"base-modal__hasFooter_4miwd","hasHeader":"base-modal__hasHeader_4miwd","hidden":"base-modal__hidden_4miwd","backdrop":"base-modal__backdrop_4miwd","appear":"base-modal__appear_4miwd","enter":"base-modal__enter_4miwd","appearActive":"base-modal__appearActive_4miwd","enterActive":"base-modal__enterActive_4miwd","exit":"base-modal__exit_4miwd","exitActive":"base-modal__exitActive_4miwd","exitDone":"base-modal__exitDone_4miwd"};
3
+ var styles = {"component":"base-modal__component_1equ8","wrapper":"base-modal__wrapper_1equ8","content":"base-modal__content_1equ8","hasFooter":"base-modal__hasFooter_1equ8","hasHeader":"base-modal__hasHeader_1equ8","hidden":"base-modal__hidden_1equ8","backdrop":"base-modal__backdrop_1equ8","appear":"base-modal__appear_1equ8","enter":"base-modal__enter_1equ8","appearActive":"base-modal__appearActive_1equ8","enterActive":"base-modal__enterActive_1equ8","exit":"base-modal__exit_1equ8","exitActive":"base-modal__exitActive_1equ8","exitDone":"base-modal__exitDone_1equ8"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;AAEgB,aAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-dynamic-mixins-index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;AAEgB,aAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
package/index.css CHANGED
@@ -8,13 +8,13 @@
8
8
  margin-top: calc(var(--window-inner-scrollY) * -1);
9
9
  position: fixed;
10
10
  overflow: hidden;
11
- } .base-modal__component_4miwd {
11
+ } .base-modal__component_1equ8 {
12
12
  position: relative;
13
13
  box-sizing: border-box;
14
14
  background: var(--color-light-modal-bg-primary);
15
15
  margin: auto;
16
16
  flex-shrink: 0;
17
- } .base-modal__wrapper_4miwd {
17
+ } .base-modal__wrapper_1equ8 {
18
18
  position: fixed;
19
19
  top: var(--gap-0);
20
20
  left: var(--gap-0);
@@ -27,33 +27,33 @@
27
27
  align-items: center;
28
28
  outline: 0;
29
29
  overscroll-behavior: none;
30
- } .base-modal__content_4miwd {
30
+ } .base-modal__content_1equ8 {
31
31
  width: 100%;
32
32
  height: 100%;
33
33
  display: flex;
34
34
  flex-direction: column;
35
35
  flex: 1
36
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasFooter_4miwd {
36
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasFooter_1equ8 {
37
37
  padding-bottom: unset
38
38
  }
39
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasHeader_4miwd {
39
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasHeader_1equ8 {
40
40
  padding-top: unset
41
41
  }
42
- } .base-modal__hidden_4miwd {
42
+ } .base-modal__hidden_1equ8 {
43
43
  display: none;
44
- } .base-modal__backdrop_4miwd {
44
+ } .base-modal__backdrop_1equ8 {
45
45
  z-index: 0;
46
- } .base-modal__appear_4miwd,
47
- .base-modal__enter_4miwd {
46
+ } .base-modal__appear_1equ8,
47
+ .base-modal__enter_1equ8 {
48
48
  opacity: 0;
49
- } .base-modal__appearActive_4miwd,
50
- .base-modal__enterActive_4miwd {
49
+ } .base-modal__appearActive_1equ8,
50
+ .base-modal__enterActive_1equ8 {
51
51
  opacity: 1;
52
52
  transition: opacity 200ms ease-in;
53
- } .base-modal__exit_4miwd {
53
+ } .base-modal__exit_1equ8 {
54
54
  opacity: 1;
55
- } .base-modal__exitActive_4miwd,
56
- .base-modal__exitDone_4miwd {
55
+ } .base-modal__exitActive_1equ8,
56
+ .base-modal__exitDone_1equ8 {
57
57
  opacity: 0;
58
58
  transition: opacity 200ms ease-out;
59
59
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"component":"base-modal__component_4miwd","wrapper":"base-modal__wrapper_4miwd","content":"base-modal__content_4miwd","hasFooter":"base-modal__hasFooter_4miwd","hasHeader":"base-modal__hasHeader_4miwd","hidden":"base-modal__hidden_4miwd","backdrop":"base-modal__backdrop_4miwd","appear":"base-modal__appear_4miwd","enter":"base-modal__enter_4miwd","appearActive":"base-modal__appearActive_4miwd","enterActive":"base-modal__enterActive_4miwd","exit":"base-modal__exit_4miwd","exitActive":"base-modal__exitActive_4miwd","exitDone":"base-modal__exitDone_4miwd"};
5
+ var styles = {"component":"base-modal__component_1equ8","wrapper":"base-modal__wrapper_1equ8","content":"base-modal__content_1equ8","hasFooter":"base-modal__hasFooter_1equ8","hasHeader":"base-modal__hasHeader_1equ8","hidden":"base-modal__hidden_1equ8","backdrop":"base-modal__backdrop_1equ8","appear":"base-modal__appear_1equ8","enter":"base-modal__enter_1equ8","appearActive":"base-modal__appearActive_1equ8","enterActive":"base-modal__enterActive_1equ8","exit":"base-modal__exit_1equ8","exitActive":"base-modal__exitActive_1equ8","exitDone":"base-modal__exitDone_1equ8"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-dynamic-mixins-index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;;;AAEgB,aAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
package/modern/index.css CHANGED
@@ -8,13 +8,13 @@
8
8
  margin-top: calc(var(--window-inner-scrollY) * -1);
9
9
  position: fixed;
10
10
  overflow: hidden;
11
- } .base-modal__component_4miwd {
11
+ } .base-modal__component_1equ8 {
12
12
  position: relative;
13
13
  box-sizing: border-box;
14
14
  background: var(--color-light-modal-bg-primary);
15
15
  margin: auto;
16
16
  flex-shrink: 0;
17
- } .base-modal__wrapper_4miwd {
17
+ } .base-modal__wrapper_1equ8 {
18
18
  position: fixed;
19
19
  top: var(--gap-0);
20
20
  left: var(--gap-0);
@@ -27,33 +27,33 @@
27
27
  align-items: center;
28
28
  outline: 0;
29
29
  overscroll-behavior: none;
30
- } .base-modal__content_4miwd {
30
+ } .base-modal__content_1equ8 {
31
31
  width: 100%;
32
32
  height: 100%;
33
33
  display: flex;
34
34
  flex-direction: column;
35
35
  flex: 1
36
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasFooter_4miwd {
36
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasFooter_1equ8 {
37
37
  padding-bottom: unset
38
38
  }
39
- } @media (display-mode: standalone) { .base-modal__content_4miwd.base-modal__hasHeader_4miwd {
39
+ } @media (display-mode: standalone) { .base-modal__content_1equ8.base-modal__hasHeader_1equ8 {
40
40
  padding-top: unset
41
41
  }
42
- } .base-modal__hidden_4miwd {
42
+ } .base-modal__hidden_1equ8 {
43
43
  display: none;
44
- } .base-modal__backdrop_4miwd {
44
+ } .base-modal__backdrop_1equ8 {
45
45
  z-index: 0;
46
- } .base-modal__appear_4miwd,
47
- .base-modal__enter_4miwd {
46
+ } .base-modal__appear_1equ8,
47
+ .base-modal__enter_1equ8 {
48
48
  opacity: 0;
49
- } .base-modal__appearActive_4miwd,
50
- .base-modal__enterActive_4miwd {
49
+ } .base-modal__appearActive_1equ8,
50
+ .base-modal__enterActive_1equ8 {
51
51
  opacity: 1;
52
52
  transition: opacity 200ms ease-in;
53
- } .base-modal__exit_4miwd {
53
+ } .base-modal__exit_1equ8 {
54
54
  opacity: 1;
55
- } .base-modal__exitActive_4miwd,
56
- .base-modal__exitDone_4miwd {
55
+ } .base-modal__exitActive_1equ8,
56
+ .base-modal__exitDone_1equ8 {
57
57
  opacity: 0;
58
58
  transition: opacity 200ms ease-out;
59
59
  }
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
 
3
- const styles = {"component":"base-modal__component_4miwd","wrapper":"base-modal__wrapper_4miwd","content":"base-modal__content_4miwd","hasFooter":"base-modal__hasFooter_4miwd","hasHeader":"base-modal__hasHeader_4miwd","hidden":"base-modal__hidden_4miwd","backdrop":"base-modal__backdrop_4miwd","appear":"base-modal__appear_4miwd","enter":"base-modal__enter_4miwd","appearActive":"base-modal__appearActive_4miwd","enterActive":"base-modal__enterActive_4miwd","exit":"base-modal__exit_4miwd","exitActive":"base-modal__exitActive_4miwd","exitDone":"base-modal__exitDone_4miwd"};
3
+ const styles = {"component":"base-modal__component_1equ8","wrapper":"base-modal__wrapper_1equ8","content":"base-modal__content_1equ8","hasFooter":"base-modal__hasFooter_1equ8","hasHeader":"base-modal__hasHeader_1equ8","hidden":"base-modal__hidden_1equ8","backdrop":"base-modal__backdrop_1equ8","appear":"base-modal__appear_1equ8","enter":"base-modal__enter_1equ8","appearActive":"base-modal__appearActive_1equ8","enterActive":"base-modal__enterActive_1equ8","exit":"base-modal__exit_1equ8","exitActive":"base-modal__exitActive_1equ8","exitDone":"base-modal__exitDone_1equ8"};
4
4
 
5
5
  export { styles as default };
6
6
  //# sourceMappingURL=index.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;AAEgB,eAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
1
+ {"version":3,"file":"index.module.css.js","sources":["src/index.module.css"],"sourcesContent":["@import '@alfalab/core-components-vars/src/no-dynamic-mixins-index.css';\n\n:root {\n --window-inner-scrollY: 10px; /* fallback value to prevent ci error */\n}\n\nbody:global(.is-locked) {\n margin-top: calc(var(--window-inner-scrollY) * -1);\n position: fixed;\n overflow: hidden;\n}\n\n.component {\n position: relative;\n box-sizing: border-box;\n background: var(--color-light-modal-bg-primary);\n margin: auto;\n flex-shrink: 0;\n}\n\n.wrapper {\n position: fixed;\n top: var(--gap-0);\n left: var(--gap-0);\n right: var(--gap-0);\n bottom: var(--gap-0);\n\n overflow: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n outline: 0;\n overscroll-behavior: none;\n}\n\n.content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n flex: 1;\n\n &.hasFooter {\n @media (display-mode: standalone) {\n padding-bottom: unset;\n }\n }\n\n &.hasHeader {\n @media (display-mode: standalone) {\n padding-top: unset;\n }\n }\n}\n\n.hidden {\n display: none;\n}\n\n.backdrop {\n z-index: 0;\n}\n\n.appear,\n.enter {\n opacity: 0;\n}\n\n.appearActive,\n.enterActive {\n opacity: 1;\n transition: opacity 200ms ease-in;\n}\n\n.exit {\n opacity: 1;\n}\n\n.exitActive,\n.exitDone {\n opacity: 0;\n transition: opacity 200ms ease-out;\n}\n"],"names":[],"mappings":";;AAEgB,eAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,SAAS,CAAC,2BAA2B,CAAC,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,6BAA6B,CAAC,WAAW,CAAC,6BAA6B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,4BAA4B,CAAC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,yBAAyB,CAAC,cAAc,CAAC,gCAAgC,CAAC,aAAa,CAAC,+BAA+B,CAAC,MAAM,CAAC,wBAAwB,CAAC,YAAY,CAAC,8BAA8B,CAAC,UAAU,CAAC,4BAA4B,CAAC;;;;"}
@@ -1,3 +1,5 @@
1
+
2
+
1
3
  :root {
2
4
  --window-inner-scrollY: 10px;
3
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-base-modal",
3
- "version": "6.0.0",
3
+ "version": "6.1.0-snapshot-92b8690",
4
4
  "description": "BaseModal component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -10,11 +10,11 @@
10
10
  "main": "index.js",
11
11
  "module": "./esm/index.js",
12
12
  "dependencies": {
13
- "@alfalab/core-components-backdrop": "^4.0.0",
14
- "@alfalab/core-components-global-store": "^3.0.0",
15
- "@alfalab/core-components-portal": "^4.0.0",
16
- "@alfalab/core-components-shared": "^1.0.0",
17
- "@alfalab/core-components-stack": "^6.0.0",
13
+ "@alfalab/core-components-backdrop": "4.1.0-snapshot-92b8690",
14
+ "@alfalab/core-components-global-store": "3.1.0-snapshot-92b8690",
15
+ "@alfalab/core-components-portal": "4.1.0-snapshot-92b8690",
16
+ "@alfalab/core-components-shared": "1.1.0-snapshot-92b8690",
17
+ "@alfalab/core-components-stack": "6.1.0-snapshot-92b8690",
18
18
  "@juggle/resize-observer": "^3.3.1",
19
19
  "@types/react-transition-group": "^4.4.5",
20
20
  "classnames": "^2.5.1",
@@ -24,7 +24,7 @@
24
24
  "tslib": "^2.4.0"
25
25
  },
26
26
  "peerDependencies": {
27
- "@alfalab/core-components-stack-context": "^1.0.0",
27
+ "@alfalab/core-components-stack-context": "1.1.0-snapshot-92b8690",
28
28
  "react": "^16.9.0 || ^17.0.1 || ^18.0.0",
29
29
  "react-dom": "^16.9.0 || ^17.0.1 || ^18.0.0"
30
30
  },
@@ -32,6 +32,6 @@
32
32
  "access": "public",
33
33
  "directory": "dist"
34
34
  },
35
- "themesVersion": "14.0.0",
36
- "varsVersion": "10.0.0"
35
+ "themesVersion": "14.1.0-snapshot-92b8690",
36
+ "varsVersion": "10.1.0-snapshot-92b8690"
37
37
  }
@@ -1,4 +1,4 @@
1
- @import '@alfalab/core-components-vars/src/index.css';
1
+ @import '@alfalab/core-components-vars/src/no-dynamic-mixins-index.css';
2
2
 
3
3
  :root {
4
4
  --window-inner-scrollY: 10px; /* fallback value to prevent ci error */