@hanzogui/sheet 3.0.2 → 7.3.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 (296) hide show
  1. package/LICENSE +40 -19
  2. package/dist/cjs/GestureDetectorWrapper.cjs +27 -21
  3. package/dist/cjs/GestureDetectorWrapper.native.js +33 -28
  4. package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -1
  5. package/dist/cjs/GestureSheetContext.cjs +14 -12
  6. package/dist/cjs/GestureSheetContext.native.js +29 -27
  7. package/dist/cjs/GestureSheetContext.native.js.map +1 -1
  8. package/dist/cjs/Sheet.cjs +89 -87
  9. package/dist/cjs/Sheet.native.js +89 -87
  10. package/dist/cjs/Sheet.native.js.map +1 -1
  11. package/dist/cjs/SheetContext.cjs +16 -14
  12. package/dist/cjs/SheetContext.native.js +16 -14
  13. package/dist/cjs/SheetContext.native.js.map +1 -1
  14. package/dist/cjs/SheetController.cjs +40 -32
  15. package/dist/cjs/SheetController.native.js +62 -54
  16. package/dist/cjs/SheetController.native.js.map +1 -1
  17. package/dist/cjs/SheetImplementationCustom.cjs +544 -427
  18. package/dist/cjs/SheetImplementationCustom.native.js +567 -476
  19. package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
  20. package/dist/cjs/SheetScrollView.cjs +169 -133
  21. package/dist/cjs/SheetScrollView.native.js +189 -163
  22. package/dist/cjs/SheetScrollView.native.js.map +1 -1
  23. package/dist/cjs/constants.cjs +16 -14
  24. package/dist/cjs/constants.native.js +16 -14
  25. package/dist/cjs/constants.native.js.map +1 -1
  26. package/dist/cjs/contexts.cjs +27 -25
  27. package/dist/cjs/contexts.native.js +29 -27
  28. package/dist/cjs/contexts.native.js.map +1 -1
  29. package/dist/cjs/controller.cjs +14 -12
  30. package/dist/cjs/controller.native.js +14 -12
  31. package/dist/cjs/controller.native.js.map +1 -1
  32. package/dist/cjs/createSheet.cjs +160 -161
  33. package/dist/cjs/createSheet.native.js +173 -181
  34. package/dist/cjs/createSheet.native.js.map +1 -1
  35. package/dist/cjs/gestureState.cjs +16 -14
  36. package/dist/cjs/gestureState.native.js +16 -14
  37. package/dist/cjs/gestureState.native.js.map +1 -1
  38. package/dist/cjs/helpers.cjs +17 -13
  39. package/dist/cjs/helpers.native.js +17 -13
  40. package/dist/cjs/helpers.native.js.map +1 -1
  41. package/dist/cjs/index.cjs +7 -5
  42. package/dist/cjs/index.native.js +7 -5
  43. package/dist/cjs/index.native.js.map +1 -1
  44. package/dist/cjs/nativeSheet.cjs +64 -55
  45. package/dist/cjs/nativeSheet.native.js +73 -68
  46. package/dist/cjs/nativeSheet.native.js.map +1 -1
  47. package/dist/cjs/setupGestureHandler.cjs +26 -20
  48. package/dist/cjs/setupGestureHandler.native.js +26 -21
  49. package/dist/cjs/setupGestureHandler.native.js.map +1 -1
  50. package/dist/cjs/types.cjs +7 -5
  51. package/dist/cjs/types.native.js +7 -5
  52. package/dist/cjs/types.native.js.map +1 -1
  53. package/dist/cjs/useGestureHandlerPan.cjs +181 -111
  54. package/dist/cjs/useGestureHandlerPan.native.js +183 -115
  55. package/dist/cjs/useGestureHandlerPan.native.js.map +1 -1
  56. package/dist/cjs/useKeyboardControllerSheet.cjs +15 -13
  57. package/dist/cjs/useKeyboardControllerSheet.native.js +100 -82
  58. package/dist/cjs/useKeyboardControllerSheet.native.js.map +1 -1
  59. package/dist/cjs/useSheet.cjs +12 -10
  60. package/dist/cjs/useSheet.native.js +16 -14
  61. package/dist/cjs/useSheet.native.js.map +1 -1
  62. package/dist/cjs/useSheetController.cjs +35 -33
  63. package/dist/cjs/useSheetController.native.js +37 -35
  64. package/dist/cjs/useSheetController.native.js.map +1 -1
  65. package/dist/cjs/useSheetOffscreenSize.cjs +35 -23
  66. package/dist/cjs/useSheetOffscreenSize.native.js +36 -27
  67. package/dist/cjs/useSheetOffscreenSize.native.js.map +1 -1
  68. package/dist/cjs/useSheetOpenState.cjs +28 -25
  69. package/dist/cjs/useSheetOpenState.native.js +39 -37
  70. package/dist/cjs/useSheetOpenState.native.js.map +1 -1
  71. package/dist/cjs/useSheetProviderProps.cjs +131 -83
  72. package/dist/cjs/useSheetProviderProps.native.js +167 -124
  73. package/dist/cjs/useSheetProviderProps.native.js.map +1 -1
  74. package/dist/cjs/useSheetScrollViewGestures.cjs +124 -81
  75. package/dist/cjs/useSheetScrollViewGestures.native.js +128 -79
  76. package/dist/cjs/useSheetScrollViewGestures.native.js.map +1 -1
  77. package/dist/esm/GestureDetectorWrapper.mjs +12 -8
  78. package/dist/esm/GestureDetectorWrapper.mjs.map +1 -1
  79. package/dist/esm/GestureDetectorWrapper.native.js +18 -15
  80. package/dist/esm/GestureDetectorWrapper.native.js.map +1 -1
  81. package/dist/esm/GestureSheetContext.native.js +14 -14
  82. package/dist/esm/GestureSheetContext.native.js.map +1 -1
  83. package/dist/esm/Sheet.mjs +70 -70
  84. package/dist/esm/Sheet.mjs.map +1 -1
  85. package/dist/esm/Sheet.native.js +70 -70
  86. package/dist/esm/Sheet.native.js.map +1 -1
  87. package/dist/esm/SheetContext.mjs +2 -2
  88. package/dist/esm/SheetContext.mjs.map +1 -1
  89. package/dist/esm/SheetContext.native.js +2 -2
  90. package/dist/esm/SheetContext.native.js.map +1 -1
  91. package/dist/esm/SheetController.mjs +12 -6
  92. package/dist/esm/SheetController.mjs.map +1 -1
  93. package/dist/esm/SheetController.native.js +18 -12
  94. package/dist/esm/SheetController.native.js.map +1 -1
  95. package/dist/esm/SheetImplementationCustom.mjs +501 -386
  96. package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
  97. package/dist/esm/SheetImplementationCustom.native.js +520 -435
  98. package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
  99. package/dist/esm/SheetScrollView.mjs +133 -99
  100. package/dist/esm/SheetScrollView.mjs.map +1 -1
  101. package/dist/esm/SheetScrollView.native.js +155 -131
  102. package/dist/esm/SheetScrollView.native.js.map +1 -1
  103. package/dist/esm/constants.mjs +4 -4
  104. package/dist/esm/constants.mjs.map +1 -1
  105. package/dist/esm/constants.native.js +4 -4
  106. package/dist/esm/constants.native.js.map +1 -1
  107. package/dist/esm/contexts.mjs +3 -3
  108. package/dist/esm/contexts.mjs.map +1 -1
  109. package/dist/esm/contexts.native.js +3 -3
  110. package/dist/esm/contexts.native.js.map +1 -1
  111. package/dist/esm/createSheet.mjs +130 -133
  112. package/dist/esm/createSheet.mjs.map +1 -1
  113. package/dist/esm/createSheet.native.js +142 -152
  114. package/dist/esm/createSheet.native.js.map +1 -1
  115. package/dist/esm/helpers.mjs +5 -3
  116. package/dist/esm/helpers.mjs.map +1 -1
  117. package/dist/esm/helpers.native.js +5 -3
  118. package/dist/esm/helpers.native.js.map +1 -1
  119. package/dist/esm/nativeSheet.mjs +45 -38
  120. package/dist/esm/nativeSheet.mjs.map +1 -1
  121. package/dist/esm/nativeSheet.native.js +51 -48
  122. package/dist/esm/nativeSheet.native.js.map +1 -1
  123. package/dist/esm/setupGestureHandler.mjs +12 -8
  124. package/dist/esm/setupGestureHandler.mjs.map +1 -1
  125. package/dist/esm/setupGestureHandler.native.js +12 -9
  126. package/dist/esm/setupGestureHandler.native.js.map +1 -1
  127. package/dist/esm/useGestureHandlerPan.mjs +167 -99
  128. package/dist/esm/useGestureHandlerPan.mjs.map +1 -1
  129. package/dist/esm/useGestureHandlerPan.native.js +168 -102
  130. package/dist/esm/useGestureHandlerPan.native.js.map +1 -1
  131. package/dist/esm/useKeyboardControllerSheet.mjs +3 -3
  132. package/dist/esm/useKeyboardControllerSheet.mjs.map +1 -1
  133. package/dist/esm/useKeyboardControllerSheet.native.js +85 -69
  134. package/dist/esm/useKeyboardControllerSheet.native.js.map +1 -1
  135. package/dist/esm/useSheetController.mjs +11 -11
  136. package/dist/esm/useSheetController.mjs.map +1 -1
  137. package/dist/esm/useSheetController.native.js +11 -11
  138. package/dist/esm/useSheetController.native.js.map +1 -1
  139. package/dist/esm/useSheetOffscreenSize.mjs +23 -13
  140. package/dist/esm/useSheetOffscreenSize.mjs.map +1 -1
  141. package/dist/esm/useSheetOffscreenSize.native.js +24 -17
  142. package/dist/esm/useSheetOffscreenSize.native.js.map +1 -1
  143. package/dist/esm/useSheetOpenState.mjs +14 -13
  144. package/dist/esm/useSheetOpenState.mjs.map +1 -1
  145. package/dist/esm/useSheetOpenState.native.js +17 -17
  146. package/dist/esm/useSheetOpenState.native.js.map +1 -1
  147. package/dist/esm/useSheetProviderProps.mjs +101 -55
  148. package/dist/esm/useSheetProviderProps.mjs.map +1 -1
  149. package/dist/esm/useSheetProviderProps.native.js +137 -96
  150. package/dist/esm/useSheetProviderProps.native.js.map +1 -1
  151. package/dist/esm/useSheetScrollViewGestures.mjs +112 -71
  152. package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -1
  153. package/dist/esm/useSheetScrollViewGestures.native.js +116 -69
  154. package/dist/esm/useSheetScrollViewGestures.native.js.map +1 -1
  155. package/dist/jsx/GestureDetectorWrapper.mjs +12 -8
  156. package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -1
  157. package/dist/jsx/GestureDetectorWrapper.native.js +33 -28
  158. package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -1
  159. package/dist/jsx/GestureSheetContext.native.js +29 -27
  160. package/dist/jsx/GestureSheetContext.native.js.map +1 -1
  161. package/dist/jsx/Sheet.mjs +70 -70
  162. package/dist/jsx/Sheet.mjs.map +1 -1
  163. package/dist/jsx/Sheet.native.js +89 -87
  164. package/dist/jsx/Sheet.native.js.map +1 -1
  165. package/dist/jsx/SheetContext.mjs +2 -2
  166. package/dist/jsx/SheetContext.mjs.map +1 -1
  167. package/dist/jsx/SheetContext.native.js +16 -14
  168. package/dist/jsx/SheetContext.native.js.map +1 -1
  169. package/dist/jsx/SheetController.mjs +12 -6
  170. package/dist/jsx/SheetController.mjs.map +1 -1
  171. package/dist/jsx/SheetController.native.js +62 -54
  172. package/dist/jsx/SheetController.native.js.map +1 -1
  173. package/dist/jsx/SheetImplementationCustom.mjs +501 -386
  174. package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
  175. package/dist/jsx/SheetImplementationCustom.native.js +567 -476
  176. package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
  177. package/dist/jsx/SheetScrollView.mjs +133 -99
  178. package/dist/jsx/SheetScrollView.mjs.map +1 -1
  179. package/dist/jsx/SheetScrollView.native.js +189 -163
  180. package/dist/jsx/SheetScrollView.native.js.map +1 -1
  181. package/dist/jsx/constants.mjs +4 -4
  182. package/dist/jsx/constants.mjs.map +1 -1
  183. package/dist/jsx/constants.native.js +16 -14
  184. package/dist/jsx/constants.native.js.map +1 -1
  185. package/dist/jsx/contexts.mjs +3 -3
  186. package/dist/jsx/contexts.mjs.map +1 -1
  187. package/dist/jsx/contexts.native.js +29 -27
  188. package/dist/jsx/contexts.native.js.map +1 -1
  189. package/dist/jsx/controller.native.js +14 -12
  190. package/dist/jsx/createSheet.mjs +130 -133
  191. package/dist/jsx/createSheet.mjs.map +1 -1
  192. package/dist/jsx/createSheet.native.js +173 -181
  193. package/dist/jsx/createSheet.native.js.map +1 -1
  194. package/dist/jsx/gestureState.native.js +16 -14
  195. package/dist/jsx/gestureState.native.js.map +1 -1
  196. package/dist/jsx/helpers.mjs +5 -3
  197. package/dist/jsx/helpers.mjs.map +1 -1
  198. package/dist/jsx/helpers.native.js +17 -13
  199. package/dist/jsx/helpers.native.js.map +1 -1
  200. package/dist/jsx/index.native.js +7 -5
  201. package/dist/jsx/index.native.js.map +1 -1
  202. package/dist/jsx/nativeSheet.mjs +45 -38
  203. package/dist/jsx/nativeSheet.mjs.map +1 -1
  204. package/dist/jsx/nativeSheet.native.js +73 -68
  205. package/dist/jsx/nativeSheet.native.js.map +1 -1
  206. package/dist/jsx/setupGestureHandler.mjs +12 -8
  207. package/dist/jsx/setupGestureHandler.mjs.map +1 -1
  208. package/dist/jsx/setupGestureHandler.native.js +26 -21
  209. package/dist/jsx/setupGestureHandler.native.js.map +1 -1
  210. package/dist/jsx/types.native.js +7 -5
  211. package/dist/jsx/useGestureHandlerPan.mjs +167 -99
  212. package/dist/jsx/useGestureHandlerPan.mjs.map +1 -1
  213. package/dist/jsx/useGestureHandlerPan.native.js +183 -115
  214. package/dist/jsx/useGestureHandlerPan.native.js.map +1 -1
  215. package/dist/jsx/useKeyboardControllerSheet.mjs +3 -3
  216. package/dist/jsx/useKeyboardControllerSheet.mjs.map +1 -1
  217. package/dist/jsx/useKeyboardControllerSheet.native.js +100 -82
  218. package/dist/jsx/useKeyboardControllerSheet.native.js.map +1 -1
  219. package/dist/jsx/useSheet.native.js +16 -14
  220. package/dist/jsx/useSheetController.mjs +11 -11
  221. package/dist/jsx/useSheetController.mjs.map +1 -1
  222. package/dist/jsx/useSheetController.native.js +37 -35
  223. package/dist/jsx/useSheetController.native.js.map +1 -1
  224. package/dist/jsx/useSheetOffscreenSize.mjs +23 -13
  225. package/dist/jsx/useSheetOffscreenSize.mjs.map +1 -1
  226. package/dist/jsx/useSheetOffscreenSize.native.js +36 -27
  227. package/dist/jsx/useSheetOffscreenSize.native.js.map +1 -1
  228. package/dist/jsx/useSheetOpenState.mjs +14 -13
  229. package/dist/jsx/useSheetOpenState.mjs.map +1 -1
  230. package/dist/jsx/useSheetOpenState.native.js +39 -37
  231. package/dist/jsx/useSheetOpenState.native.js.map +1 -1
  232. package/dist/jsx/useSheetProviderProps.mjs +101 -55
  233. package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
  234. package/dist/jsx/useSheetProviderProps.native.js +167 -124
  235. package/dist/jsx/useSheetProviderProps.native.js.map +1 -1
  236. package/dist/jsx/useSheetScrollViewGestures.mjs +112 -71
  237. package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -1
  238. package/dist/jsx/useSheetScrollViewGestures.native.js +128 -79
  239. package/dist/jsx/useSheetScrollViewGestures.native.js.map +1 -1
  240. package/package.json +35 -25
  241. package/src/Sheet.tsx +3 -3
  242. package/src/SheetController.tsx +4 -1
  243. package/src/SheetImplementationCustom.tsx +21 -10
  244. package/src/createSheet.tsx +1 -1
  245. package/src/useSheetController.tsx +4 -0
  246. package/types/GestureDetectorWrapper.d.ts +1 -1
  247. package/types/GestureDetectorWrapper.d.ts.map +1 -0
  248. package/types/GestureSheetContext.d.ts +1 -1
  249. package/types/GestureSheetContext.d.ts.map +1 -0
  250. package/types/Sheet.d.ts +51 -51
  251. package/types/Sheet.d.ts.map +1 -0
  252. package/types/SheetContext.d.ts +8 -8
  253. package/types/SheetContext.d.ts.map +1 -0
  254. package/types/SheetController.d.ts +3 -2
  255. package/types/SheetController.d.ts.map +1 -0
  256. package/types/SheetImplementationCustom.d.ts +4 -4
  257. package/types/SheetImplementationCustom.d.ts.map +1 -0
  258. package/types/SheetScrollView.d.ts +10 -10
  259. package/types/SheetScrollView.d.ts.map +1 -0
  260. package/types/constants.d.ts.map +1 -0
  261. package/types/contexts.d.ts.map +1 -0
  262. package/types/controller.d.ts.map +1 -0
  263. package/types/createSheet.d.ts +31 -31
  264. package/types/createSheet.d.ts.map +1 -0
  265. package/types/gestureState.d.ts +3 -3
  266. package/types/gestureState.d.ts.map +1 -0
  267. package/types/helpers.d.ts.map +1 -0
  268. package/types/index.d.ts.map +1 -0
  269. package/types/nativeSheet.d.ts.map +1 -0
  270. package/types/setupGestureHandler.d.ts +1 -1
  271. package/types/setupGestureHandler.d.ts.map +1 -0
  272. package/types/types.d.ts +4 -4
  273. package/types/types.d.ts.map +1 -0
  274. package/types/useGestureHandlerPan.d.ts.map +1 -0
  275. package/types/useKeyboardControllerSheet.d.ts.map +1 -0
  276. package/types/useKeyboardControllerSheet.native.d.ts.map +1 -0
  277. package/types/useSheet.d.ts.map +1 -0
  278. package/types/useSheetController.d.ts +3 -0
  279. package/types/useSheetController.d.ts.map +1 -0
  280. package/types/useSheetOffscreenSize.d.ts.map +1 -0
  281. package/types/useSheetOpenState.d.ts.map +1 -0
  282. package/types/useSheetProviderProps.d.ts +2 -2
  283. package/types/useSheetProviderProps.d.ts.map +1 -0
  284. package/types/useSheetScrollViewGestures.d.ts.map +1 -0
  285. package/types/useSheetScrollViewGestures.native.d.ts.map +1 -0
  286. package/controller/index.cjs +0 -2
  287. package/controller/index.d.ts +0 -5
  288. package/controller/index.js +0 -2
  289. package/controller/index.native.cjs +0 -2
  290. package/controller/index.native.js +0 -2
  291. package/next.md +0 -78
  292. package/setup-gesture-handler/index.cjs +0 -2
  293. package/setup-gesture-handler/index.js +0 -2
  294. package/setup-gesture-handler/index.native.cjs +0 -2
  295. package/setup-gesture-handler/index.native.js +0 -2
  296. package/tsconfig.json +0 -56
