@hh.ru/magritte-ui-bottom-sheet 8.2.12 → 9.0.0

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/BottomSheet.js CHANGED
@@ -14,12 +14,13 @@ import { isActionBarComponent } from '@hh.ru/magritte-ui-action-bar';
14
14
  import { BottomSheetContext } from './BottomSheetContext.js';
15
15
  import { ClickInterceptor } from './ClickInterceptor.js';
16
16
  import { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';
17
+ import { ContentOverlayRoot } from '@hh.ru/magritte-ui-content-overlay';
17
18
  import { Divider } from '@hh.ru/magritte-ui-divider';
18
19
  import { Layer } from '@hh.ru/magritte-ui-layer';
19
20
  import { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';
20
21
  import { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';
21
22
  import { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';
22
- import { s as styles } from './bottom-sheet-BbHd5KSs.js';
23
+ import { s as styles } from './bottom-sheet-dS5MKDxs.js';
23
24
 
24
25
  const CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';
25
26
  const CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';
@@ -123,7 +124,6 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
123
124
  return {
124
125
  keyboardResizeHandlers,
125
126
  value: {
126
- contentOverlayRef,
127
127
  height,
128
128
  subscribeToKeyboardResize: (handler) => {
129
129
  keyboardResizeHandlers.push(handler);
@@ -133,7 +133,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
133
133
  },
134
134
  },
135
135
  };
136
- }, [contentOverlayRef, height]);
136
+ }, [height]);
137
137
  const virtualKeyboardOffsetsRef = useRef({ top: 0, bottom: 0 });
138
138
  const animationTimeoutExitRef = useRef(animationTimeout?.appear.exit || 0);
139
139
  animationTimeoutExitRef.current = animationTimeout?.appear.exit || 0;
@@ -908,12 +908,12 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
908
908
  [styles.disappearAnimation]: appearTransition === 'exiting',
909
909
  }), "data-qa": appearTransition === 'entered' ? containerDataQa : undefined, ref: swipeContainerRef, children: [jsx("div", { className: classnames(styles.grabber, styles.grabberTransitionAnimation, {
910
910
  [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,
911
- }), ref: grabberRef }), jsxs("div", { className: classnames(styles.visualContainer, {
912
- [styles.visualContainerFullScreen]: height === 'full-screen',
913
- [styles.heightTransitionAnimation]: heightTransition === 'entering',
914
- }), "data-qa": appearTransition === 'entered' ? 'bottom-sheet-content' : undefined, ref: bottomSheetRef, children: [scrollContainer, jsxs("div", { className: styles.footer, ref: footerRef, children: [footer && (jsx("div", { className: classnames(styles.divider, {
915
- [styles.dividerVisible]: stateRef.current.dividerVisible,
916
- }), ref: dividerRef, children: jsx(Divider, {}) })), interceptClickHandlers && hasTouchSupport ? (jsx(ClickInterceptor, { children: clonedFooter })) : (clonedFooter)] })] }), jsx("div", { className: styles.contentOverlay, ref: contentOverlayRef })] })] }) }));
911
+ }), ref: grabberRef }), jsx(ContentOverlayRoot, { ref: contentOverlayRef, children: jsxs("div", { className: classnames(styles.visualContainer, {
912
+ [styles.visualContainerFullScreen]: height === 'full-screen',
913
+ [styles.heightTransitionAnimation]: heightTransition === 'entering',
914
+ }), "data-qa": appearTransition === 'entered' ? 'bottom-sheet-content' : undefined, ref: bottomSheetRef, children: [scrollContainer, jsxs("div", { className: styles.footer, ref: footerRef, children: [footer && (jsx("div", { className: classnames(styles.divider, {
915
+ [styles.dividerVisible]: stateRef.current.dividerVisible,
916
+ }), ref: dividerRef, children: jsx(Divider, {}) })), interceptClickHandlers && hasTouchSupport ? (jsx(ClickInterceptor, { children: clonedFooter })) : (clonedFooter)] })] }) })] })] }) }));
917
917
  };
918
918
  return createPortal(jsx(ThemeWrapper, { children: (themeClass) => (jsx("div", { className: classnames(styles.cssVariablesContainer, themeClass), "data-qa": "bottom-sheet-css-variables", ref: cssVariablesContainerRef, children: jsx(Transition, { appear: true, in: currentVisible, mountOnEnter: true, onEnter: setTransformToInvisible, onEntering: setTransformToVisible, onEntered: handleAppearAnimationEnd, onExit: handleExitAnimationStart, onExiting: setTransformToInvisible, onExited: handleExitAnimationEnd, timeout: animationTimeout.appear, unmountOnExit: true, nodeRef: contentRef, children: (appearTransition) => (jsx(Transition, { in: heightAnimationRunning, onEnter: handleHeightAnimationStart, onEntered: handleHeightAnimationEnd, timeout: animationTimeout.height, nodeRef: contentRef, children: (heightTransition) => renderFunc(appearTransition, heightTransition) })) }, `hasTouchSupport:${hasTouchSupport}`) })) }), document.body);
