@hh.ru/magritte-ui-bottom-sheet 9.4.2 → 9.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/BottomSheet.js CHANGED
@@ -22,7 +22,7 @@ import { Layer } from '@hh.ru/magritte-ui-layer';
22
22
  import { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';
23
23
  import { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';
24
24
  import { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';
25
- import { s as styles } from './bottom-sheet-CTyOn_00.js';
25
+ import { s as styles } from './bottom-sheet-CaeD09FO.js';
26
26
 
27
27
  const CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';
28
28
  const CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';
@@ -64,7 +64,7 @@ const makeInitialState = () => ({
64
64
  swipeOffset: 0,
65
65
  touchAction: null,
66
66
  exitHandlers: [],
67
- heightAnimationDiff: null,
67
+ heightAnimationValue: null,
68
68
  });
69
69
  /**
70
70
  * Внутренний `role="dialog"`-узел. Вынесен в отдельный компонент, потому что обязан жить **под**
@@ -565,8 +565,8 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
565
565
  }, [onAfterExit]);
566
566
  const handleHeightAnimationStart = useCallback(() => {
567
567
  LayoutMetrics.invalidateCache();
568
- if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {
569
- visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight + stateRef.current.heightAnimationDiff}px`;
568
+ if (stateRef.current.heightAnimationValue !== null && visualContainerRef.current !== null) {
569
+ visualContainerRef.current.style.height = `${stateRef.current.heightAnimationValue}px`;
570
570
  }
571
571
  }, [LayoutMetrics]);
572
572
  const handleHeightAnimationEnd = useCallback(() => {
@@ -574,7 +574,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
574
574
  if (visualContainerRef.current !== null) {
575
575
  visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight}px`;
576
576
  }
577
- stateRef.current.heightAnimationDiff = null;
577
+ stateRef.current.heightAnimationValue = null;
578
578
  stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);
579
579
  stateRef.current.heightAnimationCallback = null;
580
580
  setHeightAnimationRunning(false);
@@ -795,10 +795,12 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
795
795
  let prevFooterHeight = 0;
796
796
  let prevVisibleContentHeight = 0;
797
797
  let skipFirstResizeCallback = true;
798
- let collapseResizeCallbacks = false;
798
+ let resetAnimationOnNextResize = false;
799
799
  const handleHeightChange = () => {
800
800
  LayoutMetrics.invalidateCache();
801
801
  if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {
802
+ // записываем в инлайн-стили visualContainer собственную высоту
803
+ // чтобы ее можно было анимировать изменением одного инлайн значения на другое
802
804
  visualContainer.style.height = skipFirstResizeCallback ? `${LayoutMetrics.bottomSheetHeight}px` : '';
803
805
  prevHeaderHeight = LayoutMetrics.headerHeight;
804
806
  prevContentHeight = LayoutMetrics.contentHeight;
@@ -808,11 +810,9 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
808
810
  stateRef.current.skipHeightAnimation = false;
809
811
  return;
810
812
  }
811
- if (stateRef.current.heightAnimationDiff !== null) {
812
- if (!collapseResizeCallbacks) {
813
- // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером
814
- visualContainer.style.height = ``;
815
- }
813
+ // без анимации сбрасываем высоту на вычисленную браузером
814
+ if (resetAnimationOnNextResize) {
815
+ visualContainer.style.height = ``;
816
816
  }
817
817
  else {
818
818
  const contentHeightDiff = LayoutMetrics.contentHeight - prevContentHeight;
@@ -837,18 +837,24 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
837
837
  }
838
838
  const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;
839
839
  if (heightAnimationDiff !== 0) {
840
- // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.
841
- // до этого значение некорректно, т.к. новый контент уже был отрендерен,
842
- // но в инлайн-стилях боттомшита остается старая высота
843
- stateRef.current.heightAnimationDiff = heightAnimationDiff;
840
+ // если предыдущая анимация не завершилась, добавляем вычисленное изменение к значению высоты
841
+ // но делаем это только один раз, иначе алгоритм ломается
842
+ if (stateRef.current.heightAnimationValue !== null) {
843
+ stateRef.current.heightAnimationValue += heightAnimationDiff;
844
+ visualContainer.style.height = `${stateRef.current.heightAnimationValue}px`;
845
+ resetAnimationOnNextResize = true;
846
+ }
847
+ else {
848
+ stateRef.current.heightAnimationValue = LayoutMetrics.bottomSheetHeight + heightAnimationDiff;
849
+ }
844
850
  stateRef.current.heightAnimationCallback = () => {
851
+ // запоминаем высоту visibleContentHeight после завершения анимации
852
+ // до этого значение некорректно, т.к. новый контент уже был отрендерен,
853
+ // но в инлайн-стилях боттомшита остается старая высота
845
854
  prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;
855
+ resetAnimationOnNextResize = false;
846
856
  };
847
857
  setHeightAnimationRunning(true);
848
- collapseResizeCallbacks = true;
849
- requestAnimationFrame(() => {
850
- collapseResizeCallbacks = false;
851
- });
852
858
  }
853
859
  else {
854
860
  prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;
@@ -935,7 +941,7 @@ const BottomSheetRenderFunc = ({ allowScrollWhileFocused, children, footer, head
935
941
  [styles.dividerVisible]: stateRef.current.dividerVisible,
936
942
  }), ref: dividerRef, children: jsx(Divider, {}) })), interceptClickHandlers && hasTouchSupport ? (jsx(ClickInterceptor, { children: clonedFooter })) : (clonedFooter)] })] }) }) })] })] }) }));
937
943
  };
938
- return createPortal(jsx(ThemeWrapper, { children: (themeClass) => (jsx("div", { className: classnames(styles.cssVariablesContainer, themeClass), "data-qa": "bottom-sheet-css-variables", ref: cssVariablesContainerRef, children: jsx(Transition, { appear: true, in: currentVisible, mountOnEnter: true, onEnter: setTransformToInvisible, onEntering: setTransformToVisible, onEntered: handleAppearAnimationEnd, onExit: handleExitAnimationStart, onExiting: setTransformToInvisible, onExited: handleExitAnimationEnd, timeout: animationTimeout.appear, unmountOnExit: true, nodeRef: contentRef, children: (appearTransition) => (jsx(Transition, { in: heightAnimationRunning, onEnter: handleHeightAnimationStart, onEntered: handleHeightAnimationEnd, timeout: animationTimeout.height, nodeRef: contentRef, children: (heightTransition) => renderFunc(appearTransition, heightTransition) })) }, `hasTouchSupport:${hasTouchSupport}`) })) }), document.body);
944
+ return createPortal(jsx(ThemeWrapper, { children: (themeClass) => (jsx("div", { className: classnames(styles.cssVariablesContainer, themeClass), "data-qa": "bottom-sheet-css-variables", ref: cssVariablesContainerRef, children: jsx(Transition, { appear: true, in: currentVisible, mountOnEnter: true, onEnter: setTransformToInvisible, onEntering: setTransformToVisible, onEntered: handleAppearAnimationEnd, onExit: handleExitAnimationStart, onExiting: setTransformToInvisible, onExited: handleExitAnimationEnd, timeout: animationTimeout.appear, unmountOnExit: true, nodeRef: contentRef, children: (appearTransition) => (jsx(Transition, { in: heightAnimationRunning, onEntering: handleHeightAnimationStart, onEntered: handleHeightAnimationEnd, timeout: animationTimeout.height, nodeRef: contentRef, children: (heightTransition) => renderFunc(appearTransition, heightTransition) })) }, `hasTouchSupport:${hasTouchSupport}`) })) }), document.body);
939
945
  };
940
946
  const BottomSheetComponent = forwardRef(BottomSheetRenderFunc);
941
947
  BottomSheetComponent.displayName = 'BottomSheet';
@@ -1 +1 @@
1
- {"version":3,"file":"BottomSheet.js","sources":["src/BottomSheet.tsx"],"sourcesContent":["import {\n type FC,\n type HTMLAttributes,\n type Ref,\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n isValidElement,\n Fragment,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { disableOverscroll, disableScroll, TimeoutCallback } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n AccessibleRegionProvider,\n useAccessibleRegionProps,\n type ExplicitRegionProps,\n} from '@hh.ru/magritte-internal-accessible-region';\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 { BottomSheetMedia } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetMedia';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ContentOverlayRoot } from '@hh.ru/magritte-ui-content-overlay';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';\nimport { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst DEFAULT_ACTION_BAR_PADDING = 16;\n\nconst checkSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isContentSizedFullHeight = (children: React.ReactNode) =>\n (isValidElement(children) &&\n typeof children.type === 'function' &&\n 'isFullHeightBottomSheetContent' in children.type &&\n (children.props as { fixedHeight?: boolean }).fixedHeight !== true) ||\n isValidTreeSelectorWrapper(children);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst textInputTypes = ['text', 'password', 'email', 'search', 'tel', 'url', 'number'];\nconst isTextInputElement = (element: Element): element is HTMLInputElement => {\n if (element instanceof HTMLInputElement) {\n return textInputTypes.includes(element.type);\n } else if (element instanceof HTMLTextAreaElement) {\n return true;\n }\n\n return false;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n // если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n // translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.initialOffset\n scrollOffset: number;\n // translateY для эмуляции свайпа, всегда положительный либо 0\n swipeOffset: number;\n // текущее действие, инициированное пользователем\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n // число, на которое нужно анимировать изменение высоты контента боттомшита\n heightAnimationDiff: number | null;\n heightAnimationCallback?: VoidFunction | null;\n skipHeightAnimation?: boolean;\n};\n\nconst makeInitialState = (): State => ({\n dividerVisible: false,\n grabberUnsafe: false,\n hasFocus: false,\n resizeRAFHandle: null,\n scrollOffset: 0,\n swipeOffset: 0,\n touchAction: null,\n exitHandlers: [],\n heightAnimationDiff: null,\n});\n\ninterface BottomSheetDialogProps extends HTMLAttributes<HTMLDivElement> {\n explicitAria: ExplicitRegionProps;\n dialogRef: Ref<HTMLDivElement>;\n}\n\n/**\n * Внутренний `role=\"dialog\"`-узел. Вынесен в отдельный компонент, потому что обязан жить **под**\n * `AccessibleRegionProvider`: только так `useAccessibleRegionProps` видит метки/описания,\n * зарегистрированные потомками (например, заголовком в `header`), и выставляет\n * `aria-labelledby` / `aria-describedby`. Явные `aria-*` пропы при этом всё перекрывают.\n */\nconst BottomSheetDialog: FC<BottomSheetDialogProps> = ({ explicitAria, dialogRef, children, ...rest }) => {\n const aria = useAccessibleRegionProps(explicitAria);\n\n return (\n <div {...rest} {...aria} role=\"dialog\" ref={dialogRef}>\n {children}\n </div>\n );\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 id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n const VIEWPORT_HEIGHT = useRef(0);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const headerWrapperRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const focusedElementRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n const GrowLimitWrapper = isContentSizedFullHeight(children) ? Fragment : TextAreaGrowLimiter;\n\n const growLimiterRef = useRef<HTMLDivElement>(null);\n\n const growLimiterContextValue = useState(() => {\n let height = 'auto';\n let limiterFlex = '1 0';\n return {\n containerRef: scrollContainerRef,\n preMeasurement: () => {\n if (!visualContainerRef.current || !growLimiterRef.current) {\n return;\n }\n height = visualContainerRef.current.style.height;\n limiterFlex = growLimiterRef.current.style.flex;\n visualContainerRef.current.style.height = 'auto';\n },\n postMeasurement: () => {\n visualContainerRef.current && (visualContainerRef.current.style.height = height);\n growLimiterRef.current && (growLimiterRef.current.style.flex = limiterFlex);\n },\n };\n })[0];\n\n const growLimiterProps = useMemo(\n () =>\n GrowLimitWrapper === TextAreaGrowLimiter\n ? {\n ...growLimiterContextValue,\n ref: growLimiterRef,\n debounce: true,\n className: styles.growLimiter,\n }\n : {},\n [GrowLimitWrapper, growLimiterContextValue]\n );\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>(makeInitialState());\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => {\n let keyboardResizeHandlers: Array<VoidFunction> = [];\n return {\n keyboardResizeHandlers,\n value: {\n height,\n subscribeToKeyboardResize: (handler: VoidFunction) => {\n keyboardResizeHandlers.push(handler);\n },\n unsubscribeFromKeyboardResize: (handlerToRemove: VoidFunction) => {\n keyboardResizeHandlers = keyboardResizeHandlers.filter((handler) => handler !== handlerToRemove);\n },\n },\n };\n }, [height]);\n const virtualKeyboardOffsetsRef = useRef<{ top: number; bottom: number }>({ top: 0, bottom: 0 });\n const animationTimeoutExitRef = useRef(animationTimeout?.appear.exit || 0);\n animationTimeoutExitRef.current = animationTimeout?.appear.exit || 0;\n\n const [isSafari, setIsSafari] = useState<boolean | null>(null);\n useEffect(() => setIsSafari(checkSafari()), [setIsSafari]);\n\n const [hasTouchSupport, setHasTouchSupport] = useState<boolean | null>(null);\n const hasTouchSupportRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!('matchMedia' in window)) {\n return void 0;\n }\n const mediaQuery = window.matchMedia('(pointer:coarse)');\n const handleMediaQueryChange = () => {\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n };\n mediaQuery.addEventListener('change', handleMediaQueryChange);\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n return () => mediaQuery.removeEventListener('change', handleMediaQueryChange);\n }, [setHasTouchSupport]);\n\n const bindEscapeToClose = useEscapeToClose(() => currentVisible && onCloseRef.current(null));\n useEffect(() => {\n bindEscapeToClose(document.body);\n return () => bindEscapeToClose(null);\n }, [bindEscapeToClose]);\n\n // TODO: replace by useInitOnce\n const LayoutMetrics = useState(() => {\n let cache: Record<string, number> = {};\n return {\n get scrollTop() {\n return Math.max(-stateRef.current.scrollOffset, 0);\n },\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n /**\n * Высота контента\n * Может превышать высоту контейнера из-за скролла\n */\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n\n return cache.contentHeight;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - LayoutMetrics.headerHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null && contentRef.current !== null) {\n cache.contentTop =\n contentRef.current.offsetTop - LayoutMetrics.scrollTop + visualContainerRef.current.offsetTop;\n }\n return cache.contentTop ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n /**\n * Фактическая высота, которую header занимает в боттомшите\n * Может отличаться от видимой высоты header\n */\n get headerHeight() {\n if (!('headerHeight' in cache) && headerWrapperRef.current !== null) {\n cache.headerHeight = headerWrapperRef.current.offsetHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n hasTouchSupportRef.current &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset = visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n get maxScrollTop() {\n return LayoutMetrics.contentHeight - LayoutMetrics.visibleContentHeight;\n },\n /**\n * Расстояние между верхним краем боттомшита и границей вьюпорта\n */\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })[0];\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n VIEWPORT_HEIGHT.current = visualViewport.height;\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n let enableScroll: TimeoutCallback | undefined = disableScroll();\n return () => {\n enableScroll?.(animationTimeoutExitRef.current);\n enableScroll = undefined;\n };\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || isSafari) {\n return;\n }\n\n // включаем настройку interactive-widget=resizes-content,\n // чтобы браузеры с поддержкой Virtual Keyboard API ресайзили Visual Viewport при появлении клавиатуры\n // в остальных браузерах (Safari и Chrome < 108) это поведение по умолчанию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, isSafari]);\n\n const fixOverscroll = useCallback(() => {\n if (hasTouchSupport) {\n const isOverscrolled =\n LayoutMetrics.contentHeight + stateRef.current.scrollOffset < LayoutMetrics.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = hasTouchSupport\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd = LayoutMetrics.contentHeight + scrollOffset > LayoutMetrics.visibleContentHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null && stateRef.current.touchAction === null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider, LayoutMetrics]);\n\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // при открытии виртуальной клавиатуры браузеры двигают Visual Viewport и Layout Viewport\n // с помощью двух отступов делаем так, чтобы overlay боттомшита совпадал с видимой частью экрана\n const recalcKeyboardOffsets = useCallback(() => {\n if (\n !hasTouchSupport ||\n !contentRef.current ||\n !overlayRef.current ||\n !swipeContainerRef.current ||\n !visualViewport\n ) {\n return;\n }\n\n // разворачиваем боттомшит с height=half-screen на всю доступную высоту\n if (LayoutMetrics.initialOffset > 0 && stateRef.current.scrollOffset > 0) {\n stateRef.current.scrollOffset = 0;\n contentRef.current.style.transform = translateY(0);\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n\n LayoutMetrics.invalidateCache();\n\n const isKeyboardVisible = visualViewport.height !== VIEWPORT_HEIGHT.current;\n if (stateRef.current.hasFocus && focusedElementRef.current !== null && isKeyboardVisible) {\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const topOffset = Math.round(-overlayDOMRect.top);\n\n let bottomOffset = 0;\n if (isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n if (visualViewportDiff > 0) {\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n bottomOffset = visualViewportDiff;\n }\n }\n\n if (keyboardOverlaysFooter && footerRef.current !== null) {\n bottomOffset -= footerRef.current.clientHeight;\n }\n\n if (\n topOffset !== virtualKeyboardOffsetsRef.current.top ||\n bottomOffset !== virtualKeyboardOffsetsRef.current.bottom\n ) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${topOffset}px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${bottomOffset}px`);\n }\n\n LayoutMetrics.invalidateCache();\n\n // если фокусируемый элемент лежит внутри скроллящегося контейнера и не виден, скроллим к нему\n if (contentRef.current.contains(focusedElementRef.current)) {\n let focusedElementOffset = 0;\n for (\n let offsetElement: HTMLElement | null =\n focusedElementRef.current.closest('[data-interactive]') ?? focusedElementRef.current;\n offsetElement !== contentRef.current && offsetElement !== null;\n offsetElement = offsetElement.offsetParent as HTMLElement | null\n ) {\n focusedElementOffset += offsetElement.offsetTop;\n }\n const newScrollOffset = -Math.min(Math.max(focusedElementOffset - 10, 0), LayoutMetrics.maxScrollTop);\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = topOffset;\n virtualKeyboardOffsetsRef.current.bottom = bottomOffset;\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n LayoutMetrics.invalidateCache();\n fixOverscroll();\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = 0;\n virtualKeyboardOffsetsRef.current.bottom = 0;\n }\n\n stateRef.current.skipHeightAnimation = true;\n setTimeout(() => (stateRef.current.skipHeightAnimation = false), 100);\n bottomSheetContext.keyboardResizeHandlers.forEach((handler) => handler());\n }, [\n fixOverscroll,\n hasTouchSupport,\n isSafari,\n keyboardOverlaysFooter,\n recalcScrollFlags,\n bottomSheetContext,\n LayoutMetrics,\n ]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (!isTextInputElement(focusedElement) || stateRef.current.resizeRAFHandle !== null) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n focusedElementRef.current = null;\n\n if (isSafari) {\n recalcKeyboardOffsets();\n }\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n // событие scroll может прилететь, только если браузер сдвинул вьюпорт из-за появления виртуальной клавиатуры\n // пользовательский скролл не вызывает событие scroll, т.к. нативный скролл отключен\n // в Safari событие resize может прилететь до того как браузер сдвинул вьюпорт, поэтому слушаем scroll\n if (isSafari) {\n visualViewport?.addEventListener('scroll', handleResize);\n }\n focusedElement.addEventListener('blur', handleBlur);\n focusedElementRef.current = focusedElement;\n },\n [isSafari, recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n contentOverlayRef.current.style.top = `${LayoutMetrics.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.visibleContentHeight}px`;\n }\n }, [LayoutMetrics]);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current = makeInitialState();\n\n onAfterExit?.();\n }, [onAfterExit]);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (stateRef.current.heightAnimationDiff !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${\n LayoutMetrics.bottomSheetHeight + stateRef.current.heightAnimationDiff\n }px`;\n }\n }, [LayoutMetrics]);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationDiff = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n let onCloseCancelled = false;\n const cancelCloseFunc = () => {\n if (!onCloseCancelled) {\n handleSwipeCancel();\n onCloseCancelled = true;\n }\n };\n onCloseRef.current(cancelCloseFunc);\n }\n }, [handleSwipeCancel]);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const handleScroll = useCallback(\n (delta: number) => {\n if (LayoutMetrics.initialOffset !== 0 || LayoutMetrics.contentHeight > LayoutMetrics.visibleContentHeight) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (LayoutMetrics.contentHeight + roundedNewScrollOffset <= LayoutMetrics.visibleContentHeight) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n },\n [LayoutMetrics, recalcScrollFlags]\n );\n\n const scrollContextProps = useState(() => ({\n getMaxScrollTop: () => LayoutMetrics.maxScrollTop,\n getScrollTop: () => LayoutMetrics.scrollTop,\n setScrollTop: (pos: number) => handleScroll(-(pos - LayoutMetrics.scrollTop)),\n }))[0];\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let focusedElementTouchY: number | null = null;\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText() ||\n (focusedElementRef.current !== null &&\n focusedElementTouchY !== null &&\n focusedElementRef.current.clientHeight !== focusedElementRef.current.scrollHeight)\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (focusedElementTouchY !== null) {\n focusedElementTouchY = null;\n }\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n scrollContextProviderRef.current?.notifyTouchEnd();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n focusedElementTouchY = null;\n swipeHandlers.onTouchStart(event);\n }\n visualContainer.classList.add(styles.noCaret);\n scrollContextProviderRef.current?.notifyTouchStart();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n if (interceptTouchHandlers) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (focusedElementRef.current !== null && focusedElementTouchY !== null) {\n focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n swipeHandlers.onTouchMove(event);\n }\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n swipeHandlers.onTouchEnd(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n swipeHandlers.onTouchCancel(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', handleTouchEnd);\n visualContainer.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', handleTouchEnd);\n visualContainer.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [allowScrollWhileFocused, swipeHandlers, interceptTouchHandlers, handleScroll]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevVisibleContentHeight = 0;\n let skipFirstResizeCallback = true;\n let collapseResizeCallbacks = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n visualContainer.style.height = skipFirstResizeCallback ? `${LayoutMetrics.bottomSheetHeight}px` : '';\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n\n skipFirstResizeCallback = false;\n stateRef.current.skipHeightAnimation = false;\n return;\n }\n\n if (stateRef.current.heightAnimationDiff !== null) {\n if (!collapseResizeCallbacks) {\n // если предыдущая анимация не завершилась, без анимации сбрасываем высоту на вычисленную браузером\n visualContainer.style.height = ``;\n }\n } else {\n const contentHeightDiff = LayoutMetrics.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.headerHeight - prevHeaderHeight + LayoutMetrics.footerHeight - prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevVisibleContentHeight - containersHeightDiff,\n LayoutMetrics.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff = LayoutMetrics.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n } else {\n // если высота видимой части контента не изменилась,\n // но позиция скролла превысила максимально допустимую из-за уменьшения высоты контента,\n // сбрасываем позицию скролла на максимально допустимую\n fixOverscroll();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // запоминаем высоту scrollContainer после того, как боттомшиту будет присвоена новая высота.\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n stateRef.current.heightAnimationDiff = heightAnimationDiff;\n stateRef.current.heightAnimationCallback = () => {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n };\n\n setHeightAnimationRunning(true);\n\n collapseResizeCallbacks = true;\n requestAnimationFrame(() => {\n collapseResizeCallbacks = false;\n });\n } else {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerWrapperRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && resizeObserver.observe(header);\n\n return () => resizeObserver.disconnect();\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\n LayoutMetrics,\n ]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = hasTouchSupport && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [hasTouchSupport, initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlersRaw } = useNoBubbling();\n\n const eventHandlers = interceptTouchHandlers\n ? eventHandlersRaw\n : { ...eventHandlersRaw, onTouchMove: undefined, onTouchStart: undefined, onTouchEnd: undefined };\n\n if (!animationTimeout) {\n return null;\n }\n\n const containerDataQa = `bottom-sheet-container${dataQA ? ` ${dataQA}` : ''}`;\n\n const explicitAria: ExplicitRegionProps = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n };\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight(children),\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext.value}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = hasTouchSupport ? (\n <CustomScrollContextProvider\n ref={scrollContextProviderRef}\n wrapperRef={scrollContainerRef}\n {...scrollContextProps}\n >\n <div\n className={classnames(styles.scrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, {\n type: footer.props.type || 'vertical',\n padding: footer.props.padding || DEFAULT_ACTION_BAR_PADDING,\n showDivider: false,\n })\n : footer;\n\n return (\n <Layer layer=\"bottom-sheet\">\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: () => onCloseRef.current(null) }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? containerDataQa : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <ContentOverlayRoot ref={contentOverlayRef}>\n <AccessibleRegionProvider>\n <BottomSheetDialog\n explicitAria={explicitAria}\n dialogRef={bottomSheetRef}\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 id={id}\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 </BottomSheetDialog>\n </AccessibleRegionProvider>\n </ContentOverlayRoot>\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <ThemeWrapper>\n {(themeClass) => (\n <div\n className={classnames(styles.cssVariablesContainer, themeClass)}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n key={`hasTouchSupport:${hasTouchSupport}`}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEnter={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>\n )}\n </ThemeWrapper>,\n document.body\n );\n};\n\nconst BottomSheetComponent = forwardRef(BottomSheetRenderFunc);\nBottomSheetComponent.displayName = 'BottomSheet';\n\nexport const BottomSheet = BottomSheetComponent as typeof BottomSheetComponent & { Media: typeof BottomSheetMedia };\nBottomSheet.Media = BottomSheetMedia;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"BottomSheet.js","sources":["src/BottomSheet.tsx"],"sourcesContent":["import {\n type FC,\n type HTMLAttributes,\n type Ref,\n FocusEventHandler,\n ForwardRefRenderFunction,\n forwardRef,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n cloneElement,\n isValidElement,\n Fragment,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { Transition, TransitionStatus } from 'react-transition-group';\nimport classnames from 'classnames';\n\nimport { useEscapeToClose } from '@hh.ru/magritte-common-keyboard';\nimport { disableOverscroll, disableScroll, TimeoutCallback } from '@hh.ru/magritte-common-modal-helper';\nimport { useMultipleRefs } from '@hh.ru/magritte-common-use-multiple-refs';\nimport { useNoBubbling } from '@hh.ru/magritte-common-use-no-bubbling';\nimport { useSwipeHandlers, SwipeEventHandler } from '@hh.ru/magritte-common-use-swipe';\nimport {\n AccessibleRegionProvider,\n useAccessibleRegionProps,\n type ExplicitRegionProps,\n} from '@hh.ru/magritte-internal-accessible-region';\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 { BottomSheetMedia } from '@hh.ru/magritte-ui-bottom-sheet/BottomSheetMedia';\nimport { ClickInterceptor } from '@hh.ru/magritte-ui-bottom-sheet/ClickInterceptor';\nimport { BottomSheetProps } from '@hh.ru/magritte-ui-bottom-sheet/types';\nimport { useBreakpoint } from '@hh.ru/magritte-ui-breakpoint';\nimport { ContentOverlayRoot } from '@hh.ru/magritte-ui-content-overlay';\nimport { Divider } from '@hh.ru/magritte-ui-divider';\nimport { Layer } from '@hh.ru/magritte-ui-layer';\nimport { TextAreaGrowLimiter } from '@hh.ru/magritte-ui-textarea';\nimport { ThemeWrapper } from '@hh.ru/magritte-ui-theme-wrapper';\nimport { isValidTreeSelectorWrapper } from '@hh.ru/magritte-ui-tree-selector';\n\nimport styles from './bottom-sheet.less';\n\nconst CSS_VAR_ENTER_ANIMATION_DURATION = '--enter-animation-duration';\nconst CSS_VAR_EXIT_ANIMATION_DURATION = '--exit-animation-duration';\nconst CSS_VAR_HEIGHT_ANIMATION_DURATION = '--height-transition-duration';\nconst CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET = '--virtual-keyboard-top-offset';\nconst CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET = '--virtual-keyboard-bottom-offset';\n\nconst DEFAULT_ACTION_BAR_PADDING = 16;\n\nconst checkSafari = () => /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nconst hasSelectedText = () => {\n const selection = document.getSelection();\n return !!selection && !selection.isCollapsed;\n};\n\nconst isContentSizedFullHeight = (children: React.ReactNode) =>\n (isValidElement(children) &&\n typeof children.type === 'function' &&\n 'isFullHeightBottomSheetContent' in children.type &&\n (children.props as { fixedHeight?: boolean }).fixedHeight !== true) ||\n isValidTreeSelectorWrapper(children);\n\nconst toNumber = (value: string) => {\n const result = parseInt(value, 10);\n return Number.isInteger(result) ? result : 0;\n};\n\nconst textInputTypes = ['text', 'password', 'email', 'search', 'tel', 'url', 'number'];\nconst isTextInputElement = (element: Element): element is HTMLInputElement => {\n if (element instanceof HTMLInputElement) {\n return textInputTypes.includes(element.type);\n } else if (element instanceof HTMLTextAreaElement) {\n return true;\n }\n\n return false;\n};\n\nconst translateY = (value: number) => `translate3d(0, ${value}px, 0)`;\n\ntype AnimationTimeout = { [AnimationType in 'appear' | 'height']: { [AnimationStage in 'enter' | 'exit']: number } };\n\ntype State = {\n dividerVisible: boolean;\n /** если боттомшит упирается в верхний край экрана, челка может перекрыть граббер и его нужно переместить в safe area */\n grabberUnsafe: boolean;\n hasFocus: boolean;\n resizeRAFHandle: ReturnType<typeof requestAnimationFrame> | null;\n /** translateY для эмуляции скролла, отрицательный либо меньше LayoutMetrics.initialOffset */\n scrollOffset: number;\n /** translateY для эмуляции свайпа, всегда положительный либо 0 */\n swipeOffset: number;\n /** текущее действие, инициированное пользователем */\n touchAction:\n | null // может быть начато любое действие\n | 'complete' // палец приложен, но действие завершено — не реагируем на тач, пока пользователь не отпустит палец\n | 'scroll' // палец приложен, скроллим контент внутри боттомшита\n | 'swipe'; // палец приложен, свайпаем весь боттомшит вниз, чтобы закрыть его, или вверх, чтобы отменить свайп\n exitHandlers: Array<VoidFunction>;\n /** целевая высота боттомшита после анимации изменения высоты */\n heightAnimationValue: number | null;\n /** колбек, который будет выполнен после анимации изменения высоты */\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 heightAnimationValue: null,\n});\n\ninterface BottomSheetDialogProps extends HTMLAttributes<HTMLDivElement> {\n explicitAria: ExplicitRegionProps;\n dialogRef: Ref<HTMLDivElement>;\n}\n\n/**\n * Внутренний `role=\"dialog\"`-узел. Вынесен в отдельный компонент, потому что обязан жить **под**\n * `AccessibleRegionProvider`: только так `useAccessibleRegionProps` видит метки/описания,\n * зарегистрированные потомками (например, заголовком в `header`), и выставляет\n * `aria-labelledby` / `aria-describedby`. Явные `aria-*` пропы при этом всё перекрывают.\n */\nconst BottomSheetDialog: FC<BottomSheetDialogProps> = ({ explicitAria, dialogRef, children, ...rest }) => {\n const aria = useAccessibleRegionProps(explicitAria);\n\n return (\n <div {...rest} {...aria} role=\"dialog\" ref={dialogRef}>\n {children}\n </div>\n );\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 id,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n },\n ref\n) => {\n const DOCUMENT_HEIGHT = useRef(0);\n const SWIPE_THRESHOLD = useRef({ max: Infinity });\n const VIEWPORT_HEIGHT = useRef(0);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const headerWrapperRef = useRef<HTMLDivElement>(null);\n const contentOverlayRef = useRef<HTMLDivElement>(null);\n const cssVariablesContainerRef = useRef<HTMLDivElement>(null);\n const dividerRef = useRef<HTMLDivElement>(null);\n const focusedElementRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const grabberRef = useRef<HTMLDivElement>(null);\n const overlayRef = useRef<HTMLDivElement>(null);\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const swipeContainerRef = useRef<HTMLDivElement>(null);\n const visualContainerRef = useRef<HTMLDivElement>(null);\n const bottomSheetRef = useMultipleRefs(ref, visualContainerRef);\n const scrollContextProviderRef = useRef<CustomScrollContextNotifier>(null);\n const GrowLimitWrapper = isContentSizedFullHeight(children) ? Fragment : TextAreaGrowLimiter;\n\n const growLimiterRef = useRef<HTMLDivElement>(null);\n\n const growLimiterContextValue = useState(() => {\n let height = 'auto';\n let limiterFlex = '1 0';\n return {\n containerRef: scrollContainerRef,\n preMeasurement: () => {\n if (!visualContainerRef.current || !growLimiterRef.current) {\n return;\n }\n height = visualContainerRef.current.style.height;\n limiterFlex = growLimiterRef.current.style.flex;\n visualContainerRef.current.style.height = 'auto';\n },\n postMeasurement: () => {\n visualContainerRef.current && (visualContainerRef.current.style.height = height);\n growLimiterRef.current && (growLimiterRef.current.style.flex = limiterFlex);\n },\n };\n })[0];\n\n const growLimiterProps = useMemo(\n () =>\n GrowLimitWrapper === TextAreaGrowLimiter\n ? {\n ...growLimiterContextValue,\n ref: growLimiterRef,\n debounce: true,\n className: styles.growLimiter,\n }\n : {},\n [GrowLimitWrapper, growLimiterContextValue]\n );\n\n const currentVisible = useBreakpoint().isMobile && visible;\n const onAppearRef = useRef(onAppear);\n onAppearRef.current = onAppear;\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n const stateRef = useRef<State>(makeInitialState());\n const [animationTimeout, setAnimationTimeout] = useState<AnimationTimeout | null>(null);\n const [heightAnimationRunning, setHeightAnimationRunning] = useState(false);\n const bottomSheetContext = useMemo(() => {\n let keyboardResizeHandlers: Array<VoidFunction> = [];\n return {\n keyboardResizeHandlers,\n value: {\n height,\n subscribeToKeyboardResize: (handler: VoidFunction) => {\n keyboardResizeHandlers.push(handler);\n },\n unsubscribeFromKeyboardResize: (handlerToRemove: VoidFunction) => {\n keyboardResizeHandlers = keyboardResizeHandlers.filter((handler) => handler !== handlerToRemove);\n },\n },\n };\n }, [height]);\n const virtualKeyboardOffsetsRef = useRef<{ top: number; bottom: number }>({ top: 0, bottom: 0 });\n const animationTimeoutExitRef = useRef(animationTimeout?.appear.exit || 0);\n animationTimeoutExitRef.current = animationTimeout?.appear.exit || 0;\n\n const [isSafari, setIsSafari] = useState<boolean | null>(null);\n useEffect(() => setIsSafari(checkSafari()), [setIsSafari]);\n\n const [hasTouchSupport, setHasTouchSupport] = useState<boolean | null>(null);\n const hasTouchSupportRef = useRef<boolean | null>(null);\n useEffect(() => {\n if (!('matchMedia' in window)) {\n return void 0;\n }\n const mediaQuery = window.matchMedia('(pointer:coarse)');\n const handleMediaQueryChange = () => {\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n };\n mediaQuery.addEventListener('change', handleMediaQueryChange);\n hasTouchSupportRef.current = mediaQuery.matches;\n setHasTouchSupport(hasTouchSupportRef.current);\n return () => mediaQuery.removeEventListener('change', handleMediaQueryChange);\n }, [setHasTouchSupport]);\n\n const bindEscapeToClose = useEscapeToClose(() => currentVisible && onCloseRef.current(null));\n useEffect(() => {\n bindEscapeToClose(document.body);\n return () => bindEscapeToClose(null);\n }, [bindEscapeToClose]);\n\n // TODO: replace by useInitOnce\n const LayoutMetrics = useState(() => {\n let cache: Record<string, number> = {};\n return {\n get scrollTop() {\n return Math.max(-stateRef.current.scrollOffset, 0);\n },\n get bottomSheetHeight() {\n if (!('bottomSheetHeight' in cache) && visualContainerRef.current !== null) {\n cache.bottomSheetHeight = visualContainerRef.current.clientHeight;\n }\n return cache.bottomSheetHeight ?? 0;\n },\n /**\n * Высота контента\n * Может превышать высоту контейнера из-за скролла\n */\n get contentHeight() {\n if (!('contentHeight' in cache) && contentRef.current !== null) {\n cache.contentHeight = contentRef.current.clientHeight;\n }\n\n return cache.contentHeight;\n },\n /**\n * Высота видимой части контента\n */\n get visibleContentHeight() {\n if (!('visibleContentHeight' in cache) && scrollContainerRef.current !== null) {\n cache.visibleContentHeight = scrollContainerRef.current.clientHeight - LayoutMetrics.headerHeight;\n }\n return cache.visibleContentHeight ?? 0;\n },\n /**\n * Положение верхнего края видимой части контента относительно вьюпорта\n */\n get contentTop() {\n if (!('contentTop' in cache) && visualContainerRef.current !== null && contentRef.current !== null) {\n cache.contentTop =\n contentRef.current.offsetTop - LayoutMetrics.scrollTop + visualContainerRef.current.offsetTop;\n }\n return cache.contentTop ?? 0;\n },\n get footerHeight() {\n if (!('footerHeight' in cache) && footerRef.current !== null) {\n cache.footerHeight = footerRef.current.clientHeight;\n }\n return cache.footerHeight ?? 0;\n },\n /**\n * Фактическая высота, которую header занимает в боттомшите\n * Может отличаться от видимой высоты header\n */\n get headerHeight() {\n if (!('headerHeight' in cache) && headerWrapperRef.current !== null) {\n cache.headerHeight = headerWrapperRef.current.offsetHeight;\n }\n return cache.headerHeight ?? 0;\n },\n get initialOffset() {\n if (!('initialOffset' in cache)) {\n if (\n height === 'half-screen' &&\n hasTouchSupportRef.current &&\n visualContainerRef.current !== null &&\n visualViewport !== null\n ) {\n const halfScreenOffset = visualContainerRef.current.clientHeight - visualViewport.height / 2;\n cache.initialOffset = Math.max(Math.round(halfScreenOffset), 0);\n } else {\n cache.initialOffset = 0;\n }\n }\n return cache.initialOffset ?? 0;\n },\n get maxScrollTop() {\n return LayoutMetrics.contentHeight - LayoutMetrics.visibleContentHeight;\n },\n /**\n * Расстояние между верхним краем боттомшита и границей вьюпорта\n */\n get remainingAvailableHeight() {\n if (!('remainingAvailableHeight' in cache) && grabberRef.current !== null) {\n cache.remainingAvailableHeight = grabberRef.current.offsetTop;\n }\n return cache.remainingAvailableHeight ?? 0;\n },\n invalidateCache() {\n cache = {};\n },\n };\n })[0];\n\n const setCSSVariable = (name: string, value: string) =>\n cssVariablesContainerRef.current !== null && cssVariablesContainerRef.current.style.setProperty(name, value);\n\n useEffect(() => {\n if (!currentVisible) {\n return void 0;\n }\n\n DOCUMENT_HEIGHT.current = document.documentElement.clientHeight;\n if (visualViewport !== null) {\n SWIPE_THRESHOLD.current = { max: Math.round(visualViewport.height * 0.8) };\n VIEWPORT_HEIGHT.current = visualViewport.height;\n }\n\n if (!showOverlay) {\n const enableOverscroll = disableOverscroll();\n return enableOverscroll;\n }\n\n let enableScroll: TimeoutCallback | undefined = disableScroll();\n return () => {\n enableScroll?.(animationTimeoutExitRef.current);\n enableScroll = undefined;\n };\n }, [currentVisible, showOverlay]);\n\n useEffect(() => {\n const animationTimeoutElement = document.createElement('div');\n animationTimeoutElement.classList.add(styles.animationTimeout);\n document.body.appendChild(animationTimeoutElement);\n const style = window.getComputedStyle(animationTimeoutElement);\n const enter = toNumber(style.getPropertyValue(CSS_VAR_ENTER_ANIMATION_DURATION));\n const exit = toNumber(style.getPropertyValue(CSS_VAR_EXIT_ANIMATION_DURATION));\n const height = toNumber(style.getPropertyValue(CSS_VAR_HEIGHT_ANIMATION_DURATION));\n document.body.removeChild(animationTimeoutElement);\n setAnimationTimeout({ appear: { enter, exit }, height: { enter: height, exit } });\n }, [setAnimationTimeout]);\n\n useEffect(() => {\n if (!currentVisible || isSafari) {\n return;\n }\n\n // включаем настройку interactive-widget=resizes-content,\n // чтобы браузеры с поддержкой Virtual Keyboard API ресайзили Visual Viewport при появлении клавиатуры\n // в остальных браузерах (Safari и Chrome < 108) это поведение по умолчанию\n let meta = document.querySelector('meta[name=\"viewport\"]');\n if (!meta) {\n meta = document.createElement('meta');\n meta.setAttribute('name', 'viewport');\n document.head.appendChild(meta);\n }\n const attributesStr = meta.getAttribute('content');\n const attributes = (\n attributesStr !== null\n ? Object.fromEntries(attributesStr.split(',').map((keyValuePairStr) => keyValuePairStr.split('=')))\n : {}\n ) as Record<string, string>;\n attributes['interactive-widget'] = 'resizes-content';\n const attributesStrUpdated = Object.entries(attributes)\n .map((keyValuePair) => keyValuePair.join('='))\n .join(',');\n meta.setAttribute('content', attributesStrUpdated);\n }, [currentVisible, isSafari]);\n\n const fixOverscroll = useCallback(() => {\n if (hasTouchSupport) {\n const isOverscrolled =\n LayoutMetrics.contentHeight + stateRef.current.scrollOffset < LayoutMetrics.visibleContentHeight;\n if (isOverscrolled) {\n stateRef.current.scrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n }\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const resetScrollPosition = useCallback(() => {\n if (hasTouchSupport) {\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n stateRef.current.swipeOffset = 0;\n\n if (contentRef.current !== null) {\n contentRef.current.style.transform = translateY(0);\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.initialOffset);\n }\n } else {\n scrollContainerRef.current?.scrollTo({ top: 0 });\n }\n }, [hasTouchSupport, LayoutMetrics]);\n\n const recalcScrollFlags = useCallback(() => {\n const scrollOffset = hasTouchSupport\n ? stateRef.current.scrollOffset\n : -(scrollContainerRef.current?.scrollTop ?? 0);\n\n if (dividerRef.current !== null) {\n const prevDividerVisible = stateRef.current.dividerVisible;\n const isNotScrolledToEnd = LayoutMetrics.contentHeight + scrollOffset > LayoutMetrics.visibleContentHeight;\n stateRef.current.dividerVisible =\n showDivider === 'always' || (showDivider === 'with-scroll' && isNotScrolledToEnd);\n if (stateRef.current.dividerVisible !== prevDividerVisible) {\n dividerRef.current.classList.toggle(styles.dividerVisible, stateRef.current.dividerVisible);\n }\n }\n\n if (grabberRef.current !== null && stateRef.current.touchAction === null) {\n const prevGrabberUnsafe = stateRef.current.grabberUnsafe;\n stateRef.current.grabberUnsafe =\n Math.round(Math.max(scrollOffset, 0) + stateRef.current.swipeOffset) ===\n LayoutMetrics.remainingAvailableHeight;\n if (stateRef.current.grabberUnsafe !== prevGrabberUnsafe) {\n grabberRef.current.classList.toggle(styles.grabberEnsureSafe, stateRef.current.grabberUnsafe);\n }\n }\n }, [hasTouchSupport, showDivider, LayoutMetrics]);\n\n // терминология: https://developer.chrome.com/blog/viewport-resize-behavior/\n //\n // при открытии виртуальной клавиатуры браузеры двигают Visual Viewport и Layout Viewport\n // с помощью двух отступов делаем так, чтобы overlay боттомшита совпадал с видимой частью экрана\n const recalcKeyboardOffsets = useCallback(() => {\n if (\n !hasTouchSupport ||\n !contentRef.current ||\n !overlayRef.current ||\n !swipeContainerRef.current ||\n !visualViewport\n ) {\n return;\n }\n\n // разворачиваем боттомшит с height=half-screen на всю доступную высоту\n if (LayoutMetrics.initialOffset > 0 && stateRef.current.scrollOffset > 0) {\n stateRef.current.scrollOffset = 0;\n contentRef.current.style.transform = translateY(0);\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n\n LayoutMetrics.invalidateCache();\n\n const isKeyboardVisible = visualViewport.height !== VIEWPORT_HEIGHT.current;\n if (stateRef.current.hasFocus && focusedElementRef.current !== null && isKeyboardVisible) {\n const overlayDOMRect = overlayRef.current.getBoundingClientRect();\n\n // любой браузер может сдвинуть Visual Viewport вверх, если фокусируемый инпут находится близко к нижней границе\n // из-за этого может возникнуть проблема, что ВЕРХНИЙ край контента уехал за границу Visual Viewport\n // сдвигаем ВЕРХНИЙ край контейнера ВНИЗ, чтобы он совпал с границей Visual Viewport\n const topOffset = Math.round(-overlayDOMRect.top);\n\n let bottomOffset = 0;\n if (isSafari) {\n const visualViewportDiff = Math.round(overlayDOMRect.bottom - visualViewport.height);\n if (visualViewportDiff > 0) {\n // сдвигаем НИЖНИЙ край контейнера ВВЕРХ, чтобы он совпал с границей Visual Viewport\n bottomOffset = visualViewportDiff;\n }\n }\n\n if (keyboardOverlaysFooter && footerRef.current !== null) {\n bottomOffset -= footerRef.current.clientHeight;\n }\n\n if (\n topOffset !== virtualKeyboardOffsetsRef.current.top ||\n bottomOffset !== virtualKeyboardOffsetsRef.current.bottom\n ) {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `${topOffset}px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `${bottomOffset}px`);\n }\n\n LayoutMetrics.invalidateCache();\n\n // если фокусируемый элемент лежит внутри скроллящегося контейнера и не виден, скроллим к нему\n if (contentRef.current.contains(focusedElementRef.current)) {\n let focusedElementOffset = 0;\n for (\n let offsetElement: HTMLElement | null =\n focusedElementRef.current.closest('[data-interactive]') ?? focusedElementRef.current;\n offsetElement !== contentRef.current && offsetElement !== null;\n offsetElement = offsetElement.offsetParent as HTMLElement | null\n ) {\n focusedElementOffset += offsetElement.offsetTop;\n }\n const newScrollOffset = -Math.min(Math.max(focusedElementOffset - 10, 0), LayoutMetrics.maxScrollTop);\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n stateRef.current.scrollOffset = newScrollOffset;\n contentRef.current.style.transform = translateY(stateRef.current.scrollOffset);\n\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: -stateRef.current.scrollOffset,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = topOffset;\n virtualKeyboardOffsetsRef.current.bottom = bottomOffset;\n } else {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n LayoutMetrics.invalidateCache();\n fixOverscroll();\n recalcScrollFlags();\n\n virtualKeyboardOffsetsRef.current.top = 0;\n virtualKeyboardOffsetsRef.current.bottom = 0;\n }\n\n stateRef.current.skipHeightAnimation = true;\n setTimeout(() => (stateRef.current.skipHeightAnimation = false), 100);\n bottomSheetContext.keyboardResizeHandlers.forEach((handler) => handler());\n }, [\n fixOverscroll,\n hasTouchSupport,\n isSafari,\n keyboardOverlaysFooter,\n recalcScrollFlags,\n bottomSheetContext,\n LayoutMetrics,\n ]);\n\n const handleFocus: FocusEventHandler = useCallback(\n (event) => {\n const focusedElement = event.target;\n const initialViewportHeight = visualViewport?.height;\n const resizeRAFStart = performance.now();\n\n if (!isTextInputElement(focusedElement) || stateRef.current.resizeRAFHandle !== null) {\n return;\n }\n\n const handleResize = () => {\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n\n recalcKeyboardOffsets();\n\n if (!stateRef.current.hasFocus) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n }\n };\n\n // если спамить фокус/блюр инпута, ивент visualViewport.resize может не долететь\n // поэтому проверяем изменение высоты в рекурсивном RAF\n const waitForResize = () => {\n if (performance.now() - resizeRAFStart > 1000 || visualViewport?.height !== initialViewportHeight) {\n visualViewport?.removeEventListener('resize', handleResize);\n visualViewport?.removeEventListener('scroll', handleResize);\n stateRef.current.resizeRAFHandle = null;\n recalcKeyboardOffsets();\n } else {\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n }\n };\n\n const handleBlur = () => {\n stateRef.current.hasFocus = false;\n if (stateRef.current.resizeRAFHandle !== null) {\n cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.resizeRAFHandle = null;\n }\n focusedElement.removeEventListener('blur', handleBlur);\n focusedElementRef.current = null;\n\n if (isSafari) {\n recalcKeyboardOffsets();\n }\n };\n\n stateRef.current.hasFocus = true;\n stateRef.current.resizeRAFHandle = requestAnimationFrame(waitForResize);\n visualViewport?.addEventListener('resize', handleResize);\n // событие scroll может прилететь, только если браузер сдвинул вьюпорт из-за появления виртуальной клавиатуры\n // пользовательский скролл не вызывает событие scroll, т.к. нативный скролл отключен\n // в Safari событие resize может прилететь до того как браузер сдвинул вьюпорт, поэтому слушаем scroll\n if (isSafari) {\n visualViewport?.addEventListener('scroll', handleResize);\n }\n focusedElement.addEventListener('blur', handleBlur);\n focusedElementRef.current = focusedElement;\n },\n [isSafari, recalcKeyboardOffsets]\n );\n\n // contentOverlay совпадает по границам с контентом боттомшита, но лежит вне боттомшита,\n // чтобы чайлды contentOverlay не обрезались границами боттомшита\n // например, снекбар, лежащий внутри contentOverlay, при смахивании может оказаться в любом месте экрана\n // поэтому позицию contentOverlay нужно синхронизировать\n const recalcContentOverlayPosition = useCallback(() => {\n if (\n contentOverlayRef.current !== null &&\n scrollContainerRef.current !== null &&\n visualContainerRef.current !== null\n ) {\n contentOverlayRef.current.style.top = `${LayoutMetrics.contentTop}px`;\n contentOverlayRef.current.style.height = `${LayoutMetrics.visibleContentHeight}px`;\n }\n }, [LayoutMetrics]);\n\n // помещает боттомшит в позицию вне экрана снизу, которая может быть начальной либо конечной точкой анимации\n const setTransformToInvisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `0`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(LayoutMetrics.bottomSheetHeight);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n // помещает боттомшит в дефолтную позицию на экране, которая может быть начальной либо конечной точкой анимации\n const setTransformToVisible = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n stateRef.current.scrollOffset = LayoutMetrics.initialOffset;\n\n if (overlayRef.current !== null) {\n overlayRef.current.style.opacity = `1`;\n }\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n LayoutMetrics.initialOffset + stateRef.current.swipeOffset\n );\n }\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-LayoutMetrics.initialOffset);\n }\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n }, [recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleExitAnimationStart = useCallback(() => {\n setTransformToVisible();\n onBeforeExit?.();\n }, [setTransformToVisible, onBeforeExit]);\n\n const handleExitAnimationEnd = useCallback(() => {\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_TOP_OFFSET, `0px`);\n setCSSVariable(CSS_VAR_VIRTUAL_KEYBOARD_BOTTOM_OFFSET, `0px`);\n\n stateRef.current.resizeRAFHandle !== null && cancelAnimationFrame(stateRef.current.resizeRAFHandle);\n stateRef.current.exitHandlers.forEach((handler) => handler());\n stateRef.current = makeInitialState();\n\n onAfterExit?.();\n }, [onAfterExit]);\n\n const handleHeightAnimationStart = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (stateRef.current.heightAnimationValue !== null && visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${stateRef.current.heightAnimationValue}px`;\n }\n }, [LayoutMetrics]);\n\n const handleHeightAnimationEnd = useCallback(() => {\n LayoutMetrics.invalidateCache();\n\n if (visualContainerRef.current !== null) {\n visualContainerRef.current.style.height = `${LayoutMetrics.bottomSheetHeight}px`;\n }\n\n stateRef.current.heightAnimationValue = null;\n stateRef.current.heightAnimationCallback && requestAnimationFrame(stateRef.current.heightAnimationCallback);\n stateRef.current.heightAnimationCallback = null;\n setHeightAnimationRunning(false);\n\n requestAnimationFrame(recalcContentOverlayPosition);\n requestAnimationFrame(recalcScrollFlags);\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: 0,\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }, [setHeightAnimationRunning, recalcContentOverlayPosition, recalcScrollFlags, LayoutMetrics]);\n\n const handleSwipeMove: SwipeEventHandler = useCallback(\n (event) => {\n if (\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'swipe') ||\n hasSelectedText()\n ) {\n return;\n }\n\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newSwipeOffset = stateRef.current.swipeOffset + event.deltaY;\n if (Math.round(newSwipeOffset) <= 0) {\n // боттомшит уперся в верхний край экрана, не даем свайпать дальше\n newSwipeOffset = 0;\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // свайп в процессе\n stateRef.current.touchAction = 'swipe';\n }\n\n if (stateRef.current.swipeOffset !== newSwipeOffset) {\n stateRef.current.swipeOffset = newSwipeOffset;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.style.transform = translateY(\n Math.max(stateRef.current.scrollOffset, 0) + newSwipeOffset\n );\n }\n\n recalcScrollFlags();\n }\n },\n [recalcScrollFlags]\n );\n\n const handleSwipeCancel: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n stateRef.current.swipeOffset = 0;\n stateRef.current.touchAction = null;\n\n if (swipeContainerRef.current !== null) {\n swipeContainerRef.current.classList.add(styles.swipeCancelAnimation);\n const swipeContainer = swipeContainerRef.current;\n setTimeout(() => swipeContainer.classList.remove(styles.swipeCancelAnimation), 100);\n swipeContainerRef.current.style.transform = translateY(Math.max(stateRef.current.scrollOffset, 0));\n }\n\n recalcScrollFlags();\n }\n }, [recalcScrollFlags]);\n\n const handleSwipeEnd: VoidFunction = useCallback(() => {\n if (stateRef.current.touchAction === 'swipe') {\n let onCloseCancelled = false;\n const cancelCloseFunc = () => {\n if (!onCloseCancelled) {\n handleSwipeCancel();\n onCloseCancelled = true;\n }\n };\n onCloseRef.current(cancelCloseFunc);\n }\n }, [handleSwipeCancel]);\n\n const swipeHandlers = useSwipeHandlers({\n thresholdYRef: SWIPE_THRESHOLD,\n onSwipeMove: handleSwipeMove,\n onSwipeEnd: handleSwipeEnd,\n onSwipeCancel: handleSwipeCancel,\n });\n\n const handleScroll = useCallback(\n (delta: number) => {\n if (LayoutMetrics.initialOffset !== 0 || LayoutMetrics.contentHeight > LayoutMetrics.visibleContentHeight) {\n // храним неокругленное значение для translateY, чтобы анимация была плавнее\n let newScrollOffset = stateRef.current.scrollOffset + delta;\n const roundedNewScrollOffset = Math.round(newScrollOffset);\n\n if (roundedNewScrollOffset >= LayoutMetrics.initialOffset) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен в начало, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.initialOffset;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else if (LayoutMetrics.contentHeight + roundedNewScrollOffset <= LayoutMetrics.visibleContentHeight) {\n // скролла нет (touchAction is null)\n // либо контент проскроллен до конца, тогда не даем скроллить дальше\n newScrollOffset = LayoutMetrics.visibleContentHeight - LayoutMetrics.contentHeight;\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = 'complete';\n }\n } else {\n // скролл в процессе\n stateRef.current.touchAction = 'scroll';\n }\n\n if (stateRef.current.scrollOffset !== newScrollOffset) {\n const offsetWasPositive = stateRef.current.scrollOffset > 0;\n stateRef.current.scrollOffset = newScrollOffset;\n\n if (contentRef.current !== null && swipeContainerRef.current !== null) {\n if (newScrollOffset > 0) {\n if (!offsetWasPositive) {\n contentRef.current.style.transform = translateY(0);\n }\n swipeContainerRef.current.style.transform = translateY(newScrollOffset);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(-newScrollOffset);\n }\n } else {\n contentRef.current.style.transform = translateY(newScrollOffset);\n if (offsetWasPositive) {\n swipeContainerRef.current.style.transform = translateY(0);\n if (footerRef.current !== null) {\n footerRef.current.style.transform = translateY(0);\n }\n }\n }\n }\n\n recalcScrollFlags();\n scrollContextProviderRef.current?.notifyScroll({\n scrollTop: Math.max(-stateRef.current.scrollOffset, 0),\n maxScrollTop: LayoutMetrics.maxScrollTop,\n });\n }\n }\n },\n [LayoutMetrics, recalcScrollFlags]\n );\n\n const scrollContextProps = useState(() => ({\n getMaxScrollTop: () => LayoutMetrics.maxScrollTop,\n getScrollTop: () => LayoutMetrics.scrollTop,\n setScrollTop: (pos: number) => handleScroll(-(pos - LayoutMetrics.scrollTop)),\n }))[0];\n\n const initTransformHandlers = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let focusedElementTouchY: number | null = null;\n\n const onTouchMove = (event: ScrollGestureEvent) => {\n if (\n (!allowScrollWhileFocused && stateRef.current.hasFocus) ||\n (stateRef.current.touchAction !== null && stateRef.current.touchAction !== 'scroll') ||\n hasSelectedText() ||\n (focusedElementRef.current !== null &&\n focusedElementTouchY !== null &&\n focusedElementRef.current.clientHeight !== focusedElementRef.current.scrollHeight)\n ) {\n return;\n }\n handleScroll(event.delta);\n };\n\n const onTouchEnd = () => {\n if (focusedElementTouchY !== null) {\n focusedElementTouchY = null;\n }\n if (stateRef.current.touchAction === 'scroll') {\n stateRef.current.touchAction = null;\n }\n scrollContextProviderRef.current?.notifyTouchEnd();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n if (stateRef.current.touchAction === 'complete') {\n stateRef.current.touchAction = null;\n }\n if (event.target === focusedElementRef.current && focusedElementRef.current !== null) {\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n focusedElementTouchY = null;\n swipeHandlers.onTouchStart(event);\n }\n visualContainer.classList.add(styles.noCaret);\n scrollContextProviderRef.current?.notifyTouchStart();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n if (interceptTouchHandlers) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (focusedElementRef.current !== null && focusedElementTouchY !== null) {\n focusedElementRef.current.scrollTop += focusedElementTouchY - event.changedTouches[0].pageY;\n focusedElementTouchY = event.changedTouches[0].pageY;\n } else {\n swipeHandlers.onTouchMove(event);\n }\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n swipeHandlers.onTouchEnd(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const handleTouchCancel = (event: TouchEvent) => {\n swipeHandlers.onTouchCancel(event);\n visualContainer.classList.remove(styles.noCaret);\n };\n\n const removeScrollHandlers = initScrollHandlers({\n axis: 'vertical',\n wrapperRef: visualContainerRef,\n onTouchMove,\n onTouchEnd,\n });\n visualContainer.addEventListener('touchstart', handleTouchStart);\n visualContainer.addEventListener('touchmove', handleTouchMove);\n visualContainer.addEventListener('touchend', handleTouchEnd);\n visualContainer.addEventListener('touchcancel', handleTouchCancel);\n\n return () => {\n removeScrollHandlers();\n visualContainer.removeEventListener('touchstart', handleTouchStart);\n visualContainer.removeEventListener('touchmove', handleTouchMove);\n visualContainer.removeEventListener('touchend', handleTouchEnd);\n visualContainer.removeEventListener('touchcancel', handleTouchCancel);\n };\n }, [allowScrollWhileFocused, swipeHandlers, interceptTouchHandlers, handleScroll]);\n\n // при изменении высоты контента анимируем ее\n // задаем боттомшиту фиксированную высоту и пересчитываем ее самостоятельно,\n // чтобы не было мерцания, когда новый контент отрисовался до срабатывания колбека ResizeObserver\n const initHeightObserver = useCallback(() => {\n const visualContainer = visualContainerRef.current;\n if (!visualContainer) {\n return void 0;\n }\n\n let prevContentHeight = 0;\n let prevHeaderHeight = 0;\n let prevFooterHeight = 0;\n let prevVisibleContentHeight = 0;\n let skipFirstResizeCallback = true;\n let resetAnimationOnNextResize = false;\n\n const handleHeightChange = () => {\n LayoutMetrics.invalidateCache();\n\n if (skipFirstResizeCallback || stateRef.current.skipHeightAnimation) {\n // записываем в инлайн-стили visualContainer собственную высоту\n // чтобы ее можно было анимировать изменением одного инлайн значения на другое\n visualContainer.style.height = skipFirstResizeCallback ? `${LayoutMetrics.bottomSheetHeight}px` : '';\n\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n\n skipFirstResizeCallback = false;\n stateRef.current.skipHeightAnimation = false;\n return;\n }\n\n // без анимации сбрасываем высоту на вычисленную браузером\n if (resetAnimationOnNextResize) {\n visualContainer.style.height = ``;\n } else {\n const contentHeightDiff = LayoutMetrics.contentHeight - prevContentHeight;\n const containersHeightDiff =\n LayoutMetrics.headerHeight - prevHeaderHeight + LayoutMetrics.footerHeight - prevFooterHeight;\n\n // предположим, что scrollContainer останется таким же или станет меньше\n // тогда можем рассчитать минимальную видимую высоту контента как min(scrollContainer.height, contentHeight)\n const _prevVisibleContentHeight = Math.min(prevVisibleContentHeight, prevContentHeight);\n const newMinVisibleContentHeight = Math.min(\n prevVisibleContentHeight - containersHeightDiff,\n LayoutMetrics.contentHeight\n );\n const minVisibleContentHeightDiff = newMinVisibleContentHeight - _prevVisibleContentHeight;\n\n // предположим, что scrollContainer станет больше\n // тогда контент не может увеличиться больше, чем на расстояние между боттомшитом и верхним краем экрана\n const maxVisibleContentHeightDiff = LayoutMetrics.remainingAvailableHeight - containersHeightDiff;\n\n const visibleContentHeightDiff = Math.min(\n Math.max(contentHeightDiff, minVisibleContentHeightDiff),\n maxVisibleContentHeightDiff\n );\n if (visibleContentHeightDiff !== 0) {\n resetScrollPosition();\n } else {\n // если высота видимой части контента не изменилась,\n // но позиция скролла превысила максимально допустимую из-за уменьшения высоты контента,\n // сбрасываем позицию скролла на максимально допустимую\n fixOverscroll();\n }\n\n const heightAnimationDiff = visibleContentHeightDiff + containersHeightDiff;\n if (heightAnimationDiff !== 0) {\n // если предыдущая анимация не завершилась, добавляем вычисленное изменение к значению высоты\n // но делаем это только один раз, иначе алгоритм ломается\n if (stateRef.current.heightAnimationValue !== null) {\n stateRef.current.heightAnimationValue += heightAnimationDiff;\n visualContainer.style.height = `${stateRef.current.heightAnimationValue}px`;\n resetAnimationOnNextResize = true;\n } else {\n stateRef.current.heightAnimationValue = LayoutMetrics.bottomSheetHeight + heightAnimationDiff;\n }\n\n stateRef.current.heightAnimationCallback = () => {\n // запоминаем высоту visibleContentHeight после завершения анимации\n // до этого значение некорректно, т.к. новый контент уже был отрендерен,\n // но в инлайн-стилях боттомшита остается старая высота\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n resetAnimationOnNextResize = false;\n };\n\n setHeightAnimationRunning(true);\n } else {\n prevVisibleContentHeight = LayoutMetrics.visibleContentHeight;\n recalcContentOverlayPosition();\n recalcScrollFlags();\n }\n }\n\n prevHeaderHeight = LayoutMetrics.headerHeight;\n prevContentHeight = LayoutMetrics.contentHeight;\n prevFooterHeight = LayoutMetrics.footerHeight;\n };\n\n const resizeObserver = new ResizeObserver(handleHeightChange);\n const content = contentRef.current;\n const footer = footerRef.current;\n const header = headerWrapperRef.current;\n\n content !== null && resizeObserver.observe(content);\n footer !== null && resizeObserver.observe(footer);\n header !== null && resizeObserver.observe(header);\n\n return () => resizeObserver.disconnect();\n }, [\n fixOverscroll,\n recalcContentOverlayPosition,\n recalcScrollFlags,\n resetScrollPosition,\n setHeightAnimationRunning,\n LayoutMetrics,\n ]);\n\n const handleAppearAnimationEnd = useCallback(() => {\n const removeHeightObserver = initHeightObserver();\n removeHeightObserver && stateRef.current.exitHandlers.push(removeHeightObserver);\n\n const removeTransformHandlers = hasTouchSupport && initTransformHandlers();\n removeTransformHandlers && stateRef.current.exitHandlers.push(removeTransformHandlers);\n\n onAppearRef.current?.();\n }, [hasTouchSupport, initHeightObserver, initTransformHandlers]);\n\n const { onTouchEnd, ...eventHandlersRaw } = useNoBubbling();\n\n const eventHandlers = interceptTouchHandlers\n ? eventHandlersRaw\n : { ...eventHandlersRaw, onTouchMove: undefined, onTouchStart: undefined, onTouchEnd: undefined };\n\n if (!animationTimeout) {\n return null;\n }\n\n const containerDataQa = `bottom-sheet-container${dataQA ? ` ${dataQA}` : ''}`;\n\n const explicitAria: ExplicitRegionProps = {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-description': ariaDescription,\n };\n\n const renderFunc = (appearTransition: TransitionStatus, heightTransition: TransitionStatus) => {\n const content = (\n <div\n className={classnames(styles.content, {\n [styles.contentFullScreen]: height === 'full-screen',\n [styles.contentWithPaddings]: withContentPaddings,\n [styles.contentWithoutHeader]: !header,\n [styles.contentSizedFullScreen]: isContentSizedFullHeight(children),\n })}\n ref={contentRef}\n >\n <BottomSheetContext.Provider value={bottomSheetContext.value}>{children}</BottomSheetContext.Provider>\n </div>\n );\n\n const scrollContainer = hasTouchSupport ? (\n <CustomScrollContextProvider\n ref={scrollContextProviderRef}\n wrapperRef={scrollContainerRef}\n {...scrollContextProps}\n >\n <div\n className={classnames(styles.scrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n </CustomScrollContextProvider>\n ) : (\n <div\n className={classnames(styles.scrollContainer, styles.nativeScrollContainer, {\n [styles.scrollContainerWithTopPadding]: withTopPadding,\n })}\n onFocus={handleFocus}\n onScroll={recalcScrollFlags}\n ref={scrollContainerRef}\n >\n <GrowLimitWrapper {...growLimiterProps}>\n <div className={styles.headerWrapper} ref={headerWrapperRef}>\n {header}\n </div>\n {content}\n </GrowLimitWrapper>\n </div>\n );\n\n const clonedFooter =\n footer && isActionBarComponent(footer)\n ? cloneElement(footer, {\n type: footer.props.type || 'vertical',\n padding: footer.props.padding || DEFAULT_ACTION_BAR_PADDING,\n showDivider: false,\n })\n : footer;\n\n return (\n <Layer layer=\"bottom-sheet\">\n <div {...eventHandlers} className={styles.overlay}>\n <div\n className={classnames(styles.overlayBackground, {\n [styles.overlayBackgroundVisible]: showOverlay,\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n {...(appearTransition === 'entered'\n ? { 'data-qa': 'bottom-sheet-overlay', onClick: () => onCloseRef.current(null) }\n : {})}\n ref={overlayRef}\n />\n <div\n className={classnames(styles.swipeContainer, {\n [styles.appearAnimation]: appearTransition === 'entering',\n [styles.closeBySwipeAnimation]:\n appearTransition === 'exiting' && stateRef.current.touchAction === 'swipe',\n [styles.disappearAnimation]: appearTransition === 'exiting',\n })}\n data-qa={appearTransition === 'entered' ? containerDataQa : undefined}\n ref={swipeContainerRef}\n >\n <div\n className={classnames(styles.grabber, styles.grabberTransitionAnimation, {\n [styles.grabberEnsureSafe]: stateRef.current.grabberUnsafe,\n })}\n ref={grabberRef}\n />\n <ContentOverlayRoot ref={contentOverlayRef}>\n <AccessibleRegionProvider>\n <BottomSheetDialog\n explicitAria={explicitAria}\n dialogRef={bottomSheetRef}\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 id={id}\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 </BottomSheetDialog>\n </AccessibleRegionProvider>\n </ContentOverlayRoot>\n </div>\n </div>\n </Layer>\n );\n };\n\n return createPortal(\n <ThemeWrapper>\n {(themeClass) => (\n <div\n className={classnames(styles.cssVariablesContainer, themeClass)}\n data-qa=\"bottom-sheet-css-variables\"\n ref={cssVariablesContainerRef}\n >\n <Transition\n appear\n in={currentVisible}\n mountOnEnter\n onEnter={setTransformToInvisible}\n onEntering={setTransformToVisible}\n onEntered={handleAppearAnimationEnd}\n onExit={handleExitAnimationStart}\n onExiting={setTransformToInvisible}\n onExited={handleExitAnimationEnd}\n timeout={animationTimeout.appear}\n unmountOnExit\n nodeRef={contentRef}\n key={`hasTouchSupport:${hasTouchSupport}`}\n >\n {(appearTransition) => (\n <Transition\n in={heightAnimationRunning}\n onEntering={handleHeightAnimationStart}\n onEntered={handleHeightAnimationEnd}\n timeout={animationTimeout.height}\n nodeRef={contentRef}\n >\n {(heightTransition) => renderFunc(appearTransition, heightTransition)}\n </Transition>\n )}\n </Transition>\n </div>\n )}\n </ThemeWrapper>,\n document.body\n );\n};\n\nconst BottomSheetComponent = forwardRef(BottomSheetRenderFunc);\nBottomSheetComponent.displayName = 'BottomSheet';\n\nexport const BottomSheet = BottomSheetComponent as typeof BottomSheetComponent & { Media: typeof BottomSheetMedia };\nBottomSheet.Media = BottomSheetMedia;\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-CTyOn_00.js';
3
+ import { s as styles } from './bottom-sheet-CaeD09FO.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-CTyOn_00.js';
4
+ import { s as styles } from './bottom-sheet-CaeD09FO.js';
5
5
 
6
6
  const BottomSheetIFrameAdapter = ({ children }) => {
7
7
  const touchEventsInterceptorRef = useRef(null);
@@ -3,7 +3,7 @@ import { jsx } from 'react/jsx-runtime';
3
3
  import { forwardRef } from 'react';
4
4
  import classnames from 'classnames';
5
5
 
6
- var styles = {"media":"magritte-media___fzaJa_9-4-2","contain":"magritte-contain___Hu7Gu_9-4-2","cover":"magritte-cover___sueew_9-4-2"};
6
+ var styles = {"media":"magritte-media___fzaJa_9-4-4","contain":"magritte-contain___Hu7Gu_9-4-4","cover":"magritte-cover___sueew_9-4-4"};
7
7
 
8
8
  const BottomSheetMedia = forwardRef(({ backgroundUrl, children, className, height, imageSize, ratio, style, ...props }, ref) => {
9
9
  const defaultRatio = children ? 'auto' : 1.9;
@@ -25,9 +25,9 @@ import '@hh.ru/magritte-ui-layer';
25
25
  import '@hh.ru/magritte-ui-textarea';
26
26
  import '@hh.ru/magritte-ui-theme-wrapper';
27
27
  import '@hh.ru/magritte-ui-tree-selector';
28
- import './bottom-sheet-CTyOn_00.js';
28
+ import './bottom-sheet-CaeD09FO.js';
29
29
 
30
- var styles = {"top-padding":"magritte-top-padding___SfKyV_9-4-2","topPadding":"magritte-top-padding___SfKyV_9-4-2","title-wrapper":"magritte-title-wrapper___EqVH0_9-4-2","titleWrapper":"magritte-title-wrapper___EqVH0_9-4-2","content-wrapper":"magritte-content-wrapper___Y-au-_9-4-2","contentWrapper":"magritte-content-wrapper___Y-au-_9-4-2"};
30
+ var styles = {"top-padding":"magritte-top-padding___SfKyV_9-4-4","topPadding":"magritte-top-padding___SfKyV_9-4-4","title-wrapper":"magritte-title-wrapper___EqVH0_9-4-4","titleWrapper":"magritte-title-wrapper___EqVH0_9-4-4","content-wrapper":"magritte-content-wrapper___Y-au-_9-4-4","contentWrapper":"magritte-content-wrapper___Y-au-_9-4-4"};
31
31
 
32
32
  const NAV_BAR_DEFAULT_PROPS = {
33
33
  overlay: true,
@@ -0,0 +1,5 @@
1
+ import './index.css';
2
+ var styles = {"flex-container":"magritte-flex-container___muHAx_9-4-4","flexContainer":"magritte-flex-container___muHAx_9-4-4","animation-timeout":"magritte-animation-timeout___yd-SZ_9-4-4","animationTimeout":"magritte-animation-timeout___yd-SZ_9-4-4","css-variables-container":"magritte-css-variables-container___jBCr9_9-4-4","cssVariablesContainer":"magritte-css-variables-container___jBCr9_9-4-4","appear-animation":"magritte-appear-animation___P84Ln_9-4-4","appearAnimation":"magritte-appear-animation___P84Ln_9-4-4","disappear-animation":"magritte-disappear-animation___Putks_9-4-4","disappearAnimation":"magritte-disappear-animation___Putks_9-4-4","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_9-4-4","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_9-4-4","height-transition-animation":"magritte-height-transition-animation___xNprr_9-4-4","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_9-4-4","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_9-4-4","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_9-4-4","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_9-4-4","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_9-4-4","overlay":"magritte-overlay___5a2U-_9-4-4","overlay-background":"magritte-overlay-background___8Sd4V_9-4-4","overlayBackground":"magritte-overlay-background___8Sd4V_9-4-4","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_9-4-4","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_9-4-4","swipe-container":"magritte-swipe-container___sZ2n5_9-4-4","swipeContainer":"magritte-swipe-container___sZ2n5_9-4-4","grabber":"magritte-grabber___A7SB-_9-4-4","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_9-4-4","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_9-4-4","visual-container":"magritte-visual-container___-VSuY_9-4-4","visualContainer":"magritte-visual-container___-VSuY_9-4-4","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_9-4-4","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_9-4-4","scroll-container":"magritte-scroll-container___4ngNY_9-4-4","scrollContainer":"magritte-scroll-container___4ngNY_9-4-4","scroll-container_with-top-padding":"magritte-scroll-container_with-top-padding___o60Dl_9-4-4","scrollContainerWithTopPadding":"magritte-scroll-container_with-top-padding___o60Dl_9-4-4","native-scroll-container":"magritte-native-scroll-container___JOlxE_9-4-4","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_9-4-4","content":"magritte-content___1gAwP_9-4-4","content_full-screen":"magritte-content_full-screen___2SFaO_9-4-4","contentFullScreen":"magritte-content_full-screen___2SFaO_9-4-4","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_9-4-4","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_9-4-4","content_with-paddings":"magritte-content_with-paddings___gIiAv_9-4-4","contentWithPaddings":"magritte-content_with-paddings___gIiAv_9-4-4","footer":"magritte-footer___RWslT_9-4-4","footer-with-padding":"magritte-footer-with-padding___KwkhC_9-4-4","footerWithPadding":"magritte-footer-with-padding___KwkhC_9-4-4","divider":"magritte-divider___0F8hh_9-4-4","divider_visible":"magritte-divider_visible___pAWZM_9-4-4","dividerVisible":"magritte-divider_visible___pAWZM_9-4-4","content-overlay":"magritte-content-overlay___HAyzL_9-4-4","contentOverlay":"magritte-content-overlay___HAyzL_9-4-4","no-caret":"magritte-no-caret___ewcMD_9-4-4","noCaret":"magritte-no-caret___ewcMD_9-4-4","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_9-4-4","iframeWrapper":"magritte-iframe-wrapper___gBCL5_9-4-4","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_9-4-4","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_9-4-4","grow-limiter":"magritte-grow-limiter___ANaBL_9-4-4","growLimiter":"magritte-grow-limiter___ANaBL_9-4-4","header-wrapper":"magritte-header-wrapper___LdLOU_9-4-4","headerWrapper":"magritte-header-wrapper___LdLOU_9-4-4"};
3
+
4
+ export { styles as s };
5
+ //# sourceMappingURL=bottom-sheet-CaeD09FO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bottom-sheet-CaeD09FO.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
package/index.css CHANGED
@@ -1,4 +1,4 @@
1
- .magritte-media___fzaJa_9-4-2{
1
+ .magritte-media___fzaJa_9-4-4{
2
2
  display:flex;
3
3
  position:relative;
4
4
  overflow:hidden;
@@ -7,20 +7,20 @@
7
7
  background-repeat:no-repeat;
8
8
  margin:-4px;
9
9
  }
10
- .magritte-media___fzaJa_9-4-2 img{
10
+ .magritte-media___fzaJa_9-4-4 img{
11
11
  max-width:100%;
12
12
  max-height:100%;
13
13
  }
14
- .magritte-contain___Hu7Gu_9-4-2{
14
+ .magritte-contain___Hu7Gu_9-4-4{
15
15
  background-size:contain;
16
16
  }
17
- .magritte-contain___Hu7Gu_9-4-2 img{
17
+ .magritte-contain___Hu7Gu_9-4-4 img{
18
18
  object-fit:contain;
19
19
  }
20
- .magritte-cover___sueew_9-4-2{
20
+ .magritte-cover___sueew_9-4-4{
21
21
  background-size:cover;
22
22
  }
23
- .magritte-cover___sueew_9-4-2 img{
23
+ .magritte-cover___sueew_9-4-4 img{
24
24
  object-fit:cover;
25
25
  }
26
26
 
@@ -45,13 +45,13 @@
45
45
  --magritte-color-component-bottom-sheet-grabber-content-v24-7-1:#c6c6c68f;
46
46
  --magritte-color-component-_overlay-background-content-v24-7-1:#26262699;
47
47
  }
48
- .magritte-flex-container___muHAx_9-4-2{
48
+ .magritte-flex-container___muHAx_9-4-4{
49
49
  display:flex;
50
50
  flex-direction:column;
51
51
  align-items:stretch;
52
52
  }
53
- .magritte-animation-timeout___yd-SZ_9-4-2,
54
- .magritte-css-variables-container___jBCr9_9-4-2{
53
+ .magritte-animation-timeout___yd-SZ_9-4-4,
54
+ .magritte-css-variables-container___jBCr9_9-4-4{
55
55
  --virtual-keyboard-top-offset:0px;
56
56
  --virtual-keyboard-bottom-offset:0px;
57
57
  --enter-animation-duration:0ms;
@@ -61,8 +61,8 @@
61
61
  --swipe-cancel-transition-duration:0ms;
62
62
  }
63
63
  @media (prefers-reduced-motion: no-preference){
64
- .magritte-animation-timeout___yd-SZ_9-4-2,
65
- .magritte-css-variables-container___jBCr9_9-4-2{
64
+ .magritte-animation-timeout___yd-SZ_9-4-4,
65
+ .magritte-css-variables-container___jBCr9_9-4-4{
66
66
  --enter-animation-duration:var(--magritte-semantic-animation-ease-in-out-300-duration-v24-7-1);
67
67
  --exit-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v24-7-1);
68
68
  --grabber-animation-duration:var(--magritte-semantic-animation-ease-in-out-200-duration-v24-7-1);
@@ -70,52 +70,52 @@
70
70
  --swipe-cancel-transition-duration:var(--magritte-semantic-animation-ease-in-out-100-duration-v24-7-1);
71
71
  }
72
72
  }
73
- .magritte-appear-animation___P84Ln_9-4-2{
73
+ .magritte-appear-animation___P84Ln_9-4-4{
74
74
  transition-property:transform opacity;
75
75
  transition-duration:var(--enter-animation-duration);
76
76
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-300-timing-function-v24-7-1);
77
77
  }
78
- .magritte-disappear-animation___Putks_9-4-2{
78
+ .magritte-disappear-animation___Putks_9-4-4{
79
79
  transition-property:transform opacity;
80
80
  transition-duration:var(--exit-animation-duration);
81
81
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v24-7-1);
82
82
  }
83
- .magritte-grabber-transition-animation___s3Oh4_9-4-2::after{
83
+ .magritte-grabber-transition-animation___s3Oh4_9-4-4::after{
84
84
  transition-property:transform;
85
85
  transition-duration:var(--grabber-animation-duration);
86
86
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-200-timing-function-v24-7-1);
87
87
  }
88
- .magritte-height-transition-animation___xNprr_9-4-2{
88
+ .magritte-height-transition-animation___xNprr_9-4-4{
89
89
  transition-property:height;
90
90
  transition-duration:var(--height-transition-duration);
91
91
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-400-timing-function-v24-7-1);
92
92
  }
93
- .magritte-close-by-swipe-animation___wdezY_9-4-2{
93
+ .magritte-close-by-swipe-animation___wdezY_9-4-4{
94
94
  transition-property:transform;
95
95
  transition-duration:var(--exit-animation-duration);
96
96
  transition-timing-function:linear;
97
97
  }
98
- .magritte-swipe-cancel-animation___AhYj5_9-4-2{
98
+ .magritte-swipe-cancel-animation___AhYj5_9-4-4{
99
99
  transition-property:transform;
100
100
  transition-duration:var(--swipe-cancel-transition-duration);
101
101
  transition-timing-function:var(--magritte-semantic-animation-ease-in-out-100-duration-v24-7-1);
102
102
  }
103
- .magritte-overlay___5a2U-_9-4-2{
103
+ .magritte-overlay___5a2U-_9-4-4{
104
104
  pointer-events:none;
105
105
  position:fixed;
106
106
  inset:0;
107
107
  }
108
- .magritte-overlay-background___8Sd4V_9-4-2{
108
+ .magritte-overlay-background___8Sd4V_9-4-4{
109
109
  position:absolute;
110
110
  inset:0;
111
111
  will-change:opacity;
112
112
  transform:translate3d(0, 0, 0);
113
113
  }
114
- .magritte-overlay-background_visible___FOJgj_9-4-2{
114
+ .magritte-overlay-background_visible___FOJgj_9-4-4{
115
115
  pointer-events:initial;
116
116
  background-color:var(--magritte-color-component-_overlay-background-content-v24-7-1);
117
117
  }
118
- .magritte-swipe-container___sZ2n5_9-4-2{
118
+ .magritte-swipe-container___sZ2n5_9-4-4{
119
119
  display:flex;
120
120
  flex-direction:column;
121
121
  align-items:stretch;
@@ -125,11 +125,11 @@
125
125
  will-change:transform;
126
126
  transform:translate3d(0, 0, 0);
127
127
  }
128
- .magritte-grabber___A7SB-_9-4-2{
128
+ .magritte-grabber___A7SB-_9-4-4{
129
129
  flex:0 0 20px;
130
130
  position:relative;
131
131
  }
132
- .magritte-grabber___A7SB-_9-4-2::after{
132
+ .magritte-grabber___A7SB-_9-4-4::after{
133
133
  content:'';
134
134
  position:absolute;
135
135
  top:8px;
@@ -140,10 +140,10 @@
140
140
  border-radius:2px;
141
141
  z-index:3;
142
142
  }
143
- .magritte-grabber_ensure-safe___DR-dV_9-4-2::after{
143
+ .magritte-grabber_ensure-safe___DR-dV_9-4-4::after{
144
144
  transform:translateY(calc(20px - 2px));
145
145
  }
146
- .magritte-visual-container___-VSuY_9-4-2{
146
+ .magritte-visual-container___-VSuY_9-4-4{
147
147
  display:flex;
148
148
  flex-direction:column;
149
149
  align-items:stretch;
@@ -157,11 +157,11 @@
157
157
  user-select:text;
158
158
  --magritte-ui-container-background-color-override:var(--magritte-color-component-bottom-sheet-background-content-v24-7-1);
159
159
  }
160
- .magritte-visual-container_full-screen___jCCBb_9-4-2{
160
+ .magritte-visual-container_full-screen___jCCBb_9-4-4{
161
161
  flex:1 1 auto;
162
162
  min-height:1px;
163
163
  }
164
- .magritte-scroll-container___4ngNY_9-4-2{
164
+ .magritte-scroll-container___4ngNY_9-4-4{
165
165
  --magritte-ui-navigation-bar-background-override:var(--magritte-color-component-bottom-sheet-background-content-v24-7-1);
166
166
  display:flex;
167
167
  flex-direction:column;
@@ -170,17 +170,17 @@
170
170
  min-height:1px;
171
171
  z-index:1;
172
172
  }
173
- .magritte-scroll-container_with-top-padding___o60Dl_9-4-2{
173
+ .magritte-scroll-container_with-top-padding___o60Dl_9-4-4{
174
174
  --magritte-ui-navigation-bar-top-padding-override:16px;
175
175
  }
176
- .magritte-native-scroll-container___JOlxE_9-4-2{
176
+ .magritte-native-scroll-container___JOlxE_9-4-4{
177
177
  overflow:scroll;
178
178
  scrollbar-width:none;
179
179
  }
180
- .magritte-native-scroll-container___JOlxE_9-4-2::-webkit-scrollbar{
180
+ .magritte-native-scroll-container___JOlxE_9-4-4::-webkit-scrollbar{
181
181
  display:none;
182
182
  }
183
- .magritte-content___1gAwP_9-4-2{
183
+ .magritte-content___1gAwP_9-4-4{
184
184
  display:flex;
185
185
  flex-direction:column;
186
186
  align-items:stretch;
@@ -189,17 +189,17 @@
189
189
  will-change:transform;
190
190
  transform:translate3d(0, 0, 0);
191
191
  }
192
- .magritte-content_full-screen___2SFaO_9-4-2{
192
+ .magritte-content_full-screen___2SFaO_9-4-4{
193
193
  flex:1 0 auto;
194
194
  }
195
- .magritte-content_sized-full-screen___45pa6_9-4-2{
195
+ .magritte-content_sized-full-screen___45pa6_9-4-4{
196
196
  flex:1 1 auto;
197
197
  min-height:1px;
198
198
  }
199
- .magritte-content_with-paddings___gIiAv_9-4-2{
199
+ .magritte-content_with-paddings___gIiAv_9-4-4{
200
200
  padding:16px 16px 0;
201
201
  }
202
- .magritte-footer___RWslT_9-4-2{
202
+ .magritte-footer___RWslT_9-4-4{
203
203
  flex:0 0 auto;
204
204
  background-color:var(--magritte-color-component-bottom-sheet-background-content-v24-7-1);
205
205
  z-index:2;
@@ -207,56 +207,56 @@
207
207
  transform:translate3d(0, 0, 0);
208
208
  --magritte-ui-container-background-color-override:var(--magritte-color-component-bottom-sheet-background-content-v24-7-1);
209
209
  }
210
- .magritte-footer-with-padding___KwkhC_9-4-2{
210
+ .magritte-footer-with-padding___KwkhC_9-4-4{
211
211
  display:flex;
212
212
  flex-direction:column;
213
213
  gap:12px;
214
214
  padding:16px;
215
215
  }
216
- .magritte-divider___0F8hh_9-4-2{
216
+ .magritte-divider___0F8hh_9-4-4{
217
217
  visibility:hidden;
218
218
  }
219
- .magritte-divider_visible___pAWZM_9-4-2{
219
+ .magritte-divider_visible___pAWZM_9-4-4{
220
220
  visibility:visible;
221
221
  }
222
- .magritte-content-overlay___HAyzL_9-4-2{
222
+ .magritte-content-overlay___HAyzL_9-4-4{
223
223
  pointer-events:none;
224
224
  position:absolute;
225
225
  inset:0;
226
226
  }
227
- .magritte-no-caret___ewcMD_9-4-2{
227
+ .magritte-no-caret___ewcMD_9-4-4{
228
228
  --magritte-ui-input-caret-color-override:transparent;
229
229
  --magritte-ui-textarea-caret-color-override:transparent;
230
230
  }
231
- .magritte-iframe-wrapper___gBCL5_9-4-2{
231
+ .magritte-iframe-wrapper___gBCL5_9-4-4{
232
232
  position:relative;
233
233
  width:100%;
234
234
  }
235
- .magritte-iframe-events-interceptor___FTW-8_9-4-2{
235
+ .magritte-iframe-events-interceptor___FTW-8_9-4-4{
236
236
  position:absolute;
237
237
  inset:0;
238
238
  }
239
- .magritte-grow-limiter___ANaBL_9-4-2{
239
+ .magritte-grow-limiter___ANaBL_9-4-4{
240
240
  display:flex;
241
241
  flex-direction:column;
242
242
  flex:1 0;
243
243
  }
244
- .magritte-header-wrapper___LdLOU_9-4-2{
244
+ .magritte-header-wrapper___LdLOU_9-4-4{
245
245
  position:sticky;
246
246
  z-index:1;
247
247
  top:0;
248
248
  --magritte-ui-nav-bar-padding-top-override:8px;
249
249
  }
250
250
 
251
- .magritte-top-padding___SfKyV_9-4-2{
251
+ .magritte-top-padding___SfKyV_9-4-4{
252
252
  position:absolute;
253
253
  height:12px;
254
254
  inset:0 0 auto;
255
255
  background-color:var(--magritte-ui-container-background-color-override);
256
256
  }
257
- .magritte-title-wrapper___EqVH0_9-4-2{
257
+ .magritte-title-wrapper___EqVH0_9-4-4{
258
258
  padding-top:24px;
259
259
  }
260
- .magritte-content-wrapper___Y-au-_9-4-2{
260
+ .magritte-content-wrapper___Y-au-_9-4-4{
261
261
  padding-top:16px;
262
262
  }
package/index.js CHANGED
@@ -26,7 +26,7 @@ import '@hh.ru/magritte-ui-layer';
26
26
  import '@hh.ru/magritte-ui-textarea';
27
27
  import '@hh.ru/magritte-ui-theme-wrapper';
28
28
  import '@hh.ru/magritte-ui-tree-selector';
29
- import './bottom-sheet-CTyOn_00.js';
29
+ import './bottom-sheet-CaeD09FO.js';
30
30
  import '@hh.ru/magritte-ui-nav-bar';
31
31
  import '@hh.ru/magritte-ui-title';
32
32
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hh.ru/magritte-ui-bottom-sheet",
3
- "version": "9.4.2",
3
+ "version": "9.4.4",
4
4
  "main": "index.js",
5
5
  "types": "index.d.ts",
6
6
  "sideEffects": [
@@ -35,7 +35,7 @@
35
35
  "@hh.ru/magritte-ui-divider": "3.2.0",
36
36
  "@hh.ru/magritte-ui-layer": "3.2.5",
37
37
  "@hh.ru/magritte-ui-mock-component": "1.1.7",
38
- "@hh.ru/magritte-ui-nav-bar": "1.5.2",
38
+ "@hh.ru/magritte-ui-nav-bar": "1.5.3",
39
39
  "@hh.ru/magritte-ui-textarea": "3.3.30",
40
40
  "@hh.ru/magritte-ui-theme-wrapper": "1.1.17",
41
41
  "@hh.ru/magritte-ui-title": "8.3.1",
@@ -50,5 +50,5 @@
50
50
  "publishConfig": {
51
51
  "access": "public"
52
52
  },
53
- "gitHead": "c13e22b473df1c42c30d787cef7f937e3c2a195f"
53
+ "gitHead": "74e4a3c836283bbb6e15e2686be772f5bbbe9416"
54
54
  }
@@ -1,5 +0,0 @@
1
- import './index.css';
2
- var styles = {"flex-container":"magritte-flex-container___muHAx_9-4-2","flexContainer":"magritte-flex-container___muHAx_9-4-2","animation-timeout":"magritte-animation-timeout___yd-SZ_9-4-2","animationTimeout":"magritte-animation-timeout___yd-SZ_9-4-2","css-variables-container":"magritte-css-variables-container___jBCr9_9-4-2","cssVariablesContainer":"magritte-css-variables-container___jBCr9_9-4-2","appear-animation":"magritte-appear-animation___P84Ln_9-4-2","appearAnimation":"magritte-appear-animation___P84Ln_9-4-2","disappear-animation":"magritte-disappear-animation___Putks_9-4-2","disappearAnimation":"magritte-disappear-animation___Putks_9-4-2","grabber-transition-animation":"magritte-grabber-transition-animation___s3Oh4_9-4-2","grabberTransitionAnimation":"magritte-grabber-transition-animation___s3Oh4_9-4-2","height-transition-animation":"magritte-height-transition-animation___xNprr_9-4-2","heightTransitionAnimation":"magritte-height-transition-animation___xNprr_9-4-2","close-by-swipe-animation":"magritte-close-by-swipe-animation___wdezY_9-4-2","closeBySwipeAnimation":"magritte-close-by-swipe-animation___wdezY_9-4-2","swipe-cancel-animation":"magritte-swipe-cancel-animation___AhYj5_9-4-2","swipeCancelAnimation":"magritte-swipe-cancel-animation___AhYj5_9-4-2","overlay":"magritte-overlay___5a2U-_9-4-2","overlay-background":"magritte-overlay-background___8Sd4V_9-4-2","overlayBackground":"magritte-overlay-background___8Sd4V_9-4-2","overlay-background_visible":"magritte-overlay-background_visible___FOJgj_9-4-2","overlayBackgroundVisible":"magritte-overlay-background_visible___FOJgj_9-4-2","swipe-container":"magritte-swipe-container___sZ2n5_9-4-2","swipeContainer":"magritte-swipe-container___sZ2n5_9-4-2","grabber":"magritte-grabber___A7SB-_9-4-2","grabber_ensure-safe":"magritte-grabber_ensure-safe___DR-dV_9-4-2","grabberEnsureSafe":"magritte-grabber_ensure-safe___DR-dV_9-4-2","visual-container":"magritte-visual-container___-VSuY_9-4-2","visualContainer":"magritte-visual-container___-VSuY_9-4-2","visual-container_full-screen":"magritte-visual-container_full-screen___jCCBb_9-4-2","visualContainerFullScreen":"magritte-visual-container_full-screen___jCCBb_9-4-2","scroll-container":"magritte-scroll-container___4ngNY_9-4-2","scrollContainer":"magritte-scroll-container___4ngNY_9-4-2","scroll-container_with-top-padding":"magritte-scroll-container_with-top-padding___o60Dl_9-4-2","scrollContainerWithTopPadding":"magritte-scroll-container_with-top-padding___o60Dl_9-4-2","native-scroll-container":"magritte-native-scroll-container___JOlxE_9-4-2","nativeScrollContainer":"magritte-native-scroll-container___JOlxE_9-4-2","content":"magritte-content___1gAwP_9-4-2","content_full-screen":"magritte-content_full-screen___2SFaO_9-4-2","contentFullScreen":"magritte-content_full-screen___2SFaO_9-4-2","content_sized-full-screen":"magritte-content_sized-full-screen___45pa6_9-4-2","contentSizedFullScreen":"magritte-content_sized-full-screen___45pa6_9-4-2","content_with-paddings":"magritte-content_with-paddings___gIiAv_9-4-2","contentWithPaddings":"magritte-content_with-paddings___gIiAv_9-4-2","footer":"magritte-footer___RWslT_9-4-2","footer-with-padding":"magritte-footer-with-padding___KwkhC_9-4-2","footerWithPadding":"magritte-footer-with-padding___KwkhC_9-4-2","divider":"magritte-divider___0F8hh_9-4-2","divider_visible":"magritte-divider_visible___pAWZM_9-4-2","dividerVisible":"magritte-divider_visible___pAWZM_9-4-2","content-overlay":"magritte-content-overlay___HAyzL_9-4-2","contentOverlay":"magritte-content-overlay___HAyzL_9-4-2","no-caret":"magritte-no-caret___ewcMD_9-4-2","noCaret":"magritte-no-caret___ewcMD_9-4-2","iframe-wrapper":"magritte-iframe-wrapper___gBCL5_9-4-2","iframeWrapper":"magritte-iframe-wrapper___gBCL5_9-4-2","iframe-events-interceptor":"magritte-iframe-events-interceptor___FTW-8_9-4-2","iframeEventsInterceptor":"magritte-iframe-events-interceptor___FTW-8_9-4-2","grow-limiter":"magritte-grow-limiter___ANaBL_9-4-2","growLimiter":"magritte-grow-limiter___ANaBL_9-4-2","header-wrapper":"magritte-header-wrapper___LdLOU_9-4-2","headerWrapper":"magritte-header-wrapper___LdLOU_9-4-2"};
3
-
4
- export { styles as s };
5
- //# sourceMappingURL=bottom-sheet-CTyOn_00.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bottom-sheet-CTyOn_00.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}