react-native-screen-transitions 1.2.0 → 2.0.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 (344) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -156
  3. package/lib/commonjs/__tests__ /geometry.test.js +178 -0
  4. package/lib/commonjs/__tests__ /geometry.test.js.map +1 -0
  5. package/lib/commonjs/components/bounds-activator.js +33 -0
  6. package/lib/commonjs/components/bounds-activator.js.map +1 -0
  7. package/lib/commonjs/components/controllers/screen-lifecycle.js +66 -0
  8. package/lib/commonjs/components/controllers/screen-lifecycle.js.map +1 -0
  9. package/lib/commonjs/components/create-transition-aware-component.js +96 -0
  10. package/lib/commonjs/components/create-transition-aware-component.js.map +1 -0
  11. package/lib/commonjs/components/root-transition-aware.js +56 -0
  12. package/lib/commonjs/components/root-transition-aware.js.map +1 -0
  13. package/lib/commonjs/configs/index.js +12 -0
  14. package/lib/commonjs/configs/index.js.map +1 -0
  15. package/lib/commonjs/configs/presets.js +206 -0
  16. package/lib/commonjs/configs/presets.js.map +1 -0
  17. package/lib/commonjs/configs/specs.js +14 -0
  18. package/lib/commonjs/configs/specs.js.map +1 -0
  19. package/lib/commonjs/hooks/animation/use-associated-style.js +36 -0
  20. package/lib/commonjs/hooks/animation/use-associated-style.js.map +1 -0
  21. package/lib/commonjs/hooks/animation/use-screen-animation.js +120 -0
  22. package/lib/commonjs/hooks/animation/use-screen-animation.js.map +1 -0
  23. package/lib/commonjs/hooks/bounds/use-bound-measurer.js +52 -0
  24. package/lib/commonjs/hooks/bounds/use-bound-measurer.js.map +1 -0
  25. package/lib/commonjs/hooks/gestures/use-build-gestures.js +239 -0
  26. package/lib/commonjs/hooks/gestures/use-build-gestures.js.map +1 -0
  27. package/lib/commonjs/hooks/gestures/use-scroll-progress.js +57 -0
  28. package/lib/commonjs/hooks/gestures/use-scroll-progress.js.map +1 -0
  29. package/lib/commonjs/hooks/use-stable-callback.js +17 -0
  30. package/lib/commonjs/hooks/use-stable-callback.js.map +1 -0
  31. package/lib/commonjs/index.js +37 -0
  32. package/lib/commonjs/index.js.map +1 -0
  33. package/lib/commonjs/integrations/native-stack/navigators/createNativeStackNavigator.js +68 -0
  34. package/lib/commonjs/integrations/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
  35. package/lib/commonjs/integrations/native-stack/utils/debounce.js +16 -0
  36. package/lib/commonjs/integrations/native-stack/utils/debounce.js.map +1 -0
  37. package/lib/commonjs/integrations/native-stack/utils/getModalRoutesKeys.js +17 -0
  38. package/lib/commonjs/integrations/native-stack/utils/getModalRoutesKeys.js.map +1 -0
  39. package/lib/commonjs/integrations/native-stack/utils/useAnimatedHeaderHeight.js +18 -0
  40. package/lib/commonjs/integrations/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
  41. package/lib/commonjs/integrations/native-stack/utils/useDismissedRouteError.js +22 -0
  42. package/lib/commonjs/integrations/native-stack/utils/useDismissedRouteError.js.map +1 -0
  43. package/lib/commonjs/integrations/native-stack/utils/useInvalidPreventRemoveError.js +25 -0
  44. package/lib/commonjs/integrations/native-stack/utils/useInvalidPreventRemoveError.js.map +1 -0
  45. package/lib/commonjs/integrations/native-stack/views/FontProcessor.js +10 -0
  46. package/lib/commonjs/integrations/native-stack/views/FontProcessor.js.map +1 -0
  47. package/lib/commonjs/integrations/native-stack/views/FontProcessor.native.js +18 -0
  48. package/lib/commonjs/integrations/native-stack/views/FontProcessor.native.js.map +1 -0
  49. package/lib/commonjs/integrations/native-stack/views/FooterComponent.js +17 -0
  50. package/lib/commonjs/integrations/native-stack/views/FooterComponent.js.map +1 -0
  51. package/lib/commonjs/integrations/native-stack/views/NativeStackView.js +138 -0
  52. package/lib/commonjs/integrations/native-stack/views/NativeStackView.js.map +1 -0
  53. package/lib/commonjs/integrations/native-stack/views/NativeStackView.native.js +497 -0
  54. package/lib/commonjs/integrations/native-stack/views/NativeStackView.native.js.map +1 -0
  55. package/lib/commonjs/integrations/native-stack/views/useHeaderConfigProps.js +203 -0
  56. package/lib/commonjs/integrations/native-stack/views/useHeaderConfigProps.js.map +1 -0
  57. package/lib/commonjs/package.json +1 -0
  58. package/lib/commonjs/providers/gestures.js +64 -0
  59. package/lib/commonjs/providers/gestures.js.map +1 -0
  60. package/lib/commonjs/providers/keys.js +35 -0
  61. package/lib/commonjs/providers/keys.js.map +1 -0
  62. package/lib/commonjs/stores/animations.js +39 -0
  63. package/lib/commonjs/stores/animations.js.map +1 -0
  64. package/lib/commonjs/stores/bounds.js +64 -0
  65. package/lib/commonjs/stores/bounds.js.map +1 -0
  66. package/lib/commonjs/stores/gestures.js +38 -0
  67. package/lib/commonjs/stores/gestures.js.map +1 -0
  68. package/lib/commonjs/stores/navigator-dismiss-state.js +23 -0
  69. package/lib/commonjs/stores/navigator-dismiss-state.js.map +1 -0
  70. package/lib/commonjs/stores/utils/reset-stores-for-screen.js +20 -0
  71. package/lib/commonjs/stores/utils/reset-stores-for-screen.js.map +1 -0
  72. package/lib/commonjs/types/animation.js +6 -0
  73. package/lib/commonjs/types/animation.js.map +1 -0
  74. package/lib/commonjs/types/bounds.js +6 -0
  75. package/lib/commonjs/types/bounds.js.map +1 -0
  76. package/lib/commonjs/types/core.js +6 -0
  77. package/lib/commonjs/types/core.js.map +1 -0
  78. package/lib/commonjs/types/gesture.js +2 -0
  79. package/lib/commonjs/types/gesture.js.map +1 -0
  80. package/lib/commonjs/types/navigator.js +6 -0
  81. package/lib/commonjs/types/navigator.js.map +1 -0
  82. package/lib/commonjs/types/utils.js +2 -0
  83. package/lib/commonjs/types/utils.js.map +1 -0
  84. package/lib/commonjs/utils/animation/animate.js +18 -0
  85. package/lib/commonjs/utils/animation/animate.js.map +1 -0
  86. package/lib/commonjs/utils/animation/run-transition.js +48 -0
  87. package/lib/commonjs/utils/animation/run-transition.js.map +1 -0
  88. package/lib/commonjs/utils/bounds/_types/builder.js +6 -0
  89. package/lib/commonjs/utils/bounds/_types/builder.js.map +1 -0
  90. package/lib/commonjs/utils/bounds/_types/geometry.js +2 -0
  91. package/lib/commonjs/utils/bounds/_types/geometry.js.map +1 -0
  92. package/lib/commonjs/utils/bounds/_types/get-bounds.js +6 -0
  93. package/lib/commonjs/utils/bounds/_types/get-bounds.js.map +1 -0
  94. package/lib/commonjs/utils/bounds/build-bound-styles.js +145 -0
  95. package/lib/commonjs/utils/bounds/build-bound-styles.js.map +1 -0
  96. package/lib/commonjs/utils/bounds/constants.js +31 -0
  97. package/lib/commonjs/utils/bounds/constants.js.map +1 -0
  98. package/lib/commonjs/utils/bounds/flatten-styles.js +27 -0
  99. package/lib/commonjs/utils/bounds/flatten-styles.js.map +1 -0
  100. package/lib/commonjs/utils/bounds/geometry.js +94 -0
  101. package/lib/commonjs/utils/bounds/geometry.js.map +1 -0
  102. package/lib/commonjs/utils/bounds/get-bounds.js +51 -0
  103. package/lib/commonjs/utils/bounds/get-bounds.js.map +1 -0
  104. package/lib/commonjs/utils/bounds/index.js +38 -0
  105. package/lib/commonjs/utils/bounds/index.js.map +1 -0
  106. package/lib/commonjs/utils/bounds/style-composers.js +199 -0
  107. package/lib/commonjs/utils/bounds/style-composers.js.map +1 -0
  108. package/lib/commonjs/utils/gesture/apply-gesture-activation-criteria.js +81 -0
  109. package/lib/commonjs/utils/gesture/apply-gesture-activation-criteria.js.map +1 -0
  110. package/lib/commonjs/utils/gesture/map-gesture-to-progress.js +17 -0
  111. package/lib/commonjs/utils/gesture/map-gesture-to-progress.js.map +1 -0
  112. package/lib/commonjs/utils/gesture/normalize-gesture-translation.js +21 -0
  113. package/lib/commonjs/utils/gesture/normalize-gesture-translation.js.map +1 -0
  114. package/lib/commonjs/utils/index.js +17 -0
  115. package/lib/commonjs/utils/index.js.map +1 -0
  116. package/lib/module/__tests__ /geometry.test.js +178 -0
  117. package/lib/module/__tests__ /geometry.test.js.map +1 -0
  118. package/lib/module/components/bounds-activator.js +28 -0
  119. package/lib/module/components/bounds-activator.js.map +1 -0
  120. package/lib/module/components/controllers/screen-lifecycle.js +60 -0
  121. package/lib/module/components/controllers/screen-lifecycle.js.map +1 -0
  122. package/lib/module/components/create-transition-aware-component.js +91 -0
  123. package/lib/module/components/create-transition-aware-component.js.map +1 -0
  124. package/lib/module/components/root-transition-aware.js +51 -0
  125. package/lib/module/components/root-transition-aware.js.map +1 -0
  126. package/lib/module/configs/index.js +5 -0
  127. package/lib/module/configs/index.js.map +1 -0
  128. package/lib/module/configs/presets.js +197 -0
  129. package/lib/module/configs/presets.js.map +1 -0
  130. package/lib/module/configs/specs.js +10 -0
  131. package/lib/module/configs/specs.js.map +1 -0
  132. package/lib/module/hooks/animation/use-associated-style.js +32 -0
  133. package/lib/module/hooks/animation/use-associated-style.js.map +1 -0
  134. package/lib/module/hooks/animation/use-screen-animation.js +115 -0
  135. package/lib/module/hooks/animation/use-screen-animation.js.map +1 -0
  136. package/lib/module/hooks/bounds/use-bound-measurer.js +47 -0
  137. package/lib/module/hooks/bounds/use-bound-measurer.js.map +1 -0
  138. package/lib/module/hooks/gestures/use-build-gestures.js +234 -0
  139. package/lib/module/hooks/gestures/use-build-gestures.js.map +1 -0
  140. package/lib/module/hooks/gestures/use-scroll-progress.js +52 -0
  141. package/lib/module/hooks/gestures/use-scroll-progress.js.map +1 -0
  142. package/lib/module/hooks/use-stable-callback.js +13 -0
  143. package/lib/module/hooks/use-stable-callback.js.map +1 -0
  144. package/lib/module/index.js +21 -0
  145. package/lib/module/index.js.map +1 -0
  146. package/lib/module/integrations/native-stack/navigators/createNativeStackNavigator.js +63 -0
  147. package/lib/module/integrations/native-stack/navigators/createNativeStackNavigator.js.map +1 -0
  148. package/lib/module/integrations/native-stack/utils/debounce.js +12 -0
  149. package/lib/module/integrations/native-stack/utils/debounce.js.map +1 -0
  150. package/lib/module/integrations/native-stack/utils/getModalRoutesKeys.js +12 -0
  151. package/lib/module/integrations/native-stack/utils/getModalRoutesKeys.js.map +1 -0
  152. package/lib/module/integrations/native-stack/utils/useAnimatedHeaderHeight.js +12 -0
  153. package/lib/module/integrations/native-stack/utils/useAnimatedHeaderHeight.js.map +1 -0
  154. package/lib/module/integrations/native-stack/utils/useDismissedRouteError.js +17 -0
  155. package/lib/module/integrations/native-stack/utils/useDismissedRouteError.js.map +1 -0
  156. package/lib/module/integrations/native-stack/utils/useInvalidPreventRemoveError.js +20 -0
  157. package/lib/module/integrations/native-stack/utils/useInvalidPreventRemoveError.js.map +1 -0
  158. package/lib/module/integrations/native-stack/views/FontProcessor.js +6 -0
  159. package/lib/module/integrations/native-stack/views/FontProcessor.js.map +1 -0
  160. package/lib/module/integrations/native-stack/views/FontProcessor.native.js +12 -0
  161. package/lib/module/integrations/native-stack/views/FontProcessor.native.js.map +1 -0
  162. package/lib/module/integrations/native-stack/views/FooterComponent.js +13 -0
  163. package/lib/module/integrations/native-stack/views/FooterComponent.js.map +1 -0
  164. package/lib/module/integrations/native-stack/views/NativeStackView.js +133 -0
  165. package/lib/module/integrations/native-stack/views/NativeStackView.js.map +1 -0
  166. package/lib/module/integrations/native-stack/views/NativeStackView.native.js +492 -0
  167. package/lib/module/integrations/native-stack/views/NativeStackView.native.js.map +1 -0
  168. package/lib/module/integrations/native-stack/views/useHeaderConfigProps.js +199 -0
  169. package/lib/module/integrations/native-stack/views/useHeaderConfigProps.js.map +1 -0
  170. package/lib/module/providers/gestures.js +58 -0
  171. package/lib/module/providers/gestures.js.map +1 -0
  172. package/lib/module/providers/keys.js +29 -0
  173. package/lib/module/providers/keys.js.map +1 -0
  174. package/lib/module/stores/animations.js +33 -0
  175. package/lib/module/stores/animations.js.map +1 -0
  176. package/lib/module/stores/bounds.js +60 -0
  177. package/lib/module/stores/bounds.js.map +1 -0
  178. package/lib/module/stores/gestures.js +34 -0
  179. package/lib/module/stores/gestures.js.map +1 -0
  180. package/lib/module/stores/navigator-dismiss-state.js +19 -0
  181. package/lib/module/stores/navigator-dismiss-state.js.map +1 -0
  182. package/lib/module/stores/utils/reset-stores-for-screen.js +16 -0
  183. package/lib/module/stores/utils/reset-stores-for-screen.js.map +1 -0
  184. package/lib/module/types/animation.js +4 -0
  185. package/lib/module/types/animation.js.map +1 -0
  186. package/lib/module/types/bounds.js +4 -0
  187. package/lib/module/types/bounds.js.map +1 -0
  188. package/lib/module/types/core.js +4 -0
  189. package/lib/module/types/core.js.map +1 -0
  190. package/lib/module/types/gesture.js +2 -0
  191. package/lib/module/types/gesture.js.map +1 -0
  192. package/lib/module/types/navigator.js +4 -0
  193. package/lib/module/types/navigator.js.map +1 -0
  194. package/lib/module/types/utils.js +2 -0
  195. package/lib/module/types/utils.js.map +1 -0
  196. package/lib/module/utils/animation/animate.js +13 -0
  197. package/lib/module/utils/animation/animate.js.map +1 -0
  198. package/lib/module/utils/animation/run-transition.js +43 -0
  199. package/lib/module/utils/animation/run-transition.js.map +1 -0
  200. package/lib/module/utils/bounds/_types/builder.js +4 -0
  201. package/lib/module/utils/bounds/_types/builder.js.map +1 -0
  202. package/lib/module/utils/bounds/_types/geometry.js +2 -0
  203. package/lib/module/utils/bounds/_types/geometry.js.map +1 -0
  204. package/lib/module/utils/bounds/_types/get-bounds.js +4 -0
  205. package/lib/module/utils/bounds/_types/get-bounds.js.map +1 -0
  206. package/lib/module/utils/bounds/build-bound-styles.js +141 -0
  207. package/lib/module/utils/bounds/build-bound-styles.js.map +1 -0
  208. package/lib/module/utils/bounds/constants.js +26 -0
  209. package/lib/module/utils/bounds/constants.js.map +1 -0
  210. package/lib/module/utils/bounds/flatten-styles.js +23 -0
  211. package/lib/module/utils/bounds/flatten-styles.js.map +1 -0
  212. package/lib/module/utils/bounds/geometry.js +89 -0
  213. package/lib/module/utils/bounds/geometry.js.map +1 -0
  214. package/lib/module/utils/bounds/get-bounds.js +46 -0
  215. package/lib/module/utils/bounds/get-bounds.js.map +1 -0
  216. package/lib/module/utils/bounds/index.js +33 -0
  217. package/lib/module/utils/bounds/index.js.map +1 -0
  218. package/lib/module/utils/bounds/style-composers.js +191 -0
  219. package/lib/module/utils/bounds/style-composers.js.map +1 -0
  220. package/lib/module/utils/gesture/apply-gesture-activation-criteria.js +76 -0
  221. package/lib/module/utils/gesture/apply-gesture-activation-criteria.js.map +1 -0
  222. package/lib/module/utils/gesture/map-gesture-to-progress.js +12 -0
  223. package/lib/module/utils/gesture/map-gesture-to-progress.js.map +1 -0
  224. package/lib/module/utils/gesture/normalize-gesture-translation.js +16 -0
  225. package/lib/module/utils/gesture/normalize-gesture-translation.js.map +1 -0
  226. package/lib/module/utils/index.js +4 -0
  227. package/lib/module/utils/index.js.map +1 -0
  228. package/lib/typescript/components/bounds-activator.d.ts +8 -0
  229. package/lib/typescript/components/bounds-activator.d.ts.map +1 -0
  230. package/lib/typescript/components/controllers/screen-lifecycle.d.ts +6 -0
  231. package/lib/typescript/components/controllers/screen-lifecycle.d.ts.map +1 -0
  232. package/lib/typescript/components/create-transition-aware-component.d.ts +9 -0
  233. package/lib/typescript/components/create-transition-aware-component.d.ts.map +1 -0
  234. package/lib/typescript/components/root-transition-aware.d.ts +6 -0
  235. package/lib/typescript/components/root-transition-aware.d.ts.map +1 -0
  236. package/lib/typescript/configs/index.d.ts +3 -0
  237. package/lib/typescript/configs/index.d.ts.map +1 -0
  238. package/lib/typescript/configs/presets.d.ts +9 -0
  239. package/lib/typescript/configs/presets.d.ts.map +1 -0
  240. package/lib/typescript/configs/specs.d.ts +3 -0
  241. package/lib/typescript/configs/specs.d.ts.map +1 -0
  242. package/lib/typescript/hooks/animation/use-associated-style.d.ts +11 -0
  243. package/lib/typescript/hooks/animation/use-associated-style.d.ts.map +1 -0
  244. package/lib/typescript/hooks/animation/use-screen-animation.d.ts +7 -0
  245. package/lib/typescript/hooks/animation/use-screen-animation.d.ts.map +1 -0
  246. package/lib/typescript/hooks/bounds/use-bound-measurer.d.ts +18 -0
  247. package/lib/typescript/hooks/bounds/use-bound-measurer.d.ts.map +1 -0
  248. package/lib/typescript/hooks/gestures/use-build-gestures.d.ts +11 -0
  249. package/lib/typescript/hooks/gestures/use-build-gestures.d.ts.map +1 -0
  250. package/lib/typescript/hooks/gestures/use-scroll-progress.d.ts +14 -0
  251. package/lib/typescript/hooks/gestures/use-scroll-progress.d.ts.map +1 -0
  252. package/lib/typescript/hooks/use-stable-callback.d.ts +2 -0
  253. package/lib/typescript/hooks/use-stable-callback.d.ts.map +1 -0
  254. package/lib/typescript/index.d.ts +1275 -0
  255. package/lib/typescript/index.d.ts.map +1 -0
  256. package/lib/typescript/integrations/native-stack/navigators/createNativeStackNavigator.d.ts +16 -0
  257. package/lib/typescript/integrations/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -0
  258. package/lib/typescript/integrations/native-stack/utils/debounce.d.ts +2 -0
  259. package/lib/typescript/integrations/native-stack/utils/debounce.d.ts.map +1 -0
  260. package/lib/typescript/integrations/native-stack/utils/getModalRoutesKeys.d.ts +4 -0
  261. package/lib/typescript/integrations/native-stack/utils/getModalRoutesKeys.d.ts.map +1 -0
  262. package/lib/typescript/integrations/native-stack/utils/useAnimatedHeaderHeight.d.ts +5 -0
  263. package/lib/typescript/integrations/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -0
  264. package/lib/typescript/integrations/native-stack/utils/useDismissedRouteError.d.ts +6 -0
  265. package/lib/typescript/integrations/native-stack/utils/useDismissedRouteError.d.ts.map +1 -0
  266. package/lib/typescript/integrations/native-stack/utils/useInvalidPreventRemoveError.d.ts +3 -0
  267. package/lib/typescript/integrations/native-stack/utils/useInvalidPreventRemoveError.d.ts.map +1 -0
  268. package/lib/typescript/integrations/native-stack/views/FontProcessor.d.ts +2 -0
  269. package/lib/typescript/integrations/native-stack/views/FontProcessor.d.ts.map +1 -0
  270. package/lib/typescript/integrations/native-stack/views/FontProcessor.native.d.ts +2 -0
  271. package/lib/typescript/integrations/native-stack/views/FontProcessor.native.d.ts.map +1 -0
  272. package/lib/typescript/integrations/native-stack/views/FooterComponent.d.ts +7 -0
  273. package/lib/typescript/integrations/native-stack/views/FooterComponent.d.ts.map +1 -0
  274. package/lib/typescript/integrations/native-stack/views/NativeStackView.d.ts +11 -0
  275. package/lib/typescript/integrations/native-stack/views/NativeStackView.d.ts.map +1 -0
  276. package/lib/typescript/integrations/native-stack/views/NativeStackView.native.d.ts +11 -0
  277. package/lib/typescript/integrations/native-stack/views/NativeStackView.native.d.ts.map +1 -0
  278. package/lib/typescript/integrations/native-stack/views/useHeaderConfigProps.d.ts +44 -0
  279. package/lib/typescript/integrations/native-stack/views/useHeaderConfigProps.d.ts.map +1 -0
  280. package/lib/typescript/providers/gestures.d.ts +22 -0
  281. package/lib/typescript/providers/gestures.d.ts.map +1 -0
  282. package/lib/typescript/providers/keys.d.ts +16 -0
  283. package/lib/typescript/providers/keys.d.ts.map +1 -0
  284. package/lib/typescript/stores/animations.d.ts +17 -0
  285. package/lib/typescript/stores/animations.d.ts.map +1 -0
  286. package/lib/typescript/stores/bounds.d.ts +21 -0
  287. package/lib/typescript/stores/bounds.d.ts.map +1 -0
  288. package/lib/typescript/stores/gestures.d.ts +21 -0
  289. package/lib/typescript/stores/gestures.d.ts.map +1 -0
  290. package/lib/typescript/stores/navigator-dismiss-state.d.ts +7 -0
  291. package/lib/typescript/stores/navigator-dismiss-state.d.ts.map +1 -0
  292. package/lib/typescript/stores/utils/reset-stores-for-screen.d.ts +6 -0
  293. package/lib/typescript/stores/utils/reset-stores-for-screen.d.ts.map +1 -0
  294. package/lib/typescript/types/animation.d.ts +65 -0
  295. package/lib/typescript/types/animation.d.ts.map +1 -0
  296. package/lib/typescript/types/bounds.d.ts +73 -0
  297. package/lib/typescript/types/bounds.d.ts.map +1 -0
  298. package/lib/typescript/types/core.d.ts +47 -0
  299. package/lib/typescript/types/core.d.ts.map +1 -0
  300. package/lib/typescript/types/gesture.d.ts +28 -0
  301. package/lib/typescript/types/gesture.d.ts.map +1 -0
  302. package/lib/typescript/types/navigator.d.ts +683 -0
  303. package/lib/typescript/types/navigator.d.ts.map +1 -0
  304. package/lib/typescript/types/utils.d.ts +5 -0
  305. package/lib/typescript/types/utils.d.ts.map +1 -0
  306. package/lib/typescript/utils/animation/animate.d.ts +4 -0
  307. package/lib/typescript/utils/animation/animate.d.ts.map +1 -0
  308. package/lib/typescript/utils/animation/run-transition.d.ts +11 -0
  309. package/lib/typescript/utils/animation/run-transition.d.ts.map +1 -0
  310. package/lib/typescript/utils/bounds/_types/builder.d.ts +36 -0
  311. package/lib/typescript/utils/bounds/_types/builder.d.ts.map +1 -0
  312. package/lib/typescript/utils/bounds/_types/geometry.d.ts +16 -0
  313. package/lib/typescript/utils/bounds/_types/geometry.d.ts.map +1 -0
  314. package/lib/typescript/utils/bounds/_types/get-bounds.d.ts +10 -0
  315. package/lib/typescript/utils/bounds/_types/get-bounds.d.ts.map +1 -0
  316. package/lib/typescript/utils/bounds/build-bound-styles.d.ts +4 -0
  317. package/lib/typescript/utils/bounds/build-bound-styles.d.ts.map +1 -0
  318. package/lib/typescript/utils/bounds/constants.d.ts +7 -0
  319. package/lib/typescript/utils/bounds/constants.d.ts.map +1 -0
  320. package/lib/typescript/utils/bounds/flatten-styles.d.ts +2 -0
  321. package/lib/typescript/utils/bounds/flatten-styles.d.ts.map +1 -0
  322. package/lib/typescript/utils/bounds/geometry.d.ts +24 -0
  323. package/lib/typescript/utils/bounds/geometry.d.ts.map +1 -0
  324. package/lib/typescript/utils/bounds/get-bounds.d.ts +4 -0
  325. package/lib/typescript/utils/bounds/get-bounds.d.ts.map +1 -0
  326. package/lib/typescript/utils/bounds/index.d.ts +15 -0
  327. package/lib/typescript/utils/bounds/index.d.ts.map +1 -0
  328. package/lib/typescript/utils/bounds/style-composers.d.ts +40 -0
  329. package/lib/typescript/utils/bounds/style-composers.d.ts.map +1 -0
  330. package/lib/typescript/utils/gesture/apply-gesture-activation-criteria.d.ts +17 -0
  331. package/lib/typescript/utils/gesture/apply-gesture-activation-criteria.d.ts.map +1 -0
  332. package/lib/typescript/utils/gesture/map-gesture-to-progress.d.ts +5 -0
  333. package/lib/typescript/utils/gesture/map-gesture-to-progress.d.ts.map +1 -0
  334. package/lib/typescript/utils/gesture/normalize-gesture-translation.d.ts +6 -0
  335. package/lib/typescript/utils/gesture/normalize-gesture-translation.d.ts.map +1 -0
  336. package/lib/typescript/utils/index.d.ts +2 -0
  337. package/lib/typescript/utils/index.d.ts.map +1 -0
  338. package/package.json +67 -54
  339. package/dist/index.d.mts +0 -1513
  340. package/dist/index.d.ts +0 -1513
  341. package/dist/index.js +0 -1283
  342. package/dist/index.js.map +0 -1
  343. package/dist/index.mjs +0 -1279
  344. package/dist/index.mjs.map +0 -1
