@hanzogui/sheet 7.3.0 → 8.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 (229) hide show
  1. package/.turbo/turbo-build.log +2 -0
  2. package/controller/index.cjs +2 -0
  3. package/controller/index.d.ts +5 -0
  4. package/controller/index.js +2 -0
  5. package/controller/index.native.cjs +2 -0
  6. package/controller/index.native.js +2 -0
  7. package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -1
  8. package/dist/cjs/SheetImplementationCustom.cjs +137 -74
  9. package/dist/cjs/SheetImplementationCustom.native.js +162 -83
  10. package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
  11. package/dist/cjs/SheetScrollView.cjs +155 -34
  12. package/dist/cjs/SheetScrollView.native.js +160 -35
  13. package/dist/cjs/SheetScrollView.native.js.map +1 -1
  14. package/dist/cjs/createSheet.cjs +7 -3
  15. package/dist/cjs/createSheet.native.js +7 -3
  16. package/dist/cjs/createSheet.native.js.map +1 -1
  17. package/dist/cjs/gestureState.cjs +13 -2
  18. package/dist/cjs/gestureState.native.js +14 -2
  19. package/dist/cjs/gestureState.native.js.map +1 -1
  20. package/dist/cjs/index.cjs +12 -1
  21. package/dist/cjs/index.native.js +11 -0
  22. package/dist/cjs/index.native.js.map +1 -1
  23. package/dist/cjs/keyboardAvoidance.cjs +93 -0
  24. package/dist/cjs/keyboardAvoidance.native.js +99 -0
  25. package/dist/cjs/keyboardAvoidance.native.js.map +1 -0
  26. package/dist/cjs/nativeSheet.cjs +3 -0
  27. package/dist/cjs/nativeSheet.native.js +3 -0
  28. package/dist/cjs/nativeSheet.native.js.map +1 -1
  29. package/dist/cjs/setupGestureHandler.cjs +9 -6
  30. package/dist/cjs/setupGestureHandler.native.js +11 -6
  31. package/dist/cjs/setupGestureHandler.native.js.map +1 -1
  32. package/dist/cjs/useGestureHandlerPan.cjs +86 -18
  33. package/dist/cjs/useGestureHandlerPan.native.js +91 -18
  34. package/dist/cjs/useGestureHandlerPan.native.js.map +1 -1
  35. package/dist/cjs/useKeyboardControllerSheet.cjs +68 -6
  36. package/dist/cjs/useSafeAreaInsets.cjs +44 -0
  37. package/dist/cjs/useSafeAreaInsets.native.js +48 -0
  38. package/dist/cjs/useSafeAreaInsets.native.js.map +1 -0
  39. package/dist/cjs/useSheetProviderProps.cjs +1 -1
  40. package/dist/cjs/useSheetProviderProps.native.js +1 -1
  41. package/dist/cjs/useSheetProviderProps.native.js.map +1 -1
  42. package/dist/cjs/useSheetScrollViewGestures.cjs +30 -5
  43. package/dist/cjs/useSheetScrollViewGestures.native.js +4 -0
  44. package/dist/cjs/useSheetScrollViewGestures.native.js.map +1 -1
  45. package/dist/cjs/webViewport.cjs +75 -0
  46. package/dist/cjs/webViewport.native.js +81 -0
  47. package/dist/cjs/webViewport.native.js.map +1 -0
  48. package/dist/esm/GestureDetectorWrapper.mjs.map +1 -1
  49. package/dist/esm/GestureDetectorWrapper.native.js.map +1 -1
  50. package/dist/esm/SheetImplementationCustom.mjs +143 -84
  51. package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
  52. package/dist/esm/SheetImplementationCustom.native.js +173 -102
  53. package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
  54. package/dist/esm/SheetScrollView.mjs +157 -36
  55. package/dist/esm/SheetScrollView.mjs.map +1 -1
  56. package/dist/esm/SheetScrollView.native.js +162 -37
  57. package/dist/esm/SheetScrollView.native.js.map +1 -1
  58. package/dist/esm/createSheet.mjs +9 -6
  59. package/dist/esm/createSheet.mjs.map +1 -1
  60. package/dist/esm/createSheet.native.js +19 -15
  61. package/dist/esm/createSheet.native.js.map +1 -1
  62. package/dist/esm/gestureState.mjs +13 -2
  63. package/dist/esm/gestureState.mjs.map +1 -1
  64. package/dist/esm/gestureState.native.js +14 -2
  65. package/dist/esm/gestureState.native.js.map +1 -1
  66. package/dist/esm/index.js +2 -0
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/index.mjs +2 -0
  69. package/dist/esm/index.mjs.map +1 -1
  70. package/dist/esm/index.native.js +2 -0
  71. package/dist/esm/index.native.js.map +1 -1
  72. package/dist/esm/keyboardAvoidance.mjs +66 -0
  73. package/dist/esm/keyboardAvoidance.mjs.map +1 -0
  74. package/dist/esm/keyboardAvoidance.native.js +69 -0
  75. package/dist/esm/keyboardAvoidance.native.js.map +1 -0
  76. package/dist/esm/nativeSheet.mjs +3 -0
  77. package/dist/esm/nativeSheet.mjs.map +1 -1
  78. package/dist/esm/nativeSheet.native.js +3 -0
  79. package/dist/esm/nativeSheet.native.js.map +1 -1
  80. package/dist/esm/setupGestureHandler.mjs +9 -6
  81. package/dist/esm/setupGestureHandler.mjs.map +1 -1
  82. package/dist/esm/setupGestureHandler.native.js +11 -6
  83. package/dist/esm/setupGestureHandler.native.js.map +1 -1
  84. package/dist/esm/useGestureHandlerPan.mjs +87 -19
  85. package/dist/esm/useGestureHandlerPan.mjs.map +1 -1
  86. package/dist/esm/useGestureHandlerPan.native.js +92 -19
  87. package/dist/esm/useGestureHandlerPan.native.js.map +1 -1
  88. package/dist/esm/useKeyboardControllerSheet.mjs +69 -7
  89. package/dist/esm/useKeyboardControllerSheet.mjs.map +1 -1
  90. package/dist/esm/useSafeAreaInsets.mjs +7 -0
  91. package/dist/esm/useSafeAreaInsets.mjs.map +1 -0
  92. package/dist/esm/useSafeAreaInsets.native.js +8 -0
  93. package/dist/esm/useSafeAreaInsets.native.js.map +1 -0
  94. package/dist/esm/useSheetProviderProps.mjs +1 -1
  95. package/dist/esm/useSheetProviderProps.mjs.map +1 -1
  96. package/dist/esm/useSheetProviderProps.native.js +1 -1
  97. package/dist/esm/useSheetProviderProps.native.js.map +1 -1
  98. package/dist/esm/useSheetScrollViewGestures.mjs +30 -5
  99. package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -1
  100. package/dist/esm/useSheetScrollViewGestures.native.js +4 -0
  101. package/dist/esm/useSheetScrollViewGestures.native.js.map +1 -1
  102. package/dist/esm/webViewport.mjs +43 -0
  103. package/dist/esm/webViewport.mjs.map +1 -0
  104. package/dist/esm/webViewport.native.js +46 -0
  105. package/dist/esm/webViewport.native.js.map +1 -0
  106. package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -1
  107. package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -1
  108. package/dist/jsx/SheetImplementationCustom.mjs +143 -84
  109. package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
  110. package/dist/jsx/SheetImplementationCustom.native.js +162 -83
  111. package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
  112. package/dist/jsx/SheetScrollView.mjs +157 -36
  113. package/dist/jsx/SheetScrollView.mjs.map +1 -1
  114. package/dist/jsx/SheetScrollView.native.js +160 -35
  115. package/dist/jsx/SheetScrollView.native.js.map +1 -1
  116. package/dist/jsx/createSheet.mjs +9 -6
  117. package/dist/jsx/createSheet.mjs.map +1 -1
  118. package/dist/jsx/createSheet.native.js +7 -3
  119. package/dist/jsx/createSheet.native.js.map +1 -1
  120. package/dist/jsx/gestureState.mjs +13 -2
  121. package/dist/jsx/gestureState.mjs.map +1 -1
  122. package/dist/jsx/gestureState.native.js +14 -2
  123. package/dist/jsx/gestureState.native.js.map +1 -1
  124. package/dist/jsx/index.js +2 -0
  125. package/dist/jsx/index.js.map +1 -1
  126. package/dist/jsx/index.mjs +2 -0
  127. package/dist/jsx/index.mjs.map +1 -1
  128. package/dist/jsx/index.native.js +11 -0
  129. package/dist/jsx/index.native.js.map +1 -1
  130. package/dist/jsx/keyboardAvoidance.mjs +66 -0
  131. package/dist/jsx/keyboardAvoidance.mjs.map +1 -0
  132. package/dist/jsx/keyboardAvoidance.native.js +99 -0
  133. package/dist/jsx/keyboardAvoidance.native.js.map +1 -0
  134. package/dist/jsx/nativeSheet.mjs +3 -0
  135. package/dist/jsx/nativeSheet.mjs.map +1 -1
  136. package/dist/jsx/nativeSheet.native.js +3 -0
  137. package/dist/jsx/nativeSheet.native.js.map +1 -1
  138. package/dist/jsx/setupGestureHandler.mjs +9 -6
  139. package/dist/jsx/setupGestureHandler.mjs.map +1 -1
  140. package/dist/jsx/setupGestureHandler.native.js +11 -6
  141. package/dist/jsx/setupGestureHandler.native.js.map +1 -1
  142. package/dist/jsx/useGestureHandlerPan.mjs +87 -19
  143. package/dist/jsx/useGestureHandlerPan.mjs.map +1 -1
  144. package/dist/jsx/useGestureHandlerPan.native.js +91 -18
  145. package/dist/jsx/useGestureHandlerPan.native.js.map +1 -1
  146. package/dist/jsx/useKeyboardControllerSheet.mjs +69 -7
  147. package/dist/jsx/useKeyboardControllerSheet.mjs.map +1 -1
  148. package/dist/jsx/useSafeAreaInsets.mjs +7 -0
  149. package/dist/jsx/useSafeAreaInsets.mjs.map +1 -0
  150. package/dist/jsx/useSafeAreaInsets.native.js +48 -0
  151. package/dist/jsx/useSafeAreaInsets.native.js.map +1 -0
  152. package/dist/jsx/useSheetProviderProps.mjs +1 -1
  153. package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
  154. package/dist/jsx/useSheetProviderProps.native.js +1 -1
  155. package/dist/jsx/useSheetProviderProps.native.js.map +1 -1
  156. package/dist/jsx/useSheetScrollViewGestures.mjs +30 -5
  157. package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -1
  158. package/dist/jsx/useSheetScrollViewGestures.native.js +4 -0
  159. package/dist/jsx/useSheetScrollViewGestures.native.js.map +1 -1
  160. package/dist/jsx/webViewport.mjs +43 -0
  161. package/dist/jsx/webViewport.mjs.map +1 -0
  162. package/dist/jsx/webViewport.native.js +81 -0
  163. package/dist/jsx/webViewport.native.js.map +1 -0
  164. package/next.md +78 -0
  165. package/package.json +30 -48
  166. package/setup-gesture-handler/index.cjs +2 -0
  167. package/setup-gesture-handler/index.js +2 -0
  168. package/setup-gesture-handler/index.native.cjs +2 -0
  169. package/setup-gesture-handler/index.native.js +2 -0
  170. package/src/GestureDetectorWrapper.tsx +0 -3
  171. package/src/SheetImplementationCustom.tsx +387 -127
  172. package/src/SheetScrollView.tsx +195 -22
  173. package/src/createSheet.tsx +20 -7
  174. package/src/gestureState.ts +22 -2
  175. package/src/index.ts +4 -0
  176. package/src/keyboardAvoidance.ts +121 -0
  177. package/src/nativeSheet.tsx +8 -1
  178. package/src/setupGestureHandler.ts +14 -5
  179. package/src/types.tsx +20 -1
  180. package/src/useGestureHandlerPan.tsx +94 -35
  181. package/src/useKeyboardControllerSheet.ts +127 -10
  182. package/src/useSafeAreaInsets.native.ts +29 -0
  183. package/src/useSafeAreaInsets.ts +19 -0
  184. package/src/useSheetProviderProps.tsx +12 -1
  185. package/src/useSheetScrollViewGestures.native.ts +4 -0
  186. package/src/useSheetScrollViewGestures.ts +52 -5
  187. package/src/webViewport.ts +100 -0
  188. package/test/keyboardAvoidance.test.ts +269 -0
  189. package/tsconfig.json +57 -0
  190. package/types/GestureDetectorWrapper.d.ts +1 -1
  191. package/types/GestureDetectorWrapper.d.ts.map +1 -1
  192. package/types/GestureSheetContext.d.ts +1 -1
  193. package/types/GestureSheetContext.d.ts.map +1 -1
  194. package/types/Sheet.d.ts +6 -5
  195. package/types/Sheet.d.ts.map +1 -1
  196. package/types/SheetContext.d.ts +5 -2
  197. package/types/SheetContext.d.ts.map +1 -1
  198. package/types/SheetController.d.ts +1 -2
  199. package/types/SheetController.d.ts.map +1 -1
  200. package/types/SheetImplementationCustom.d.ts +1 -0
  201. package/types/SheetImplementationCustom.d.ts.map +1 -1
  202. package/types/SheetScrollView.d.ts.map +1 -1
  203. package/types/createSheet.d.ts +13 -12
  204. package/types/createSheet.d.ts.map +1 -1
  205. package/types/gestureState.d.ts.map +1 -1
  206. package/types/index.d.ts +1 -0
  207. package/types/index.d.ts.map +1 -1
  208. package/types/keyboardAvoidance.d.ts +26 -0
  209. package/types/keyboardAvoidance.d.ts.map +1 -0
  210. package/types/nativeSheet.d.ts.map +1 -1
  211. package/types/setupGestureHandler.d.ts.map +1 -1
  212. package/types/types.d.ts +10 -1
  213. package/types/types.d.ts.map +1 -1
  214. package/types/useGestureHandlerPan.d.ts +4 -1
  215. package/types/useGestureHandlerPan.d.ts.map +1 -1
  216. package/types/useKeyboardControllerSheet.d.ts +14 -3
  217. package/types/useKeyboardControllerSheet.d.ts.map +1 -1
  218. package/types/useSafeAreaInsets.d.ts +10 -0
  219. package/types/useSafeAreaInsets.d.ts.map +1 -0
  220. package/types/useSafeAreaInsets.native.d.ts +20 -0
  221. package/types/useSafeAreaInsets.native.d.ts.map +1 -0
  222. package/types/useSheetProviderProps.d.ts +3 -0
  223. package/types/useSheetProviderProps.d.ts.map +1 -1
  224. package/types/useSheetScrollViewGestures.d.ts +2 -1
  225. package/types/useSheetScrollViewGestures.d.ts.map +1 -1
  226. package/types/useSheetScrollViewGestures.native.d.ts.map +1 -1
  227. package/types/webViewport.d.ts +36 -0
  228. package/types/webViewport.d.ts.map +1 -0
  229. package/LICENSE +0 -42
