@hh.ru/magritte-ui-bottom-sheet 7.3.2 → 8.1.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
@@ -18,7 +18,7 @@ import { Divider } from '@hh.ru/magritte-ui-divider';
18
18
  import { Layer } from '@hh.ru/magritte-ui-layer';
19
19
  import { isNavigationBarComponent, NavigationBarComponent } from '@hh.ru/magritte-ui-navigation-bar';
20
20
  import { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';
21
- import { s as styles } from './bottom-sheet-AC2lIhNj.js';
21
+ import { s as styles } from './bottom-sheet-BXnJPv-T.js';
22
22
 
23
23
  const CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';
24
24
  const CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';
@@ -62,7 +62,7 @@ const makeInitialState = () => ({
62
62
  exitHandlers: [],
63
63
  heightAnimationDiff: null,
64
64
  });
65
- const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, header, height = 'content', interceptClickHandlers = true, keyboardOverlaysFooter = true, onAppear, onBeforeExit, onAfterExit, onClose, showDivider = 'with-scroll', showOverlay = true, visible = false, withContentPaddings = true, 'data-qa': dataQA, interceptTouchHandlers = true, }, ref) => {
65
+ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, header, height = 'content', interceptClickHandlers = true, keyboardOverlaysFooter = true, onAppear, onBeforeExit, onAfterExit, onClose, showDivider = 'with-scroll', showOverlay = true, visible = false, withContentPaddings = true, withTopPadding = true, 'data-qa': dataQA, interceptTouchHandlers = true, }, ref) => {
66
66
  const DOCUMENT_HEIGHT = useRef(0);
67
67
  const SWIPE_THRESHOLD = useRef({ max: Infinity });
68
68
  const VIEWPORT_HEIGHT = useRef(0);
@@ -131,7 +131,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
131
131
  setHasTouchSupport(hasTouchSupportRef.current);
132
132
  return () => mediaQuery.removeEventListener('change', handleMediaQueryChange);
133
133
  }, [setHasTouchSupport]);
134
- const bindEscapeToClose = useEscapeToClose(() => currentVisible && onClose?.());
134
+ const bindEscapeToClose = useEscapeToClose(() => currentVisible && onCloseRef.current(null));
135
135
  useEffect(() => bindEscapeToClose(document.body), [bindEscapeToClose]);
136
136
  const LayoutMetrics = useRef((() => {
137
137
  let cache = {};
@@ -319,7 +319,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
319
319
  dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);
320
320
  }
321
321
  }
322
- if (grabberRef.current !== null) {
322
+ if (grabberRef.current !== null && stateRef.current.touchAction === null) {
323
323
  const prevGrabberUnsafe = stateRef.current.grabberUnsafe;
324
324
  stateRef.current.grabberUnsafe =
325
325
  Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===
@@ -579,9 +579,16 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
579
579
  }, [recalcScrollFlags]);
580
580
  const handleSwipeEnd = useCallback(() => {
581
581
  if (stateRef.current.touchAction === 'swipe') {
582
- onCloseRef.current();
582
+ let onCloseCancelled = false;
583
+ const cancelCloseFunc = () => {
584
+ if (!onCloseCancelled) {
585
+ handleSwipeCancel();
586
+ onCloseCancelled = true;
587
+ }
588
+ };
589
+ onCloseRef.current(cancelCloseFunc);
583
590
  }
584
- }, []);
591
+ }, [handleSwipeCancel]);
585
592
  const swipeHandlers = useSwipeHandlers({
586
593
  thresholdYRef: SWIPE_THRESHOLD,
587
594
  onSwipeMove: handleSwipeMove,
@@ -846,7 +853,11 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
846
853
  [styles.contentWithoutHeader]: !header,
847
854
  [styles.contentSizedFullScreen]: isContentSizedFullHeight(children),
848
855
  }), ref: contentRef, children: jsx(BottomSheetContext.Provider, { value: bottomSheetContext.value, children: children }) }));
849
- const scrollContainer = hasTouchSupport ? (jsx(CustomScrollContextProvider, { ref: scrollContextProviderRef, children: jsxs("div", { className: styles.scrollContainer, onFocus: handleFocus, ref: scrollContainerRef, children: [navigationBar, content] }) })) : (jsxs("div", { className: classnames(styles.scrollContainer, styles.nativeScrollContainer), onFocus: handleFocus, onScroll: recalcScrollFlags, ref: scrollContainerRef, children: [navigationBar, content] }));
856
+ const scrollContainer = hasTouchSupport ? (jsx(CustomScrollContextProvider, { ref: scrollContextProviderRef, children: jsxs("div", { className: classnames(styles.scrollContainer, {
857
+ [styles.scrollContainerWithTopPadding]: withTopPadding,
858
+ }), onFocus: handleFocus, ref: scrollContainerRef, children: [navigationBar, content] }) })) : (jsxs("div", { className: classnames(styles.scrollContainer, styles.nativeScrollContainer, {
859
+ [styles.scrollContainerWithTopPadding]: withTopPadding,
860
+ }), onFocus: handleFocus, onScroll: recalcScrollFlags, ref: scrollContainerRef, children: [navigationBar, content] }));
850
861
  const clonedFooter = footer && isActionBarComponent(footer)
