@tamagui/react-native-web-lite 2.7.7 → 3.0.0-beta.643.1

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 (504) hide show
  1. package/dist/cjs/AccessibilityInfo/index.cjs +82 -87
  2. package/dist/cjs/ActivityIndicator/index.cjs +83 -103
  3. package/dist/cjs/Alert/index.cjs +17 -20
  4. package/dist/cjs/AppRegistry/AppContainer.cjs +37 -52
  5. package/dist/cjs/AppRegistry/index.cjs +69 -81
  6. package/dist/cjs/AppRegistry/renderApplication.cjs +42 -54
  7. package/dist/cjs/AppState/index.cjs +60 -67
  8. package/dist/cjs/Appearance/index.cjs +40 -49
  9. package/dist/cjs/BackHandler/index.cjs +20 -25
  10. package/dist/cjs/Clipboard/index.cjs +50 -53
  11. package/dist/cjs/DeviceEmitter.cjs +15 -18
  12. package/dist/cjs/DeviceInfo/index.cjs +50 -63
  13. package/dist/cjs/Dimensions/index.cjs +86 -89
  14. package/dist/cjs/FlatList.cjs +177 -211
  15. package/dist/cjs/I18nManager/index.cjs +24 -29
  16. package/dist/cjs/Image/index.cjs +277 -308
  17. package/dist/cjs/Image/types.cjs +10 -11
  18. package/dist/cjs/ImageBackground/index.cjs +35 -48
  19. package/dist/cjs/InteractionManager/TaskQueue.cjs +95 -100
  20. package/dist/cjs/InteractionManager/index.cjs +105 -115
  21. package/dist/cjs/Keyboard/index.cjs +23 -28
  22. package/dist/cjs/KeyboardAvoidingView/index.cjs +41 -54
  23. package/dist/cjs/Libraries/Pressability/Pressability.cjs +15 -18
  24. package/dist/cjs/Libraries/Pressability/usePressability.cjs +15 -18
  25. package/dist/cjs/Linking/index.cjs +86 -89
  26. package/dist/cjs/LogBox/index.cjs +20 -21
  27. package/dist/cjs/Modal/ModalAnimation.cjs +131 -151
  28. package/dist/cjs/Modal/ModalContent.cjs +57 -77
  29. package/dist/cjs/Modal/ModalPortal.cjs +38 -46
  30. package/dist/cjs/Modal/index.cjs +15 -18
  31. package/dist/cjs/NativeModules/index.cjs +15 -20
  32. package/dist/cjs/PanResponder/index.cjs +18 -26
  33. package/dist/cjs/PixelRatio/index.cjs +45 -48
  34. package/dist/cjs/Pressable/index.cjs +130 -142
  35. package/dist/cjs/RefreshControl/index.cjs +18 -35
  36. package/dist/cjs/SafeAreaView/index.cjs +35 -46
  37. package/dist/cjs/ScrollView/WebScrollView.cjs +270 -0
  38. package/dist/cjs/ScrollView/index.cjs +15 -662
  39. package/dist/cjs/SectionList.cjs +19 -25
  40. package/dist/cjs/Share/index.cjs +44 -47
  41. package/dist/cjs/StatusBar/index.cjs +17 -18
  42. package/dist/cjs/Text/index.cjs +133 -171
  43. package/dist/cjs/Text/types.cjs +10 -11
  44. package/dist/cjs/TextInput/index.cjs +281 -359
  45. package/dist/cjs/TextInput/types.cjs +10 -11
  46. package/dist/cjs/TouchableNativeFeedback.cjs +15 -18
  47. package/dist/cjs/TouchableOpacity.cjs +91 -99
  48. package/dist/cjs/TouchableWithoutFeedback.cjs +65 -74
  49. package/dist/cjs/UnimplementedView.cjs +26 -36
  50. package/dist/cjs/Vibration/index.cjs +25 -28
  51. package/dist/cjs/View/index.cjs +89 -121
  52. package/dist/cjs/View/types.cjs +10 -11
  53. package/dist/cjs/VirtualizedList.cjs +19 -25
  54. package/dist/cjs/codegenNativeCommands.cjs +32 -0
  55. package/dist/cjs/codegenNativeComponent.cjs +19 -18
  56. package/dist/cjs/createElement/index.cjs +52 -70
  57. package/dist/cjs/createReactDOMStyle.cjs +16 -17
  58. package/dist/cjs/index.cjs +106 -106
  59. package/dist/cjs/modules/requestIdleCallback.cjs +28 -29
  60. package/dist/cjs/preprocess.cjs +19 -20
  61. package/dist/cjs/render/index.cjs +18 -19
  62. package/dist/cjs/styleTypes.cjs +10 -11
  63. package/dist/cjs/types.cjs +10 -11
  64. package/dist/cjs/useColorScheme/index.cjs +27 -37
  65. package/dist/cjs/useLocaleContext/index.cjs +15 -18
  66. package/dist/cjs/useWindowDimensions/index.cjs +32 -42
  67. package/dist/cjs/vendor/react-native/Animated/Animated.cjs +23 -24
  68. package/dist/cjs/vendor/react-native/Animated/AnimatedEvent.cjs +136 -141
  69. package/dist/cjs/vendor/react-native/Animated/AnimatedImplementation.cjs +500 -533
  70. package/dist/cjs/vendor/react-native/Animated/AnimatedMock.cjs +100 -109
  71. package/dist/cjs/vendor/react-native/Animated/AnimatedPlatformConfig.cjs +2 -1
  72. package/dist/cjs/vendor/react-native/Animated/Easing.cjs +182 -183
  73. package/dist/cjs/vendor/react-native/Animated/NativeAnimatedHelper.cjs +302 -328
  74. package/dist/cjs/vendor/react-native/Animated/NativeAnimatedModule.cjs +48 -56
  75. package/dist/cjs/vendor/react-native/Animated/NativeAnimatedTurboModule.cjs +46 -53
  76. package/dist/cjs/vendor/react-native/Animated/SpringConfig.cjs +63 -64
  77. package/dist/cjs/vendor/react-native/Animated/animations/Animation.cjs +52 -56
  78. package/dist/cjs/vendor/react-native/Animated/animations/DecayAnimation.cjs +74 -79
  79. package/dist/cjs/vendor/react-native/Animated/animations/SpringAnimation.cjs +210 -215
  80. package/dist/cjs/vendor/react-native/Animated/animations/TimingAnimation.cjs +107 -116
  81. package/dist/cjs/vendor/react-native/Animated/bezier.cjs +83 -88
  82. package/dist/cjs/vendor/react-native/Animated/components/AnimatedFlatList.cjs +23 -29
  83. package/dist/cjs/vendor/react-native/Animated/components/AnimatedImage.cjs +19 -25
  84. package/dist/cjs/vendor/react-native/Animated/components/AnimatedScrollView.cjs +23 -29
  85. package/dist/cjs/vendor/react-native/Animated/components/AnimatedSectionList.cjs +23 -29
  86. package/dist/cjs/vendor/react-native/Animated/components/AnimatedText.cjs +16 -17
  87. package/dist/cjs/vendor/react-native/Animated/components/AnimatedView.cjs +16 -17
  88. package/dist/cjs/vendor/react-native/Animated/createAnimatedComponent.cjs +32 -44
  89. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedAddition.cjs +51 -52
  90. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedColor.cjs +244 -247
  91. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedDiffClamp.cjs +59 -60
  92. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedDivision.cjs +65 -66
  93. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedInterpolation.cjs +185 -188
  94. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedModulo.cjs +49 -50
  95. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedMultiplication.cjs +51 -52
  96. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedNode.cjs +152 -156
  97. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedProps.cjs +133 -134
  98. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedStyle.cjs +113 -116
  99. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedSubtraction.cjs +51 -52
  100. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedTracking.cjs +73 -75
  101. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedTransform.cjs +109 -110
  102. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedValue.cjs +212 -216
  103. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedValueXY.cjs +96 -103
  104. package/dist/cjs/vendor/react-native/Animated/nodes/AnimatedWithChildren.cjs +70 -71
  105. package/dist/cjs/vendor/react-native/Animated/useAnimatedProps.cjs +75 -76
  106. package/dist/cjs/vendor/react-native/Batchinator/index.cjs +46 -57
  107. package/dist/cjs/vendor/react-native/EventEmitter/NativeEventEmitter.cjs +54 -57
  108. package/dist/cjs/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.cjs +16 -17
  109. package/dist/cjs/vendor/react-native/FeatureFlags.cjs +21 -24
  110. package/dist/cjs/vendor/react-native/FillRateHelper/index.cjs +165 -173
  111. package/dist/cjs/vendor/react-native/FlatList/index.cjs +259 -294
  112. package/dist/cjs/vendor/react-native/JSEventLoopWatchdog/index.cjs +66 -69
  113. package/dist/cjs/vendor/react-native/LayoutAnimation/index.cjs +87 -91
  114. package/dist/cjs/vendor/react-native/PanResponder/index.cjs +170 -176
  115. package/dist/cjs/vendor/react-native/PooledClass/index.cjs +42 -43
  116. package/dist/cjs/vendor/react-native/ReactNative/ReactNativeFeatureFlags.cjs +21 -22
  117. package/dist/cjs/vendor/react-native/SectionList/index.cjs +95 -110
  118. package/dist/cjs/vendor/react-native/StaticContainer/index.cjs +28 -34
  119. package/dist/cjs/vendor/react-native/StaticRenderer/index.cjs +27 -33
  120. package/dist/cjs/vendor/react-native/TouchHistoryMath/index.cjs +82 -111
  121. package/dist/cjs/vendor/react-native/TurboModule/RCTExport.cjs +17 -22
  122. package/dist/cjs/vendor/react-native/TurboModule/TurboModuleRegistry.cjs +20 -21
  123. package/dist/cjs/vendor/react-native/Types/CoreEventTypes.cjs +124 -127
  124. package/dist/cjs/vendor/react-native/Utilities/Platform.cjs +16 -17
  125. package/dist/cjs/vendor/react-native/Utilities/clamp.cjs +23 -24
  126. package/dist/cjs/vendor/react-native/Utilities/setAndForwardRef.cjs +26 -30
  127. package/dist/cjs/vendor/react-native/Utilities/useMergeRefs.cjs +27 -30
  128. package/dist/cjs/vendor/react-native/Utilities/useRefEffect.cjs +26 -27
  129. package/dist/cjs/vendor/react-native/ViewabilityHelper/index.cjs +154 -163
  130. package/dist/cjs/vendor/react-native/ViewabilityHelper.cjs +147 -156
  131. package/dist/cjs/vendor/react-native/VirtualizeUtils/index.cjs +124 -125
  132. package/dist/cjs/vendor/react-native/VirtualizedList/CellRenderMask.cjs +100 -99
  133. package/dist/cjs/vendor/react-native/VirtualizedList/ChildListCollection.cjs +63 -64
  134. package/dist/cjs/vendor/react-native/VirtualizedList/StateSafePureComponent.cjs +66 -75
  135. package/dist/cjs/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.cjs +104 -160
  136. package/dist/cjs/vendor/react-native/VirtualizedList/VirtualizedListContext.cjs +56 -64
  137. package/dist/cjs/vendor/react-native/VirtualizedList/VirtualizedListProps.cjs +51 -52
  138. package/dist/cjs/vendor/react-native/VirtualizedList/index.cjs +222 -284
  139. package/dist/cjs/vendor/react-native/VirtualizedSectionList/index.cjs +124 -144
  140. package/dist/cjs/vendor/react-native/deepDiffer/index.cjs +58 -59
  141. package/dist/cjs/vendor/react-native/emitter/EventEmitter.cjs +16 -17
  142. package/dist/cjs/vendor/react-native/emitter/EventSubscription.cjs +2 -1
  143. package/dist/cjs/vendor/react-native/emitter/_EmitterSubscription.cjs +43 -44
  144. package/dist/cjs/vendor/react-native/emitter/_EventEmitter.cjs +115 -120
  145. package/dist/cjs/vendor/react-native/emitter/_EventSubscription.cjs +31 -32
  146. package/dist/cjs/vendor/react-native/emitter/_EventSubscriptionVendor.cjs +80 -81
  147. package/dist/cjs/vendor/react-native/infoLog/index.cjs +17 -18
  148. package/dist/cjs/vendor/react-native/useRefEffect.cjs +26 -27
  149. package/dist/cjs/vendor/react-native/vendor/emitter/EventEmitter.cjs +88 -89
  150. package/dist/cjs/without-animated.cjs +255 -267
  151. package/dist/esm/AccessibilityInfo/index.mjs +69 -69
  152. package/dist/esm/AccessibilityInfo/index.mjs.map +1 -1
  153. package/dist/esm/ActivityIndicator/index.mjs +66 -78
  154. package/dist/esm/ActivityIndicator/index.mjs.map +1 -1
  155. package/dist/esm/Alert/index.mjs +4 -3
  156. package/dist/esm/Alert/index.mjs.map +1 -1
  157. package/dist/esm/AppRegistry/AppContainer.mjs +21 -28
  158. package/dist/esm/AppRegistry/AppContainer.mjs.map +1 -1
  159. package/dist/esm/AppRegistry/index.mjs +58 -65
  160. package/dist/esm/AppRegistry/index.mjs.map +1 -1
  161. package/dist/esm/AppRegistry/renderApplication.mjs +30 -40
  162. package/dist/esm/AppRegistry/renderApplication.mjs.map +1 -1
  163. package/dist/esm/AppState/index.mjs +48 -50
  164. package/dist/esm/AppState/index.mjs.map +1 -1
  165. package/dist/esm/Appearance/index.mjs +27 -31
  166. package/dist/esm/Appearance/index.mjs.map +1 -1
  167. package/dist/esm/BackHandler/index.mjs +6 -7
  168. package/dist/esm/BackHandler/index.mjs.map +1 -1
  169. package/dist/esm/Clipboard/index.mjs +37 -36
  170. package/dist/esm/Clipboard/index.mjs.map +1 -1
  171. package/dist/esm/DeviceEmitter.mjs +2 -0
  172. package/dist/esm/DeviceEmitter.mjs.map +1 -1
  173. package/dist/esm/DeviceInfo/index.mjs +37 -45
  174. package/dist/esm/DeviceInfo/index.mjs.map +1 -1
  175. package/dist/esm/Dimensions/index.mjs +72 -72
  176. package/dist/esm/Dimensions/index.mjs.map +1 -1
  177. package/dist/esm/FlatList.mjs +162 -188
  178. package/dist/esm/FlatList.mjs.map +1 -1
  179. package/dist/esm/I18nManager/index.mjs +10 -11
  180. package/dist/esm/I18nManager/index.mjs.map +1 -1
  181. package/dist/esm/Image/index.mjs +261 -285
  182. package/dist/esm/Image/index.mjs.map +1 -1
  183. package/dist/esm/Image/types.mjs +0 -2
  184. package/dist/esm/ImageBackground/index.mjs +21 -31
  185. package/dist/esm/ImageBackground/index.mjs.map +1 -1
  186. package/dist/esm/InteractionManager/TaskQueue.mjs +83 -83
  187. package/dist/esm/InteractionManager/TaskQueue.mjs.map +1 -1
  188. package/dist/esm/InteractionManager/index.mjs +89 -89
  189. package/dist/esm/InteractionManager/index.mjs.map +1 -1
  190. package/dist/esm/Keyboard/index.mjs +10 -10
  191. package/dist/esm/Keyboard/index.mjs.map +1 -1
  192. package/dist/esm/KeyboardAvoidingView/index.mjs +24 -29
  193. package/dist/esm/KeyboardAvoidingView/index.mjs.map +1 -1
  194. package/dist/esm/Libraries/Pressability/Pressability.mjs +1 -0
  195. package/dist/esm/Libraries/Pressability/Pressability.mjs.map +1 -1
  196. package/dist/esm/Libraries/Pressability/usePressability.mjs +2 -1
  197. package/dist/esm/Libraries/Pressability/usePressability.mjs.map +1 -1
  198. package/dist/esm/Linking/index.mjs +73 -71
  199. package/dist/esm/Linking/index.mjs.map +1 -1
  200. package/dist/esm/LogBox/index.mjs +5 -4
  201. package/dist/esm/LogBox/index.mjs.map +1 -1
  202. package/dist/esm/Modal/ModalAnimation.mjs +116 -126
  203. package/dist/esm/Modal/ModalAnimation.mjs.map +1 -1
  204. package/dist/esm/Modal/ModalContent.mjs +41 -51
  205. package/dist/esm/Modal/ModalContent.mjs.map +1 -1
  206. package/dist/esm/Modal/ModalPortal.mjs +22 -20
  207. package/dist/esm/Modal/ModalPortal.mjs.map +1 -1
  208. package/dist/esm/Modal/index.mjs +1 -0
  209. package/dist/esm/Modal/index.mjs.map +1 -1
  210. package/dist/esm/NativeModules/index.mjs +3 -3
  211. package/dist/esm/NativeModules/index.mjs.map +1 -1
  212. package/dist/esm/PanResponder/index.mjs +3 -3
  213. package/dist/esm/PixelRatio/index.mjs +33 -31
  214. package/dist/esm/PixelRatio/index.mjs.map +1 -1
  215. package/dist/esm/Pressable/index.mjs +114 -119
  216. package/dist/esm/Pressable/index.mjs.map +1 -1
  217. package/dist/esm/RefreshControl/index.mjs +4 -18
  218. package/dist/esm/RefreshControl/index.mjs.map +1 -1
  219. package/dist/esm/SafeAreaView/index.mjs +18 -21
  220. package/dist/esm/SafeAreaView/index.mjs.map +1 -1
  221. package/dist/esm/ScrollView/WebScrollView.mjs +244 -0
  222. package/dist/esm/ScrollView/WebScrollView.mjs.map +1 -0
  223. package/dist/esm/ScrollView/index.mjs +3 -635
  224. package/dist/esm/SectionList.mjs +3 -4
  225. package/dist/esm/Share/index.mjs +32 -30
  226. package/dist/esm/Share/index.mjs.map +1 -1
  227. package/dist/esm/StatusBar/index.mjs +2 -1
  228. package/dist/esm/StatusBar/index.mjs.map +1 -1
  229. package/dist/esm/Text/index.mjs +116 -146
  230. package/dist/esm/Text/index.mjs.map +1 -1
  231. package/dist/esm/Text/types.mjs +0 -2
  232. package/dist/esm/TextInput/index.mjs +265 -336
  233. package/dist/esm/TextInput/index.mjs.map +1 -1
  234. package/dist/esm/TextInput/types.mjs +0 -2
  235. package/dist/esm/TouchableNativeFeedback.mjs +2 -2
  236. package/dist/esm/TouchableOpacity.mjs +75 -73
  237. package/dist/esm/TouchableOpacity.mjs.map +1 -1
  238. package/dist/esm/TouchableWithoutFeedback.mjs +49 -48
  239. package/dist/esm/TouchableWithoutFeedback.mjs.map +1 -1
  240. package/dist/esm/UnimplementedView.mjs +11 -11
  241. package/dist/esm/UnimplementedView.mjs.map +1 -1
  242. package/dist/esm/Vibration/index.mjs +11 -10
  243. package/dist/esm/Vibration/index.mjs.map +1 -1
  244. package/dist/esm/View/index.mjs +73 -97
  245. package/dist/esm/View/index.mjs.map +1 -1
  246. package/dist/esm/View/types.mjs +0 -2
  247. package/dist/esm/VirtualizedList.mjs +3 -4
  248. package/dist/esm/codegenNativeCommands.mjs +8 -0
  249. package/dist/esm/codegenNativeCommands.mjs.map +1 -0
  250. package/dist/esm/codegenNativeComponent.mjs +5 -3
  251. package/dist/esm/codegenNativeComponent.mjs.map +1 -1
  252. package/dist/esm/createElement/index.mjs +35 -45
  253. package/dist/esm/createElement/index.mjs.map +1 -1
  254. package/dist/esm/createReactDOMStyle.mjs +2 -0
  255. package/dist/esm/createReactDOMStyle.mjs.map +1 -1
  256. package/dist/esm/index.js +15 -10
  257. package/dist/esm/index.js.map +1 -1
  258. package/dist/esm/index.mjs +15 -10
  259. package/dist/esm/index.mjs.map +1 -1
  260. package/dist/esm/modules/requestIdleCallback.mjs +13 -12
  261. package/dist/esm/modules/requestIdleCallback.mjs.map +1 -1
  262. package/dist/esm/preprocess.mjs +3 -3
  263. package/dist/esm/render/index.mjs +1 -0
  264. package/dist/esm/render/index.mjs.map +1 -1
  265. package/dist/esm/styleTypes.mjs +0 -2
  266. package/dist/esm/types.mjs +0 -2
  267. package/dist/esm/useColorScheme/index.mjs +11 -11
  268. package/dist/esm/useColorScheme/index.mjs.map +1 -1
  269. package/dist/esm/useLocaleContext/index.mjs +2 -2
  270. package/dist/esm/useWindowDimensions/index.mjs +16 -16
  271. package/dist/esm/useWindowDimensions/index.mjs.map +1 -1
  272. package/dist/esm/vendor/react-native/Animated/Animated.mjs +12 -10
  273. package/dist/esm/vendor/react-native/Animated/Animated.mjs.map +1 -1
  274. package/dist/esm/vendor/react-native/Animated/AnimatedEvent.mjs +124 -127
  275. package/dist/esm/vendor/react-native/Animated/AnimatedEvent.mjs.map +1 -1
  276. package/dist/esm/vendor/react-native/Animated/AnimatedImplementation.mjs +485 -515
  277. package/dist/esm/vendor/react-native/Animated/AnimatedImplementation.mjs.map +1 -1
  278. package/dist/esm/vendor/react-native/Animated/AnimatedMock.mjs +85 -91
  279. package/dist/esm/vendor/react-native/Animated/AnimatedMock.mjs.map +1 -1
  280. package/dist/esm/vendor/react-native/Animated/AnimatedPlatformConfig.mjs +0 -2
  281. package/dist/esm/vendor/react-native/Animated/Easing.mjs +169 -167
  282. package/dist/esm/vendor/react-native/Animated/Easing.mjs.map +1 -1
  283. package/dist/esm/vendor/react-native/Animated/NativeAnimatedHelper.mjs +273 -296
  284. package/dist/esm/vendor/react-native/Animated/NativeAnimatedHelper.mjs.map +1 -1
  285. package/dist/esm/vendor/react-native/Animated/NativeAnimatedModule.mjs +26 -26
  286. package/dist/esm/vendor/react-native/Animated/NativeAnimatedModule.mjs.map +1 -1
  287. package/dist/esm/vendor/react-native/Animated/NativeAnimatedTurboModule.mjs +24 -23
  288. package/dist/esm/vendor/react-native/Animated/NativeAnimatedTurboModule.mjs.map +1 -1
  289. package/dist/esm/vendor/react-native/Animated/SpringConfig.mjs +48 -47
  290. package/dist/esm/vendor/react-native/Animated/SpringConfig.mjs.map +1 -1
  291. package/dist/esm/vendor/react-native/Animated/animations/Animation.mjs +38 -39
  292. package/dist/esm/vendor/react-native/Animated/animations/Animation.mjs.map +1 -1
  293. package/dist/esm/vendor/react-native/Animated/animations/DecayAnimation.mjs +60 -62
  294. package/dist/esm/vendor/react-native/Animated/animations/DecayAnimation.mjs.map +1 -1
  295. package/dist/esm/vendor/react-native/Animated/animations/SpringAnimation.mjs +196 -198
  296. package/dist/esm/vendor/react-native/Animated/animations/SpringAnimation.mjs.map +1 -1
  297. package/dist/esm/vendor/react-native/Animated/animations/TimingAnimation.mjs +93 -99
  298. package/dist/esm/vendor/react-native/Animated/animations/TimingAnimation.mjs.map +1 -1
  299. package/dist/esm/vendor/react-native/Animated/bezier.mjs +68 -71
  300. package/dist/esm/vendor/react-native/Animated/bezier.mjs.map +1 -1
  301. package/dist/esm/vendor/react-native/Animated/components/AnimatedFlatList.mjs +7 -5
  302. package/dist/esm/vendor/react-native/Animated/components/AnimatedFlatList.mjs.map +1 -1
  303. package/dist/esm/vendor/react-native/Animated/components/AnimatedImage.mjs +3 -1
  304. package/dist/esm/vendor/react-native/Animated/components/AnimatedImage.mjs.map +1 -1
  305. package/dist/esm/vendor/react-native/Animated/components/AnimatedScrollView.mjs +7 -5
  306. package/dist/esm/vendor/react-native/Animated/components/AnimatedScrollView.mjs.map +1 -1
  307. package/dist/esm/vendor/react-native/Animated/components/AnimatedSectionList.mjs +7 -5
  308. package/dist/esm/vendor/react-native/Animated/components/AnimatedSectionList.mjs.map +1 -1
  309. package/dist/esm/vendor/react-native/Animated/components/AnimatedText.mjs +2 -0
  310. package/dist/esm/vendor/react-native/Animated/components/AnimatedText.mjs.map +1 -1
  311. package/dist/esm/vendor/react-native/Animated/components/AnimatedView.mjs +2 -0
  312. package/dist/esm/vendor/react-native/Animated/components/AnimatedView.mjs.map +1 -1
  313. package/dist/esm/vendor/react-native/Animated/createAnimatedComponent.mjs +15 -19
  314. package/dist/esm/vendor/react-native/Animated/createAnimatedComponent.mjs.map +1 -1
  315. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedAddition.mjs +37 -35
  316. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedAddition.mjs.map +1 -1
  317. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedColor.mjs +230 -230
  318. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedColor.mjs.map +1 -1
  319. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedDiffClamp.mjs +45 -43
  320. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedDiffClamp.mjs.map +1 -1
  321. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedDivision.mjs +51 -49
  322. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedDivision.mjs.map +1 -1
  323. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedInterpolation.mjs +172 -172
  324. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedInterpolation.mjs.map +1 -1
  325. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedModulo.mjs +35 -33
  326. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedModulo.mjs.map +1 -1
  327. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedMultiplication.mjs +37 -35
  328. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedMultiplication.mjs.map +1 -1
  329. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedNode.mjs +138 -139
  330. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedNode.mjs.map +1 -1
  331. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedProps.mjs +119 -117
  332. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedProps.mjs.map +1 -1
  333. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedStyle.mjs +99 -99
  334. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedStyle.mjs.map +1 -1
  335. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedSubtraction.mjs +37 -35
  336. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedSubtraction.mjs.map +1 -1
  337. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedTracking.mjs +60 -59
  338. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedTracking.mjs.map +1 -1
  339. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedTransform.mjs +95 -93
  340. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedTransform.mjs.map +1 -1
  341. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedValue.mjs +198 -199
  342. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedValue.mjs.map +1 -1
  343. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedValueXY.mjs +82 -86
  344. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedValueXY.mjs.map +1 -1
  345. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedWithChildren.mjs +56 -54
  346. package/dist/esm/vendor/react-native/Animated/nodes/AnimatedWithChildren.mjs.map +1 -1
  347. package/dist/esm/vendor/react-native/Animated/useAnimatedProps.mjs +61 -59
  348. package/dist/esm/vendor/react-native/Animated/useAnimatedProps.mjs.map +1 -1
  349. package/dist/esm/vendor/react-native/Batchinator/index.mjs +32 -40
  350. package/dist/esm/vendor/react-native/Batchinator/index.mjs.map +1 -1
  351. package/dist/esm/vendor/react-native/EventEmitter/NativeEventEmitter.mjs +40 -40
  352. package/dist/esm/vendor/react-native/EventEmitter/NativeEventEmitter.mjs.map +1 -1
  353. package/dist/esm/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.mjs +2 -0
  354. package/dist/esm/vendor/react-native/EventEmitter/RCTDeviceEventEmitter.mjs.map +1 -1
  355. package/dist/esm/vendor/react-native/FeatureFlags.mjs +7 -6
  356. package/dist/esm/vendor/react-native/FeatureFlags.mjs.map +1 -1
  357. package/dist/esm/vendor/react-native/FillRateHelper/index.mjs +150 -156
  358. package/dist/esm/vendor/react-native/FillRateHelper/index.mjs.map +1 -1
  359. package/dist/esm/vendor/react-native/FlatList/index.mjs +244 -271
  360. package/dist/esm/vendor/react-native/FlatList/index.mjs.map +1 -1
  361. package/dist/esm/vendor/react-native/JSEventLoopWatchdog/index.mjs +52 -52
  362. package/dist/esm/vendor/react-native/JSEventLoopWatchdog/index.mjs.map +1 -1
  363. package/dist/esm/vendor/react-native/LayoutAnimation/index.mjs +73 -74
  364. package/dist/esm/vendor/react-native/LayoutAnimation/index.mjs.map +1 -1
  365. package/dist/esm/vendor/react-native/PanResponder/index.mjs +153 -151
  366. package/dist/esm/vendor/react-native/PanResponder/index.mjs.map +1 -1
  367. package/dist/esm/vendor/react-native/PooledClass/index.mjs +27 -26
  368. package/dist/esm/vendor/react-native/PooledClass/index.mjs.map +1 -1
  369. package/dist/esm/vendor/react-native/ReactNative/ReactNativeFeatureFlags.mjs +6 -5
  370. package/dist/esm/vendor/react-native/ReactNative/ReactNativeFeatureFlags.mjs.map +1 -1
  371. package/dist/esm/vendor/react-native/SectionList/index.mjs +78 -85
  372. package/dist/esm/vendor/react-native/SectionList/index.mjs.map +1 -1
  373. package/dist/esm/vendor/react-native/StaticContainer/index.mjs +11 -9
  374. package/dist/esm/vendor/react-native/StaticContainer/index.mjs.map +1 -1
  375. package/dist/esm/vendor/react-native/StaticRenderer/index.mjs +10 -8
  376. package/dist/esm/vendor/react-native/StaticRenderer/index.mjs.map +1 -1
  377. package/dist/esm/vendor/react-native/TouchHistoryMath/index.mjs +67 -94
  378. package/dist/esm/vendor/react-native/TouchHistoryMath/index.mjs.map +1 -1
  379. package/dist/esm/vendor/react-native/TurboModule/RCTExport.mjs +3 -6
  380. package/dist/esm/vendor/react-native/TurboModule/RCTExport.mjs.map +1 -1
  381. package/dist/esm/vendor/react-native/TurboModule/TurboModuleRegistry.mjs +6 -4
  382. package/dist/esm/vendor/react-native/TurboModule/TurboModuleRegistry.mjs.map +1 -1
  383. package/dist/esm/vendor/react-native/Types/CoreEventTypes.mjs +105 -106
  384. package/dist/esm/vendor/react-native/Types/CoreEventTypes.mjs.map +1 -1
  385. package/dist/esm/vendor/react-native/Utilities/Platform.mjs +2 -0
  386. package/dist/esm/vendor/react-native/Utilities/Platform.mjs.map +1 -1
  387. package/dist/esm/vendor/react-native/Utilities/clamp.mjs +8 -7
  388. package/dist/esm/vendor/react-native/Utilities/clamp.mjs.map +1 -1
  389. package/dist/esm/vendor/react-native/Utilities/setAndForwardRef.mjs +11 -13
  390. package/dist/esm/vendor/react-native/Utilities/setAndForwardRef.mjs.map +1 -1
  391. package/dist/esm/vendor/react-native/Utilities/useMergeRefs.mjs +13 -13
  392. package/dist/esm/vendor/react-native/Utilities/useMergeRefs.mjs.map +1 -1
  393. package/dist/esm/vendor/react-native/Utilities/useRefEffect.mjs +12 -10
  394. package/dist/esm/vendor/react-native/Utilities/useRefEffect.mjs.map +1 -1
  395. package/dist/esm/vendor/react-native/ViewabilityHelper/index.mjs +140 -146
  396. package/dist/esm/vendor/react-native/ViewabilityHelper/index.mjs.map +1 -1
  397. package/dist/esm/vendor/react-native/ViewabilityHelper.mjs +133 -139
  398. package/dist/esm/vendor/react-native/ViewabilityHelper.mjs.map +1 -1
  399. package/dist/esm/vendor/react-native/VirtualizeUtils/index.mjs +107 -106
  400. package/dist/esm/vendor/react-native/VirtualizeUtils/index.mjs.map +1 -1
  401. package/dist/esm/vendor/react-native/VirtualizedList/CellRenderMask.mjs +88 -82
  402. package/dist/esm/vendor/react-native/VirtualizedList/CellRenderMask.mjs.map +1 -1
  403. package/dist/esm/vendor/react-native/VirtualizedList/ChildListCollection.mjs +49 -47
  404. package/dist/esm/vendor/react-native/VirtualizedList/ChildListCollection.mjs.map +1 -1
  405. package/dist/esm/vendor/react-native/VirtualizedList/StateSafePureComponent.mjs +49 -50
  406. package/dist/esm/vendor/react-native/VirtualizedList/StateSafePureComponent.mjs.map +1 -1
  407. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.mjs +87 -135
  408. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListCellRenderer.mjs.map +1 -1
  409. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListContext.mjs +38 -38
  410. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListContext.mjs.map +1 -1
  411. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListProps.mjs +36 -35
  412. package/dist/esm/vendor/react-native/VirtualizedList/VirtualizedListProps.mjs.map +1 -1
  413. package/dist/esm/vendor/react-native/VirtualizedList/index.mjs +207 -266
  414. package/dist/esm/vendor/react-native/VirtualizedList/index.mjs.map +1 -1
  415. package/dist/esm/vendor/react-native/VirtualizedSectionList/index.mjs +107 -119
  416. package/dist/esm/vendor/react-native/VirtualizedSectionList/index.mjs.map +1 -1
  417. package/dist/esm/vendor/react-native/deepDiffer/index.mjs +43 -42
  418. package/dist/esm/vendor/react-native/deepDiffer/index.mjs.map +1 -1
  419. package/dist/esm/vendor/react-native/emitter/EventEmitter.mjs +2 -0
  420. package/dist/esm/vendor/react-native/emitter/EventEmitter.mjs.map +1 -1
  421. package/dist/esm/vendor/react-native/emitter/EventSubscription.mjs +0 -2
  422. package/dist/esm/vendor/react-native/emitter/_EmitterSubscription.mjs +29 -27
  423. package/dist/esm/vendor/react-native/emitter/_EmitterSubscription.mjs.map +1 -1
  424. package/dist/esm/vendor/react-native/emitter/_EventEmitter.mjs +101 -103
  425. package/dist/esm/vendor/react-native/emitter/_EventEmitter.mjs.map +1 -1
  426. package/dist/esm/vendor/react-native/emitter/_EventSubscription.mjs +16 -15
  427. package/dist/esm/vendor/react-native/emitter/_EventSubscription.mjs.map +1 -1
  428. package/dist/esm/vendor/react-native/emitter/_EventSubscriptionVendor.mjs +66 -64
  429. package/dist/esm/vendor/react-native/emitter/_EventSubscriptionVendor.mjs.map +1 -1
  430. package/dist/esm/vendor/react-native/infoLog/index.mjs +2 -1
  431. package/dist/esm/vendor/react-native/infoLog/index.mjs.map +1 -1
  432. package/dist/esm/vendor/react-native/useRefEffect.mjs +12 -10
  433. package/dist/esm/vendor/react-native/useRefEffect.mjs.map +1 -1
  434. package/dist/esm/vendor/react-native/vendor/emitter/EventEmitter.mjs +71 -70
  435. package/dist/esm/vendor/react-native/vendor/emitter/EventEmitter.mjs.map +1 -1
  436. package/dist/esm/without-animated.mjs +172 -187
  437. package/dist/esm/without-animated.mjs.map +1 -1
  438. package/package.json +12 -12
  439. package/src/ScrollView/WebScrollView.tsx +383 -0
  440. package/src/ScrollView/index.tsx +6 -892
  441. package/src/codegenNativeCommands.ts +6 -0
  442. package/src/codegenNativeComponent.ts +2 -2
  443. package/src/index.tsx +3 -0
  444. package/src/without-animated.tsx +1 -0
  445. package/dist/cjs/ActivityIndicator/__tests__/index-test.cjs +0 -209
  446. package/dist/cjs/AppRegistry/__tests__/index-test.cjs +0 -97
  447. package/dist/cjs/AppRegistry/__tests__/index-test.node.cjs +0 -162
  448. package/dist/cjs/AppState/__tests__/index-test.cjs +0 -38
  449. package/dist/cjs/Dimensions/__tests__/index-test.cjs +0 -67
  450. package/dist/cjs/ImageBackground/__tests__/index-test.cjs +0 -72
  451. package/dist/cjs/Linking/__tests__/index-test.cjs +0 -56
  452. package/dist/cjs/ScrollView/ScrollViewBase.cjs +0 -167
  453. package/dist/cjs/codegenNativeCommand.cjs +0 -31
  454. package/dist/cjs/createElement/__tests__/index-test.cjs +0 -828
  455. package/dist/esm/ActivityIndicator/__tests__/index-test.mjs +0 -186
  456. package/dist/esm/ActivityIndicator/__tests__/index-test.mjs.map +0 -1
  457. package/dist/esm/AppRegistry/__tests__/index-test.mjs +0 -74
  458. package/dist/esm/AppRegistry/__tests__/index-test.mjs.map +0 -1
  459. package/dist/esm/AppRegistry/__tests__/index-test.node.mjs +0 -139
  460. package/dist/esm/AppRegistry/__tests__/index-test.node.mjs.map +0 -1
  461. package/dist/esm/AppState/__tests__/index-test.mjs +0 -15
  462. package/dist/esm/AppState/__tests__/index-test.mjs.map +0 -1
  463. package/dist/esm/Dimensions/__tests__/index-test.mjs +0 -44
  464. package/dist/esm/Dimensions/__tests__/index-test.mjs.map +0 -1
  465. package/dist/esm/Image/types.mjs.map +0 -1
  466. package/dist/esm/ImageBackground/__tests__/index-test.mjs +0 -49
  467. package/dist/esm/ImageBackground/__tests__/index-test.mjs.map +0 -1
  468. package/dist/esm/Linking/__tests__/index-test.mjs +0 -33
  469. package/dist/esm/Linking/__tests__/index-test.mjs.map +0 -1
  470. package/dist/esm/PanResponder/index.mjs.map +0 -1
  471. package/dist/esm/ScrollView/ScrollViewBase.mjs +0 -130
  472. package/dist/esm/ScrollView/ScrollViewBase.mjs.map +0 -1
  473. package/dist/esm/ScrollView/index.mjs.map +0 -1
  474. package/dist/esm/SectionList.mjs.map +0 -1
  475. package/dist/esm/Text/types.mjs.map +0 -1
  476. package/dist/esm/TextInput/types.mjs.map +0 -1
  477. package/dist/esm/TouchableNativeFeedback.mjs.map +0 -1
  478. package/dist/esm/View/types.mjs.map +0 -1
  479. package/dist/esm/VirtualizedList.mjs.map +0 -1
  480. package/dist/esm/codegenNativeCommand.mjs +0 -6
  481. package/dist/esm/codegenNativeCommand.mjs.map +0 -1
  482. package/dist/esm/createElement/__tests__/index-test.mjs +0 -805
  483. package/dist/esm/createElement/__tests__/index-test.mjs.map +0 -1
  484. package/dist/esm/preprocess.mjs.map +0 -1
  485. package/dist/esm/styleTypes.mjs.map +0 -1
  486. package/dist/esm/types.mjs.map +0 -1
  487. package/dist/esm/useLocaleContext/index.mjs.map +0 -1
  488. package/dist/esm/vendor/react-native/Animated/AnimatedPlatformConfig.mjs.map +0 -1
  489. package/dist/esm/vendor/react-native/emitter/EventSubscription.mjs.map +0 -1
  490. package/src/ActivityIndicator/__tests__/__snapshots__/index-test.js.snap +0 -466
  491. package/src/ActivityIndicator/__tests__/index-test.tsx +0 -147
  492. package/src/AppRegistry/__tests__/index-test.node.tsx +0 -144
  493. package/src/AppRegistry/__tests__/index-test.tsx +0 -94
  494. package/src/AppState/__tests__/index-test.tsx +0 -24
  495. package/src/Dimensions/__tests__/index-test.tsx +0 -54
  496. package/src/ImageBackground/__tests__/index-test.tsx +0 -49
  497. package/src/Linking/__tests__/index-test.tsx +0 -37
  498. package/src/Pressable/__tests__/__snapshots__/index-test.js.snap +0 -196
  499. package/src/ScrollView/ScrollViewBase.tsx +0 -183
  500. package/src/ScrollView/__tests__/__snapshots__/index-test.js.snap +0 -49
  501. package/src/Text/__tests__/__snapshots__/index-test.js.snap +0 -218
  502. package/src/codegenNativeCommand.ts +0 -6
  503. package/src/createElement/__tests__/__snapshots__/index-test.js.snap +0 -13
  504. package/src/createElement/__tests__/index-test.tsx +0 -647