@@ -1,32 +1,44 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { ProvideAdaptContext, useAdaptContext } from "@hanzogui/adapt";
3
3
  import { AnimatePresence } from "@hanzogui/animate-presence";
4
4
  import { useComposedRefs } from "@hanzogui/compose-refs";
5
5
  import { isWeb, useIsomorphicLayoutEffect } from "@hanzogui/constants";
6
- import { LayoutMeasurementController, View as GuiView, useConfiguration, useDidFinishSSR, useEvent, useThemeName } from "@hanzogui/core";
7
- import { getSafeArea } from "@hanzogui/native";
8
- import { needsPortalRepropagation, Portal } from "@hanzogui/portal";
6
+ import { LayoutMeasurementController, View, useConfiguration, useDidFinishSSR, useEvent, useThemeName } from "@hanzogui/core";
7
+ import { Portal, needsPortalRepropagation } from "@hanzogui/portal";
9
8
  import React, { useState } from "react";
10
- import { Dimensions, PanResponder, View } from "react-native";
9
+ import { Dimensions, PanResponder, View as View$1 } from "react-native";
11
10
  import { ParentSheetContext, SheetInsideSheetContext } from "./contexts.native.js";
12
11
  import { GestureDetectorWrapper } from "./GestureDetectorWrapper.native.js";