919
919
  };
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.js","sources":["../src/BottomSheet.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n isValidElement,\n Fragment,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { disableOverscroll, disableScroll, TimeoutCallback } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n ScrollGestureEvent,\n CustomScrollContextNotifier,\n CustomScrollContextProvider,\n initScrollHandlers,\n} from '@hh.ru/magritte-internal-custom-scroll';\nimport { isActionBarComponent } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';\nimport { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst DEFAULT_ACTION_BAR_PADDING = 16;\n\nconst checkSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isContentSizedFullHeight = (children: React.ReactNode) =>\n (isValidElement(children) &&\n typeof children.type === 'function' &&\n 'isFullHeightBottomSheetContent' in children.type &&\n (children.props as { fixedHeight?: boolean }).fixedHeight !== true) ||\n isValidTreeSelectorWrapper(children);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst textInputTypes = ['text', 'password', 'email', 'search', 'tel', 'url', 'number'];\nconst isTextInputElement = (element: Element): element is HTMLInputElement => {\n if (element instanceof HTMLInputElement) {\n return textInputTypes.includes(element.type);\n } else if (element instanceof HTMLTextAreaElement) {\n return true;\n }\n\n return false;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n // если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n // translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.initialOffset\n scrollOffset: number;\n // translateY для эмуляции свайпа, всегда положительный либо 0\n swipeOffset: number;\n // текущее действие, инициированное пользователем\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n // число, на которое нужно анимировать изменение высоты контента боттомшита\n heightAnimationDiff: number | null;\n heightAnimationCallback?: VoidFunction | null;\n skipHeightAnimation?: boolean;\n};\n\nconst makeInitialState = (): State => ({\n dividerVisible: false,\n grabberUnsafe: false,\n hasFocus: false,\n resizeRAFHandle: null,\n scrollOffset: 0,\n swipeOffset: 0,\n touchAction: null,\n exitHandlers: [],\n heightAnimationDiff: null,\n});\n\nconst BottomSheetRenderFunc: ForwardRefRenderFunction<HTMLElement, BottomSheetProps> = (\n {\n allowScrollWhileFocused,\n children,\n footer,\n header,\n height = 'content',\n interceptClickHandlers = true,\n keyboardOverlaysFooter = true,\n onAppear,\n onBeforeExit,\n onAfterExit,\n onClose,\n showDivider = 'with-scroll',\n showOverlay = true,\n visible = false,\n withContentPaddings = true,\n withTopPadding = true,\n 'data-qa': dataQA,\n interceptTouchHandlers = true,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n const VIEWPORT_HEIGHT = useRef(0);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const headerWrapperRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const focusedElementRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n const GrowLimitWrapper = isContentSizedFullHeight(children) ? Fragment : TextAreaGrowLimiter;\n\n const growLimiterRef = useRef<HTMLDivElement>(null);\n\n const growLimiterContextValue = useState(() => {\n let height = 'auto';\n let limiterFlex = '1 0';\n return {\n containerRef: scrollContainerRef,\n preMeasurement: () => {\n if (!visualContainerRef.current || !growLimiterRef.current) {\n return;\n }\n height = visualContainerRef.current.style.height;\n limiterFlex = growLimiterRef.current.style.flex;\n visualContainerRef.current.style.height = 'auto';\n },\n postMeasurement: () => {\n visualContainerRef.current && (visualContainerRef.current.style.height = height);\n growLimiterRef.current && (growLimiterRef.current.style.flex = limiterFlex);\n },\n };\n })[0];\n\n const growLimiterProps = useMemo(\n () =>\n GrowLimitWrapper === TextAreaGrowLimiter\n ? {\n ...growLimiterContextValue,\n ref: growLimiterRef,\n debounce: true,\n className: styles.growLimiter,\n }\n : {},\n [GrowLimitWrapper, growLimiterContextValue]\n );\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>(makeInitialState());\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => {\n let keyboardResizeHandlers: Array<VoidFunction> = [];\n return {\n keyboardResizeHandlers,\n value: {\n contentOverlayRef,\n height,\n subscribeToKeyboardResize: (handler: VoidFunction) => {\n keyboardResizeHandlers.push(handler);\n },\n unsubscribeFromKeyboardResize: (handlerToRemove: VoidFunction) => {\n keyboardResizeHandlers = keyboardResizeHandlers.filter((handler) => handler !== handlerToRemove);\n },\n },\n };\n }, [contentOverlayRef, height]);\n const virtualKeyboardOffsetsRef = useRef<{ top: number; bottom: number }>({ top: 0, bottom: 0 });\n const animationTimeoutExitRef = useRef(animationTimeout?.appear.exit || 0);\n animationTimeoutExitRef.current = animationTimeout?.appear.exit || 0;\n\n const [isSafari, setIsSafari] = useState<boolean | null>(null);\n useEffect(() => setIsSafari(checkSafari()), [setIsSafari]);\n\n const [hasTouchSupport, setHasTouchSupport] = useState<boolean | null>(null);\n const hasTouchSupportRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!('matchMedia' in window)) {\n return void 0;\n }\n const mediaQuery = window.matchMedia('(pointer:coarse)');\n const handleMediaQueryChange = () => {\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n };\n mediaQuery.addEventListener('change', handleMediaQueryChange);\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n return () => mediaQuery.removeEventListener('change', handleMediaQueryChange);\n }, [setHasTouchSupport]);\n\n const bindEscapeToClose = useEscapeToClose(() => currentVisible && onCloseRef.current(null));\n useEffect(() => bindEscapeToClose(document.body), [bindEscapeToClose]);\n\n // TODO: replace by useInitOnce\n const LayoutMetrics = useState(() => {\n let cache: Record<string, number> = {};\n return {\n get scrollTop() {\n return Math.max(-stateRef.current.scrollOffset, 0);\n },\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n /**\n * Высота контента\n * Может превышать высоту контейнера из-за скролла\n */\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n\n return cache.contentHeight;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - LayoutMetrics.headerHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null && contentRef.current !== null) {\n cache.contentTop =\n contentRef.current.offsetTop - LayoutMetrics.scrollTop + visualContainerRef.current.offsetTop;\n }\n return cache.contentTop ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n /**\n * Фактическая высота, которую NavigationBar занимает в боттомшите\n * Может отличаться от видимой высоты NavigationBar\n */\n get headerHeight() {\n if (!('headerHeight' in cache) && headerWrapperRef.current !== null) {\n cache.headerHeight = headerWrapperRef.current.offsetHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n hasTouchSupportRef.current &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset = visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n get maxScrollTop() {\n return LayoutMetrics.contentHeight - LayoutMetrics.visibleContentHeight;\n },\n /**\n * Расстояние между верхним краем боттомшита и границей вьюпорта\n */\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })[0];\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n VIEWPORT_HEIGHT.current = visualViewport.height;\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n let enableScroll: TimeoutCallback | undefined = disableScroll();\n return () => {\n enableScroll?.(animationTimeoutExitRef.current);\n enableScroll = undefined;\n };\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || isSafari) {\n return;\n }\n\n // включаем настройку interactive-widget=resizes-content,\n // чтобы браузеры с поддержкой Virtual Keyboard API ресайзили Visual Viewport при появлении клавиатуры\n // в остальных браузерах (Safari и Chrome < 108) это поведение по умолчанию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, isSafari]);\n\n const fixOverscroll = useCallback(() => {\n if (hasTouchSupport) {\n const isOverscrolled =\n LayoutMetrics.contentHeight + stateRef.current.scrollOffset < LayoutMetrics.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = hasTouchSupport\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd = LayoutMetrics.contentHeight + scrollOffset > LayoutMetrics.visibleContentHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null && stateRef.current.touchAction === null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider, LayoutMetrics]);\n\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // при открытии виртуальной клавиатуры браузеры двигают Visual Viewport и Layout Viewport\n // с помощью двух отступов делаем так, чтобы overlay боттомшита совпадал с видимой частью экрана\n const recalcKeyboardOffsets = useCallback(() => {\n if (\n !hasTouchSupport ||\n !contentRef.current ||\n !overlayRef.current ||\n !swipeContainerRef.current ||\n !visualViewport\n ) {\n return;\n }\n\n // разворачиваем боттомшит с height=half-screen на всю доступную высоту\n if (LayoutMetrics.initialOffset > 0 && stateRef.current.scrollOffset > 0) {\n stateRef.current.scrollOffset = 0;\n contentRef.current.style.transform = translateY(0);\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n\n LayoutMetrics.invalidateCache();\n\n const isKeyboardVisible = visualViewport.height !== VIEWPORT_HEIGHT.current;\n if (stateRef.current.hasFocus && focusedElementRef.current !== null && isKeyboardVisible) {\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const topOffset = Math.round(-overlayDOMRect.top);\n\n let bottomOffset = 0;\n if (isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n if (visualViewportDiff > 0) {\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n bottomOffset = visualViewportDiff;\n }\n }\n\n if (keyboardOverlaysFooter && footerRef.current !== null) {\n bottomOffset -= footerRef.current.clientHeight;\n }\n\n if (\n topOffset !== virtualKeyboardOffsetsRef.current.top ||\n bottomOffset !== virtualKeyboardOffsetsRef.current.bottom\n ) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${topOffset}px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${bottomOffset}px`);\n }\n\n LayoutMetrics.invalidateCache();\n\n // если фокусируемый элемент лежит внутри скроллящегося контейнера и не виден, скроллим к нему\n if (contentRef.current.contains(focusedElementRef.current)) {\n let focusedElementOffset = 0;\n for (\n let offsetElement: HTMLElement | null =\n focusedElementRef.current.closest('[data-interactive]') ?? focusedElementRef.current;\n offsetElement !== contentRef.current && offsetElement !== null;\n offsetElement = offsetElement.offsetParent as HTMLElement | null\n ) {\n focusedElementOffset += offsetElement.offsetTop;\n }\n const newScrollOffset = -Math.min(Math.max(focusedElementOffset - 10, 0), LayoutMetrics.maxScrollTop);\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = topOffset;\n virtualKeyboardOffsetsRef.current.bottom = bottomOffset;\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n LayoutMetrics.invalidateCache();\n fixOverscroll();\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = 0;\n virtualKeyboardOffsetsRef.current.bottom = 0;\n }\n\n stateRef.current.skipHeightAnimation = true;\n setTimeout(() => (stateRef.current.skipHeightAnimation = false), 100);\n bottomSheetContext.keyboardResizeHandlers.forEach((handler) => handler());\n }, [\n fixOverscroll,\n hasTouchSupport,\n isSafari,\n keyboardOverlaysFooter,\n recalcScrollFlags,\n bottomSheetContext,\n LayoutMetrics,\n ]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (!isTextInputElement(focusedElement) || stateRef.current.resizeRAFHandle !== null) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n focusedElementRef.current = null;\n\n if (isSafari) {\n recalcKeyboardOffsets();\n }\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n // событие scroll может прилететь, только если браузер сдвинул вьюпорт из-за появления виртуальной клавиатуры\n // пользовательский скролл не вызывает событие scroll, т.к. нативный скролл отключен\n // в Safari событие resize может прилететь до того как браузер сдвинул вьюпорт, поэтому слушаем scroll\n if (isSafari) {\n visualViewport?.addEventListener('scroll', handleResize);\n }\n focusedElement.addEventListener('blur', handleBlur);\n focusedElementRef.current = focusedElement;\n },\n [isSafari, recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n contentOverlayRef.current.style.top = `${LayoutMetrics.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.visibleContentHeight}px`;\n }\n }, [LayoutMetrics]);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current = makeInitialState();\n\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current.exitHandlers = [];\n onAfterExit?.();\n }, [onAfterExit]);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, [LayoutMetrics]);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationDiff = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n let onCloseCancelled = false;\n const cancelCloseFunc = () => {\n if (!onCloseCancelled) {\n handleSwipeCancel();\n onCloseCancelled = true;\n }\n };\n onCloseRef.current(cancelCloseFunc);\n }\n }, [handleSwipeCancel]);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const handleScroll = useCallback(\n (delta: number) => {\n if (LayoutMetrics.initialOffset !== 0 || LayoutMetrics.contentHeight > LayoutMetrics.visibleContentHeight) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (LayoutMetrics.contentHeight + roundedNewScrollOffset <= LayoutMetrics.visibleContentHeight) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n },\n [LayoutMetrics, recalcScrollFlags]\n );\n\n const scrollContextProps = useState(() => ({\n getMaxScrollTop: () => LayoutMetrics.maxScrollTop,\n getScrollTop: () => LayoutMetrics.scrollTop,\n setScrollTop: (pos: number) => handleScroll(-(pos - LayoutMetrics.scrollTop)),\n }))[0];\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let focusedElementTouchY: number | null = null;\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText() ||\n (focusedElementRef.current !== null &&\n focusedElementTouchY !== null &&\n focusedElementRef.current.clientHeight !== focusedElementRef.current.scrollHeight)\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (focusedElementTouchY !== null) {\n focusedElementTouchY = null;\n }\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n scrollContextProviderRef.current?.notifyTouchEnd();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n focusedElementTouchY = null;\n swipeHandlers.onTouchStart(event);\n }\n visualContainer.classList.add(styles.noCaret);\n scrollContextProviderRef.current?.notifyTouchStart();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n if (interceptTouchHandlers) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (focusedElementRef.current !== null && focusedElementTouchY !== null) {\n focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n swipeHandlers.onTouchMove(event);\n }\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n swipeHandlers.onTouchEnd(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n swipeHandlers.onTouchCancel(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', handleTouchEnd);\n visualContainer.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', handleTouchEnd);\n visualContainer.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [allowScrollWhileFocused, swipeHandlers, interceptTouchHandlers, handleScroll]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevVisibleContentHeight = 0;\n let skipFirstResizeCallback = true;\n let collapseResizeCallbacks = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n visualContainer.style.height = skipFirstResizeCallback ? `${LayoutMetrics.bottomSheetHeight}px` : '';\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n\n skipFirstResizeCallback = false;\n stateRef.current.skipHeightAnimation = false;\n return;\n }\n\n if (stateRef.current.heightAnimationDiff !== null) {\n if (!collapseResizeCallbacks) {\n // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером\n visualContainer.style.height = ``;\n }\n } else {\n const contentHeightDiff = LayoutMetrics.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.headerHeight - prevHeaderHeight + LayoutMetrics.footerHeight - prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevVisibleContentHeight - containersHeightDiff,\n LayoutMetrics.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff = LayoutMetrics.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n } else {\n // если высота видимой части контента не изменилась,\n // но позиция скролла превысила максимально допустимую из-за уменьшения высоты контента,\n // сбрасываем позицию скролла на максимально допустимую\n fixOverscroll();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n stateRef.current.heightAnimationDiff = heightAnimationDiff;\n stateRef.current.heightAnimationCallback = () => {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerWrapperRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && resizeObserver.observe(header);\n\n return () => resizeObserver.disconnect();\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\n LayoutMetrics,\n ]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = hasTouchSupport && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [hasTouchSupport, initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlersRaw } = useNoBubbling();\n\n const eventHandlers = interceptTouchHandlers\n ? eventHandlersRaw\n : { ...eventHandlersRaw, onTouchMove: undefined, onTouchStart: undefined, onTouchEnd: undefined };\n\n if (!animationTimeout) {\n return null;\n }\n\n const containerDataQa = `bottom-sheet-container${dataQA ? ` ${dataQA}` : ''}`;\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight(children),\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext.value}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = hasTouchSupport ? (\n <CustomScrollContextProvider\n ref={scrollContextProviderRef}\n wrapperRef={scrollContainerRef}\n {...scrollContextProps}\n >\n <div\n className={classnames(styles.scrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, {\n type: footer.props.type || 'vertical',\n padding: footer.props.padding || DEFAULT_ACTION_BAR_PADDING,\n showDivider: false,\n })\n : footer;\n\n return (\n <Layer layer=\"bottom-sheet\">\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: () => onCloseRef.current(null) }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? containerDataQa : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <div\n className={classnames(styles.visualContainer, {\n [styles.visualContainerFullScreen]: height === 'full-screen',\n [styles.heightTransitionAnimation]: heightTransition === 'entering',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-content' : undefined}\n ref={bottomSheetRef}\n >\n {scrollContainer}\n <div className={styles.footer} ref={footerRef}>\n {footer && (\n <div\n className={classnames(styles.divider, {\n [styles.dividerVisible]: stateRef.current.dividerVisible,\n })}\n ref={dividerRef}\n >\n <Divider />\n </div>\n )}\n {interceptClickHandlers && hasTouchSupport ? (\n <ClickInterceptor>{clonedFooter}</ClickInterceptor>\n ) : (\n clonedFooter\n )}\n </div>\n </div>\n <div className={styles.contentOverlay} ref={contentOverlayRef} />\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <ThemeWrapper>\n {(themeClass) => (\n <div\n className={classnames(styles.cssVariablesContainer, themeClass)}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n key={`hasTouchSupport:${hasTouchSupport}`}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEnter={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>\n )}\n </ThemeWrapper>,\n document.body\n );\n};\n\nexport const BottomSheet = forwardRef(BottomSheetRenderFunc);\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"BottomSheet.js","sources":["../src/BottomSheet.tsx"],"sourcesContent":["import {\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n isValidElement,\n Fragment,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { disableOverscroll, disableScroll, TimeoutCallback } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n ScrollGestureEvent,\n CustomScrollContextNotifier,\n CustomScrollContextProvider,\n initScrollHandlers,\n} from '@hh.ru/magritte-internal-custom-scroll';\nimport { isActionBarComponent } from '@hh.ru/magritte-ui-action-bar';\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ContentOverlayRoot } from '@hh.ru/magritte-ui-content-overlay';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';\nimport { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst DEFAULT_ACTION_BAR_PADDING = 16;\n\nconst checkSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isContentSizedFullHeight = (children: React.ReactNode) =>\n (isValidElement(children) &&\n typeof children.type === 'function' &&\n 'isFullHeightBottomSheetContent' in children.type &&\n (children.props as { fixedHeight?: boolean }).fixedHeight !== true) ||\n isValidTreeSelectorWrapper(children);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst textInputTypes = ['text', 'password', 'email', 'search', 'tel', 'url', 'number'];\nconst isTextInputElement = (element: Element): element is HTMLInputElement => {\n if (element instanceof HTMLInputElement) {\n return textInputTypes.includes(element.type);\n } else if (element instanceof HTMLTextAreaElement) {\n return true;\n }\n\n return false;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n // если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n // translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.initialOffset\n scrollOffset: number;\n // translateY для эмуляции свайпа, всегда положительный либо 0\n swipeOffset: number;\n // текущее действие, инициированное пользователем\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n // число, на которое нужно анимировать изменение высоты контента боттомшита\n heightAnimationDiff: number | null;\n heightAnimationCallback?: VoidFunction | null;\n skipHeightAnimation?: boolean;\n};\n\nconst makeInitialState = (): State => ({\n dividerVisible: false,\n grabberUnsafe: false,\n hasFocus: false,\n resizeRAFHandle: null,\n scrollOffset: 0,\n swipeOffset: 0,\n touchAction: null,\n exitHandlers: [],\n heightAnimationDiff: null,\n});\n\nconst BottomSheetRenderFunc: ForwardRefRenderFunction<HTMLElement, BottomSheetProps> = (\n {\n allowScrollWhileFocused,\n children,\n footer,\n header,\n height = 'content',\n interceptClickHandlers = true,\n keyboardOverlaysFooter = true,\n onAppear,\n onBeforeExit,\n onAfterExit,\n onClose,\n showDivider = 'with-scroll',\n showOverlay = true,\n visible = false,\n withContentPaddings = true,\n withTopPadding = true,\n 'data-qa': dataQA,\n interceptTouchHandlers = true,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n const VIEWPORT_HEIGHT = useRef(0);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const headerWrapperRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const focusedElementRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n const GrowLimitWrapper = isContentSizedFullHeight(children) ? Fragment : TextAreaGrowLimiter;\n\n const growLimiterRef = useRef<HTMLDivElement>(null);\n\n const growLimiterContextValue = useState(() => {\n let height = 'auto';\n let limiterFlex = '1 0';\n return {\n containerRef: scrollContainerRef,\n preMeasurement: () => {\n if (!visualContainerRef.current || !growLimiterRef.current) {\n return;\n }\n height = visualContainerRef.current.style.height;\n limiterFlex = growLimiterRef.current.style.flex;\n visualContainerRef.current.style.height = 'auto';\n },\n postMeasurement: () => {\n visualContainerRef.current && (visualContainerRef.current.style.height = height);\n growLimiterRef.current && (growLimiterRef.current.style.flex = limiterFlex);\n },\n };\n })[0];\n\n const growLimiterProps = useMemo(\n () =>\n GrowLimitWrapper === TextAreaGrowLimiter\n ? {\n ...growLimiterContextValue,\n ref: growLimiterRef,\n debounce: true,\n className: styles.growLimiter,\n }\n : {},\n [GrowLimitWrapper, growLimiterContextValue]\n );\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>(makeInitialState());\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => {\n let keyboardResizeHandlers: Array<VoidFunction> = [];\n return {\n keyboardResizeHandlers,\n value: {\n height,\n subscribeToKeyboardResize: (handler: VoidFunction) => {\n keyboardResizeHandlers.push(handler);\n },\n unsubscribeFromKeyboardResize: (handlerToRemove: VoidFunction) => {\n keyboardResizeHandlers = keyboardResizeHandlers.filter((handler) => handler !== handlerToRemove);\n },\n },\n };\n }, [height]);\n const virtualKeyboardOffsetsRef = useRef<{ top: number; bottom: number }>({ top: 0, bottom: 0 });\n const animationTimeoutExitRef = useRef(animationTimeout?.appear.exit || 0);\n animationTimeoutExitRef.current = animationTimeout?.appear.exit || 0;\n\n const [isSafari, setIsSafari] = useState<boolean | null>(null);\n useEffect(() => setIsSafari(checkSafari()), [setIsSafari]);\n\n const [hasTouchSupport, setHasTouchSupport] = useState<boolean | null>(null);\n const hasTouchSupportRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!('matchMedia' in window)) {\n return void 0;\n }\n const mediaQuery = window.matchMedia('(pointer:coarse)');\n const handleMediaQueryChange = () => {\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n };\n mediaQuery.addEventListener('change', handleMediaQueryChange);\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n return () => mediaQuery.removeEventListener('change', handleMediaQueryChange);\n }, [setHasTouchSupport]);\n\n const bindEscapeToClose = useEscapeToClose(() => currentVisible && onCloseRef.current(null));\n useEffect(() => bindEscapeToClose(document.body), [bindEscapeToClose]);\n\n // TODO: replace by useInitOnce\n const LayoutMetrics = useState(() => {\n let cache: Record<string, number> = {};\n return {\n get scrollTop() {\n return Math.max(-stateRef.current.scrollOffset, 0);\n },\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n /**\n * Высота контента\n * Может превышать высоту контейнера из-за скролла\n */\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n\n return cache.contentHeight;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - LayoutMetrics.headerHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null && contentRef.current !== null) {\n cache.contentTop =\n contentRef.current.offsetTop - LayoutMetrics.scrollTop + visualContainerRef.current.offsetTop;\n }\n return cache.contentTop ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n /**\n * Фактическая высота, которую NavigationBar занимает в боттомшите\n * Может отличаться от видимой высоты NavigationBar\n */\n get headerHeight() {\n if (!('headerHeight' in cache) && headerWrapperRef.current !== null) {\n cache.headerHeight = headerWrapperRef.current.offsetHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n hasTouchSupportRef.current &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset = visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n get maxScrollTop() {\n return LayoutMetrics.contentHeight - LayoutMetrics.visibleContentHeight;\n },\n /**\n * Расстояние между верхним краем боттомшита и границей вьюпорта\n */\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })[0];\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n VIEWPORT_HEIGHT.current = visualViewport.height;\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n let enableScroll: TimeoutCallback | undefined = disableScroll();\n return () => {\n enableScroll?.(animationTimeoutExitRef.current);\n enableScroll = undefined;\n };\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || isSafari) {\n return;\n }\n\n // включаем настройку interactive-widget=resizes-content,\n // чтобы браузеры с поддержкой Virtual Keyboard API ресайзили Visual Viewport при появлении клавиатуры\n // в остальных браузерах (Safari и Chrome < 108) это поведение по умолчанию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, isSafari]);\n\n const fixOverscroll = useCallback(() => {\n if (hasTouchSupport) {\n const isOverscrolled =\n LayoutMetrics.contentHeight + stateRef.current.scrollOffset < LayoutMetrics.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = hasTouchSupport\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd = LayoutMetrics.contentHeight + scrollOffset > LayoutMetrics.visibleContentHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null && stateRef.current.touchAction === null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider, LayoutMetrics]);\n\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // при открытии виртуальной клавиатуры браузеры двигают Visual Viewport и Layout Viewport\n // с помощью двух отступов делаем так, чтобы overlay боттомшита совпадал с видимой частью экрана\n const recalcKeyboardOffsets = useCallback(() => {\n if (\n !hasTouchSupport ||\n !contentRef.current ||\n !overlayRef.current ||\n !swipeContainerRef.current ||\n !visualViewport\n ) {\n return;\n }\n\n // разворачиваем боттомшит с height=half-screen на всю доступную высоту\n if (LayoutMetrics.initialOffset > 0 && stateRef.current.scrollOffset > 0) {\n stateRef.current.scrollOffset = 0;\n contentRef.current.style.transform = translateY(0);\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n\n LayoutMetrics.invalidateCache();\n\n const isKeyboardVisible = visualViewport.height !== VIEWPORT_HEIGHT.current;\n if (stateRef.current.hasFocus && focusedElementRef.current !== null && isKeyboardVisible) {\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const topOffset = Math.round(-overlayDOMRect.top);\n\n let bottomOffset = 0;\n if (isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n if (visualViewportDiff > 0) {\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n bottomOffset = visualViewportDiff;\n }\n }\n\n if (keyboardOverlaysFooter && footerRef.current !== null) {\n bottomOffset -= footerRef.current.clientHeight;\n }\n\n if (\n topOffset !== virtualKeyboardOffsetsRef.current.top ||\n bottomOffset !== virtualKeyboardOffsetsRef.current.bottom\n ) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${topOffset}px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${bottomOffset}px`);\n }\n\n LayoutMetrics.invalidateCache();\n\n // если фокусируемый элемент лежит внутри скроллящегося контейнера и не виден, скроллим к нему\n if (contentRef.current.contains(focusedElementRef.current)) {\n let focusedElementOffset = 0;\n for (\n let offsetElement: HTMLElement | null =\n focusedElementRef.current.closest('[data-interactive]') ?? focusedElementRef.current;\n offsetElement !== contentRef.current && offsetElement !== null;\n offsetElement = offsetElement.offsetParent as HTMLElement | null\n ) {\n focusedElementOffset += offsetElement.offsetTop;\n }\n const newScrollOffset = -Math.min(Math.max(focusedElementOffset - 10, 0), LayoutMetrics.maxScrollTop);\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = topOffset;\n virtualKeyboardOffsetsRef.current.bottom = bottomOffset;\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n LayoutMetrics.invalidateCache();\n fixOverscroll();\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = 0;\n virtualKeyboardOffsetsRef.current.bottom = 0;\n }\n\n stateRef.current.skipHeightAnimation = true;\n setTimeout(() => (stateRef.current.skipHeightAnimation = false), 100);\n bottomSheetContext.keyboardResizeHandlers.forEach((handler) => handler());\n }, [\n fixOverscroll,\n hasTouchSupport,\n isSafari,\n keyboardOverlaysFooter,\n recalcScrollFlags,\n bottomSheetContext,\n LayoutMetrics,\n ]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (!isTextInputElement(focusedElement) || stateRef.current.resizeRAFHandle !== null) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n focusedElementRef.current = null;\n\n if (isSafari) {\n recalcKeyboardOffsets();\n }\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n // событие scroll может прилететь, только если браузер сдвинул вьюпорт из-за появления виртуальной клавиатуры\n // пользовательский скролл не вызывает событие scroll, т.к. нативный скролл отключен\n // в Safari событие resize может прилететь до того как браузер сдвинул вьюпорт, поэтому слушаем scroll\n if (isSafari) {\n visualViewport?.addEventListener('scroll', handleResize);\n }\n focusedElement.addEventListener('blur', handleBlur);\n focusedElementRef.current = focusedElement;\n },\n [isSafari, recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n contentOverlayRef.current.style.top = `${LayoutMetrics.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.visibleContentHeight}px`;\n }\n }, [LayoutMetrics]);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current = makeInitialState();\n\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current.exitHandlers = [];\n onAfterExit?.();\n }, [onAfterExit]);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, [LayoutMetrics]);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationDiff = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n let onCloseCancelled = false;\n const cancelCloseFunc = () => {\n if (!onCloseCancelled) {\n handleSwipeCancel();\n onCloseCancelled = true;\n }\n };\n onCloseRef.current(cancelCloseFunc);\n }\n }, [handleSwipeCancel]);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const handleScroll = useCallback(\n (delta: number) => {\n if (LayoutMetrics.initialOffset !== 0 || LayoutMetrics.contentHeight > LayoutMetrics.visibleContentHeight) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (LayoutMetrics.contentHeight + roundedNewScrollOffset <= LayoutMetrics.visibleContentHeight) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n },\n [LayoutMetrics, recalcScrollFlags]\n );\n\n const scrollContextProps = useState(() => ({\n getMaxScrollTop: () => LayoutMetrics.maxScrollTop,\n getScrollTop: () => LayoutMetrics.scrollTop,\n setScrollTop: (pos: number) => handleScroll(-(pos - LayoutMetrics.scrollTop)),\n }))[0];\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let focusedElementTouchY: number | null = null;\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText() ||\n (focusedElementRef.current !== null &&\n focusedElementTouchY !== null &&\n focusedElementRef.current.clientHeight !== focusedElementRef.current.scrollHeight)\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (focusedElementTouchY !== null) {\n focusedElementTouchY = null;\n }\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n scrollContextProviderRef.current?.notifyTouchEnd();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n focusedElementTouchY = null;\n swipeHandlers.onTouchStart(event);\n }\n visualContainer.classList.add(styles.noCaret);\n scrollContextProviderRef.current?.notifyTouchStart();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n if (interceptTouchHandlers) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (focusedElementRef.current !== null && focusedElementTouchY !== null) {\n focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n swipeHandlers.onTouchMove(event);\n }\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n swipeHandlers.onTouchEnd(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n swipeHandlers.onTouchCancel(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', handleTouchEnd);\n visualContainer.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', handleTouchEnd);\n visualContainer.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [allowScrollWhileFocused, swipeHandlers, interceptTouchHandlers, handleScroll]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevVisibleContentHeight = 0;\n let skipFirstResizeCallback = true;\n let collapseResizeCallbacks = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n visualContainer.style.height = skipFirstResizeCallback ? `${LayoutMetrics.bottomSheetHeight}px` : '';\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n\n skipFirstResizeCallback = false;\n stateRef.current.skipHeightAnimation = false;\n return;\n }\n\n if (stateRef.current.heightAnimationDiff !== null) {\n if (!collapseResizeCallbacks) {\n // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером\n visualContainer.style.height = ``;\n }\n } else {\n const contentHeightDiff = LayoutMetrics.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.headerHeight - prevHeaderHeight + LayoutMetrics.footerHeight - prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevVisibleContentHeight - containersHeightDiff,\n LayoutMetrics.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff = LayoutMetrics.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n } else {\n // если высота видимой части контента не изменилась,\n // но позиция скролла превысила максимально допустимую из-за уменьшения высоты контента,\n // сбрасываем позицию скролла на максимально допустимую\n fixOverscroll();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n stateRef.current.heightAnimationDiff = heightAnimationDiff;\n stateRef.current.heightAnimationCallback = () => {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerWrapperRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && resizeObserver.observe(header);\n\n return () => resizeObserver.disconnect();\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\n LayoutMetrics,\n ]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = hasTouchSupport && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [hasTouchSupport, initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlersRaw } = useNoBubbling();\n\n const eventHandlers = interceptTouchHandlers\n ? eventHandlersRaw\n : { ...eventHandlersRaw, onTouchMove: undefined, onTouchStart: undefined, onTouchEnd: undefined };\n\n if (!animationTimeout) {\n return null;\n }\n\n const containerDataQa = `bottom-sheet-container${dataQA ? ` ${dataQA}` : ''}`;\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight(children),\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext.value}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = hasTouchSupport ? (\n <CustomScrollContextProvider\n ref={scrollContextProviderRef}\n wrapperRef={scrollContainerRef}\n {...scrollContextProps}\n >\n <div\n className={classnames(styles.scrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, {\n type: footer.props.type || 'vertical',\n padding: footer.props.padding || DEFAULT_ACTION_BAR_PADDING,\n showDivider: false,\n })\n : footer;\n\n return (\n <Layer layer=\"bottom-sheet\">\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: () => onCloseRef.current(null) }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? containerDataQa : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <ContentOverlayRoot ref={contentOverlayRef}>\n <div\n className={classnames(styles.visualContainer, {\n [styles.visualContainerFullScreen]: height === 'full-screen',\n [styles.heightTransitionAnimation]: heightTransition === 'entering',\n })}\n data-qa={appearTransition === 'entered' ? 'bottom-sheet-content' : undefined}\n ref={bottomSheetRef}\n >\n {scrollContainer}\n <div className={styles.footer} ref={footerRef}>\n {footer && (\n <div\n className={classnames(styles.divider, {\n [styles.dividerVisible]: stateRef.current.dividerVisible,\n })}\n ref={dividerRef}\n >\n <Divider />\n </div>\n )}\n {interceptClickHandlers && hasTouchSupport ? (\n <ClickInterceptor>{clonedFooter}</ClickInterceptor>\n ) : (\n clonedFooter\n )}\n </div>\n </div>\n </ContentOverlayRoot>\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <ThemeWrapper>\n {(themeClass) => (\n <div\n className={classnames(styles.cssVariablesContainer, themeClass)}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n key={`hasTouchSupport:${hasTouchSupport}`}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEnter={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>\n )}\n </ThemeWrapper>,\n document.body\n );\n};\n\nexport const BottomSheet = forwardRef(BottomSheetRenderFunc);\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
- import { RefObject } from 'react';
2
1
  import { BottomSheetHeight } from '@hh.ru/magritte-ui-bottom-sheet/types';
3
2
  export interface BottomSheetContextProps {
4
- contentOverlayRef: RefObject<HTMLDivElement | null>;
5
3
  height: BottomSheetHeight;
6
4
  subscribeToKeyboardResize: (handler: VoidFunction) => void;
7
5
  unsubscribeFromKeyboardResize: (handler: VoidFunction) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheetContext.js","sources":["../src/BottomSheetContext.ts"],"sourcesContent":["import { RefObject, createContext } from 'react';\n\nimport { BottomSheetHeight } from '@hh.ru/magritte-ui-bottom-sheet/types';\n\nexport interface BottomSheetContextProps {\n contentOverlayRef: RefObject<HTMLDivElement | null>;\n height: BottomSheetHeight;\n subscribeToKeyboardResize: (handler: VoidFunction) => void;\n unsubscribeFromKeyboardResize: (handler: VoidFunction) => void;\n}\n\nexport const BottomSheetContext = createContext<BottomSheetContextProps | null>(null);\n"],"names":[],"mappings":";;MAWa,kBAAkB,GAAG,aAAa,CAAiC,IAAI;;;;"}
1
+ {"version":3,"file":"BottomSheetContext.js","sources":["../src/BottomSheetContext.ts"],"sourcesContent":["import { createContext } from 'react';\n\nimport { BottomSheetHeight } from '@hh.ru/magritte-ui-bottom-sheet/types';\n\nexport interface BottomSheetContextProps {\n height: BottomSheetHeight;\n subscribeToKeyboardResize: (handler: VoidFunction) => void;\n unsubscribeFromKeyboardResize: (handler: VoidFunction) => void;\n}\n\nexport const BottomSheetContext = createContext<BottomSheetContextProps | null>(null);\n"],"names":[],"mappings":";;MAUa,kBAAkB,GAAG,aAAa,CAAiC,IAAI;;;;"}
@@ -1,6 +1,6 @@
1
1
  import './index.css';
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { s as styles } from './bottom-sheet-BbHd5KSs.js';
3
+ import { s as styles } from './bottom-sheet-dS5MKDxs.js';
4
4
 
5
5
  const BottomSheetFooter = ({ children }) => (jsx("div", { className: styles.footerWithPadding, children: children }));
6
6
 
@@ -1,7 +1,7 @@
1
1
  import './index.css';
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useRef, useEffect } from 'react';
4
- import { s as styles } from './bottom-sheet-BbHd5KSs.js';
4
+ import { s as styles } from './bottom-sheet-dS5MKDxs.js';
5
5
 
6
6
  const BottomSheetIFrameAdapter = ({ children }) => {
7
7
  const touchEventsInterceptorRef = useRef(null);
@@ -0,0 +1,5 @@
1
+ import './index.css';
2
+ var styles = {"flex-container":"magritte-flex-container___muHAx_9-0-0","flexContainer":"magritte-flex-container___muHAx_9-0-0","animation-timeout":"magritte-animation-timeout___yd-SZ_9-0-0","animationTimeout":"magritte-animation-timeout___yd-SZ_9-0-0","css-variables-container":"magritte-css-variables-container___jBCr9_9-0-0","cssVariablesContainer":"magritte-css-variables-container___jBCr9_9-0-0","appear-animation":"magritte-appear-animation___P84Ln_9-0-0","appearAnimation":"magritte-appear-animation___P84Ln_9-0-0","disappear-animation":"magritte-disappear-animation___Putks_9-0-0","disappearAnimation":"magritte-disappear-animation___Putks_9-0-0","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_9-0-0","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_9-0-0","height-transition-animation":"magritte-height-transition-animation___xNprr_9-0-0","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_9-0-0","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_9-0-0","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_9-0-0","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_9-0-0","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_9-0-0","overlay":"magritte-overlay___5a2U-_9-0-0","overlay-background":"magritte-overlay-background___8Sd4V_9-0-0","overlayBackground":"magritte-overlay-background___8Sd4V_9-0-0","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_9-0-0","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_9-0-0","swipe-container":"magritte-swipe-container___sZ2n5_9-0-0","swipeContainer":"magritte-swipe-container___sZ2n5_9-0-0","grabber":"magritte-grabber___A7SB-_9-0-0","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_9-0-0","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_9-0-0","visual-container":"magritte-visual-container___-VSuY_9-0-0","visualContainer":"magritte-visual-container___-VSuY_9-0-0","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_9-0-0","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_9-0-0","scroll-container":"magritte-scroll-container___4ngNY_9-0-0","scrollContainer":"magritte-scroll-container___4ngNY_9-0-0","scroll-container_with-top-padding":"magritte-scroll-container_with-top-padding___o60Dl_9-0-0","scrollContainerWithTopPadding":"magritte-scroll-container_with-top-padding___o60Dl_9-0-0","native-scroll-container":"magritte-native-scroll-container___JOlxE_9-0-0","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_9-0-0","content":"magritte-content___1gAwP_9-0-0","content_full-screen":"magritte-content_full-screen___2SFaO_9-0-0","contentFullScreen":"magritte-content_full-screen___2SFaO_9-0-0","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_9-0-0","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_9-0-0","content_with-paddings":"magritte-content_with-paddings___gIiAv_9-0-0","contentWithPaddings":"magritte-content_with-paddings___gIiAv_9-0-0","footer":"magritte-footer___RWslT_9-0-0","footer-with-padding":"magritte-footer-with-padding___KwkhC_9-0-0","footerWithPadding":"magritte-footer-with-padding___KwkhC_9-0-0","divider":"magritte-divider___0F8hh_9-0-0","divider_visible":"magritte-divider_visible___pAWZM_9-0-0","dividerVisible":"magritte-divider_visible___pAWZM_9-0-0","content-overlay":"magritte-content-overlay___HAyzL_9-0-0","contentOverlay":"magritte-content-overlay___HAyzL_9-0-0","no-caret":"magritte-no-caret___ewcMD_9-0-0","noCaret":"magritte-no-caret___ewcMD_9-0-0","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_9-0-0","iframeWrapper":"magritte-iframe-wrapper___gBCL5_9-0-0","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_9-0-0","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_9-0-0","grow-limiter":"magritte-grow-limiter___ANaBL_9-0-0","growLimiter":"magritte-grow-limiter___ANaBL_9-0-0","header-wrapper":"magritte-header-wrapper___LdLOU_9-0-0","headerWrapper":"magritte-header-wrapper___LdLOU_9-0-0"};
3
+
4
+ export { styles as s };
5
+ //# sourceMappingURL=bottom-sheet-dS5MKDxs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-sheet-dS5MKDxs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/index.css CHANGED
@@ -19,13 +19,13 @@
19
19
  --magritte-color-component-bottom-sheet-grabber-content-v23-2-3:#c6c6c68f;
20
20
  --magritte-color-component-_overlay-background-content-v23-2-3:#26262699;
21
21
  }
22
- .magritte-flex-container___muHAx_8-2-12{
22
+ .magritte-flex-container___muHAx_9-0-0{
23
23
  display:flex;
24
24
  flex-direction:column;
25
25
  align-items:stretch;
26
26
  }
27
- .magritte-animation-timeout___yd-SZ_8-2-12,
28
- .magritte-css-variables-container___jBCr9_8-2-12{
27
+ .magritte-animation-timeout___yd-SZ_9-0-0,
28
+ .magritte-css-variables-container___jBCr9_9-0-0{
29
29
  --virtual-keyboard-top-offset:0px;
30
30
  --virtual-keyboard-bottom-offset:0px;
31
31
  --enter-animation-duration:0ms;
@@ -35,8 +35,8 @@
35
35
  --swipe-cancel-transition-duration:0ms;
36
36
  }
37
37
  @media (prefers-reduced-motion: no-preference){
38
- .magritte-animation-timeout___yd-SZ_8-2-12,
39
- .magritte-css-variables-container___jBCr9_8-2-12{
38
+ .magritte-animation-timeout___yd-SZ_9-0-0,
39
+ .magritte-css-variables-container___jBCr9_9-0-0{
40
40
  --enter-animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v23-2-3);
41
41
  --exit-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-3);
42
42
  --grabber-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v23-2-3);
@@ -44,52 +44,52 @@
44
44
  --swipe-cancel-transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v23-2-3);
45
45
  }
46
46
  }