851
862
  ? cloneElement(footer, {
852
863
  type: footer.props.type || 'vertical',
@@ -859,7 +870,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
859
870
  [styles.appearAnimation]: appearTransition === 'entering',
860
871
  [styles.disappearAnimation]: appearTransition === 'exiting',
861
872
  }), ...(appearTransition === 'entered'
862
- ? { 'data-qa': 'bottom-sheet-overlay', onClick: onCloseRef.current }
873
+ ? { 'data-qa': 'bottom-sheet-overlay', onClick: () => onCloseRef.current(null) }
863
874
  : {}), ref: overlayRef }), jsxs("div", { className: classnames(styles.swipeContainer, {
864
875
  [styles.appearAnimation]: appearTransition === 'entering',
865
876
  [styles.closeBySwipeAnimation]: appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',
@@ -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} 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 {\n NavigationBarComponent,\n NavigationBarComponentRef,\n isNavigationBarComponent,\n} from '@hh.ru/magritte-ui-navigation-bar';\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.current.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 '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 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 headerRef = useRef<NavigationBarComponentRef>(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\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 get remainingAvailableHeight() {\n return grabberRef.current?.offsetTop ?? 0;\n },\n get visibleContentHeight() {\n return (scrollContainerRef.current?.clientHeight ?? 0) - (headerRef.current?.layoutHeight ?? 0);\n },\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 && onClose?.());\n useEffect(() => bindEscapeToClose(document.body), [bindEscapeToClose]);\n\n const LayoutMetrics = useRef(\n (() => {\n let cache: Record<string, number> = {};\n return {\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 return cache.contentHeight ?? 0;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n const layoutHeaderHeight = headerRef.current?.layoutHeight ?? 0;\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - layoutHeaderHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null) {\n const visibleHeaderHeight = headerRef.current?.visibleHeight ?? 0;\n cache.contentTop = visualContainerRef.current.offsetTop + visibleHeaderHeight;\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) && headerRef.current !== null) {\n cache.headerHeight = headerRef.current.layoutHeight;\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 =\n 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.current.contentHeight - LayoutMetrics.current.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 })()\n );\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.current.contentHeight + stateRef.current.scrollOffset <\n LayoutMetrics.current.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset =\n LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notify({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.current.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.current.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport]);\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 =\n LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.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) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.current.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider]);\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.current.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.current.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.current.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(\n Math.max(focusedElementOffset - 10, 0),\n LayoutMetrics.current.maxScrollTop\n );\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notify({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.current.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.current.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 }, [fixOverscroll, hasTouchSupport, isSafari, keyboardOverlaysFooter, recalcScrollFlags, bottomSheetContext]);\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.current.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.current.visibleContentHeight}px`;\n }\n }, []);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.current.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.current.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.current.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.current.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.current.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\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.current.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.current.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, []);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.current.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?.notify({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags]);\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: SwipeEventHandler = 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: SwipeEventHandler = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n onCloseRef.current();\n }\n }, []);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n const handleScroll = (delta: number) => {\n if (\n LayoutMetrics.current.initialOffset !== 0 ||\n LayoutMetrics.current.contentHeight > LayoutMetrics.current.visibleContentHeight\n ) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.current.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (\n LayoutMetrics.current.contentHeight + roundedNewScrollOffset <=\n LayoutMetrics.current.visibleContentHeight\n ) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.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?.notify({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }\n }\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 };\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 };\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, recalcScrollFlags, swipeHandlers, interceptTouchHandlers]);\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.current.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n visualContainer.style.height = skipFirstResizeCallback\n ? `${LayoutMetrics.current.bottomSheetHeight}px`\n : '';\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.current.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.current.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.current.headerHeight -\n prevHeaderHeight +\n LayoutMetrics.current.footerHeight -\n 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.current.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff =\n LayoutMetrics.current.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.current.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && header.addHeightObserver(handleHeightChange);\n\n return () => {\n resizeObserver.disconnect();\n header !== null && header.removeHeightObserver(handleHeightChange);\n };\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\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 navigationBar =\n header && isNavigationBarComponent(header) ? (\n <NavigationBarComponent {...header.props} forwardedRef={headerRef} />\n ) : null;\n\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 ref={scrollContextProviderRef}>\n <div className={styles.scrollContainer} onFocus={handleFocus} ref={scrollContainerRef}>\n {navigationBar}\n {content}\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer)}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n {navigationBar}\n {content}\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 }\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 <div\n className={styles.cssVariablesContainer}\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 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} 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 {\n NavigationBarComponent,\n NavigationBarComponentRef,\n isNavigationBarComponent,\n} from '@hh.ru/magritte-ui-navigation-bar';\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.current.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 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 headerRef = useRef<NavigationBarComponentRef>(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\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 get remainingAvailableHeight() {\n return grabberRef.current?.offsetTop ?? 0;\n },\n get visibleContentHeight() {\n return (scrollContainerRef.current?.clientHeight ?? 0) - (headerRef.current?.layoutHeight ?? 0);\n },\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 const LayoutMetrics = useRef(\n (() => {\n let cache: Record<string, number> = {};\n return {\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 return cache.contentHeight ?? 0;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n const layoutHeaderHeight = headerRef.current?.layoutHeight ?? 0;\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - layoutHeaderHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null) {\n const visibleHeaderHeight = headerRef.current?.visibleHeight ?? 0;\n cache.contentTop = visualContainerRef.current.offsetTop + visibleHeaderHeight;\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) && headerRef.current !== null) {\n cache.headerHeight = headerRef.current.layoutHeight;\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 =\n 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.current.contentHeight - LayoutMetrics.current.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 })()\n );\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.current.contentHeight + stateRef.current.scrollOffset <\n LayoutMetrics.current.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset =\n LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notify({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.current.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.current.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport]);\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 =\n LayoutMetrics.current.contentHeight + scrollOffset > LayoutMetrics.current.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.current.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider]);\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.current.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.current.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.current.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(\n Math.max(focusedElementOffset - 10, 0),\n LayoutMetrics.current.maxScrollTop\n );\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notify({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.current.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.current.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 }, [fixOverscroll, hasTouchSupport, isSafari, keyboardOverlaysFooter, recalcScrollFlags, bottomSheetContext]);\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.current.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.current.visibleContentHeight}px`;\n }\n }, []);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.current.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.current.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.current.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.current.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.current.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags]);\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.current.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.current.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, []);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.current.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.current.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?.notify({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags]);\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 initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n const handleScroll = (delta: number) => {\n if (\n LayoutMetrics.current.initialOffset !== 0 ||\n LayoutMetrics.current.contentHeight > LayoutMetrics.current.visibleContentHeight\n ) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.current.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (\n LayoutMetrics.current.contentHeight + roundedNewScrollOffset <=\n LayoutMetrics.current.visibleContentHeight\n ) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.current.visibleContentHeight - LayoutMetrics.current.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?.notify({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.current.maxScrollTop,\n });\n }\n }\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 };\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 };\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, recalcScrollFlags, swipeHandlers, interceptTouchHandlers]);\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.current.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n visualContainer.style.height = skipFirstResizeCallback\n ? `${LayoutMetrics.current.bottomSheetHeight}px`\n : '';\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.current.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.current.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.current.headerHeight -\n prevHeaderHeight +\n LayoutMetrics.current.footerHeight -\n 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.current.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff =\n LayoutMetrics.current.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.current.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.current.headerHeight;\n prevContentHeight = LayoutMetrics.current.contentHeight;\n prevFooterHeight = LayoutMetrics.current.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && header.addHeightObserver(handleHeightChange);\n\n return () => {\n resizeObserver.disconnect();\n header !== null && header.removeHeightObserver(handleHeightChange);\n };\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\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 navigationBar =\n header && isNavigationBarComponent(header) ? (\n <NavigationBarComponent {...header.props} forwardedRef={headerRef} />\n ) : null;\n\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 ref={scrollContextProviderRef}>\n <div\n className={classnames(styles.scrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n ref={scrollContainerRef}\n >\n {navigationBar}\n {content}\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 {navigationBar}\n {content}\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 <div\n className={styles.cssVariablesContainer}\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 document.body\n );\n};\n\nexport const BottomSheet = forwardRef(BottomSheetRenderFunc);\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -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-AC2lIhNj.js';
3
+ import { s as styles } from './bottom-sheet-BXnJPv-T.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-AC2lIhNj.js';
4
+ import { s as styles } from './bottom-sheet-BXnJPv-T.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_8-1-0","flexContainer":"magritte-flex-container___muHAx_8-1-0","animation-timeout":"magritte-animation-timeout___yd-SZ_8-1-0","animationTimeout":"magritte-animation-timeout___yd-SZ_8-1-0","css-variables-container":"magritte-css-variables-container___jBCr9_8-1-0","cssVariablesContainer":"magritte-css-variables-container___jBCr9_8-1-0","appear-animation":"magritte-appear-animation___P84Ln_8-1-0","appearAnimation":"magritte-appear-animation___P84Ln_8-1-0","disappear-animation":"magritte-disappear-animation___Putks_8-1-0","disappearAnimation":"magritte-disappear-animation___Putks_8-1-0","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_8-1-0","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_8-1-0","height-transition-animation":"magritte-height-transition-animation___xNprr_8-1-0","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_8-1-0","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_8-1-0","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_8-1-0","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_8-1-0","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_8-1-0","overlay":"magritte-overlay___5a2U-_8-1-0","overlay-background":"magritte-overlay-background___8Sd4V_8-1-0","overlayBackground":"magritte-overlay-background___8Sd4V_8-1-0","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_8-1-0","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_8-1-0","swipe-container":"magritte-swipe-container___sZ2n5_8-1-0","swipeContainer":"magritte-swipe-container___sZ2n5_8-1-0","grabber":"magritte-grabber___A7SB-_8-1-0","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_8-1-0","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_8-1-0","visual-container":"magritte-visual-container___-VSuY_8-1-0","visualContainer":"magritte-visual-container___-VSuY_8-1-0","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_8-1-0","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_8-1-0","scroll-container":"magritte-scroll-container___4ngNY_8-1-0","scrollContainer":"magritte-scroll-container___4ngNY_8-1-0","scroll-container_with-top-padding":"magritte-scroll-container_with-top-padding___o60Dl_8-1-0","scrollContainerWithTopPadding":"magritte-scroll-container_with-top-padding___o60Dl_8-1-0","native-scroll-container":"magritte-native-scroll-container___JOlxE_8-1-0","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_8-1-0","content":"magritte-content___1gAwP_8-1-0","content_full-screen":"magritte-content_full-screen___2SFaO_8-1-0","contentFullScreen":"magritte-content_full-screen___2SFaO_8-1-0","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_8-1-0","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_8-1-0","content_with-paddings":"magritte-content_with-paddings___gIiAv_8-1-0","contentWithPaddings":"magritte-content_with-paddings___gIiAv_8-1-0","footer":"magritte-footer___RWslT_8-1-0","footer-with-padding":"magritte-footer-with-padding___KwkhC_8-1-0","footerWithPadding":"magritte-footer-with-padding___KwkhC_8-1-0","divider":"magritte-divider___0F8hh_8-1-0","divider_visible":"magritte-divider_visible___pAWZM_8-1-0","dividerVisible":"magritte-divider_visible___pAWZM_8-1-0","content-overlay":"magritte-content-overlay___HAyzL_8-1-0","contentOverlay":"magritte-content-overlay___HAyzL_8-1-0","no-caret":"magritte-no-caret___ewcMD_8-1-0","noCaret":"magritte-no-caret___ewcMD_8-1-0","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_8-1-0","iframeWrapper":"magritte-iframe-wrapper___gBCL5_8-1-0","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_8-1-0","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_8-1-0"};
3
+
4
+ export { styles as s };
5
+ //# sourceMappingURL=bottom-sheet-BXnJPv-T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-sheet-BXnJPv-T.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/index.css CHANGED
@@ -1,31 +1,36 @@
1
1
  :root{
2
- --magritte-color-component-bottom-sheet-background-content-v22-0-0:#ffffff;
3
- --magritte-color-component-bottom-sheet-grabber-content-v22-0-0:#bbc8d48f;
4
- --magritte-color-component-_overlay-background-content-v22-0-0:#20262b99;
2
+ --magritte-color-component-bottom-sheet-background-content-v22-1-0:#ffffff;
3
+ --magritte-color-component-bottom-sheet-grabber-content-v22-1-0:#bbc8d48f;
4
+ --magritte-color-component-_overlay-background-content-v22-1-0:#20262b99;
5
5
  }
6
6
  :root{
7
- --magritte-semantic-border-radius-modal-v22-0-0:24px;
8
- --magritte-semantic-animation-ease-in-out-100-duration-v22-0-0:100ms;
9
- --magritte-semantic-animation-ease-in-out-200-timing-function-v22-0-0:cubic-bezier(0.25, 0.1, 0.25, 1);
10
- --magritte-semantic-animation-ease-in-out-200-duration-v22-0-0:200ms;
11
- --magritte-semantic-animation-ease-in-out-300-timing-function-v22-0-0:cubic-bezier(0.25, 0.1, 0.25, 1);
12
- --magritte-semantic-animation-ease-in-out-300-duration-v22-0-0:300ms;
13
- --magritte-semantic-animation-ease-in-out-400-timing-function-v22-0-0:cubic-bezier(0.25, 0.1, 0.25, 1);
14
- --magritte-semantic-animation-ease-in-out-400-duration-v22-0-0:400ms;
15
- --magritte-static-border-radius-50-v22-0-0:2px;
7
+ --magritte-semantic-border-radius-modal-v22-1-0:24px;
8
+ --magritte-semantic-animation-ease-in-out-100-duration-v22-1-0:100ms;
9
+ --magritte-semantic-animation-ease-in-out-200-timing-function-v22-1-0:cubic-bezier(0.25, 0.1, 0.25, 1);
10
+ --magritte-semantic-animation-ease-in-out-200-duration-v22-1-0:200ms;
11
+ --magritte-semantic-animation-ease-in-out-300-timing-function-v22-1-0:cubic-bezier(0.25, 0.1, 0.25, 1);
12
+ --magritte-semantic-animation-ease-in-out-300-duration-v22-1-0:300ms;
13
+ --magritte-semantic-animation-ease-in-out-400-timing-function-v22-1-0:cubic-bezier(0.25, 0.1, 0.25, 1);
14
+ --magritte-semantic-animation-ease-in-out-400-duration-v22-1-0:400ms;
15
+ --magritte-static-border-radius-50-v22-1-0:2px;
16
16
  }
17
17
  .magritte-night-theme{
18
- --magritte-color-component-bottom-sheet-background-content-v22-0-0:#111;
19
- --magritte-color-component-bottom-sheet-grabber-content-v22-0-0:#c6c6c68f;
20
- --magritte-color-component-_overlay-background-content-v22-0-0:#26262699;
18
+ --magritte-color-component-bottom-sheet-background-content-v22-1-0:#111;
19
+ --magritte-color-component-bottom-sheet-grabber-content-v22-1-0:#c6c6c68f;
20
+ --magritte-color-component-_overlay-background-content-v22-1-0:#26262699;
21
21
  }
22
- .magritte-flex-container___muHAx_7-3-2{
22
+ .magritte-zp-day-theme{
23
+ --magritte-color-component-bottom-sheet-background-content-v22-1-0:#ffffff;
24
+ --magritte-color-component-bottom-sheet-grabber-content-v22-1-0:#bbc8d48f;
25
+ --magritte-color-component-_overlay-background-content-v22-1-0:#20262b99;
26
+ }
27
+ .magritte-flex-container___muHAx_8-1-0{
23
28
  display:flex;
24
29
  flex-direction:column;
25
30
  align-items:stretch;
26
31
  }
27
- .magritte-animation-timeout___yd-SZ_7-3-2,
28
- .magritte-css-variables-container___jBCr9_7-3-2{
32
+ .magritte-animation-timeout___yd-SZ_8-1-0,
33
+ .magritte-css-variables-container___jBCr9_8-1-0{
29
34
  --virtual-keyboard-top-offset:0px;
30
35
  --virtual-keyboard-bottom-offset:0px;
31
36
  --enter-animation-duration:0ms;
@@ -35,61 +40,61 @@
35
40
  --swipe-cancel-transition-duration:0ms;
36
41
  }
37
42
  @media (prefers-reduced-motion: no-preference){
38
- .magritte-animation-timeout___yd-SZ_7-3-2,
39
- .magritte-css-variables-container___jBCr9_7-3-2{
40
- --enter-animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v22-0-0);
41
- --exit-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v22-0-0);
42
- --grabber-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v22-0-0);
43
- --height-transition-duration:var(--magritte-semantic-animation-ease-in-out-400-duration-v22-0-0);
44
- --swipe-cancel-transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v22-0-0);
43
+ .magritte-animation-timeout___yd-SZ_8-1-0,
44
+ .magritte-css-variables-container___jBCr9_8-1-0{
45
+ --enter-animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v22-1-0);
46
+ --exit-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v22-1-0);
47
+ --grabber-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v22-1-0);
48
+ --height-transition-duration:var(--magritte-semantic-animation-ease-in-out-400-duration-v22-1-0);
49
+ --swipe-cancel-transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v22-1-0);
45
50
  }
