@vkontakte/vkui 7.0.0-dev-efd91c.3 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
  2. package/dist/components/ActionSheet/ActionSheet.js +1 -3
  3. package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
  4. package/dist/components/AppRoot/AppRoot.d.ts +1 -1
  5. package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
  6. package/dist/components/AppRoot/AppRoot.js +16 -10
  7. package/dist/components/AppRoot/AppRoot.js.map +1 -1
  8. package/dist/components/AppRoot/AppRootPortal.js +1 -1
  9. package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
  10. package/dist/components/AppRoot/{AppRootStyleContainer.d.ts → AppRootStyleContainer/AppRootStyleContainer.d.ts} +3 -3
  11. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.d.ts.map +1 -0
  12. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js +45 -0
  13. package/dist/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  14. package/dist/components/AppRoot/helpers.d.ts +7 -0
  15. package/dist/components/AppRoot/helpers.d.ts.map +1 -1
  16. package/dist/components/AppRoot/helpers.js +20 -4
  17. package/dist/components/AppRoot/helpers.js.map +1 -1
  18. package/dist/components/Clickable/Clickable.d.ts.map +1 -1
  19. package/dist/components/Clickable/Clickable.js +2 -83
  20. package/dist/components/Clickable/Clickable.js.map +1 -1
  21. package/dist/components/Clickable/RealClickable.d.ts +6 -0
  22. package/dist/components/Clickable/RealClickable.d.ts.map +1 -0
  23. package/dist/components/Clickable/RealClickable.js +90 -0
  24. package/dist/components/Clickable/RealClickable.js.map +1 -0
  25. package/dist/components/HorizontalCell/HorizontalCell.d.ts +6 -1
  26. package/dist/components/HorizontalCell/HorizontalCell.d.ts.map +1 -1
  27. package/dist/components/HorizontalCell/HorizontalCell.js +4 -15
  28. package/dist/components/HorizontalCell/HorizontalCell.js.map +1 -1
  29. package/dist/components/ModalCard/ModalCardInternal.js +1 -1
  30. package/dist/components/ModalCard/ModalCardInternal.js.map +1 -1
  31. package/dist/components/ModalPage/ModalPage.d.ts +1 -1
  32. package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
  33. package/dist/components/ModalPage/ModalPage.js +53 -5
  34. package/dist/components/ModalPage/ModalPage.js.map +1 -1
  35. package/dist/components/ModalPage/ModalPageInternal.d.ts +5 -2
  36. package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -1
  37. package/dist/components/ModalPage/ModalPageInternal.js +5 -4
  38. package/dist/components/ModalPage/ModalPageInternal.js.map +1 -1
  39. package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
  40. package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
  41. package/dist/components/ModalRoot/types.d.ts.map +1 -1
  42. package/dist/components/ModalRoot/types.js.map +1 -1
  43. package/dist/components/ModalRoot/useModalManager.d.ts +2 -0
  44. package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
  45. package/dist/components/ModalRoot/useModalManager.js +4 -1
  46. package/dist/components/ModalRoot/useModalManager.js.map +1 -1
  47. package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  48. package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
  49. package/dist/components/PopoutWrapper/PopoutWrapper.js +2 -2
  50. package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  51. package/dist/components/Spinner/Spinner.d.ts.map +1 -1
  52. package/dist/components/Spinner/Spinner.js +11 -43
  53. package/dist/components/Spinner/Spinner.js.map +1 -1
  54. package/dist/components/Spinner/SpinnerAnimation.d.ts +7 -0
  55. package/dist/components/Spinner/SpinnerAnimation.d.ts.map +1 -0
  56. package/dist/components/Spinner/SpinnerAnimation.js +36 -0
  57. package/dist/components/Spinner/SpinnerAnimation.js.map +1 -0
  58. package/dist/components/SplitLayout/SplitLayout.d.ts +4 -4
  59. package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
  60. package/dist/components.css +1 -1
  61. package/dist/components.css.map +1 -1
  62. package/dist/cssm/components/ActionSheet/ActionSheet.js +1 -3
  63. package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
  64. package/dist/cssm/components/AppRoot/AppRoot.js +14 -9
  65. package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
  66. package/dist/cssm/components/AppRoot/AppRoot.module.css +17 -0
  67. package/dist/cssm/components/AppRoot/AppRootPortal.js +1 -1
  68. package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
  69. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.js → AppRootStyleContainer/AppRootStyleContainer.js} +12 -23
  70. package/dist/cssm/components/AppRoot/AppRootStyleContainer/AppRootStyleContainer.js.map +1 -0
  71. package/dist/cssm/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -31
  72. package/dist/cssm/components/AppRoot/helpers.js +17 -1
  73. package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
  74. package/dist/cssm/components/Button/Button.module.css +6 -6
  75. package/dist/cssm/components/Card/Card.module.css +12 -6
  76. package/dist/cssm/components/Clickable/Clickable.js +2 -55
  77. package/dist/cssm/components/Clickable/Clickable.js.map +1 -1
  78. package/dist/cssm/components/Clickable/RealClickable.js +61 -0
  79. package/dist/cssm/components/Clickable/RealClickable.js.map +1 -0
  80. package/dist/cssm/components/FormField/FormField.module.css +2 -0
  81. package/dist/cssm/components/FormItem/FormItem.module.css +6 -6
  82. package/dist/cssm/components/Group/Group.module.css +1 -0
  83. package/dist/cssm/components/Header/Header.module.css +10 -4
  84. package/dist/cssm/components/HorizontalCell/HorizontalCell.js +2 -12
  85. package/dist/cssm/components/HorizontalCell/HorizontalCell.js.map +1 -1
  86. package/dist/cssm/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  87. package/dist/cssm/components/IconButton/IconButton.module.css +12 -3
  88. package/dist/cssm/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  89. package/dist/cssm/components/ModalCard/ModalCardInternal.js +1 -1
  90. package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -1
  91. package/dist/cssm/components/ModalPage/ModalPage.js +50 -4
  92. package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
  93. package/dist/cssm/components/ModalPage/ModalPageInternal.js +3 -2
  94. package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -1
  95. package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  96. package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
  97. package/dist/cssm/components/ModalRoot/types.js.map +1 -1
  98. package/dist/cssm/components/ModalRoot/useModalManager.js +4 -1
  99. package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
  100. package/dist/cssm/components/PanelHeader/PanelHeader.module.css +10 -4
  101. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
  102. package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  103. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +2 -3
  104. package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
  105. package/dist/cssm/components/Removable/Removable.module.css +7 -2
  106. package/dist/cssm/components/Spinner/Spinner.js +11 -43
  107. package/dist/cssm/components/Spinner/Spinner.js.map +1 -1
  108. package/dist/cssm/components/Spinner/SpinnerAnimation.js +36 -0
  109. package/dist/cssm/components/Spinner/SpinnerAnimation.js.map +1 -0
  110. package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
  111. package/dist/cssm/components/View/View.module.css +2 -2
  112. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  113. package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  114. package/dist/cssm/index.js.map +1 -1
  115. package/dist/cssm/lib/adaptivity/functions.js +1 -7
  116. package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
  117. package/dist/cssm/lib/animation/useReducedMotion.js +4 -7
  118. package/dist/cssm/lib/animation/useReducedMotion.js.map +1 -1
  119. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +22 -37
  120. package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  121. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +1 -9
  122. package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  123. package/dist/cssm/lib/sheet/index.js +1 -1
  124. package/dist/cssm/lib/sheet/index.js.map +1 -1
  125. package/dist/cssm/lib/sheet/useBottomSheet.js +12 -15
  126. package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -1
  127. package/dist/cssm/styles/common.css +10 -4
  128. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +3 -2
  129. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -1
  130. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +15 -4
  131. package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -1
  132. package/dist/index.d.ts +2 -2
  133. package/dist/index.d.ts.map +1 -1
  134. package/dist/index.js.map +1 -1
  135. package/dist/lib/adaptivity/functions.d.ts +0 -1
  136. package/dist/lib/adaptivity/functions.d.ts.map +1 -1
  137. package/dist/lib/adaptivity/functions.js +1 -7
  138. package/dist/lib/adaptivity/functions.js.map +1 -1
  139. package/dist/lib/animation/useReducedMotion.d.ts +1 -1
  140. package/dist/lib/animation/useReducedMotion.d.ts.map +1 -1
  141. package/dist/lib/animation/useReducedMotion.js +4 -7
  142. package/dist/lib/animation/useReducedMotion.js.map +1 -1
  143. package/dist/lib/sheet/controllers/BottomSheetController.d.ts +8 -8
  144. package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -1
  145. package/dist/lib/sheet/controllers/BottomSheetController.js +22 -37
  146. package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -1
  147. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +1 -1
  148. package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -1
  149. package/dist/lib/sheet/controllers/CSSTransitionController.js +1 -9
  150. package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -1
  151. package/dist/lib/sheet/index.d.ts +2 -1
  152. package/dist/lib/sheet/index.d.ts.map +1 -1
  153. package/dist/lib/sheet/index.js +1 -1
  154. package/dist/lib/sheet/index.js.map +1 -1
  155. package/dist/lib/sheet/useBottomSheet.d.ts +6 -5
  156. package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -1
  157. package/dist/lib/sheet/useBottomSheet.js +12 -15
  158. package/dist/lib/sheet/useBottomSheet.js.map +1 -1
  159. package/dist/vkui.css +1 -1
  160. package/dist/vkui.css.map +1 -1
  161. package/package.json +2 -2
  162. package/src/components/ActionSheet/ActionSheet.tsx +1 -4
  163. package/src/components/AppRoot/AppRoot.module.css +17 -0
  164. package/src/components/AppRoot/AppRoot.tsx +24 -11
  165. package/src/components/AppRoot/AppRootPortal.tsx +1 -1
  166. package/src/components/AppRoot/{AppRootStyleContainer.module.css → AppRootStyleContainer/AppRootStyleContainer.module.css} +7 -24
  167. package/src/components/AppRoot/{AppRootStyleContainer.tsx → AppRootStyleContainer/AppRootStyleContainer.tsx} +11 -29
  168. package/src/components/AppRoot/helpers.ts +17 -1
  169. package/src/components/Button/Button.module.css +6 -6
  170. package/src/components/Card/Card.module.css +8 -6
  171. package/src/components/Clickable/Clickable.tsx +4 -103
  172. package/src/components/Clickable/RealClickable.tsx +99 -0
  173. package/src/components/FormField/FormField.module.css +2 -0
  174. package/src/components/FormItem/FormItem.module.css +6 -6
  175. package/src/components/Group/Group.module.css +1 -0
  176. package/src/components/Header/Header.module.css +8 -4
  177. package/src/components/HorizontalCell/HorizontalCell.tsx +8 -20
  178. package/src/components/HorizontalScroll/HorizontalScroll.module.css +1 -0
  179. package/src/components/IconButton/IconButton.module.css +10 -3
  180. package/src/components/MiniInfoCell/MiniInfoCell.module.css +1 -0
  181. package/src/components/ModalCard/ModalCardInternal.tsx +1 -1
  182. package/src/components/ModalPage/ModalPage.tsx +57 -3
  183. package/src/components/ModalPage/ModalPageInternal.tsx +14 -5
  184. package/src/components/ModalPageHeader/ModalPageHeader.module.css +1 -0
  185. package/src/components/ModalRoot/ModalRoot.tsx +0 -1
  186. package/src/components/ModalRoot/types.ts +0 -1
  187. package/src/components/ModalRoot/useModalManager.tsx +5 -3
  188. package/src/components/PanelHeader/PanelHeader.module.css +8 -4
  189. package/src/components/PanelHeaderButton/PanelHeaderButton.module.css +4 -0
  190. package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +1 -1
  191. package/src/components/PopoutWrapper/PopoutWrapper.tsx +1 -4
  192. package/src/components/Removable/Removable.module.css +6 -2
  193. package/src/components/Spinner/Spinner.tsx +10 -48
  194. package/src/components/Spinner/SpinnerAnimation.tsx +42 -0
  195. package/src/components/SplitLayout/SplitLayout.tsx +4 -4
  196. package/src/components/View/View.module.css +2 -2
  197. package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +13 -4
  198. package/src/index.ts +2 -2
  199. package/src/lib/adaptivity/functions.ts +1 -8
  200. package/src/lib/animation/useReducedMotion.ts +6 -13
  201. package/src/lib/sheet/controllers/BottomSheetController.ts +32 -50
  202. package/src/lib/sheet/controllers/CSSTransitionController.ts +1 -8
  203. package/src/lib/sheet/index.ts +3 -0
  204. package/src/lib/sheet/useBottomSheet.ts +21 -17
  205. package/src/styles/common.css +12 -4
  206. package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +0 -1
  207. package/dist/components/AppRoot/AppRootStyleContainer.js +0 -57
  208. package/dist/components/AppRoot/AppRootStyleContainer.js.map +0 -1
  209. package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +0 -1
