@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,5 +1,5 @@
1
1
  import { composeRefs } from "@hanzogui/compose-refs";
2
- import { View } from "@hanzogui/core";
2
+ import { isWeb, View } from "@hanzogui/core";
3
3
  import { ScrollView } from "@hanzogui/scroll-view";
4
4
  import { useControllableState } from "@hanzogui/use-controllable-state";
5
5
  import React, { useEffect, useRef, useState } from "react";
@@ -7,7 +7,8 @@ import { useGestureSheetContext } from "./GestureSheetContext.mjs";
7
7
  import { getGestureHandlerState, isGestureHandlerEnabled } from "./gestureState.mjs";
8
8
  import { useSheetContext } from "./SheetContext.mjs";
9
9
  import { useSheetScrollViewGestures } from "./useSheetScrollViewGestures.mjs";
10
- import { jsx } from "react/jsx-runtime";
10
+ import { getStableLayoutViewportHeight, getWebKeyboardBottomInset, getWebKeyboardResizeHeight, isEditableElement, MIN_KEYBOARD_HEIGHT } from "./webViewport.mjs";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
11
12
  const SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
12
13
  const SheetScrollView = React.forwardRef(({
13
14
  __scopeSheet,
@@ -20,31 +21,66 @@ const SheetScrollView = React.forwardRef(({
20
21
  const gestureContext = useGestureSheetContext();
21
22
  const {
22
23
  scrollBridge,
23
- setHasScrollView
24
+ setHasScrollView,
25
+ hasFit,
26
+ screenSize
24
27
  } = context;
28
+ const keyboardOccludedHeight = Math.max(0, context.keyboardOccludedHeight || 0);
29
+ const isKeyboardVisible = context.isKeyboardVisible === true || isWeb && getWebKeyboardResizeHeight() >= MIN_KEYBOARD_HEIGHT;
25
30
  const [scrollEnabled] = useControllableState({
26
31
  prop: scrollEnabledProp,
27
32
  defaultProp: true
28
33
  });
29
34
  const scrollRef = React.useRef(null);
35
+ const [hasScrollableContent, setHasScrollableContent] = useState(true);
36
+ const parentHeight = useRef(0);
37
+ const contentHeight = useRef(0);
38
+ const frozenFrameHeight = Math.max(0, context.keyboardStableFrameHeight || 0);
39
+ const fitSizingStyle = hasFit ? {
40
+ flex: void 0,
41
+ height: void 0,
42
+ maxHeight: screenSize || void 0
43
+ } : {
44
+ flex: 1
45
+ };
46
+ const contentContainerStyle = hasFit ? void 0 : {
47
+ minHeight: "100%"
48
+ };
49
+ const keyboardFrozenOverride = hasFit && isKeyboardVisible && frozenFrameHeight > 0 ? {
50
+ height: frozenFrameHeight,
51
+ maxHeight: frozenFrameHeight
52
+ } : null;
30
53
  const panGestureRef = gestureContext?.panGestureRef;
31
54
  const {
32
55
  ScrollView: RNGHScrollView
33
56
  } = getGestureHandlerState();
34
57
  const useRNGHScrollView = isGestureHandlerEnabled() && RNGHScrollView && panGestureRef;
35
58
  const currentScrollOffset = useRef(0);
59
+ const lastEmittedScrollOffset = useRef(0);
36
60
  const lockedScrollY = useRef(0);
61
+ const focusedInputScrollFrame = useRef(0);
37
62
  const setScrollEnabled = (next, lockTo) => {
38
63
  if (!next) {
39
- const lockY = lockTo ?? currentScrollOffset.current;
64
+ const lockY = lockTo ?? scrollBridge.scrollLockY ?? currentScrollOffset.current;
65
+ if (scrollBridge.enabled === false && scrollBridge.scrollLockY === lockY) {
66
+ return;
67
+ }
68
+ scrollBridge.enabled = false;
40
69
  lockedScrollY.current = lockY;
41
70
  scrollBridge.scrollLockY = lockY;
42
- scrollRef.current?.scrollTo?.({
43
- x: 0,
44
- y: lockY,
45
- animated: false
46
- });
71
+ if (currentScrollOffset.current !== lockY) {
72
+ scrollRef.current?.scrollTo?.({
73
+ x: 0,
74
+ y: lockY,
75
+ animated: false
76
+ });
77
+ currentScrollOffset.current = lockY;
78
+ }
47
79
  } else {
80
+ if (scrollBridge.enabled === true && scrollBridge.scrollLockY === void 0) {
81
+ return;
82
+ }
83
+ scrollBridge.enabled = true;
48
84
  lockedScrollY.current = currentScrollOffset.current;
49
85
  scrollBridge.scrollLockY = void 0;
50
86
  }
@@ -55,7 +91,81 @@ const SheetScrollView = React.forwardRef(({
55
91
  y,
56
92
  animated: false
57
93
  });
94
+ currentScrollOffset.current = y;
58
95
  };
96
+ const emitManualScroll = React.useCallback((node, y) => {
97
+ currentScrollOffset.current = y;
98
+ scrollBridge.y = y;
99
+ if (y > 0) scrollBridge.scrollStartY = -1;
100
+ lastEmittedScrollOffset.current = y;
101
+ onScroll?.({
102
+ nativeEvent: {
103
+ contentOffset: {
104
+ x: node.scrollLeft,
105
+ y
106
+ },
107
+ contentSize: {
108
+ height: node.scrollHeight,
109
+ width: node.scrollWidth
110
+ },
111
+ layoutMeasurement: {
112
+ height: node.offsetHeight,
113
+ width: node.offsetWidth
114
+ }
115
+ },
116
+ timeStamp: Date.now()
117
+ });
118
+ }, [onScroll, scrollBridge]);
119
+ const scrollFocusedInputClearOfKeyboard = React.useCallback(() => {
120
+ if (!isWeb || !hasFit || !isKeyboardVisible || keyboardOccludedHeight <= 0) {
121
+ return;
122
+ }
123
+ const node = scrollRef.current?.getScrollableNode();
124
+ const active = document.activeElement;
125
+ if (!node || !active || !isEditableElement(active) || !node.contains(active)) {
126
+ return;
127
+ }
128
+ const keyboardHeight = Math.max(keyboardOccludedHeight, getWebKeyboardBottomInset());
129
+ if (keyboardHeight <= 0) return;
130
+ const activeRect = active.getBoundingClientRect();
131
+ const nodeRect = node.getBoundingClientRect();
132
+ const margin = 12;
133
+ const keyboardTop = getStableLayoutViewportHeight() - keyboardHeight;
134
+ const visibleTop = nodeRect.top + margin;
135
+ const visibleBottom = Math.min(nodeRect.bottom, keyboardTop) - margin;
136
+ let nextScrollTop = node.scrollTop;
137
+ if (activeRect.bottom > visibleBottom) {
138
+ nextScrollTop += Math.ceil(activeRect.bottom - visibleBottom);
139
+ } else if (activeRect.top < visibleTop) {
140
+ nextScrollTop -= Math.ceil(visibleTop - activeRect.top);
141
+ }
142
+ const maxScrollTop = Math.max(0, node.scrollHeight - node.clientHeight);
143
+ nextScrollTop = Math.max(0, Math.min(maxScrollTop, nextScrollTop));
144
+ if (nextScrollTop === node.scrollTop) return;
145
+ node.scrollTop = nextScrollTop;
146
+ currentScrollOffset.current = nextScrollTop;
147
+ scrollBridge.y = nextScrollTop;
148
+ if (nextScrollTop > 0) scrollBridge.scrollStartY = -1;
149
+ }, [hasFit, isKeyboardVisible, keyboardOccludedHeight, scrollBridge]);
150
+ const scheduleFocusedInputScroll = React.useCallback(() => {
151
+ if (!isWeb || !hasFit) return;
152
+ cancelAnimationFrame(focusedInputScrollFrame.current);
153
+ focusedInputScrollFrame.current = requestAnimationFrame(() => {
154
+ scrollFocusedInputClearOfKeyboard();
155
+ focusedInputScrollFrame.current = requestAnimationFrame(scrollFocusedInputClearOfKeyboard);
156
+ });
157
+ }, [hasFit, scrollFocusedInputClearOfKeyboard]);
158
+ useEffect(() => {
159
+ if (!isWeb || !hasFit) return;
160
+ scheduleFocusedInputScroll();
161
+ window.addEventListener("focusin", scheduleFocusedInputScroll);
162
+ window.visualViewport?.addEventListener("resize", scheduleFocusedInputScroll);
163
+ return () => {
164
+ cancelAnimationFrame(focusedInputScrollFrame.current);
165
+ window.removeEventListener("focusin", scheduleFocusedInputScroll);
166
+ window.visualViewport?.removeEventListener("resize", scheduleFocusedInputScroll);
167
+ };
168
+ }, [hasFit, scheduleFocusedInputScroll]);
59
169
  useEffect(() => {
60
170
  setHasScrollView(true);
61
171
  if (isGestureHandlerEnabled()) {
@@ -68,14 +178,14 @@ const SheetScrollView = React.forwardRef(({
68
178
  scrollBridge.forceScrollTo = void 0;
69
179
  };
70
180
  }, []);
71
- const [hasScrollableContent, setHasScrollableContent] = useState(true);
72
- const parentHeight = useRef(0);
73
- const contentHeight = useRef(0);
74
181
  const updateScrollable = () => {
75
182
  if (parentHeight.current && contentHeight.current) {
76
183
  setHasScrollableContent(contentHeight.current > parentHeight.current);
77
184
  }
78
185
  };
186
+ const recordFitHeight = height => {
187
+ parentHeight.current = height;
188
+ };
79
189
  useEffect(() => {
80
190
  scrollBridge.hasScrollableContent = hasScrollableContent;
81
191
  }, [hasScrollableContent]);
@@ -84,30 +194,36 @@ const SheetScrollView = React.forwardRef(({
84
194
  scrollBridge,
85
195
  hasScrollableContent,
86
196
  scrollEnabled,
87
- setScrollEnabled
197
+ setScrollEnabled,
198
+ onManualScroll: emitManualScroll
88
199
  });
89
- const contentWrapper = /* @__PURE__ */jsx(View, {
200
+ const contentWrapper = /* @__PURE__ */jsxs(View, {
90
201
  onLayout: e => {
91
202
  const height = Math.floor(e.nativeEvent.layout.height);
92
203
  if (height !== contentHeight.current) {
93
204
  contentHeight.current = height;
94
205
  updateScrollable();
206
+ if (keyboardOccludedHeight > 0) {
207
+ scheduleFocusedInputScroll();
208
+ }
95
209
  }
96
210
  },
97
- children
211
+ children: [children, keyboardOccludedHeight > 0 && /* @__PURE__ */jsx(View, {
212
+ "data-sheet-keyboard-scroll-pad": true,
213
+ height: keyboardOccludedHeight,
214
+ width: "100%"
215
+ })]
98
216
  });
99
217
  if (useRNGHScrollView && RNGHScrollView && panGestureRef) {
100
218
  const RNGHComponent = RNGHScrollView;
101
219
  return /* @__PURE__ */jsx(RNGHComponent, {
102
220
  ref: composeRefs(scrollRef, ref),
103
- style: {
104
- flex: 1
105
- },
221
+ style: fitSizingStyle,
106
222
  scrollEventThrottle: 1,
107
223
  scrollEnabled,
108
224
  simultaneousHandlers: [panGestureRef],
109
225
  onLayout: e => {
110
- parentHeight.current = Math.ceil(e.nativeEvent.layout.height);
226
+ recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
111
227
  updateScrollable();
112
228
  },
113
229
  onScroll: e => {
@@ -123,40 +239,44 @@ const SheetScrollView = React.forwardRef(({
123
239
  animated: false
124
240
  });
125
241
  }
242
+ currentScrollOffset.current = scrollBridge.scrollLockY;
126
243
  scrollBridge.y = scrollBridge.scrollLockY;
127
- onScroll?.({
128
- ...e,
129
- nativeEvent: {
130
- ...e.nativeEvent,
131
- contentOffset: {
132
- ...e.nativeEvent.contentOffset,
133
- y: scrollBridge.scrollLockY
244
+ if (lastEmittedScrollOffset.current !== scrollBridge.scrollLockY) {
245
+ lastEmittedScrollOffset.current = scrollBridge.scrollLockY;
246
+ onScroll?.({
247
+ ...e,
248
+ nativeEvent: {
249
+ ...e.nativeEvent,
250
+ contentOffset: {
251
+ ...e.nativeEvent.contentOffset,
252
+ y: scrollBridge.scrollLockY
253
+ }
134
254
  }
135
- }
136
- });
255
+ });
256
+ }
137
257
  return;
138
258
  }
139
259
  scrollBridge.y = y;
140
260
  if (y > 0) scrollBridge.scrollStartY = -1;
261
+ lastEmittedScrollOffset.current = y;
141
262
  onScroll?.(e);
142
263
  },
143
- contentContainerStyle: {
144
- minHeight: "100%"
145
- },
264
+ contentContainerStyle,
146
265
  bounces: false,
147
266
  keyboardShouldPersistTaps: "always",
148
267
  keyboardDismissMode: "none",
149
268
  ...props,
269
+ ...keyboardFrozenOverride,
150
270
  children: contentWrapper
151
271
  });
152
272
  }
153
273
  return /* @__PURE__ */jsx(ScrollView, {
154
274
  onLayout: e => {
155
- parentHeight.current = Math.ceil(e.nativeEvent.layout.height);
275
+ recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
156
276
  updateScrollable();
157
277
  },
158
278
  ref: composeRefs(scrollRef, ref),
159
- flex: 1,
279
+ ...fitSizingStyle,
160
280
  scrollEventThrottle: 1,
161
281
  className: "_ovs-contain",
162
282
  scrollEnabled,
@@ -164,15 +284,16 @@ const SheetScrollView = React.forwardRef(({
164
284
  const {
165
285
  y
166
286
  } = e.nativeEvent.contentOffset;
287
+ currentScrollOffset.current = y;
167
288
  scrollBridge.y = y;
168
289
  if (y > 0) scrollBridge.scrollStartY = -1;
290
+ lastEmittedScrollOffset.current = y;
169
291
  onScroll?.(e);
170
292
  },
171
- contentContainerStyle: {
172
- minHeight: "100%"
173
- },
293
+ contentContainerStyle,
174
294
  ...gestureProps,
175
295
  ...props,
296
+ ...keyboardFrozenOverride,
176
297
  children: contentWrapper
177
298
  });
178
299
  });
@@ -1 +1 @@
1
- {"version":3,"names":["composeRefs","View","ScrollView","useControllableState","React","useEffect","useRef","useState","useGestureSheetContext","getGestureHandlerState","isGestureHandlerEnabled","useSheetContext","useSheetScrollViewGestures","jsx","SHEET_SCROLL_VIEW_NAME","SheetScrollView","forwardRef","__scopeSheet","children","onScroll","scrollEnabled","scrollEnabledProp","props","ref","context","gestureContext","scrollBridge","setHasScrollView","prop","defaultProp","scrollRef","panGestureRef","RNGHScrollView","useRNGHScrollView","currentScrollOffset","lockedScrollY","setScrollEnabled","next","lockTo","lockY","current","scrollLockY","scrollTo","x","y","animated","forceScrollTo","hasScrollableContent","setHasScrollableContent","parentHeight","contentHeight","updateScrollable","gestureProps","contentWrapper","onLayout","e","height","Math","floor","nativeEvent","layout","RNGHComponent","style","flex","scrollEventThrottle","simultaneousHandlers","ceil","contentOffset","scrollStartY","contentContainerStyle","minHeight","bounces","keyboardShouldPersistTaps","keyboardDismissMode","className"],"sources":["../../src/SheetScrollView.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["composeRefs","isWeb","View","ScrollView","useControllableState","React","useEffect","useRef","useState","useGestureSheetContext","getGestureHandlerState","isGestureHandlerEnabled","useSheetContext","useSheetScrollViewGestures","getStableLayoutViewportHeight","getWebKeyboardBottomInset","getWebKeyboardResizeHeight","isEditableElement","MIN_KEYBOARD_HEIGHT","jsx","jsxs","SHEET_SCROLL_VIEW_NAME","SheetScrollView","forwardRef","__scopeSheet","children","onScroll","scrollEnabled","scrollEnabledProp","props","ref","context","gestureContext","scrollBridge","setHasScrollView","hasFit","screenSize","keyboardOccludedHeight","Math","max","isKeyboardVisible","prop","defaultProp","scrollRef","hasScrollableContent","setHasScrollableContent","parentHeight","contentHeight","frozenFrameHeight","keyboardStableFrameHeight","fitSizingStyle","flex","height","maxHeight","contentContainerStyle","minHeight","keyboardFrozenOverride","panGestureRef","RNGHScrollView","useRNGHScrollView","currentScrollOffset","lastEmittedScrollOffset","lockedScrollY","focusedInputScrollFrame","setScrollEnabled","next","lockTo","lockY","scrollLockY","current","enabled","scrollTo","x","y","animated","forceScrollTo","emitManualScroll","useCallback","node","scrollStartY","nativeEvent","contentOffset","scrollLeft","contentSize","scrollHeight","width","scrollWidth","layoutMeasurement","offsetHeight","offsetWidth","timeStamp","Date","now","scrollFocusedInputClearOfKeyboard","getScrollableNode","active","document","activeElement","contains","keyboardHeight","activeRect","getBoundingClientRect","nodeRect","margin","keyboardTop","visibleTop","top","visibleBottom","min","bottom","nextScrollTop","scrollTop","ceil","maxScrollTop","clientHeight","scheduleFocusedInputScroll","cancelAnimationFrame","requestAnimationFrame","window","addEventListener","visualViewport","removeEventListener","updateScrollable","recordFitHeight","gestureProps","onManualScroll","contentWrapper","onLayout","e","floor","layout","RNGHComponent","style","scrollEventThrottle","simultaneousHandlers","bounces","keyboardShouldPersistTaps","keyboardDismissMode","className"],"sources":["../../src/SheetScrollView.tsx"],"sourcesContent":[null],"mappings":"AAAA,SAASA,WAAA,QAAmB;AAC5B,SAASC,KAAA,EAAOC,IAAA,QAAyB;AAEzC,SAASC,UAAA,QAAkB;AAC3B,SAASC,oBAAA,QAA4B;AACrC,OAAOC,KAAA,IAASC,SAAA,EAAWC,MAAA,EAAQC,QAAA,QAAgB;AAEnD,SAASC,sBAAA,QAA8B;AACvC,SAASC,sBAAA,EAAwBC,uBAAA,QAA+B;AAChE,SAASC,eAAA,QAAuB;AAEhC,SAASC,0BAAA,QAAkC;AAC3C,SACEC,6BAAA,EACAC,yBAAA,EACAC,0BAAA,EACAC,iBAAA,EACAC,mBAAA,QACK;AA4OD,SAcIC,GAAA,EAdJC,IAAA;AA1ON,MAAMC,sBAAA,GAAyB;AAExB,MAAMC,eAAA,GAAkBjB,KAAA,CAAMkB,UAAA,CAInC,CACE;EACEC,YAAA;EACAC,QAAA;EACAC,QAAA;EACAC,aAAA,EAAeC,iBAAA;EACf,GAAGC;AACL,GACAC,GAAA,KACG;EACH,MAAMC,OAAA,GAAUnB,eAAA,CAAgBS,sBAAA,EAAwBG,YAAY;EACpE,MAAMQ,cAAA,GAAiBvB,sBAAA,CAAuB;EAC9C,MAAM;IAAEwB,YAAA;IAAcC,gBAAA;IAAkBC,MAAA;IAAQC;EAAW,IAAIL,OAAA;EAC/D,MAAMM,sBAAA,GAAyBC,IAAA,CAAKC,GAAA,CAAI,GAAGR,OAAA,CAAQM,sBAAA,IAA0B,CAAC;EAM9E,MAAMG,iBAAA,GACJT,OAAA,CAAQS,iBAAA,KAAsB,QAC7BvC,KAAA,IAASe,0BAAA,CAA2B,KAAKE,mBAAA;EAC5C,MAAM,CAACS,aAAa,IAAIvB,oBAAA,CAAqB;IAC3CqC,IAAA,EAAMb,iBAAA;IACNc,WAAA,EAAa;EACf,CAAC;EACD,MAAMC,SAAA,GAAYtC,KAAA,CAAME,MAAA,CAA4B,IAAI;EAExD,MAAM,CAACqC,oBAAA,EAAsBC,uBAAuB,IAAIrC,QAAA,CAAS,IAAI;EACrE,MAAMsC,YAAA,GAAevC,MAAA,CAAO,CAAC;EAC7B,MAAMwC,aAAA,GAAgBxC,MAAA,CAAO,CAAC;EAK9B,MAAMyC,iBAAA,GAAoBV,IAAA,CAAKC,GAAA,CAAI,GAAGR,OAAA,CAAQkB,yBAAA,IAA6B,CAAC;EAM5E,MAAMC,cAAA,GAAiBf,MAAA,GACnB;IACEgB,IAAA,EAAM;IACNC,MAAA,EAAQ;IACRC,SAAA,EAAWjB,UAAA,IAAc;EAC3B,IACA;IAAEe,IAAA,EAAM;EAAE;EACd,MAAMG,qBAAA,GAAwBnB,MAAA,GAAS,SAAY;IAAEoB,SAAA,EAAW;EAAgB;EAQhF,MAAMC,sBAAA,GACJrB,MAAA,IAAUK,iBAAA,IAAqBQ,iBAAA,GAAoB,IAC/C;IAAEI,MAAA,EAAQJ,iBAAA;IAAmBK,SAAA,EAAWL;EAAkB,IAC1D;EAEN,MAAMS,aAAA,GAAgBzB,cAAA,EAAgByB,aAAA;EACtC,MAAM;IAAEtD,UAAA,EAAYuD;EAAe,IAAIhD,sBAAA,CAAuB;EAC9D,MAAMiD,iBAAA,GAAoBhD,uBAAA,CAAwB,KAAK+C,cAAA,IAAkBD,aAAA;EAGzE,MAAMG,mBAAA,GAAsBrD,MAAA,CAAO,CAAC;EACpC,MAAMsD,uBAAA,GAA0BtD,MAAA,CAAO,CAAC;EACxC,MAAMuD,aAAA,GAAgBvD,MAAA,CAAO,CAAC;EAC9B,MAAMwD,uBAAA,GAA0BxD,MAAA,CAAO,CAAC;EAExC,MAAMyD,gBAAA,GAAmBA,CAACC,IAAA,EAAeC,MAAA,KAAoB;IAC3D,IAAI,CAACD,IAAA,EAAM;MACT,MAAME,KAAA,GAAQD,MAAA,IAAUjC,YAAA,CAAamC,WAAA,IAAeR,mBAAA,CAAoBS,OAAA;MACxE,IAAIpC,YAAA,CAAaqC,OAAA,KAAY,SAASrC,YAAA,CAAamC,WAAA,KAAgBD,KAAA,EAAO;QACxE;MACF;MACAlC,YAAA,CAAaqC,OAAA,GAAU;MACvBR,aAAA,CAAcO,OAAA,GAAUF,KAAA;MACxBlC,YAAA,CAAamC,WAAA,GAAcD,KAAA;MAC3B,IAAIP,mBAAA,CAAoBS,OAAA,KAAYF,KAAA,EAAO;QACzCxB,SAAA,CAAU0B,OAAA,EAASE,QAAA,GAAW;UAAEC,CAAA,EAAG;UAAGC,CAAA,EAAGN,KAAA;UAAOO,QAAA,EAAU;QAAM,CAAC;QACjEd,mBAAA,CAAoBS,OAAA,GAAUF,KAAA;MAChC;IACF,OAAO;MACL,IAAIlC,YAAA,CAAaqC,OAAA,KAAY,QAAQrC,YAAA,CAAamC,WAAA,KAAgB,QAAW;QAC3E;MACF;MACAnC,YAAA,CAAaqC,OAAA,GAAU;MACvBR,aAAA,CAAcO,OAAA,GAAUT,mBAAA,CAAoBS,OAAA;MAC5CpC,YAAA,CAAamC,WAAA,GAAc;IAC7B;EACF;EAEA,MAAMO,aAAA,GAAiBF,CAAA,IAAc;IACnC9B,SAAA,CAAU0B,OAAA,EAASE,QAAA,GAAW;MAAEC,CAAA,EAAG;MAAGC,CAAA;MAAGC,QAAA,EAAU;IAAM,CAAC;IAC1Dd,mBAAA,CAAoBS,OAAA,GAAUI,CAAA;EAChC;EAEA,MAAMG,gBAAA,GAAmBvE,KAAA,CAAMwE,WAAA,CAC7B,CAACC,IAAA,EAAmBL,CAAA,KAAc;IAChCb,mBAAA,CAAoBS,OAAA,GAAUI,CAAA;IAC9BxC,YAAA,CAAawC,CAAA,GAAIA,CAAA;IACjB,IAAIA,CAAA,GAAI,GAAGxC,YAAA,CAAa8C,YAAA,GAAe;IACvClB,uBAAA,CAAwBQ,OAAA,GAAUI,CAAA;IAClC/C,QAAA,GAAW;MACTsD,WAAA,EAAa;QACXC,aAAA,EAAe;UACbT,CAAA,EAAGM,IAAA,CAAKI,UAAA;UACRT;QACF;QACAU,WAAA,EAAa;UACX/B,MAAA,EAAQ0B,IAAA,CAAKM,YAAA;UACbC,KAAA,EAAOP,IAAA,CAAKQ;QACd;QACAC,iBAAA,EAAmB;UACjBnC,MAAA,EAAQ0B,IAAA,CAAKU,YAAA;UACbH,KAAA,EAAOP,IAAA,CAAKW;QACd;MACF;MACAC,SAAA,EAAWC,IAAA,CAAKC,GAAA,CAAI;IACtB,CAAQ;EACV,GACA,CAAClE,QAAA,EAAUO,YAAY,CACzB;EAEA,MAAM4D,iCAAA,GAAoCxF,KAAA,CAAMwE,WAAA,CAAY,MAAM;IAChE,IAAI,CAAC5E,KAAA,IAAS,CAACkC,MAAA,IAAU,CAACK,iBAAA,IAAqBH,sBAAA,IAA0B,GAAG;MAC1E;IACF;IACA,MAAMyC,IAAA,GAAOnC,SAAA,CAAU0B,OAAA,EAASyB,iBAAA,CAAkB;IAClD,MAAMC,MAAA,GAASC,QAAA,CAASC,aAAA;IACxB,IAAI,CAACnB,IAAA,IAAQ,CAACiB,MAAA,IAAU,CAAC9E,iBAAA,CAAkB8E,MAAM,KAAK,CAACjB,IAAA,CAAKoB,QAAA,CAASH,MAAM,GAAG;MAC5E;IACF;IAEA,MAAMI,cAAA,GAAiB7D,IAAA,CAAKC,GAAA,CAAIF,sBAAA,EAAwBtB,yBAAA,CAA0B,CAAC;IACnF,IAAIoF,cAAA,IAAkB,GAAG;IAEzB,MAAMC,UAAA,GAAaL,MAAA,CAAOM,qBAAA,CAAsB;IAChD,MAAMC,QAAA,GAAWxB,IAAA,CAAKuB,qBAAA,CAAsB;IAC5C,MAAME,MAAA,GAAS;IACf,MAAMC,WAAA,GAAc1F,6BAAA,CAA8B,IAAIqF,cAAA;IACtD,MAAMM,UAAA,GAAaH,QAAA,CAASI,GAAA,GAAMH,MAAA;IAClC,MAAMI,aAAA,GAAgBrE,IAAA,CAAKsE,GAAA,CAAIN,QAAA,CAASO,MAAA,EAAQL,WAAW,IAAID,MAAA;IAC/D,IAAIO,aAAA,GAAgBhC,IAAA,CAAKiC,SAAA;IAEzB,IAAIX,UAAA,CAAWS,MAAA,GAASF,aAAA,EAAe;MACrCG,aAAA,IAAiBxE,IAAA,CAAK0E,IAAA,CAAKZ,UAAA,CAAWS,MAAA,GAASF,aAAa;IAC9D,WAAWP,UAAA,CAAWM,GAAA,GAAMD,UAAA,EAAY;MACtCK,aAAA,IAAiBxE,IAAA,CAAK0E,IAAA,CAAKP,UAAA,GAAaL,UAAA,CAAWM,GAAG;IACxD;IAEA,MAAMO,YAAA,GAAe3E,IAAA,CAAKC,GAAA,CAAI,GAAGuC,IAAA,CAAKM,YAAA,GAAeN,IAAA,CAAKoC,YAAY;IACtEJ,aAAA,GAAgBxE,IAAA,CAAKC,GAAA,CAAI,GAAGD,IAAA,CAAKsE,GAAA,CAAIK,YAAA,EAAcH,aAAa,CAAC;IACjE,IAAIA,aAAA,KAAkBhC,IAAA,CAAKiC,SAAA,EAAW;IAEtCjC,IAAA,CAAKiC,SAAA,GAAYD,aAAA;IACjBlD,mBAAA,CAAoBS,OAAA,GAAUyC,aAAA;IAC9B7E,YAAA,CAAawC,CAAA,GAAIqC,aAAA;IACjB,IAAIA,aAAA,GAAgB,GAAG7E,YAAA,CAAa8C,YAAA,GAAe;EACrD,GAAG,CAAC5C,MAAA,EAAQK,iBAAA,EAAmBH,sBAAA,EAAwBJ,YAAY,CAAC;EAEpE,MAAMkF,0BAAA,GAA6B9G,KAAA,CAAMwE,WAAA,CAAY,MAAM;IACzD,IAAI,CAAC5E,KAAA,IAAS,CAACkC,MAAA,EAAQ;IACvBiF,oBAAA,CAAqBrD,uBAAA,CAAwBM,OAAO;IACpDN,uBAAA,CAAwBM,OAAA,GAAUgD,qBAAA,CAAsB,MAAM;MAC5DxB,iCAAA,CAAkC;MAClC9B,uBAAA,CAAwBM,OAAA,GAAUgD,qBAAA,CAChCxB,iCACF;IACF,CAAC;EACH,GAAG,CAAC1D,MAAA,EAAQ0D,iCAAiC,CAAC;EAE9CvF,SAAA,CAAU,MAAM;IACd,IAAI,CAACL,KAAA,IAAS,CAACkC,MAAA,EAAQ;IACvBgF,0BAAA,CAA2B;IAC3BG,MAAA,CAAOC,gBAAA,CAAiB,WAAWJ,0BAA0B;IAC7DG,MAAA,CAAOE,cAAA,EAAgBD,gBAAA,CAAiB,UAAUJ,0BAA0B;IAE5E,OAAO,MAAM;MACXC,oBAAA,CAAqBrD,uBAAA,CAAwBM,OAAO;MACpDiD,MAAA,CAAOG,mBAAA,CAAoB,WAAWN,0BAA0B;MAChEG,MAAA,CAAOE,cAAA,EAAgBC,mBAAA,CAAoB,UAAUN,0BAA0B;IACjF;EACF,GAAG,CAAChF,MAAA,EAAQgF,0BAA0B,CAAC;EAEvC7G,SAAA,CAAU,MAAM;IACd4B,gBAAA,CAAiB,IAAI;IACrB,IAAIvB,uBAAA,CAAwB,GAAG;MAC7BsB,YAAA,CAAa+B,gBAAA,GAAmBA,gBAAA;MAChC/B,YAAA,CAAa0C,aAAA,GAAgBA,aAAA;IAC/B;IACA,OAAO,MAAM;MACXzC,gBAAA,CAAiB,KAAK;MACtBD,YAAA,CAAa+B,gBAAA,GAAmB;MAChC/B,YAAA,CAAa0C,aAAA,GAAgB;IAC/B;EACF,GAAG,EAAE;EAEL,MAAM+C,gBAAA,GAAmBA,CAAA,KAAM;IAC7B,IAAI5E,YAAA,CAAauB,OAAA,IAAWtB,aAAA,CAAcsB,OAAA,EAAS;MACjDxB,uBAAA,CAAwBE,aAAA,CAAcsB,OAAA,GAAUvB,YAAA,CAAauB,OAAO;IACtE;EACF;EAIA,MAAMsD,eAAA,GAAmBvE,MAAA,IAAmB;IAC1CN,YAAA,CAAauB,OAAA,GAAUjB,MAAA;EACzB;EAEA9C,SAAA,CAAU,MAAM;IACd2B,YAAA,CAAaW,oBAAA,GAAuBA,oBAAA;EACtC,GAAG,CAACA,oBAAoB,CAAC;EAGzB,MAAMgF,YAAA,GAAe/G,0BAAA,CAA2B;IAC9C8B,SAAA;IACAV,YAAA;IACAW,oBAAA;IACAjB,aAAA;IACAqC,gBAAA;IACA6D,cAAA,EAAgBjD;EAClB,CAAC;EAGD,MAAMkD,cAAA,GACJ,eAAA1G,IAAA,CAAClB,IAAA;IACC6H,QAAA,EAAWC,CAAA,IAAM;MACf,MAAM5E,MAAA,GAASd,IAAA,CAAK2F,KAAA,CAAMD,CAAA,CAAEhD,WAAA,CAAYkD,MAAA,CAAO9E,MAAM;MACrD,IAAIA,MAAA,KAAWL,aAAA,CAAcsB,OAAA,EAAS;QACpCtB,aAAA,CAAcsB,OAAA,GAAUjB,MAAA;QACxBsE,gBAAA,CAAiB;QACjB,IAAIrF,sBAAA,GAAyB,GAAG;UAC9B8E,0BAAA,CAA2B;QAC7B;MACF;IACF;IAEC1F,QAAA,GAAAA,QAAA,EACAY,sBAAA,GAAyB,KACxB,eAAAlB,GAAA,CAACjB,IAAA;MACC,kCAA8B;MAC9BkD,MAAA,EAAQf,sBAAA;MACRgD,KAAA,EAAM;IAAA,CACR;EAAA,CAEJ;EAIF,IAAI1B,iBAAA,IAAqBD,cAAA,IAAkBD,aAAA,EAAe;IACxD,MAAM0E,aAAA,GAAgBzE,cAAA;IACtB,OACE,eAAAvC,GAAA,CAACgH,aAAA;MACCrG,GAAA,EAAK9B,WAAA,CAAY2C,SAAA,EAAkBb,GAAG;MACtCsG,KAAA,EAAOlF,cAAA;MACPmF,mBAAA,EAAqB;MACrB1G,aAAA;MACA2G,oBAAA,EAAsB,CAAC7E,aAAa;MACpCsE,QAAA,EAAWC,CAAA,IAAW;QACpBL,eAAA,CAAgBrF,IAAA,CAAK0E,IAAA,CAAKgB,CAAA,CAAEhD,WAAA,CAAYkD,MAAA,CAAO9E,MAAM,CAAC;QACtDsE,gBAAA,CAAiB;MACnB;MACAhG,QAAA,EAAWsG,CAAA,IAAW;QACpB,MAAM;UAAEvD;QAAE,IAAIuD,CAAA,CAAEhD,WAAA,CAAYC,aAAA;QAC5BrB,mBAAA,CAAoBS,OAAA,GAAUI,CAAA;QAE9B,IAAIxC,YAAA,CAAamC,WAAA,KAAgB,QAAW;UAC1C,IAAIK,CAAA,KAAMxC,YAAA,CAAamC,WAAA,EAAa;YAClCzB,SAAA,CAAU0B,OAAA,EAASE,QAAA,GAAW;cAC5BC,CAAA,EAAG;cACHC,CAAA,EAAGxC,YAAA,CAAamC,WAAA;cAChBM,QAAA,EAAU;YACZ,CAAC;UACH;UACAd,mBAAA,CAAoBS,OAAA,GAAUpC,YAAA,CAAamC,WAAA;UAC3CnC,YAAA,CAAawC,CAAA,GAAIxC,YAAA,CAAamC,WAAA;UAC9B,IAAIP,uBAAA,CAAwBQ,OAAA,KAAYpC,YAAA,CAAamC,WAAA,EAAa;YAChEP,uBAAA,CAAwBQ,OAAA,GAAUpC,YAAA,CAAamC,WAAA;YAC/C1C,QAAA,GAAW;cACT,GAAGsG,CAAA;cACHhD,WAAA,EAAa;gBACX,GAAGgD,CAAA,CAAEhD,WAAA;gBACLC,aAAA,EAAe;kBACb,GAAG+C,CAAA,CAAEhD,WAAA,CAAYC,aAAA;kBACjBR,CAAA,EAAGxC,YAAA,CAAamC;gBAClB;cACF;YACF,CAAC;UACH;UACA;QACF;QAEAnC,YAAA,CAAawC,CAAA,GAAIA,CAAA;QACjB,IAAIA,CAAA,GAAI,GAAGxC,YAAA,CAAa8C,YAAA,GAAe;QACvClB,uBAAA,CAAwBQ,OAAA,GAAUI,CAAA;QAClC/C,QAAA,GAAWsG,CAAC;MACd;MACA1E,qBAAA;MACAiF,OAAA,EAAS;MACTC,yBAAA,EAA0B;MAC1BC,mBAAA,EAAoB;MACnB,GAAG5G,KAAA;MACH,GAAG2B,sBAAA;MAEH/B,QAAA,EAAAqG;IAAA,CACH;EAEJ;EAGA,OACE,eAAA3G,GAAA,CAAChB,UAAA;IACC4H,QAAA,EAAWC,CAAA,IAAM;MACfL,eAAA,CAAgBrF,IAAA,CAAK0E,IAAA,CAAKgB,CAAA,CAAEhD,WAAA,CAAYkD,MAAA,CAAO9E,MAAM,CAAC;MACtDsE,gBAAA,CAAiB;IACnB;IACA5F,GAAA,EAAK9B,WAAA,CAAY2C,SAAA,EAAkBb,GAAG;IACrC,GAAGoB,cAAA;IACJmF,mBAAA,EAAqB;IACrBK,SAAA,EAAU;IACV/G,aAAA;IACAD,QAAA,EAAWsG,CAAA,IAAM;MACf,MAAM;QAAEvD;MAAE,IAAIuD,CAAA,CAAEhD,WAAA,CAAYC,aAAA;MAC5BrB,mBAAA,CAAoBS,OAAA,GAAUI,CAAA;MAC9BxC,YAAA,CAAawC,CAAA,GAAIA,CAAA;MACjB,IAAIA,CAAA,GAAI,GAAGxC,YAAA,CAAa8C,YAAA,GAAe;MACvClB,uBAAA,CAAwBQ,OAAA,GAAUI,CAAA;MAClC/C,QAAA,GAAWsG,CAAC;IACd;IACA1E,qBAAA;IACC,GAAGsE,YAAA;IACH,GAAG/F,KAAA;IACH,GAAG2B,sBAAA;IAEH/B,QAAA,EAAAqG;EAAA,CACH;AAEJ,CACF","ignoreList":[]}
@@ -48,6 +48,7 @@ var import_GestureSheetContext = require("./GestureSheetContext.native.js");
48
48
  var import_gestureState = require("./gestureState.native.js");
49
49
  var import_SheetContext = require("./SheetContext.native.js");
50
50
  var import_useSheetScrollViewGestures = require("./useSheetScrollViewGestures.native.js");
51
+ var import_webViewport = require("./webViewport.native.js");
51
52
  var SHEET_SCROLL_VIEW_NAME = "SheetScrollView";
52
53
  var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (param, ref) {
53
54
  var {
@@ -61,32 +62,68 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
61
62
  var gestureContext = (0, import_GestureSheetContext.useGestureSheetContext)();
62
63
  var {
63
64
  scrollBridge,
64
- setHasScrollView
65
+ setHasScrollView,
66
+ hasFit,
67
+ screenSize
65
68
  } = context;
69
+ var keyboardOccludedHeight = Math.max(0, context.keyboardOccludedHeight || 0);
70
+ var isKeyboardVisible = context.isKeyboardVisible === true || import_core.isWeb && (0, import_webViewport.getWebKeyboardResizeHeight)() >= import_webViewport.MIN_KEYBOARD_HEIGHT;
66
71
  var [scrollEnabled] = (0, import_use_controllable_state.useControllableState)({
67
72
  prop: scrollEnabledProp,
68
73
  defaultProp: true
69
74
  });
70
75
  var scrollRef = import_react.default.useRef(null);
76
+ var [hasScrollableContent, setHasScrollableContent] = (0, import_react.useState)(true);
77
+ var parentHeight = (0, import_react.useRef)(0);
78
+ var contentHeight = (0, import_react.useRef)(0);
79
+ var frozenFrameHeight = Math.max(0, context.keyboardStableFrameHeight || 0);
80
+ var fitSizingStyle = hasFit ? {
81
+ flex: void 0,
82
+ height: void 0,
83
+ maxHeight: screenSize || void 0
84
+ } : {
85
+ flex: 1
86
+ };
87
+ var contentContainerStyle = hasFit ? void 0 : {
88
+ minHeight: "100%"
89
+ };
90
+ var keyboardFrozenOverride = hasFit && isKeyboardVisible && frozenFrameHeight > 0 ? {
91
+ height: frozenFrameHeight,
92
+ maxHeight: frozenFrameHeight
93
+ } : null;
71
94
  var panGestureRef = gestureContext === null || gestureContext === void 0 ? void 0 : gestureContext.panGestureRef;
72
95
  var {
73
96
  ScrollView: RNGHScrollView
74
97
  } = (0, import_gestureState.getGestureHandlerState)();
75
98
  var useRNGHScrollView = (0, import_gestureState.isGestureHandlerEnabled)() && RNGHScrollView && panGestureRef;
76
99
  var currentScrollOffset = (0, import_react.useRef)(0);
100
+ var lastEmittedScrollOffset = (0, import_react.useRef)(0);
77
101
  var lockedScrollY = (0, import_react.useRef)(0);
102
+ var focusedInputScrollFrame = (0, import_react.useRef)(0);
78
103
  var setScrollEnabled = function (next, lockTo) {
79
104
  if (!next) {
80
- var _scrollRef_current_scrollTo, _scrollRef_current;
81
- var lockY = lockTo !== null && lockTo !== void 0 ? lockTo : currentScrollOffset.current;
105
+ var _ref;
106
+ var lockY = (_ref = lockTo !== null && lockTo !== void 0 ? lockTo : scrollBridge.scrollLockY) !== null && _ref !== void 0 ? _ref : currentScrollOffset.current;
107
+ if (scrollBridge.enabled === false && scrollBridge.scrollLockY === lockY) {
108
+ return;
109
+ }
110
+ scrollBridge.enabled = false;
82
111
  lockedScrollY.current = lockY;
83
112
  scrollBridge.scrollLockY = lockY;
84
- (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : (_scrollRef_current_scrollTo = _scrollRef_current.scrollTo) === null || _scrollRef_current_scrollTo === void 0 ? void 0 : _scrollRef_current_scrollTo.call(_scrollRef_current, {
85
- x: 0,
86
- y: lockY,
87
- animated: false
88
- });
113
+ if (currentScrollOffset.current !== lockY) {
114
+ var _scrollRef_current_scrollTo, _scrollRef_current;
115
+ (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : (_scrollRef_current_scrollTo = _scrollRef_current.scrollTo) === null || _scrollRef_current_scrollTo === void 0 ? void 0 : _scrollRef_current_scrollTo.call(_scrollRef_current, {
116
+ x: 0,
117
+ y: lockY,
118
+ animated: false
119
+ });
120
+ currentScrollOffset.current = lockY;
121
+ }
89
122
  } else {
123
+ if (scrollBridge.enabled === true && scrollBridge.scrollLockY === void 0) {
124
+ return;
125
+ }
126
+ scrollBridge.enabled = true;
90
127
  lockedScrollY.current = currentScrollOffset.current;
91
128
  scrollBridge.scrollLockY = void 0;
92
129
  }
@@ -98,7 +135,84 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
98
135
  y,
99
136
  animated: false
100
137
  });
138
+ currentScrollOffset.current = y;
101
139
  };
140
+ var emitManualScroll = import_react.default.useCallback(function (node, y) {
141
+ currentScrollOffset.current = y;
142
+ scrollBridge.y = y;
143
+ if (y > 0) scrollBridge.scrollStartY = -1;
144
+ lastEmittedScrollOffset.current = y;
145
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({
146
+ nativeEvent: {
147
+ contentOffset: {
148
+ x: node.scrollLeft,
149
+ y
150
+ },
151
+ contentSize: {
152
+ height: node.scrollHeight,
153
+ width: node.scrollWidth
154
+ },
155
+ layoutMeasurement: {
156
+ height: node.offsetHeight,
157
+ width: node.offsetWidth
158
+ }
159
+ },
160
+ timeStamp: Date.now()
161
+ });
162
+ }, [onScroll, scrollBridge]);
163
+ var scrollFocusedInputClearOfKeyboard = import_react.default.useCallback(function () {
164
+ var _scrollRef_current;
165
+ if (!import_core.isWeb || !hasFit || !isKeyboardVisible || keyboardOccludedHeight <= 0) {
166
+ return;
167
+ }
168
+ var node = (_scrollRef_current = scrollRef.current) === null || _scrollRef_current === void 0 ? void 0 : _scrollRef_current.getScrollableNode();
169
+ var active = document.activeElement;
170
+ if (!node || !active || !(0, import_webViewport.isEditableElement)(active) || !node.contains(active)) {
171
+ return;
172
+ }
173
+ var keyboardHeight = Math.max(keyboardOccludedHeight, (0, import_webViewport.getWebKeyboardBottomInset)());
174
+ if (keyboardHeight <= 0) return;
175
+ var activeRect = active.getBoundingClientRect();
176
+ var nodeRect = node.getBoundingClientRect();
177
+ var margin = 12;
178
+ var keyboardTop = (0, import_webViewport.getStableLayoutViewportHeight)() - keyboardHeight;
179
+ var visibleTop = nodeRect.top + margin;
180
+ var visibleBottom = Math.min(nodeRect.bottom, keyboardTop) - margin;
181
+ var nextScrollTop = node.scrollTop;
182
+ if (activeRect.bottom > visibleBottom) {
183
+ nextScrollTop += Math.ceil(activeRect.bottom - visibleBottom);
184
+ } else if (activeRect.top < visibleTop) {
185
+ nextScrollTop -= Math.ceil(visibleTop - activeRect.top);
186
+ }
187
+ var maxScrollTop = Math.max(0, node.scrollHeight - node.clientHeight);
188
+ nextScrollTop = Math.max(0, Math.min(maxScrollTop, nextScrollTop));
189
+ if (nextScrollTop === node.scrollTop) return;
190
+ node.scrollTop = nextScrollTop;
191
+ currentScrollOffset.current = nextScrollTop;
192
+ scrollBridge.y = nextScrollTop;
193
+ if (nextScrollTop > 0) scrollBridge.scrollStartY = -1;
194
+ }, [hasFit, isKeyboardVisible, keyboardOccludedHeight, scrollBridge]);
195
+ var scheduleFocusedInputScroll = import_react.default.useCallback(function () {
196
+ if (!import_core.isWeb || !hasFit) return;
197
+ cancelAnimationFrame(focusedInputScrollFrame.current);
198
+ focusedInputScrollFrame.current = requestAnimationFrame(function () {
199
+ scrollFocusedInputClearOfKeyboard();
200
+ focusedInputScrollFrame.current = requestAnimationFrame(scrollFocusedInputClearOfKeyboard);
201
+ });
202
+ }, [hasFit, scrollFocusedInputClearOfKeyboard]);
203
+ (0, import_react.useEffect)(function () {
204
+ var _window_visualViewport;
205
+ if (!import_core.isWeb || !hasFit) return;
206
+ scheduleFocusedInputScroll();
207
+ window.addEventListener("focusin", scheduleFocusedInputScroll);
208
+ (_window_visualViewport = window.visualViewport) === null || _window_visualViewport === void 0 ? void 0 : _window_visualViewport.addEventListener("resize", scheduleFocusedInputScroll);
209
+ return function () {
210
+ var _window_visualViewport2;
211
+ cancelAnimationFrame(focusedInputScrollFrame.current);
212
+ window.removeEventListener("focusin", scheduleFocusedInputScroll);
213
+ (_window_visualViewport2 = window.visualViewport) === null || _window_visualViewport2 === void 0 ? void 0 : _window_visualViewport2.removeEventListener("resize", scheduleFocusedInputScroll);
214
+ };
215
+ }, [hasFit, scheduleFocusedInputScroll]);
102
216
  (0, import_react.useEffect)(function () {
103
217
  setHasScrollView(true);
104
218
  if ((0, import_gestureState.isGestureHandlerEnabled)()) {
@@ -111,14 +225,14 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
111
225
  scrollBridge.forceScrollTo = void 0;
112
226
  };
113
227
  }, []);
114
- var [hasScrollableContent, setHasScrollableContent] = (0, import_react.useState)(true);
115
- var parentHeight = (0, import_react.useRef)(0);
116
- var contentHeight = (0, import_react.useRef)(0);
117
228
  var updateScrollable = function () {
118
229
  if (parentHeight.current && contentHeight.current) {
119
230
  setHasScrollableContent(contentHeight.current > parentHeight.current);
120
231
  }
121
232
  };
233
+ var recordFitHeight = function (height) {
234
+ parentHeight.current = height;
235
+ };
122
236
  (0, import_react.useEffect)(function () {
123
237
  scrollBridge.hasScrollableContent = hasScrollableContent;
124
238
  }, [hasScrollableContent]);
@@ -127,30 +241,36 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
127
241
  scrollBridge,
128
242
  hasScrollableContent,
129
243
  scrollEnabled,
130
- setScrollEnabled
244
+ setScrollEnabled,
245
+ onManualScroll: emitManualScroll
131
246
  });
132
- var contentWrapper = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
247
+ var contentWrapper = /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_core.View, {
133
248
  onLayout: function (e) {
134
249
  var height = Math.floor(e.nativeEvent.layout.height);
135
250
  if (height !== contentHeight.current) {
136
251
  contentHeight.current = height;
137
252
  updateScrollable();
253
+ if (keyboardOccludedHeight > 0) {
254
+ scheduleFocusedInputScroll();
255
+ }
138
256
  }
139
257
  },
140
- children
258
+ children: [children, keyboardOccludedHeight > 0 && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_core.View, {
259
+ "data-sheet-keyboard-scroll-pad": true,
260
+ height: keyboardOccludedHeight,
261
+ width: "100%"
262
+ })]
141
263
  });
142
264
  if (useRNGHScrollView && RNGHScrollView && panGestureRef) {
143
265
  var RNGHComponent = RNGHScrollView;
144
266
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(RNGHComponent, {
145
267
  ref: (0, import_compose_refs.composeRefs)(scrollRef, ref),
146
- style: {
147
- flex: 1
148
- },
268
+ style: fitSizingStyle,
149
269
  scrollEventThrottle: 1,
150
270
  scrollEnabled,
151
271
  simultaneousHandlers: [panGestureRef],
152
272
  onLayout: function (e) {
153
- parentHeight.current = Math.ceil(e.nativeEvent.layout.height);
273
+ recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
154
274
  updateScrollable();
155
275
  },
156
276
  onScroll: function (e) {
@@ -167,40 +287,44 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
167
287
  animated: false
168
288
  });
169
289
  }
290
+ currentScrollOffset.current = scrollBridge.scrollLockY;
170
291
  scrollBridge.y = scrollBridge.scrollLockY;
171
- onScroll === null || onScroll === void 0 ? void 0 : onScroll({
172
- ...e,
173
- nativeEvent: {
174
- ...e.nativeEvent,
175
- contentOffset: {
176
- ...e.nativeEvent.contentOffset,
177
- y: scrollBridge.scrollLockY
292
+ if (lastEmittedScrollOffset.current !== scrollBridge.scrollLockY) {
293
+ lastEmittedScrollOffset.current = scrollBridge.scrollLockY;
294
+ onScroll === null || onScroll === void 0 ? void 0 : onScroll({
295
+ ...e,
296
+ nativeEvent: {
297
+ ...e.nativeEvent,
298
+ contentOffset: {
299
+ ...e.nativeEvent.contentOffset,
300
+ y: scrollBridge.scrollLockY
301
+ }
178
302
  }
179
- }
180
- });
303
+ });
304
+ }
181
305
  return;
182
306
  }
183
307
  scrollBridge.y = y;
184
308
  if (y > 0) scrollBridge.scrollStartY = -1;
309
+ lastEmittedScrollOffset.current = y;
185
310
  onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
186
311
  },
187
- contentContainerStyle: {
188
- minHeight: "100%"
189
- },
312
+ contentContainerStyle,
190
313
  bounces: false,
191
314
  keyboardShouldPersistTaps: "always",
192
315
  keyboardDismissMode: "none",
193
316
  ...props,
317
+ ...keyboardFrozenOverride,
194
318
  children: contentWrapper
195
319
  });
196
320
  }
197
321
  return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_scroll_view.ScrollView, {
198
322
  onLayout: function (e) {
199
- parentHeight.current = Math.ceil(e.nativeEvent.layout.height);
323
+ recordFitHeight(Math.ceil(e.nativeEvent.layout.height));
200
324
  updateScrollable();
201
325
  },
202
326
  ref: (0, import_compose_refs.composeRefs)(scrollRef, ref),
203
- flex: 1,
327
+ ...fitSizingStyle,
204
328
  scrollEventThrottle: 1,
205
329
  className: "_ovs-contain",
206
330
  scrollEnabled,
@@ -208,15 +332,16 @@ var SheetScrollView = /* @__PURE__ */import_react.default.forwardRef(function (p
208
332
  var {
209
333
  y
210
334
  } = e.nativeEvent.contentOffset;
335
+ currentScrollOffset.current = y;
211
336
  scrollBridge.y = y;
212
337
  if (y > 0) scrollBridge.scrollStartY = -1;
338
+ lastEmittedScrollOffset.current = y;
213
339
  onScroll === null || onScroll === void 0 ? void 0 : onScroll(e);
214
340
  },
215
- contentContainerStyle: {
216
- minHeight: "100%"
217
- },
341
+ contentContainerStyle,
218
342
  ...gestureProps,
219
343
  ...props,
344
+ ...keyboardFrozenOverride,
220
345
  children: contentWrapper
221
346
  });
222
347
  });