@@ -17,471 +17,556 @@ import { useGestureHandlerPan } from "./useGestureHandlerPan.native.js";
17
17
  import { useKeyboardControllerSheet } from "./useKeyboardControllerSheet.native.js";
18
18
  import { useSheetOpenState } from "./useSheetOpenState.native.js";
19
19
  import { useSheetProviderProps } from "./useSheetProviderProps.native.js";
20
- var hiddenSize = 10000.1,
21
- _cachedSafeAreaTop;
20
+ var hiddenSize = 10000.1;
21
+ var _cachedSafeAreaTop;
22
22
  function getSafeAreaTopInset() {
23
- return _cachedSafeAreaTop !== void 0 || (_cachedSafeAreaTop = getSafeArea().getInsets().top), _cachedSafeAreaTop;
23
+ if (_cachedSafeAreaTop !== void 0) return _cachedSafeAreaTop;
24
+ _cachedSafeAreaTop = getSafeArea().getInsets().top;
25
+ return _cachedSafeAreaTop;
24
26
  }
25
- var relativeDimensionTo = isWeb ? "window" : "screen",
26
- SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function (props, forwardedRef) {
27
- var parentSheet = React.useContext(ParentSheetContext),
28
- {
29
- transition,
30
- transitionConfig: transitionConfigProp,
31
- modal = !1,
32
- zIndex = parentSheet.zIndex + 1,
33
- moveOnKeyboardChange = !1,
34
- unmountChildrenWhenHidden = !1,
35
- portalProps,
36
- containerComponent: ContainerComponent = React.Fragment,
37
- onAnimationComplete
38
- } = props,
39
- state = useSheetOpenState(props),
40
- [overlayComponent, setOverlayComponent] = React.useState(null),
41
- providerProps = useSheetProviderProps(props, state, {
42
- onOverlayComponent: setOverlayComponent
43
- }),
44
- {
45
- frameSize,
46
- setFrameSize,
47
- snapPoints,
48
- snapPointsMode,
49
- hasFit,
50
- position,
51
- setPosition,
52
- scrollBridge,
53
- screenSize,
54
- setMaxContentSize,
55
- maxSnapPoint
56
- } = providerProps,
57
- {
58
- open,
59
- controller,
60
- isHidden
61
- } = state,
62
- openRef = React.useRef(open);
63
- openRef.current = open;
64
- var sheetRef = React.useRef(void 0),
65
- ref = useComposedRefs(forwardedRef, sheetRef, providerProps.contentRef),
66
- {
67
- animationDriver
68
- } = useConfiguration();
69
- if (!animationDriver) throw new Error("Sheet requires an animation driver to be set");
70
- var transitionConfig = function () {
71
- var _animationDriver_animations;
72
- if (transitionConfigProp) return transitionConfigProp;
73
- var [animationProp, animationPropConfig] = transition ? Array.isArray(transition) ? transition : [transition] : [];
74
- return animationProp && !((_animationDriver_animations = animationDriver.animations) === null || _animationDriver_animations === void 0) && _animationDriver_animations[animationProp] ? {
75
- ...animationDriver.animations[animationProp],
76
- ...animationPropConfig
77
- } : null;
78
- }(),
79
- [isShowingInnerSheet, setIsShowingInnerSheet] = React.useState(!1),
80
- shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet && needsPortalRepropagation(),
81
- sheetInsideSheet = React.useContext(SheetInsideSheetContext),
82
- onInnerSheet = React.useCallback(function (hasChild) {
83
- setIsShowingInnerSheet(hasChild);
84
- }, []),
85
- stableFrameSize = React.useRef(frameSize);
86
- React.useEffect(function () {
87
- open && frameSize && (stableFrameSize.current = frameSize);
88
- }, [open, frameSize]);
89
- var effectiveFrameSize = open ? frameSize : stableFrameSize.current || frameSize,
90
- positions = React.useMemo(function () {
91
- return snapPoints.map(function (point) {
92
- return getYPositions(snapPointsMode, point, screenSize, effectiveFrameSize);
93
- });
94
- }, [screenSize, effectiveFrameSize, snapPoints, snapPointsMode]),
95
- {
96
- keyboardHeight,
97
- isKeyboardVisible,
98
- dismissKeyboard,
99
- pauseKeyboardHandler,
100
- flushPendingHide
101
- } = useKeyboardControllerSheet({
102
- enabled: !isWeb && !!moveOnKeyboardChange
103
- }),
104
- [isDragging, setIsDragging_] = React.useState(!1),
105
- isDraggingRef = React.useRef(!1),
106
- setIsDragging = React.useCallback(function (val) {
107
- isDraggingRef.current = val, pauseKeyboardHandler.current = val, setIsDragging_(val), val || flushPendingHide();
108
- }, [pauseKeyboardHandler, flushPendingHide]),
109
- activePositionsRef = React.useRef(positions),
110
- activePositions = React.useMemo(function () {
111
- if (isDragging || isDraggingRef.current) return activePositionsRef.current;
112
- var result;
113
- if (!isKeyboardVisible || keyboardHeight <= 0) result = positions;else {
114
- var safeAreaTop = isWeb ? 0 : getSafeAreaTopInset();
115
- result = positions.map(function (p) {
116
- return screenSize && p >= screenSize ? p : Math.max(safeAreaTop, p - keyboardHeight);
117
- });
118
- }
119
- return activePositionsRef.current = result, result;
120
- }, [positions, isKeyboardVisible, keyboardHeight, screenSize, isDragging]),
121
- {
122
- useAnimatedNumber,
123
- useAnimatedNumberStyle,
124
- useAnimatedNumberReaction
125
- } = animationDriver,
126
- _animationDriver_View,
127
- AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : GuiView;
128
- useIsomorphicLayoutEffect(function () {
129
- if (sheetInsideSheet && open) return sheetInsideSheet(!0), function () {
130
- sheetInsideSheet(!1);
131
- };
132
- }, [sheetInsideSheet, open]);
133
- var nextParentContext = React.useMemo(function () {
134
- return {
135
- zIndex
136
- };
137
- }, [zIndex]),
138
- isMounted = useDidFinishSSR(),
139
- startPosition = isMounted && screenSize ? screenSize : hiddenSize,
140
- animatedNumber = useAnimatedNumber(startPosition),
141
- at = React.useRef(startPosition),
142
- hasntMeasured = at.current === hiddenSize,
143
- [disableAnimation, setDisableAnimation] = useState(hasntMeasured),
144
- skipAdaptAnimation = React.useRef(!1);
145
- controller?.skipNextAnimation && (skipAdaptAnimation.current = !0);
146
- var hasScrollView = React.useRef(!1),
147
- opacityFallbackTimer = React.useRef(null);
148
- useAnimatedNumberReaction({
149
- value: animatedNumber,
150
- hostRef: sheetRef
151
- }, React.useCallback(function (value) {
152
- at.current = value, scrollBridge.paneY = value;
153
- var minY = activePositions[0],
154
- wasAtTop = scrollBridge.isAtTop,
155
- nowAtTop = value <= minY + 5;
156
- if (wasAtTop !== nowAtTop) if (scrollBridge.isAtTop = nowAtTop, nowAtTop) {
27
+ var relativeDimensionTo = isWeb ? "window" : "screen";
28
+ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetImplementationCustom2(props, forwardedRef) {
29
+ var parentSheet = React.useContext(ParentSheetContext);
30
+ var {
31
+ transition,
32
+ transitionConfig: transitionConfigProp,
33
+ modal = false,
34
+ zIndex = parentSheet.zIndex + 1,
35
+ moveOnKeyboardChange = false,
36
+ unmountChildrenWhenHidden = false,
37
+ portalProps,
38
+ containerComponent: ContainerComponent = React.Fragment,
39
+ onAnimationComplete
40
+ } = props;
41
+ var state = useSheetOpenState(props);
42
+ var [overlayComponent, setOverlayComponent] = React.useState(null);
43
+ var providerProps = useSheetProviderProps(props, state, {
44
+ onOverlayComponent: setOverlayComponent
45
+ });
46
+ var {
47
+ frameSize,
48
+ setFrameSize,
49
+ snapPoints,
50
+ snapPointsMode,
51
+ hasFit,
52
+ position,
53
+ setPosition,
54
+ scrollBridge,
55
+ screenSize,
56
+ setMaxContentSize,
57
+ maxSnapPoint
58
+ } = providerProps;
59
+ var {
60
+ open,
61
+ controller,
62
+ isHidden
63
+ } = state;
64
+ var openRef = React.useRef(open);
65
+ openRef.current = open;
66
+ var sheetRef = React.useRef(void 0);
67
+ var ref = useComposedRefs(forwardedRef, sheetRef, providerProps.contentRef);
68
+ var {
69
+ animationDriver
70
+ } = useConfiguration();
71
+ if (!animationDriver) throw new Error(`Sheet requires an animation driver to be set`);
72
+ var transitionConfig = function () {
73
+ var _animationDriver_animations;
74
+ if (transitionConfigProp) return transitionConfigProp;
75
+ var [animationProp, animationPropConfig] = !transition ? [] : Array.isArray(transition) ? transition : [transition];
76
+ if (animationProp && ((_animationDriver_animations = animationDriver.animations) === null || _animationDriver_animations === void 0 ? void 0 : _animationDriver_animations[animationProp])) return {
77
+ ...animationDriver.animations[animationProp],
78
+ ...animationPropConfig
79
+ };
80
+ return null;
81
+ }();
82
+ var [isShowingInnerSheet, setIsShowingInnerSheet] = React.useState(false);
83
+ var shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet && needsPortalRepropagation();
84
+ var sheetInsideSheet = React.useContext(SheetInsideSheetContext);
85
+ var onInnerSheet = React.useCallback(function (hasChild) {
86
+ setIsShowingInnerSheet(hasChild);
87
+ }, []);
88
+ var stableFrameSize = React.useRef(frameSize);
89
+ React.useEffect(function () {
90
+ if (open && frameSize) stableFrameSize.current = frameSize;
91
+ }, [open, frameSize]);
92
+ var effectiveFrameSize = open ? frameSize : stableFrameSize.current || frameSize;
93
+ var positions = React.useMemo(function () {
94
+ return snapPoints.map(function (point) {
95
+ return getYPositions(snapPointsMode, point, screenSize, effectiveFrameSize);
96
+ });
97
+ }, [screenSize, effectiveFrameSize, snapPoints, snapPointsMode]);
98
+ var {
99
+ keyboardHeight,
100
+ isKeyboardVisible,
101
+ dismissKeyboard,
102
+ pauseKeyboardHandler,
103
+ flushPendingHide
104
+ } = useKeyboardControllerSheet({
105
+ enabled: !isWeb && Boolean(moveOnKeyboardChange)
106
+ });
107
+ var [isDragging, setIsDragging_] = React.useState(false);
108
+ var isDraggingRef = React.useRef(false);
109
+ var setIsDragging = React.useCallback(function (val) {
110
+ isDraggingRef.current = val;
111
+ pauseKeyboardHandler.current = val;
112
+ setIsDragging_(val);
113
+ if (!val) flushPendingHide();
114
+ }, [pauseKeyboardHandler, flushPendingHide]);
115
+ var activePositionsRef = React.useRef(positions);
116
+ var activePositions = React.useMemo(function () {
117
+ if (isDragging || isDraggingRef.current) return activePositionsRef.current;
118
+ var result;
119
+ if (!isKeyboardVisible || keyboardHeight <= 0) result = positions;else {
120
+ var safeAreaTop = isWeb ? 0 : getSafeAreaTopInset();
121
+ result = positions.map(function (p) {
122
+ if (screenSize && p >= screenSize) return p;
123
+ return Math.max(safeAreaTop, p - keyboardHeight);
124
+ });
125
+ }
126
+ activePositionsRef.current = result;
127
+ return result;
128
+ }, [positions, isKeyboardVisible, keyboardHeight, screenSize, isDragging]);
129
+ var {
130
+ useAnimatedNumber,
131
+ useAnimatedNumberStyle,
132
+ useAnimatedNumberReaction
133
+ } = animationDriver;
134
+ var _animationDriver_View;
135
+ var AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : GuiView;
136
+ useIsomorphicLayoutEffect(function () {
137
+ if (!(sheetInsideSheet && open)) return;
138
+ sheetInsideSheet(true);
139
+ return function () {
140
+ sheetInsideSheet(false);
141
+ };
142
+ }, [sheetInsideSheet, open]);
143
+ var nextParentContext = React.useMemo(function () {
144
+ return {
145
+ zIndex
146
+ };
147
+ }, [zIndex]);
148
+ var startPosition = useDidFinishSSR() && screenSize ? screenSize : hiddenSize;
149
+ var animatedNumber = useAnimatedNumber(startPosition);
150
+ var at = React.useRef(startPosition);
151
+ var hasntMeasured = at.current === hiddenSize;
152
+ var [disableAnimation, setDisableAnimation] = useState(hasntMeasured);
153
+ var skipAdaptAnimation = React.useRef(false);
154
+ if (controller === null || controller === void 0 ? void 0 : controller.skipNextAnimation) skipAdaptAnimation.current = true;
155
+ var hasScrollView = React.useRef(false);
156
+ var opacityFallbackTimer = React.useRef(null);
157
+ useAnimatedNumberReaction({
158
+ value: animatedNumber,
159
+ hostRef: sheetRef
160
+ }, React.useCallback(function (value) {
161
+ at.current = value;
162
+ scrollBridge.paneY = value;
163
+ var minY = activePositions[0];
164
+ var wasAtTop = scrollBridge.isAtTop;
165
+ var nowAtTop = value <= minY + 5;
166
+ if (wasAtTop !== nowAtTop) {
167
+ scrollBridge.isAtTop = nowAtTop;
168
+ if (nowAtTop) {
157
169
  var _scrollBridge_setScrollEnabled;
158
170
  if (scrollBridge.y > 0) {
159
171
  var _scrollBridge_forceScrollTo;
160
- (_scrollBridge_forceScrollTo = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo === void 0 || _scrollBridge_forceScrollTo.call(scrollBridge, 0), scrollBridge.y = 0;
172
+ (_scrollBridge_forceScrollTo = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo === void 0 || _scrollBridge_forceScrollTo.call(scrollBridge, 0);
173
+ scrollBridge.y = 0;
161
174
  }
162
- scrollBridge.scrollLockY = void 0, (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, !0);
175
+ scrollBridge.scrollLockY = void 0;
176
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
163
177
  } else {
164
178
  var _scrollBridge_setScrollEnabled1;
165
- scrollBridge.scrollLockY = 0, (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, !1);
179
+ scrollBridge.scrollLockY = 0;
180
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false);
166
181
  }
167
- }, [animationDriver, activePositions]));
168
- function stopSpring() {
169
- animatedNumber.stop(), scrollBridge.onFinishAnimate && (scrollBridge.onFinishAnimate(), scrollBridge.onFinishAnimate = void 0);
170
182
  }
171
- var animateTo = useEvent(function (position2, animationOverride) {
172
- if (frameSize !== 0) {
173
- var toValue = isHidden || position2 === -1 ? screenSize : activePositions[position2];
174
- if (at.current !== toValue) {
175
- at.current = toValue, stopSpring();
176
- var isOpenAnimation = position2 !== -1 && !isHidden;
177
- opacityFallbackTimer.current && (clearTimeout(opacityFallbackTimer.current), opacityFallbackTimer.current = null);
178
- var animationCompleteCallback = function () {
179
- opacityFallbackTimer.current && (clearTimeout(opacityFallbackTimer.current), opacityFallbackTimer.current = null), !isOpenAnimation && !open && setOpacity(0), onAnimationComplete?.({
180
- open: isOpenAnimation
181
- });
182
- };
183
- if (isOpenAnimation || (opacityFallbackTimer.current = setTimeout(function () {
184
- opacityFallbackTimer.current = null, openRef.current || setOpacity(0);
185
- }, 1e3)), skipAdaptAnimation.current) {
186
- skipAdaptAnimation.current = !1, animatedNumber.setValue(toValue, {
187
- type: "timing",
188
- duration: 0
189
- }, animationCompleteCallback);
190
- return;
191
- }
192
- animatedNumber.setValue(toValue, animationOverride || {
193
- type: "spring",
194
- ...transitionConfig
195
- }, animationCompleteCallback);
196
- }
197
- }
198
- });
199
- useIsomorphicLayoutEffect(function () {
200
- if (hasntMeasured && screenSize && frameSize) {
201
- at.current = screenSize, animatedNumber.setValue(screenSize, {
202
- type: "timing",
203
- duration: 0
204
- }, function () {
205
- setTimeout(function () {
206
- setDisableAnimation(!1);
207
- }, 10);
208
- });
209
- return;
210
- }
211
- if (!disableAnimation && !(!frameSize || !screenSize || isHidden || hasntMeasured && !open) && (animateTo(position), position === -1 && (scrollBridge.scrollLock = !1, scrollBridge.scrollStartY = -1), open && position >= 0)) {
212
- var isTopPosition = position === 0;
213
- if (scrollBridge.isAtTop = isTopPosition, isTopPosition) {
214
- var _scrollBridge_setScrollEnabled;
215
- scrollBridge.scrollLockY = void 0, (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, !0);
216
- } else {
217
- var _scrollBridge_setScrollEnabled1;
218
- scrollBridge.scrollLockY = 0, (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, !1);
219
- }
183
+ }, [animationDriver, activePositions]));
184
+ function stopSpring() {
185
+ animatedNumber.stop();
186
+ if (scrollBridge.onFinishAnimate) {
187
+ scrollBridge.onFinishAnimate();
188
+ scrollBridge.onFinishAnimate = void 0;
189
+ }
190
+ }
191
+ var animateTo = useEvent(function (position2, animationOverride) {
192
+ if (frameSize === 0) return;
193
+ var toValue = isHidden || position2 === -1 ? screenSize : activePositions[position2];
194
+ if (at.current === toValue) return;
195
+ at.current = toValue;
196
+ stopSpring();
197
+ var isOpenAnimation = position2 !== -1 && !isHidden;
198
+ if (opacityFallbackTimer.current) {
199
+ clearTimeout(opacityFallbackTimer.current);
200
+ opacityFallbackTimer.current = null;
201
+ }
202
+ var animationCompleteCallback = function () {
203
+ var _controller_onAnimationComplete;
204
+ if (opacityFallbackTimer.current) {
205
+ clearTimeout(opacityFallbackTimer.current);
206
+ opacityFallbackTimer.current = null;
220
207
  }
221
- }, [hasntMeasured, disableAnimation, isHidden, frameSize, screenSize, open, position]);
222
- var _props_disableDrag,
223
- disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller?.disableDrag,
224
- themeName = useThemeName(),
225
- [blockPan, setBlockPan] = React.useState(!1),
226
- panResponder = React.useMemo(function () {
227
- if (disableDrag || !frameSize || isShowingInnerSheet) return;
228
- var minY = positions[0];
229
- scrollBridge.paneMinY = minY;
230
- var startY = at.current;
231
- function setPanning(val) {
232
- setIsDragging(val);
233
- }
234
- var release = function (param) {
235
- var {
236
- vy
237
- } = param;
238
- if (scrollBridge.setParentDragging(!1), !scrollBridge.scrollLock) {
239
- isExternalDrag = !1, previouslyScrolling = !1, setPanning(!1);
240
- for (var currentPos = at.current, end = currentPos + frameSize * vy * 0.2, closestPoint = 0, dist = Number.POSITIVE_INFINITY, i = 0; i < positions.length; i++) {
241
- var position2 = positions[i],
242
- curDist = end > position2 ? end - position2 : position2 - end;
243
- curDist < dist && (dist = curDist, closestPoint = i);
244
- }
245
- setPosition(closestPoint), animateTo(closestPoint);
246
- }
247
- },
248
- finish = function (_e, state2) {
249
- release({
250
- vy: state2.vy,
251
- dragAt: state2.dy
252
- });
253
- },
254
- previouslyScrolling = !1,
255
- onMoveShouldSet = function (e, param) {
256
- var {
257
- dy
258
- } = param;
259
- function getShouldSet() {
260
- if (e.target === providerProps.handleRef.current) return !0;
261
- if (scrollBridge.hasScrollableContent === !0) {
262
- if (scrollBridge.scrollLock) return !1;
263
- var isScrolled = scrollBridge.y !== 0,
264
- isDraggingUp = dy < 0,
265
- isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
266
- if (isScrolled) return previouslyScrolling = !0, !1;
267
- if (isNearTop && hasScrollView.current && isDraggingUp) return !1;
268
- }
269
- return Math.abs(dy) > 10;
270
- }
271
- var granted = getShouldSet();
272
- return granted && scrollBridge.setParentDragging(!0), granted;
273
- },
274
- grant = function () {
275
- setPanning(!0), stopSpring(), startY = at.current;
276
- },
277
- isExternalDrag = !1;
278
- return scrollBridge.drag = function (dy) {
279
- isExternalDrag || (isExternalDrag = !0, grant());
280
- var to = dy + startY;
281
- animatedNumber.setValue(resisted(to, minY), {
282
- type: "direct"
283
- });
284
- }, scrollBridge.release = release, scrollBridge.snapToPosition = function (positionIndex) {
285
- isExternalDrag = !1, previouslyScrolling = !1, setPanning(!1), setPosition(positionIndex), animateTo(positionIndex);
286
- }, PanResponder.create({
287
- onMoveShouldSetPanResponder: onMoveShouldSet,
288
- onPanResponderGrant: grant,
289
- onPanResponderMove: function (_e, param) {
290
- var {
291
- dy
292
- } = param,
293
- toFull = dy + startY,
294
- to = resisted(toFull, minY),
295
- isAtTop = to <= minY;
296
- isAtTop ? scrollBridge.setParentDragging(!1) : scrollBridge.setParentDragging(!0), animatedNumber.setValue(to, {
297
- type: "direct"
298
- });
299
- },
300
- onPanResponderEnd: finish,
301
- onPanResponderTerminate: finish,
302
- onPanResponderRelease: finish
303
- });
304
- }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]);
305
- React.useEffect(function () {
306
- isDragging || isHidden || !open || disableAnimation || !frameSize || !screenSize || animateTo(position, {
208
+ if (!isOpenAnimation && !openRef.current) setOpacity(0);
209
+ onAnimationComplete === null || onAnimationComplete === void 0 || onAnimationComplete({
210
+ open: isOpenAnimation
211
+ });
212
+ controller === null || controller === void 0 || (_controller_onAnimationComplete = controller.onAnimationComplete) == null || _controller_onAnimationComplete.call(controller, {
213
+ open: isOpenAnimation
214
+ });
215
+ };
216
+ if (!isOpenAnimation) opacityFallbackTimer.current = setTimeout(function () {
217
+ opacityFallbackTimer.current = null;
218
+ if (!openRef.current) setOpacity(0);
219
+ }, 1e3);
220
+ if (skipAdaptAnimation.current) {
221
+ skipAdaptAnimation.current = false;
222
+ animatedNumber.setValue(toValue, {
223
+ type: "timing",
224
+ duration: 0
225
+ }, animationCompleteCallback);
226
+ return;
227
+ }
228
+ animatedNumber.setValue(toValue, animationOverride || {
229
+ type: "spring",
230
+ ...transitionConfig
231
+ }, animationCompleteCallback);
232
+ });
233
+ useIsomorphicLayoutEffect(function () {
234
+ if (hasntMeasured && screenSize && frameSize) {
235
+ at.current = screenSize;
236
+ animatedNumber.setValue(screenSize, {
307
237
  type: "timing",
308
- duration: 250
238
+ duration: 0
239
+ }, function () {
240
+ setTimeout(function () {
241
+ setDisableAnimation(false);
242
+ }, 10);
309
243
  });
310
- }, [isKeyboardVisible, keyboardHeight]);
311
- var wasDragging = React.useRef(!1);
312
- React.useEffect(function () {
313
- if (isDragging) {
314
- wasDragging.current = !0;
315
- return;
244
+ return;
245
+ }
246
+ if (disableAnimation) return;
247
+ if (!frameSize || !screenSize || isHidden || hasntMeasured && !open) return;
248
+ animateTo(position);
249
+ if (position === -1) {
250
+ scrollBridge.scrollLock = false;
251
+ scrollBridge.scrollStartY = -1;
252
+ }
253
+ if (open && position >= 0) {
254
+ var isTopPosition = position === 0;
255
+ scrollBridge.isAtTop = isTopPosition;
256
+ if (isTopPosition) {
257
+ var _scrollBridge_setScrollEnabled;
258
+ scrollBridge.scrollLockY = void 0;
259
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
260
+ } else {
261
+ var _scrollBridge_setScrollEnabled1;
262
+ scrollBridge.scrollLockY = 0;
263
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false);
316
264
  }
317
- wasDragging.current && (wasDragging.current = !1, !(!frameSize || !screenSize || isHidden || !open) && animateTo(position));
318
- }, [isDragging]), React.useEffect(function () {
319
- !open && isKeyboardVisible && dismissKeyboard();
320
- }, [open]);
321
- var {
322
- panGesture,
323
- panGestureRef,
324
- gestureHandlerEnabled
325
- } = useGestureHandlerPan({
326
- positions: activePositions,
327
- frameSize,
328
- setPosition,
329
- animateTo,
330
- stopSpring,
331
- scrollBridge,
332
- setIsDragging,
333
- getCurrentPosition: function () {
334
- return at.current;
335
- },
336
- resisted,
337
- disableDrag,
338
- isShowingInnerSheet,
339
- setAnimatedPosition: function (val) {
340
- at.current = val, animatedNumber.setValue(val, {
341
- type: "direct"
342
- });
343
- },
344
- pauseKeyboardHandler
345
- }),
346
- handleAnimationViewLayout = useEvent(function (e) {
347
- var _e_nativeEvent;
348
- if (!(!open && stableFrameSize.current !== 0)) {
349
- var layoutHeight = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height,
350
- next = modal ? Math.min(layoutHeight, Dimensions.get(relativeDimensionTo).height) : layoutHeight;
351
- next && setFrameSize(next);
265
+ }
266
+ }, [hasntMeasured, disableAnimation, isHidden, frameSize, screenSize, open, position]);
267
+ var _props_disableDrag;
268
+ var disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller === null || controller === void 0 ? void 0 : controller.disableDrag;
269
+ useThemeName();
270
+ var [blockPan, setBlockPan] = React.useState(false);
271
+ var panResponder = React.useMemo(function () {
272
+ if (disableDrag) return;
273
+ if (!frameSize) return;
274
+ if (isShowingInnerSheet) return;
275
+ var minY = positions[0];
276
+ scrollBridge.paneMinY = minY;
277
+ var startY = at.current;
278
+ function setPanning(val) {
279
+ setIsDragging(val);
280
+ }
281
+ var release = function (param) {
282
+ var {
283
+ vy
284
+ } = param;
285
+ scrollBridge.setParentDragging(false);
286
+ if (scrollBridge.scrollLock) return;
287
+ isExternalDrag = false;
288
+ previouslyScrolling = false;
289
+ setPanning(false);
290
+ var end = at.current + frameSize * vy * .2;
291
+ var closestPoint = 0;
292
+ var dist = Number.POSITIVE_INFINITY;
293
+ for (var i = 0; i < positions.length; i++) {
294
+ var position2 = positions[i];
295
+ var curDist = end > position2 ? end - position2 : position2 - end;
296
+ if (curDist < dist) {
297
+ dist = curDist;
298
+ closestPoint = i;
352
299
  }
353
- }),
354
- handleMaxContentViewLayout = React.useCallback(function (e) {
355
- var _e_nativeEvent,
356
- next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, Dimensions.get(relativeDimensionTo).height);
357
- next && setMaxContentSize(next);
358
- }, []),
359
- animatedStyle = useAnimatedNumberStyle(animatedNumber, function (val) {
360
- "worklet";
361
-
362
- var translateY = frameSize === 0 ? hiddenSize : val;
363
- return {
364
- transform: [{
365
- translateY
366
- }]
367
- };
368
- }),
369
- [opacity, setOpacity] = React.useState(open ? 1 : 0);
370
- open && opacity === 0 && (setOpacity(1), opacityFallbackTimer.current && (clearTimeout(opacityFallbackTimer.current), opacityFallbackTimer.current = null));
371
- var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ?
372
- // Use dvh for modal (viewport-relative), % for inline (container-relative)
373
- `${maxSnapPoint}${isWeb && modal ? "dvh" : "%"}` : maxSnapPoint,
374
- setHasScrollView = React.useCallback(function (val) {
375
- hasScrollView.current = val;
376
- }, []),
377
- contents = /* @__PURE__ */_jsx(LayoutMeasurementController, {
378
- disable: !open,
379
- children: /* @__PURE__ */_jsx(ParentSheetContext.Provider, {
380
- value: nextParentContext,
381
- children: /* @__PURE__ */_jsx(SheetProvider, {
382
- ...providerProps,
383
- setHasScrollView,
384
- children: /* @__PURE__ */_jsxs(GestureSheetProvider, {
385
- isDragging,
386
- blockPan,
387
- setBlockPan,
388
- panGesture,
389
- panGestureRef,
390
- children: [/* @__PURE__ */_jsx(AnimatePresence, {
391
- custom: {
392
- open
393
- },
394
- children: shouldHideParentSheet || !open ? null : overlayComponent
395
- }), snapPointsMode !== "percent" && /* @__PURE__ */_jsx(View, {
396
- style: {
397
- opacity: 0,
398
- position: "absolute",
399
- top: 0,
400
- left: 0,
401
- right: 0,
402
- bottom: 0,
403
- pointerEvents: "none"
404
- },
405
- onLayout: handleMaxContentViewLayout
406
- }), /* @__PURE__ */_jsx(AnimatedView, {
407
- ref,
408
- onLayout: handleAnimationViewLayout,
409
- // @ts-ignore for CSS driver this is necessary to attach the transition
410
- // also motion driver at least though i suspect all drivers?
411
- transition: isDragging || disableAnimation ? null : transition,
412
- // @ts-ignore
413
- disableClassName: !0,
414
- style: [{
415
- position: "absolute",
416
- zIndex,
417
- width: "100%",
418
- height: forcedContentHeight,
419
- minHeight: forcedContentHeight,
420
- opacity: shouldHideParentSheet ? 0 : opacity,
421
- ...((shouldHideParentSheet || !open) && {
422
- pointerEvents: "none"
423
- })
424
- }, animatedStyle],
425
- children: (/* wrap children with plain RN View for panResponder - tamagui views no longer handle responder events on web */
426
- gestureHandlerEnabled && panGesture ? /* @__PURE__ */_jsx(GestureDetectorWrapper, {
427
- gesture: panGesture,
428
- style: {
429
- flex: 1
430
- },
431
- children: props.children
432
- }) : /* @__PURE__ */_jsx(View, {
433
- ...panResponder?.panHandlers,
434
- style: {
435
- flex: 1,
436
- width: "100%",
437
- height: "100%"
438
- },
439
- children: props.children
440
- }))
441
- })]
442
- })
443
- })
444
- })
300
+ }
301
+ setPosition(closestPoint);
302
+ animateTo(closestPoint);
303
+ };
304
+ var finish = function (_e, state2) {
305
+ release({
306
+ vy: state2.vy,
307
+ dragAt: state2.dy
445
308
  });
446
- if (needsPortalRepropagation()) {
447
- var adaptContext = useAdaptContext();
448
- contents = /* @__PURE__ */_jsx(ProvideAdaptContext, {
449
- ...adaptContext,
450
- children: (/* @ts-ignore */
451
- contents)
309
+ };
310
+ var previouslyScrolling = false;
311
+ var onMoveShouldSet = function (e, param) {
312
+ var {
313
+ dy
314
+ } = param;
315
+ function getShouldSet() {
316
+ if (e.target === providerProps.handleRef.current) return true;
317
+ if (scrollBridge.hasScrollableContent === true) {
318
+ if (scrollBridge.scrollLock) return false;
319
+ var isScrolled = scrollBridge.y !== 0;
320
+ var isDraggingUp = dy < 0;
321
+ var isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
322
+ if (isScrolled) return false;
323
+ if (isNearTop) {
324
+ if (hasScrollView.current && isDraggingUp) return false;
325
+ }
326
+ }
327
+ return Math.abs(dy) > 10;
328
+ }
329
+ var granted = getShouldSet();
330
+ if (granted) scrollBridge.setParentDragging(true);
331
+ return granted;
332
+ };
333
+ var grant = function () {
334
+ setPanning(true);
335
+ stopSpring();
336
+ startY = at.current;
337
+ };
338
+ var isExternalDrag = false;
339
+ scrollBridge.drag = function (dy) {
340
+ if (!isExternalDrag) {
341
+ isExternalDrag = true;
342
+ grant();
343
+ }
344
+ var to = dy + startY;
345
+ animatedNumber.setValue(resisted(to, minY), {
346
+ type: "direct"
452
347
  });
348
+ };
349
+ scrollBridge.release = release;
350
+ scrollBridge.snapToPosition = function (positionIndex) {
351
+ isExternalDrag = false;
352
+ setPanning(false);
353
+ setPosition(positionIndex);
354
+ animateTo(positionIndex);
355
+ };
356
+ return PanResponder.create({
357
+ onMoveShouldSetPanResponder: onMoveShouldSet,
358
+ onPanResponderGrant: grant,
359
+ onPanResponderMove: function (_e, param) {
360
+ var {
361
+ dy
362
+ } = param;
363
+ var to = resisted(dy + startY, minY);
364
+ if (to <= minY) scrollBridge.setParentDragging(false);else scrollBridge.setParentDragging(true);
365
+ animatedNumber.setValue(to, {
366
+ type: "direct"
367
+ });
368
+ },
369
+ onPanResponderEnd: finish,
370
+ onPanResponderTerminate: finish,
371
+ onPanResponderRelease: finish
372
+ });
373
+ }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]);
374
+ React.useEffect(function () {
375
+ if (isDragging || isHidden || !open || disableAnimation) return;
376
+ if (!frameSize || !screenSize) return;
377
+ animateTo(position, {
378
+ type: "timing",
379
+ duration: 250
380
+ });
381
+ }, [isKeyboardVisible, keyboardHeight]);
382
+ var wasDragging = React.useRef(false);
383
+ React.useEffect(function () {
384
+ if (isDragging) {
385
+ wasDragging.current = true;
386
+ return;
453
387
  }
454
- var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : !0;
455
- if (modal) {
456
- var modalContents = /* @__PURE__ */_jsx(Portal, {
457
- stackZIndex: zIndex,
458
- ...portalProps,
459
- children: shouldMountChildren && /* @__PURE__ */_jsx(ContainerComponent, {
460
- children: contents
461
- })
462
- });
463
- return isWeb ? modalContents : /* @__PURE__ */_jsx(SheetInsideSheetContext.Provider, {
464
- value: onInnerSheet,
465
- children: modalContents
388
+ if (!wasDragging.current) return;
389
+ wasDragging.current = false;
390
+ if (!frameSize || !screenSize || isHidden || !open) return;
391
+ animateTo(position);
392
+ }, [isDragging]);
393
+ React.useEffect(function () {
394
+ if (!open && isKeyboardVisible) dismissKeyboard();
395
+ }, [open]);
396
+ var {
397
+ panGesture,
398
+ panGestureRef,
399
+ gestureHandlerEnabled
400
+ } = useGestureHandlerPan({
401
+ positions: activePositions,
402
+ frameSize,
403
+ setPosition,
404
+ animateTo,
405
+ stopSpring,
406
+ scrollBridge,
407
+ setIsDragging,
408
+ getCurrentPosition: function () {
409
+ return at.current;
410
+ },
411
+ resisted,
412
+ disableDrag,
413
+ isShowingInnerSheet,
414
+ setAnimatedPosition: function (val) {
415
+ at.current = val;
416
+ animatedNumber.setValue(val, {
417
+ type: "direct"
466
418
  });
419
+ },
420
+ pauseKeyboardHandler
421
+ });
422
+ var handleAnimationViewLayout = useEvent(function (e) {
423
+ var _e_nativeEvent;
424
+ if (!open && stableFrameSize.current !== 0) return;
425
+ var layoutHeight = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height;
426
+ var next = modal ? Math.min(layoutHeight, Dimensions.get(relativeDimensionTo).height) : layoutHeight;
427
+ if (!next) return;
428
+ setFrameSize(next);
429
+ });
430
+ var handleMaxContentViewLayout = React.useCallback(function (e) {
431
+ var _e_nativeEvent;
432
+ var next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, Dimensions.get(relativeDimensionTo).height);
433
+ if (!next) return;
434
+ setMaxContentSize(next);
435
+ }, []);
436
+ var animatedStyle = useAnimatedNumberStyle(animatedNumber, React.useCallback(function (val) {
437
+ "worklet";
438
+
439
+ return {
440
+ transform: [{
441
+ translateY: frameSize === 0 ? hiddenSize : val
442
+ }]
443
+ };
444
+ }, [frameSize]));
445
+ var [opacity, setOpacity] = React.useState(open ? 1 : 0);
446
+ if (open && opacity === 0) {
447
+ setOpacity(1);
448
+ if (opacityFallbackTimer.current) {
449
+ clearTimeout(opacityFallbackTimer.current);
450
+ opacityFallbackTimer.current = null;
467
451
  }
468
- return contents;
452
+ }
453
+ var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ? `${maxSnapPoint}${isWeb ? modal ? "dvh" : "%" : "%"}` : maxSnapPoint;
454
+ var setHasScrollView = React.useCallback(function (val) {
455
+ hasScrollView.current = val;
456
+ }, []);
457
+ var contents = /* @__PURE__ */_jsx(LayoutMeasurementController, {
458
+ disable: !open,
459
+ children: /* @__PURE__ */_jsx(ParentSheetContext.Provider, {
460
+ value: nextParentContext,
461
+ children: /* @__PURE__ */_jsx(SheetProvider, {
462
+ ...providerProps,
463
+ setHasScrollView,
464
+ children: /* @__PURE__ */_jsxs(GestureSheetProvider, {
465
+ isDragging,
466
+ blockPan,
467
+ setBlockPan,
468
+ panGesture,
469
+ panGestureRef,
470
+ children: [/* @__PURE__ */_jsx(AnimatePresence, {
471
+ custom: {
472
+ open
473
+ },
474
+ children: shouldHideParentSheet || !open ? null : overlayComponent
475
+ }), snapPointsMode !== "percent" && /* @__PURE__ */_jsx(View, {
476
+ style: {
477
+ opacity: 0,
478
+ position: "absolute",
479
+ top: 0,
480
+ left: 0,
481
+ right: 0,
482
+ bottom: 0,
483
+ pointerEvents: "none"
484
+ },
485
+ onLayout: handleMaxContentViewLayout
486
+ }), /* @__PURE__ */_jsx(AnimatedView, {
487
+ ref,
488
+ onLayout: handleAnimationViewLayout,
489
+ transition: isDragging || disableAnimation ? null : transition,
490
+ disableClassName: true,
491
+ style: [{
492
+ position: "absolute",
493
+ zIndex,
494
+ width: "100%",
495
+ height: forcedContentHeight,
496
+ minHeight: forcedContentHeight,
497
+ opacity: !shouldHideParentSheet ? opacity : 0,
498
+ ...((shouldHideParentSheet || !open) && {
499
+ pointerEvents: "none"
500
+ })
501
+ }, animatedStyle],
502
+ children: gestureHandlerEnabled && panGesture ? /* @__PURE__ */_jsx(GestureDetectorWrapper, {
503
+ gesture: panGesture,
504
+ style: {
505
+ flex: 1
506
+ },
507
+ children: props.children
508
+ }) : /* @__PURE__ */_jsx(View, {
509
+ ...(panResponder === null || panResponder === void 0 ? void 0 : panResponder.panHandlers),
510
+ style: {
511
+ flex: 1,
512
+ width: "100%",
513
+ height: "100%"
514
+ },
515
+ children: props.children
516
+ })
517
+ })]
518
+ })
519
+ })
520
+ })
469
521
  });
522
+ if (needsPortalRepropagation()) contents = /* @__PURE__ */_jsx(ProvideAdaptContext, {
523
+ ...useAdaptContext(),
524
+ children: contents
525
+ });
526
+ var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : true;
527
+ if (modal) {
528
+ var modalContents = /* @__PURE__ */_jsx(Portal, {
529
+ stackZIndex: zIndex,
530
+ ...portalProps,
531
+ children: shouldMountChildren && /* @__PURE__ */_jsx(ContainerComponent, {
532
+ children: contents
533
+ })
534
+ });
535
+ if (isWeb) return modalContents;
536
+ return /* @__PURE__ */_jsx(SheetInsideSheetContext.Provider, {
537
+ value: onInnerSheet,
538
+ children: modalContents
539
+ });
540
+ }
541
+ return contents;
542
+ });
470
543
  function getYPositions(mode, point, screenSize, frameSize) {
471
544
  if (!screenSize || !frameSize) return 0;
472
545
  if (mode === "mixed") {
473
- if (typeof point == "number") return screenSize - Math.min(screenSize, Math.max(0, point));
546
+ if (typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
474
547
  if (point === "fit") return screenSize - Math.min(screenSize, frameSize);
475
548
  if (point.endsWith("%")) {
476
549
  var pct = Math.min(100, Math.max(0, Number(point.slice(0, -1)))) / 100;
477
- return Number.isNaN(pct) ? (console.warn("Invalid snapPoint percentage string"), 0) : Math.round(screenSize - pct * screenSize);
550
+ if (Number.isNaN(pct)) {
551
+ console.warn("Invalid snapPoint percentage string");
552
+ return 0;
553
+ }
554
+ return Math.round(screenSize - pct * screenSize);
478
555
  }
479
- return console.warn("Invalid snapPoint unknown value"), 0;
556
+ console.warn("Invalid snapPoint unknown value");
557
+ return 0;
558
+ }
559
+ if (mode === "fit") {
560
+ if (point === 0) return screenSize;
561
+ return screenSize - Math.min(screenSize, frameSize);
480
562
  }
481
- if (mode === "fit") return point === 0 ? screenSize : screenSize - Math.min(screenSize, frameSize);
482
- if (mode === "constant" && typeof point == "number") return screenSize - Math.min(screenSize, Math.max(0, point));
563
+ if (mode === "constant" && typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
483
564
  var pct1 = Math.min(100, Math.max(0, Number(point))) / 100;
484
- return Number.isNaN(pct1) ? (console.warn("Invalid snapPoint percentage"), 0) : Math.round(screenSize - pct1 * screenSize);
565
+ if (Number.isNaN(pct1)) {
566
+ console.warn("Invalid snapPoint percentage");
567
+ return 0;
568
+ }
569
+ return Math.round(screenSize - pct1 * screenSize);
485
570
  }
486
571
  export { SheetImplementationCustom };
487
572
  //# sourceMappingURL=SheetImplementationCustom.native.js.map