@tamagui/sheet 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 (435) hide show
  1. package/dist/cjs/GestureDetectorWrapper.cjs +32 -41
  2. package/dist/cjs/GestureDetectorWrapper.native.cjs +48 -0
  3. package/dist/cjs/GestureDetectorWrapper.native.js +32 -40
  4. package/dist/cjs/GestureDetectorWrapper.native.js.map +1 -1
  5. package/dist/cjs/GestureSheetContext.cjs +29 -37
  6. package/dist/cjs/GestureSheetContext.native.cjs +49 -0
  7. package/dist/cjs/GestureSheetContext.native.js +30 -37
  8. package/dist/cjs/GestureSheetContext.native.js.map +1 -1
  9. package/dist/cjs/Sheet.cjs +206 -99
  10. package/dist/cjs/Sheet.native.cjs +234 -0
  11. package/dist/cjs/Sheet.native.js +212 -98
  12. package/dist/cjs/Sheet.native.js.map +1 -1
  13. package/dist/cjs/SheetContext.cjs +44 -22
  14. package/dist/cjs/SheetContext.native.cjs +58 -0
  15. package/dist/cjs/SheetContext.native.js +45 -22
  16. package/dist/cjs/SheetContext.native.js.map +1 -1
  17. package/dist/cjs/SheetController.cjs +50 -56
  18. package/dist/cjs/SheetController.native.cjs +72 -0
  19. package/dist/cjs/SheetController.native.js +53 -58
  20. package/dist/cjs/SheetController.native.js.map +1 -1
  21. package/dist/cjs/SheetImplementationCustom.cjs +674 -605
  22. package/dist/cjs/SheetImplementationCustom.native.cjs +762 -0
  23. package/dist/cjs/SheetImplementationCustom.native.js +713 -644
  24. package/dist/cjs/SheetImplementationCustom.native.js.map +1 -1
  25. package/dist/cjs/SheetScrollView.cjs +291 -312
  26. package/dist/cjs/SheetScrollView.native.cjs +326 -0
  27. package/dist/cjs/SheetScrollView.native.js +299 -319
  28. package/dist/cjs/SheetScrollView.native.js.map +1 -1
  29. package/dist/cjs/constants.cjs +22 -21
  30. package/dist/cjs/constants.native.cjs +37 -0
  31. package/dist/cjs/constants.native.js +22 -20
  32. package/dist/cjs/constants.native.js.map +1 -1
  33. package/dist/cjs/contexts.cjs +20 -28
  34. package/dist/cjs/contexts.native.cjs +38 -0
  35. package/dist/cjs/contexts.native.js +20 -27
  36. package/dist/cjs/contexts.native.js.map +1 -1
  37. package/dist/cjs/controller.cjs +17 -18
  38. package/dist/cjs/controller.native.cjs +32 -0
  39. package/dist/cjs/controller.native.js +17 -17
  40. package/dist/cjs/controller.native.js.map +1 -1
  41. package/dist/cjs/gestureState.cjs +29 -30
  42. package/dist/cjs/gestureState.native.cjs +54 -0
  43. package/dist/cjs/gestureState.native.js +30 -30
  44. package/dist/cjs/gestureState.native.js.map +1 -1
  45. package/dist/cjs/helpers.cjs +21 -24
  46. package/dist/cjs/helpers.native.cjs +35 -0
  47. package/dist/cjs/helpers.native.js +22 -24
  48. package/dist/cjs/helpers.native.js.map +1 -1
  49. package/dist/cjs/index.cjs +15 -21
  50. package/dist/cjs/index.native.cjs +37 -0
  51. package/dist/cjs/index.native.js +16 -21
  52. package/dist/cjs/index.native.js.map +1 -1
  53. package/dist/cjs/keyboardAvoidance.cjs +56 -79
  54. package/dist/cjs/keyboardAvoidance.native.cjs +75 -0
  55. package/dist/cjs/keyboardAvoidance.native.js +56 -78
  56. package/dist/cjs/keyboardAvoidance.native.js.map +1 -1
  57. package/dist/cjs/nativeSheet.cjs +64 -76
  58. package/dist/cjs/nativeSheet.native.cjs +94 -0
  59. package/dist/cjs/nativeSheet.native.js +70 -83
  60. package/dist/cjs/nativeSheet.native.js.map +1 -1
  61. package/dist/cjs/types.cjs +10 -11
  62. package/dist/cjs/types.native.cjs +19 -0
  63. package/dist/cjs/types.native.js +10 -10
  64. package/dist/cjs/types.native.js.map +1 -1
  65. package/dist/cjs/useGestureHandlerPan.cjs +245 -257
  66. package/dist/cjs/useGestureHandlerPan.native.cjs +273 -0
  67. package/dist/cjs/useGestureHandlerPan.native.js +254 -265
  68. package/dist/cjs/useGestureHandlerPan.native.js.map +1 -1
  69. package/dist/cjs/useKeyboardControllerSheet.cjs +83 -88
  70. package/dist/cjs/useKeyboardControllerSheet.native.cjs +119 -0
  71. package/dist/cjs/useKeyboardControllerSheet.native.js +100 -111
  72. package/dist/cjs/useKeyboardControllerSheet.native.js.map +1 -1
  73. package/dist/cjs/useSafeAreaInsets.cjs +20 -26
  74. package/dist/cjs/useSafeAreaInsets.native.cjs +51 -0
  75. package/dist/cjs/useSafeAreaInsets.native.js +30 -25
  76. package/dist/cjs/useSafeAreaInsets.native.js.map +1 -1
  77. package/dist/cjs/useSheetController.cjs +27 -39
  78. package/dist/cjs/useSheetController.native.cjs +42 -0
  79. package/dist/cjs/useSheetController.native.js +28 -39
  80. package/dist/cjs/useSheetController.native.js.map +1 -1
  81. package/dist/cjs/useSheetOffscreenSize.cjs +44 -53
  82. package/dist/cjs/useSheetOffscreenSize.native.cjs +60 -0
  83. package/dist/cjs/useSheetOffscreenSize.native.js +48 -56
  84. package/dist/cjs/useSheetOffscreenSize.native.js.map +1 -1
  85. package/dist/cjs/useSheetOpenState.cjs +69 -40
  86. package/dist/cjs/useSheetOpenState.native.cjs +88 -0
  87. package/dist/cjs/useSheetOpenState.native.js +74 -42
  88. package/dist/cjs/useSheetOpenState.native.js.map +1 -1
  89. package/dist/cjs/useSheetProviderProps.cjs +146 -164
  90. package/dist/cjs/useSheetProviderProps.native.cjs +176 -0
  91. package/dist/cjs/useSheetProviderProps.native.js +156 -174
  92. package/dist/cjs/useSheetProviderProps.native.js.map +1 -1
  93. package/dist/cjs/useSheetScrollViewGestures.cjs +172 -180
  94. package/dist/cjs/useSheetScrollViewGestures.native.cjs +150 -0
  95. package/dist/cjs/useSheetScrollViewGestures.native.js +136 -147
  96. package/dist/cjs/useSheetScrollViewGestures.native.js.map +1 -1
  97. package/dist/cjs/webViewport.cjs +47 -48
  98. package/dist/cjs/webViewport.native.cjs +79 -0
  99. package/dist/cjs/webViewport.native.js +50 -50
  100. package/dist/cjs/webViewport.native.js.map +1 -1
  101. package/dist/esm/GestureDetectorWrapper.mjs +19 -23
  102. package/dist/esm/GestureDetectorWrapper.mjs.map +1 -1
  103. package/dist/esm/GestureDetectorWrapper.native.js +20 -24
  104. package/dist/esm/GestureDetectorWrapper.native.js.map +1 -1
  105. package/dist/esm/GestureSheetContext.mjs +15 -20
  106. package/dist/esm/GestureSheetContext.mjs.map +1 -1
  107. package/dist/esm/GestureSheetContext.native.js +17 -22
  108. package/dist/esm/GestureSheetContext.native.js.map +1 -1
  109. package/dist/esm/Sheet.mjs +191 -83
  110. package/dist/esm/Sheet.mjs.map +1 -1
  111. package/dist/esm/Sheet.native.js +198 -83
  112. package/dist/esm/Sheet.native.js.map +1 -1
  113. package/dist/esm/SheetContext.mjs +21 -5
  114. package/dist/esm/SheetContext.mjs.map +1 -1
  115. package/dist/esm/SheetContext.native.js +21 -5
  116. package/dist/esm/SheetContext.native.js.map +1 -1
  117. package/dist/esm/SheetController.mjs +34 -30
  118. package/dist/esm/SheetController.mjs.map +1 -1
  119. package/dist/esm/SheetController.native.js +38 -34
  120. package/dist/esm/SheetController.native.js.map +1 -1
  121. package/dist/esm/SheetImplementationCustom.mjs +655 -580
  122. package/dist/esm/SheetImplementationCustom.mjs.map +1 -1
  123. package/dist/esm/SheetImplementationCustom.native.js +691 -612
  124. package/dist/esm/SheetImplementationCustom.native.js.map +1 -1
  125. package/dist/esm/SheetScrollView.mjs +277 -288
  126. package/dist/esm/SheetScrollView.mjs.map +1 -1
  127. package/dist/esm/SheetScrollView.native.js +286 -297
  128. package/dist/esm/SheetScrollView.native.js.map +1 -1
  129. package/dist/esm/constants.mjs +5 -3
  130. package/dist/esm/constants.mjs.map +1 -1
  131. package/dist/esm/constants.native.js +5 -3
  132. package/dist/esm/constants.native.js.map +1 -1
  133. package/dist/esm/contexts.mjs +3 -3
  134. package/dist/esm/contexts.mjs.map +1 -1
  135. package/dist/esm/contexts.native.js +3 -3
  136. package/dist/esm/contexts.native.js.map +1 -1
  137. package/dist/esm/controller.mjs +2 -2
  138. package/dist/esm/controller.native.js +2 -2
  139. package/dist/esm/gestureState.mjs +13 -11
  140. package/dist/esm/gestureState.mjs.map +1 -1
  141. package/dist/esm/gestureState.native.js +14 -12
  142. package/dist/esm/gestureState.native.js.map +1 -1
  143. package/dist/esm/helpers.mjs +7 -6
  144. package/dist/esm/helpers.mjs.map +1 -1
  145. package/dist/esm/helpers.native.js +8 -7
  146. package/dist/esm/helpers.native.js.map +1 -1
  147. package/dist/esm/index.js +21 -14
  148. package/dist/esm/index.mjs +21 -14
  149. package/dist/esm/index.native.js +21 -14
  150. package/dist/esm/keyboardAvoidance.mjs +40 -61
  151. package/dist/esm/keyboardAvoidance.mjs.map +1 -1
  152. package/dist/esm/keyboardAvoidance.native.js +40 -61
  153. package/dist/esm/keyboardAvoidance.native.js.map +1 -1
  154. package/dist/esm/nativeSheet.mjs +52 -61
  155. package/dist/esm/nativeSheet.mjs.map +1 -1
  156. package/dist/esm/nativeSheet.native.js +58 -69
  157. package/dist/esm/nativeSheet.native.js.map +1 -1
  158. package/dist/esm/types.mjs +0 -2
  159. package/dist/esm/types.native.js +0 -2
  160. package/dist/esm/useGestureHandlerPan.mjs +232 -239
  161. package/dist/esm/useGestureHandlerPan.mjs.map +1 -1
  162. package/dist/esm/useGestureHandlerPan.native.js +241 -248
  163. package/dist/esm/useGestureHandlerPan.native.js.map +1 -1
  164. package/dist/esm/useKeyboardControllerSheet.mjs +71 -71
  165. package/dist/esm/useKeyboardControllerSheet.mjs.map +1 -1
  166. package/dist/esm/useKeyboardControllerSheet.native.js +92 -94
  167. package/dist/esm/useKeyboardControllerSheet.native.js.map +1 -1
  168. package/dist/esm/useSafeAreaInsets.mjs +3 -1
  169. package/dist/esm/useSafeAreaInsets.mjs.map +1 -1
  170. package/dist/esm/useSafeAreaInsets.native.js +15 -3
  171. package/dist/esm/useSafeAreaInsets.native.js.map +1 -1
  172. package/dist/esm/useSheetController.mjs +14 -12
  173. package/dist/esm/useSheetController.mjs.map +1 -1
  174. package/dist/esm/useSheetController.native.js +14 -12
  175. package/dist/esm/useSheetController.native.js.map +1 -1
  176. package/dist/esm/useSheetOffscreenSize.mjs +30 -35
  177. package/dist/esm/useSheetOffscreenSize.mjs.map +1 -1
  178. package/dist/esm/useSheetOffscreenSize.native.js +34 -39
  179. package/dist/esm/useSheetOffscreenSize.native.js.map +1 -1
  180. package/dist/esm/useSheetOpenState.mjs +50 -22
  181. package/dist/esm/useSheetOpenState.mjs.map +1 -1
  182. package/dist/esm/useSheetOpenState.native.js +55 -25
  183. package/dist/esm/useSheetOpenState.native.js.map +1 -1
  184. package/dist/esm/useSheetProviderProps.mjs +130 -138
  185. package/dist/esm/useSheetProviderProps.mjs.map +1 -1
  186. package/dist/esm/useSheetProviderProps.native.js +140 -149
  187. package/dist/esm/useSheetProviderProps.native.js.map +1 -1
  188. package/dist/esm/useSheetScrollViewGestures.mjs +159 -162
  189. package/dist/esm/useSheetScrollViewGestures.mjs.map +1 -1
  190. package/dist/esm/useSheetScrollViewGestures.native.js +123 -130
  191. package/dist/esm/useSheetScrollViewGestures.native.js.map +1 -1
  192. package/dist/esm/webViewport.mjs +26 -25
  193. package/dist/esm/webViewport.mjs.map +1 -1
  194. package/dist/esm/webViewport.native.js +29 -28
  195. package/dist/esm/webViewport.native.js.map +1 -1
  196. package/dist/jsx/GestureDetectorWrapper.mjs +19 -23
  197. package/dist/jsx/GestureDetectorWrapper.mjs.map +1 -1
  198. package/dist/jsx/GestureDetectorWrapper.native.cjs +48 -0
  199. package/dist/jsx/GestureDetectorWrapper.native.js +32 -40
  200. package/dist/jsx/GestureDetectorWrapper.native.js.map +1 -1
  201. package/dist/jsx/GestureSheetContext.mjs +15 -20
  202. package/dist/jsx/GestureSheetContext.mjs.map +1 -1
  203. package/dist/jsx/GestureSheetContext.native.cjs +49 -0
  204. package/dist/jsx/GestureSheetContext.native.js +30 -37
  205. package/dist/jsx/GestureSheetContext.native.js.map +1 -1
  206. package/dist/jsx/Sheet.mjs +191 -83
  207. package/dist/jsx/Sheet.mjs.map +1 -1
  208. package/dist/jsx/Sheet.native.cjs +234 -0
  209. package/dist/jsx/Sheet.native.js +212 -98
  210. package/dist/jsx/Sheet.native.js.map +1 -1
  211. package/dist/jsx/SheetContext.mjs +21 -5
  212. package/dist/jsx/SheetContext.mjs.map +1 -1
  213. package/dist/jsx/SheetContext.native.cjs +58 -0
  214. package/dist/jsx/SheetContext.native.js +45 -22
  215. package/dist/jsx/SheetContext.native.js.map +1 -1
  216. package/dist/jsx/SheetController.mjs +34 -30
  217. package/dist/jsx/SheetController.mjs.map +1 -1
  218. package/dist/jsx/SheetController.native.cjs +72 -0
  219. package/dist/jsx/SheetController.native.js +53 -58
  220. package/dist/jsx/SheetController.native.js.map +1 -1
  221. package/dist/jsx/SheetImplementationCustom.mjs +655 -580
  222. package/dist/jsx/SheetImplementationCustom.mjs.map +1 -1
  223. package/dist/jsx/SheetImplementationCustom.native.cjs +762 -0
  224. package/dist/jsx/SheetImplementationCustom.native.js +713 -644
  225. package/dist/jsx/SheetImplementationCustom.native.js.map +1 -1
  226. package/dist/jsx/SheetScrollView.mjs +277 -288
  227. package/dist/jsx/SheetScrollView.mjs.map +1 -1
  228. package/dist/jsx/SheetScrollView.native.cjs +326 -0
  229. package/dist/jsx/SheetScrollView.native.js +299 -319
  230. package/dist/jsx/SheetScrollView.native.js.map +1 -1
  231. package/dist/jsx/constants.mjs +5 -3
  232. package/dist/jsx/constants.mjs.map +1 -1
  233. package/dist/jsx/constants.native.cjs +37 -0
  234. package/dist/jsx/constants.native.js +22 -20
  235. package/dist/jsx/constants.native.js.map +1 -1
  236. package/dist/jsx/contexts.mjs +3 -3
  237. package/dist/jsx/contexts.mjs.map +1 -1
  238. package/dist/jsx/contexts.native.cjs +38 -0
  239. package/dist/jsx/contexts.native.js +20 -27
  240. package/dist/jsx/contexts.native.js.map +1 -1
  241. package/dist/jsx/controller.mjs +2 -2
  242. package/dist/jsx/controller.native.cjs +32 -0
  243. package/dist/jsx/controller.native.js +17 -17
  244. package/dist/jsx/controller.native.js.map +1 -1
  245. package/dist/jsx/gestureState.mjs +13 -11
  246. package/dist/jsx/gestureState.mjs.map +1 -1
  247. package/dist/jsx/gestureState.native.cjs +54 -0
  248. package/dist/jsx/gestureState.native.js +30 -30
  249. package/dist/jsx/gestureState.native.js.map +1 -1
  250. package/dist/jsx/helpers.mjs +7 -6
  251. package/dist/jsx/helpers.mjs.map +1 -1
  252. package/dist/jsx/helpers.native.cjs +35 -0
  253. package/dist/jsx/helpers.native.js +22 -24
  254. package/dist/jsx/helpers.native.js.map +1 -1
  255. package/dist/jsx/index.js +21 -14
  256. package/dist/jsx/index.mjs +21 -14
  257. package/dist/jsx/index.native.cjs +37 -0
  258. package/dist/jsx/index.native.js +16 -21
  259. package/dist/jsx/index.native.js.map +1 -1
  260. package/dist/jsx/keyboardAvoidance.mjs +40 -61
  261. package/dist/jsx/keyboardAvoidance.mjs.map +1 -1
  262. package/dist/jsx/keyboardAvoidance.native.cjs +75 -0
  263. package/dist/jsx/keyboardAvoidance.native.js +56 -78
  264. package/dist/jsx/keyboardAvoidance.native.js.map +1 -1
  265. package/dist/jsx/nativeSheet.mjs +52 -61
  266. package/dist/jsx/nativeSheet.mjs.map +1 -1
  267. package/dist/jsx/nativeSheet.native.cjs +94 -0
  268. package/dist/jsx/nativeSheet.native.js +70 -83
  269. package/dist/jsx/nativeSheet.native.js.map +1 -1
  270. package/dist/jsx/types.mjs +0 -2
  271. package/dist/jsx/types.native.cjs +19 -0
  272. package/dist/jsx/types.native.js +10 -10
  273. package/dist/jsx/types.native.js.map +1 -1
  274. package/dist/jsx/useGestureHandlerPan.mjs +232 -239
  275. package/dist/jsx/useGestureHandlerPan.mjs.map +1 -1
  276. package/dist/jsx/useGestureHandlerPan.native.cjs +273 -0
  277. package/dist/jsx/useGestureHandlerPan.native.js +254 -265
  278. package/dist/jsx/useGestureHandlerPan.native.js.map +1 -1
  279. package/dist/jsx/useKeyboardControllerSheet.mjs +71 -71
  280. package/dist/jsx/useKeyboardControllerSheet.mjs.map +1 -1
  281. package/dist/jsx/useKeyboardControllerSheet.native.cjs +119 -0
  282. package/dist/jsx/useKeyboardControllerSheet.native.js +100 -111
  283. package/dist/jsx/useKeyboardControllerSheet.native.js.map +1 -1
  284. package/dist/jsx/useSafeAreaInsets.mjs +3 -1
  285. package/dist/jsx/useSafeAreaInsets.mjs.map +1 -1
  286. package/dist/jsx/useSafeAreaInsets.native.cjs +51 -0
  287. package/dist/jsx/useSafeAreaInsets.native.js +30 -25
  288. package/dist/jsx/useSafeAreaInsets.native.js.map +1 -1
  289. package/dist/jsx/useSheetController.mjs +14 -12
  290. package/dist/jsx/useSheetController.mjs.map +1 -1
  291. package/dist/jsx/useSheetController.native.cjs +42 -0
  292. package/dist/jsx/useSheetController.native.js +28 -39
  293. package/dist/jsx/useSheetController.native.js.map +1 -1
  294. package/dist/jsx/useSheetOffscreenSize.mjs +30 -35
  295. package/dist/jsx/useSheetOffscreenSize.mjs.map +1 -1
  296. package/dist/jsx/useSheetOffscreenSize.native.cjs +60 -0
  297. package/dist/jsx/useSheetOffscreenSize.native.js +48 -56
  298. package/dist/jsx/useSheetOffscreenSize.native.js.map +1 -1
  299. package/dist/jsx/useSheetOpenState.mjs +50 -22
  300. package/dist/jsx/useSheetOpenState.mjs.map +1 -1
  301. package/dist/jsx/useSheetOpenState.native.cjs +88 -0
  302. package/dist/jsx/useSheetOpenState.native.js +74 -42
  303. package/dist/jsx/useSheetOpenState.native.js.map +1 -1
  304. package/dist/jsx/useSheetProviderProps.mjs +130 -138
  305. package/dist/jsx/useSheetProviderProps.mjs.map +1 -1
  306. package/dist/jsx/useSheetProviderProps.native.cjs +176 -0
  307. package/dist/jsx/useSheetProviderProps.native.js +156 -174
  308. package/dist/jsx/useSheetProviderProps.native.js.map +1 -1
  309. package/dist/jsx/useSheetScrollViewGestures.mjs +159 -162
  310. package/dist/jsx/useSheetScrollViewGestures.mjs.map +1 -1
  311. package/dist/jsx/useSheetScrollViewGestures.native.cjs +150 -0
  312. package/dist/jsx/useSheetScrollViewGestures.native.js +136 -147
  313. package/dist/jsx/useSheetScrollViewGestures.native.js.map +1 -1
  314. package/dist/jsx/webViewport.mjs +26 -25
  315. package/dist/jsx/webViewport.mjs.map +1 -1
  316. package/dist/jsx/webViewport.native.cjs +79 -0
  317. package/dist/jsx/webViewport.native.js +50 -50
  318. package/dist/jsx/webViewport.native.js.map +1 -1
  319. package/package.json +33 -39
  320. package/src/Sheet.tsx +316 -77
  321. package/src/SheetContext.tsx +57 -7
  322. package/src/SheetController.tsx +7 -6
  323. package/src/SheetImplementationCustom.tsx +343 -140
  324. package/src/SheetScrollView.tsx +24 -13
  325. package/src/constants.tsx +3 -3
  326. package/src/helpers.tsx +0 -14
  327. package/src/index.ts +3 -6
  328. package/src/nativeSheet.tsx +5 -15
  329. package/src/types.tsx +104 -92
  330. package/src/useKeyboardControllerSheet.native.ts +7 -2
  331. package/src/useSafeAreaInsets.native.ts +20 -13
  332. package/src/useSheetController.tsx +15 -7
  333. package/src/useSheetOpenState.tsx +50 -4
  334. package/src/useSheetProviderProps.tsx +4 -27
  335. package/src/useSheetScrollViewGestures.ts +2 -2
  336. package/types/GestureDetectorWrapper.d.ts +1 -1
  337. package/types/GestureDetectorWrapper.d.ts.map +1 -1
  338. package/types/GestureSheetContext.d.ts +1 -1
  339. package/types/GestureSheetContext.d.ts.map +1 -1
  340. package/types/Sheet.d.ts +384 -135
  341. package/types/Sheet.d.ts.map +1 -1
  342. package/types/SheetContext.d.ts +28 -42
  343. package/types/SheetContext.d.ts.map +1 -1
  344. package/types/SheetController.d.ts +4 -2
  345. package/types/SheetController.d.ts.map +1 -1
  346. package/types/SheetImplementationCustom.d.ts +3 -35
  347. package/types/SheetImplementationCustom.d.ts.map +1 -1
  348. package/types/SheetScrollView.d.ts +57 -23
  349. package/types/SheetScrollView.d.ts.map +1 -1
  350. package/types/constants.d.ts +3 -2
  351. package/types/constants.d.ts.map +1 -1
  352. package/types/index.d.ts +1 -3
  353. package/types/index.d.ts.map +1 -1
  354. package/types/nativeSheet.d.ts.map +1 -1
  355. package/types/types.d.ts +28 -17
  356. package/types/types.d.ts.map +1 -1
  357. package/types/useKeyboardControllerSheet.native.d.ts.map +1 -1
  358. package/types/useSafeAreaInsets.native.d.ts +4 -12
  359. package/types/useSafeAreaInsets.native.d.ts.map +1 -1
  360. package/types/useSheetController.d.ts +6 -6
  361. package/types/useSheetController.d.ts.map +1 -1
  362. package/types/useSheetOffscreenSize.d.ts.map +1 -1
  363. package/types/useSheetOpenState.d.ts +3 -2
  364. package/types/useSheetOpenState.d.ts.map +1 -1
  365. package/types/useSheetProviderProps.d.ts +5 -8
  366. package/types/useSheetProviderProps.d.ts.map +1 -1
  367. package/types/useSheetScrollViewGestures.d.ts +2 -2
  368. package/types/useSheetScrollViewGestures.d.ts.map +1 -1
  369. package/.turbo/turbo-build.log +0 -2
  370. package/controller/index.cjs +0 -2
  371. package/controller/index.d.ts +0 -5
  372. package/controller/index.js +0 -2
  373. package/controller/index.native.cjs +0 -2
  374. package/controller/index.native.js +0 -2
  375. package/dist/cjs/createSheet.cjs +0 -194
  376. package/dist/cjs/createSheet.native.js +0 -204
  377. package/dist/cjs/createSheet.native.js.map +0 -1
  378. package/dist/cjs/setupGestureHandler.cjs +0 -55
  379. package/dist/cjs/setupGestureHandler.native.js +0 -60
  380. package/dist/cjs/setupGestureHandler.native.js.map +0 -1
  381. package/dist/cjs/useSheet.cjs +0 -29
  382. package/dist/cjs/useSheet.native.js +0 -34
  383. package/dist/cjs/useSheet.native.js.map +0 -1
  384. package/dist/esm/controller.mjs.map +0 -1
  385. package/dist/esm/controller.native.js.map +0 -1
  386. package/dist/esm/createSheet.mjs +0 -168
  387. package/dist/esm/createSheet.mjs.map +0 -1
  388. package/dist/esm/createSheet.native.js +0 -176
  389. package/dist/esm/createSheet.native.js.map +0 -1
  390. package/dist/esm/index.js.map +0 -1
  391. package/dist/esm/index.mjs.map +0 -1
  392. package/dist/esm/index.native.js.map +0 -1
  393. package/dist/esm/setupGestureHandler.mjs +0 -29
  394. package/dist/esm/setupGestureHandler.mjs.map +0 -1
  395. package/dist/esm/setupGestureHandler.native.js +0 -31
  396. package/dist/esm/setupGestureHandler.native.js.map +0 -1
  397. package/dist/esm/types.mjs.map +0 -1
  398. package/dist/esm/types.native.js.map +0 -1
  399. package/dist/esm/useSheet.mjs +0 -4
  400. package/dist/esm/useSheet.mjs.map +0 -1
  401. package/dist/esm/useSheet.native.js +0 -6
  402. package/dist/esm/useSheet.native.js.map +0 -1
  403. package/dist/jsx/controller.mjs.map +0 -1
  404. package/dist/jsx/createSheet.mjs +0 -168
  405. package/dist/jsx/createSheet.mjs.map +0 -1
  406. package/dist/jsx/createSheet.native.js +0 -204
  407. package/dist/jsx/createSheet.native.js.map +0 -1
  408. package/dist/jsx/index.js.map +0 -1
  409. package/dist/jsx/index.mjs.map +0 -1
  410. package/dist/jsx/setupGestureHandler.mjs +0 -29
  411. package/dist/jsx/setupGestureHandler.mjs.map +0 -1
  412. package/dist/jsx/setupGestureHandler.native.js +0 -60
  413. package/dist/jsx/setupGestureHandler.native.js.map +0 -1
  414. package/dist/jsx/types.mjs.map +0 -1
  415. package/dist/jsx/useSheet.mjs +0 -4
  416. package/dist/jsx/useSheet.mjs.map +0 -1
  417. package/dist/jsx/useSheet.native.js +0 -34
  418. package/dist/jsx/useSheet.native.js.map +0 -1
  419. package/next.md +0 -78
  420. package/setup-gesture-handler/index.cjs +0 -2
  421. package/setup-gesture-handler/index.js +0 -2
  422. package/setup-gesture-handler/index.native.cjs +0 -2
  423. package/setup-gesture-handler/index.native.js +0 -2
  424. package/setup-gesture-handler.cjs +0 -1
  425. package/src/createSheet.tsx +0 -309
  426. package/src/setupGestureHandler.ts +0 -43
  427. package/src/useSheet.tsx +0 -3
  428. package/test/keyboardAvoidance.test.ts +0 -269
  429. package/tsconfig.json +0 -57
  430. package/types/createSheet.d.ts +0 -195
  431. package/types/createSheet.d.ts.map +0 -1
  432. package/types/setupGestureHandler.d.ts +0 -11
  433. package/types/setupGestureHandler.d.ts.map +0 -1
  434. package/types/useSheet.d.ts +0 -2
  435. package/types/useSheet.d.ts.map +0 -1