12
+ import { getGestureHandlerState } from "./gestureState.native.js";
13
13
  import { GestureSheetProvider } from "./GestureSheetContext.native.js";
14
14
  import { resisted } from "./helpers.native.js";
15
+ import { getKeyboardAdjustedSheetY, getKeyboardOccludedHeight, getSheetReleasePosition } from "./keyboardAvoidance.native.js";
16
+ import { MIN_KEYBOARD_HEIGHT, getMaxViewportHeight, getStableLayoutViewportHeight, getWebKeyboardResizeHeight, getWebVisualViewportOffsetTop } from "./webViewport.native.js";
15
17
  import { SheetProvider } from "./SheetContext.native.js";
16
18
  import { useGestureHandlerPan } from "./useGestureHandlerPan.native.js";
17
19
  import { useKeyboardControllerSheet } from "./useKeyboardControllerSheet.native.js";
20
+ import { SafeAreaInsetsContext, useSafeAreaInsets } from "./useSafeAreaInsets.native.js";
18
21
  import { useSheetOpenState } from "./useSheetOpenState.native.js";
19
22
  import { useSheetProviderProps } from "./useSheetProviderProps.native.js";
20
23
  var hiddenSize = 10000.1;
21
- var _cachedSafeAreaTop;
22
- function getSafeAreaTopInset() {
23
- if (_cachedSafeAreaTop !== void 0) return _cachedSafeAreaTop;
24
- _cachedSafeAreaTop = getSafeArea().getInsets().top;
25
- return _cachedSafeAreaTop;
26
- }
24
+ var rnghRootStyleOpen = {
25
+ width: "100%",
26
+ height: "100%"
27
+ };
28
+ var rnghRootStyleClosed = {
29
+ width: "100%",
30
+ height: 0
31
+ };
27
32
  var relativeDimensionTo = isWeb ? "window" : "screen";
