@alfalab/core-components-base-modal 7.1.3 → 7.1.4

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.js CHANGED
@@ -45,14 +45,14 @@ var BaseModalContext = React__default.default.createContext({
45
45
  setFooterHighlighted: function () { },
46
46
  });
47
47
  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.scrollLock, scrollLock = _l === void 0 ? false : _l, _m = _a.keepMounted, keepMounted = _m === void 0 ? false : _m, 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, _o = _a.zIndex, zIndex = _o === void 0 ? coreComponentsStackContext.stackingOrder.MODAL : _o, _p = _a.componentRef, componentRef = _p === void 0 ? null : _p, _q = _a.contentElementRef, contentElementRef = _q === void 0 ? null : _q, _r = _a.usePortal, usePortal = _r === void 0 ? true : _r, _s = _a.iOSLock, iOSLock = _s === void 0 ? false : _s, onWheel = _a.onWheel;
49
- var _t = React.useState(null), exited = _t[0], setExited = _t[1];
50
- var _u = React.useState(false), hasScroll = _u[0], setHasScroll = _u[1];
51
- var _v = React.useState(false), hasHeader = _v[0], setHasHeader = _v[1];
52
- var _w = React.useState(false), hasFooter = _w[0], setHasFooter = _w[1];
53
- var _x = React.useState(false), headerHighlighted = _x[0], setHeaderHighlighted = _x[1];
54
- var _y = React.useState(false), footerHighlighted = _y[0], setFooterHighlighted = _y[1];
55
- var _z = React.useState(0), headerOffset = _z[0], setHeaderOffset = _z[1];
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, scrollLock = _a.scrollLock, _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;
49
+ var _s = React.useState(null), exited = _s[0], setExited = _s[1];
50
+ var _t = React.useState(false), hasScroll = _t[0], setHasScroll = _t[1];
51
+ var _u = React.useState(false), hasHeader = _u[0], setHasHeader = _u[1];
52
+ var _v = React.useState(false), hasFooter = _v[0], setHasFooter = _v[1];
53
+ var _w = React.useState(false), headerHighlighted = _w[0], setHeaderHighlighted = _w[1];
54
+ var _x = React.useState(false), footerHighlighted = _x[0], setFooterHighlighted = _x[1];
55
+ var _y = React.useState(0), headerOffset = _y[0], setHeaderOffset = _y[1];
56
56
  var componentNodeRef = React.useRef(null);
57
57
  var wrapperRef = React.useRef(null);
58
58
  var scrollableNodeRef = React.useRef(null);
@@ -194,7 +194,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
194
194
  * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,
195
195
  * старая логика нужна только для обратной совместимости (deprecated пропсы)
196
196
  */
197
- var shouldUseLegacyScrollLock = !scrollLock && !disableBlockingScroll;
197
+ var shouldUseLegacyScrollLock = scrollLock === undefined && !disableBlockingScroll;
198
198
  if (shouldUseLegacyScrollLock) {
199
199
  var el_1 = getContainer();
200
200
  var shouldIOSLock = iOSLock && coreComponentsShared.isIOS();
@@ -259,7 +259,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
259
259
  setHeaderOffset,
260
260
  handleClose,
261
261
  ]);