@@ -3,642 +3,721 @@ import { ProvideAdaptContext, useAdaptContext } from "@tamagui/adapt";
3
3
  import { AnimatePresence } from "@tamagui/animate-presence";
4
4
  import { useComposedRefs } from "@tamagui/compose-refs";
5
5
  import { isWeb, useIsomorphicLayoutEffect } from "@tamagui/constants";
6
- import { LayoutMeasurementController, View, useConfiguration, useDidFinishSSR, useEvent, useThemeName } from "@tamagui/core";
6
+ import { LayoutMeasurementController, View, createRefComponent, formatDiagnostic, useAnimatedNumber, useAnimatedNumberStyle, useAnimationDriver, useDidFinishSSR, useEvent, useThemeName } from "@tamagui/core";
7
7
  import { Portal, needsPortalRepropagation } from "@tamagui/portal";
8
8
  import React, { useState } from "react";
9
9
  import { Dimensions, PanResponder, View as View$1 } from "react-native";
10
10
  import { ParentSheetContext, SheetInsideSheetContext } from "./contexts.native.js";
11
+ import { SHEET_OVERLAY_MARKER } from "./constants.native.js";
11
12
  import { GestureDetectorWrapper } from "./GestureDetectorWrapper.native.js";
12
13
  import { getGestureHandlerState } from "./gestureState.native.js";