package/dist/index.js DELETED
@@ -1,1283 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
-
30
- // src/index.ts
31
- var index_exports = {};
32
- __export(index_exports, {
33
- default: () => index_default,
34
- useScreenAnimation: () => useScreenAnimation
35
- });
36
- module.exports = __toCommonJS(index_exports);
37
- var import_react_native5 = require("react-native");
38
-
39
- // src/components/create-transition-aware-component.tsx
40
- var import_react7 = require("react");
41
- var import_react_native3 = require("react-native");
42
- var import_react_native_reanimated8 = __toESM(require("react-native-reanimated"));
43
-
44
- // src/components/transition-gesture-handler-provider.tsx
45
- var import_react4 = require("react");
46
- var import_react_native_gesture_handler3 = require("react-native-gesture-handler");
47
- var import_react_native_reanimated5 = require("react-native-reanimated");
48
-
49
- // src/contexts/gesture.ts
50
- var import_react = require("react");
51
- var import_react_native_gesture_handler = require("react-native-gesture-handler");
52
- var import_react_native_reanimated = require("react-native-reanimated");
53
- var GestureContext = (0, import_react.createContext)(
54
- void 0
55
- );
56
- var useGestureContext = () => {
57
- const context = (0, import_react.useContext)(GestureContext);
58
- const scrollProgressFallback = (0, import_react_native_reanimated.useSharedValue)({
59
- x: 0,
60
- y: 0,
61
- contentHeight: 0,
62
- contentWidth: 0,
63
- layoutHeight: 0,
64
- layoutWidth: 0
65
- });
66
- if (!context) {
67
- return {
68
- panGesture: import_react_native_gesture_handler.Gesture.Pan(),
69
- nativeGesture: import_react_native_gesture_handler.Gesture.Native(),
70
- scrollProgress: scrollProgressFallback,
71
- isPlaceholder: true
72
- };
73
- }
74
- return context;
75
- };
76
-
77
- // src/hooks/use-build-gestures.tsx
78
- var import_native3 = require("@react-navigation/native");
79
- var import_react3 = require("react");
80
- var import_react_native = require("react-native");
81
- var import_react_native_gesture_handler2 = require("react-native-gesture-handler");
82
- var import_react_native_reanimated4 = require("react-native-reanimated");
83
-
84
- // src/configs/specs.ts
85
- var specs_exports = {};
86
- __export(specs_exports, {
87
- DefaultSpec: () => DefaultSpec
88
- });
89
- var DefaultSpec = {
90
- stiffness: 1e3,
91
- damping: 500,
92
- mass: 3,
93
- overshootClamping: true,
94
- restSpeedThreshold: 0.01
95
- };
96
-
97
- // src/animation-engine.ts
98
- var import_react_native_reanimated3 = require("react-native-reanimated");
99
-
100
- // src/store/utils/create-vanilla-store.ts
101
- var import_immer = require("immer");
102
- var import_react2 = require("react");
103
- function createVanillaStore(initialState) {
104
- let state = initialState;
105
- const listeners = /* @__PURE__ */ new Set();
106
- const getState = () => state;
107
- const setState = (updater) => {
108
- const nextState = (0, import_immer.produce)(state, updater);
109
- if (nextState !== state) {
110
- state = nextState;
111
- listeners.forEach((listener) => listener());
112
- }
113
- };
114
- const subscribe = (listener) => {
115
- listeners.add(listener);
116
- return () => listeners.delete(listener);
117
- };
118
- const subscribeWithSelector = (selector, listener) => {
119
- let previousSelectedState = selector(state);
120
- const internalListener = () => {
121
- const currentSelectedState = selector(getState());
122
- if (!Object.is(previousSelectedState, currentSelectedState)) {
123
- listener(currentSelectedState, previousSelectedState);
124
- previousSelectedState = currentSelectedState;
125
- }
126
- };
127
- const unsubscribe = subscribe(internalListener);
128
- listener(previousSelectedState, previousSelectedState);
129
- return unsubscribe;
130
- };
131
- function useStore(selector) {
132
- return (0, import_react2.useSyncExternalStore)(subscribe, () => selector(getState()));
133
- }
134
- Object.assign(useStore, {
135
- setState,
136
- getState,
137
- subscribe,
138
- subscribeWithSelector
139
- });
140
- return useStore;
141
- }
142
-
143
- // src/store/utils/handle-screen-dismiss.tsx
144
- var import_native = require("@react-navigation/native");
145
- var handleScreenDismiss = (screenBeingDismissed, navigation) => {
146
- const { screens } = ScreenStore.use.getState();
147
- const dismissedScreen = screens[screenBeingDismissed];
148
- if (!dismissedScreen) {
149
- navigation.goBack();
150
- return;
151
- }
152
- const childScreens = Object.values(screens).filter(
153
- (screen) => screen.parentNavigatorKey === dismissedScreen.navigatorKey
154
- );
155
- if (childScreens.length > 0) {
156
- ScreenStore.updateScreen(dismissedScreen.id, {
157
- closing: true
158
- });
159
- navigation.dispatch(import_native.StackActions.pop(childScreens.length));
160
- } else {
161
- navigation.goBack();
162
- }
163
- };
164
-
165
- // src/store/utils/remove-screen.tsx
166
- var removeScreen = (key) => {
167
- if (!key) return;
168
- ScreenStore.use.setState(({ screens, screenKeys }) => {
169
- delete screens[key];
170
- const indexToRemove = screenKeys.indexOf(key);
171
- if (indexToRemove > -1) {
172
- screenKeys.splice(indexToRemove, 1);
173
- }
174
- });
175
- };
176
-
177
- // src/store/utils/should-skip-prevent-default.tsx
178
- var shouldSkipPreventDefault = (key, navigatorState) => {
179
- if (!key) return false;
180
- const { screens } = ScreenStore.use.getState();
181
- const currentScreen = screens[key];
182
- const isLastScreenInStack = navigatorState.routes.length === 1 && navigatorState.routes[0].key === key;
183
- const isParentNavigatorExiting = Boolean(
184
- currentScreen?.parentNavigatorKey && Object.values(screens).some(
185
- (screen) => screen.navigatorKey === currentScreen.parentNavigatorKey && screen.closing
186
- )
187
- );
188
- return isLastScreenInStack || isParentNavigatorExiting;
189
- };
190
-
191
- // src/store/utils/update-screen.tsx
192
- var updateScreen = (key, value) => {
193
- if (!key) return;
194
- ScreenStore.use.setState(({ screenKeys, screens }) => {
195
- const currentScreen = screens[key];
196
- if (currentScreen) {
197
- screens[key] = {
198
- ...currentScreen,
199
- ...value
200
- };
201
- } else {
202
- const { name = "", status = 0, closing = false, ...rest } = value;
203
- const newIndex = screenKeys.length;
204
- screens[key] = {
205
- id: key,
206
- index: newIndex,
207
- name,
208
- status,
209
- closing,
210
- ...rest
211
- };
212
- screenKeys.push(key);
213
- }
214
- });
215
- };
216
-
217
- // src/store/index.ts
218
- var useScreenStore = createVanillaStore({
219
- screens: {},
220
- screenKeys: []
221
- });
222
- var ScreenStore = {
223
- use: useScreenStore,
224
- updateScreen,
225
- removeScreen,
226
- handleScreenDismiss,
227
- shouldSkipPreventDefault
228
- };
229
-
230
- // src/utils/animate.ts
231
- var import_react_native_reanimated2 = require("react-native-reanimated");
232
- var animate = (toValue, config, callback) => {
233
- "worklet";
234
- const isSpring = typeof config === "object" && !("duration" in config) && !("easing" in config);
235
- if (!isSpring) {
236
- return (0, import_react_native_reanimated2.withTiming)(toValue, config, callback);
237
- }
238
- return (0, import_react_native_reanimated2.withSpring)(toValue, config, callback);
239
- };
240
-
241
- // src/animation-engine.ts
242
- var animationValues = {
243
- screenProgress: {},
244
- gestureX: {},
245
- gestureY: {},
246
- normalizedGestureX: {},
247
- normalizedGestureY: {},
248
- gestureDragging: {},
249
- isDismissing: {}
250
- };
251
- var triggerAnimation = (screen) => {
252
- "worklet";
253
- const { id, closing, status, transitionSpec, onAnimationFinish } = screen;
254
- const progressValue = animationValues.screenProgress[id];
255
- if (!progressValue && __DEV__) {
256
- console.warn(`Animation values not found for screen: ${id}`);
257
- return;
258
- }
259
- const animationConfig = closing ? transitionSpec?.close : transitionSpec?.open;
260
- const targetValue = status || 0;
261
- progressValue.value = animate(targetValue, animationConfig, (finished) => {
262
- "worklet";
263
- if (finished && onAnimationFinish) {
264
- (0, import_react_native_reanimated3.runOnJS)(onAnimationFinish)(true);
265
- }
266
- });
267
- };
268
- ScreenStore.use.subscribeWithSelector(
269
- (state) => state.screens,
270
- (currScreens, prevScreens) => {
271
- const currKeys = Object.keys(currScreens);
272
- const prevKeys = Object.keys(prevScreens);
273
- const incomingKeys = currKeys.filter((k) => !prevKeys.includes(k));
274
- const removedKeys = prevKeys.filter((k) => !currKeys.includes(k));
275
- const changedKeys = currKeys.filter(
276
- (k) => currScreens[k] !== prevScreens[k]
277
- );
278
- const animatableValues = Object.values(animationValues);
279
- for (const incomingKey of incomingKeys) {
280
- for (const value of animatableValues) {
281
- value[incomingKey] = (0, import_react_native_reanimated3.makeMutable)(0);
282
- }
283
- }
284
- for (const removedKey of removedKeys) {
285
- for (const value of animatableValues) {
286
- (0, import_react_native_reanimated3.cancelAnimation)(value[removedKey]);
287
- delete value[removedKey];
288
- }
289
- }
290
- for (const changedKey of changedKeys) {
291
- const currentScreen = currScreens[changedKey];
292
- if (currentScreen) {
293
- triggerAnimation(currentScreen);
294
- }
295
- }
296
- }
297
- );
298
-
299
- // src/utils/create-config.ts
300
- var createConfig = ({
301
- navigation: reactNavigation,
302
- route,
303
- ...config
304
- }) => {
305
- return {
306
- focus: (e) => {
307
- const parentNavigatorKey = reactNavigation.getParent()?.getState?.()?.key;
308
- const navigatorKey = reactNavigation.getState().key;
309
- ScreenStore.updateScreen(e.target, {
310
- id: e.target,
311
- name: route.name,
312
- status: 1,
313
- closing: false,
314
- navigatorKey,
315
- parentNavigatorKey,
316
- ...config
317
- });
318
- },
319
- beforeRemove: (e) => {
320
- const shouldSkipPreventDefault2 = ScreenStore.shouldSkipPreventDefault(
321
- e.target,
322
- reactNavigation.getState()
323
- );
324
- if (shouldSkipPreventDefault2) {
325
- ScreenStore.removeScreen(e.target);
326
- return;
327
- }
328
- e.preventDefault();
329
- const handleFinish = (finished) => {
330
- if (!finished) return;
331
- if (reactNavigation.canGoBack()) {
332
- reactNavigation.dispatch(e.data?.action);
333
- ScreenStore.removeScreen(e.target);
334
- }
335
- };
336
- ScreenStore.updateScreen(e.target, {
337
- status: 0,
338
- closing: true,
339
- onAnimationFinish: handleFinish
340
- });
341
- }
342
- };
343
- };
344
- var createScreenConfig = (config) => {
345
- return {
346
- listeners: (l) => createConfig({ ...l, ...config || {} })
347
- };
348
- };
349
-
350
- // src/utils/default-screen-options.ts
351
- var defaultScreenOptions = () => ({
352
- presentation: "containedTransparentModal",
353
- headerShown: false,
354
- animation: "none"
355
- });
356
-
357
- // src/utils/noop-interpolator.ts
358
- var noopinterpolator = () => {
359
- "worklet";
360
- return {
361
- contentStyle: {},
362
- overlayStyle: {}
363
- };
364
- };
365
-
366
- // src/utils/gesture/apply-gesture-activation-criteria.ts
367
- var applyGestureActivationCriteria = ({
368
- gestureDirection,
369
- gestureResponseDistance,
370
- panGesture
371
- }) => {
372
- const directions = Array.isArray(gestureDirection) ? gestureDirection : [gestureDirection];
373
- if (directions.includes("bidirectional")) {
374
- return {
375
- activeOffsetX: [
376
- -gestureResponseDistance,
377
- gestureResponseDistance
378
- ],
379
- activeOffsetY: [
380
- -gestureResponseDistance,
381
- gestureResponseDistance
382
- ]
383
- };
384
- }
385
- const allowedDown = directions.includes("vertical");
386
- const allowedUp = directions.includes("vertical-inverted");
387
- const allowedRight = directions.includes("horizontal");
388
- const allowedLeft = directions.includes("horizontal-inverted");
389
- const toleranceX = 15;
390
- const toleranceY = 20;
391
- const dist = gestureResponseDistance;
392
- const result = {};
393
- const hasHorizontal = allowedLeft || allowedRight;
394
- if (hasHorizontal) {
395
- if (allowedLeft && allowedRight) {
396
- result.activeOffsetX = [-dist, dist];
397
- } else if (allowedLeft) {
398
- result.activeOffsetX = -dist;
399
- } else if (allowedRight) {
400
- result.activeOffsetX = dist;
401
- }
402
- if (allowedRight && !allowedLeft) {
403
- result.failOffsetX = -dist;
404
- } else if (allowedLeft && !allowedRight) {
405
- result.failOffsetX = dist;
406
- }
407
- } else {
408
- result.failOffsetX = [-toleranceX, toleranceX];
409
- }
410
- const hasVertical = allowedUp || allowedDown;
411
- if (hasVertical) {
412
- if (allowedUp && allowedDown) {
413
- result.activeOffsetY = [-dist, dist];
414
- } else if (allowedUp) {
415
- result.activeOffsetY = -dist;
416
- } else if (allowedDown) {
417
- result.activeOffsetY = dist;
418
- }
419
- if (allowedDown && !allowedUp) {
420
- result.failOffsetY = -dist;
421
- } else if (allowedUp && !allowedDown) {
422
- result.failOffsetY = dist;
423
- }
424
- } else {
425
- result.failOffsetY = [-toleranceY, toleranceY];
426
- }
427
- if (result?.activeOffsetX) {
428
- panGesture.activeOffsetX(result.activeOffsetX);
429
- }
430
- if (result?.activeOffsetY) {
431
- panGesture.activeOffsetY(result.activeOffsetY);
432
- }
433
- if (result?.failOffsetX) {
434
- panGesture.failOffsetX(result.failOffsetX);
435
- }
436
- if (result?.failOffsetY) {
437
- panGesture.failOffsetY(result.failOffsetY);
438
- }
439
- panGesture.enableTrackpadTwoFingerGesture(true);
440
- return panGesture;
441
- };
442
-
443
- // src/utils/gesture/map-gesture-to-progress.ts
444
- var mapGestureToProgress = (translation, dimension) => {
445
- "worklet";
446
- const rawProgress = translation / dimension;
447
- return Math.max(0, Math.min(1, rawProgress));
448
- };
449
-
450
- // src/hooks/use-key.tsx
451
- var import_native2 = require("@react-navigation/native");
452
- var useKey = () => (0, import_native2.useRoute)().key;
453
-
454
- // src/hooks/use-build-gestures.tsx
455
- var GESTURE_VELOCITY_IMPACT = 0.3;
456
- var DEFAULT_GESTURE_RESPONSE_DISTANCE = 50;
457
- var DEFAULT_GESTURE_DIRECTION = "horizontal";
458
- var DEFAULT_GESTURE_ENABLED = false;
459
- var useBuildGestures = ({
460
- scrollProgress
461
- }) => {
462
- const key = useKey();
463
- const dimensions = (0, import_react_native.useWindowDimensions)();
464
- const navigation = (0, import_native3.useNavigation)();
465
- const currentScreen = ScreenStore.use(
466
- (0, import_react3.useCallback)((state) => state.screens[key], [key])
467
- );
468
- const handleDismiss = (0, import_react3.useCallback)(
469
- (screenBeingDismissed) => {
470
- ScreenStore.handleScreenDismiss(screenBeingDismissed, navigation);
471
- },
472
- [navigation]
473
- );
474
- const initialTouch = (0, import_react_native_reanimated4.useSharedValue)({
475
- x: 0,
476
- y: 0
477
- });
478
- const translateX = animationValues.gestureX[key];
479
- const translateY = animationValues.gestureY[key];
480
- const normalizedGestureX = animationValues.normalizedGestureX[key];
481
- const normalizedGestureY = animationValues.normalizedGestureY[key];
482
- const isDragging = animationValues.gestureDragging[key];
483
- const isDismissing = animationValues.isDismissing[key];
484
- const progress = animationValues.screenProgress[key] || 0;
485
- const {
486
- gestureDirection = DEFAULT_GESTURE_DIRECTION,
487
- gestureEnabled = DEFAULT_GESTURE_ENABLED,
488
- transitionSpec = {
489
- open: DefaultSpec,
490
- close: DefaultSpec
491
- },
492
- gestureVelocityImpact = GESTURE_VELOCITY_IMPACT,
493
- gestureResponseDistance = DEFAULT_GESTURE_RESPONSE_DISTANCE
494
- } = currentScreen ?? {};
495
- const directions = Array.isArray(gestureDirection) ? gestureDirection : [gestureDirection];
496
- const nativeGesture = import_react_native_gesture_handler2.Gesture.Native();
497
- const onTouchesDown = (0, import_react3.useCallback)(
498
- (e) => {
499
- "worklet";
500
- const firstTouch = e.changedTouches[0];
501
- initialTouch.value = { x: firstTouch.x, y: firstTouch.y };
502
- },
503
- [initialTouch]
504
- );
505
- const onTouchesMove = (0, import_react3.useCallback)(
506
- (e, manager) => {
507
- "worklet";
508
- const touch = e.changedTouches[0];
509
- const deltaX = touch.x - initialTouch.value.x;
510
- const deltaY = touch.y - initialTouch.value.y;
511
- const isVerticalSwipe = Math.abs(deltaY) > Math.abs(deltaX);
512
- const isHorizontalSwipe = Math.abs(deltaX) > Math.abs(deltaY);
513
- const isSwipingDown = isVerticalSwipe && deltaY > 0;
514
- const isSwipingUp = isVerticalSwipe && deltaY < 0;
515
- const isSwipingRight = isHorizontalSwipe && deltaX > 0;
516
- const isSwipingLeft = isHorizontalSwipe && deltaX < 0;
517
- const minMovement = 5;
518
- const hasEnoughMovement = Math.abs(deltaX) > minMovement || Math.abs(deltaY) > minMovement;
519
- if (!hasEnoughMovement) return;
520
- if (isDragging.value) {
521
- manager.activate();
522
- return;
523
- }
524
- let shouldActivate = false;
525
- for (const direction of directions) {
526
- switch (direction) {
527
- case "vertical":
528
- if (isSwipingDown) {
529
- shouldActivate = scrollProgress.value.y <= 0;
530
- }
531
- break;
532
- case "vertical-inverted":
533
- if (isSwipingUp) {
534
- const maxScrollableY = scrollProgress.value.contentHeight - scrollProgress.value.layoutHeight;
535
- shouldActivate = scrollProgress.value.y >= maxScrollableY;
536
- }
537
- break;
538
- case "horizontal":
539
- if (isSwipingRight) {
540
- shouldActivate = scrollProgress.value.x <= 0;
541
- }
542
- break;
543
- case "horizontal-inverted":
544
- if (isSwipingLeft) {
545
- const maxProgress = scrollProgress.value.contentWidth - scrollProgress.value.layoutWidth;
546
- shouldActivate = scrollProgress.value.x >= maxProgress;
547
- }
548
- break;
549
- case "bidirectional":
550
- if (isSwipingDown) {
551
- shouldActivate = scrollProgress.value.y <= 0;
552
- } else if (isSwipingUp) {
553
- shouldActivate = scrollProgress.value.y <= 0;
554
- } else if (isSwipingRight || isSwipingLeft) {
555
- shouldActivate = true;
556
- }
557
- break;
558
- }
559
- if (shouldActivate) break;
560
- }
561
- if ((shouldActivate || isDragging.value) && !isDismissing.value) {
562
- manager.activate();
563
- } else {
564
- manager.fail();
565
- }
566
- },
567
- [initialTouch, directions, scrollProgress, isDragging, isDismissing]
568
- );
569
- const onStart = (0, import_react3.useCallback)(() => {
570
- "worklet";
571
- isDragging.value = 1;
572
- isDismissing.value = 0;
573
- }, [isDragging, isDismissing]);
574
- const onUpdate = (0, import_react3.useCallback)(
575
- (event) => {
576
- "worklet";
577
- let gestureProgress = 0;
578
- translateX.value = event.translationX;
579
- translateY.value = event.translationY;
580
- normalizedGestureX.value = (0, import_react_native_reanimated4.interpolate)(
581
- event.translationX,
582
- [-dimensions.width, dimensions.width],
583
- [-1, 1],
584
- "clamp"
585
- );
586
- normalizedGestureY.value = (0, import_react_native_reanimated4.interpolate)(
587
- event.translationY,
588
- [-dimensions.height, dimensions.height],
589
- [-1, 1],
590
- "clamp"
591
- );
592
- if (directions.includes("bidirectional")) {
593
- const distance = Math.sqrt(
594
- event.translationX ** 2 + event.translationY ** 2
595
- );
596
- gestureProgress = mapGestureToProgress(distance, dimensions.width);
597
- } else {
598
- let maxProgress = 0;
599
- const allowedDown = directions.includes("vertical");
600
- const allowedUp = directions.includes("vertical-inverted");
601
- const allowedRight = directions.includes("horizontal");
602
- const allowedLeft = directions.includes("horizontal-inverted");
603
- if (allowedRight && event.translationX > 0) {
604
- const currentProgress = mapGestureToProgress(
605
- event.translationX,
606
- dimensions.width
607
- );
608
- maxProgress = Math.max(maxProgress, currentProgress);
609
- }
610
- if (allowedLeft && event.translationX < 0) {
611
- const currentProgress = mapGestureToProgress(
612
- -event.translationX,
613
- dimensions.width
614
- );
615
- maxProgress = Math.max(maxProgress, currentProgress);
616
- }
617
- if (allowedDown && event.translationY > 0) {
618
- const currentProgress = mapGestureToProgress(
619
- event.translationY,
620
- dimensions.height
621
- );
622
- maxProgress = Math.max(maxProgress, currentProgress);
623
- }
624
- if (allowedUp && event.translationY < 0) {
625
- const currentProgress = mapGestureToProgress(
626
- -event.translationY,
627
- dimensions.height
628
- );
629
- maxProgress = Math.max(maxProgress, currentProgress);
630
- }
631
- gestureProgress = maxProgress;
632
- }
633
- progress.value = 1 - gestureProgress;
634
- },
635
- [
636
- dimensions,
637
- directions,
638
- translateX,
639
- translateY,
640
- normalizedGestureX,
641
- normalizedGestureY,
642
- progress
643
- ]
644
- );
645
- const onEnd = (0, import_react3.useCallback)(
646
- (event) => {
647
- "worklet";
648
- const { translationX, translationY, velocityX, velocityY } = event;
649
- const dismissThreshold = 0.5;
650
- if (directions.includes("bidirectional")) {
651
- const finalX = Math.abs(
652
- translationX + velocityX * gestureVelocityImpact
653
- );
654
- const finalY = Math.abs(
655
- translationY + velocityY * gestureVelocityImpact
656
- );
657
- const finalDistance = Math.sqrt(finalX ** 2 + finalY ** 2);
658
- isDismissing.value = Number(
659
- finalDistance > dimensions.width * dismissThreshold
660
- );
661
- } else {
662
- const allowedDown = directions.includes("vertical");
663
- const allowedUp = directions.includes("vertical-inverted");
664
- const allowedRight = directions.includes("horizontal");
665
- const allowedLeft = directions.includes("horizontal-inverted");
666
- if (allowedRight && translationX + velocityX * gestureVelocityImpact > dimensions.width * dismissThreshold) {
667
- isDismissing.value = 1;
668
- } else if (allowedLeft && -translationX - velocityX * gestureVelocityImpact > dimensions.width * dismissThreshold) {
669
- isDismissing.value = 1;
670
- } else if (allowedDown && translationY + velocityY * gestureVelocityImpact > dimensions.height * dismissThreshold) {
671
- isDismissing.value = 1;
672
- } else if (allowedUp && -translationY - velocityY * gestureVelocityImpact > dimensions.height * dismissThreshold) {
673
- isDismissing.value = 1;
674
- }
675
- }
676
- const finalProgress = isDismissing.value ? 0 : 1;
677
- const spec = isDismissing.value ? transitionSpec?.close : transitionSpec?.open;
678
- const onFinish = isDismissing.value ? (isFinished) => {
679
- "worklet";
680
- if (isFinished) (0, import_react_native_reanimated4.runOnJS)(handleDismiss)(currentScreen?.id);
681
- } : void 0;
682
- progress.value = animate(finalProgress, spec, onFinish);
683
- translateX.value = animate(0, spec);
684
- translateY.value = animate(0, spec);
685
- normalizedGestureX.value = animate(0, spec);
686
- normalizedGestureY.value = animate(0, spec);
687
- isDragging.value = 0;
688
- },
689
- [
690
- dimensions,
691
- directions,
692
- translateX,
693
- translateY,
694
- normalizedGestureX,
695
- normalizedGestureY,
696
- progress,
697
- handleDismiss,
698
- currentScreen?.id,
699
- transitionSpec?.close,
700
- transitionSpec?.open,
701
- gestureVelocityImpact,
702
- isDragging,
703
- isDismissing
704
- ]
705
- );
706
- const panGesture = (0, import_react3.useMemo)(
707
- () => import_react_native_gesture_handler2.Gesture.Pan().enabled(gestureEnabled).manualActivation(true).onTouchesDown(onTouchesDown).onTouchesMove(onTouchesMove).onStart(onStart).onUpdate(onUpdate).onEnd(onEnd).blocksExternalGesture(nativeGesture),
708
- [
709
- gestureEnabled,
710
- nativeGesture,
711
- onTouchesDown,
712
- onTouchesMove,
713
- onStart,
714
- onUpdate,
715
- onEnd
716
- ]
717
- );
718
- applyGestureActivationCriteria({
719
- gestureDirection,
720
- gestureResponseDistance,
721
- panGesture
722
- });
723
- return { panGesture, nativeGesture };
724
- };
725
-
726
- // src/components/transition-gesture-handler-provider.tsx
727
- var import_jsx_runtime = require("react/jsx-runtime");
728
- var TransitionGestureHandlerProvider = ({
729
- children
730
- }) => {
731
- const scrollProgress = (0, import_react_native_reanimated5.useSharedValue)({
732
- x: 0,
733
- y: 0,
734
- contentHeight: 0,
735
- contentWidth: 0,
736
- layoutHeight: 0,
737
- layoutWidth: 0
738
- });
739
- const { panGesture, nativeGesture } = useBuildGestures({
740
- scrollProgress
741
- });
742
- const value = (0, import_react4.useMemo)(() => {
743
- return {
744
- panGesture,
745
- scrollProgress,
746
- nativeGesture
747
- };
748
- }, [panGesture, scrollProgress, nativeGesture]);
749
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(GestureContext.Provider, { value, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_native_gesture_handler3.GestureDetector, { gesture: panGesture, children }) });
750
- };
751
-
752
- // src/hooks/use-screen-animation.tsx
753
- var import_react5 = require("react");
754
- var import_react_native2 = require("react-native");
755
- var import_react_native_reanimated6 = require("react-native-reanimated");
756
- var import_react_native_safe_area_context = require("react-native-safe-area-context");
757
- var useAnimationBuilder = () => {
758
- const key = useKey();
759
- const dimensions = (0, import_react_native2.useWindowDimensions)();
760
- const insets = (0, import_react_native_safe_area_context.useSafeAreaInsets)();
761
- const progressFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
762
- const gestureDraggingFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
763
- const gestureXFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
764
- const gestureYFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
765
- const normalizedGestureXFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
766
- const normalizedGestureYFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
767
- const isDismissingFallback = (0, import_react_native_reanimated6.useSharedValue)(0);
768
- const currentScreen = ScreenStore.use(
769
- (0, import_react5.useCallback)((state) => state.screens[key], [key])
770
- );
771
- const actualNextScreen = ScreenStore.use(
772
- (0, import_react5.useCallback)(
773
- (state) => {
774
- const current = state.screens[key];
775
- if (!current) return void 0;
776
- const nextKey = state.screenKeys[current.index + 1];
777
- const nextScreen = nextKey ? state.screens[nextKey] : void 0;
778
- const shouldUseNext = nextScreen?.navigatorKey === current?.navigatorKey;
779
- return shouldUseNext ? nextScreen : void 0;
780
- },
781
- [key]
782
- )
783
- );
784
- const getAnimationValuesForScreen = (0, import_react5.useCallback)(
785
- (screenId) => ({
786
- progress: animationValues.screenProgress[screenId] || progressFallback,
787
- gesture: {
788
- isDragging: animationValues.gestureDragging[screenId] || gestureDraggingFallback,
789
- x: animationValues.gestureX[screenId] || gestureXFallback,
790
- y: animationValues.gestureY[screenId] || gestureYFallback,
791
- normalizedX: animationValues.normalizedGestureX[screenId] || normalizedGestureXFallback,
792
- normalizedY: animationValues.normalizedGestureY[screenId] || normalizedGestureYFallback,
793
- isDismissing: animationValues.isDismissing[screenId] || isDismissingFallback
794
- }
795
- }),
796
- [
797
- progressFallback,
798
- gestureDraggingFallback,
799
- gestureXFallback,
800
- gestureYFallback,
801
- normalizedGestureXFallback,
802
- normalizedGestureYFallback,
803
- isDismissingFallback
804
- ]
805
- );
806
- return (0, import_react5.useMemo)(() => {
807
- return {
808
- current: getAnimationValuesForScreen(key),
809
- next: actualNextScreen ? getAnimationValuesForScreen(actualNextScreen.id) : void 0,
810
- layouts: { screen: dimensions },
811
- insets,
812
- closing: currentScreen?.closing || false,
813
- screenStyleInterpolator: actualNextScreen?.screenStyleInterpolator || currentScreen?.screenStyleInterpolator || noopinterpolator
814
- };
815
- }, [
816
- key,
817
- currentScreen,
818
- actualNextScreen,
819
- dimensions,
820
- insets,
821
- getAnimationValuesForScreen
822
- ]);
823
- };
824
- var _useScreenAnimation = () => {
825
- return useAnimationBuilder();
826
- };
827
- var useScreenAnimation = () => {
828
- const { screenStyleInterpolator: _, ...animationProps } = useAnimationBuilder();
829
- return animationProps;
830
- };
831
-
832
- // src/hooks/use-skip-first-frame.tsx
833
- var import_react6 = require("react");
834
- var import_react_native_reanimated7 = require("react-native-reanimated");
835
- var useSkipFirstFrame = () => {
836
- const opacity = (0, import_react_native_reanimated7.useSharedValue)(0);
837
- const style = (0, import_react_native_reanimated7.useAnimatedStyle)(() => {
838
- "worklet";
839
- return {
840
- opacity: opacity.value
841
- };
842
- });
843
- (0, import_react6.useEffect)(() => {
844
- requestAnimationFrame(() => {
845
- opacity.value = 1;
846
- });
847
- }, [opacity]);
848
- return { style };
849
- };
850
-
851
- // src/components/create-transition-aware-component.tsx
852
- var import_jsx_runtime2 = require("react/jsx-runtime");
853
- function createTransitionAwareComponent(Wrapped) {
854
- const AnimatedComponent = import_react_native_reanimated8.default.createAnimatedComponent(Wrapped);
855
- const Inner = (0, import_react7.forwardRef)(
856
- (props, ref) => {
857
- const { children, style, ...rest } = props;
858
- const { screenStyleInterpolator, ...screenInterpolationProps } = _useScreenAnimation();
859
- const screenContainerStyle = (0, import_react_native_reanimated8.useAnimatedStyle)(() => {
860
- "worklet";
861
- return screenStyleInterpolator(screenInterpolationProps).contentStyle || {};
862
- });
863
- const overlayStyle = (0, import_react_native_reanimated8.useAnimatedStyle)(() => {
864
- "worklet";
865
- return screenStyleInterpolator(screenInterpolationProps).overlayStyle || {};
866
- });
867
- const { style: flickerFixStyle } = useSkipFirstFrame();
868
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(TransitionGestureHandlerProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react_native_reanimated8.default.View, { style: [{ flex: 1 }, flickerFixStyle], children: [
869
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
870
- import_react_native_reanimated8.default.View,
871
- {
872
- style: [import_react_native3.StyleSheet.absoluteFillObject, overlayStyle],
873
- pointerEvents: "none"
874
- }
875
- ),
876
- /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
877
- AnimatedComponent,
878
- {
879
- ...rest,
880
- ref,
881
- style: [
882
- { flex: 1, position: "relative" },
883
- screenContainerStyle,
884
- style
885
- ],
886
- children
887
- }
888
- )
889
- ] }) });
890
- }
891
- );
892
- Inner.displayName = `Transition(${Wrapped.displayName || Wrapped.name || "Component"})`;
893
- return (0, import_react7.memo)(Inner);
894
- }
895
-
896
- // src/components/create-transition-aware-scrollable.tsx
897
- var import_react9 = require("react");
898
- var import_react_native4 = require("react-native");
899
- var import_react_native_gesture_handler4 = require("react-native-gesture-handler");
900
- var import_react_native_reanimated10 = __toESM(require("react-native-reanimated"));
901
-
902
- // src/hooks/use-scroll-progress.tsx
903
- var import_react8 = require("react");
904
- var import_react_native_reanimated9 = require("react-native-reanimated");
905
- var useScrollProgress = (props) => {
906
- const { scrollProgress } = useGestureContext();
907
- const scrollHandler = (0, import_react_native_reanimated9.useAnimatedScrollHandler)({
908
- onScroll: (event) => {
909
- scrollProgress.modify((value) => {
910
- "worklet";
911
- return {
912
- ...value,
913
- x: event.contentOffset.x,
914
- y: event.contentOffset.y,
915
- layoutHeight: event.layoutMeasurement.height,
916
- layoutWidth: event.layoutMeasurement.width,
917
- contentHeight: event.contentSize.height,
918
- contentWidth: event.contentSize.width
919
- };
920
- });
921
- }
922
- });
923
- const onContentSizeChange = (0, import_react8.useCallback)(
924
- (width, height) => {
925
- props.onContentSizeChange?.(width, height);
926
- scrollProgress.modify((value) => {
927
- "worklet";
928
- return {
929
- ...value,
930
- contentWidth: width,
931
- contentHeight: height
932
- };
933
- });
934
- },
935
- [scrollProgress, props.onContentSizeChange]
936
- );
937
- return {
938
- scrollHandler,
939
- onContentSizeChange
940
- };
941
- };
942
-
943
- // src/components/create-transition-aware-scrollable.tsx
944
- var import_jsx_runtime3 = require("react/jsx-runtime");
945
- function createTransitionAwareScrollable(ScrollableComponent) {
946
- const WithTransitionAwareness = createTransitionAwareComponent(import_react_native4.View);
947
- const AnimatedScrollableComponent = import_react_native_reanimated10.default.createAnimatedComponent(ScrollableComponent);
948
- const WithScrollAwareness = (0, import_react9.forwardRef)((props, ref) => {
949
- const { nativeGesture } = useGestureContext();
950
- const { scrollHandler, onContentSizeChange } = useScrollProgress({
951
- onScroll: props.onScroll,
952
- onContentSizeChange: props.onContentSizeChange
953
- });
954
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_react_native_gesture_handler4.GestureDetector, { gesture: nativeGesture, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
955
- AnimatedScrollableComponent,
956
- {
957
- ...props,
958
- ref,
959
- onScroll: scrollHandler,
960
- onContentSizeChange,
961
- scrollEventThrottle: props.scrollEventThrottle || 16
962
- }
963
- ) });
964
- });
965
- const Wrapped = (0, import_react9.forwardRef)((props, ref) => {
966
- const { isPlaceholder } = useGestureContext();
967
- if (isPlaceholder) {
968
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WithTransitionAwareness, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WithScrollAwareness, { ...props, ref }) });
969
- }
970
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(WithScrollAwareness, { ...props, ref });
971
- });
972
- WithScrollAwareness.displayName = `Transition(${ScrollableComponent.displayName || ScrollableComponent.name || "Component"})`;
973
- return (0, import_react9.memo)(Wrapped);
974
- }
975
-
976
- // src/configs/presets.ts
977
- var presets_exports = {};
978
- __export(presets_exports, {
979
- DraggableCard: () => DraggableCard,
980
- ElasticCard: () => ElasticCard,
981
- SlideFromBottom: () => SlideFromBottom,
982
- SlideFromTop: () => SlideFromTop,
983
- ZoomIn: () => ZoomIn
984
- });
985
- var import_react_native_reanimated11 = require("react-native-reanimated");
986
- var SlideFromTop = (config = {}) => {
987
- return {
988
- gestureEnabled: true,
989
- gestureDirection: "vertical-inverted",
990
- screenStyleInterpolator: ({
991
- current,
992
- next,
993
- layouts: {
994
- screen: { height }
995
- }
996
- }) => {
997
- "worklet";
998
- const progress = current.progress.value + (next?.progress.value ?? 0);
999
- const y = (0, import_react_native_reanimated11.interpolate)(progress, [0, 1, 2], [-height, 0, height]);
1000
- return {
1001
- contentStyle: {
1002
- transform: [{ translateY: y }]
1003
- }
1004
- };
1005
- },
1006
- transitionSpec: {
1007
- open: DefaultSpec,
1008
- close: DefaultSpec
1009
- },
1010
- ...config
1011
- };
1012
- };
1013
- var ZoomIn = (config = {}) => {
1014
- return {
1015
- gestureEnabled: false,
1016
- screenStyleInterpolator: ({ current, next }) => {
1017
- "worklet";
1018
- const progress = current.progress.value + (next?.progress.value ?? 0);
1019
- const scale = (0, import_react_native_reanimated11.interpolate)(
1020
- progress,
1021
- [0, 1, 2],
1022
- [0.5, 1, 0.5],
1023
- import_react_native_reanimated11.Extrapolation.CLAMP
1024
- );
1025
- const opacity = (0, import_react_native_reanimated11.interpolate)(
1026
- progress,
1027
- [0, 1, 2],
1028
- [0, 1, 0],
1029
- import_react_native_reanimated11.Extrapolation.CLAMP
1030
- );
1031
- return {
1032
- contentStyle: {
1033
- transform: [{ scale }],
1034
- opacity
1035
- }
1036
- };
1037
- },
1038
- transitionSpec: {
1039
- open: DefaultSpec,
1040
- close: DefaultSpec
1041
- },
1042
- ...config
1043
- };
1044
- };
1045
- var SlideFromBottom = (config = {}) => {
1046
- return {
1047
- gestureEnabled: true,
1048
- gestureDirection: "vertical",
1049
- screenStyleInterpolator: ({
1050
- current,
1051
- next,
1052
- layouts: {
1053
- screen: { height }
1054
- }
1055
- }) => {
1056
- "worklet";
1057
- const progress = current.progress.value + (next?.progress.value ?? 0);
1058
- const y = (0, import_react_native_reanimated11.interpolate)(progress, [0, 1, 2], [height, 0, -height]);
1059
- return {
1060
- contentStyle: {
1061
- transform: [{ translateY: y }]
1062
- }
1063
- };
1064
- },
1065
- transitionSpec: {
1066
- open: DefaultSpec,
1067
- close: DefaultSpec
1068
- },
1069
- ...config
1070
- };
1071
- };
1072
- var DraggableCard = (config = {}) => {
1073
- return {
1074
- gestureEnabled: true,
1075
- gestureDirection: ["horizontal", "vertical"],
1076
- screenStyleInterpolator: ({ current, next, layouts: { screen } }) => {
1077
- "worklet";
1078
- const progress = current.progress.value + (next?.progress.value ?? 0);
1079
- const scale = (0, import_react_native_reanimated11.interpolate)(progress, [0, 1, 2], [0, 1, 0.75]);
1080
- const translateY = (0, import_react_native_reanimated11.interpolate)(
1081
- current.gesture.normalizedY.value,
1082
- [-1, 1],
1083
- [-screen.height * 0.5, screen.height * 0.5],
1084
- "clamp"
1085
- );
1086
- const translateX = (0, import_react_native_reanimated11.interpolate)(
1087
- current.gesture.normalizedX.value,
1088
- [-1, 1],
1089
- [-screen.width * 0.5, screen.width * 0.5],
1090
- "clamp"
1091
- );
1092
- return {
1093
- contentStyle: {
1094
- transform: [{ scale }, { translateY }, { translateX }]
1095
- }
1096
- };
1097
- },
1098
- transitionSpec: {
1099
- open: DefaultSpec,
1100
- close: DefaultSpec
1101
- },
1102
- ...config
1103
- };
1104
- };
1105
- var ElasticCard = (config = { elasticFactor: 0.5 }) => {
1106
- return {
1107
- gestureEnabled: true,
1108
- gestureDirection: "bidirectional",
1109
- screenStyleInterpolator: ({ current, next, layouts: { screen } }) => {
1110
- "worklet";
1111
- const progress = current.progress.value + (next?.progress.value ?? 0);
1112
- const scale = (0, import_react_native_reanimated11.interpolate)(progress, [0, 1, 2], [0, 1, 0.8]);
1113
- const maxElasticityX = screen.width * (config.elasticFactor ?? 0.5);
1114
- const maxElasticityY = screen.height * (config.elasticFactor ?? 0.5);
1115
- const translateX = (0, import_react_native_reanimated11.interpolate)(
1116
- current.gesture.normalizedX.value,
1117
- [-1, 0, 1],
1118
- [-maxElasticityX, 0, maxElasticityX],
1119
- "clamp"
1120
- );
1121
- const translateY = (0, import_react_native_reanimated11.interpolate)(
1122
- current.gesture.normalizedY.value,
1123
- [-1, 0, 1],
1124
- [-maxElasticityY, 0, maxElasticityY],
1125
- "clamp"
1126
- );
1127
- const overlayColor = (0, import_react_native_reanimated11.interpolateColor)(
1128
- current.progress.value,
1129
- [0, 1],
1130
- ["rgba(0,0,0,0)", "rgba(0,0,0,0.5)"]
1131
- );
1132
- return {
1133
- contentStyle: {
1134
- transform: [{ scale }, { translateX }, { translateY }]
1135
- },
1136
- overlayStyle: {
1137
- backgroundColor: !next ? overlayColor : "rgba(0,0,0,0)"
1138
- }
1139
- };
1140
- },
1141
- ...config
1142
- };
1143
- };
1144
-
1145
- // src/navigator/create-transitionable-stack-navigator.tsx
1146
- var import_native4 = require("@react-navigation/native");
1147
- var import_native_stack = require("@react-navigation/native-stack");
1148
- var import_react10 = __toESM(require("react"));
1149
- var import_jsx_runtime4 = require("react/jsx-runtime");
1150
- var DEFAULT_SCREEN_OPTIONS = {
1151
- presentation: "containedTransparentModal",
1152
- headerShown: false,
1153
- animation: "none"
1154
- /**
1155
- * EXPERIMENTAL:
1156
- When handling forward navigation, this would be the prop we would use to prevent the underlying screen from not being interactable.
1157
- - pointerEvents: "box-none",
1158
- */
1159
- };
1160
- var CONFLICTING_SCREEN_OPTIONS = {
1161
- gestureEnabled: false,
1162
- gestureDirection: "horizontal"
1163
- };
1164
- function TransitionableStackNavigator({
1165
- id,
1166
- initialRouteName,
1167
- children,
1168
- layout,
1169
- screenListeners,
1170
- screenOptions,
1171
- screenLayout,
1172
- UNSTABLE_router,
1173
- ...rest
1174
- }) {
1175
- const screenProcessor = (0, import_react10.useMemo)(() => {
1176
- const childOptions = /* @__PURE__ */ new Map();
1177
- const modifiedChildren = import_react10.Children.toArray(children).filter(import_react10.isValidElement).map((child) => {
1178
- const resolvedOptions = typeof child.props.options === "function" ? child.props.options({
1179
- route: child.props.route,
1180
- navigation: child.props.navigation
1181
- }) : child.props.options || {};
1182
- childOptions.set(child.props.name, resolvedOptions);
1183
- const skipDefaultScreenOptions = resolvedOptions?.skipDefaultScreenOptions === true;
1184
- return import_react10.default.cloneElement(child, {
1185
- ...child.props,
1186
- options: {
1187
- ...skipDefaultScreenOptions ? {} : DEFAULT_SCREEN_OPTIONS,
1188
- ...resolvedOptions,
1189
- ...CONFLICTING_SCREEN_OPTIONS
1190
- }
1191
- });
1192
- });
1193
- return {
1194
- children: modifiedChildren,
1195
- childOptions
1196
- };
1197
- }, [children]);
1198
- const screenListenersWithTransitions = (0, import_react10.useMemo)(() => {
1199
- return (props) => {
1200
- const resolvedNavigatorConfig = typeof screenOptions === "function" ? screenOptions({
1201
- navigation: props.navigation,
1202
- route: props.route,
1203
- theme: {}
1204
- }) : screenOptions;
1205
- const resolvedChildConfig = screenProcessor.childOptions.get(props.route.name);
1206
- const mergedConfig = {
1207
- ...resolvedNavigatorConfig,
1208
- ...resolvedChildConfig
1209
- //Child should override navigator config
1210
- };
1211
- const transitionListeners = createConfig({
1212
- navigation: props.navigation,
1213
- route: props.route,
1214
- screenStyleInterpolator: mergedConfig.screenStyleInterpolator,
1215
- transitionSpec: mergedConfig.transitionSpec,
1216
- gestureEnabled: mergedConfig.gestureEnabled,
1217
- gestureDirection: mergedConfig.gestureDirection,
1218
- gestureResponseDistance: typeof mergedConfig.gestureResponseDistance === "number" ? mergedConfig.gestureResponseDistance : void 0,
1219
- gestureVelocityImpact: mergedConfig.gestureVelocityImpact
1220
- });
1221
- const existingListeners = typeof screenListeners === "function" ? screenListeners(props) : screenListeners || {};
1222
- return {
1223
- ...existingListeners,
1224
- ...transitionListeners
1225
- };
1226
- };
1227
- }, [screenListeners, screenOptions, screenProcessor.childOptions]);
1228
- const buildingBlocks = {
1229
- id,
1230
- initialRouteName,
1231
- children: screenProcessor.children,
1232
- layout,
1233
- screenListeners: screenListenersWithTransitions,
1234
- screenOptions,
1235
- screenLayout,
1236
- UNSTABLE_router
1237
- };
1238
- const { state, describe, descriptors, navigation, NavigationContent } = (0, import_native4.useNavigationBuilder)(import_native4.StackRouter, buildingBlocks);
1239
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(NavigationContent, { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_native_stack.NativeStackView, { ...rest, state, navigation, descriptors, describe }) });
1240
- }
1241
- function createTransitionableStackNavigator() {
1242
- return (0, import_native4.createNavigatorFactory)(TransitionableStackNavigator)();
1243
- }
1244
-
1245
- // src/index.ts
1246
- var index_default = {
1247
- View: createTransitionAwareComponent(import_react_native5.View),
1248
- Pressable: createTransitionAwareComponent(import_react_native5.Pressable),
1249
- ScrollView: createTransitionAwareScrollable(import_react_native5.ScrollView),
1250
- FlatList: createTransitionAwareScrollable(import_react_native5.FlatList),
1251
- defaultScreenOptions,
1252
- presets: presets_exports,
1253
- specs: specs_exports,
1254
- /**
1255
- * Create a transition aware component
1256
- */
1257
- createTransitionAwareComponent,
1258
- /**
1259
- * Create a transition aware scrollable component
1260
- */
1261
- createTransitionAwareScrollable,
1262
- /**
1263
- * Create a transitionable native stack navigator.
1264
- *
1265
- */
1266
- createTransitionableStackNavigator,
1267
- /**
1268
- * @deprecated Use {@link createTransitionableStackNavigator} instead.
1269
- */
1270
- createConfig,
1271
- /**
1272
- * @deprecated Use {@link createTransitionableStackNavigator} instead.
1273
- */
1274
- createScreenConfig
1275
- /**
1276
- * @deprecated Use {@link createTransitionableStackNavigator} instead.
1277
- */
1278
- };
1279
- // Annotate the CommonJS export names for ESM import in node:
1280
- 0 && (module.exports = {
1281
- useScreenAnimation
1282
- });
1283
- //# sourceMappingURL=index.js.map