46
51
  }
47
- .magritte-appear-animation___P84Ln_7-3-2{
52
+ .magritte-appear-animation___P84Ln_8-1-0{
48
53
  transition-property:transform opacity;
49
54
  transition-duration:var(--enter-animation-duration);
50
- transition-timing-function:var(--magritte-semantic-animation-ease-in-out-300-timing-function-v22-0-0);
55
+ transition-timing-function:var(--magritte-semantic-animation-ease-in-out-300-timing-function-v22-1-0);
51
56
  }
52
- .magritte-disappear-animation___Putks_7-3-2{
57
+ .magritte-disappear-animation___Putks_8-1-0{
53
58
  transition-property:transform opacity;
54
59
  transition-duration:var(--exit-animation-duration);
55
- transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v22-0-0);
60
+ transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v22-1-0);
56
61
  }
57
- .magritte-grabber-transition-animation___s3Oh4_7-3-2::after{
62
+ .magritte-grabber-transition-animation___s3Oh4_8-1-0::after{
58
63
  transition-property:transform;
59
64
  transition-duration:var(--grabber-animation-duration);
60
- transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v22-0-0);
65
+ transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v22-1-0);
61
66
  }
62
- .magritte-height-transition-animation___xNprr_7-3-2{
67
+ .magritte-height-transition-animation___xNprr_8-1-0{
63
68
  transition-property:height;
64
69
  transition-duration:var(--height-transition-duration);
65
- transition-timing-function:var(--magritte-semantic-animation-ease-in-out-400-timing-function-v22-0-0);
70
+ transition-timing-function:var(--magritte-semantic-animation-ease-in-out-400-timing-function-v22-1-0);
66
71
  }
67
- .magritte-close-by-swipe-animation___wdezY_7-3-2{
72
+ .magritte-close-by-swipe-animation___wdezY_8-1-0{
68
73
  transition-property:transform;
69
74
  transition-duration:var(--exit-animation-duration);
70
75
  transition-timing-function:linear;
71
76
  }
72
- .magritte-swipe-cancel-animation___AhYj5_7-3-2{
77
+ .magritte-swipe-cancel-animation___AhYj5_8-1-0{
73
78
  transition-property:transform;
74
79
  transition-duration:var(--swipe-cancel-transition-duration);
75
- transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-duration-v22-0-0);
80
+ transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-duration-v22-1-0);
76
81
  }
77
- .magritte-overlay___5a2U-_7-3-2{
82
+ .magritte-overlay___5a2U-_8-1-0{
78
83
  pointer-events:none;
79
84
  position:fixed;
80
85
  inset:0;
81
86
  }
82
- .magritte-overlay-background___8Sd4V_7-3-2{
87
+ .magritte-overlay-background___8Sd4V_8-1-0{
83
88
  position:absolute;
84
89
  inset:0;
85
90
  will-change:opacity;
86
91
  transform:translate3d(0, 0, 0);
87
92
  }
88
- .magritte-overlay-background_visible___FOJgj_7-3-2{
93
+ .magritte-overlay-background_visible___FOJgj_8-1-0{
89
94
  pointer-events:initial;
90
- background-color:var(--magritte-color-component-_overlay-background-content-v22-0-0);
95
+ background-color:var(--magritte-color-component-_overlay-background-content-v22-1-0);
91
96
  }
92
- .magritte-swipe-container___sZ2n5_7-3-2{
97
+ .magritte-swipe-container___sZ2n5_8-1-0{
93
98
  display:flex;
94
99
  flex-direction:column;
95
100
  align-items:stretch;
@@ -99,44 +104,43 @@
99
104
  will-change:transform;
100
105
  transform:translate3d(0, 0, 0);
101
106
  }
102
- .magritte-grabber___A7SB-_7-3-2{
107
+ .magritte-grabber___A7SB-_8-1-0{
103
108
  flex:0 0 20px;
104
109
  position:relative;
105
110
  }
106
- .magritte-grabber___A7SB-_7-3-2::after{
111
+ .magritte-grabber___A7SB-_8-1-0::after{
107
112
  content:'';
108
113
  position:absolute;
109
114
  top:8px;
110
115
  left:calc(50% - (36px / 2));
111
116
  height:4px;
112
117
  width:36px;
113
- background-color:var(--magritte-color-component-bottom-sheet-grabber-content-v22-0-0);
114
- border-radius:var(--magritte-static-border-radius-50-v22-0-0);
118
+ background-color:var(--magritte-color-component-bottom-sheet-grabber-content-v22-1-0);
119
+ border-radius:var(--magritte-static-border-radius-50-v22-1-0);
115
120
  z-index:3;
116
121
  }
117
- .magritte-grabber_ensure-safe___DR-dV_7-3-2::after{
122
+ .magritte-grabber_ensure-safe___DR-dV_8-1-0::after{
118
123
  transform:translateY(20px);
119
124
  }
120
- .magritte-visual-container___-VSuY_7-3-2{
125
+ .magritte-visual-container___-VSuY_8-1-0{
121
126
  display:flex;
122
127
  flex-direction:column;
123
128
  align-items:stretch;
124
129
  pointer-events:initial;
125
- background-color:var(--magritte-color-component-bottom-sheet-background-content-v22-0-0);
126
- border-radius:var(--magritte-semantic-border-radius-modal-v22-0-0) var(--magritte-semantic-border-radius-modal-v22-0-0) 0 0;
130
+ background-color:var(--magritte-color-component-bottom-sheet-background-content-v22-1-0);
131
+ border-radius:var(--magritte-semantic-border-radius-modal-v22-1-0) var(--magritte-semantic-border-radius-modal-v22-1-0) 0 0;
127
132
  flex:0 1 auto;
128
133
  min-height:1px;
129
134
  contain:paint;
130
135
  overflow:clip;
131
136
  user-select:text;
132
137
  }
133
- .magritte-visual-container_full-screen___jCCBb_7-3-2{
138
+ .magritte-visual-container_full-screen___jCCBb_8-1-0{
134
139
  flex:1 1 auto;
135
140
  min-height:1px;
136
141
  }
137
- .magritte-scroll-container___4ngNY_7-3-2{
138
- --magritte-ui-navigation-bar-background-override:var(--magritte-color-component-bottom-sheet-background-content-v22-0-0);
139
- --magritte-ui-navigation-bar-top-padding-override:16px;
142
+ .magritte-scroll-container___4ngNY_8-1-0{
143
+ --magritte-ui-navigation-bar-background-override:var(--magritte-color-component-bottom-sheet-background-content-v22-1-0);
140
144
  display:flex;
141
145
  flex-direction:column;
142
146
  align-items:stretch;
@@ -144,14 +148,17 @@
144
148
  min-height:1px;
145
149
  z-index:1;
146
150
  }
147
- .magritte-native-scroll-container___JOlxE_7-3-2{
151
+ .magritte-scroll-container_with-top-padding___o60Dl_8-1-0{
152
+ --magritte-ui-navigation-bar-top-padding-override:16px;
153
+ }
154
+ .magritte-native-scroll-container___JOlxE_8-1-0{
148
155
  overflow:scroll;
149
156
  scrollbar-width:none;
150
157
  }
151
- .magritte-native-scroll-container___JOlxE_7-3-2::-webkit-scrollbar{
158
+ .magritte-native-scroll-container___JOlxE_8-1-0::-webkit-scrollbar{
152
159
  display:none;
153
160
  }
154
- .magritte-content___1gAwP_7-3-2{
161
+ .magritte-content___1gAwP_8-1-0{
155
162
  display:flex;
156
163
  flex-direction:column;
157
164
  align-items:stretch;
@@ -160,49 +167,49 @@
160
167
  will-change:transform;
161
168
  transform:translate3d(0, 0, 0);
162
169
  }
163
- .magritte-content_full-screen___2SFaO_7-3-2{
170
+ .magritte-content_full-screen___2SFaO_8-1-0{
164
171
  flex:1 0 auto;
165
172
  }
166
- .magritte-content_sized-full-screen___45pa6_7-3-2{
173
+ .magritte-content_sized-full-screen___45pa6_8-1-0{
167
174
  flex:1 1 auto;
168
175
  min-height:1px;
169
176
  }
170
- .magritte-content_with-paddings___gIiAv_7-3-2{
177
+ .magritte-content_with-paddings___gIiAv_8-1-0{
171
178
  padding:16px 16px 0;
172
179
  }
173
- .magritte-footer___RWslT_7-3-2{
180
+ .magritte-footer___RWslT_8-1-0{
174
181
  flex:0 0 auto;
175
- background-color:var(--magritte-color-component-bottom-sheet-background-content-v22-0-0);
182
+ background-color:var(--magritte-color-component-bottom-sheet-background-content-v22-1-0);
176
183
  z-index:2;
177
184
  will-change:transform;
178
185
  transform:translate3d(0, 0, 0);
179
- --magritte-ui-action-bar-background-color-override:var(--magritte-color-component-bottom-sheet-background-content-v22-0-0);
186
+ --magritte-ui-action-bar-background-color-override:var(--magritte-color-component-bottom-sheet-background-content-v22-1-0);
180
187
  }
181
- .magritte-footer-with-padding___KwkhC_7-3-2{
188
+ .magritte-footer-with-padding___KwkhC_8-1-0{
182
189
  display:flex;
183
190
  flex-direction:column;
184
191
  gap:12px;
185
192
  padding:16px;
186
193
  }
187
- .magritte-divider___0F8hh_7-3-2{
194
+ .magritte-divider___0F8hh_8-1-0{
188
195
  visibility:hidden;
189
196
  }
190
- .magritte-divider_visible___pAWZM_7-3-2{
197
+ .magritte-divider_visible___pAWZM_8-1-0{
191
198
  visibility:visible;
192
199
  }
193
- .magritte-content-overlay___HAyzL_7-3-2{
200
+ .magritte-content-overlay___HAyzL_8-1-0{
194
201
  pointer-events:none;
195
202
  position:absolute;
196
203
  inset:0;
197
204
  }
198
- .magritte-no-caret___ewcMD_7-3-2{
205
+ .magritte-no-caret___ewcMD_8-1-0{
199
206
  --magritte-ui-input-caret-color-override:transparent;
200
207
  --magritte-ui-textarea-caret-color-override:transparent;
201
208
  }
202
- .magritte-iframe-wrapper___gBCL5_7-3-2{
209
+ .magritte-iframe-wrapper___gBCL5_8-1-0{
203
210
  position:relative;
204
211
  }
205
- .magritte-iframe-events-interceptor___FTW-8_7-3-2{
212
+ .magritte-iframe-events-interceptor___FTW-8_8-1-0{
206
213
  position:absolute;
207
214
  inset:0;
208
215
  }
package/index.d.ts CHANGED
@@ -4,4 +4,3 @@ export { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetC
4
4
  export { BottomSheetFooter } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetFooter';
5
5
  export { BottomSheetIFrameAdapter } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetIFrameAdapter';
6
6
  export * from '@hh.ru/magritte-ui-bottom-sheet/types';
7
- export * from '@hh.ru/magritte-ui-theme-provider';
package/index.js CHANGED
@@ -4,7 +4,6 @@ export { BottomSheetContentOverlay } from './BottomSheetContentOverlay.js';
4
4
  export { BottomSheetContext } from './BottomSheetContext.js';
5
5
  export { BottomSheetFooter } from './BottomSheetFooter.js';
6
6
  export { BottomSheetIFrameAdapter } from './BottomSheetIFrameAdapter.js';
7
- export * from '@hh.ru/magritte-ui-theme-provider';
8
7
  import 'react/jsx-runtime';
9
8
  import 'react';
10
9
  import 'react-dom';
@@ -23,5 +22,5 @@ import '@hh.ru/magritte-ui-divider';
23
22
  import '@hh.ru/magritte-ui-layer';
24
23
  import '@hh.ru/magritte-ui-navigation-bar';
25
24
  import '@hh.ru/magritte-ui-tree-selector';
26
- import './bottom-sheet-AC2lIhNj.js';
25
+ import './bottom-sheet-BXnJPv-T.js';
27
26
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;"}
package/index.mock.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import { ForwardRefExoticComponent } from 'react';
2
2
  export * from '@hh.ru/magritte-ui-bottom-sheet/types';
3
- declare const ThemeProvider: any;
4
- export { ThemeProvider };
5
3
  export declare const BottomSheet: ForwardRefExoticComponent<Record<string, unknown>>;
6
4
  export declare const BottomSheetContentOverlay: ForwardRefExoticComponent<Record<string, unknown>>;
7
5
  export { BottomSheetContext } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetContext';
package/index.mock.js CHANGED
@@ -3,8 +3,6 @@ import { mockComponent } from '@hh.ru/magritte-ui-mock-component';
3
3
  export { BottomSheetContext } from './BottomSheetContext.js';
4
4
  import 'react';
5
5
 
6
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
7
- const { ThemeProvider } = jest.requireActual('@hh.ru/magritte-ui-theme-provider/index');
8
6
  const BottomSheet = mockComponent('BottomSheet', undefined, {
9
7
  withChildren: true,
10
8
  });
@@ -18,5 +16,5 @@ const BottomSheetIFrameAdapter = mockComponent('BottomSheetIFrameAdapter', undef
18
16
  withChildren: true,
19
17
  });
20
18
 
21
- export { BottomSheet, BottomSheetContentOverlay, BottomSheetFooter, BottomSheetIFrameAdapter, ThemeProvider };
19
+ export { BottomSheet, BottomSheetContentOverlay, BottomSheetFooter, BottomSheetIFrameAdapter };
22
20
  //# 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\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst { ThemeProvider } = jest.requireActual('@hh.ru/magritte-ui-theme-provider/index');\n\nexport { ThemeProvider };\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":";;;;AAMA;AACM,MAAA,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC,yCAAyC,EAAE;MAI3E,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 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;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-bottom-sheet",
3
- "version": "7.3.2",
3
+ "version": "8.1.0",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -25,17 +25,16 @@
25
25
  "@hh.ru/magritte-common-use-multiple-refs": "1.1.7",
26
26
  "@hh.ru/magritte-common-use-no-bubbling": "1.0.5",
27
27
  "@hh.ru/magritte-common-use-swipe": "3.1.6",
28
- "@hh.ru/magritte-design-tokens": "22.0.0",
28
+ "@hh.ru/magritte-design-tokens": "22.1.0",
29
29
  "@hh.ru/magritte-internal-custom-scroll": "1.4.3",
30
30
  "@hh.ru/magritte-internal-layer-name": "3.0.2",
31
- "@hh.ru/magritte-ui-action-bar": "4.0.6",
31
+ "@hh.ru/magritte-ui-action-bar": "4.0.8",
32
32
  "@hh.ru/magritte-ui-breakpoint": "5.0.3",
33
- "@hh.ru/magritte-ui-divider": "2.0.0",
33
+ "@hh.ru/magritte-ui-divider": "3.0.0",
34
34
  "@hh.ru/magritte-ui-layer": "3.0.2",
35
35
  "@hh.ru/magritte-ui-mock-component": "1.1.4",
36
- "@hh.ru/magritte-ui-navigation-bar": "9.0.24",
37
- "@hh.ru/magritte-ui-theme-provider": "1.1.51",
38
- "@hh.ru/magritte-ui-tree-selector": "4.7.2"
36
+ "@hh.ru/magritte-ui-navigation-bar": "10.0.0",
37
+ "@hh.ru/magritte-ui-tree-selector": "5.0.0"
39
38
  },
40
39
  "peerDependencies": {
41
40
  "classnames": ">=2.3.2",
@@ -46,5 +45,5 @@
46
45
  "publishConfig": {
47
46
  "access": "public"
48
47
  },
49
- "gitHead": "5b83b8f36a1aa79857e35ef038d9d32abef39be0"
48
+ "gitHead": "20ea31a1e91dc1ba508c31ceb25d61d984728210"
50
49
  }
package/types.d.ts CHANGED
@@ -40,14 +40,25 @@ export interface BottomSheetProps {
40
40
  onBeforeExit?: VoidFunction;
41
41
  /** Колбек, который будет вызван после анимации закрытия */
42
42
  onAfterExit?: VoidFunction;
43
- /** Колбек, который обязательно должен устанавливать visible=false */
44
- onClose: VoidFunction;
43
+ /**
44
+ * Колбек, который будет вызван при закрытии боттомшита свайпом или тапом по оверлею. Должен сделать одно из двух:
45
+ * - установить visible=false
46
+ * - показать предупреждающий алерт и сохранить функцию cancelCloseFunc, чтобы вызвать ее в случае отмены закрытия
47
+ */
48
+ onClose: (
49
+ /**
50
+ * Функция для восстановления состояния боттомшита в случае отмены закрытия свайпом.
51
+ * Может быть равна null, если восстановление не требуется.
52
+ */
53
+ cancelCloseFunc: VoidFunction | null) => void;
45
54
  /** Показывать ли Divider между футером и основным контентом */
46
55
  showDivider?: ShowDivider;
47
56
  /** Показывать ли оверлей */
48
57
  showOverlay?: boolean;
49
58
  /** Включает паддинги у среднего контейнера */
50
59
  withContentPaddings?: boolean;
60
+ /** Включает паддинг 16px у NavigationBar */
61
+ withTopPadding?: boolean;
51
62
  /** Кастомная qa метка */
52
63
  'data-qa'?: string;
53
64
  }
@@ -1,5 +0,0 @@
1
- import './index.css';
2
- var styles = {"flex-container":"magritte-flex-container___muHAx_7-3-2","flexContainer":"magritte-flex-container___muHAx_7-3-2","animation-timeout":"magritte-animation-timeout___yd-SZ_7-3-2","animationTimeout":"magritte-animation-timeout___yd-SZ_7-3-2","css-variables-container":"magritte-css-variables-container___jBCr9_7-3-2","cssVariablesContainer":"magritte-css-variables-container___jBCr9_7-3-2","appear-animation":"magritte-appear-animation___P84Ln_7-3-2","appearAnimation":"magritte-appear-animation___P84Ln_7-3-2","disappear-animation":"magritte-disappear-animation___Putks_7-3-2","disappearAnimation":"magritte-disappear-animation___Putks_7-3-2","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_7-3-2","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_7-3-2","height-transition-animation":"magritte-height-transition-animation___xNprr_7-3-2","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_7-3-2","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_7-3-2","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_7-3-2","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_7-3-2","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_7-3-2","overlay":"magritte-overlay___5a2U-_7-3-2","overlay-background":"magritte-overlay-background___8Sd4V_7-3-2","overlayBackground":"magritte-overlay-background___8Sd4V_7-3-2","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_7-3-2","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_7-3-2","swipe-container":"magritte-swipe-container___sZ2n5_7-3-2","swipeContainer":"magritte-swipe-container___sZ2n5_7-3-2","grabber":"magritte-grabber___A7SB-_7-3-2","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_7-3-2","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_7-3-2","visual-container":"magritte-visual-container___-VSuY_7-3-2","visualContainer":"magritte-visual-container___-VSuY_7-3-2","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_7-3-2","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_7-3-2","scroll-container":"magritte-scroll-container___4ngNY_7-3-2","scrollContainer":"magritte-scroll-container___4ngNY_7-3-2","native-scroll-container":"magritte-native-scroll-container___JOlxE_7-3-2","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_7-3-2","content":"magritte-content___1gAwP_7-3-2","content_full-screen":"magritte-content_full-screen___2SFaO_7-3-2","contentFullScreen":"magritte-content_full-screen___2SFaO_7-3-2","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_7-3-2","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_7-3-2","content_with-paddings":"magritte-content_with-paddings___gIiAv_7-3-2","contentWithPaddings":"magritte-content_with-paddings___gIiAv_7-3-2","footer":"magritte-footer___RWslT_7-3-2","footer-with-padding":"magritte-footer-with-padding___KwkhC_7-3-2","footerWithPadding":"magritte-footer-with-padding___KwkhC_7-3-2","divider":"magritte-divider___0F8hh_7-3-2","divider_visible":"magritte-divider_visible___pAWZM_7-3-2","dividerVisible":"magritte-divider_visible___pAWZM_7-3-2","content-overlay":"magritte-content-overlay___HAyzL_7-3-2","contentOverlay":"magritte-content-overlay___HAyzL_7-3-2","no-caret":"magritte-no-caret___ewcMD_7-3-2","noCaret":"magritte-no-caret___ewcMD_7-3-2","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_7-3-2","iframeWrapper":"magritte-iframe-wrapper___gBCL5_7-3-2","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_7-3-2","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_7-3-2"};
3
-
4
- export { styles as s };
5
- //# sourceMappingURL=bottom-sheet-AC2lIhNj.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bottom-sheet-AC2lIhNj.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}