@@ -1,892 +1,6 @@
1
- // @ts-nocheck
2
- /**
3
- * Copyright (c) Nicolas Gallagher.
4
- * Copyright (c) Meta Platforms, Inc. and affiliates.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- *
9
- * @flow
10
- */
11
-
12
- import React from 'react'
13
- import {
14
- Platform,
15
- StyleSheet,
16
- TextInputState,
17
- UIManager,
18
- dismissKeyboard,
19
- invariant,
20
- mergeRefs,
21
- warning,
22
- } from '@tamagui/react-native-web-internals'
23
-
24
- import { Dimensions } from '../Dimensions/index'
25
- import { View } from '../View/index'
26
- import { ScrollViewBase } from './ScrollViewBase'
27
-
28
- const emptyObject = {} as any
29
- const IS_ANIMATING_TOUCH_START_THRESHOLD_MS = 16
30
-
31
- type Event = object
32
-
33
- class ScrollView extends React.Component<any> {
34
- _scrollNodeRef: any
35
- _innerViewRef: any
36
-
37
- keyboardWillOpenTo: any = null
38
- additionalScrollOffset = 0
39
- preventNegativeScrollOffset = false
40
- isTouching = false
41
- lastMomentumScrollBeginTime = 0
42
- lastMomentumScrollEndTime = 0
43
-
44
- // Reset to false every time becomes responder. This is used to:
45
- // - Determine if the scroll view has been scrolled and therefore should
46
- // refuse to give up its responder lock.
47
- // - Determine if releasing should dismiss the keyboard when we are in
48
- // tap-to-dismiss mode (!this.props.keyboardShouldPersistTaps).
49
- observedScrollSinceBecomingResponder = false
50
- becameResponderWhileAnimating = false
51
-
52
- /**
53
- * Returns a reference to the underlying scroll responder, which supports
54
- * operations like `scrollTo`. All ScrollView-like components should
55
- * implement this method so that they can be composed while providing access
56
- * to the underlying scroll responder's methods.
57
- */
58
- getScrollResponder() {
59
- return this
60
- }
61
-
62
- getScrollableNode() {
63
- return this._scrollNodeRef
64
- }
65
-
66
- getInnerViewRef() {
67
- return this._innerViewRef
68
- }
69
-
70
- getInnerViewNode() {
71
- return this._innerViewRef
72
- }
73
-
74
- getNativeScrollRef() {
75
- return this._scrollNodeRef
76
- }
77
-
78
- flashScrollIndicators = () => {
79
- this.scrollResponderFlashScrollIndicators()
80
- }
81
-
82
- /**
83
- * Scrolls to a given x, y offset, either immediately or with a smooth animation.
84
- * Syntax:
85
- *
86
- * scrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})
87
- *
88
- * Note: The weird argument signature is due to the fact that, for historical reasons,
89
- * the function also accepts separate arguments as as alternative to the options object.
90
- * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
91
- */
92
- scrollTo = (
93
- y?: number | { x?: number; y?: number; animated?: boolean },
94
- x?: number,
95
- animated?: boolean
96
- ) => {
97
- if (typeof y === 'number') {
98
- console.warn(
99
- '`scrollTo(y, x, animated)` is deprecated. Use `scrollTo({x: 5, y: 5, animated: true})` instead.'
100
- )
101
- } else {
102
- ;({ x, y, animated } = y || emptyObject)
103
- }
104
-
105
- this.scrollResponderScrollTo({
106
- x: x || 0,
107
- y: y || 0,
108
- animated: animated !== false,
109
- })
110
- }
111
-
112
- /**
113
- * If this is a vertical ScrollView scrolls to the bottom.
114
- * If this is a horizontal ScrollView scrolls to the right.
115
- *
116
- * Use `scrollToEnd({ animated: true })` for smooth animated scrolling,
117
- * `scrollToEnd({ animated: false })` for immediate scrolling.
118
- * If no options are passed, `animated` defaults to true.
119
- */
120
- scrollToEnd = (options?: { animated?: boolean }) => {
121
- // Default to true
122
- const animated = (options && options.animated) !== false
123
- const { horizontal } = this.props
124
- const scrollResponderNode = this.getScrollableNode()
125
- const x = horizontal ? scrollResponderNode.scrollWidth : 0
126
- const y = horizontal ? 0 : scrollResponderNode.scrollHeight
127
- this.scrollResponderScrollTo({ x, y, animated })
128
- }
129
-
130
- render() {
131
- const {
132
- contentContainerStyle,
133
- horizontal,
134
- onContentSizeChange,
135
- refreshControl,
136
- stickyHeaderIndices,
137
- pagingEnabled,
138
- /* eslint-disable */
139
- forwardedRef,
140
- keyboardDismissMode,
141
- onScroll,
142
- centerContent,
143
- // strip RN-only props that shouldn't reach the DOM
144
- contentOffset,
145
- contentInset,
146
- contentInsetAdjustmentBehavior,
147
- decelerationRate,
148
- directionalLockEnabled,
149
- disableIntervalMomentum,
150
- disableScrollViewPanResponder,
151
- endFillColor,
152
- fadingEdgeLength,
153
- indicatorStyle,
154
- invertStickyHeaders,
155
- keyboardShouldPersistTaps,
156
- maintainVisibleContentPosition,
157
- maximumZoomScale,
158
- minimumZoomScale,
159
- nestedScrollEnabled,
160
- onScrollToTop,
161
- overScrollMode,
162
- pinchGestureEnabled,
163
- removeClippedSubviews,
164
- scrollIndicatorInsets,
165
- scrollPerfTag,
166
- scrollToOverflowEnabled,
167
- snapToAlignment,
168
- snapToEnd,
169
- snapToInterval,
170
- snapToOffsets,
171
- snapToStart,
172
- StickyHeaderComponent,
173
- ScrollComponent,
174
- /* eslint-enable */
175
- ...other
176
- } = this.props
177
-
178
- if (process.env.NODE_ENV !== 'production' && this.props.style) {
179
- const style = StyleSheet.flatten(this.props.style)
180
- const childLayoutProps = ['alignItems', 'justifyContent'].filter(
181
- (prop) => style && style[prop] !== undefined
182
- )
183
- invariant(
184
- childLayoutProps.length === 0,
185
- `ScrollView child layout (${JSON.stringify(childLayoutProps)}) ` +
186
- 'must be applied through the contentContainerStyle prop.'
187
- )
188
- }
189
-
190
- let contentSizeChangeProps = {}
191
- if (onContentSizeChange) {
192
- contentSizeChangeProps = {
193
- onLayout: this._handleContentOnLayout.bind(this),
194
- }
195
- }
196
-
197
- const hasStickyHeaderIndices = !horizontal && Array.isArray(stickyHeaderIndices)
198
- const children =
199
- hasStickyHeaderIndices || pagingEnabled
200
- ? React.Children.map(this.props.children, (child, i) => {
201
- const isSticky = hasStickyHeaderIndices && stickyHeaderIndices.indexOf(i) > -1
202
- if (child != null && (isSticky || pagingEnabled)) {
203
- return (
204
- <View
205
- style={StyleSheet.compose(
206
- isSticky && styles.stickyHeader,
207
- pagingEnabled && styles.pagingEnabledChild
208
- )}
209
- >
210
- {child}
211
- </View>
212
- )
213
- } else {
214
- return child
215
- }
216
- })
217
- : this.props.children
218
-
219
- const contentContainer = (
220
- <View
221
- {...contentSizeChangeProps}
222
- // @ts-ignore
223
- collapsable={false}
224
- ref={this._setInnerViewRef.bind(this)}
225
- style={[
226
- horizontal && styles.contentContainerHorizontal,
227
- centerContent && styles.contentContainerCenterContent,
228
- contentContainerStyle,
229
- ]}
230
- >
231
- {children}
232
- </View>
233
- )
234
-
235
- const baseStyle = horizontal ? styles.baseHorizontal : styles.baseVertical
236
- const pagingEnabledStyle = horizontal
237
- ? styles.pagingEnabledHorizontal
238
- : styles.pagingEnabledVertical
239
-
240
- const props = {
241
- ...other,
242
- style: [baseStyle, pagingEnabled && pagingEnabledStyle, this.props.style],
243
- onTouchStart: this.scrollResponderHandleTouchStart.bind(this),
244
- onTouchMove: this.scrollResponderHandleTouchMove.bind(this),
245
- onTouchEnd: this.scrollResponderHandleTouchEnd.bind(this),
246
- onScrollBeginDrag: this.scrollResponderHandleScrollBeginDrag.bind(this),
247
- onScrollEndDrag: this.scrollResponderHandleScrollEndDrag.bind(this),
248
- onMomentumScrollBegin: this.scrollResponderHandleMomentumScrollBegin.bind(this),
249
- onMomentumScrollEnd: this.scrollResponderHandleMomentumScrollEnd.bind(this),
250
- onStartShouldSetResponder:
251
- this.scrollResponderHandleStartShouldSetResponder.bind(this),
252
- onStartShouldSetResponderCapture:
253
- this.scrollResponderHandleStartShouldSetResponderCapture.bind(this),
254
- onScrollShouldSetResponder:
255
- this.scrollResponderHandleScrollShouldSetResponder.bind(this),
256
- onScroll: this._handleScroll.bind(this),
257
- onResponderGrant: this.scrollResponderHandleResponderGrant.bind(this),
258
- onResponderTerminationRequest:
259
- this.scrollResponderHandleTerminationRequest.bind(this),
260
- onResponderRelease: this.scrollResponderHandleResponderRelease.bind(this),
261
- onResponderReject: this.scrollResponderHandleResponderReject.bind(this),
262
- onResponderTerminate: this.scrollResponderHandleTerminate.bind(this),
263
- }
264
-
265
- const ScrollViewClass = ScrollViewBase
266
-
267
- invariant(ScrollViewClass !== undefined, 'ScrollViewClass must not be undefined')
268
-
269
- const scrollView = (
270
- <ScrollViewClass {...props} ref={this._setScrollNodeRef.bind(this)}>
271
- {contentContainer}
272
- </ScrollViewClass>
273
- )
274
-
275
- if (refreshControl) {
276
- return React.cloneElement(refreshControl, { style: props.style }, scrollView)
277
- }
278
-
279
- return scrollView
280
- }
281
-
282
- _handleContentOnLayout(e: any) {
283
- const { width, height } = e.nativeEvent.layout
284
- this.props.onContentSizeChange?.(width, height)
285
- }
286
-
287
- _handleScroll(e: object) {
288
- if (process.env.NODE_ENV !== 'production') {
289
- if (this.props.onScroll && this.props.scrollEventThrottle == null) {
290
- console.info(
291
- 'You specified `onScroll` on a <ScrollView> but not ' +
292
- '`scrollEventThrottle`. You will only receive one event. ' +
293
- 'Using `16` you get all the events but be aware that it may ' +
294
- "cause frame drops, use a bigger number if you don't need as " +
295
- 'much precision.'
296
- )
297
- }
298
- }
299
-
300
- if (this.props.keyboardDismissMode === 'on-drag') {
301
- dismissKeyboard()
302
- }
303
-
304
- this.scrollResponderHandleScroll(e)
305
- }
306
-
307
- _setInnerViewRef(node) {
308
- this._innerViewRef = node
309
- }
310
-
311
- _setScrollNodeRef(node) {
312
- this._scrollNodeRef = node
313
- // ScrollView needs to add more methods to the hostNode in addition to those
314
- // added by `usePlatformMethods`. This is temporarily until an API like
315
- // `ScrollView.scrollTo(hostNode, { x, y })` is added to React Native.
316
- if (node != null) {
317
- node.getScrollResponder = this.getScrollResponder
318
- node.getInnerViewNode = this.getInnerViewNode
319
- node.getInnerViewRef = this.getInnerViewRef
320
- node.getNativeScrollRef = this.getNativeScrollRef
321
- node.getScrollableNode = this.getScrollableNode
322
- node.scrollTo = this.scrollTo
323
- node.scrollToEnd = this.scrollToEnd
324
- node.flashScrollIndicators = this.flashScrollIndicators
325
- node.scrollResponderZoomTo = this.scrollResponderZoomTo
326
- node.scrollResponderScrollNativeHandleToKeyboard =
327
- this.scrollResponderScrollNativeHandleToKeyboard
328
- }
329
- const ref = mergeRefs(this.props.forwardedRef)
330
- ref(node)
331
- }
332
-
333
- /**
334
- * Invoke this from an `onScroll` event.
335
- */
336
- scrollResponderHandleScrollShouldSetResponder(): boolean {
337
- return this.isTouching
338
- }
339
-
340
- /**
341
- * Merely touch starting is not sufficient for a scroll view to become the
342
- * responder. Being the "responder" means that the very next touch move/end
343
- * event will result in an action/movement.
344
- *
345
- * Invoke this from an `onStartShouldSetResponder` event.
346
- *
347
- * `onStartShouldSetResponder` is used when the next move/end will trigger
348
- * some UI movement/action, but when you want to yield priority to views
349
- * nested inside of the view.
350
- *
351
- * There may be some cases where scroll views actually should return `true`
352
- * from `onStartShouldSetResponder`: Any time we are detecting a standard tap
353
- * that gives priority to nested views.
354
- *
355
- * - If a single tap on the scroll view triggers an action such as
356
- * recentering a map style view yet wants to give priority to interaction
357
- * views inside (such as dropped pins or labels), then we would return true
358
- * from this method when there is a single touch.
359
- *
360
- * - Similar to the previous case, if a two finger "tap" should trigger a
361
- * zoom, we would check the `touches` count, and if `>= 2`, we would return
362
- * true.
363
- *
364
- */
365
- scrollResponderHandleStartShouldSetResponder(): boolean {
366
- return false
367
- }
368
-
369
- /**
370
- * There are times when the scroll view wants to become the responder
371
- * (meaning respond to the next immediate `touchStart/touchEnd`), in a way
372
- * that *doesn't* give priority to nested views (hence the capture phase):
373
- *
374
- * - Currently animating.
375
- * - Tapping anywhere that is not the focused input, while the keyboard is
376
- * up (which should dismiss the keyboard).
377
- *
378
- * Invoke this from an `onStartShouldSetResponderCapture` event.
379
- */
380
- scrollResponderHandleStartShouldSetResponderCapture(e: Event): boolean {
381
- // First see if we want to eat taps while the keyboard is up
382
- // var currentlyFocusedTextInput = TextInputState.currentlyFocusedField();
383
- // if (!this.props.keyboardShouldPersistTaps &&
384
- // currentlyFocusedTextInput != null &&
385
- // e.target !== currentlyFocusedTextInput) {
386
- // return true;
387
- // }
388
- return this.scrollResponderIsAnimating()
389
- }
390
-
391
- /**
392
- * Invoke this from an `onResponderReject` event.
393
- *
394
- * Some other element is not yielding its role as responder. Normally, we'd
395
- * just disable the `UIScrollView`, but a touch has already began on it, the
396
- * `UIScrollView` will not accept being disabled after that. The easiest
397
- * solution for now is to accept the limitation of disallowing this
398
- * altogether. To improve this, find a way to disable the `UIScrollView` after
399
- * a touch has already started.
400
- */
401
- scrollResponderHandleResponderReject() {
402
- warning(false, "ScrollView doesn't take rejection well - scrolls anyway")
403
- }
404
-
405
- /**
406
- * We will allow the scroll view to give up its lock iff it acquired the lock
407
- * during an animation. This is a very useful default that happens to satisfy
408
- * many common user experiences.
409
- *
410
- * - Stop a scroll on the left edge, then turn that into an outer view's
411
- * backswipe.
412
- * - Stop a scroll mid-bounce at the top, continue pulling to have the outer
413
- * view dismiss.
414
- * - However, without catching the scroll view mid-bounce (while it is
415
- * motionless), if you drag far enough for the scroll view to become
416
- * responder (and therefore drag the scroll view a bit), any backswipe
417
- * navigation of a swipe gesture higher in the view hierarchy, should be
418
- * rejected.
419
- */
420
- scrollResponderHandleTerminationRequest(): boolean {
421
- return !this.observedScrollSinceBecomingResponder
422
- }
423
-
424
- /**
425
- * Invoke this from an `onTouchEnd` event.
426
- *
427
- * @param {SyntheticEvent} e Event.
428
- */
429
- scrollResponderHandleTouchEnd(e: Event) {
430
- const nativeEvent = e.nativeEvent
431
- this.isTouching = nativeEvent.touches.length !== 0
432
- this.props.onTouchEnd && this.props.onTouchEnd(e)
433
- }
434
-
435
- /**
436
- * Invoke this from an `onResponderRelease` event.
437
- */
438
- scrollResponderHandleResponderRelease(e: Event) {
439
- this.props.onResponderRelease && this.props.onResponderRelease(e)
440
-
441
- // By default scroll views will unfocus a textField
442
- // if another touch occurs outside of it
443
- const currentlyFocusedTextInput = TextInputState.currentlyFocusedField()
444
- if (
445
- !this.props.keyboardShouldPersistTaps &&
446
- currentlyFocusedTextInput != null &&
447
- e.target !== currentlyFocusedTextInput &&
448
- !this.observedScrollSinceBecomingResponder &&
449
- !this.becameResponderWhileAnimating
450
- ) {
451
- this.props.onScrollResponderKeyboardDismissed &&
452
- this.props.onScrollResponderKeyboardDismissed(e)
453
- TextInputState.blurTextInput(currentlyFocusedTextInput)
454
- }
455
- }
456
-
457
- scrollResponderHandleScroll(e: Event) {
458
- this.observedScrollSinceBecomingResponder = true
459
- this.props.onScroll && this.props.onScroll(e)
460
- }
461
-
462
- /**
463
- * Invoke this from an `onResponderGrant` event.
464
- */
465
- scrollResponderHandleResponderGrant(e: Event) {
466
- this.observedScrollSinceBecomingResponder = false
467
- this.props.onResponderGrant && this.props.onResponderGrant(e)
468
- this.becameResponderWhileAnimating = this.scrollResponderIsAnimating()
469
- }
470
-
471
- /**
472
- * Unfortunately, `onScrollBeginDrag` also fires when *stopping* the scroll
473
- * animation, and there's not an easy way to distinguish a drag vs. stopping
474
- * momentum.
475
- *
476
- * Invoke this from an `onScrollBeginDrag` event.
477
- */
478
- scrollResponderHandleScrollBeginDrag(e: Event) {
479
- this.props.onScrollBeginDrag && this.props.onScrollBeginDrag(e)
480
- }
481
-
482
- /**
483
- * Invoke this from an `onScrollEndDrag` event.
484
- */
485
- scrollResponderHandleScrollEndDrag(e: Event) {
486
- this.props.onScrollEndDrag && this.props.onScrollEndDrag(e)
487
- }
488
-
489
- /**
490
- * Invoke this from an `onMomentumScrollBegin` event.
491
- */
492
- scrollResponderHandleMomentumScrollBegin(e: Event) {
493
- this.lastMomentumScrollBeginTime = Date.now()
494
- this.props.onMomentumScrollBegin && this.props.onMomentumScrollBegin(e)
495
- }
496
-
497
- /**
498
- * Invoke this from an `onMomentumScrollEnd` event.
499
- */
500
- scrollResponderHandleMomentumScrollEnd(e: Event) {
501
- this.lastMomentumScrollEndTime = Date.now()
502
- this.props.onMomentumScrollEnd && this.props.onMomentumScrollEnd(e)
503
- }
504
-
505
- /**
506
- * Invoke this from an `onTouchStart` event.
507
- *
508
- * Since we know that the `SimpleEventPlugin` occurs later in the plugin
509
- * order, after `ResponderEventPlugin`, we can detect that we were *not*
510
- * permitted to be the responder (presumably because a contained view became
511
- * responder). The `onResponderReject` won't fire in that case - it only
512
- * fires when a *current* responder rejects our request.
513
- *
514
- * @param {SyntheticEvent} e Touch Start event.
515
- */
516
- scrollResponderHandleTouchStart(e: Event) {
517
- this.isTouching = true
518
- this.props.onTouchStart && this.props.onTouchStart(e)
519
- }
520
-
521
- /**
522
- * Invoke this from an `onTouchMove` event.
523
- *
524
- * Since we know that the `SimpleEventPlugin` occurs later in the plugin
525
- * order, after `ResponderEventPlugin`, we can detect that we were *not*
526
- * permitted to be the responder (presumably because a contained view became
527
- * responder). The `onResponderReject` won't fire in that case - it only
528
- * fires when a *current* responder rejects our request.
529
- *
530
- * @param {SyntheticEvent} e Touch Start event.
531
- */
532
- scrollResponderHandleTouchMove(e: Event) {
533
- this.props.onTouchMove && this.props.onTouchMove(e)
534
- }
535
-
536
- scrollResponderHandleTerminate(e: Event) {
537
- this.props.onResponderTerminate && this.props.onResponderTerminate(e)
538
- }
539
-
540
- /**
541
- * A helper function for this class that lets us quickly determine if the
542
- * view is currently animating. This is particularly useful to know when
543
- * a touch has just started or ended.
544
- */
545
- scrollResponderIsAnimating(): boolean {
546
- const now = Date.now()
547
- const timeSinceLastMomentumScrollEnd = now - this.lastMomentumScrollEndTime
548
- const isAnimating =
549
- timeSinceLastMomentumScrollEnd < IS_ANIMATING_TOUCH_START_THRESHOLD_MS ||
550
- this.lastMomentumScrollEndTime < this.lastMomentumScrollBeginTime
551
- return isAnimating
552
- }
553
-
554
- /**
555
- * A helper function to scroll to a specific point in the scrollview.
556
- * This is currently used to help focus on child textviews, but can also
557
- * be used to quickly scroll to any element we want to focus. Syntax:
558
- *
559
- * scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})
560
- *
561
- * Note: The weird argument signature is due to the fact that, for historical reasons,
562
- * the function also accepts separate arguments as as alternative to the options object.
563
- * This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
564
- */
565
- scrollResponderScrollTo = (
566
- x?: number | { x?: number; y?: number; animated?: boolean },
567
- y?: number,
568
- animated?: boolean
569
- ) => {
570
- if (typeof x === 'number') {
571
- console.warn(
572
- '`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.'
573
- )
574
- } else {
575
- ;({ x, y, animated } = x || emptyObject)
576
- }
577
- const node = this.getScrollableNode()
578
- const left = x || 0
579
- const top = y || 0
580
- if (node != null) {
581
- if (typeof node.scroll === 'function') {
582
- node.scroll({ top, left, behavior: !animated ? 'auto' : 'smooth' })
583
- } else {
584
- node.scrollLeft = left
585
- node.scrollTop = top
586
- }
587
- }
588
- }
589
-
590
- /**
591
- * A helper function to zoom to a specific rect in the scrollview. The argument has the shape
592
- * {x: number; y: number; width: number; height: number; animated: boolean = true}
593
- *
594
- * @platform ios
595
- */
596
- scrollResponderZoomTo = (
597
- rect: {
598
- x: number
599
- y: number
600
- width: number
601
- height: number
602
- animated?: boolean
603
- },
604
- animated?: boolean // deprecated, put this inside the rect argument instead
605
- ) => {
606
- if (Platform.OS !== 'ios') {
607
- invariant('zoomToRect is not implemented')
608
- }
609
- }
610
-
611
- /**
612
- * Displays the scroll indicators momentarily.
613
- */
614
- scrollResponderFlashScrollIndicators() {}
615
-
616
- /**
617
- * This method should be used as the callback to onFocus in a TextInputs'
618
- * parent view. Note that any module using this mixin needs to return
619
- * the parent view's ref in getScrollViewRef() in order to use this method.
620
- * @param {any} nodeHandle The TextInput node handle
621
- * @param {number} additionalOffset The scroll view's top "contentInset".
622
- * Default is 0.
623
- * @param {bool} preventNegativeScrolling Whether to allow pulling the content
624
- * down to make it meet the keyboard's top. Default is false.
625
- */
626
- scrollResponderScrollNativeHandleToKeyboard = (
627
- nodeHandle: any,
628
- additionalOffset?: number,
629
- preventNegativeScrollOffset?: boolean
630
- ) => {
631
- this.additionalScrollOffset = additionalOffset || 0
632
- this.preventNegativeScrollOffset = !!preventNegativeScrollOffset
633
- UIManager.measureLayout(
634
- nodeHandle,
635
- this.getInnerViewNode(),
636
- this.scrollResponderTextInputFocusError,
637
- this.scrollResponderInputMeasureAndScrollToKeyboard
638
- )
639
- }
640
-
641
- /**
642
- * The calculations performed here assume the scroll view takes up the entire
643
- * screen - even if has some content inset. We then measure the offsets of the
644
- * keyboard, and compensate both for the scroll view's "contentInset".
645
- *
646
- * @param {number} left Position of input w.r.t. table view.
647
- * @param {number} top Position of input w.r.t. table view.
648
- * @param {number} width Width of the text input.
649
- * @param {number} height Height of the text input.
650
- */
651
- scrollResponderInputMeasureAndScrollToKeyboard = (
652
- left: number,
653
- top: number,
654
- width: number,
655
- height: number
656
- ) => {
657
- let keyboardScreenY = Dimensions.get('window').height
658
- if (this.keyboardWillOpenTo) {
659
- keyboardScreenY = this.keyboardWillOpenTo.endCoordinates.screenY
660
- }
661
- let scrollOffsetY = top - keyboardScreenY + height + this.additionalScrollOffset
662
-
663
- // By default, this can scroll with negative offset, pulling the content
664
- // down so that the target component's bottom meets the keyboard's top.
665
- // If requested otherwise, cap the offset at 0 minimum to avoid content
666
- // shifting down.
667
- if (this.preventNegativeScrollOffset) {
668
- scrollOffsetY = Math.max(0, scrollOffsetY)
669
- }
670
- this.scrollResponderScrollTo({ x: 0, y: scrollOffsetY, animated: true })
671
-
672
- this.additionalScrollOffset = 0
673
- this.preventNegativeScrollOffset = false
674
- }
675
-
676
- scrollResponderTextInputFocusError(e: Event) {
677
- console.error('Error measuring text field: ', e)
678
- }
679
-
680
- /**
681
- * Warning, this may be called several times for a single keyboard opening.
682
- * It's best to store the information in this method and then take any action
683
- * at a later point (either in `keyboardDidShow` or other).
684
- *
685
- * Here's the order that events occur in:
686
- * - focus
687
- * - willShow {startCoordinates, endCoordinates} several times
688
- * - didShow several times
689
- * - blur
690
- * - willHide {startCoordinates, endCoordinates} several times
691
- * - didHide several times
692
- *
693
- * The `ScrollResponder` providesModule callbacks for each of these events.
694
- * Even though any user could have easily listened to keyboard events
695
- * themselves, using these `props` callbacks ensures that ordering of events
696
- * is consistent - and not dependent on the order that the keyboard events are
697
- * subscribed to. This matters when telling the scroll view to scroll to where
698
- * the keyboard is headed - the scroll responder better have been notified of
699
- * the keyboard destination before being instructed to scroll to where the
700
- * keyboard will be. Stick to the `ScrollResponder` callbacks, and everything
701
- * will work.
702
- *
703
- * WARNING: These callbacks will fire even if a keyboard is displayed in a
704
- * different navigation pane. Filter out the events to determine if they are
705
- * relevant to you. (For example, only if you receive these callbacks after
706
- * you had explicitly focused a node etc).
707
- */
708
- scrollResponderKeyboardWillShow = (e: Event) => {
709
- this.keyboardWillOpenTo = e
710
- this.props.onKeyboardWillShow && this.props.onKeyboardWillShow(e)
711
- }
712
-
713
- scrollResponderKeyboardWillHide = (e: Event) => {
714
- this.keyboardWillOpenTo = null
715
- this.props.onKeyboardWillHide && this.props.onKeyboardWillHide(e)
716
- }
717
-
718
- scrollResponderKeyboardDidShow = (e: Event) => {
719
- // TODO(7693961): The event for DidShow is not available on iOS yet.
720
- // Use the one from WillShow and do not assign.
721
- if (e) {
722
- this.keyboardWillOpenTo = e
723
- }
724
- this.props.onKeyboardDidShow && this.props.onKeyboardDidShow(e)
725
- }
726
-
727
- scrollResponderKeyboardDidHide = (e: Event) => {
728
- this.keyboardWillOpenTo = null
729
- this.props.onKeyboardDidHide && this.props.onKeyboardDidHide(e)
730
- }
731
- }
732
-
733
- const commonStyle = {
734
- flexGrow: 1,
735
- flexShrink: 1,
736
- // Enable hardware compositing in modern browsers.
737
- // Creates a new layer with its own backing surface that can significantly
738
- // improve scroll performance.
739
- transform: [{ translateZ: 0 }],
740
- // iOS native scrolling
741
- WebkitOverflowScrolling: 'touch',
742
- }
743
-
744
- const styles = {
745
- baseVertical: {
746
- ...commonStyle,
747
- flexDirection: 'column',
748
- overflowX: 'hidden',
749
- overflowY: 'auto',
750
- },
751
- baseHorizontal: {
752
- ...commonStyle,
753
- flexDirection: 'row',
754
- overflowX: 'auto',
755
- overflowY: 'hidden',
756
- },
757
- contentContainerHorizontal: {
758
- flexDirection: 'row',
759
- },
760
- contentContainerCenterContent: {
761
- justifyContent: 'center',
762
- flexGrow: 1,
763
- },
764
- stickyHeader: {
765
- position: 'sticky',
766
- top: 0,
767
- zIndex: 10,
768
- },
769
- pagingEnabledHorizontal: {
770
- scrollSnapType: 'x mandatory',
771
- },
772
- pagingEnabledVertical: {
773
- scrollSnapType: 'y mandatory',
774
- },
775
- pagingEnabledChild: {
776
- scrollSnapAlign: 'start',
777
- },
778
- }
779
-
780
- export interface ScrollViewMethods {
781
- getScrollResponder: () => ScrollView
782
- getScrollableNode: () => HTMLElement
783
- getInnerViewNode: () => HTMLElement
784
- getInnerViewRef: () => HTMLElement
785
- getNativeScrollRef: () => HTMLElement
786
- scrollTo: (options?: { x?: number; y?: number; animated?: boolean }) => void
787
- scrollToEnd: (options?: { animated?: boolean }) => void
788
- flashScrollIndicators: () => void
789
- scrollResponderZoomTo: (rect: {
790
- x: number
791
- y: number
792
- width: number
793
- height: number
794
- animated?: boolean
795
- }) => void
796
- scrollResponderScrollNativeHandleToKeyboard: (
797
- nodeHandle: any,
798
- additionalOffset?: number,
799
- preventNegativeScrollOffset?: boolean
800
- ) => void
801
- }
802
-
803
- export type ScrollViewRef = HTMLElement & ScrollViewMethods
804
-
805
- const ForwardedScrollView = React.forwardRef<ScrollViewRef, any>(
806
- (props, forwardedRef) => {
807
- return <ScrollView {...props} forwardedRef={forwardedRef} />
808
- }
809
- )
810
-
811
- ForwardedScrollView.displayName = 'ScrollView'
812
-
813
- export { ForwardedScrollView as ScrollView }
814
- export default ForwardedScrollView
815
-
816
- /**
817
- * Mixin that can be integrated in order to handle scrolling that plays well
818
- * with `ResponderEventPlugin`. Integrate with your platform specific scroll
819
- * views, or even your custom built (every-frame animating) scroll views so that
820
- * all of these systems play well with the `ResponderEventPlugin`.
821
- *
822
- * iOS scroll event timing nuances:
823
- * ===============================
824
- *
825
- *
826
- * Scrolling without bouncing, if you touch down:
827
- * -------------------------------
828
- *
829
- * 1. `onMomentumScrollBegin` (when animation begins after letting up)
830
- * ... physical touch starts ...
831
- * 2. `onTouchStartCapture` (when you press down to stop the scroll)
832
- * 3. `onTouchStart` (same, but bubble phase)
833
- * 4. `onResponderRelease` (when lifting up - you could pause forever before * lifting)
834
- * 5. `onMomentumScrollEnd`
835
- *
836
- *
837
- * Scrolling with bouncing, if you touch down:
838
- * -------------------------------
839
- *
840
- * 1. `onMomentumScrollBegin` (when animation begins after letting up)
841
- * ... bounce begins ...
842
- * ... some time elapses ...
843
- * ... physical touch during bounce ...
844
- * 2. `onMomentumScrollEnd` (Makes no sense why this occurs first during bounce)
845
- * 3. `onTouchStartCapture` (immediately after `onMomentumScrollEnd`)
846
- * 4. `onTouchStart` (same, but bubble phase)
847
- * 5. `onTouchEnd` (You could hold the touch start for a long time)
848
- * 6. `onMomentumScrollBegin` (When releasing the view starts bouncing back)
849
- *
850
- * So when we receive an `onTouchStart`, how can we tell if we are touching
851
- * *during* an animation (which then causes the animation to stop)? The only way
852
- * to tell is if the `touchStart` occurred immediately after the
853
- * `onMomentumScrollEnd`.
854
- *
855
- * This is abstracted out for you, so you can just call this.scrollResponderIsAnimating() if
856
- * necessary
857
- *
858
- * `ScrollResponder` also includes logic for blurring a currently focused input
859
- * if one is focused while scrolling. The `ScrollResponder` is a natural place
860
- * to put this logic since it can support not dismissing the keyboard while
861
- * scrolling, unless a recognized "tap"-like gesture has occurred.
862
- *
863
- * The public lifecycle API includes events for keyboard interaction, responder
864
- * interaction, and scrolling (among others). The keyboard callbacks
865
- * `onKeyboardWill/Did/*` are *global* events, but are invoked on scroll
866
- * responder's props so that you can guarantee that the scroll responder's
867
- * internal state has been updated accordingly (and deterministically) by
868
- * the time the props callbacks are invoke. Otherwise, you would always wonder
869
- * if the scroll responder is currently in a state where it recognizes new
870
- * keyboard positions etc. If coordinating scrolling with keyboard movement,
871
- * *always* use these hooks instead of listening to your own global keyboard
872
- * events.
873
- *
874
- * Public keyboard lifecycle API: (props callbacks)
875
- *
876
- * Standard Keyboard Appearance Sequence:
877
- *
878
- * this.props.onKeyboardWillShow
879
- * this.props.onKeyboardDidShow
880
- *
881
- * `onScrollResponderKeyboardDismissed` will be invoked if an appropriate
882
- * tap inside the scroll responder's scrollable region was responsible
883
- * for the dismissal of the keyboard. There are other reasons why the
884
- * keyboard could be dismissed.
885
- *
886
- * this.props.onScrollResponderKeyboardDismissed
887
- *
888
- * Standard Keyboard Hide Sequence:
889
- *
890
- * this.props.onKeyboardWillHide
891
- * this.props.onKeyboardDidHide
892
- */
1
+ // lite keeps its own dependency-free copy of the web ScrollView (see
2
+ // WebScrollView.tsx header for why it cannot re-export from
3
+ // @tamagui/scroll-view). the tamagui component's implementation lives in
4
+ // code/ui/scroll-view/src/WebScrollView.tsx keep the two in sync.
5
+ export { WebScrollView as ScrollView } from './WebScrollView'
6
+ export type { ScrollViewMethods, ScrollViewRef } from './WebScrollView'