@@ -10,7 +10,7 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
10
10
  *
11
11
  * ## Возможности
12
12
  *
13
- * - [x] есть возможность открывать до определенного размера (см. `initialSnapPoint`)
13
+ * - [x] есть возможность открывать до определенного размера (см. `snapPoint`)
14
14
  * - [x] есть возможность закрыть при сильном смахивании вниз
15
15
  * - [x] есть возможность отключить взаимодействие на определённых элементах используя data-атрибут
16
16
  * - [x] есть возможность отключить взаимодействие на определённых элементах используя stopPropagation()
@@ -18,7 +18,7 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
18
18
  * ## Анимации
19
19
  *
20
20
  * - [x] оверлей становится светлее в зависимости от процента сворачивания
21
- * - [x] при `initialSnapPoint !== 'auto'` процент высчитывается относительно переданного `initialSnapPoint`
21
+ * - [x] при `snapPoint !== 'auto'` процент высчитывается относительно переданного `snapPoint.initial`
22
22
  * - [x] при перетаскивании за пределы есть анимация натяжения
23
23
  * > note: в `ModalPage` этого эффекта нет при высоте 100% из-за `max-block-size: 100%`
24
24
  *
@@ -30,23 +30,18 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
30
30
  * - [x] ⚠️ не блокирует взаимодействие с элементами вне корневого элемента