33
+ function getStableViewportHeight() {
34
+ if (isWeb && typeof window !== "undefined") return getStableLayoutViewportHeight();
35
+ return Dimensions.get(relativeDimensionTo).height;
36
+ }
28
37
  var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetImplementationCustom2(props, forwardedRef) {
29
38
  var parentSheet = React.useContext(ParentSheetContext);
39
+ var safeAreaInsets = useSafeAreaInsets();
40
+ var _safeAreaInsets_top;
41
+ var safeAreaTopInset = (_safeAreaInsets_top = safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.top) !== null && _safeAreaInsets_top !== void 0 ? _safeAreaInsets_top : 0;
30
42
  var {
31
43
  transition,
32
44
  transitionConfig: transitionConfigProp,
@@ -34,6 +46,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
34
46
  zIndex = parentSheet.zIndex + 1,
35
47
  moveOnKeyboardChange = false,
36
48
  unmountChildrenWhenHidden = false,
49
+ disableTransparencyHide = false,
37
50
  portalProps,
38
51
  containerComponent: ContainerComponent = React.Fragment,
39
52
  onAnimationComplete
@@ -46,6 +59,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
46
59
  var {
47
60
  frameSize,
48
61
  setFrameSize,
62
+ dismissOnSnapToBottom,
49
63
  snapPoints,
50
64
  snapPointsMode,
51
65
  hasFit,
@@ -63,8 +77,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
63
77
  } = state;
64
78
  var openRef = React.useRef(open);
65
79
  openRef.current = open;
66
- var sheetRef = React.useRef(void 0);
67
- var ref = useComposedRefs(forwardedRef, sheetRef, providerProps.contentRef);
80
+ var ref = useComposedRefs(forwardedRef, React.useRef(void 0), providerProps.contentRef);
68
81
  var {
69
82
  animationDriver
70
83
  } = useConfiguration();
@@ -85,16 +98,6 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
85
98
  var onInnerSheet = React.useCallback(function (hasChild) {
86
99
  setIsShowingInnerSheet(hasChild);
87
100
  }, []);
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
101
  var {
99
102
  keyboardHeight,
100
103
  isKeyboardVisible,
@@ -102,8 +105,25 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
102
105
  pauseKeyboardHandler,
103
106
  flushPendingHide
104
107
  } = useKeyboardControllerSheet({
105
- enabled: !isWeb && Boolean(moveOnKeyboardChange)
108
+ enabled: Boolean(moveOnKeyboardChange)
106
109
  });
110
+ var stableFrameSize = React.useRef(frameSize);
111
+ React.useEffect(function () {
112
+ if (open && frameSize) stableFrameSize.current = frameSize;
113
+ }, [open, frameSize]);
114
+ var isWebKbSheet = isWeb && hasFit && moveOnKeyboardChange;
115
+ var isNativeKbFitSheet = !isWeb && hasFit && Boolean(moveOnKeyboardChange);
116
+ var preKeyboardFrameSize = React.useRef(0);
117
+ React.useEffect(function () {
118
+ if (isNativeKbFitSheet && open && !isKeyboardVisible && frameSize > 0) preKeyboardFrameSize.current = frameSize;
119
+ }, [isNativeKbFitSheet, open, isKeyboardVisible, frameSize]);
120
+ var effScreenSize = isWebKbSheet ? getStableViewportHeight() : screenSize;
121
+ var effectiveFrameSize = open ? frameSize : stableFrameSize.current || frameSize;
122
+ var positions = React.useMemo(function () {
123
+ return snapPoints.map(function (point) {
124
+ return getYPositions(snapPointsMode, point, effScreenSize, effectiveFrameSize);
125
+ });
126
+ }, [effScreenSize, effectiveFrameSize, snapPoints, snapPointsMode]);
107
127
  var [isDragging, setIsDragging_] = React.useState(false);
108
128
  var isDraggingRef = React.useRef(false);
109
129
  var setIsDragging = React.useCallback(function (val) {
@@ -116,23 +136,33 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
116
136
  var activePositions = React.useMemo(function () {
117
137
  if (isDragging || isDraggingRef.current) return activePositionsRef.current;
118
138
  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);
139
+ if (!isKeyboardVisible || keyboardHeight <= 0) result = positions;else result = positions.map(function (p) {
140
+ return getKeyboardAdjustedSheetY({
141
+ sheetY: p,
142
+ screenSize: effScreenSize,
143
+ isKeyboardVisible,
144
+ keyboardHeight,
145
+ shouldTranslate: true,
146
+ safeAreaTop: isWeb ? getWebVisualViewportOffsetTop() : safeAreaTopInset
124
147
  });
125
- }
148
+ });
126
149
  activePositionsRef.current = result;
127
150
  return result;
128
- }, [positions, isKeyboardVisible, keyboardHeight, screenSize, isDragging]);
151
+ }, [positions, isKeyboardVisible, keyboardHeight, effScreenSize, isDragging, safeAreaTopInset]);
152
+ var keyboardOccludedHeight = getKeyboardOccludedHeight({
153
+ frameSize: effectiveFrameSize,
154
+ isKeyboardVisible,
155
+ keyboardHeight,
156
+ screenSize: effScreenSize,
157
+ sheetY: position >= 0 ? activePositions[position] : void 0
158
+ });
159
+ var keyboardStableFrameHeight = isWebKbSheet && isKeyboardVisible && frameSize > 0 ? frameSize : isNativeKbFitSheet && isKeyboardVisible && preKeyboardFrameSize.current > 0 ? preKeyboardFrameSize.current : 0;
129
160
  var {
130
161
  useAnimatedNumber,
131
- useAnimatedNumberStyle,
132
- useAnimatedNumberReaction
162
+ useAnimatedNumberStyle
133
163
  } = animationDriver;
