@vkontakte/vkui 5.9.0 → 5.9.2

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.
Files changed (202) hide show
  1. package/dist/cjs/components/Alert/Alert.d.ts +3 -3
  2. package/dist/cjs/components/Alert/Alert.d.ts.map +1 -1
  3. package/dist/cjs/components/Alert/Alert.js +5 -3
  4. package/dist/cjs/components/Alert/Alert.js.map +1 -1
  5. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts +1 -1
  6. package/dist/cjs/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  7. package/dist/cjs/components/CalendarRange/CalendarRange.js +1 -2
  8. package/dist/cjs/components/CalendarRange/CalendarRange.js.map +1 -1
  9. package/dist/cjs/components/ChipsSelect/ChipsSelect.js +1 -1
  10. package/dist/cjs/components/ChipsSelect/ChipsSelect.js.map +1 -1
  11. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  12. package/dist/cjs/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  13. package/dist/cjs/components/CustomScrollView/CustomScrollView.js +17 -5
  14. package/dist/cjs/components/CustomScrollView/CustomScrollView.js.map +1 -1
  15. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts +4 -1
  16. package/dist/cjs/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  17. package/dist/cjs/components/CustomSelect/CustomSelect.js.map +1 -1
  18. package/dist/cjs/components/FormLayout/FormLayout.d.ts +3 -3
  19. package/dist/cjs/components/FormLayout/FormLayout.d.ts.map +1 -1
  20. package/dist/cjs/components/FormLayout/FormLayout.js +5 -2
  21. package/dist/cjs/components/FormLayout/FormLayout.js.map +1 -1
  22. package/dist/cjs/components/Gallery/Gallery.d.ts.map +1 -1
  23. package/dist/cjs/components/Gallery/Gallery.js +3 -10
  24. package/dist/cjs/components/Gallery/Gallery.js.map +1 -1
  25. package/dist/cjs/components/Gallery/hooks.d.ts +2 -0
  26. package/dist/cjs/components/Gallery/hooks.d.ts.map +1 -0
  27. package/dist/cjs/components/Gallery/hooks.js +52 -0
  28. package/dist/cjs/components/Gallery/hooks.js.map +1 -0
  29. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  30. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js +49 -20
  31. package/dist/cjs/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  32. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  33. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  34. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js +5 -2
  35. package/dist/cjs/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  36. package/dist/cjs/components/ModalRoot/ModalRoot.js +6 -8
  37. package/dist/cjs/components/ModalRoot/ModalRoot.js.map +1 -1
  38. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  39. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  40. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  41. package/dist/cjs/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  42. package/dist/cjs/hooks/useDirection.d.ts +39 -0
  43. package/dist/cjs/hooks/useDirection.d.ts.map +1 -0
  44. package/dist/cjs/hooks/useDirection.js +39 -0
  45. package/dist/cjs/hooks/useDirection.js.map +1 -0
  46. package/dist/cjs/lib/floating/adapters.d.ts +1 -1
  47. package/dist/cjs/lib/floating/adapters.d.ts.map +1 -1
  48. package/dist/cjs/lib/floating/adapters.js +1 -1
  49. package/dist/cjs/lib/floating/adapters.js.map +1 -1
  50. package/dist/cjs/lib/floating/index.d.ts +1 -1
  51. package/dist/cjs/lib/floating/index.d.ts.map +1 -1
  52. package/dist/cjs/lib/floating/index.js +1 -1
  53. package/dist/cjs/lib/floating/index.js.map +1 -1
  54. package/dist/cjs/lib/floating/types.d.ts +2 -2
  55. package/dist/cjs/lib/floating/types.d.ts.map +1 -1
  56. package/dist/components/Alert/Alert.d.ts +3 -3
  57. package/dist/components/Alert/Alert.d.ts.map +1 -1
  58. package/dist/components/Alert/Alert.js +5 -3
  59. package/dist/components/Alert/Alert.js.map +1 -1
  60. package/dist/components/CalendarRange/CalendarRange.d.ts +1 -1
  61. package/dist/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  62. package/dist/components/CalendarRange/CalendarRange.js +1 -2
  63. package/dist/components/CalendarRange/CalendarRange.js.map +1 -1
  64. package/dist/components/ChipsSelect/ChipsSelect.js +1 -1
  65. package/dist/components/ChipsSelect/ChipsSelect.js.map +1 -1
  66. package/dist/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  67. package/dist/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  68. package/dist/components/CustomScrollView/CustomScrollView.js +17 -5
  69. package/dist/components/CustomScrollView/CustomScrollView.js.map +1 -1
  70. package/dist/components/CustomSelect/CustomSelect.d.ts +4 -1
  71. package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  72. package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
  73. package/dist/components/FormLayout/FormLayout.d.ts +3 -3
  74. package/dist/components/FormLayout/FormLayout.d.ts.map +1 -1
  75. package/dist/components/FormLayout/FormLayout.js +5 -2
  76. package/dist/components/FormLayout/FormLayout.js.map +1 -1
  77. package/dist/components/Gallery/Gallery.d.ts.map +1 -1
  78. package/dist/components/Gallery/Gallery.js +3 -10
  79. package/dist/components/Gallery/Gallery.js.map +1 -1
  80. package/dist/components/Gallery/hooks.d.ts +2 -0
  81. package/dist/components/Gallery/hooks.d.ts.map +1 -0
  82. package/dist/components/Gallery/hooks.js +41 -0
  83. package/dist/components/Gallery/hooks.js.map +1 -0
  84. package/dist/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  85. package/dist/components/HorizontalScroll/HorizontalScroll.js +49 -20
  86. package/dist/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  87. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  88. package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  89. package/dist/components/ModalPageHeader/ModalPageHeader.js +5 -2
  90. package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  91. package/dist/components/ModalRoot/ModalRoot.js +6 -8
  92. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  93. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  94. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  95. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js +6 -3
  96. package/dist/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  97. package/dist/components.css +6 -6
  98. package/dist/components.css.map +1 -1
  99. package/dist/components.js.tmp +3941 -2540
  100. package/dist/cssm/components/Alert/Alert.d.ts +3 -3
  101. package/dist/cssm/components/Alert/Alert.d.ts.map +1 -1
  102. package/dist/cssm/components/Alert/Alert.js +3 -2
  103. package/dist/cssm/components/Alert/Alert.js.map +1 -1
  104. package/dist/cssm/components/Button/Button.module.css +3 -1
  105. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts +1 -1
  106. package/dist/cssm/components/CalendarRange/CalendarRange.d.ts.map +1 -1
  107. package/dist/cssm/components/CalendarRange/CalendarRange.js +1 -1
  108. package/dist/cssm/components/CalendarRange/CalendarRange.js.map +1 -1
  109. package/dist/cssm/components/ChipsSelect/ChipsSelect.js +1 -1
  110. package/dist/cssm/components/ChipsSelect/ChipsSelect.js.map +1 -1
  111. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts +4 -2
  112. package/dist/cssm/components/CustomScrollView/CustomScrollView.d.ts.map +1 -1
  113. package/dist/cssm/components/CustomScrollView/CustomScrollView.js +4 -2
  114. package/dist/cssm/components/CustomScrollView/CustomScrollView.js.map +1 -1
  115. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts +4 -1
  116. package/dist/cssm/components/CustomSelect/CustomSelect.d.ts.map +1 -1
  117. package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
  118. package/dist/cssm/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  119. package/dist/cssm/components/FormLayout/FormLayout.d.ts +3 -3
  120. package/dist/cssm/components/FormLayout/FormLayout.d.ts.map +1 -1
  121. package/dist/cssm/components/FormLayout/FormLayout.js +4 -2
  122. package/dist/cssm/components/FormLayout/FormLayout.js.map +1 -1
  123. package/dist/cssm/components/Gallery/Gallery.d.ts.map +1 -1
  124. package/dist/cssm/components/Gallery/Gallery.js +2 -7
  125. package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
  126. package/dist/cssm/components/Gallery/hooks.d.ts +2 -0
  127. package/dist/cssm/components/Gallery/hooks.d.ts.map +1 -0
  128. package/dist/cssm/components/Gallery/hooks.js +39 -0
  129. package/dist/cssm/components/Gallery/hooks.js.map +1 -0
  130. package/dist/cssm/components/Group/Group.module.css +2 -2
  131. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.d.ts.map +1 -1
  132. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js +48 -19
  133. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.js.map +1 -1
  134. package/dist/cssm/components/ModalPage/ModalPage.module.css +1 -4
  135. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts +3 -3
  136. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
  137. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -2
  138. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
  139. package/dist/cssm/components/ModalRoot/ModalRoot.js +6 -8
  140. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  141. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +7 -1
  142. package/dist/cssm/components/Snackbar/Snackbar.module.css +1 -1
  143. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts +3 -3
  144. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.d.ts.map +1 -1
  145. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js +4 -2
  146. package/dist/cssm/components/VisuallyHiddenInput/VisuallyHiddenInput.js.map +1 -1
  147. package/dist/cssm/hooks/useDirection.d.ts +39 -0
  148. package/dist/cssm/hooks/useDirection.d.ts.map +1 -0
  149. package/dist/cssm/hooks/useDirection.js +55 -0
  150. package/dist/cssm/hooks/useDirection.js.map +1 -0
  151. package/dist/cssm/lib/floating/adapters.d.ts +1 -1
  152. package/dist/cssm/lib/floating/adapters.d.ts.map +1 -1
  153. package/dist/cssm/lib/floating/adapters.js +1 -1
  154. package/dist/cssm/lib/floating/adapters.js.map +1 -1
  155. package/dist/cssm/lib/floating/index.d.ts +1 -1
  156. package/dist/cssm/lib/floating/index.d.ts.map +1 -1
  157. package/dist/cssm/lib/floating/index.js +1 -1
  158. package/dist/cssm/lib/floating/index.js.map +1 -1
  159. package/dist/cssm/lib/floating/types.d.ts +2 -2
  160. package/dist/cssm/lib/floating/types.d.ts.map +1 -1
  161. package/dist/cssm/lib/floating/types.js.map +1 -1
  162. package/dist/hooks/useDirection.d.ts +39 -0
  163. package/dist/hooks/useDirection.d.ts.map +1 -0
  164. package/dist/hooks/useDirection.js +56 -0
  165. package/dist/hooks/useDirection.js.map +1 -0
  166. package/dist/lib/floating/adapters.d.ts +1 -1
  167. package/dist/lib/floating/adapters.d.ts.map +1 -1
  168. package/dist/lib/floating/adapters.js +1 -1
  169. package/dist/lib/floating/adapters.js.map +1 -1
  170. package/dist/lib/floating/index.d.ts +1 -1
  171. package/dist/lib/floating/index.d.ts.map +1 -1
  172. package/dist/lib/floating/index.js +1 -1
  173. package/dist/lib/floating/index.js.map +1 -1
  174. package/dist/lib/floating/types.d.ts +2 -2
  175. package/dist/lib/floating/types.d.ts.map +1 -1
  176. package/dist/lib/floating/types.js.map +1 -1
  177. package/dist/vkui.css +6 -6
  178. package/dist/vkui.css.map +1 -1
  179. package/dist/vkui.js.tmp +3941 -2540
  180. package/package.json +2 -2
  181. package/src/components/Alert/Alert.tsx +10 -3
  182. package/src/components/Button/Button.module.css +3 -1
  183. package/src/components/CalendarRange/CalendarRange.tsx +0 -1
  184. package/src/components/ChipsSelect/ChipsSelect.tsx +1 -1
  185. package/src/components/CustomScrollView/CustomScrollView.tsx +13 -2
  186. package/src/components/CustomSelect/CustomSelect.tsx +5 -1
  187. package/src/components/CustomSelectOption/CustomSelectOption.module.css +0 -5
  188. package/src/components/FormLayout/FormLayout.tsx +8 -3
  189. package/src/components/Gallery/Gallery.tsx +2 -6
  190. package/src/components/Gallery/hooks.ts +39 -0
  191. package/src/components/Group/Group.module.css +2 -2
  192. package/src/components/HorizontalScroll/HorizontalScroll.tsx +54 -20
  193. package/src/components/ModalPage/ModalPage.module.css +1 -4
  194. package/src/components/ModalPageHeader/ModalPageHeader.tsx +8 -4
  195. package/src/components/ModalRoot/ModalRoot.tsx +6 -5
  196. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +6 -1
  197. package/src/components/Snackbar/Snackbar.module.css +1 -1
  198. package/src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx +6 -2
  199. package/src/hooks/useDirection.ts +63 -0
  200. package/src/lib/floating/adapters.ts +1 -1
  201. package/src/lib/floating/index.ts +1 -1
  202. package/src/lib/floating/types.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToRightBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => Math.ceil(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToRightBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * максимальное значение сдвига влево\n */\n const maxLeft = initialScrollWidth - scrollElement.offsetWidth;\n\n let startLeft = roundUpElementScrollLeft(scrollElement);\n let endLeft = getScrollPosition(startLeft);\n\n onScrollStart();\n\n if (endLeft >= maxLeft) {\n onScrollToRightBorder();\n endLeft = maxLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentLeft = startLeft + (endLeft - startLeft) * value;\n scrollElement.scrollLeft = Math.ceil(currentLeft);\n\n if (roundUpElementScrollLeft(scrollElement) !== Math.max(0, endLeft) && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToRightBorder: () => setCanScrollRight(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollAnimationDuration, scrollerRef],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollLeft(scrollElement.scrollLeft > 0);\n setCanScrollRight(\n roundUpElementScrollLeft(scrollElement) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [hasPointer, scrollerRef, showArrows]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["HorizontalScroll","now","performance","Date","roundUpElementScrollLeft","el","Math","ceil","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToRightBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","maxLeft","offsetWidth","startLeft","endLeft","startTime","scroll","time","elapsed","min","value","easeInOutSine","currentLeft","max","requestAnimationFrame","shift","length","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","React","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","isCustomScrollingRef","useRef","scrollerRef","useExternRef","hasPointer","useAdaptivityHasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEventListener","useEffect","addScrollerRefToScrollEvent","noop","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","RootComponent","baseClassName","classNames","onMouseEnter","undefined","ScrollArrow","size","offsetY","direction","className","onClick","div","ref"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/HorizontalScroll/HorizontalScroll.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames, noop } from '@vkontakte/vkjs';\nimport { useAdaptivityHasPointer } from '../../hooks/useAdaptivityHasPointer';\nimport { useDirection } from '../../hooks/useDirection';\nimport { useEventListener } from '../../hooks/useEventListener';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { easeInOutSine } from '../../lib/fx';\nimport { HasRef, HTMLAttributesWithRootRef } from '../../types';\nimport { RootComponent } from '../RootComponent/RootComponent';\nimport { ScrollArrow } from '../ScrollArrow/ScrollArrow';\nimport styles from './HorizontalScroll.module.css';\n\ninterface ScrollContext {\n scrollElement: HTMLElement | null;\n scrollAnimationDuration: number;\n animationQueue: VoidFunction[];\n getScrollPosition: (currentPosition: number) => number;\n onScrollToEndBorder: VoidFunction;\n onScrollEnd: VoidFunction;\n onScrollStart: VoidFunction;\n /**\n * Начальная ширина прокрутки.\n * В некоторых случаях может отличаться от текущей ширины прокрутки из-за transforms: translate\n */\n initialScrollWidth: number;\n textDirection: 'ltr' | 'rtl';\n}\n\nexport type ScrollPositionHandler = (currentPosition: number) => number;\n\nexport interface HorizontalScrollProps\n extends HTMLAttributesWithRootRef<HTMLDivElement>,\n HasRef<HTMLDivElement> {\n /**\n * Функция для расчета величины прокрутки при клике на левую стрелку.\n */\n getScrollToLeft?: ScrollPositionHandler;\n /**\n * Функция для расчета величины прокрутки при клике на правую стрелку.\n */\n getScrollToRight?: ScrollPositionHandler;\n arrowSize?: 'm' | 'l';\n /**\n * Смещает иконки кнопок навигации по вертикали.\n */\n arrowOffsetY?: number | string;\n showArrows?: boolean | 'always';\n scrollAnimationDuration?: number;\n /**\n * Добавляет возможность прокручивать контент на любое колесо мыши.\n * По умолчанию прокручивается как любой горизонтальный контент через shift.\n */\n scrollOnAnyWheel?: boolean;\n}\n\n/**\n * timing method\n */\nfunction now() {\n return performance && performance.now ? performance.now() : Date.now();\n}\n\n/**\n * Округление к большему по модулю\n *\n * ## Пример\n *\n * ```ts\n * import { strict as assert } from 'node:assert';\n *\n * assert.equal(roundingAwayFromZero(5.1), 6)\n * assert.equal(roundingAwayFromZero(-5.1), -6)\n * ```\n */\nfunction roundingAwayFromZero(value: number): number {\n return value > 0 ? Math.ceil(value) : Math.floor(value);\n}\n\n/**\n * Округляем el.scrollLeft\n * https://github.com/VKCOM/VKUI/pull/2445\n */\nconst roundUpElementScrollLeft = (el: HTMLElement) => roundingAwayFromZero(el.scrollLeft);\n\n/**\n * Код анимации скрола, на основе полифила: https://github.com/iamdustan/smoothscroll\n * Константа взята из полифила (468), на дизайн-ревью уточнили до 250\n * @var {number} SCROLL_ONE_FRAME_TIME время анимации скролла\n */\nconst SCROLL_ONE_FRAME_TIME = 250;\n\nfunction doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue,\n onScrollToEndBorder,\n onScrollEnd,\n onScrollStart,\n initialScrollWidth,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n textDirection,\n}: ScrollContext) {\n if (!scrollElement || !getScrollPosition) {\n return;\n }\n\n /**\n * крайнее значение сдвига\n */\n const extremeScrollLeft =\n (textDirection === 'ltr' ? 1 : -1) * (initialScrollWidth - scrollElement.offsetWidth);\n\n let startScrollLeft = roundUpElementScrollLeft(scrollElement);\n let endScrollLeft = getScrollPosition(startScrollLeft);\n\n onScrollStart();\n\n /**\n * Если окончание прокрутки вышло за ноль\n */\n if (startScrollLeft * endScrollLeft < 0) {\n endScrollLeft = 0;\n }\n\n if (Math.abs(endScrollLeft) >= Math.abs(extremeScrollLeft)) {\n onScrollToEndBorder();\n endScrollLeft = extremeScrollLeft;\n }\n\n const startTime = now();\n\n (function scroll() {\n if (!scrollElement) {\n onScrollEnd();\n return;\n }\n\n const time = now();\n const elapsed = Math.min((time - startTime) / scrollAnimationDuration, 1);\n\n const value = easeInOutSine(elapsed);\n\n const currentScrollLeft = startScrollLeft + (endScrollLeft - startScrollLeft) * value;\n scrollElement.scrollLeft = roundingAwayFromZero(currentScrollLeft);\n\n const scrollEnd =\n textDirection === 'ltr' ? Math.max(0, endScrollLeft) : Math.min(0, endScrollLeft);\n if (roundUpElementScrollLeft(scrollElement) !== scrollEnd && elapsed !== 1) {\n requestAnimationFrame(scroll);\n return;\n }\n\n onScrollEnd();\n animationQueue.shift();\n if (animationQueue.length > 0) {\n animationQueue[0]();\n }\n })();\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/HorizontalScroll\n */\nexport const HorizontalScroll = ({\n children,\n getScrollToLeft,\n getScrollToRight,\n showArrows = true,\n arrowSize = 'l',\n arrowOffsetY,\n scrollAnimationDuration = SCROLL_ONE_FRAME_TIME,\n getRef,\n scrollOnAnyWheel = false,\n ...restProps\n}: HorizontalScrollProps) => {\n const [canScrollLeft, setCanScrollLeft] = React.useState(false);\n const [canScrollRight, setCanScrollRight] = React.useState(false);\n const [directionRef, textDirection = 'ltr'] = useDirection<HTMLDivElement>();\n\n const setCanScrollStart = textDirection === 'ltr' ? setCanScrollLeft : setCanScrollRight;\n const setCanScrollEnd = textDirection === 'ltr' ? setCanScrollRight : setCanScrollLeft;\n\n const isCustomScrollingRef = React.useRef(false);\n\n const scrollerRef = useExternRef(getRef, directionRef);\n\n const animationQueue = React.useRef<VoidFunction[]>([]);\n\n const hasPointer = useAdaptivityHasPointer();\n\n const scrollTo = React.useCallback(\n (getScrollPosition: ScrollPositionHandler) => {\n const scrollElement = scrollerRef.current;\n\n animationQueue.current.push(() =>\n doScroll({\n scrollElement,\n getScrollPosition,\n animationQueue: animationQueue.current,\n onScrollToEndBorder: () => setCanScrollEnd(false),\n onScrollEnd: () => (isCustomScrollingRef.current = false),\n onScrollStart: () => (isCustomScrollingRef.current = true),\n initialScrollWidth: scrollElement?.firstElementChild?.scrollWidth || 0,\n scrollAnimationDuration,\n textDirection,\n }),\n );\n if (animationQueue.current.length === 1) {\n animationQueue.current[0]();\n }\n },\n [scrollerRef, scrollAnimationDuration, textDirection, setCanScrollEnd],\n );\n\n const scrollToLeft = React.useCallback(() => {\n const getScrollPosition =\n getScrollToLeft ?? ((i: number) => i - scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToLeft, scrollTo, scrollerRef]);\n\n const scrollToRight = React.useCallback(() => {\n const getScrollPosition =\n getScrollToRight ?? ((i: number) => i + scrollerRef.current!.offsetWidth);\n scrollTo(getScrollPosition);\n }, [getScrollToRight, scrollTo, scrollerRef]);\n\n const calculateArrowsVisibility = React.useCallback(() => {\n if (showArrows && hasPointer && scrollerRef.current && !isCustomScrollingRef.current) {\n const scrollElement = scrollerRef.current;\n\n setCanScrollStart(scrollElement.scrollLeft !== 0);\n setCanScrollEnd(\n Math.abs(roundUpElementScrollLeft(scrollElement)) + scrollElement.offsetWidth <\n scrollElement.scrollWidth,\n );\n }\n }, [showArrows, hasPointer, scrollerRef, setCanScrollStart, setCanScrollEnd]);\n\n const scrollEvent = useEventListener('scroll', calculateArrowsVisibility);\n React.useEffect(\n function addScrollerRefToScrollEvent() {\n if (!scrollerRef.current) {\n return noop;\n }\n\n scrollEvent.add(scrollerRef.current);\n return scrollEvent.remove;\n },\n [scrollEvent, scrollerRef],\n );\n\n React.useEffect(calculateArrowsVisibility, [calculateArrowsVisibility, children]);\n\n /**\n * Прокрутка с помощью любого колеса мыши\n */\n const onwheel = React.useCallback(\n (e: WheelEvent) => {\n scrollerRef.current!.scrollBy({ left: e.deltaX + e.deltaY, behavior: 'auto' });\n e.preventDefault();\n },\n [scrollerRef],\n );\n\n const wheelEvent = useEventListener('wheel', onwheel);\n React.useEffect(\n function addScrollerRefToWheelEvent() {\n if (!scrollerRef.current || !scrollOnAnyWheel) {\n return noop;\n }\n\n wheelEvent.add(scrollerRef.current);\n\n return wheelEvent.remove;\n },\n [wheelEvent, scrollerRef, scrollOnAnyWheel],\n );\n\n return (\n <RootComponent\n {...restProps}\n baseClassName={classNames(\n styles['HorizontalScroll'],\n 'vkuiInternalHorizontalScroll',\n showArrows === 'always' && styles['HorizontalScroll--withConstArrows'],\n )}\n onMouseEnter={calculateArrowsVisibility}\n >\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollLeft && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"left\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowLeft'],\n )}\n onClick={scrollToLeft}\n />\n )}\n {showArrows && (hasPointer || hasPointer === undefined) && canScrollRight && (\n <ScrollArrow\n size={arrowSize}\n offsetY={arrowOffsetY}\n direction=\"right\"\n className={classNames(\n styles['HorizontalScroll__arrow'],\n styles['HorizontalScroll__arrowRight'],\n )}\n onClick={scrollToRight}\n />\n )}\n <div className={styles['HorizontalScroll__in']} ref={scrollerRef}>\n <div className={styles['HorizontalScroll__in-wrapper']}>{children}</div>\n </div>\n </RootComponent>\n );\n};\n"],"names":["HorizontalScroll","now","performance","Date","roundingAwayFromZero","value","Math","ceil","floor","roundUpElementScrollLeft","el","scrollLeft","SCROLL_ONE_FRAME_TIME","doScroll","scrollElement","getScrollPosition","animationQueue","onScrollToEndBorder","onScrollEnd","onScrollStart","initialScrollWidth","scrollAnimationDuration","textDirection","extremeScrollLeft","offsetWidth","startScrollLeft","endScrollLeft","abs","startTime","scroll","time","elapsed","min","easeInOutSine","currentScrollLeft","scrollEnd","max","requestAnimationFrame","shift","length","children","getScrollToLeft","getScrollToRight","showArrows","arrowSize","arrowOffsetY","getRef","scrollOnAnyWheel","restProps","React","useState","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","useDirection","directionRef","setCanScrollStart","setCanScrollEnd","isCustomScrollingRef","useRef","scrollerRef","useExternRef","hasPointer","useAdaptivityHasPointer","scrollTo","useCallback","current","push","firstElementChild","scrollWidth","scrollToLeft","i","scrollToRight","calculateArrowsVisibility","scrollEvent","useEventListener","useEffect","addScrollerRefToScrollEvent","noop","add","remove","onwheel","e","scrollBy","left","deltaX","deltaY","behavior","preventDefault","wheelEvent","addScrollerRefToWheelEvent","RootComponent","baseClassName","classNames","onMouseEnter","undefined","ScrollArrow","size","offsetY","direction","className","onClick","div","ref"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import { HasRef } from '../../types';
2
+ import { HasRef, HasRootRef } from '../../types';
3
3
  import { PanelHeaderProps } from '../PanelHeader/PanelHeader';
4
- export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement> {
4
+ export interface ModalPageHeaderProps extends React.HTMLAttributes<HTMLDivElement>, Omit<PanelHeaderProps, 'fixed' | 'shadow'>, HasRef<HTMLDivElement>, HasRootRef<HTMLDivElement> {
5
5
  }
6
6
  /**
7
7
  * @see https://vkcom.github.io/VKUI/#/ModalPageHeader
8
8
  */
9
- export declare const ModalPageHeader: ({ children, separator, getRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
9
+ export declare const ModalPageHeader: ({ children, separator, getRef, getRootRef, className, typographyProps, ...restProps }: ModalPageHeaderProps) => React.JSX.Element;
10
10
  //# sourceMappingURL=ModalPageHeader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAe,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC1C,MAAM,CAAC,cAAc,CAAC;CAAG;AAE7B;;GAEG;AACH,eAAO,MAAM,eAAe,8EAOzB,oBAAoB,sBAgCtB,CAAC"}
1
+ {"version":3,"file":"ModalPageHeader.d.ts","sourceRoot":"","sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEjD,OAAO,EAAe,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAI3E,MAAM,WAAW,oBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAC1C,MAAM,CAAC,cAAc,CAAC,EACtB,UAAU,CAAC,cAAc,CAAC;CAAG;AAEjC;;GAEG;AACH,eAAO,MAAM,eAAe,0FAQzB,oBAAoB,sBAiCtB,CAAC"}
@@ -15,16 +15,18 @@ var _object_without_properties = require("@swc/helpers/_/_object_without_propert
15
15
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
16
16
  var _vkjs = require("@vkontakte/vkjs");
17
17
  var _useAdaptivityWithJSMediaQueries = require("../../hooks/useAdaptivityWithJSMediaQueries");
18
+ var _useExternRef = require("../../hooks/useExternRef");
18
19
  var _usePlatform = require("../../hooks/usePlatform");
19
20
  var _platform = require("../../lib/platform");
20
21
  var _ModalPageContext = require("../ModalPage/ModalPageContext");
21
22
  var _PanelHeader = require("../PanelHeader/PanelHeader");
22
23
  var _Separator = require("../Separator/Separator");
23
24
  var ModalPageHeader = function(_param) {
24
- var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties._(_param, [
25
+ var children = _param.children, _param_separator = _param.separator, separator = _param_separator === void 0 ? true : _param_separator, getRef = _param.getRef, getRootRef = _param.getRootRef, className = _param.className, typographyProps = _param.typographyProps, restProps = _object_without_properties._(_param, [
25
26
  "children",
26
27
  "separator",
27
28
  "getRef",
29
+ "getRootRef",
28
30
  "className",
29
31
  "typographyProps"
30
32
  ]);
@@ -32,9 +34,10 @@ var ModalPageHeader = function(_param) {
32
34
  var hasSeparator = separator && platform === _platform.Platform.VKCOM;
33
35
  var isDesktop = (0, _useAdaptivityWithJSMediaQueries.useAdaptivityWithJSMediaQueries)().isDesktop;
34
36
  var labelId = _react.useContext(_ModalPageContext.ModalPageContext).labelId;
37
+ var modalPageHeaderRef = (0, _useExternRef.useExternRef)(getRef, getRootRef);
35
38
  return /*#__PURE__*/ _react.createElement("div", {
36
39
  className: (0, _vkjs.classNames)("vkuiModalPageHeader", platform !== _platform.Platform.VKCOM && "vkuiModalPageHeader--withGaps", isDesktop && "vkuiModalPageHeader--desktop"),
37
- ref: getRef
40
+ ref: modalPageHeaderRef
38
41
  }, /*#__PURE__*/ _react.createElement(_PanelHeader.PanelHeader, _object_spread_props._(_object_spread._({
39
42
  className: (0, _vkjs.classNames)("vkuiInternalModalPageHeader__in", className),
40
43
  typographyProps: _object_spread._({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={getRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n typographyProps={{\n Component: 'h2',\n id: labelId,\n ...typographyProps,\n }}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["ModalPageHeader","children","separator","getRef","className","typographyProps","restProps","platform","usePlatform","hasSeparator","Platform","VKCOM","isDesktop","useAdaptivityWithJSMediaQueries","labelId","React","useContext","ModalPageContext","div","classNames","ref","PanelHeader","Component","id","fixed","transparent","Separator","wide"],"mappings":";;;;+BAmBaA;;;eAAAA;;;;;;;+DAnBU;oBACI;+CACqB;2BACpB;wBACH;gCAEQ;2BACa;yBACpB;AAWnB,IAAMA,kBAAkB;QAC7BC,kBAAAA,oCACAC,WAAAA,0CAAY,yBACZC,gBAAAA,QACAC,mBAAAA,WACAC,yBAAAA,iBACGC;QALHL;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAAMC,eAAeP,aAAaK,aAAaG,kBAAQ,CAACC,KAAK;IAC7D,IAAM,AAAEC,YAAcC,IAAAA,gEAA+B,IAA7CD;IACR,IAAM,AAAEE,UAAYC,OAAMC,UAAU,CAACC,kCAAgB,EAA7CH;IAER,qBACE,qBAACI;QACCd,WAAWe,IAAAA,gBAAU,yBAEnBZ,aAAaG,kBAAQ,CAACC,KAAK,qCAC3BC;QAEFQ,KAAKjB;qBAEL,qBAACkB,wBAAW;QACVjB,WAAWe,IAAAA,gBAAU,EAAC,mCAAmCf;QACzDC,iBAAiB;YACfiB,WAAW;YACXC,IAAIT;WACDT;OAEDC;QACJkB,OAAO;QACPtB,WAAW;QACXuB,aAAAA;QAECxB,WAEFQ,8BAAgB,qBAACiB,oBAAS;QAACC,MAAAA;;AAGlC"}
1
+ {"version":3,"sources":["../../../../src/components/ModalPageHeader/ModalPageHeader.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useAdaptivityWithJSMediaQueries } from '../../hooks/useAdaptivityWithJSMediaQueries';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { usePlatform } from '../../hooks/usePlatform';\nimport { Platform } from '../../lib/platform';\nimport { HasRef, HasRootRef } from '../../types';\nimport { ModalPageContext } from '../ModalPage/ModalPageContext';\nimport { PanelHeader, PanelHeaderProps } from '../PanelHeader/PanelHeader';\nimport { Separator } from '../Separator/Separator';\nimport styles from './ModalPageHeader.module.css';\n\nexport interface ModalPageHeaderProps\n extends React.HTMLAttributes<HTMLDivElement>,\n Omit<PanelHeaderProps, 'fixed' | 'shadow'>,\n HasRef<HTMLDivElement>,\n HasRootRef<HTMLDivElement> {}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ModalPageHeader\n */\nexport const ModalPageHeader = ({\n children,\n separator = true,\n getRef, // TODO [>=6]: remove\n getRootRef,\n className,\n typographyProps,\n ...restProps\n}: ModalPageHeaderProps) => {\n const platform = usePlatform();\n const hasSeparator = separator && platform === Platform.VKCOM;\n const { isDesktop } = useAdaptivityWithJSMediaQueries();\n const { labelId } = React.useContext(ModalPageContext);\n const modalPageHeaderRef = useExternRef(getRef, getRootRef);\n\n return (\n <div\n className={classNames(\n styles['ModalPageHeader'],\n platform !== Platform.VKCOM && styles['ModalPageHeader--withGaps'],\n isDesktop && styles['ModalPageHeader--desktop'],\n )}\n ref={modalPageHeaderRef}\n >\n <PanelHeader\n className={classNames('vkuiInternalModalPageHeader__in', className)}\n typographyProps={{\n Component: 'h2',\n id: labelId,\n ...typographyProps,\n }}\n {...restProps}\n fixed={false}\n separator={false}\n transparent\n >\n {children}\n </PanelHeader>\n {hasSeparator && <Separator wide />}\n </div>\n );\n};\n"],"names":["ModalPageHeader","children","separator","getRef","getRootRef","className","typographyProps","restProps","platform","usePlatform","hasSeparator","Platform","VKCOM","isDesktop","useAdaptivityWithJSMediaQueries","labelId","React","useContext","ModalPageContext","modalPageHeaderRef","useExternRef","div","classNames","ref","PanelHeader","Component","id","fixed","transparent","Separator","wide"],"mappings":";;;;+BAqBaA;;;eAAAA;;;;;;;+DArBU;oBACI;+CACqB;4BACnB;2BACD;wBACH;gCAEQ;2BACa;yBACpB;AAYnB,IAAMA,kBAAkB;QAC7BC,kBAAAA,oCACAC,WAAAA,0CAAY,yBACZC,gBAAAA,QACAC,oBAAAA,YACAC,mBAAAA,WACAC,yBAAAA,iBACGC;QANHN;QACAC;QACAC;QACAC;QACAC;QACAC;;IAGA,IAAME,WAAWC,IAAAA,wBAAW;IAC5B,IAAMC,eAAeR,aAAaM,aAAaG,kBAAQ,CAACC,KAAK;IAC7D,IAAM,AAAEC,YAAcC,IAAAA,gEAA+B,IAA7CD;IACR,IAAM,AAAEE,UAAYC,OAAMC,UAAU,CAACC,kCAAgB,EAA7CH;IACR,IAAMI,qBAAqBC,IAAAA,0BAAY,EAACjB,QAAQC;IAEhD,qBACE,qBAACiB;QACChB,WAAWiB,IAAAA,gBAAU,yBAEnBd,aAAaG,kBAAQ,CAACC,KAAK,qCAC3BC;QAEFU,KAAKJ;qBAEL,qBAACK,wBAAW;QACVnB,WAAWiB,IAAAA,gBAAU,EAAC,mCAAmCjB;QACzDC,iBAAiB;YACfmB,WAAW;YACXC,IAAIX;WACDT;OAEDC;QACJoB,OAAO;QACPzB,WAAW;QACX0B,aAAAA;QAEC3B,WAEFS,8BAAgB,qBAACmB,oBAAS;QAACC,MAAAA;;AAGlC"}
@@ -446,7 +446,7 @@ var ModalRootTouchComponent = /*#__PURE__*/ function(_React_Component) {
446
446
  }
447
447
  modalState.translateY = translateY;
448
448
  modalState.translateYCurrent = translateY;
449
- modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;
449
+ modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);
450
450
  modalState.expanded = translateY === 0;
451
451
  modalState.hidden = translateY === 100;
452
452
  if (modalState.hidden) {
@@ -636,6 +636,7 @@ function initPageModal(modalState) {
636
636
  var expandedRange;
637
637
  var collapsedRange;
638
638
  var hiddenRange;
639
+ var hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);
639
640
  if (modalState.expandable) {
640
641
  var _modalState_settlingHeight;
641
642
  translateYFrom = 100 - ((_modalState_settlingHeight = modalState.settlingHeight) !== null && _modalState_settlingHeight !== void 0 ? _modalState_settlingHeight : 0);
@@ -645,15 +646,15 @@ function initPageModal(modalState) {
645
646
  0,
646
647
  shiftHalf
647
648
  ];
648
- collapsedRange = [
649
+ collapsedRange = hasCollapsedState ? [
649
650
  shiftHalf,
650
651
  translateYFrom + visiblePart / 4
651
- ];
652
+ ] : undefined;
652
653
  hiddenRange = [
653
654
  translateYFrom + visiblePart / 4,
654
655
  100
655
656
  ];
656
- collapsed = translateYFrom > 0;
657
+ collapsed = hasCollapsedState && translateYFrom > 0;
657
658
  expanded = translateYFrom <= 0;
658
659
  translateY = translateYFrom;
659
660
  } else {
@@ -668,10 +669,7 @@ function initPageModal(modalState) {
668
669
  translateY,
669
670
  translateY + 25
670
671
  ];
671
- collapsedRange = [
672
- translateY + 25,
673
- translateY + 25
674
- ];
672
+ collapsedRange = undefined;
675
673
  hiddenRange = [
676
674
  translateY + 25,
677
675
  translateY + 100
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = translateY > 0 && translateY < shiftYEndPercent;\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange;\n let hiddenRange: TranslateRange;\n\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = [shiftHalf, translateYFrom + visiblePart / 4];\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = [translateY + 25, translateY + 25];\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","ModalType","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","Platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/components/ModalRoot/ModalRoot.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { clamp } from '../../helpers/math';\nimport { withContext } from '../../hoc/withContext';\nimport { withPlatform } from '../../hoc/withPlatform';\nimport { DOMProps, withDOM } from '../../lib/dom';\nimport { getNavId } from '../../lib/getNavId';\nimport { Platform } from '../../lib/platform';\nimport { setTransformStyle } from '../../lib/styles';\nimport { transitionEvent } from '../../lib/supportEvents';\nimport { rubber } from '../../lib/touch';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { ConfigProviderContext } from '../ConfigProvider/ConfigProviderContext';\nimport { FocusTrap } from '../FocusTrap/FocusTrap';\nimport { Touch, TouchEvent } from '../Touch/Touch';\nimport TouchRootContext from '../Touch/TouchContext';\nimport { ModalRootContext, ModalRootContextInterface } from './ModalRootContext';\nimport { MODAL_PAGE_DEFAULT_PERCENT_HEIGHT } from './constants';\nimport { ModalRootWithDOMProps, ModalsStateEntry, ModalType, TranslateRange } from './types';\nimport { ModalTransitionProps, withModalManager } from './useModalManager';\nimport styles from './ModalRoot.module.css';\n\nconst warn = warnOnce('ModalRoot');\n\nfunction numberInRange(number: number, range: TranslateRange | undefined) {\n if (!range) {\n return false;\n }\n return number >= range[0] && number <= range[1];\n}\n\nfunction rangeTranslate(number: number) {\n return clamp(number, 0, 98);\n}\n\ninterface ModalRootState {\n touchDown?: boolean;\n dragging?: boolean;\n modalOpenedLog: string[];\n}\n\nclass ModalRootTouchComponent extends React.Component<\n ModalRootWithDOMProps & DOMProps & ModalTransitionProps,\n ModalRootState\n> {\n constructor(props: ModalRootWithDOMProps & ModalTransitionProps) {\n super(props);\n this.state = {\n touchDown: false,\n dragging: false,\n modalOpenedLog: [],\n };\n\n this.maskElementRef = React.createRef();\n\n this.modalRootContext = {\n updateModalHeight: this.updateModalHeight,\n registerModal: ({ id, ...data }) => Object.assign(this.props.getModalState(id) ?? {}, data),\n onClose: () => this.props.onExit(),\n isInsideModal: true,\n };\n\n this.frameIds = {};\n }\n\n private documentScrolling = false;\n private readonly maskElementRef: React.RefObject<HTMLDivElement>;\n private readonly viewportRef = React.createRef<HTMLDivElement>();\n private maskAnimationFrame: number | undefined = undefined;\n private readonly modalRootContext: ModalRootContextInterface;\n private readonly frameIds: {\n [index: string]: number;\n };\n private restoreFocusTo: HTMLElement | undefined | null = undefined;\n\n get timeout(): number {\n return this.props.platform === Platform.IOS ? 400 : 320;\n }\n\n get document(): Document {\n return this.props.document as Document;\n }\n\n get window(): Window {\n return this.props.window as Window;\n }\n\n getModals() {\n return React.Children.toArray(this.props.children) as React.ReactElement[];\n }\n\n componentDidMount() {\n // Отслеживаем изменение размеров viewport\n this.window?.addEventListener('resize', this.updateModalHeight, false);\n }\n\n componentWillUnmount() {\n this.toggleDocumentScrolling(true);\n this.window.removeEventListener('resize', this.updateModalHeight, false);\n }\n\n componentDidUpdate(prevProps: ModalRootWithDOMProps & ModalTransitionProps) {\n // transition phase 2: animate exiting modal\n if (this.props.exitingModal && this.props.exitingModal !== prevProps.exitingModal) {\n this.closeModal(this.props.exitingModal);\n }\n\n // transition phase 3: animate entering modal\n if (this.props.enteringModal && this.props.enteringModal !== prevProps.enteringModal) {\n const { enteringModal } = this.props;\n const enteringState = this.props.getModalState(enteringModal);\n this.props.onEnter();\n this.waitTransitionFinish(enteringState, () => {\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = '';\n }\n this.props.onEntered(enteringModal);\n });\n\n if (enteringState?.innerElement) {\n enteringState.innerElement.style.transitionDelay = this.props.delayEnter\n ? `${this.timeout}ms`\n : '';\n this.animateTranslate(enteringState, enteringState.translateY);\n this.setMaskOpacity(enteringState, 1);\n }\n }\n\n // focus restoration\n if (this.props.activeModal && !prevProps.activeModal) {\n this.restoreFocusTo = this.document.activeElement as HTMLElement;\n }\n if (!this.props.activeModal && !this.props.exitingModal && this.restoreFocusTo) {\n this.restoreFocusTo.focus();\n this.restoreFocusTo = null;\n }\n\n this.toggleDocumentScrolling(!this.props.activeModal && !this.props.exitingModal);\n }\n\n /* Отключает скролл документа */\n toggleDocumentScrolling(enabled: boolean) {\n if (this.documentScrolling === enabled) {\n return;\n }\n this.documentScrolling = enabled;\n\n if (enabled) {\n // Здесь нужен последний аргумент с такими же параметрами, потому что\n // некоторые браузеры на странных вендорах типа Meizu не удаляют обработчик.\n // https://github.com/VKCOM/VKUI/issues/444\n this.window.removeEventListener('touchmove', this.preventTouch, {\n // @ts-expect-error: TS2769 В интерфейсе EventListenerOptions нет поля passive\n passive: false,\n });\n } else {\n this.window.addEventListener('touchmove', this.preventTouch, {\n passive: false,\n });\n }\n }\n\n preventTouch = (event: any) => {\n if (!event) {\n return false;\n }\n while (event.originalEvent) {\n event = event.originalEvent;\n }\n if (event.preventDefault) {\n event.preventDefault();\n }\n return false;\n };\n\n checkPageContentHeight() {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE && modalState?.modalElement) {\n const prevModalState = { ...modalState };\n initPageModal(modalState);\n const currentModalState = { ...modalState };\n\n let needAnimate = false;\n\n if (prevModalState.expandable === currentModalState.expandable) {\n if (prevModalState.translateYFrom !== currentModalState.translateYFrom) {\n needAnimate = true;\n }\n } else {\n needAnimate = true;\n }\n\n if (needAnimate) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n }\n }\n\n updateModalHeight = () => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState && modalState.type === ModalType.PAGE) {\n if (this.props.enteringModal) {\n this.waitTransitionFinish(modalState, () => {\n requestAnimationFrame(() => this.checkPageContentHeight());\n });\n } else {\n requestAnimationFrame(() => this.checkPageContentHeight());\n }\n }\n };\n\n closeModal(id: string) {\n // Сбрасываем состояния, которые могут помешать закрытию модального окна\n this.setState({ touchDown: false });\n\n const prevModalState = this.props.getModalState(id);\n\n if (!prevModalState) {\n id && warn(`closeActiveModal: модальное окно (страница) ${id} не существует`, 'error');\n return;\n }\n if (!this.state.modalOpenedLog.length) {\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, id],\n }));\n }\n const nextModalState = this.props.getModalState(this.props.activeModal);\n const nextIsPage = !!nextModalState && nextModalState.type === ModalType.PAGE;\n\n const prevIsPage = !!prevModalState && prevModalState.type === ModalType.PAGE;\n this.waitTransitionFinish(prevModalState, () => this.props.onExited(id));\n const exitTranslate =\n prevIsPage &&\n nextIsPage &&\n (prevModalState.translateY ?? 0) <= (nextModalState?.translateYFrom ?? 0) &&\n !this.props.isBack\n ? (nextModalState?.translateYFrom ?? 0) + 10\n : 100;\n this.animateTranslate(prevModalState, exitTranslate);\n\n if (!nextModalState) {\n // NOTE: was only for clean exit\n this.setMaskOpacity(prevModalState, 0);\n this.setState({ modalOpenedLog: [] });\n prevModalState.translateY = undefined;\n } else if (nextModalState.id && !this.state.modalOpenedLog.includes(nextModalState.id)) {\n nextModalState.translateY = undefined;\n this.setState((prevState) => ({\n modalOpenedLog: [...prevState.modalOpenedLog, nextModalState.id!],\n }));\n }\n }\n\n onTouchMove = (e: TouchEvent) => {\n if (this.props.exitingModal) {\n return;\n }\n const modalState = this.props.getModalState(this.props.activeModal);\n if (!modalState) {\n return;\n }\n\n if (modalState.type === ModalType.PAGE) {\n return this.onPageTouchMove(e, modalState);\n }\n\n if (modalState.type === ModalType.CARD) {\n return this.onCardTouchMove(e, modalState);\n }\n };\n\n onPageTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { shiftY, originalEvent } = event;\n const target = originalEvent.target as HTMLElement;\n\n if (!event.isY) {\n if (this.viewportRef.current?.contains(target)) {\n originalEvent.preventDefault();\n }\n return;\n }\n\n if (!modalState.innerElement?.contains(target)) {\n return originalEvent.preventDefault();\n }\n\n originalEvent.stopPropagation();\n\n const { expandable, contentScrolled, collapsed, expanded } = modalState;\n\n if (!this.state.touchDown) {\n modalState.touchStartContentScrollTop = modalState.contentElement?.scrollTop ?? 0;\n this.setState({ touchDown: true });\n }\n\n if (contentScrolled) {\n return;\n }\n\n if (modalState.touchMovePositive === null) {\n modalState.touchMovePositive = shiftY > 0;\n }\n\n if (\n !modalState.expandable ||\n collapsed ||\n (expanded && modalState.touchMovePositive && modalState.touchStartContentScrollTop === 0) ||\n modalState.headerElement?.contains(target)\n ) {\n originalEvent.preventDefault();\n\n if ((!expandable && shiftY < 0) || !this.window) {\n return;\n }\n\n !this.state.dragging && this.setState({ dragging: true });\n\n const shiftYPercent = (shiftY / this.window.innerHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 0.8, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = rangeTranslate((modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onCardTouchMove(event: TouchEvent, modalState: ModalsStateEntry) {\n const { originalEvent, shiftY } = event;\n const target = originalEvent.target as HTMLElement;\n if (modalState.innerElement?.contains(target)) {\n if (!this.state.touchDown) {\n this.setState({ touchDown: true, dragging: true });\n }\n\n const shiftYPercent = (shiftY / modalState.innerElement.offsetHeight) * 100;\n const shiftYCurrent = rubber(shiftYPercent, 72, 1.2, this.props.platform !== Platform.IOS);\n\n modalState.touchShiftYPercent = shiftYPercent;\n modalState.translateYCurrent = Math.max(0, (modalState.translateY ?? 0) + shiftYCurrent);\n\n this.animateTranslate(modalState, modalState.translateYCurrent);\n this.setMaskOpacity(modalState);\n }\n }\n\n onTouchEnd = (e: TouchEvent) => {\n const modalState = this.props.getModalState(this.props.activeModal);\n\n if (modalState?.type === ModalType.PAGE) {\n return this.onPageTouchEnd(e, modalState);\n }\n\n if (modalState?.type === ModalType.CARD) {\n return this.onCardTouchEnd(e, modalState);\n }\n };\n\n onPageTouchEnd(event: TouchEvent, modalState: ModalsStateEntry) {\n const { startY, shiftY } = event;\n\n modalState.contentScrolled = false;\n modalState.touchMovePositive = null;\n\n let setStateCallback;\n\n if (this.state.dragging && this.window) {\n const shiftYEndPercent = ((startY + shiftY) / this.window.innerHeight) * 100;\n\n let translateY = modalState.translateYCurrent ?? 0;\n const expectTranslateY =\n (translateY / event.duration) *\n 240 *\n 0.6 *\n ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = rangeTranslate(translateY + expectTranslateY);\n\n if (modalState.settlingHeight !== 100) {\n if (numberInRange(translateY, modalState.expandedRange)) {\n translateY = modalState.expandedRange?.[0] ?? 0;\n } else if (numberInRange(translateY, modalState.collapsedRange)) {\n translateY = modalState.translateYFrom ?? 0;\n } else if (numberInRange(translateY, modalState.hiddenRange)) {\n translateY = 100;\n } else {\n translateY = modalState.translateYFrom ?? 0;\n }\n } else {\n if (numberInRange(translateY, [0, 25])) {\n translateY = 0;\n } else {\n translateY = 100;\n }\n }\n\n if (translateY !== 100 && shiftYEndPercent >= 75) {\n translateY = 100;\n }\n\n modalState.translateY = translateY;\n modalState.translateYCurrent = translateY;\n modalState.collapsed = numberInRange(translateY, modalState.collapsedRange);\n modalState.expanded = translateY === 0;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onCardTouchEnd({ duration }: TouchEvent, modalState: ModalsStateEntry) {\n let setStateCallback;\n\n if (this.state.dragging) {\n let translateY = modalState.translateYCurrent ?? 0;\n\n const expectTranslateY =\n (translateY / duration) * 240 * 0.6 * ((modalState.touchShiftYPercent ?? 0) < 0 ? -1 : 1);\n translateY = Math.max(0, translateY + expectTranslateY);\n\n if (translateY >= 30) {\n translateY = 100;\n } else {\n translateY = 0;\n }\n\n modalState.translateY = translateY;\n modalState.hidden = translateY === 100;\n\n if (modalState.hidden) {\n this.props.onExit();\n }\n\n setStateCallback = () => {\n if (!modalState.hidden) {\n this.animateTranslate(modalState, modalState.translateY);\n }\n\n this.setMaskOpacity(modalState);\n };\n }\n\n this.setState(\n {\n touchDown: false,\n dragging: false,\n },\n setStateCallback,\n );\n }\n\n onScroll = (e: React.SyntheticEvent) => {\n const activeModal = this.props.activeModal;\n\n const target = e.target as HTMLElement;\n\n if (!activeModal) {\n return;\n }\n const modalState = this.props.getModalState(activeModal);\n if (modalState?.type === ModalType.PAGE && modalState?.contentElement?.contains(target)) {\n modalState.contentScrolled = true;\n\n if (modalState.contentScrollStopTimeout) {\n clearTimeout(modalState.contentScrollStopTimeout);\n }\n\n modalState.contentScrollStopTimeout = setTimeout(() => {\n if (modalState.contentScrolled) {\n modalState.contentScrolled = false;\n }\n }, 250);\n }\n };\n\n waitTransitionFinish(modalState: ModalsStateEntry | undefined, eventHandler: () => void) {\n if (transitionEvent.supported) {\n const onceHandler = () => {\n modalState?.innerElement?.removeEventListener(transitionEvent.name as string, onceHandler);\n eventHandler();\n };\n\n modalState?.innerElement?.addEventListener(transitionEvent.name as string, onceHandler);\n } else {\n setTimeout(eventHandler, this.timeout);\n }\n }\n\n /**\n * Анимирует сдвиг модалки\n *\n * @param {ModalsStateEntry} modalState\n * @param {number} percent Процент сдвига: 0 – полностью открыта, 100 – полностью закрыта\n */\n animateTranslate(modalState: ModalsStateEntry, percent: number | undefined) {\n const frameId = `animateTranslateFrame${modalState.id}`;\n\n cancelAnimationFrame(this.frameIds[frameId]);\n\n this.frameIds[frameId] = requestAnimationFrame(() => {\n setTransformStyle(modalState.innerElement, `translate3d(0, ${percent}%, 0)`);\n });\n }\n\n /* Устанавливает прозрачность для полупрозрачной подложки */\n setMaskOpacity(modalState: ModalsStateEntry, forceOpacity: number | null = null) {\n if (forceOpacity === null && this.props.history?.[0] !== modalState.id) {\n return;\n }\n if (this.maskAnimationFrame) {\n cancelAnimationFrame(this.maskAnimationFrame);\n }\n this.maskAnimationFrame = requestAnimationFrame(() => {\n if (this.maskElementRef.current) {\n const { translateY = 0, translateYCurrent = 0 } = modalState;\n\n const opacity =\n forceOpacity === null\n ? 1 - (translateYCurrent - translateY) / (100 - translateY) || 0\n : forceOpacity;\n this.maskElementRef.current.style.opacity = clamp(opacity, 0, 100).toString();\n this.maskElementRef.current.style.transitionDelay =\n opacity && this.props.delayEnter ? `${this.timeout}ms` : '';\n }\n });\n }\n\n render() {\n const { activeModal, exitingModal, enteringModal } = this.props;\n const { touchDown, dragging } = this.state;\n\n if (!activeModal && !exitingModal) {\n return null;\n }\n\n return (\n <TouchRootContext.Provider value={true}>\n <ModalRootContext.Provider value={this.modalRootContext}>\n <Touch\n className={classNames(\n styles['ModalRoot'],\n this.props.configProvider?.hasCustomPanelHeaderAfter &&\n styles['ModalRoot--hasCustomPanelHeaderAfterSlot'],\n touchDown &&\n classNames(styles['ModalRoot--touched'], 'vkuiInternalModalRoot--touched'),\n !!(enteringModal || exitingModal) &&\n classNames(styles['ModalRoot--switching'], 'vkuiInternalModalRoot--switching'),\n )}\n onMove={this.onTouchMove}\n onEnd={this.onTouchEnd}\n onScroll={this.onScroll}\n >\n <div\n className={styles['ModalRoot__mask']}\n onClick={this.props.onExit}\n ref={this.maskElementRef}\n />\n <div className={styles['ModalRoot__viewport']} ref={this.viewportRef}>\n {this.getModals().map((Modal) => {\n const modalId = getNavId(Modal.props, warn);\n const _modalState = this.props.getModalState(modalId);\n if ((modalId !== activeModal && modalId !== exitingModal) || !_modalState) {\n return null;\n }\n const modalState = { ..._modalState };\n\n const isPage = modalState.type === ModalType.PAGE;\n const key = `modal-${modalId}`;\n\n return (\n <FocusTrap\n key={key}\n getRootRef={(e) => {\n const modalState = this.props.getModalState(modalId);\n if (modalState) {\n modalState.modalElement = e;\n }\n }}\n onClose={this.props.onExit}\n timeout={this.timeout}\n className={classNames(\n styles['ModalRoot__modal'],\n\n dragging && 'vkuiInternalModalRoot__modal--dragging',\n\n isPage && modalState.expandable && 'vkuiInternalModalRoot__modal--expandable',\n isPage && modalState.collapsed && 'vkuiInternalModalRoot__modal--collapsed',\n )}\n restoreFocus={false}\n >\n {Modal}\n </FocusTrap>\n );\n })}\n </div>\n </Touch>\n </ModalRootContext.Provider>\n </TouchRootContext.Provider>\n );\n }\n}\n\nexport const ModalRootTouch = withContext(\n withPlatform(\n withDOM<ModalRootWithDOMProps>(withModalManager(initModal)(ModalRootTouchComponent)),\n ),\n ConfigProviderContext,\n 'configProvider',\n);\n\n/**\n * Инициализирует модалку перед анимацией открытия\n */\nfunction initModal(modalState: ModalsStateEntry) {\n switch (modalState.type) {\n case ModalType.PAGE:\n modalState.settlingHeight = modalState.settlingHeight || MODAL_PAGE_DEFAULT_PERCENT_HEIGHT;\n return initPageModal(modalState);\n case ModalType.CARD:\n return initCardModal(modalState);\n default:\n process.env.NODE_ENV === 'development' &&\n warn(`initActiveModal: modalState.type=\"${modalState.type}\" не поддерживается`, 'error');\n }\n}\n\nfunction initPageModal(modalState: ModalsStateEntry) {\n const { contentElement, bottomInset } = modalState;\n const contentElementHeight = (contentElement?.firstElementChild as HTMLElement).scrollHeight;\n const bottomInsetHeight = bottomInset?.offsetHeight || 0;\n const contentHeight = contentElementHeight + bottomInsetHeight;\n let prevTranslateY = modalState.translateY;\n\n modalState.expandable =\n contentHeight > (contentElement?.clientHeight ?? 0) ||\n modalState.settlingHeight === 100 ||\n modalState.expanded;\n\n let collapsed = false;\n let expanded = false;\n let translateYFrom;\n let translateY;\n let expandedRange: TranslateRange;\n let collapsedRange: TranslateRange | undefined;\n let hiddenRange: TranslateRange;\n\n const hasCollapsedState = Boolean(modalState.expandable && modalState.settlingHeight !== 100);\n if (modalState.expandable) {\n translateYFrom = 100 - (modalState.settlingHeight ?? 0);\n\n const shiftHalf = translateYFrom / 2;\n const visiblePart = 100 - translateYFrom;\n\n expandedRange = [0, shiftHalf];\n collapsedRange = hasCollapsedState ? [shiftHalf, translateYFrom + visiblePart / 4] : undefined;\n hiddenRange = [translateYFrom + visiblePart / 4, 100];\n\n collapsed = hasCollapsedState && translateYFrom > 0;\n expanded = translateYFrom <= 0;\n translateY = translateYFrom;\n } else {\n const headerHeight = modalState.headerElement?.offsetHeight ?? 0;\n const height = contentHeight + headerHeight;\n\n translateYFrom =\n 100 - (height / (modalState.innerElement?.parentElement?.offsetHeight ?? 0)) * 100;\n translateY = translateYFrom;\n\n expandedRange = [translateY, translateY + 25];\n collapsedRange = undefined;\n hiddenRange = [translateY + 25, translateY + 100];\n }\n\n // Если модалка может открываться на весь экран, и новый сдвиг больше предыдущего, то откроем её на весь экран\n if (\n (modalState.expandable && translateY > (prevTranslateY ?? 100)) ||\n modalState.settlingHeight === 100\n ) {\n translateY = 0;\n }\n\n // Если модалка уже раскрыта обновляем состояния\n if (translateY === 0) {\n expanded = true;\n collapsed = false;\n }\n\n modalState.expandedRange = expandedRange;\n modalState.collapsedRange = collapsedRange;\n modalState.hiddenRange = hiddenRange;\n modalState.translateY = translateY;\n modalState.translateYFrom = translateYFrom;\n modalState.collapsed = collapsed;\n modalState.expanded = expanded;\n}\n\nfunction initCardModal(modalState: ModalsStateEntry) {\n modalState.translateY = 0;\n}\n"],"names":["ModalRootTouch","warn","warnOnce","numberInRange","number","range","rangeTranslate","clamp","ModalRootTouchComponent","props","documentScrolling","maskElementRef","viewportRef","React","createRef","maskAnimationFrame","undefined","modalRootContext","frameIds","restoreFocusTo","preventTouch","event","originalEvent","preventDefault","updateModalHeight","modalState","getModalState","activeModal","type","ModalType","PAGE","enteringModal","waitTransitionFinish","requestAnimationFrame","checkPageContentHeight","onTouchMove","e","exitingModal","onPageTouchMove","CARD","onCardTouchMove","onTouchEnd","onPageTouchEnd","onCardTouchEnd","onScroll","target","contentElement","contains","contentScrolled","contentScrollStopTimeout","clearTimeout","setTimeout","state","touchDown","dragging","modalOpenedLog","registerModal","id","data","Object","assign","onClose","onExit","isInsideModal","timeout","platform","Platform","IOS","document","window","getModals","Children","toArray","children","componentDidMount","addEventListener","componentWillUnmount","toggleDocumentScrolling","removeEventListener","componentDidUpdate","prevProps","closeModal","enteringState","onEnter","innerElement","style","transitionDelay","onEntered","delayEnter","animateTranslate","translateY","setMaskOpacity","activeElement","focus","enabled","passive","modalElement","prevModalState","initPageModal","currentModalState","needAnimate","expandable","translateYFrom","setState","length","prevState","nextModalState","nextIsPage","prevIsPage","onExited","exitTranslate","isBack","includes","shiftY","isY","current","stopPropagation","collapsed","expanded","touchStartContentScrollTop","scrollTop","touchMovePositive","headerElement","shiftYPercent","innerHeight","shiftYCurrent","rubber","touchShiftYPercent","translateYCurrent","offsetHeight","Math","max","startY","setStateCallback","shiftYEndPercent","expectTranslateY","duration","settlingHeight","expandedRange","collapsedRange","hiddenRange","hidden","eventHandler","transitionEvent","supported","onceHandler","name","percent","frameId","cancelAnimationFrame","setTransformStyle","forceOpacity","history","opacity","toString","render","TouchRootContext","Provider","value","ModalRootContext","Touch","className","classNames","configProvider","hasCustomPanelHeaderAfter","onMove","onEnd","div","onClick","ref","map","Modal","modalId","getNavId","_modalState","isPage","key","FocusTrap","getRootRef","restoreFocus","Component","withContext","withPlatform","withDOM","withModalManager","initModal","ConfigProviderContext","MODAL_PAGE_DEFAULT_PERCENT_HEIGHT","initCardModal","process","env","NODE_ENV","bottomInset","contentElementHeight","firstElementChild","scrollHeight","bottomInsetHeight","contentHeight","prevTranslateY","clientHeight","hasCollapsedState","Boolean","shiftHalf","visiblePart","headerHeight","height","parentElement"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as React from 'react';
2
- import { HasRef } from '../../types';
3
- export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRef<HTMLInputElement> {
2
+ import { HasRef, HasRootRef } from '../../types';
3
+ export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTMLInputElement>, HasRootRef<HTMLInputElement>, HasRef<HTMLInputElement> {
4
4
  }
5
5
  /**
6
6
  * @deprecated v5.4.0
@@ -8,5 +8,5 @@ export interface VisuallyHiddenInputProps extends React.InputHTMLAttributes<HTML
8
8
  * Компонент устарел и будет удален в v6. Используйте
9
9
  * `<VisuallyHidden Component="input" />`
10
10
  */
11
- export declare const VisuallyHiddenInput: ({ getRef, className, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
11
+ export declare const VisuallyHiddenInput: ({ getRef, className, getRootRef, ...restProps }: VisuallyHiddenInputProps) => React.JSX.Element;
12
12
  //# sourceMappingURL=VisuallyHiddenInput.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAIrC,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,wCAI7B,wBAAwB,sBAc1B,CAAC"}
1
+ {"version":3,"file":"VisuallyHiddenInput.d.ts","sourceRoot":"","sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIjD,MAAM,WAAW,wBACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EACjD,UAAU,CAAC,gBAAgB,CAAC,EAC5B,MAAM,CAAC,gBAAgB,CAAC;CAAG;AAC/B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,oDAK7B,wBAAwB,sBAe1B,CAAC"}
@@ -14,19 +14,22 @@ var _object_spread_props = require("@swc/helpers/_/_object_spread_props");
14
14
  var _object_without_properties = require("@swc/helpers/_/_object_without_properties");
15
15
  var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
16
16
  var _vkjs = require("@vkontakte/vkjs");
17
+ var _useExternRef = require("../../hooks/useExternRef");
17
18
  var _warnOnce = require("../../lib/warnOnce");
18
19
  var warn = (0, _warnOnce.warnOnce)("VisuallyHiddenInput");
19
20
  var VisuallyHiddenInput = function(_param) {
20
- var getRef = _param.getRef, className = _param.className, restProps = _object_without_properties._(_param, [
21
+ var getRef = _param.getRef, className = _param.className, getRootRef = _param.getRootRef, restProps = _object_without_properties._(_param, [
21
22
  "getRef",
22
- "className"
23
+ "className",
24
+ "getRootRef"
23
25
  ]);
26
+ var visuallyHiddenInputRef = (0, _useExternRef.useExternRef)(getRef, getRootRef);
24
27
  if (process.env.NODE_ENV === "development") {
25
28
  warn("Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden");
26
29
  }
27
30
  return /*#__PURE__*/ _react.createElement("input", _object_spread_props._(_object_spread._({}, restProps), {
28
31
  className: (0, _vkjs.classNames)("vkuiVisuallyHiddenInput", className),
29
- ref: getRef
32
+ ref: visuallyHiddenInputRef
30
33
  }));
31
34
  };
32
35
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef } from '../../types';\nimport styles from './VisuallyHiddenInput.module.css';\n\nconst warn = warnOnce('VisuallyHiddenInput');\nexport interface VisuallyHiddenInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRef<HTMLInputElement> {}\n/**\n * @deprecated v5.4.0\n *\n * Компонент устарел и будет удален в v6. Используйте\n * `<VisuallyHidden Component=\"input\" />`\n */\nexport const VisuallyHiddenInput = ({\n getRef,\n className,\n ...restProps\n}: VisuallyHiddenInputProps) => {\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden',\n );\n }\n\n return (\n <input\n {...restProps}\n className={classNames(styles['VisuallyHiddenInput'], className)}\n ref={getRef}\n />\n );\n};\n"],"names":["VisuallyHiddenInput","warn","warnOnce","getRef","className","restProps","process","env","NODE_ENV","input","classNames","ref"],"mappings":";;;;+BAgBaA;;;eAAAA;;;;;;;+DAhBU;oBACI;wBACF;AAIzB,IAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAUf,IAAMF,sBAAsB;QACjCG,gBAAAA,QACAC,mBAAAA,WACGC;QAFHF;QACAC;;IAGA,IAAIE,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CP,KACE;IAEJ;IAEA,qBACE,qBAACQ,qDACKJ;QACJD,WAAWM,IAAAA,gBAAU,6BAAgCN;QACrDO,KAAKR;;AAGX"}
1
+ {"version":3,"sources":["../../../../src/components/VisuallyHiddenInput/VisuallyHiddenInput.tsx"],"sourcesContent":["import * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { warnOnce } from '../../lib/warnOnce';\nimport { HasRef, HasRootRef } from '../../types';\nimport styles from './VisuallyHiddenInput.module.css';\n\nconst warn = warnOnce('VisuallyHiddenInput');\nexport interface VisuallyHiddenInputProps\n extends React.InputHTMLAttributes<HTMLInputElement>,\n HasRootRef<HTMLInputElement>,\n HasRef<HTMLInputElement> {}\n/**\n * @deprecated v5.4.0\n *\n * Компонент устарел и будет удален в v6. Используйте\n * `<VisuallyHidden Component=\"input\" />`\n */\nexport const VisuallyHiddenInput = ({\n getRef,\n className,\n getRootRef,\n ...restProps\n}: VisuallyHiddenInputProps) => {\n const visuallyHiddenInputRef = useExternRef(getRef, getRootRef);\n if (process.env.NODE_ENV === 'development') {\n warn(\n 'Компонент устарел и будет удален в v6. Используйте https://vkcom.github.io/VKUI/#/VisuallyHidden',\n );\n }\n\n return (\n <input\n {...restProps}\n className={classNames(styles['VisuallyHiddenInput'], className)}\n ref={visuallyHiddenInputRef}\n />\n );\n};\n"],"names":["VisuallyHiddenInput","warn","warnOnce","getRef","className","getRootRef","restProps","visuallyHiddenInputRef","useExternRef","process","env","NODE_ENV","input","classNames","ref"],"mappings":";;;;+BAkBaA;;;eAAAA;;;;;;;+DAlBU;oBACI;4BACE;wBACJ;AAIzB,IAAMC,OAAOC,IAAAA,kBAAQ,EAAC;AAWf,IAAMF,sBAAsB;QACjCG,gBAAAA,QACAC,mBAAAA,WACAC,oBAAAA,YACGC;QAHHH;QACAC;QACAC;;IAGA,IAAME,yBAAyBC,IAAAA,0BAAY,EAACL,QAAQE;IACpD,IAAII,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1CV,KACE;IAEJ;IAEA,qBACE,qBAACW,qDACKN;QACJF,WAAWS,IAAAA,gBAAU,6BAAgCT;QACrDU,KAAKP;;AAGX"}
@@ -0,0 +1,39 @@
1
+ import * as React from 'react';
2
+ type Direction = 'ltr' | 'rtl';
3
+ type WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';
4
+ /**
5
+ * Определяет направление текста элемента.
6
+ *
7
+ * ## Ограничения
8
+ *
9
+ * - Не следит за изменением направлением.
10
+ * - Определяется только на второй рендер.
11
+ *
12
+ * ## Пример
13
+ *
14
+ * ```jsx
15
+ * import { strict as assert } from 'node:assert';
16
+ *
17
+ * const Component = () => {
18
+ * const [ref, direction, writingMode] = useDirection();
19
+ *
20
+ * React.useEffect(()=>{
21
+ * if (!direction || !writingMode) {
22
+ * return
23
+ * }
24
+ *
25
+ * assert.equal(direction, 'ltr')
26
+ * assert.equal(writingMode, 'vertical-rl')
27
+ * }, [direction, writingMode])
28
+ *
29
+ * return <div ref={ref} style={{writingMode: 'vertical-rl'}}>我家没有电脑。</div>
30
+ * }
31
+ * ```
32
+ */
33
+ export declare function useDirection<T extends HTMLElement>(): [
34
+ React.RefObject<T>,
35
+ Direction | undefined,
36
+ WritingMode | undefined
37
+ ];
38
+ export {};
39
+ //# sourceMappingURL=useDirection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDirection.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDirection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/B,KAAK,WAAW,GAAG,eAAe,GAAG,aAAa,GAAG,aAAa,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,WAAW,KAAK;IACrD,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAClB,SAAS,GAAG,SAAS;IACrB,WAAW,GAAG,SAAS;CACxB,CAsBA"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useDirection", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useDirection;
9
+ }
10
+ });
11
+ var _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
12
+ var _sliced_to_array = require("@swc/helpers/_/_sliced_to_array");
13
+ var _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
14
+ var _dom = require("../lib/dom");
15
+ var _useIsomorphicLayoutEffect = require("../lib/useIsomorphicLayoutEffect");
16
+ function useDirection() {
17
+ var ref = _react.useRef(null);
18
+ var _React_useState = _sliced_to_array._(_react.useState(undefined), 2), direction = _React_useState[0], setDirection = _React_useState[1];
19
+ var _React_useState1 = _sliced_to_array._(_react.useState(undefined), 2), writingMode = _React_useState1[0], setWritingMode = _React_useState1[1];
20
+ var window = (0, _dom.useDOM)().window;
21
+ var update = function() {
22
+ if (!window || !ref.current) {
23
+ return;
24
+ }
25
+ var styleDeclaration = window.getComputedStyle(ref.current);
26
+ setDirection(styleDeclaration.direction);
27
+ setWritingMode(styleDeclaration.writingMode);
28
+ };
29
+ (0, _useIsomorphicLayoutEffect.useIsomorphicLayoutEffect)(update, [
30
+ window
31
+ ]);
32
+ return [
33
+ ref,
34
+ direction,
35
+ writingMode
36
+ ];
37
+ }
38
+
39
+ //# sourceMappingURL=useDirection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/hooks/useDirection.ts"],"sourcesContent":["import * as React from 'react';\nimport { useDOM } from '../lib/dom';\nimport { useIsomorphicLayoutEffect } from '../lib/useIsomorphicLayoutEffect';\n\ntype Direction = 'ltr' | 'rtl';\ntype WritingMode = 'horizontal-tb' | 'vertical-rl' | 'vertical-lr';\n\n/**\n * Определяет направление текста элемента.\n *\n * ## Ограничения\n *\n * - Не следит за изменением направлением.\n * - Определяется только на второй рендер.\n *\n * ## Пример\n *\n * ```jsx\n * import { strict as assert } from 'node:assert';\n *\n * const Component = () => {\n * const [ref, direction, writingMode] = useDirection();\n *\n * React.useEffect(()=>{\n * if (!direction || !writingMode) {\n * return\n * }\n *\n * assert.equal(direction, 'ltr')\n * assert.equal(writingMode, 'vertical-rl')\n * }, [direction, writingMode])\n *\n * return <div ref={ref} style={{writingMode: 'vertical-rl'}}>我家没有电脑。</div>\n * }\n * ```\n */\nexport function useDirection<T extends HTMLElement>(): [\n React.RefObject<T>,\n Direction | undefined,\n WritingMode | undefined,\n] {\n const ref = React.useRef<T>(null);\n\n const [direction, setDirection] = React.useState<Direction | undefined>(undefined);\n const [writingMode, setWritingMode] = React.useState<WritingMode | undefined>(undefined);\n\n const { window } = useDOM();\n\n const update = () => {\n if (!window || !ref.current) {\n return;\n }\n\n const styleDeclaration = window.getComputedStyle(ref.current);\n\n setDirection(styleDeclaration.direction as Direction);\n setWritingMode(styleDeclaration.writingMode as WritingMode);\n };\n\n useIsomorphicLayoutEffect(update, [window]);\n\n return [ref, direction, writingMode];\n}\n"],"names":["useDirection","ref","React","useRef","useState","undefined","direction","setDirection","writingMode","setWritingMode","window","useDOM","update","current","styleDeclaration","getComputedStyle","useIsomorphicLayoutEffect"],"mappings":";;;;+BAoCgBA;;;eAAAA;;;;;+DApCO;mBACA;yCACmB;AAkCnC,SAASA;IAKd,IAAMC,MAAMC,OAAMC,MAAM,CAAI;IAE5B,IAAkCD,qCAAAA,OAAME,QAAQ,CAAwBC,gBAAjEC,YAA2BJ,oBAAhBK,eAAgBL;IAClC,IAAsCA,sCAAAA,OAAME,QAAQ,CAA0BC,gBAAvEG,cAA+BN,qBAAlBO,iBAAkBP;IAEtC,IAAM,AAAEQ,SAAWC,IAAAA,WAAM,IAAjBD;IAER,IAAME,SAAS;QACb,IAAI,CAACF,UAAU,CAACT,IAAIY,OAAO,EAAE;YAC3B;QACF;QAEA,IAAMC,mBAAmBJ,OAAOK,gBAAgB,CAACd,IAAIY,OAAO;QAE5DN,aAAaO,iBAAiBR,SAAS;QACvCG,eAAeK,iBAAiBN,WAAW;IAC7C;IAEAQ,IAAAA,oDAAyB,EAACJ,QAAQ;QAACF;KAAO;IAE1C,OAAO;QAACT;QAAKK;QAAWE;KAAY;AACtC"}
@@ -1,3 +1,3 @@
1
- import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@floating-ui/react-dom';
1
+ import { autoUpdate as autoUpdateLib, type AutoUpdateOptions, type FloatingElement, type ReferenceType } from '@vkontakte/vkui-floating-ui/react-dom';
2
2
  export declare function autoUpdateFloatingElement(reference: ReferenceType, floating: FloatingElement, update: () => void, options?: Partial<AutoUpdateOptions>): ReturnType<typeof autoUpdateLib>;
3
3
  //# sourceMappingURL=adapters.d.ts.map