31
31
  *
32
32
  * @private
33
- */ export const useBottomSheet = (enabled, { blocked, initialSnapPoint, sheetCSSProperty, backdropCSSProperty, onDismiss: onDismissProp })=>{
33
+ */ export const useBottomSheet = (enabled, { blocked, snapPoint, sheetCSSProperty, backdropCSSProperty, onSnapPointChange: onSnapPointChangeProp, onDismiss: onDismissProp })=>{
34
34
  const [sheetScrollEl, setSheetScrollEl] = useState(null);
35
35
  const [sheetEl, setSheetEl] = useState(null);
36
36
  const [backdropEl, setBackdropEl] = useState(null);
37
- const initialStyle = useMemo(()=>{
38
- if (!enabled) {
39
- return;
40
- }
41
- const { unit, currentSnapPoint } = BottomSheetController.parseInitialSnapPoint(initialSnapPoint);
42
- return unit === '%' ? {
43
- [sheetCSSProperty]: `${currentSnapPoint}${unit}`
44
- } : undefined;
45
- }, [
37
+ const initialStyle = useMemo(()=>enabled && snapPoint !== 'auto' ? {
38
+ [sheetCSSProperty]: `${snapPoint.initial}%`
39
+ } : undefined, [
46
40
  enabled,
47
- initialSnapPoint,
41
+ snapPoint,
48
42
  sheetCSSProperty
49
43
  ]);
44
+ const onSnapPointChange = useStableCallback(onSnapPointChangeProp || noop);
50
45
  const onDismiss = useStableCallback(onDismissProp || noop);
51
46
  const bsController = useMemo(()=>{
52
47
  if (!enabled || sheetEl === null) {
@@ -56,6 +51,7 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
56
51
  sheetScrollEl: sheetScrollEl || null,
57
52
  sheetTransitionController: new CSSTransitionController(sheetEl, sheetCSSProperty),
58
53
  backdropTransitionController: backdropEl ? new CSSTransitionController(backdropEl, backdropCSSProperty) : null,
54
+ onSnapPointChange,
59
55
  onDismiss
60
56
  });
61
57
  }, [
@@ -65,6 +61,7 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
65
61
  sheetScrollEl,
66
62
  backdropEl,
67
63
  backdropCSSProperty,
64
+ onSnapPointChange,
68
65
  onDismiss
69
66
  ]);
70
67
  const onPanStart = function onPanStart(event) {
@@ -80,10 +77,10 @@ import { CSSTransitionController } from "./controllers/CSSTransitionController.j
80
77
  };
81
78
  useIsomorphicLayoutEffect(function init() {
82
79
  if (bsController) {
83
- bsController.init(initialSnapPoint);
80
+ bsController.init(snapPoint);
84
81
  }
85
82
  }, [
86
- initialSnapPoint,
83
+ snapPoint,
87
84
  bsController
88
85
  ]);
89
86
  useIsomorphicLayoutEffect(()=>function unmount() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/sheet/useBottomSheet.ts"],"sourcesContent":["'use client';\n\nimport {\n type CSSProperties,\n type Dispatch,\n type SetStateAction,\n type UIEvent,\n type UIEventHandler,\n useMemo,\n useState,\n} from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport { BottomSheetController, type InitialSnapPoint } from './controllers/BottomSheetController';\nimport { CSSTransitionController } from './controllers/CSSTransitionController';\n\nexport type UseBottomSheetOptions = {\n sheetCSSProperty: string;\n backdropCSSProperty: string;\n initialSnapPoint?: InitialSnapPoint;\n blocked?: boolean;\n onDismiss?: VoidFunction;\n};\n\nexport type UseBottomSheetHandlers = {\n onTouchStart: UIEventHandler<HTMLElement>;\n onTouchMove: UIEventHandler<HTMLElement>;\n onTouchEnd: UIEventHandler<HTMLElement>;\n onTouchCancel: UIEventHandler<HTMLElement>;\n onMouseDown: UIEventHandler<HTMLElement>;\n onMouseMove: UIEventHandler<HTMLElement>;\n onMouseUp: UIEventHandler<HTMLElement>;\n onMouseLeave: UIEventHandler<HTMLElement>;\n};\n\nexport type UseBottomSheetResult = [\n {\n initialStyle?: CSSProperties;\n setSheetEl: Dispatch<SetStateAction<HTMLElement | null>>;\n setSheetScrollEl: Dispatch<SetStateAction<HTMLElement | null>>;\n setBackdropEl: Dispatch<SetStateAction<HTMLElement | null>>;\n },\n UseBottomSheetHandlers | undefined,\n];\n\n/**\n * # Checklist\n *\n * ## Возможности\n *\n * - [x] есть возможность открывать до определенного размера (см. `initialSnapPoint`)\n * - [x] есть возможность закрыть при сильном смахивании вниз\n * - [x] есть возможность отключить взаимодействие на определённых элементах используя data-атрибут\n * - [x] есть возможность отключить взаимодействие на определённых элементах используя stopPropagation()\n *\n * ## Анимации\n *\n * - [x] оверлей становится светлее в зависимости от процента сворачивания\n * - [x] при `initialSnapPoint !== 'auto'` процент высчитывается относительно переданного `initialSnapPoint`\n * - [x] при перетаскивании за пределы есть анимация натяжения\n * > note: в `ModalPage` этого эффекта нет при высоте 100% из-за `max-block-size: 100%`\n *\n * ## Пограничные кейсы\n *\n * - [x] ⚠️ не блокирует взаимодействие с _горизонтальным_ скроллом\n * - [x] ⚠️ не блокирует взаимодействие с _вертикальным_ скроллом\n * - [x] ⚠️ не блокирует взаимодействие с полями ввода\n * - [x] ⚠️ не блокирует взаимодействие с элементами вне корневого элемента\n *\n * @private\n */\nexport const useBottomSheet = (\n enabled: boolean,\n {\n blocked,\n initialSnapPoint,\n sheetCSSProperty,\n backdropCSSProperty,\n onDismiss: onDismissProp,\n }: UseBottomSheetOptions,\n): UseBottomSheetResult => {\n const [sheetScrollEl, setSheetScrollEl] = useState<HTMLElement | null>(null);\n const [sheetEl, setSheetEl] = useState<HTMLElement | null>(null);\n const [backdropEl, setBackdropEl] = useState<HTMLElement | null>(null);\n\n const initialStyle = useMemo<CSSProperties | undefined>(() => {\n if (!enabled) {\n return;\n }\n\n const { unit, currentSnapPoint } =\n BottomSheetController.parseInitialSnapPoint(initialSnapPoint);\n\n return unit === '%' ? { [sheetCSSProperty]: `${currentSnapPoint}${unit}` } : undefined;\n }, [enabled, initialSnapPoint, sheetCSSProperty]);\n\n const onDismiss = useStableCallback(onDismissProp || noop);\n const bsController = useMemo<BottomSheetController | null>(() => {\n if (!enabled || sheetEl === null) {\n return null;\n }\n\n return new BottomSheetController(sheetEl, {\n sheetScrollEl: sheetScrollEl || null,\n sheetTransitionController: new CSSTransitionController<string>(sheetEl, sheetCSSProperty),\n backdropTransitionController: backdropEl\n ? new CSSTransitionController(backdropEl, backdropCSSProperty)\n : null,\n onDismiss,\n });\n }, [\n enabled,\n sheetEl,\n sheetCSSProperty,\n sheetScrollEl,\n backdropEl,\n backdropCSSProperty,\n onDismiss,\n ]);\n\n const onPanStart = function onPanStart(event: UIEvent<HTMLElement>) {\n if (!blocked) {\n bsController!.panStart(event.nativeEvent);\n }\n };\n\n const onPanMove = function onPanMove(event: UIEvent<HTMLElement>) {\n bsController!.panMove(event.nativeEvent);\n };\n\n const onPanEnd = function onPanEnd() {\n bsController!.panEnd();\n };\n\n useIsomorphicLayoutEffect(\n function init() {\n if (bsController) {\n bsController.init(initialSnapPoint);\n }\n },\n [initialSnapPoint, bsController],\n );\n\n useIsomorphicLayoutEffect(\n () =>\n function unmount() {\n if (bsController) {\n bsController.destroy();\n }\n },\n [bsController],\n );\n\n return [\n {\n initialStyle,\n setSheetEl,\n setSheetScrollEl,\n setBackdropEl,\n },\n bsController !== null\n ? {\n onTouchStart: onPanStart,\n onTouchMove: onPanMove,\n onTouchEnd: onPanEnd,\n onTouchCancel: onPanEnd,\n onMouseDown: onPanStart,\n onMouseMove: onPanMove,\n onMouseUp: onPanEnd,\n onMouseLeave: onPanEnd,\n }\n : undefined,\n ];\n};\n"],"names":["useMemo","useState","noop","useStableCallback","useIsomorphicLayoutEffect","BottomSheetController","CSSTransitionController","useBottomSheet","enabled","blocked","initialSnapPoint","sheetCSSProperty","backdropCSSProperty","onDismiss","onDismissProp","sheetScrollEl","setSheetScrollEl","sheetEl","setSheetEl","backdropEl","setBackdropEl","initialStyle","unit","currentSnapPoint","parseInitialSnapPoint","undefined","bsController","sheetTransitionController","backdropTransitionController","onPanStart","event","panStart","nativeEvent","onPanMove","panMove","onPanEnd","panEnd","init","unmount","destroy","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onMouseDown","onMouseMove","onMouseUp","onMouseLeave"],"mappings":"AAAA;AAEA,SAMEA,OAAO,EACPC,QAAQ,QACH,QAAQ;AACf,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,yBAAyB,QAAQ,kCAA+B;AACzE,SAASC,qBAAqB,QAA+B,yCAAsC;AACnG,SAASC,uBAAuB,QAAQ,2CAAwC;AA+BhF;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,MAAMC,iBAAiB,CAC5BC,SACA,EACEC,OAAO,EACPC,gBAAgB,EAChBC,gBAAgB,EAChBC,mBAAmB,EACnBC,WAAWC,aAAa,EACF;IAExB,MAAM,CAACC,eAAeC,iBAAiB,GAAGf,SAA6B;IACvE,MAAM,CAACgB,SAASC,WAAW,GAAGjB,SAA6B;IAC3D,MAAM,CAACkB,YAAYC,cAAc,GAAGnB,SAA6B;IAEjE,MAAMoB,eAAerB,QAAmC;QACtD,IAAI,CAACQ,SAAS;YACZ;QACF;QAEA,MAAM,EAAEc,IAAI,EAAEC,gBAAgB,EAAE,GAC9BlB,sBAAsBmB,qBAAqB,CAACd;QAE9C,OAAOY,SAAS,MAAM;YAAE,CAACX,iBAAiB,EAAE,GAAGY,mBAAmBD,MAAM;QAAC,IAAIG;IAC/E,GAAG;QAACjB;QAASE;QAAkBC;KAAiB;IAEhD,MAAME,YAAYV,kBAAkBW,iBAAiBZ;IACrD,MAAMwB,eAAe1B,QAAsC;QACzD,IAAI,CAACQ,WAAWS,YAAY,MAAM;YAChC,OAAO;QACT;QAEA,OAAO,IAAIZ,sBAAsBY,SAAS;YACxCF,eAAeA,iBAAiB;YAChCY,2BAA2B,IAAIrB,wBAAgCW,SAASN;YACxEiB,8BAA8BT,aAC1B,IAAIb,wBAAwBa,YAAYP,uBACxC;YACJC;QACF;IACF,GAAG;QACDL;QACAS;QACAN;QACAI;QACAI;QACAP;QACAC;KACD;IAED,MAAMgB,aAAa,SAASA,WAAWC,KAA2B;QAChE,IAAI,CAACrB,SAAS;YACZiB,aAAcK,QAAQ,CAACD,MAAME,WAAW;QAC1C;IACF;IAEA,MAAMC,YAAY,SAASA,UAAUH,KAA2B;QAC9DJ,aAAcQ,OAAO,CAACJ,MAAME,WAAW;IACzC;IAEA,MAAMG,WAAW,SAASA;QACxBT,aAAcU,MAAM;IACtB;IAEAhC,0BACE,SAASiC;QACP,IAAIX,cAAc;YAChBA,aAAaW,IAAI,CAAC3B;QACpB;IACF,GACA;QAACA;QAAkBgB;KAAa;IAGlCtB,0BACE,IACE,SAASkC;YACP,IAAIZ,cAAc;gBAChBA,aAAaa,OAAO;YACtB;QACF,GACF;QAACb;KAAa;IAGhB,OAAO;QACL;YACEL;YACAH;YACAF;YACAI;QACF;QACAM,iBAAiB,OACb;YACEc,cAAcX;YACdY,aAAaR;YACbS,YAAYP;YACZQ,eAAeR;YACfS,aAAaf;YACbgB,aAAaZ;YACba,WAAWX;YACXY,cAAcZ;QAChB,IACAV;KACL;AACH,EAAE"}
1
+ {"version":3,"sources":["../../../src/lib/sheet/useBottomSheet.ts"],"sourcesContent":["'use client';\n\nimport {\n type CSSProperties,\n type Dispatch,\n type SetStateAction,\n type UIEvent,\n type UIEventHandler,\n useMemo,\n useState,\n} from 'react';\nimport { noop } from '@vkontakte/vkjs';\nimport { useStableCallback } from '../../hooks/useStableCallback';\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect';\nimport {\n BottomSheetController,\n type SnapPoint,\n type SnapPointChange,\n} from './controllers/BottomSheetController';\nimport { CSSTransitionController } from './controllers/CSSTransitionController';\n\nexport type UseBottomSheetOptions = {\n sheetCSSProperty: string;\n backdropCSSProperty: string;\n snapPoint: SnapPoint;\n blocked?: boolean;\n onSnapPointChange?: SnapPointChange;\n onDismiss?: VoidFunction;\n};\n\nexport type UseBottomSheetHandlers = {\n onTouchStart: UIEventHandler<HTMLElement>;\n onTouchMove: UIEventHandler<HTMLElement>;\n onTouchEnd: UIEventHandler<HTMLElement>;\n onTouchCancel: UIEventHandler<HTMLElement>;\n onMouseDown: UIEventHandler<HTMLElement>;\n onMouseMove: UIEventHandler<HTMLElement>;\n onMouseUp: UIEventHandler<HTMLElement>;\n onMouseLeave: UIEventHandler<HTMLElement>;\n};\n\nexport type UseBottomSheetResult = [\n {\n initialStyle?: CSSProperties;\n setSheetEl: Dispatch<SetStateAction<HTMLElement | null>>;\n setSheetScrollEl: Dispatch<SetStateAction<HTMLElement | null>>;\n setBackdropEl: Dispatch<SetStateAction<HTMLElement | null>>;\n },\n UseBottomSheetHandlers | undefined,\n];\n\n/**\n * # Checklist\n *\n * ## Возможности\n *\n * - [x] есть возможность открывать до определенного размера (см. `snapPoint`)\n * - [x] есть возможность закрыть при сильном смахивании вниз\n * - [x] есть возможность отключить взаимодействие на определённых элементах используя data-атрибут\n * - [x] есть возможность отключить взаимодействие на определённых элементах используя stopPropagation()\n *\n * ## Анимации\n *\n * - [x] оверлей становится светлее в зависимости от процента сворачивания\n * - [x] при `snapPoint !== 'auto'` процент высчитывается относительно переданного `snapPoint.initial`\n * - [x] при перетаскивании за пределы есть анимация натяжения\n * > note: в `ModalPage` этого эффекта нет при высоте 100% из-за `max-block-size: 100%`\n *\n * ## Пограничные кейсы\n *\n * - [x] ⚠️ не блокирует взаимодействие с _горизонтальным_ скроллом\n * - [x] ⚠️ не блокирует взаимодействие с _вертикальным_ скроллом\n * - [x] ⚠️ не блокирует взаимодействие с полями ввода\n * - [x] ⚠️ не блокирует взаимодействие с элементами вне корневого элемента\n *\n * @private\n */\nexport const useBottomSheet = (\n enabled: boolean,\n {\n blocked,\n snapPoint,\n sheetCSSProperty,\n backdropCSSProperty,\n onSnapPointChange: onSnapPointChangeProp,\n onDismiss: onDismissProp,\n }: UseBottomSheetOptions,\n): UseBottomSheetResult => {\n const [sheetScrollEl, setSheetScrollEl] = useState<HTMLElement | null>(null);\n const [sheetEl, setSheetEl] = useState<HTMLElement | null>(null);\n const [backdropEl, setBackdropEl] = useState<HTMLElement | null>(null);\n\n const initialStyle = useMemo<CSSProperties | undefined>(\n () =>\n enabled && snapPoint !== 'auto' ? { [sheetCSSProperty]: `${snapPoint.initial}%` } : undefined,\n [enabled, snapPoint, sheetCSSProperty],\n );\n\n const onSnapPointChange = useStableCallback(onSnapPointChangeProp || noop);\n const onDismiss = useStableCallback(onDismissProp || noop);\n const bsController = useMemo<BottomSheetController | null>(() => {\n if (!enabled || sheetEl === null) {\n return null;\n }\n\n return new BottomSheetController(sheetEl, {\n sheetScrollEl: sheetScrollEl || null,\n sheetTransitionController: new CSSTransitionController<string>(sheetEl, sheetCSSProperty),\n backdropTransitionController: backdropEl\n ? new CSSTransitionController(backdropEl, backdropCSSProperty)\n : null,\n onSnapPointChange,\n onDismiss,\n });\n }, [\n enabled,\n sheetEl,\n sheetCSSProperty,\n sheetScrollEl,\n backdropEl,\n backdropCSSProperty,\n onSnapPointChange,\n onDismiss,\n ]);\n\n const onPanStart = function onPanStart(event: UIEvent<HTMLElement>) {\n if (!blocked) {\n bsController!.panStart(event.nativeEvent);\n }\n };\n\n const onPanMove = function onPanMove(event: UIEvent<HTMLElement>) {\n bsController!.panMove(event.nativeEvent);\n };\n\n const onPanEnd = function onPanEnd() {\n bsController!.panEnd();\n };\n\n useIsomorphicLayoutEffect(\n function init() {\n if (bsController) {\n bsController.init(snapPoint);\n }\n },\n [snapPoint, bsController],\n );\n\n useIsomorphicLayoutEffect(\n () =>\n function unmount() {\n if (bsController) {\n bsController.destroy();\n }\n },\n [bsController],\n );\n\n return [\n {\n initialStyle,\n setSheetEl,\n setSheetScrollEl,\n setBackdropEl,\n },\n bsController !== null\n ? {\n onTouchStart: onPanStart,\n onTouchMove: onPanMove,\n onTouchEnd: onPanEnd,\n onTouchCancel: onPanEnd,\n onMouseDown: onPanStart,\n onMouseMove: onPanMove,\n onMouseUp: onPanEnd,\n onMouseLeave: onPanEnd,\n }\n : undefined,\n ];\n};\n"],"names":["useMemo","useState","noop","useStableCallback","useIsomorphicLayoutEffect","BottomSheetController","CSSTransitionController","useBottomSheet","enabled","blocked","snapPoint","sheetCSSProperty","backdropCSSProperty","onSnapPointChange","onSnapPointChangeProp","onDismiss","onDismissProp","sheetScrollEl","setSheetScrollEl","sheetEl","setSheetEl","backdropEl","setBackdropEl","initialStyle","initial","undefined","bsController","sheetTransitionController","backdropTransitionController","onPanStart","event","panStart","nativeEvent","onPanMove","panMove","onPanEnd","panEnd","init","unmount","destroy","onTouchStart","onTouchMove","onTouchEnd","onTouchCancel","onMouseDown","onMouseMove","onMouseUp","onMouseLeave"],"mappings":"AAAA;AAEA,SAMEA,OAAO,EACPC,QAAQ,QACH,QAAQ;AACf,SAASC,IAAI,QAAQ,kBAAkB;AACvC,SAASC,iBAAiB,QAAQ,mCAAgC;AAClE,SAASC,yBAAyB,QAAQ,kCAA+B;AACzE,SACEC,qBAAqB,QAGhB,yCAAsC;AAC7C,SAASC,uBAAuB,QAAQ,2CAAwC;AAgChF;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,MAAMC,iBAAiB,CAC5BC,SACA,EACEC,OAAO,EACPC,SAAS,EACTC,gBAAgB,EAChBC,mBAAmB,EACnBC,mBAAmBC,qBAAqB,EACxCC,WAAWC,aAAa,EACF;IAExB,MAAM,CAACC,eAAeC,iBAAiB,GAAGjB,SAA6B;IACvE,MAAM,CAACkB,SAASC,WAAW,GAAGnB,SAA6B;IAC3D,MAAM,CAACoB,YAAYC,cAAc,GAAGrB,SAA6B;IAEjE,MAAMsB,eAAevB,QACnB,IACEQ,WAAWE,cAAc,SAAS;YAAE,CAACC,iBAAiB,EAAE,GAAGD,UAAUc,OAAO,CAAC,CAAC,CAAC;QAAC,IAAIC,WACtF;QAACjB;QAASE;QAAWC;KAAiB;IAGxC,MAAME,oBAAoBV,kBAAkBW,yBAAyBZ;IACrE,MAAMa,YAAYZ,kBAAkBa,iBAAiBd;IACrD,MAAMwB,eAAe1B,QAAsC;QACzD,IAAI,CAACQ,WAAWW,YAAY,MAAM;YAChC,OAAO;QACT;QAEA,OAAO,IAAId,sBAAsBc,SAAS;YACxCF,eAAeA,iBAAiB;YAChCU,2BAA2B,IAAIrB,wBAAgCa,SAASR;YACxEiB,8BAA8BP,aAC1B,IAAIf,wBAAwBe,YAAYT,uBACxC;YACJC;YACAE;QACF;IACF,GAAG;QACDP;QACAW;QACAR;QACAM;QACAI;QACAT;QACAC;QACAE;KACD;IAED,MAAMc,aAAa,SAASA,WAAWC,KAA2B;QAChE,IAAI,CAACrB,SAAS;YACZiB,aAAcK,QAAQ,CAACD,MAAME,WAAW;QAC1C;IACF;IAEA,MAAMC,YAAY,SAASA,UAAUH,KAA2B;QAC9DJ,aAAcQ,OAAO,CAACJ,MAAME,WAAW;IACzC;IAEA,MAAMG,WAAW,SAASA;QACxBT,aAAcU,MAAM;IACtB;IAEAhC,0BACE,SAASiC;QACP,IAAIX,cAAc;YAChBA,aAAaW,IAAI,CAAC3B;QACpB;IACF,GACA;QAACA;QAAWgB;KAAa;IAG3BtB,0BACE,IACE,SAASkC;YACP,IAAIZ,cAAc;gBAChBA,aAAaa,OAAO;YACtB;QACF,GACF;QAACb;KAAa;IAGhB,OAAO;QACL;YACEH;YACAH;YACAF;YACAI;QACF;QACAI,iBAAiB,OACb;YACEc,cAAcX;YACdY,aAAaR;YACbS,YAAYP;YACZQ,eAAeR;YACfS,aAAaf;YACbgB,aAAaZ;YACba,WAAWX;YACXY,cAAcZ;QAChB,IACAV;KACL;AACH,EAAE"}