134
164
  var _animationDriver_View;
135
- var AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : GuiView;
165
+ var AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : View;
136
166
  useIsomorphicLayoutEffect(function () {
137
167
  if (!(sheetInsideSheet && open)) return;
138
168
  sheetInsideSheet(true);
@@ -154,33 +184,51 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
154
184
  if (controller === null || controller === void 0 ? void 0 : controller.skipNextAnimation) skipAdaptAnimation.current = true;
155
185
  var hasScrollView = React.useRef(false);
156
186
  var opacityFallbackTimer = React.useRef(null);
157
- useAnimatedNumberReaction({
158
- value: animatedNumber,
159
- hostRef: sheetRef
160
- }, React.useCallback(function (value) {
187
+ var syncAnimatedPosition = useEvent(function (value) {
161
188
  at.current = value;
162
189
  scrollBridge.paneY = value;
163
190
  var minY = activePositions[0];
164
191
  var wasAtTop = scrollBridge.isAtTop;
165
192
  var nowAtTop = value <= minY + 5;
166
- if (wasAtTop !== nowAtTop) {
167
- scrollBridge.isAtTop = nowAtTop;
168
- if (nowAtTop) {
169
- var _scrollBridge_setScrollEnabled;
193
+ if (wasAtTop === nowAtTop) return;
194
+ scrollBridge.isAtTop = nowAtTop;
195
+ if (nowAtTop) {
196
+ var _scrollBridge_setScrollEnabled;
197
+ if (scrollBridge.lockScrollAtTop) {
198
+ var _scrollBridge_setScrollEnabled1;
170
199
  if (scrollBridge.y > 0) {
171
200
  var _scrollBridge_forceScrollTo;
172
201
  (_scrollBridge_forceScrollTo = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo === void 0 || _scrollBridge_forceScrollTo.call(scrollBridge, 0);
173
202
  scrollBridge.y = 0;
174
203
  }
175
- scrollBridge.scrollLockY = void 0;
176
- (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
177
- } else {
178
- var _scrollBridge_setScrollEnabled1;
179
204
  scrollBridge.scrollLockY = 0;
180
- (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false);
205
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false, 0);
206
+ return;
207
+ }
208
+ if (scrollBridge.y > 0) {
209
+ var _scrollBridge_forceScrollTo1;
210
+ (_scrollBridge_forceScrollTo1 = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo1 === void 0 || _scrollBridge_forceScrollTo1.call(scrollBridge, 0);
211
+ scrollBridge.y = 0;
181
212
  }
213
+ scrollBridge.scrollLockY = void 0;
214
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
215
+ } else {
216
+ var _scrollBridge_setScrollEnabled2;
217
+ scrollBridge.scrollLockY = 0;
218
+ (_scrollBridge_setScrollEnabled2 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled2 === void 0 || _scrollBridge_setScrollEnabled2.call(scrollBridge, false);
182
219
  }
183
- }, [animationDriver, activePositions]));
220
+ });
221
+ var setAnimatedPositionDirect = useEvent(function (value) {
222
+ syncAnimatedPosition(value);
223
+ animatedNumber.setValue(value, {
224
+ type: "direct"
225
+ });
226
+ });
227
+ var getAnimatedPosition = useEvent(function () {
228
+ var value = animatedNumber.getValue();
229
+ syncAnimatedPosition(value);
230
+ return value;
231
+ });
184
232
  function stopSpring() {
185
233
  animatedNumber.stop();
186
234
  if (scrollBridge.onFinishAnimate) {
@@ -190,7 +238,8 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
190
238
  }
191
239
  var animateTo = useEvent(function (position2, animationOverride) {
192
240
  if (frameSize === 0) return;
193
- var toValue = isHidden || position2 === -1 ? screenSize : activePositions[position2];
241
+ var closeTarget = isWeb ? Math.max(effScreenSize, getMaxViewportHeight()) : effScreenSize;
242
+ var toValue = isHidden || position2 === -1 ? closeTarget : activePositions[position2];
194
243
  if (at.current === toValue) return;
195
244
  at.current = toValue;
196
245
  stopSpring();
@@ -201,6 +250,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
201
250
  }
202
251
  var animationCompleteCallback = function () {
203
252
  var _controller_onAnimationComplete;
253
+ syncAnimatedPosition(toValue);
204
254
  if (opacityFallbackTimer.current) {
205
255
  clearTimeout(opacityFallbackTimer.current);
206
256
  opacityFallbackTimer.current = null;
@@ -237,6 +287,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
237
287
  type: "timing",
238
288
  duration: 0
239
289
  }, function () {
290
+ syncAnimatedPosition(screenSize);
240
291
  setTimeout(function () {
241
292
  setDisableAnimation(false);
242
293
  }, 10);
@@ -244,6 +295,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
244
295
  return;
245
296
  }
246
297
  if (disableAnimation) return;
298
+ if (isDraggingRef.current) return;
247
299
  if (!frameSize || !screenSize || isHidden || hasntMeasured && !open) return;
248
300
  animateTo(position);
249
301
  if (position === -1) {
@@ -272,7 +324,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
272
324
  if (disableDrag) return;
273
325
  if (!frameSize) return;
274
326
  if (isShowingInnerSheet) return;
275
- var minY = positions[0];
327
+ var minY = activePositions[0];
276
328
  scrollBridge.paneMinY = minY;
277
329
  var startY = at.current;
278
330
  function setPanning(val) {
@@ -287,17 +339,17 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
287
339
  isExternalDrag = false;
288
340
  previouslyScrolling = false;
289
341
  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;
299
- }
300
- }
342
+ var currentPos = at.current;
343
+ var closestPoint = getSheetReleasePosition({
344
+ positions: activePositions,
345
+ projectedEnd: currentPos + frameSize * vy * .2,
346
+ currentPosition: currentPos,
347
+ frameSize,
348
+ dismissOnSnapToBottom,
349
+ snapPointsMode,
350
+ isKeyboardVisible,
351
+ isWeb
352
+ });
301
353
  setPosition(closestPoint);
302
354
  animateTo(closestPoint);
303
355
  };
@@ -314,6 +366,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
314
366
  } = param;
315
367
  function getShouldSet() {
316
368
  if (e.target === providerProps.handleRef.current) return true;
369
+ if (scrollBridge.scrollNodeTouched) return false;
317
370
  if (scrollBridge.hasScrollableContent === true) {
318
371
  if (scrollBridge.scrollLock) return false;
319
372
  var isScrolled = scrollBridge.y !== 0;
@@ -333,18 +386,19 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
333
386
  var grant = function () {
334
387
  setPanning(true);
335
388
  stopSpring();
336
- startY = at.current;
389
+ startY = getAnimatedPosition();
337
390
  };
338
391
  var isExternalDrag = false;
392
+ scrollBridge.startPanDrag = function () {
393
+ isExternalDrag = true;
394
+ grant();
395
+ };
339
396
  scrollBridge.drag = function (dy) {
340
397
  if (!isExternalDrag) {
341
398
  isExternalDrag = true;
342
399
  grant();
343
400
  }
344
- var to = dy + startY;
345
- animatedNumber.setValue(resisted(to, minY), {
346
- type: "direct"
347
- });
401
+ setAnimatedPositionDirect(resisted(dy + startY, minY));
348
402
  };
349
403
  scrollBridge.release = release;
350
404
  scrollBridge.snapToPosition = function (positionIndex) {
@@ -355,6 +409,9 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
355
409
  };
356
410
  return PanResponder.create({
357
411
  onMoveShouldSetPanResponder: onMoveShouldSet,
412
+ onPanResponderTerminationRequest: function () {
413
+ return false;
414
+ },
358
415
  onPanResponderGrant: grant,
359
416
  onPanResponderMove: function (_e, param) {
360
417
  var {
@@ -362,15 +419,13 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
362
419
  } = param;
363
420
  var to = resisted(dy + startY, minY);
364
421
  if (to <= minY) scrollBridge.setParentDragging(false);else scrollBridge.setParentDragging(true);
365
- animatedNumber.setValue(to, {
366
- type: "direct"
367
- });
422
+ setAnimatedPositionDirect(to);
368
423
  },
369
424
  onPanResponderEnd: finish,
370
425
  onPanResponderTerminate: finish,
371
426
  onPanResponderRelease: finish
372
427
  });
373
- }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, positions, setPosition]);
428
+ }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, activePositions, setPosition, dismissOnSnapToBottom, snapPointsMode]);
374
429
  React.useEffect(function () {
375
430
  if (isDragging || isHidden || !open || disableAnimation) return;
376
431
  if (!frameSize || !screenSize) return;
@@ -391,7 +446,11 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
391
446
  animateTo(position);
392
447
  }, [isDragging]);
393
448
  React.useEffect(function () {
394
- if (!open && isKeyboardVisible) dismissKeyboard();
449
+ if (!open && isKeyboardVisible) {
450
+ dismissKeyboard();
451
+ pauseKeyboardHandler.current = false;
452
+ flushPendingHide();
453
+ }
395
454
  }, [open]);
396
455
  var {
397
456
  panGesture,
@@ -405,34 +464,35 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
405
464
  stopSpring,
406
465
  scrollBridge,
407
466
  setIsDragging,
408
- getCurrentPosition: function () {
409
- return at.current;
410
- },
467
+ getCurrentPosition: getAnimatedPosition,
411
468
  resisted,
412
469
  disableDrag,
413
470
  isShowingInnerSheet,
414
- setAnimatedPosition: function (val) {
415
- at.current = val;
416
- animatedNumber.setValue(val, {
417
- type: "direct"
418
- });
419
- },
471
+ setAnimatedPosition: setAnimatedPositionDirect,
472
+ dismissOnSnapToBottom,
473
+ snapPointsMode,
474
+ isKeyboardVisible,
420
475
  pauseKeyboardHandler
421
476
  });
477
+ var ignoreLayoutForKeyboard = useEvent(function () {
478
+ return isWeb && moveOnKeyboardChange && getWebKeyboardResizeHeight() >= MIN_KEYBOARD_HEIGHT;
479
+ });
422
480
  var handleAnimationViewLayout = useEvent(function (e) {
423
481
  var _e_nativeEvent;
424
482
  if (!open && stableFrameSize.current !== 0) return;
425
483
  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;
484
+ if (ignoreLayoutForKeyboard() && frameSize > 0) return;
485
+ var next = modal ? Math.min(layoutHeight, getStableViewportHeight()) : layoutHeight;
427
486
  if (!next) return;
428
- setFrameSize(next);
487
+ setFrameSize(Math.round(next));
429
488
  });
430
489
  var handleMaxContentViewLayout = React.useCallback(function (e) {
431
490
  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);
491
+ if (ignoreLayoutForKeyboard() && screenSize > 0) return;
492
+ var next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, getStableViewportHeight());
433
493
  if (!next) return;
434
- setMaxContentSize(next);
435
- }, []);
494
+ setMaxContentSize(Math.round(next));
495
+ }, [ignoreLayoutForKeyboard, screenSize]);
436
496
  var animatedStyle = useAnimatedNumberStyle(animatedNumber, React.useCallback(function (val) {
437
497
  "worklet";
438
498
 
@@ -454,25 +514,28 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
454
514
  var setHasScrollView = React.useCallback(function (val) {
455
515
  hasScrollView.current = val;
456
516
  }, []);
457
- var contents = /* @__PURE__ */_jsx(LayoutMeasurementController, {
517
+ var contents = /* @__PURE__ */jsx(LayoutMeasurementController, {
458
518
  disable: !open,
459
- children: /* @__PURE__ */_jsx(ParentSheetContext.Provider, {
519
+ children: /* @__PURE__ */jsx(ParentSheetContext.Provider, {
460
520
  value: nextParentContext,
461
- children: /* @__PURE__ */_jsx(SheetProvider, {
521
+ children: /* @__PURE__ */jsx(SheetProvider, {
462
522
  ...providerProps,
523
+ keyboardOccludedHeight,
524
+ isKeyboardVisible,
525
+ keyboardStableFrameHeight,
463
526
  setHasScrollView,
464
- children: /* @__PURE__ */_jsxs(GestureSheetProvider, {
527
+ children: /* @__PURE__ */jsxs(GestureSheetProvider, {
465
528
  isDragging,
466
529
  blockPan,
467
530
  setBlockPan,
468
531
  panGesture,
469
532
  panGestureRef,
470
- children: [/* @__PURE__ */_jsx(AnimatePresence, {
533
+ children: [/* @__PURE__ */jsx(AnimatePresence, {
471
534
  custom: {
472
535
  open
473
536
  },
474
537
  children: shouldHideParentSheet || !open ? null : overlayComponent
475
- }), snapPointsMode !== "percent" && /* @__PURE__ */_jsx(View, {
538
+ }), snapPointsMode !== "percent" && /* @__PURE__ */jsx(View$1, {
476
539
  style: {
477
540
  opacity: 0,
478
541
  position: "absolute",
@@ -483,7 +546,7 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
483
546
  pointerEvents: "none"
484
547
  },
485
548
  onLayout: handleMaxContentViewLayout
486
- }), /* @__PURE__ */_jsx(AnimatedView, {
549
+ }), /* @__PURE__ */jsx(AnimatedView, {
487
550
  ref,
488
551
  onLayout: handleAnimationViewLayout,
489
552
  transition: isDragging || disableAnimation ? null : transition,
@@ -494,18 +557,18 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
494
557
  width: "100%",
495
558
  height: forcedContentHeight,
496
559
  minHeight: forcedContentHeight,
497
- opacity: !shouldHideParentSheet ? opacity : 0,
560
+ opacity: shouldHideParentSheet ? 0 : disableTransparencyHide ? 1 : opacity,
498
561
  ...((shouldHideParentSheet || !open) && {
499
562
  pointerEvents: "none"
500
563
  })
501
564
  }, animatedStyle],
502
- children: gestureHandlerEnabled && panGesture ? /* @__PURE__ */_jsx(GestureDetectorWrapper, {
565
+ children: gestureHandlerEnabled && panGesture ? /* @__PURE__ */jsx(GestureDetectorWrapper, {
503
566
  gesture: panGesture,
504
567
  style: {
505
568
  flex: 1
506
569
  },
507
570
  children: props.children
508
- }) : /* @__PURE__ */_jsx(View, {
571
+ }) : /* @__PURE__ */jsx(View$1, {
509
572
  ...(panResponder === null || panResponder === void 0 ? void 0 : panResponder.panHandlers),
510
573
  style: {
511
574
  flex: 1,
@@ -519,21 +582,29 @@ var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetIm
519
582
  })
520
583
  })
521
584
  });
522
- if (needsPortalRepropagation()) contents = /* @__PURE__ */_jsx(ProvideAdaptContext, {
585
+ if (needsPortalRepropagation()) contents = /* @__PURE__ */jsx(ProvideAdaptContext, {
523
586
  ...useAdaptContext(),
524
- children: contents
587
+ children: /* @__PURE__ */jsx(SafeAreaInsetsContext.Provider, {
588
+ value: safeAreaInsets,
589
+ children: contents
590
+ })
525
591
  });
526
592
  var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : true;
527
593
  if (modal) {
528
- var modalContents = /* @__PURE__ */_jsx(Portal, {
594
+ var RNGHRoot = getGestureHandlerState().RootView;
595
+ var mountedContents = shouldMountChildren ? /* @__PURE__ */jsx(ContainerComponent, {
596
+ children: contents
597
+ }) : null;
598
+ var modalContents = /* @__PURE__ */jsx(Portal, {
529
599
  stackZIndex: zIndex,
530
600
  ...portalProps,
531
- children: shouldMountChildren && /* @__PURE__ */_jsx(ContainerComponent, {
532
- children: contents
533
- })
601
+ children: mountedContents && RNGHRoot ? /* @__PURE__ */jsx(RNGHRoot, {
602
+ style: open ? rnghRootStyleOpen : rnghRootStyleClosed,
603
+ children: mountedContents
604
+ }) : mountedContents
534
605
  });
535
606
  if (isWeb) return modalContents;
536
- return /* @__PURE__ */_jsx(SheetInsideSheetContext.Provider, {
607
+ return /* @__PURE__ */jsx(SheetInsideSheetContext.Provider, {
537
608
  value: onInnerSheet,
538
609
  children: modalContents
539
610
  });