262
- var backdropClassName = backdropProps.className, _0 = backdropProps.shouldRender, backdropShouldRender = _0 === void 0 ? true : _0, restBackdropProps = tslib.__rest(backdropProps, ["className", "shouldRender"]);
262
+ var backdropClassName = backdropProps.className, _z = backdropProps.shouldRender, backdropShouldRender = _z === void 0 ? true : _z, restBackdropProps = tslib.__rest(backdropProps, ["className", "shouldRender"]);
263
263
  var renderContent = function () { return (React__default.default.createElement(coreComponentsStack.Stack, { value: zIndex }, function (computedZIndex) {
264
264
  var _a, _b;
265
265
  return (React__default.default.createElement(BaseModalContext.Provider, { value: contextValue },
package/Component.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, type BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, type PortalProps } from '@alfalab/core-components-portal';\nimport { getScrollbarSize, isIOS } 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\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 * @deprecated Используйте `scrollLock={true}`.\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Управляет блокировкой скролла/overscroll фона при открытой модалке.\n * @default false\n */\n scrollLock?: 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 * @deprecated Используйте `scrollLock={true}`.\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 setHeaderHighlighted: (value: boolean) => void;\n setFooterHighlighted: (value: boolean) => void;\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 setHeaderHighlighted: () => {},\n setFooterHighlighted: () => {},\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 scrollLock = 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 (!scrollLock && iOSLock && 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, scrollLock],\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 = 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 /*\n * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,\n * старая логика нужна только для обратной совместимости (deprecated пропсы)\n */\n const shouldUseLegacyScrollLock = !scrollLock && !disableBlockingScroll;\n\n if (shouldUseLegacyScrollLock) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && 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, scrollLock, 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 setHeaderHighlighted,\n setFooterHighlighted,\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 {\n className: backdropClassName,\n shouldRender: backdropShouldRender = true,\n ...restBackdropProps\n } = backdropProps;\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 <RemoveScroll\n enabled={open && Boolean(scrollLock)}\n removeScrollBar={false}\n >\n <React.Fragment>\n {backdropShouldRender && Backdrop && (\n <Backdrop\n {...restBackdropProps}\n className={cn(backdropClassName, 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 </React.Fragment>\n </RemoveScroll>\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","isIOS","unlockScroll","getScrollbarSize","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","__rest","Stack","FocusLock","RemoveScroll","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, type BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, type PortalProps } from '@alfalab/core-components-portal';\nimport { getScrollbarSize, isIOS } 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\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 * @deprecated Используйте `scrollLock={true}`.\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Управляет блокировкой скролла/overscroll фона при открытой модалке.\n * @default false\n */\n scrollLock?: 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 * @deprecated Используйте `scrollLock={true}`.\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 setHeaderHighlighted: (value: boolean) => void;\n setFooterHighlighted: (value: boolean) => void;\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 setHeaderHighlighted: () => {},\n setFooterHighlighted: () => {},\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 scrollLock,\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 (!scrollLock && iOSLock && 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, scrollLock],\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 = 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 /*\n * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,\n * старая логика нужна только для обратной совместимости (deprecated пропсы)\n */\n const shouldUseLegacyScrollLock =\n scrollLock === undefined && !disableBlockingScroll;\n\n if (shouldUseLegacyScrollLock) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && 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, scrollLock, 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 setHeaderHighlighted,\n setFooterHighlighted,\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 {\n className: backdropClassName,\n shouldRender: backdropShouldRender = true,\n ...restBackdropProps\n } = backdropProps;\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 <RemoveScroll\n enabled={open && Boolean(scrollLock)}\n removeScrollBar={false}\n >\n <React.Fragment>\n {backdropShouldRender && Backdrop && (\n <Backdrop\n {...restBackdropProps}\n className={cn(backdropClassName, 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 </React.Fragment>\n </RemoveScroll>\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","isIOS","unlockScroll","getScrollbarSize","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","__rest","Stack","FocusLock","RemoveScroll","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
package/cssm/Component.js CHANGED
@@ -46,14 +46,14 @@ var BaseModalContext = React__default.default.createContext({
46
46
  setFooterHighlighted: function () { },
47
47
  });
48
48
  var BaseModal = React.forwardRef(function (_a, ref) {
49
- 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.scrollLock, scrollLock = _l === void 0 ? false : _l, _m = _a.keepMounted, keepMounted = _m === void 0 ? false : _m, 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, _o = _a.zIndex, zIndex = _o === void 0 ? cssm.stackingOrder.MODAL : _o, _p = _a.componentRef, componentRef = _p === void 0 ? null : _p, _q = _a.contentElementRef, contentElementRef = _q === void 0 ? null : _q, _r = _a.usePortal, usePortal = _r === void 0 ? true : _r, _s = _a.iOSLock, iOSLock = _s === void 0 ? false : _s, onWheel = _a.onWheel;
50
- var _t = React.useState(null), exited = _t[0], setExited = _t[1];
51
- var _u = React.useState(false), hasScroll = _u[0], setHasScroll = _u[1];
52
- var _v = React.useState(false), hasHeader = _v[0], setHasHeader = _v[1];
53
- var _w = React.useState(false), hasFooter = _w[0], setHasFooter = _w[1];
54
- var _x = React.useState(false), headerHighlighted = _x[0], setHeaderHighlighted = _x[1];
55
- var _y = React.useState(false), footerHighlighted = _y[0], setFooterHighlighted = _y[1];
56
- var _z = React.useState(0), headerOffset = _z[0], setHeaderOffset = _z[1];
49
+ 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, scrollLock = _a.scrollLock, _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;
50
+ var _s = React.useState(null), exited = _s[0], setExited = _s[1];
51
+ var _t = React.useState(false), hasScroll = _t[0], setHasScroll = _t[1];
52
+ var _u = React.useState(false), hasHeader = _u[0], setHasHeader = _u[1];
53
+ var _v = React.useState(false), hasFooter = _v[0], setHasFooter = _v[1];
54
+ var _w = React.useState(false), headerHighlighted = _w[0], setHeaderHighlighted = _w[1];
55
+ var _x = React.useState(false), footerHighlighted = _x[0], setFooterHighlighted = _x[1];
56
+ var _y = React.useState(0), headerOffset = _y[0], setHeaderOffset = _y[1];
57
57
  var componentNodeRef = React.useRef(null);
58
58
  var wrapperRef = React.useRef(null);
59
59
  var scrollableNodeRef = React.useRef(null);
@@ -195,7 +195,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
195
195
  * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,
196
196
  * старая логика нужна только для обратной совместимости (deprecated пропсы)
197
197
  */
198
- var shouldUseLegacyScrollLock = !scrollLock && !disableBlockingScroll;
198
+ var shouldUseLegacyScrollLock = scrollLock === undefined && !disableBlockingScroll;
199
199
  if (shouldUseLegacyScrollLock) {
200
200
  var el_1 = getContainer();
201
201
  var shouldIOSLock = iOSLock && cssm$1.isIOS();
@@ -260,7 +260,7 @@ var BaseModal = React.forwardRef(function (_a, ref) {
260
260
  setHeaderOffset,
261
261
  handleClose,
262
262
  ]);
263
- var backdropClassName = backdropProps.className, _0 = backdropProps.shouldRender, backdropShouldRender = _0 === void 0 ? true : _0, restBackdropProps = tslib.__rest(backdropProps, ["className", "shouldRender"]);
263
+ var backdropClassName = backdropProps.className, _z = backdropProps.shouldRender, backdropShouldRender = _z === void 0 ? true : _z, restBackdropProps = tslib.__rest(backdropProps, ["className", "shouldRender"]);
264
264
  var renderContent = function () { return (React__default.default.createElement(cssm$3.Stack, { value: zIndex }, function (computedZIndex) {
265
265
  var _a, _b;
266
266
  return (React__default.default.createElement(BaseModalContext.Provider, { value: contextValue },
@@ -1 +1 @@
1
- {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, type BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, type PortalProps } from '@alfalab/core-components-portal';\nimport { getScrollbarSize, isIOS } 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\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 * @deprecated Используйте `scrollLock={true}`.\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Управляет блокировкой скролла/overscroll фона при открытой модалке.\n * @default false\n */\n scrollLock?: 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 * @deprecated Используйте `scrollLock={true}`.\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 setHeaderHighlighted: (value: boolean) => void;\n setFooterHighlighted: (value: boolean) => void;\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 setHeaderHighlighted: () => {},\n setFooterHighlighted: () => {},\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 scrollLock = 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 (!scrollLock && iOSLock && 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, scrollLock],\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 = 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 /*\n * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,\n * старая логика нужна только для обратной совместимости (deprecated пропсы)\n */\n const shouldUseLegacyScrollLock = !scrollLock && !disableBlockingScroll;\n\n if (shouldUseLegacyScrollLock) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && 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, scrollLock, 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 setHeaderHighlighted,\n setFooterHighlighted,\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 {\n className: backdropClassName,\n shouldRender: backdropShouldRender = true,\n ...restBackdropProps\n } = backdropProps;\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 <RemoveScroll\n enabled={open && Boolean(scrollLock)}\n removeScrollBar={false}\n >\n <React.Fragment>\n {backdropShouldRender && Backdrop && (\n <Backdrop\n {...restBackdropProps}\n className={cn(backdropClassName, 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 </React.Fragment>\n </RemoveScroll>\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","isIOS","unlockScroll","getScrollbarSize","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","__rest","Stack","FocusLock","RemoveScroll","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
1
+ {"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */\nimport React, {\n type ComponentType,\n forwardRef,\n type KeyboardEvent,\n type MouseEvent,\n type MutableRefObject,\n type ReactNode,\n type Ref,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type WheelEvent,\n} from 'react';\nimport FocusLock from 'react-focus-lock';\nimport mergeRefs from 'react-merge-refs';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport { CSSTransition } from 'react-transition-group';\nimport { type CSSTransitionProps } from 'react-transition-group/CSSTransition';\nimport { ResizeObserver as ResizeObserverPolyfill } from '@juggle/resize-observer';\nimport cn from 'classnames';\n\nimport { Backdrop as DefaultBackdrop, type BackdropProps } from '@alfalab/core-components-backdrop';\nimport { Portal, type PortalProps } from '@alfalab/core-components-portal';\nimport { getScrollbarSize, isIOS } 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\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 * @deprecated Используйте `scrollLock={true}`.\n */\n disableBlockingScroll?: boolean;\n\n /**\n * Управляет блокировкой скролла/overscroll фона при открытой модалке.\n * @default false\n */\n scrollLock?: 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 * @deprecated Используйте `scrollLock={true}`.\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 setHeaderHighlighted: (value: boolean) => void;\n setFooterHighlighted: (value: boolean) => void;\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 setHeaderHighlighted: () => {},\n setFooterHighlighted: () => {},\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 scrollLock,\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 (!scrollLock && iOSLock && 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, scrollLock],\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 = 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 /*\n * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,\n * старая логика нужна только для обратной совместимости (deprecated пропсы)\n */\n const shouldUseLegacyScrollLock =\n scrollLock === undefined && !disableBlockingScroll;\n\n if (shouldUseLegacyScrollLock) {\n const el = getContainer();\n\n const shouldIOSLock = iOSLock && 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, scrollLock, 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 setHeaderHighlighted,\n setFooterHighlighted,\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 {\n className: backdropClassName,\n shouldRender: backdropShouldRender = true,\n ...restBackdropProps\n } = backdropProps;\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 <RemoveScroll\n enabled={open && Boolean(scrollLock)}\n removeScrollBar={false}\n >\n <React.Fragment>\n {backdropShouldRender && Backdrop && (\n <Backdrop\n {...restBackdropProps}\n className={cn(backdropClassName, 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 </React.Fragment>\n </RemoveScroll>\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","isIOS","unlockScroll","getScrollbarSize","useEffect","handleContainer","syncHeight","lockScroll","restoreContainerStyles","ResizeObserverPolyfill","useMemo","__rest","Stack","FocusLock","RemoveScroll","__assign","cn","styles","mergeRefs","CSSTransition","Portal"],"mappings":"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"}
package/esm/Component.js CHANGED
@@ -34,14 +34,14 @@ var BaseModalContext = React.createContext({
34
34
  setFooterHighlighted: function () { },
35
35
  });
36
36
  var BaseModal = forwardRef(function (_a, ref) {
37
- var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop$1 = _c === void 0 ? 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.scrollLock, scrollLock = _l === void 0 ? false : _l, _m = _a.keepMounted, keepMounted = _m === void 0 ? false : _m, 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, _o = _a.zIndex, zIndex = _o === void 0 ? stackingOrder.MODAL : _o, _p = _a.componentRef, componentRef = _p === void 0 ? null : _p, _q = _a.contentElementRef, contentElementRef = _q === void 0 ? null : _q, _r = _a.usePortal, usePortal = _r === void 0 ? true : _r, _s = _a.iOSLock, iOSLock = _s === void 0 ? false : _s, onWheel = _a.onWheel;
38
- var _t = useState(null), exited = _t[0], setExited = _t[1];
39
- var _u = useState(false), hasScroll = _u[0], setHasScroll = _u[1];
40
- var _v = useState(false), hasHeader = _v[0], setHasHeader = _v[1];
41
- var _w = useState(false), hasFooter = _w[0], setHasFooter = _w[1];
42
- var _x = useState(false), headerHighlighted = _x[0], setHeaderHighlighted = _x[1];
43
- var _y = useState(false), footerHighlighted = _y[0], setFooterHighlighted = _y[1];
44
- var _z = useState(0), headerOffset = _z[0], setHeaderOffset = _z[1];
37
+ var open = _a.open, container = _a.container, children = _a.children, _b = _a.scrollHandler, scrollHandler = _b === void 0 ? 'wrapper' : _b, _c = _a.Backdrop, Backdrop$1 = _c === void 0 ? 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, scrollLock = _a.scrollLock, _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 ? 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;
38
+ var _s = useState(null), exited = _s[0], setExited = _s[1];
39
+ var _t = useState(false), hasScroll = _t[0], setHasScroll = _t[1];
40
+ var _u = useState(false), hasHeader = _u[0], setHasHeader = _u[1];
41
+ var _v = useState(false), hasFooter = _v[0], setHasFooter = _v[1];
42
+ var _w = useState(false), headerHighlighted = _w[0], setHeaderHighlighted = _w[1];
43
+ var _x = useState(false), footerHighlighted = _x[0], setFooterHighlighted = _x[1];
44
+ var _y = useState(0), headerOffset = _y[0], setHeaderOffset = _y[1];
45
45
  var componentNodeRef = useRef(null);
46
46
  var wrapperRef = useRef(null);
47
47
  var scrollableNodeRef = useRef(null);
@@ -183,7 +183,7 @@ var BaseModal = forwardRef(function (_a, ref) {
183
183
  * При scrollLock={true} блокировка обрабатывается через react-remove-scroll,
184
184
  * старая логика нужна только для обратной совместимости (deprecated пропсы)
185
185
  */
186
- var shouldUseLegacyScrollLock = !scrollLock && !disableBlockingScroll;
186
+ var shouldUseLegacyScrollLock = scrollLock === undefined && !disableBlockingScroll;
187
187
  if (shouldUseLegacyScrollLock) {
188
188
  var el_1 = getContainer();
189
189
  var shouldIOSLock = iOSLock && isIOS();
@@ -248,7 +248,7 @@ var BaseModal = forwardRef(function (_a, ref) {
248
248
  setHeaderOffset,
249
249
  handleClose,
250
250
  ]);
251
- var backdropClassName = backdropProps.className, _0 = backdropProps.shouldRender, backdropShouldRender = _0 === void 0 ? true : _0, restBackdropProps = __rest(backdropProps, ["className", "shouldRender"]);
251
+ var backdropClassName = backdropProps.className, _z = backdropProps.shouldRender, backdropShouldRender = _z === void 0 ? true : _z, restBackdropProps = __rest(backdropProps, ["className", "shouldRender"]);
252
252
  var renderContent = function () { return (React.createElement(Stack, { value: zIndex }, function (computedZIndex) {
253
253
  var _a, _b;
254
254
  return (React.createElement(BaseModalContext.Provider, { value: contextValue },