47
- .magritte-appear-animation___P84Ln_8-2-12{
47
+ .magritte-appear-animation___P84Ln_9-0-0{
48
48
  transition-property:transform opacity;
49
49
  transition-duration:var(--enter-animation-duration);
50
50
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-300-timing-function-v23-2-3);
51
51
  }
52
- .magritte-disappear-animation___Putks_8-2-12{
52
+ .magritte-disappear-animation___Putks_9-0-0{
53
53
  transition-property:transform opacity;
54
54
  transition-duration:var(--exit-animation-duration);
55
55
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-3);
56
56
  }
57
- .magritte-grabber-transition-animation___s3Oh4_8-2-12::after{
57
+ .magritte-grabber-transition-animation___s3Oh4_9-0-0::after{
58
58
  transition-property:transform;
59
59
  transition-duration:var(--grabber-animation-duration);
60
60
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v23-2-3);
61
61
  }
62
- .magritte-height-transition-animation___xNprr_8-2-12{
62
+ .magritte-height-transition-animation___xNprr_9-0-0{
63
63
  transition-property:height;
64
64
  transition-duration:var(--height-transition-duration);
65
65
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-400-timing-function-v23-2-3);
66
66
  }
67
- .magritte-close-by-swipe-animation___wdezY_8-2-12{
67
+ .magritte-close-by-swipe-animation___wdezY_9-0-0{
68
68
  transition-property:transform;
69
69
  transition-duration:var(--exit-animation-duration);
70
70
  transition-timing-function:linear;
71
71
  }
72
- .magritte-swipe-cancel-animation___AhYj5_8-2-12{
72
+ .magritte-swipe-cancel-animation___AhYj5_9-0-0{
73
73
  transition-property:transform;
74
74
  transition-duration:var(--swipe-cancel-transition-duration);
75
75
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-duration-v23-2-3);
76
76
  }
77
- .magritte-overlay___5a2U-_8-2-12{
77
+ .magritte-overlay___5a2U-_9-0-0{
78
78
  pointer-events:none;
79
79
  position:fixed;
80
80
  inset:0;
81
81
  }
82
- .magritte-overlay-background___8Sd4V_8-2-12{
82
+ .magritte-overlay-background___8Sd4V_9-0-0{
83
83
  position:absolute;
84
84
  inset:0;
85
85
  will-change:opacity;
86
86
  transform:translate3d(0, 0, 0);
87
87
  }
88
- .magritte-overlay-background_visible___FOJgj_8-2-12{
88
+ .magritte-overlay-background_visible___FOJgj_9-0-0{
89
89
  pointer-events:initial;
90
90
  background-color:var(--magritte-color-component-_overlay-background-content-v23-2-3);
91
91
  }
92
- .magritte-swipe-container___sZ2n5_8-2-12{
92
+ .magritte-swipe-container___sZ2n5_9-0-0{
93
93
  display:flex;
94
94
  flex-direction:column;
95
95
  align-items:stretch;
@@ -99,11 +99,11 @@
99
99
  will-change:transform;
100
100
  transform:translate3d(0, 0, 0);
101
101
  }
102
- .magritte-grabber___A7SB-_8-2-12{
102
+ .magritte-grabber___A7SB-_9-0-0{
103
103
  flex:0 0 20px;
104
104
  position:relative;
105
105
  }
106
- .magritte-grabber___A7SB-_8-2-12::after{
106
+ .magritte-grabber___A7SB-_9-0-0::after{
107
107
  content:'';
108
108
  position:absolute;
109
109
  top:8px;
@@ -114,10 +114,10 @@
114
114
  border-radius:2px;
115
115
  z-index:3;
116
116
  }
117
- .magritte-grabber_ensure-safe___DR-dV_8-2-12::after{
117
+ .magritte-grabber_ensure-safe___DR-dV_9-0-0::after{
118
118
  transform:translateY(20px);
119
119
  }
120
- .magritte-visual-container___-VSuY_8-2-12{
120
+ .magritte-visual-container___-VSuY_9-0-0{
121
121
  display:flex;
122
122
  flex-direction:column;
123
123
  align-items:stretch;
@@ -130,11 +130,11 @@
130
130
  overflow:clip;
131
131
  user-select:text;
132
132
  }
133
- .magritte-visual-container_full-screen___jCCBb_8-2-12{
133
+ .magritte-visual-container_full-screen___jCCBb_9-0-0{
134
134
  flex:1 1 auto;
135
135
  min-height:1px;
136
136
  }
137
- .magritte-scroll-container___4ngNY_8-2-12{
137
+ .magritte-scroll-container___4ngNY_9-0-0{
138
138
  --magritte-ui-navigation-bar-background-override:var(--magritte-color-component-bottom-sheet-background-content-v23-2-3);
139
139
  display:flex;
140
140
  flex-direction:column;
@@ -143,17 +143,17 @@
143
143
  min-height:1px;
144
144
  z-index:1;
145
145
  }
146
- .magritte-scroll-container_with-top-padding___o60Dl_8-2-12{
146
+ .magritte-scroll-container_with-top-padding___o60Dl_9-0-0{
147
147
  --magritte-ui-navigation-bar-top-padding-override:16px;
148
148
  }
149
- .magritte-native-scroll-container___JOlxE_8-2-12{
149
+ .magritte-native-scroll-container___JOlxE_9-0-0{
150
150
  overflow:scroll;
151
151
  scrollbar-width:none;
152
152
  }
153
- .magritte-native-scroll-container___JOlxE_8-2-12::-webkit-scrollbar{
153
+ .magritte-native-scroll-container___JOlxE_9-0-0::-webkit-scrollbar{
154
154
  display:none;
155
155
  }
156
- .magritte-content___1gAwP_8-2-12{
156
+ .magritte-content___1gAwP_9-0-0{
157
157
  display:flex;
158
158
  flex-direction:column;
159
159
  align-items:stretch;
@@ -162,17 +162,17 @@
162
162
  will-change:transform;
163
163
  transform:translate3d(0, 0, 0);
164
164
  }
165
- .magritte-content_full-screen___2SFaO_8-2-12{
165
+ .magritte-content_full-screen___2SFaO_9-0-0{
166
166
  flex:1 0 auto;
167
167
  }
168
- .magritte-content_sized-full-screen___45pa6_8-2-12{
168
+ .magritte-content_sized-full-screen___45pa6_9-0-0{
169
169
  flex:1 1 auto;
170
170
  min-height:1px;
171
171
  }
172
- .magritte-content_with-paddings___gIiAv_8-2-12{
172
+ .magritte-content_with-paddings___gIiAv_9-0-0{
173
173
  padding:16px 16px 0;
174
174
  }
175
- .magritte-footer___RWslT_8-2-12{
175
+ .magritte-footer___RWslT_9-0-0{
176
176
  flex:0 0 auto;
177
177
  background-color:var(--magritte-color-component-bottom-sheet-background-content-v23-2-3);
178
178
  z-index:2;
@@ -180,40 +180,40 @@
180
180
  transform:translate3d(0, 0, 0);
181
181
  --magritte-ui-action-bar-background-color-override:var(--magritte-color-component-bottom-sheet-background-content-v23-2-3);
182
182
  }
183
- .magritte-footer-with-padding___KwkhC_8-2-12{
183
+ .magritte-footer-with-padding___KwkhC_9-0-0{
184
184
  display:flex;
185
185
  flex-direction:column;
186
186
  gap:12px;
187
187
  padding:16px;
188
188
  }
189
- .magritte-divider___0F8hh_8-2-12{
189
+ .magritte-divider___0F8hh_9-0-0{
190
190
  visibility:hidden;
191
191
  }
192
- .magritte-divider_visible___pAWZM_8-2-12{
192
+ .magritte-divider_visible___pAWZM_9-0-0{
193
193
  visibility:visible;
194
194
  }
195
- .magritte-content-overlay___HAyzL_8-2-12{
195
+ .magritte-content-overlay___HAyzL_9-0-0{
196
196
  pointer-events:none;
197
197
  position:absolute;
198
198
  inset:0;
199
199
  }
200
- .magritte-no-caret___ewcMD_8-2-12{
200
+ .magritte-no-caret___ewcMD_9-0-0{
201
201
  --magritte-ui-input-caret-color-override:transparent;
202
202
  --magritte-ui-textarea-caret-color-override:transparent;
203
203
  }
204
- .magritte-iframe-wrapper___gBCL5_8-2-12{
204
+ .magritte-iframe-wrapper___gBCL5_9-0-0{
205
205
  position:relative;
206
206
  }
207
- .magritte-iframe-events-interceptor___FTW-8_8-2-12{
207
+ .magritte-iframe-events-interceptor___FTW-8_9-0-0{
208
208
  position:absolute;
209
209
  inset:0;
210
210
  }
211
- .magritte-grow-limiter___ANaBL_8-2-12{
211
+ .magritte-grow-limiter___ANaBL_9-0-0{
212
212
  display:flex;
213
213
  flex-direction:column;
214
214
  flex:1 0;
215
215
  }
216
- .magritte-header-wrapper___LdLOU_8-2-12{
216
+ .magritte-header-wrapper___LdLOU_9-0-0{
217
217
  position:sticky;
218
218
  z-index:1;
219
219
  top:0;
package/index.d.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export { BottomSheet } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheet';
2
- export { BottomSheetContentOverlay } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContentOverlay';
3
2
  export { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';
4
3
  export { BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetFooter';
5
4
  export { BottomSheetIFrameAdapter } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetIFrameAdapter';
package/index.js CHANGED
@@ -1,6 +1,5 @@
1
1
  import './index.css';
2
2
  export { BottomSheet } from './BottomSheet.js';
3
- export { BottomSheetContentOverlay } from './BottomSheetContentOverlay.js';
4
3
  export { BottomSheetContext } from './BottomSheetContext.js';
5
4
  export { BottomSheetFooter } from './BottomSheetFooter.js';
6
5
  export { BottomSheetIFrameAdapter } from './BottomSheetIFrameAdapter.js';
@@ -18,10 +17,11 @@ import '@hh.ru/magritte-internal-custom-scroll';
18
17
  import '@hh.ru/magritte-ui-action-bar';
19
18
  import './ClickInterceptor.js';
20
19
  import '@hh.ru/magritte-ui-breakpoint';
20
+ import '@hh.ru/magritte-ui-content-overlay';
21
21
  import '@hh.ru/magritte-ui-divider';
22
22
  import '@hh.ru/magritte-ui-layer';
23
23
  import '@hh.ru/magritte-ui-textarea';
24
24
  import '@hh.ru/magritte-ui-theme-wrapper';
25
25
  import '@hh.ru/magritte-ui-tree-selector';
26
- import './bottom-sheet-BbHd5KSs.js';
26
+ import './bottom-sheet-dS5MKDxs.js';
27
27
  //# sourceMappingURL=index.js.map
package/index.mock.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  import { ForwardRefExoticComponent } from 'react';
2
2
  export * from '@hh.ru/magritte-ui-bottom-sheet/types';
3
3
  export declare const BottomSheet: ForwardRefExoticComponent<Record<string, unknown>>;
4
- export declare const BottomSheetContentOverlay: ForwardRefExoticComponent<Record<string, unknown>>;
5
4
  export { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';
6
5
  export declare const BottomSheetFooter: ForwardRefExoticComponent<Record<string, unknown>>;
7
6
  export declare const BottomSheetIFrameAdapter: ForwardRefExoticComponent<Record<string, unknown>>;
package/index.mock.js CHANGED
@@ -6,9 +6,6 @@ import 'react';
6
6
  const BottomSheet = mockComponent('BottomSheet', undefined, {
7
7
  withChildren: true,
8
8
  });
9
- const BottomSheetContentOverlay = mockComponent('BottomSheetContentOverlay', undefined, {
10
- withChildren: true,
11
- });
12
9
  const BottomSheetFooter = mockComponent('BottomSheetFooter', undefined, {
13
10
  withChildren: true,
14
11
  });
@@ -16,5 +13,5 @@ const BottomSheetIFrameAdapter = mockComponent('BottomSheetIFrameAdapter', undef
16
13
  withChildren: true,
17
14
  });
18
15
 
19
- export { BottomSheet, BottomSheetContentOverlay, BottomSheetFooter, BottomSheetIFrameAdapter };
16
+ export { BottomSheet, BottomSheetFooter, BottomSheetIFrameAdapter };
20
17
  //# sourceMappingURL=index.mock.js.map
package/index.mock.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mock.js","sources":["../src/index.mock.ts"],"sourcesContent":["import { ForwardRefExoticComponent } from 'react';\n\nimport { mockComponent } from '@hh.ru/magritte-ui-mock-component';\n\nexport * from '@hh.ru/magritte-ui-bottom-sheet/types';\n\nexport const BottomSheet: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent('BottomSheet', undefined, {\n withChildren: true,\n});\n\nexport const BottomSheetContentOverlay: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'BottomSheetContentOverlay',\n undefined,\n {\n withChildren: true,\n }\n);\n\nexport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\n\nexport const BottomSheetFooter: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'BottomSheetFooter',\n undefined,\n {\n withChildren: true,\n }\n);\n\nexport const BottomSheetIFrameAdapter: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'BottomSheetIFrameAdapter',\n undefined,\n {\n withChildren: true,\n }\n);\n"],"names":[],"mappings":";;;;MAMa,WAAW,GAAuD,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE;AACnH,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EAAE;MAEU,yBAAyB,GAAuD,aAAa,CACtG,2BAA2B,EAC3B,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EACH;MAIW,iBAAiB,GAAuD,aAAa,CAC9F,mBAAmB,EACnB,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EACH;MAEW,wBAAwB,GAAuD,aAAa,CACrG,0BAA0B,EAC1B,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA;;;;"}
1
+ {"version":3,"file":"index.mock.js","sources":["../src/index.mock.ts"],"sourcesContent":["import { ForwardRefExoticComponent } from 'react';\n\nimport { mockComponent } from '@hh.ru/magritte-ui-mock-component';\n\nexport * from '@hh.ru/magritte-ui-bottom-sheet/types';\n\nexport const BottomSheet: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent('BottomSheet', undefined, {\n withChildren: true,\n});\n\nexport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\n\nexport const BottomSheetFooter: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'BottomSheetFooter',\n undefined,\n {\n withChildren: true,\n }\n);\n\nexport const BottomSheetIFrameAdapter: ForwardRefExoticComponent<Record<string, unknown>> = mockComponent(\n 'BottomSheetIFrameAdapter',\n undefined,\n {\n withChildren: true,\n }\n);\n"],"names":[],"mappings":";;;;MAMa,WAAW,GAAuD,aAAa,CAAC,aAAa,EAAE,SAAS,EAAE;AACnH,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EAAE;MAIU,iBAAiB,GAAuD,aAAa,CAC9F,mBAAmB,EACnB,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA,EACH;MAEW,wBAAwB,GAAuD,aAAa,CACrG,0BAA0B,EAC1B,SAAS,EACT;AACI,IAAA,YAAY,EAAE,IAAI;AACrB,CAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-bottom-sheet",
3
- "version": "8.2.12",
3
+ "version": "9.0.0",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -30,6 +30,7 @@
30
30
  "@hh.ru/magritte-internal-layer-name": "3.1.1",
31
31
  "@hh.ru/magritte-ui-action-bar": "5.0.13",
32
32
  "@hh.ru/magritte-ui-breakpoint": "6.0.1",
33
+ "@hh.ru/magritte-ui-content-overlay": "1.1.0",
33
34
  "@hh.ru/magritte-ui-divider": "3.0.7",
34
35
  "@hh.ru/magritte-ui-layer": "3.0.5",
35
36
  "@hh.ru/magritte-ui-mock-component": "1.1.5",
@@ -46,5 +47,5 @@
46
47
  "publishConfig": {
47
48
  "access": "public"
48
49
  },
49
- "gitHead": "90a91eaf0ef55ef0ae534be060b7bf4c27736f36"
50
+ "gitHead": "b20ca79252fa840d3d5fafb398e47efdfe3a00a9"
50
51
  }
@@ -1,2 +0,0 @@
1
- import { FC, PropsWithChildren } from 'react';
2
- export declare const BottomSheetContentOverlay: FC<PropsWithChildren>;
@@ -1,14 +0,0 @@
1
- import './index.css';
2
- import { useContext } from 'react';
3
- import { createPortal } from 'react-dom';
4
- import { BottomSheetContext } from './BottomSheetContext.js';
5
-
6
- const BottomSheetContentOverlay = ({ children }) => {
7
- const bottomSheetContext = useContext(BottomSheetContext);
8
- return bottomSheetContext !== null && bottomSheetContext.contentOverlayRef.current !== null
9
- ? createPortal(children, bottomSheetContext.contentOverlayRef.current)
10
- : null;
11
- };
12
-
13
- export { BottomSheetContentOverlay };
14
- //# sourceMappingURL=BottomSheetContentOverlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BottomSheetContentOverlay.js","sources":["../src/BottomSheetContentOverlay.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useContext } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';\n\nexport const BottomSheetContentOverlay: FC<PropsWithChildren> = ({ children }) => {\n const bottomSheetContext = useContext(BottomSheetContext);\n return bottomSheetContext !== null && bottomSheetContext.contentOverlayRef.current !== null\n ? createPortal(children, bottomSheetContext.contentOverlayRef.current)\n : null;\n};\n"],"names":[],"mappings":";;;;MAKa,yBAAyB,GAA0B,CAAC,EAAE,QAAQ,EAAE,KAAI;AAC7E,IAAA,MAAM,kBAAkB,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC1D,OAAO,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,KAAK,IAAI;UACrF,YAAY,CAAC,QAAQ,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC;UACpE,IAAI,CAAC;AACf;;;;"}
@@ -1,5 +0,0 @@
1
- import './index.css';
2
- var styles = {"flex-container":"magritte-flex-container___muHAx_8-2-12","flexContainer":"magritte-flex-container___muHAx_8-2-12","animation-timeout":"magritte-animation-timeout___yd-SZ_8-2-12","animationTimeout":"magritte-animation-timeout___yd-SZ_8-2-12","css-variables-container":"magritte-css-variables-container___jBCr9_8-2-12","cssVariablesContainer":"magritte-css-variables-container___jBCr9_8-2-12","appear-animation":"magritte-appear-animation___P84Ln_8-2-12","appearAnimation":"magritte-appear-animation___P84Ln_8-2-12","disappear-animation":"magritte-disappear-animation___Putks_8-2-12","disappearAnimation":"magritte-disappear-animation___Putks_8-2-12","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_8-2-12","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_8-2-12","height-transition-animation":"magritte-height-transition-animation___xNprr_8-2-12","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_8-2-12","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_8-2-12","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_8-2-12","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_8-2-12","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_8-2-12","overlay":"magritte-overlay___5a2U-_8-2-12","overlay-background":"magritte-overlay-background___8Sd4V_8-2-12","overlayBackground":"magritte-overlay-background___8Sd4V_8-2-12","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_8-2-12","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_8-2-12","swipe-container":"magritte-swipe-container___sZ2n5_8-2-12","swipeContainer":"magritte-swipe-container___sZ2n5_8-2-12","grabber":"magritte-grabber___A7SB-_8-2-12","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_8-2-12","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_8-2-12","visual-container":"magritte-visual-container___-VSuY_8-2-12","visualContainer":"magritte-visual-container___-VSuY_8-2-12","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_8-2-12","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_8-2-12","scroll-container":"magritte-scroll-container___4ngNY_8-2-12","scrollContainer":"magritte-scroll-container___4ngNY_8-2-12","scroll-container_with-top-padding":"magritte-scroll-container_with-top-padding___o60Dl_8-2-12","scrollContainerWithTopPadding":"magritte-scroll-container_with-top-padding___o60Dl_8-2-12","native-scroll-container":"magritte-native-scroll-container___JOlxE_8-2-12","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_8-2-12","content":"magritte-content___1gAwP_8-2-12","content_full-screen":"magritte-content_full-screen___2SFaO_8-2-12","contentFullScreen":"magritte-content_full-screen___2SFaO_8-2-12","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_8-2-12","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_8-2-12","content_with-paddings":"magritte-content_with-paddings___gIiAv_8-2-12","contentWithPaddings":"magritte-content_with-paddings___gIiAv_8-2-12","footer":"magritte-footer___RWslT_8-2-12","footer-with-padding":"magritte-footer-with-padding___KwkhC_8-2-12","footerWithPadding":"magritte-footer-with-padding___KwkhC_8-2-12","divider":"magritte-divider___0F8hh_8-2-12","divider_visible":"magritte-divider_visible___pAWZM_8-2-12","dividerVisible":"magritte-divider_visible___pAWZM_8-2-12","content-overlay":"magritte-content-overlay___HAyzL_8-2-12","contentOverlay":"magritte-content-overlay___HAyzL_8-2-12","no-caret":"magritte-no-caret___ewcMD_8-2-12","noCaret":"magritte-no-caret___ewcMD_8-2-12","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_8-2-12","iframeWrapper":"magritte-iframe-wrapper___gBCL5_8-2-12","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_8-2-12","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_8-2-12","grow-limiter":"magritte-grow-limiter___ANaBL_8-2-12","growLimiter":"magritte-grow-limiter___ANaBL_8-2-12","header-wrapper":"magritte-header-wrapper___LdLOU_8-2-12","headerWrapper":"magritte-header-wrapper___LdLOU_8-2-12"};
3
-
4
- export { styles as s };
5
- //# sourceMappingURL=bottom-sheet-BbHd5KSs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bottom-sheet-BbHd5KSs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}