13
14
  import { GestureSheetProvider } from "./GestureSheetContext.native.js";
14
15
  import { resisted } from "./helpers.native.js";
15
16
  import { getKeyboardAdjustedSheetY, getKeyboardOccludedHeight, getSheetReleasePosition } from "./keyboardAvoidance.native.js";
16
17
  import { MIN_KEYBOARD_HEIGHT, getMaxViewportHeight, getStableLayoutViewportHeight, getWebKeyboardResizeHeight, getWebVisualViewportOffsetTop } from "./webViewport.native.js";
17
- import { SheetProvider } from "./SheetContext.native.js";
18
+ import { SheetAnimatedPositionContext, SheetOverlayLayerContext, SheetProvider } from "./SheetContext.native.js";
18
19
  import { useGestureHandlerPan } from "./useGestureHandlerPan.native.js";
19
20
  import { useKeyboardControllerSheet } from "./useKeyboardControllerSheet.native.js";
20
21
  import { SafeAreaInsetsContext, useSafeAreaInsets } from "./useSafeAreaInsets.native.js";
21
22
  import { useSheetOpenState } from "./useSheetOpenState.native.js";
22
23
  import { useSheetProviderProps } from "./useSheetProviderProps.native.js";
24
+
23
25
  var hiddenSize = 10000.1;
24
26
  var rnghRootStyleOpen = {
25
- width: "100%",
26
- height: "100%"
27
+ width: "100%",
28
+ height: "100%"
27
29
  };
28
30
  var rnghRootStyleClosed = {
29
- width: "100%",
30
- height: 0
31
+ width: "100%",
32
+ height: 0
31
33
  };
34
+ var sheetEscapeLayers = [];
32
35
  var relativeDimensionTo = isWeb ? "window" : "screen";
33
36
  function getStableViewportHeight() {
34
- if (isWeb && typeof window !== "undefined") return getStableLayoutViewportHeight();
35
- return Dimensions.get(relativeDimensionTo).height;
37
+ if (isWeb && typeof window !== "undefined") return getStableLayoutViewportHeight();
38
+ return Dimensions.get(relativeDimensionTo).height;
36
39
  }
37
- var SheetImplementationCustom = /* @__PURE__ */React.forwardRef(function SheetImplementationCustom2(props, forwardedRef) {
38
- var parentSheet = React.useContext(ParentSheetContext);
39
- var safeAreaInsets = useSafeAreaInsets();
40
- var _safeAreaInsets_top;
41
- var safeAreaTopInset = (_safeAreaInsets_top = safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.top) !== null && _safeAreaInsets_top !== void 0 ? _safeAreaInsets_top : 0;
42
- var {
43
- transition,
44
- transitionConfig: transitionConfigProp,
45
- modal = false,
46
- zIndex = parentSheet.zIndex + 1,
47
- moveOnKeyboardChange = false,
48
- unmountChildrenWhenHidden = false,
49
- disableTransparencyHide = false,
50
- portalProps,
51
- containerComponent: ContainerComponent = React.Fragment,
52
- onAnimationComplete
53
- } = props;
54
- var state = useSheetOpenState(props);
55
- var [overlayComponent, setOverlayComponent] = React.useState(null);
56
- var providerProps = useSheetProviderProps(props, state, {
57
- onOverlayComponent: setOverlayComponent
58
- });
59
- var {
60
- frameSize,
61
- setFrameSize,
62
- dismissOnSnapToBottom,
63
- snapPoints,
64
- snapPointsMode,
65
- hasFit,
66
- position,
67
- setPosition,
68
- scrollBridge,
69
- screenSize,
70
- setMaxContentSize,
71
- maxSnapPoint
72
- } = providerProps;
73
- var {
74
- open,
75
- controller,
76
- isHidden
77
- } = state;
78
- var openRef = React.useRef(open);
79
- openRef.current = open;
80
- var ref = useComposedRefs(forwardedRef, React.useRef(void 0), providerProps.contentRef);
81
- var {
82
- animationDriver
83
- } = useConfiguration();
84
- if (!animationDriver) throw new Error(`Sheet requires an animation driver to be set`);
85
- var transitionConfig = function () {
86
- var _animationDriver_animations;
87
- if (transitionConfigProp) return transitionConfigProp;
88
- var [animationProp, animationPropConfig] = !transition ? [] : Array.isArray(transition) ? transition : [transition];
89
- if (animationProp && ((_animationDriver_animations = animationDriver.animations) === null || _animationDriver_animations === void 0 ? void 0 : _animationDriver_animations[animationProp])) return {
90
- ...animationDriver.animations[animationProp],
91
- ...animationPropConfig
92
- };
93
- return null;
94
- }();
95
- var [isShowingInnerSheet, setIsShowingInnerSheet] = React.useState(false);
96
- var shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet && needsPortalRepropagation();
97
- var sheetInsideSheet = React.useContext(SheetInsideSheetContext);
98
- var onInnerSheet = React.useCallback(function (hasChild) {
99
- setIsShowingInnerSheet(hasChild);
100
- }, []);
101
- var {
102
- keyboardHeight,
103
- isKeyboardVisible,
104
- dismissKeyboard,
105
- pauseKeyboardHandler,
106
- flushPendingHide
107
- } = useKeyboardControllerSheet({
108
- enabled: Boolean(moveOnKeyboardChange)
109
- });
110
- var stableFrameSize = React.useRef(frameSize);
111
- React.useEffect(function () {
112
- if (open && frameSize) stableFrameSize.current = frameSize;
113
- }, [open, frameSize]);
114
- var isWebKbSheet = isWeb && hasFit && moveOnKeyboardChange;
115
- var isNativeKbFitSheet = !isWeb && hasFit && Boolean(moveOnKeyboardChange);
116
- var preKeyboardFrameSize = React.useRef(0);
117
- React.useEffect(function () {
118
- if (isNativeKbFitSheet && open && !isKeyboardVisible && frameSize > 0) preKeyboardFrameSize.current = frameSize;
119
- }, [isNativeKbFitSheet, open, isKeyboardVisible, frameSize]);
120
- var effScreenSize = isWebKbSheet ? getStableViewportHeight() : screenSize;
121
- var effectiveFrameSize = open ? frameSize : stableFrameSize.current || frameSize;
122
- var positions = React.useMemo(function () {
123
- return snapPoints.map(function (point) {
124
- return getYPositions(snapPointsMode, point, effScreenSize, effectiveFrameSize);
125
- });
126
- }, [effScreenSize, effectiveFrameSize, snapPoints, snapPointsMode]);
127
- var [isDragging, setIsDragging_] = React.useState(false);
128
- var isDraggingRef = React.useRef(false);
129
- var setIsDragging = React.useCallback(function (val) {
130
- isDraggingRef.current = val;
131
- pauseKeyboardHandler.current = val;
132
- setIsDragging_(val);
133
- if (!val) flushPendingHide();
134
- }, [pauseKeyboardHandler, flushPendingHide]);
135
- var activePositionsRef = React.useRef(positions);
136
- var activePositions = React.useMemo(function () {
137
- if (isDragging || isDraggingRef.current) return activePositionsRef.current;
138
- var result;
139
- if (!isKeyboardVisible || keyboardHeight <= 0) result = positions;else result = positions.map(function (p) {
140
- return getKeyboardAdjustedSheetY({
141
- sheetY: p,
142
- screenSize: effScreenSize,
143
- isKeyboardVisible,
144
- keyboardHeight,
145
- shouldTranslate: true,
146
- safeAreaTop: isWeb ? getWebVisualViewportOffsetTop() : safeAreaTopInset
147
- });
148
- });
149
- activePositionsRef.current = result;
150
- return result;
151
- }, [positions, isKeyboardVisible, keyboardHeight, effScreenSize, isDragging, safeAreaTopInset]);
152
- var keyboardOccludedHeight = getKeyboardOccludedHeight({
153
- frameSize: effectiveFrameSize,
154
- isKeyboardVisible,
155
- keyboardHeight,
156
- screenSize: effScreenSize,
157
- sheetY: position >= 0 ? activePositions[position] : void 0
158
- });
159
- var keyboardStableFrameHeight = isWebKbSheet && isKeyboardVisible && frameSize > 0 ? frameSize : isNativeKbFitSheet && isKeyboardVisible && preKeyboardFrameSize.current > 0 ? preKeyboardFrameSize.current : 0;
160
- var {
161
- useAnimatedNumber,
162
- useAnimatedNumberStyle
163
- } = animationDriver;
164
- var _animationDriver_View;
165
- var AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : View;
166
- useIsomorphicLayoutEffect(function () {
167
- if (!(sheetInsideSheet && open)) return;
168
- sheetInsideSheet(true);
169
- return function () {
170
- sheetInsideSheet(false);
171
- };
172
- }, [sheetInsideSheet, open]);
173
- var nextParentContext = React.useMemo(function () {
174
- return {
175
- zIndex
176
- };
177
- }, [zIndex]);
178
- var startPosition = useDidFinishSSR() && screenSize ? screenSize : hiddenSize;
179
- var animatedNumber = useAnimatedNumber(startPosition);
180
- var at = React.useRef(startPosition);
181
- var hasntMeasured = at.current === hiddenSize;
182
- var [disableAnimation, setDisableAnimation] = useState(hasntMeasured);
183
- var skipAdaptAnimation = React.useRef(false);
184
- if (controller === null || controller === void 0 ? void 0 : controller.skipNextAnimation) skipAdaptAnimation.current = true;
185
- var hasScrollView = React.useRef(false);
186
- var opacityFallbackTimer = React.useRef(null);
187
- var syncAnimatedPosition = useEvent(function (value) {
188
- at.current = value;
189
- scrollBridge.paneY = value;
190
- var minY = activePositions[0];
191
- var wasAtTop = scrollBridge.isAtTop;
192
- var nowAtTop = value <= minY + 5;
193
- if (wasAtTop === nowAtTop) return;
194
- scrollBridge.isAtTop = nowAtTop;
195
- if (nowAtTop) {
196
- var _scrollBridge_setScrollEnabled;
197
- if (scrollBridge.lockScrollAtTop) {
198
- var _scrollBridge_setScrollEnabled1;
199
- if (scrollBridge.y > 0) {
200
- var _scrollBridge_forceScrollTo;
201
- (_scrollBridge_forceScrollTo = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo === void 0 || _scrollBridge_forceScrollTo.call(scrollBridge, 0);
202
- scrollBridge.y = 0;
203
- }
204
- scrollBridge.scrollLockY = 0;
205
- (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false, 0);
206
- return;
207
- }
208
- if (scrollBridge.y > 0) {
209
- var _scrollBridge_forceScrollTo1;
210
- (_scrollBridge_forceScrollTo1 = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo1 === void 0 || _scrollBridge_forceScrollTo1.call(scrollBridge, 0);
211
- scrollBridge.y = 0;
212
- }
213
- scrollBridge.scrollLockY = void 0;
214
- (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
215
- } else {
216
- var _scrollBridge_setScrollEnabled2;
217
- scrollBridge.scrollLockY = 0;
218
- (_scrollBridge_setScrollEnabled2 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled2 === void 0 || _scrollBridge_setScrollEnabled2.call(scrollBridge, false);
219
- }
220
- });
221
- var setAnimatedPositionDirect = useEvent(function (value) {
222
- syncAnimatedPosition(value);
223
- animatedNumber.setValue(value, {
224
- type: "direct"
225
- });
226
- });
227
- var getAnimatedPosition = useEvent(function () {
228
- var value = animatedNumber.getValue();
229
- syncAnimatedPosition(value);
230
- return value;
231
- });
232
- function stopSpring() {
233
- animatedNumber.stop();
234
- if (scrollBridge.onFinishAnimate) {
235
- scrollBridge.onFinishAnimate();
236
- scrollBridge.onFinishAnimate = void 0;
237
- }
238
- }
239
- var animateTo = useEvent(function (position2, animationOverride) {
240
- if (frameSize === 0) return;
241
- var closeTarget = isWeb ? Math.max(effScreenSize, getMaxViewportHeight()) : effScreenSize;
242
- var toValue = isHidden || position2 === -1 ? closeTarget : activePositions[position2];
243
- if (at.current === toValue) return;
244
- at.current = toValue;
245
- stopSpring();
246
- var isOpenAnimation = position2 !== -1 && !isHidden;
247
- if (opacityFallbackTimer.current) {
248
- clearTimeout(opacityFallbackTimer.current);
249
- opacityFallbackTimer.current = null;
250
- }
251
- var animationCompleteCallback = function () {
252
- var _controller_onAnimationComplete;
253
- if (at.current !== toValue) return;
254
- syncAnimatedPosition(toValue);
255
- if (opacityFallbackTimer.current) {
256
- clearTimeout(opacityFallbackTimer.current);
257
- opacityFallbackTimer.current = null;
258
- }
259
- if (!isOpenAnimation && !openRef.current) setOpacity(0);
260
- onAnimationComplete === null || onAnimationComplete === void 0 || onAnimationComplete({
261
- open: isOpenAnimation
262
- });
263
- controller === null || controller === void 0 || (_controller_onAnimationComplete = controller.onAnimationComplete) == null || _controller_onAnimationComplete.call(controller, {
264
- open: isOpenAnimation
265
- });
266
- };
267
- if (!isOpenAnimation) opacityFallbackTimer.current = setTimeout(function () {
268
- opacityFallbackTimer.current = null;
269
- if (!openRef.current) setOpacity(0);
270
- }, 1e3);
271
- if (skipAdaptAnimation.current) {
272
- skipAdaptAnimation.current = false;
273
- animatedNumber.setValue(toValue, {
274
- type: "timing",
275
- duration: 0
276
- }, animationCompleteCallback);
277
- return;
278
- }
279
- animatedNumber.setValue(toValue, animationOverride || {
280
- type: "spring",
281
- ...transitionConfig
282
- }, animationCompleteCallback);
283
- });
284
- useIsomorphicLayoutEffect(function () {
285
- if (hasntMeasured && screenSize && frameSize) {
286
- at.current = screenSize;
287
- animatedNumber.setValue(screenSize, {
288
- type: "timing",
289
- duration: 0
290
- }, function () {
291
- syncAnimatedPosition(screenSize);
292
- setTimeout(function () {
293
- setDisableAnimation(false);
294
- }, 10);
295
- });
296
- return;
297
- }
298
- if (disableAnimation) return;
299
- if (isDraggingRef.current) return;
300
- if (!frameSize || !screenSize || isHidden || hasntMeasured && !open) return;
301
- animateTo(position);
302
- if (position === -1) {
303
- scrollBridge.scrollLock = false;
304
- scrollBridge.scrollStartY = -1;
305
- }
306
- if (open && position >= 0) {
307
- var isTopPosition = position === 0;
308
- scrollBridge.isAtTop = isTopPosition;
309
- if (isTopPosition) {
310
- var _scrollBridge_setScrollEnabled;
311
- scrollBridge.scrollLockY = void 0;
312
- (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
313
- } else {
314
- var _scrollBridge_setScrollEnabled1;
315
- scrollBridge.scrollLockY = 0;
316
- (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false);
317
- }
318
- }
319
- }, [hasntMeasured, disableAnimation, isHidden, frameSize, screenSize, open, position]);
320
- var _props_disableDrag;
321
- var disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller === null || controller === void 0 ? void 0 : controller.disableDrag;
322
- useThemeName();
323
- var [blockPan, setBlockPan] = React.useState(false);
324
- var panResponder = React.useMemo(function () {
325
- if (disableDrag) return;
326
- if (!frameSize) return;
327
- if (isShowingInnerSheet) return;
328
- var minY = activePositions[0];
329
- scrollBridge.paneMinY = minY;
330
- var startY = at.current;
331
- function setPanning(val) {
332
- setIsDragging(val);
333
- }
334
- var release = function (param) {
335
- var {
336
- vy
337
- } = param;
338
- scrollBridge.setParentDragging(false);
339
- if (scrollBridge.scrollLock) return;
340
- isExternalDrag = false;
341
- previouslyScrolling = false;
342
- setPanning(false);
343
- var currentPos = at.current;
344
- var closestPoint = getSheetReleasePosition({
345
- positions: activePositions,
346
- projectedEnd: currentPos + frameSize * vy * .2,
347
- currentPosition: currentPos,
348
- frameSize,
349
- dismissOnSnapToBottom,
350
- snapPointsMode,
351
- isKeyboardVisible,
352
- isWeb
353
- });
354
- setPosition(closestPoint);
355
- animateTo(closestPoint);
356
- };
357
- var finish = function (_e, state2) {
358
- release({
359
- vy: state2.vy,
360
- dragAt: state2.dy
361
- });
362
- };
363
- var previouslyScrolling = false;
364
- var onMoveShouldSet = function (e, param) {
365
- var {
366
- dy
367
- } = param;
368
- function getShouldSet() {
369
- if (e.target === providerProps.handleRef.current) return true;
370
- if (scrollBridge.scrollNodeTouched) return false;
371
- if (scrollBridge.hasScrollableContent === true) {
372
- if (scrollBridge.scrollLock) return false;
373
- var isScrolled = scrollBridge.y !== 0;
374
- var isDraggingUp = dy < 0;
375
- var isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
376
- if (isScrolled) return false;
377
- if (isNearTop) {
378
- if (hasScrollView.current && isDraggingUp) return false;
379
- }
380
- }
381
- return Math.abs(dy) > 10;
382
- }
383
- var granted = getShouldSet();
384
- if (granted) scrollBridge.setParentDragging(true);
385
- return granted;
386
- };
387
- var grant = function () {
388
- setPanning(true);
389
- stopSpring();
390
- startY = getAnimatedPosition();
391
- };
392
- var isExternalDrag = false;
393
- scrollBridge.startPanDrag = function () {
394
- isExternalDrag = true;
395
- grant();
396
- };
397
- scrollBridge.drag = function (dy) {
398
- if (!isExternalDrag) {
399
- isExternalDrag = true;
400
- grant();
401
- }
402
- setAnimatedPositionDirect(resisted(dy + startY, minY));
403
- };
404
- scrollBridge.release = release;
405
- scrollBridge.snapToPosition = function (positionIndex) {
406
- isExternalDrag = false;
407
- setPanning(false);
408
- setPosition(positionIndex);
409
- animateTo(positionIndex);
410
- };
411
- return PanResponder.create({
412
- onMoveShouldSetPanResponder: onMoveShouldSet,
413
- onPanResponderTerminationRequest: function () {
414
- return false;
415
- },
416
- onPanResponderGrant: grant,
417
- onPanResponderMove: function (_e, param) {
418
- var {
419
- dy
420
- } = param;
421
- var to = resisted(dy + startY, minY);
422
- if (to <= minY) scrollBridge.setParentDragging(false);else scrollBridge.setParentDragging(true);
423
- setAnimatedPositionDirect(to);
424
- },
425
- onPanResponderEnd: finish,
426
- onPanResponderTerminate: finish,
427
- onPanResponderRelease: finish
428
- });
429
- }, [disableDrag, isShowingInnerSheet, animateTo, frameSize, activePositions, setPosition, dismissOnSnapToBottom, snapPointsMode]);
430
- React.useEffect(function () {
431
- if (isDragging || isHidden || !open || disableAnimation) return;
432
- if (!frameSize || !screenSize) return;
433
- animateTo(position, {
434
- type: "timing",
435
- duration: 250
436
- });
437
- }, [isKeyboardVisible, keyboardHeight]);
438
- var wasDragging = React.useRef(false);
439
- React.useEffect(function () {
440
- if (isDragging) {
441
- wasDragging.current = true;
442
- return;
443
- }
444
- if (!wasDragging.current) return;
445
- wasDragging.current = false;
446
- if (!frameSize || !screenSize || isHidden || !open) return;
447
- animateTo(position);
448
- }, [isDragging]);
449
- React.useEffect(function () {
450
- if (!open && isKeyboardVisible) {
451
- dismissKeyboard();
452
- pauseKeyboardHandler.current = false;
453
- flushPendingHide();
454
- }
455
- }, [open]);
456
- var {
457
- panGesture,
458
- panGestureRef,
459
- gestureHandlerEnabled
460
- } = useGestureHandlerPan({
461
- positions: activePositions,
462
- frameSize,
463
- setPosition,
464
- animateTo,
465
- stopSpring,
466
- scrollBridge,
467
- setIsDragging,
468
- getCurrentPosition: getAnimatedPosition,
469
- resisted,
470
- disableDrag,
471
- isShowingInnerSheet,
472
- setAnimatedPosition: setAnimatedPositionDirect,
473
- dismissOnSnapToBottom,
474
- snapPointsMode,
475
- isKeyboardVisible,
476
- pauseKeyboardHandler
477
- });
478
- var ignoreLayoutForKeyboard = useEvent(function () {
479
- return isWeb && moveOnKeyboardChange && getWebKeyboardResizeHeight() >= MIN_KEYBOARD_HEIGHT;
480
- });
481
- var handleAnimationViewLayout = useEvent(function (e) {
482
- var _e_nativeEvent;
483
- if (!open && stableFrameSize.current !== 0) return;
484
- var layoutHeight = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height;
485
- if (ignoreLayoutForKeyboard() && frameSize > 0) return;
486
- var next = modal ? Math.min(layoutHeight, getStableViewportHeight()) : layoutHeight;
487
- if (!next) return;
488
- setFrameSize(Math.round(next));
489
- });
490
- var handleMaxContentViewLayout = React.useCallback(function (e) {
491
- var _e_nativeEvent;
492
- if (ignoreLayoutForKeyboard() && screenSize > 0) return;
493
- var next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, getStableViewportHeight());
494
- if (!next) return;
495
- setMaxContentSize(Math.round(next));
496
- }, [ignoreLayoutForKeyboard, screenSize]);
497
- var animatedStyle = useAnimatedNumberStyle(animatedNumber, React.useCallback(function (val) {
498
- "worklet";
499
-
500
- return {
501
- transform: [{
502
- translateY: frameSize === 0 ? hiddenSize : val
503
- }]
504
- };
505
- }, [frameSize]));
506
- var [opacity, setOpacity] = React.useState(open ? 1 : 0);
507
- if (open && opacity === 0) {
508
- setOpacity(1);
509
- if (opacityFallbackTimer.current) {
510
- clearTimeout(opacityFallbackTimer.current);
511
- opacityFallbackTimer.current = null;
512
- }
513
- }
514
- var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ? `${maxSnapPoint}${isWeb ? modal ? "dvh" : "%" : "%"}` : maxSnapPoint;
515
- var setHasScrollView = React.useCallback(function (val) {
516
- hasScrollView.current = val;
517
- }, []);
518
- var contents = /* @__PURE__ */jsx(LayoutMeasurementController, {
519
- disable: !open,
520
- children: /* @__PURE__ */jsx(ParentSheetContext.Provider, {
521
- value: nextParentContext,
522
- children: /* @__PURE__ */jsx(SheetProvider, {
523
- ...providerProps,
524
- keyboardOccludedHeight,
525
- isKeyboardVisible,
526
- keyboardStableFrameHeight,
527
- setHasScrollView,
528
- children: /* @__PURE__ */jsxs(GestureSheetProvider, {
529
- isDragging,
530
- blockPan,
531
- setBlockPan,
532
- panGesture,
533
- panGestureRef,
534
- children: [/* @__PURE__ */jsx(AnimatePresence, {
535
- custom: {
536
- open
537
- },
538
- children: shouldHideParentSheet || !open ? null : overlayComponent
539
- }), snapPointsMode !== "percent" && /* @__PURE__ */jsx(View$1, {
540
- style: {
541
- opacity: 0,
542
- position: "absolute",
543
- top: 0,
544
- left: 0,
545
- right: 0,
546
- bottom: 0,
547
- pointerEvents: "none"
548
- },
549
- onLayout: handleMaxContentViewLayout
550
- }), /* @__PURE__ */jsx(AnimatedView, {
551
- ref,
552
- onLayout: handleAnimationViewLayout,
553
- transition: isDragging || disableAnimation ? null : transition,
554
- disableClassName: true,
555
- style: [{
556
- position: "absolute",
557
- zIndex,
558
- width: "100%",
559
- height: forcedContentHeight,
560
- minHeight: forcedContentHeight,
561
- opacity: shouldHideParentSheet ? 0 : disableTransparencyHide ? 1 : opacity,
562
- ...((shouldHideParentSheet || !open) && {
563
- pointerEvents: "none"
564
- })
565
- }, animatedStyle],
566
- children: gestureHandlerEnabled && panGesture ? /* @__PURE__ */jsx(GestureDetectorWrapper, {
567
- gesture: panGesture,
568
- style: {
569
- flex: 1
570
- },
571
- children: props.children
572
- }) : /* @__PURE__ */jsx(View$1, {
573
- ...(panResponder === null || panResponder === void 0 ? void 0 : panResponder.panHandlers),
574
- style: {
575
- flex: 1,
576
- width: "100%",
577
- height: "100%"
578
- },
579
- children: props.children
580
- })
581
- })]
582
- })
583
- })
584
- })
585
- });
586
- if (needsPortalRepropagation()) contents = /* @__PURE__ */jsx(ProvideAdaptContext, {
587
- ...useAdaptContext(),
588
- children: /* @__PURE__ */jsx(SafeAreaInsetsContext.Provider, {
589
- value: safeAreaInsets,
590
- children: contents
591
- })
592
- });
593
- var shouldMountChildren = unmountChildrenWhenHidden ? !!opacity : true;
594
- if (modal) {
595
- var RNGHRoot = getGestureHandlerState().RootView;
596
- var mountedContents = shouldMountChildren ? /* @__PURE__ */jsx(ContainerComponent, {
597
- children: contents
598
- }) : null;
599
- var modalContents = /* @__PURE__ */jsx(Portal, {
600
- stackZIndex: zIndex,
601
- ...portalProps,
602
- children: mountedContents && RNGHRoot ? /* @__PURE__ */jsx(RNGHRoot, {
603
- style: open ? rnghRootStyleOpen : rnghRootStyleClosed,
604
- children: mountedContents
605
- }) : mountedContents
606
- });
607
- if (isWeb) return modalContents;
608
- return /* @__PURE__ */jsx(SheetInsideSheetContext.Provider, {
609
- value: onInnerSheet,
610
- children: modalContents
611
- });
612
- }
613
- return contents;
40
+ var SheetImplementationCustom = createRefComponent(function SheetImplementationCustom2(props, forwardedRef) {
41
+ var parentSheet = React.useContext(ParentSheetContext);
42
+ var safeAreaInsets = useSafeAreaInsets();
43
+ var _safeAreaInsets_top;
44
+ var safeAreaTopInset = (_safeAreaInsets_top = safeAreaInsets === null || safeAreaInsets === void 0 ? void 0 : safeAreaInsets.top) !== null && _safeAreaInsets_top !== void 0 ? _safeAreaInsets_top : 0;
45
+ var { transition, transitionConfig: transitionConfigProp, modal = false, zIndex = parentSheet.zIndex + 1, moveOnKeyboardChange = false, unmountChildrenWhenHidden = false, disableHideWhenClosed = false, portalProps, containerComponent: ContainerComponent = React.Fragment, onTransition } = props;
46
+ var state = useSheetOpenState(props);
47
+ var providerProps = useSheetProviderProps(props, state);
48
+ var { frameSize, setFrameSize, dismissOnSnapToBottom, snapPoints, snapPointsMode, hasFit, position, setPosition, scrollBridge, screenSize, setMaxContentSize, maxSnapPoint } = providerProps;
49
+ var { open, controller, isHidden } = state;
50
+ var openRef = React.useRef(open);
51
+ openRef.current = open;
52
+ var ref = useComposedRefs(forwardedRef, React.useRef(void 0), providerProps.contentRef);
53
+ var animationDriver = useAnimationDriver();
54
+ var transitionConfig = (function() {
55
+ var _animationDriver_animations;
56
+ if (transitionConfigProp) return transitionConfigProp;
57
+ var [animationProp, animationPropConfig] = !transition ? [] : Array.isArray(transition) ? transition : [transition];
58
+ var namedConfig = animationProp && ((_animationDriver_animations = animationDriver.animations) === null || _animationDriver_animations === void 0 ? void 0 : _animationDriver_animations[animationProp]);
59
+ if (namedConfig) {
60
+ if (typeof namedConfig === "string") return animationPropConfig !== null && animationPropConfig !== void 0 ? animationPropConfig : null;
61
+ return {
62
+ ...namedConfig,
63
+ ...animationPropConfig
64
+ };
65
+ }
66
+ return null;
67
+ })();
68
+ var [isShowingInnerSheet, setIsShowingInnerSheet] = React.useState(false);
69
+ var shouldHideParentSheet = !isWeb && modal && isShowingInnerSheet && needsPortalRepropagation();
70
+ var sheetInsideSheet = React.useContext(SheetInsideSheetContext);
71
+ var onInnerSheet = React.useCallback(function(hasChild) {
72
+ setIsShowingInnerSheet(hasChild);
73
+ }, []);
74
+ var { keyboardHeight, isKeyboardVisible, dismissKeyboard, pauseKeyboardHandler, flushPendingHide } = useKeyboardControllerSheet({ enabled: Boolean(moveOnKeyboardChange) });
75
+ var stableFrameSize = React.useRef(frameSize);
76
+ React.useEffect(function() {
77
+ if (open && frameSize) stableFrameSize.current = frameSize;
78
+ }, [open, frameSize]);
79
+ var isWebKbSheet = isWeb && hasFit && moveOnKeyboardChange;
80
+ var isNativeKbFitSheet = !isWeb && hasFit && Boolean(moveOnKeyboardChange);
81
+ var preKeyboardFrameSize = React.useRef(0);
82
+ React.useEffect(function() {
83
+ if (isNativeKbFitSheet && open && !isKeyboardVisible && frameSize > 0) preKeyboardFrameSize.current = frameSize;
84
+ }, [
85
+ isNativeKbFitSheet,
86
+ open,
87
+ isKeyboardVisible,
88
+ frameSize
89
+ ]);
90
+ var effScreenSize = isWebKbSheet ? getStableViewportHeight() : screenSize;
91
+ var effectiveFrameSize = open ? frameSize : stableFrameSize.current || frameSize;
92
+ var positions = React.useMemo(function() {
93
+ return snapPoints.map(function(point) {
94
+ return getYPositions(snapPointsMode, point, effScreenSize, effectiveFrameSize);
95
+ });
96
+ }, [
97
+ effScreenSize,
98
+ effectiveFrameSize,
99
+ snapPoints,
100
+ snapPointsMode
101
+ ]);
102
+ var [isDragging, setIsDragging_] = React.useState(false);
103
+ var isDraggingRef = React.useRef(false);
104
+ var setIsDragging = React.useCallback(function(val) {
105
+ isDraggingRef.current = val;
106
+ pauseKeyboardHandler.current = val;
107
+ setIsDragging_(val);
108
+ if (!val) flushPendingHide();
109
+ }, [pauseKeyboardHandler, flushPendingHide]);
110
+ var activePositionsRef = React.useRef(positions);
111
+ var activePositions = React.useMemo(function() {
112
+ if (isDragging || isDraggingRef.current) return activePositionsRef.current;
113
+ var result;
114
+ if (!isKeyboardVisible || keyboardHeight <= 0) result = positions;
115
+ else result = positions.map(function(p) {
116
+ return getKeyboardAdjustedSheetY({
117
+ sheetY: p,
118
+ screenSize: effScreenSize,
119
+ isKeyboardVisible,
120
+ keyboardHeight,
121
+ shouldTranslate: true,
122
+ safeAreaTop: isWeb ? getWebVisualViewportOffsetTop() : safeAreaTopInset
123
+ });
124
+ });
125
+ activePositionsRef.current = result;
126
+ return result;
127
+ }, [
128
+ positions,
129
+ isKeyboardVisible,
130
+ keyboardHeight,
131
+ effScreenSize,
132
+ isDragging,
133
+ safeAreaTopInset
134
+ ]);
135
+ var keyboardOccludedHeight = getKeyboardOccludedHeight({
136
+ frameSize: effectiveFrameSize,
137
+ isKeyboardVisible,
138
+ keyboardHeight,
139
+ screenSize: effScreenSize,
140
+ sheetY: position >= 0 ? activePositions[position] : void 0
141
+ });
142
+ var keyboardStableFrameHeight = isWebKbSheet && isKeyboardVisible && frameSize > 0 ? frameSize : isNativeKbFitSheet && isKeyboardVisible && preKeyboardFrameSize.current > 0 ? preKeyboardFrameSize.current : 0;
143
+ var _animationDriver_View;
144
+ var AnimatedView = (_animationDriver_View = animationDriver.View) !== null && _animationDriver_View !== void 0 ? _animationDriver_View : View;
145
+ useIsomorphicLayoutEffect(function() {
146
+ if (!(sheetInsideSheet && open)) return;
147
+ sheetInsideSheet(true);
148
+ return function() {
149
+ sheetInsideSheet(false);
150
+ };
151
+ }, [sheetInsideSheet, open]);
152
+ var nextParentContext = React.useMemo(function() {
153
+ return { zIndex };
154
+ }, [zIndex]);
155
+ var startPosition = useDidFinishSSR() && screenSize ? screenSize : hiddenSize;
156
+ var animatedNumber = useAnimatedNumber(startPosition);
157
+ var at = React.useRef(startPosition);
158
+ var hasntMeasured = at.current === hiddenSize;
159
+ var [disableAnimation, setDisableAnimation] = useState(hasntMeasured);
160
+ var skipAdaptAnimation = React.useRef(false);
161
+ if (controller === null || controller === void 0 ? void 0 : controller.skipNextAnimation) skipAdaptAnimation.current = true;
162
+ var hasScrollView = React.useRef(false);
163
+ var lastPositionIndexRef = React.useRef(-1);
164
+ var pendingTransitionRef = React.useRef(null);
165
+ var emitTransition = useEvent(function(phase, event, finished) {
166
+ var _controller_onTransition;
167
+ var e = {
168
+ phase,
169
+ cause: event.cause,
170
+ position: event.position
171
+ };
172
+ if (phase === "end") e.finished = finished;
173
+ onTransition === null || onTransition === void 0 || onTransition(e);
174
+ controller === null || controller === void 0 || (_controller_onTransition = controller.onTransition) == null || _controller_onTransition.call(controller, e);
175
+ });
176
+ var syncAnimatedPosition = useEvent(function(value) {
177
+ at.current = value;
178
+ scrollBridge.paneY = value;
179
+ var minY = activePositions[0];
180
+ var wasAtTop = scrollBridge.isAtTop;
181
+ var nowAtTop = value <= minY + 5;
182
+ if (wasAtTop === nowAtTop) return;
183
+ scrollBridge.isAtTop = nowAtTop;
184
+ if (nowAtTop) {
185
+ var _scrollBridge_setScrollEnabled;
186
+ if (scrollBridge.lockScrollAtTop) {
187
+ var _scrollBridge_setScrollEnabled1;
188
+ if (scrollBridge.y > 0) {
189
+ var _scrollBridge_forceScrollTo;
190
+ (_scrollBridge_forceScrollTo = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo === void 0 || _scrollBridge_forceScrollTo.call(scrollBridge, 0);
191
+ scrollBridge.y = 0;
192
+ }
193
+ scrollBridge.scrollLockY = 0;
194
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false, 0);
195
+ return;
196
+ }
197
+ if (scrollBridge.y > 0) {
198
+ var _scrollBridge_forceScrollTo1;
199
+ (_scrollBridge_forceScrollTo1 = scrollBridge.forceScrollTo) === null || _scrollBridge_forceScrollTo1 === void 0 || _scrollBridge_forceScrollTo1.call(scrollBridge, 0);
200
+ scrollBridge.y = 0;
201
+ }
202
+ scrollBridge.scrollLockY = void 0;
203
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
204
+ } else {
205
+ var _scrollBridge_setScrollEnabled2;
206
+ scrollBridge.scrollLockY = 0;
207
+ (_scrollBridge_setScrollEnabled2 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled2 === void 0 || _scrollBridge_setScrollEnabled2.call(scrollBridge, false);
208
+ }
209
+ });
210
+ var setAnimatedPositionDirect = useEvent(function(value) {
211
+ syncAnimatedPosition(value);
212
+ animatedNumber.setValue(value, { type: "direct" });
213
+ });
214
+ var getAnimatedPosition = useEvent(function() {
215
+ var value = animatedNumber.getValue();
216
+ syncAnimatedPosition(value);
217
+ return value;
218
+ });
219
+ function stopSpring() {
220
+ animatedNumber.stop();
221
+ if (scrollBridge.onFinishAnimate) {
222
+ scrollBridge.onFinishAnimate();
223
+ scrollBridge.onFinishAnimate = void 0;
224
+ }
225
+ }
226
+ var animateTo = useEvent(function(position2, animationOverride) {
227
+ if (frameSize === 0) return;
228
+ var closeTarget = isWeb ? Math.max(effScreenSize, getMaxViewportHeight()) : effScreenSize;
229
+ var isDismissPosition = dismissOnSnapToBottom && position2 === activePositions.length - 1;
230
+ var isOpenAnimation = position2 !== -1 && !isHidden && !isDismissPosition;
231
+ var toValue = isOpenAnimation ? activePositions[position2] : closeTarget;
232
+ if (at.current === toValue) {
233
+ if (isDismissPosition) {
234
+ if (pendingTransitionRef.current) {
235
+ emitTransition("end", pendingTransitionRef.current, false);
236
+ pendingTransitionRef.current = null;
237
+ }
238
+ stopSpring();
239
+ var event = {
240
+ cause: "close",
241
+ position: toValue
242
+ };
243
+ lastPositionIndexRef.current = -1;
244
+ emitTransition("start", event);
245
+ syncAnimatedPosition(toValue);
246
+ setIsFullyClosed(true);
247
+ emitTransition("end", event, true);
248
+ }
249
+ return;
250
+ }
251
+ at.current = toValue;
252
+ var cause = !isOpenAnimation ? "close" : lastPositionIndexRef.current < 0 ? "open" : "snap";
253
+ lastPositionIndexRef.current = isOpenAnimation ? position2 : -1;
254
+ var event1 = {
255
+ cause,
256
+ position: toValue
257
+ };
258
+ if (pendingTransitionRef.current) {
259
+ emitTransition("end", pendingTransitionRef.current, false);
260
+ pendingTransitionRef.current = null;
261
+ }
262
+ stopSpring();
263
+ var animationCompleteCallback = function() {
264
+ if (at.current !== toValue) return;
265
+ syncAnimatedPosition(toValue);
266
+ pendingTransitionRef.current = null;
267
+ if (!isOpenAnimation && !openRef.current) setIsFullyClosed(true);
268
+ emitTransition("end", event1, true);
269
+ };
270
+ pendingTransitionRef.current = event1;
271
+ emitTransition("start", event1);
272
+ if (skipAdaptAnimation.current) {
273
+ skipAdaptAnimation.current = false;
274
+ animatedNumber.setValue(toValue, {
275
+ type: "timing",
276
+ duration: 0
277
+ }, animationCompleteCallback);
278
+ return;
279
+ }
280
+ var resolvedConfig = animationOverride || {
281
+ type: "spring",
282
+ ...transitionConfig
283
+ };
284
+ var springConfig = !resolvedConfig.type || resolvedConfig.type === "spring" ? {
285
+ restDisplacementThreshold: 1,
286
+ restSpeedThreshold: 10,
287
+ energyThreshold: 1e-5,
288
+ ...resolvedConfig
289
+ } : resolvedConfig;
290
+ animatedNumber.setValue(toValue, springConfig, animationCompleteCallback);
291
+ });
292
+ useIsomorphicLayoutEffect(function() {
293
+ if (hasntMeasured && screenSize && frameSize) {
294
+ at.current = screenSize;
295
+ animatedNumber.setValue(screenSize, {
296
+ type: "timing",
297
+ duration: 0
298
+ }, function() {
299
+ syncAnimatedPosition(screenSize);
300
+ setTimeout(function() {
301
+ setDisableAnimation(false);
302
+ }, 10);
303
+ });
304
+ return;
305
+ }
306
+ if (disableAnimation) return;
307
+ if (isDraggingRef.current) return;
308
+ if (!frameSize || !screenSize || isHidden || hasntMeasured && !open) return;
309
+ animateTo(position);
310
+ if (position === -1) {
311
+ scrollBridge.scrollLock = false;
312
+ scrollBridge.scrollStartY = -1;
313
+ }
314
+ if (open && position >= 0) {
315
+ var isTopPosition = position === 0;
316
+ scrollBridge.isAtTop = isTopPosition;
317
+ if (isTopPosition) {
318
+ var _scrollBridge_setScrollEnabled;
319
+ scrollBridge.scrollLockY = void 0;
320
+ (_scrollBridge_setScrollEnabled = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled === void 0 || _scrollBridge_setScrollEnabled.call(scrollBridge, true);
321
+ } else {
322
+ var _scrollBridge_setScrollEnabled1;
323
+ scrollBridge.scrollLockY = 0;
324
+ (_scrollBridge_setScrollEnabled1 = scrollBridge.setScrollEnabled) === null || _scrollBridge_setScrollEnabled1 === void 0 || _scrollBridge_setScrollEnabled1.call(scrollBridge, false);
325
+ }
326
+ }
327
+ }, [
328
+ hasntMeasured,
329
+ disableAnimation,
330
+ isHidden,
331
+ frameSize,
332
+ screenSize,
333
+ open,
334
+ position
335
+ ]);
336
+ var _props_disableDrag;
337
+ var disableDrag = (_props_disableDrag = props.disableDrag) !== null && _props_disableDrag !== void 0 ? _props_disableDrag : controller === null || controller === void 0 ? void 0 : controller.disableDrag;
338
+ useThemeName();
339
+ var [blockPan, setBlockPan] = React.useState(false);
340
+ var panResponder = React.useMemo(function() {
341
+ if (disableDrag) return;
342
+ if (!frameSize) return;
343
+ if (isShowingInnerSheet) return;
344
+ var minY = activePositions[0];
345
+ scrollBridge.paneMinY = minY;
346
+ var startY = at.current;
347
+ function setPanning(val) {
348
+ setIsDragging(val);
349
+ }
350
+ var release = function(param) {
351
+ var { vy } = param;
352
+ scrollBridge.setParentDragging(false);
353
+ if (scrollBridge.scrollLock) return;
354
+ isExternalDrag = false;
355
+ previouslyScrolling = false;
356
+ setPanning(false);
357
+ var currentPos = at.current;
358
+ var closestPoint = getSheetReleasePosition({
359
+ positions: activePositions,
360
+ projectedEnd: currentPos + frameSize * vy * .2,
361
+ currentPosition: currentPos,
362
+ frameSize,
363
+ dismissOnSnapToBottom,
364
+ snapPointsMode,
365
+ isKeyboardVisible,
366
+ isWeb
367
+ });
368
+ setPosition(closestPoint);
369
+ animateTo(closestPoint);
370
+ };
371
+ var finish = function(_e, state2) {
372
+ release({
373
+ vy: state2.vy,
374
+ dragAt: state2.dy
375
+ });
376
+ };
377
+ var previouslyScrolling = false;
378
+ var onMoveShouldSet = function(e, param) {
379
+ var { dy } = param;
380
+ function getShouldSet() {
381
+ if (e.target === providerProps.handleRef.current) return true;
382
+ if (scrollBridge.scrollNodeTouched) return false;
383
+ if (scrollBridge.hasScrollableContent === true) {
384
+ if (scrollBridge.scrollLock) return false;
385
+ var isScrolled = scrollBridge.y !== 0;
386
+ var isDraggingUp = dy < 0;
387
+ var isNearTop = scrollBridge.paneY - 5 <= scrollBridge.paneMinY;
388
+ if (isScrolled) return false;
389
+ if (isNearTop) {
390
+ if (hasScrollView.current && isDraggingUp) return false;
391
+ }
392
+ }
393
+ return Math.abs(dy) > 10;
394
+ }
395
+ var granted = getShouldSet();
396
+ if (granted) scrollBridge.setParentDragging(true);
397
+ return granted;
398
+ };
399
+ var grant = function() {
400
+ setPanning(true);
401
+ stopSpring();
402
+ startY = getAnimatedPosition();
403
+ };
404
+ var isExternalDrag = false;
405
+ scrollBridge.startPanDrag = function() {
406
+ isExternalDrag = true;
407
+ grant();
408
+ };
409
+ scrollBridge.drag = function(dy) {
410
+ if (!isExternalDrag) {
411
+ isExternalDrag = true;
412
+ grant();
413
+ }
414
+ setAnimatedPositionDirect(resisted(dy + startY, minY));
415
+ };
416
+ scrollBridge.release = release;
417
+ scrollBridge.snapToPosition = function(positionIndex) {
418
+ isExternalDrag = false;
419
+ setPanning(false);
420
+ setPosition(positionIndex);
421
+ animateTo(positionIndex);
422
+ };
423
+ return PanResponder.create({
424
+ onMoveShouldSetPanResponder: onMoveShouldSet,
425
+ onPanResponderTerminationRequest: function() {
426
+ return false;
427
+ },
428
+ onPanResponderGrant: grant,
429
+ onPanResponderMove: function(_e, param) {
430
+ var { dy } = param;
431
+ var to = resisted(dy + startY, minY);
432
+ if (to <= minY) scrollBridge.setParentDragging(false);
433
+ else scrollBridge.setParentDragging(true);
434
+ setAnimatedPositionDirect(to);
435
+ },
436
+ onPanResponderEnd: finish,
437
+ onPanResponderTerminate: finish,
438
+ onPanResponderRelease: finish
439
+ });
440
+ }, [
441
+ disableDrag,
442
+ isShowingInnerSheet,
443
+ animateTo,
444
+ frameSize,
445
+ activePositions,
446
+ setPosition,
447
+ dismissOnSnapToBottom,
448
+ snapPointsMode
449
+ ]);
450
+ React.useEffect(function() {
451
+ if (isDragging || isHidden || !open || disableAnimation) return;
452
+ if (!frameSize || !screenSize) return;
453
+ animateTo(position, {
454
+ type: "timing",
455
+ duration: 250
456
+ });
457
+ }, [isKeyboardVisible, keyboardHeight]);
458
+ var wasDragging = React.useRef(false);
459
+ React.useEffect(function() {
460
+ if (isDragging) {
461
+ wasDragging.current = true;
462
+ return;
463
+ }
464
+ if (!wasDragging.current) return;
465
+ wasDragging.current = false;
466
+ if (!frameSize || !screenSize || isHidden || !open) return;
467
+ animateTo(position);
468
+ }, [isDragging]);
469
+ React.useEffect(function() {
470
+ if (!open && isKeyboardVisible) {
471
+ dismissKeyboard();
472
+ pauseKeyboardHandler.current = false;
473
+ flushPendingHide();
474
+ }
475
+ }, [open]);
476
+ React.useEffect(function() {
477
+ if (!isWeb || !modal || !open || shouldHideParentSheet) return;
478
+ var layer = {};
479
+ sheetEscapeLayers.push(layer);
480
+ var onKeyDown = function(event) {
481
+ if (event.key === "Escape") {
482
+ if (sheetEscapeLayers[sheetEscapeLayers.length - 1] === layer) state.setOpen(false);
483
+ }
484
+ };
485
+ document.addEventListener("keydown", onKeyDown);
486
+ return function() {
487
+ var index = sheetEscapeLayers.indexOf(layer);
488
+ if (index > -1) sheetEscapeLayers.splice(index, 1);
489
+ document.removeEventListener("keydown", onKeyDown);
490
+ };
491
+ }, [
492
+ modal,
493
+ open,
494
+ shouldHideParentSheet,
495
+ state.setOpen
496
+ ]);
497
+ var { panGesture, panGestureRef, gestureHandlerEnabled } = useGestureHandlerPan({
498
+ positions: activePositions,
499
+ frameSize,
500
+ setPosition,
501
+ animateTo,
502
+ stopSpring,
503
+ scrollBridge,
504
+ setIsDragging,
505
+ getCurrentPosition: getAnimatedPosition,
506
+ resisted,
507
+ disableDrag,
508
+ isShowingInnerSheet,
509
+ setAnimatedPosition: setAnimatedPositionDirect,
510
+ dismissOnSnapToBottom,
511
+ snapPointsMode,
512
+ isKeyboardVisible,
513
+ pauseKeyboardHandler
514
+ });
515
+ var ignoreLayoutForKeyboard = useEvent(function() {
516
+ return isWeb && moveOnKeyboardChange && getWebKeyboardResizeHeight() >= MIN_KEYBOARD_HEIGHT;
517
+ });
518
+ var handleAnimationViewLayout = useEvent(function(e) {
519
+ var _e_nativeEvent;
520
+ if (!open && stableFrameSize.current !== 0) return;
521
+ var layoutHeight = (_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height;
522
+ if (ignoreLayoutForKeyboard() && frameSize > 0) return;
523
+ var next = modal ? Math.min(layoutHeight, getStableViewportHeight()) : layoutHeight;
524
+ if (!next) return;
525
+ setFrameSize(Math.round(next));
526
+ });
527
+ var handleMaxContentViewLayout = React.useCallback(function(e) {
528
+ var _e_nativeEvent;
529
+ if (ignoreLayoutForKeyboard() && screenSize > 0) return;
530
+ var next = Math.min((_e_nativeEvent = e.nativeEvent) === null || _e_nativeEvent === void 0 ? void 0 : _e_nativeEvent.layout.height, getStableViewportHeight());
531
+ if (!next) return;
532
+ setMaxContentSize(Math.round(next));
533
+ }, [ignoreLayoutForKeyboard, screenSize]);
534
+ var animatedStyle = useAnimatedNumberStyle(animatedNumber, React.useCallback(function(val) {
535
+ "worklet";
536
+ return { transform: [{ translateY: frameSize === 0 ? hiddenSize : val }] };
537
+ }, [frameSize]));
538
+ var [isFullyClosed, setIsFullyClosed] = React.useState(false);
539
+ if (open && isFullyClosed) setIsFullyClosed(false);
540
+ var hasEverOpened = React.useRef(open);
541
+ if (open) hasEverOpened.current = true;
542
+ var isVisuallyActive = open || hasEverOpened.current && !isFullyClosed;
543
+ var applyHidden = shouldHideParentSheet || isFullyClosed && !disableHideWhenClosed;
544
+ var forcedContentHeight = hasFit ? void 0 : snapPointsMode === "percent" ? `${maxSnapPoint}${isWeb ? modal ? "dvh" : "%" : "%"}` : maxSnapPoint;
545
+ var setHasScrollView = React.useCallback(function(val) {
546
+ hasScrollView.current = val;
547
+ }, []);
548
+ var animatedPositionValue = React.useMemo(function() {
549
+ var _activePositions_;
550
+ return {
551
+ value: animatedNumber,
552
+ screenSize: effScreenSize,
553
+ frameSize,
554
+ snapOffsets: activePositions,
555
+ minY: (_activePositions_ = activePositions[0]) !== null && _activePositions_ !== void 0 ? _activePositions_ : 0
556
+ };
557
+ }, [
558
+ animatedNumber,
559
+ effScreenSize,
560
+ frameSize,
561
+ activePositions
562
+ ]);
563
+ var { overlayChildren, animatedChildren } = React.useMemo(function() {
564
+ return partitionSheetChildren(props.children);
565
+ }, [props.children]);
566
+ var contents = /* @__PURE__ */ jsx(LayoutMeasurementController, {
567
+ disable: !open,
568
+ children: /* @__PURE__ */ jsx(ParentSheetContext.Provider, {
569
+ value: nextParentContext,
570
+ children: /* @__PURE__ */ jsx(SheetProvider, {
571
+ ...providerProps,
572
+ keyboardOccludedHeight,
573
+ isKeyboardVisible,
574
+ keyboardStableFrameHeight,
575
+ setHasScrollView,
576
+ children: /* @__PURE__ */ jsx(GestureSheetProvider, {
577
+ isDragging,
578
+ blockPan,
579
+ setBlockPan,
580
+ panGesture,
581
+ panGestureRef,
582
+ children: /* @__PURE__ */ jsxs(SheetAnimatedPositionContext.Provider, {
583
+ value: animatedPositionValue,
584
+ children: [
585
+ /* @__PURE__ */ jsx(SheetOverlayLayerContext.Provider, {
586
+ value: true,
587
+ children: /* @__PURE__ */ jsx(AnimatePresence, {
588
+ custom: { open },
589
+ children: shouldHideParentSheet || !open ? null : overlayChildren
590
+ })
591
+ }),
592
+ snapPointsMode !== "percent" && /* @__PURE__ */ jsx(View$1, {
593
+ style: {
594
+ opacity: 0,
595
+ position: "absolute",
596
+ top: 0,
597
+ left: 0,
598
+ right: 0,
599
+ bottom: 0,
600
+ pointerEvents: "none"
601
+ },
602
+ onLayout: handleMaxContentViewLayout
603
+ }),
604
+ /* @__PURE__ */ jsx(AnimatedView, {
605
+ ref,
606
+ onLayout: handleAnimationViewLayout,
607
+ transition: isDragging || disableAnimation ? null : transition,
608
+ disableClassName: true,
609
+ style: [{
610
+ position: "absolute",
611
+ zIndex,
612
+ width: "100%",
613
+ height: forcedContentHeight,
614
+ minHeight: forcedContentHeight,
615
+ ...applyHidden && { display: "none" },
616
+ ...(shouldHideParentSheet || !open) && { pointerEvents: "none" }
617
+ }, animatedStyle],
618
+ children: gestureHandlerEnabled && panGesture ? /* @__PURE__ */ jsx(GestureDetectorWrapper, {
619
+ gesture: panGesture,
620
+ style: { flex: 1 },
621
+ children: animatedChildren
622
+ }) : /* @__PURE__ */ jsx(View$1, {
623
+ ...panResponder === null || panResponder === void 0 ? void 0 : panResponder.panHandlers,
624
+ style: {
625
+ flex: 1,
626
+ width: "100%",
627
+ height: "100%"
628
+ },
629
+ children: animatedChildren
630
+ })
631
+ })
632
+ ]
633
+ })
634
+ })
635
+ })
636
+ })
637
+ });
638
+ if (needsPortalRepropagation()) contents = /* @__PURE__ */ jsx(ProvideAdaptContext, {
639
+ ...useAdaptContext(),
640
+ children: /* @__PURE__ */ jsx(SafeAreaInsetsContext.Provider, {
641
+ value: safeAreaInsets,
642
+ children: contents
643
+ })
644
+ });
645
+ var shouldMountChildren = unmountChildrenWhenHidden ? !isFullyClosed : true;
646
+ if (modal) {
647
+ var RNGHRoot = getGestureHandlerState().RootView;
648
+ var mountedContents = shouldMountChildren ? /* @__PURE__ */ jsx(ContainerComponent, { children: contents }) : null;
649
+ var modalContents = /* @__PURE__ */ jsx(Portal, {
650
+ stackZIndex: zIndex,
651
+ hidden: !isVisuallyActive,
652
+ ...portalProps,
653
+ children: mountedContents && RNGHRoot ? /* @__PURE__ */ jsx(RNGHRoot, {
654
+ style: open ? rnghRootStyleOpen : rnghRootStyleClosed,
655
+ children: mountedContents
656
+ }) : mountedContents
657
+ });
658
+ if (isWeb) return modalContents;
659
+ return /* @__PURE__ */ jsx(SheetInsideSheetContext.Provider, {
660
+ value: onInnerSheet,
661
+ children: modalContents
662
+ });
663
+ }
664
+ return contents;
614
665
  });
666
+ function isSheetOverlayComponent(type) {
667
+ var staticConfig = type === null || type === void 0 ? void 0 : type.staticConfig;
668
+ while (staticConfig) {
669
+ if (staticConfig[SHEET_OVERLAY_MARKER]) return true;
670
+ staticConfig = staticConfig.parentStaticConfig;
671
+ }
672
+ return false;
673
+ }
674
+ function partitionSheetChildren(children) {
675
+ var overlayChildren = [];
676
+ var animatedChildren = [];
677
+ React.Children.forEach(children, function(child) {
678
+ if (!/* @__PURE__ */ React.isValidElement(child)) {
679
+ animatedChildren.push(child);
680
+ return;
681
+ }
682
+ if (isSheetOverlayComponent(child.type)) {
683
+ overlayChildren.push(child);
684
+ return;
685
+ }
686
+ animatedChildren.push(child);
687
+ });
688
+ return {
689
+ overlayChildren,
690
+ animatedChildren
691
+ };
692
+ }
615
693
  function getYPositions(mode, point, screenSize, frameSize) {
616
- if (!screenSize || !frameSize) return 0;
617
- if (mode === "mixed") {
618
- if (typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
619
- if (point === "fit") return screenSize - Math.min(screenSize, frameSize);
620
- if (point.endsWith("%")) {
621
- var pct = Math.min(100, Math.max(0, Number(point.slice(0, -1)))) / 100;
622
- if (Number.isNaN(pct)) {
623
- console.warn("Invalid snapPoint percentage string");
624
- return 0;
625
- }
626
- return Math.round(screenSize - pct * screenSize);
627
- }
628
- console.warn("Invalid snapPoint unknown value");
629
- return 0;
630
- }
631
- if (mode === "fit") {
632
- if (point === 0) return screenSize;
633
- return screenSize - Math.min(screenSize, frameSize);
634
- }
635
- if (mode === "constant" && typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
636
- var pct1 = Math.min(100, Math.max(0, Number(point))) / 100;
637
- if (Number.isNaN(pct1)) {
638
- console.warn("Invalid snapPoint percentage");
639
- return 0;
640
- }
641
- return Math.round(screenSize - pct1 * screenSize);
694
+ if (!screenSize || !frameSize) return 0;
695
+ if (mode === "mixed") {
696
+ if (typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
697
+ if (point === "fit") return screenSize - Math.min(screenSize, frameSize);
698
+ if (point.endsWith("%")) {
699
+ var pct = Math.min(100, Math.max(0, Number(point.slice(0, -1)))) / 100;
700
+ if (Number.isNaN(pct)) {
701
+ console.warn(formatDiagnostic("TAMAGUI_SHEET_SNAP_POINT", "Sheet", "snapPoints contains an invalid percentage string", "Use \"fit\", a pixel number, or a percentage such as \"50%\"", "snapPoint", point));
702
+ return 0;
703
+ }
704
+ return Math.round(screenSize - pct * screenSize);
705
+ }
706
+ console.warn(formatDiagnostic("TAMAGUI_SHEET_SNAP_POINT", "Sheet", "snapPoints contains an unsupported mixed-mode value", "Use \"fit\", a pixel number, or a percentage such as \"50%\"", "snapPoint", point));
707
+ return 0;
708
+ }
709
+ if (mode === "fit") {
710
+ if (point === 0) return screenSize;
711
+ return screenSize - Math.min(screenSize, frameSize);
712
+ }
713
+ if (mode === "constant" && typeof point === "number") return screenSize - Math.min(screenSize, Math.max(0, point));
714
+ var pct1 = Math.min(100, Math.max(0, Number(point))) / 100;
715
+ if (Number.isNaN(pct1)) {
716
+ console.warn(formatDiagnostic("TAMAGUI_SHEET_SNAP_POINT", "Sheet", "snapPoints contains a value that cannot be converted to a percentage", "Use a numeric percentage such as 50", "snapPoint", point));
717
+ return 0;
718
+ }
719
+ return Math.round(screenSize - pct1 * screenSize);
642
720
  }
643
- export { SheetImplementationCustom };
721
+
722
+ export { SheetImplementationCustom, isSheetOverlayComponent };
644
723
  //# sourceMappingURL=SheetImplementationCustom.native.js.map