react-native-screen-transitions 2.0.6 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -77
  3. package/lib/commonjs/components/{bounds-activator.js → bound-capture.js} +4 -4
  4. package/lib/commonjs/components/bound-capture.js.map +1 -0
  5. package/lib/commonjs/components/controllers/screen-lifecycle.js +18 -4
  6. package/lib/commonjs/components/controllers/screen-lifecycle.js.map +1 -1
  7. package/lib/commonjs/components/create-transition-aware-component.js +23 -12
  8. package/lib/commonjs/components/create-transition-aware-component.js.map +1 -1
  9. package/lib/commonjs/components/integrations/masked-view.js +52 -0
  10. package/lib/commonjs/components/integrations/masked-view.js.map +1 -0
  11. package/lib/commonjs/components/root-transition-aware.js +6 -15
  12. package/lib/commonjs/components/root-transition-aware.js.map +1 -1
  13. package/lib/commonjs/configs/index.js +4 -1
  14. package/lib/commonjs/configs/index.js.map +1 -1
  15. package/lib/commonjs/configs/presets.js +378 -7
  16. package/lib/commonjs/configs/presets.js.map +1 -1
  17. package/lib/commonjs/configs/specs.js +2 -1
  18. package/lib/commonjs/configs/specs.js.map +1 -1
  19. package/lib/commonjs/hooks/animation/use-associated-style.js +7 -10
  20. package/lib/commonjs/hooks/animation/use-associated-style.js.map +1 -1
  21. package/lib/commonjs/hooks/animation/use-screen-animation.js +37 -37
  22. package/lib/commonjs/hooks/animation/use-screen-animation.js.map +1 -1
  23. package/lib/commonjs/hooks/bounds/use-bound-registry.js +64 -0
  24. package/lib/commonjs/hooks/bounds/use-bound-registry.js.map +1 -0
  25. package/lib/commonjs/hooks/gestures/use-build-gestures.js +156 -152
  26. package/lib/commonjs/hooks/gestures/use-build-gestures.js.map +1 -1
  27. package/lib/commonjs/hooks/gestures/use-parent-gesture-registry.js +28 -0
  28. package/lib/commonjs/hooks/gestures/use-parent-gesture-registry.js.map +1 -0
  29. package/lib/commonjs/hooks/gestures/use-scroll-registry.js +146 -0
  30. package/lib/commonjs/hooks/gestures/use-scroll-registry.js.map +1 -0
  31. package/lib/commonjs/index.js +3 -0
  32. package/lib/commonjs/index.js.map +1 -1
  33. package/lib/commonjs/integrations/native-stack/views/NativeStackView.native.js +7 -4
  34. package/lib/commonjs/integrations/native-stack/views/NativeStackView.native.js.map +1 -1
  35. package/lib/commonjs/providers/gestures.js +16 -16
  36. package/lib/commonjs/providers/gestures.js.map +1 -1
  37. package/lib/commonjs/providers/transition-styles.js +44 -0
  38. package/lib/commonjs/providers/transition-styles.js.map +1 -0
  39. package/lib/commonjs/stores/bounds.js +142 -1
  40. package/lib/commonjs/stores/bounds.js.map +1 -1
  41. package/lib/commonjs/stores/utils/reset-stores-for-screen.js +4 -2
  42. package/lib/commonjs/stores/utils/reset-stores-for-screen.js.map +1 -1
  43. package/lib/commonjs/types/gesture.js +11 -0
  44. package/lib/commonjs/types/gesture.js.map +1 -1
  45. package/lib/commonjs/utils/animation/derivations.js +39 -0
  46. package/lib/commonjs/utils/animation/derivations.js.map +1 -0
  47. package/lib/commonjs/utils/animation/run-transition.js +6 -2
  48. package/lib/commonjs/utils/animation/run-transition.js.map +1 -1
  49. package/lib/commonjs/utils/bounds/_utils/flatten-styles.js.map +1 -0
  50. package/lib/commonjs/utils/bounds/_utils/geometry.js +179 -0
  51. package/lib/commonjs/utils/bounds/_utils/geometry.js.map +1 -0
  52. package/lib/commonjs/utils/bounds/{get-bounds.js → _utils/get-bounds.js} +7 -9
  53. package/lib/commonjs/utils/bounds/_utils/get-bounds.js.map +1 -0
  54. package/lib/commonjs/utils/bounds/_utils/is-bounds-equal.js +19 -0
  55. package/lib/commonjs/utils/bounds/_utils/is-bounds-equal.js.map +1 -0
  56. package/lib/commonjs/utils/bounds/_utils/style-composers.js +201 -0
  57. package/lib/commonjs/utils/bounds/_utils/style-composers.js.map +1 -0
  58. package/lib/commonjs/utils/bounds/constants.js +14 -3
  59. package/lib/commonjs/utils/bounds/constants.js.map +1 -1
  60. package/lib/commonjs/utils/bounds/index.js +210 -17
  61. package/lib/commonjs/utils/bounds/index.js.map +1 -1
  62. package/lib/commonjs/utils/gesture/apply-offset-rules.js +233 -0
  63. package/lib/commonjs/utils/gesture/apply-offset-rules.js.map +1 -0
  64. package/lib/commonjs/utils/gesture/check-gesture-activation.js +231 -0
  65. package/lib/commonjs/utils/gesture/check-gesture-activation.js.map +1 -0
  66. package/lib/commonjs/utils/gesture/determine-dismissal.js +98 -0
  67. package/lib/commonjs/utils/gesture/determine-dismissal.js.map +1 -0
  68. package/lib/module/components/{bounds-activator.js → bound-capture.js} +2 -2
  69. package/lib/module/components/bound-capture.js.map +1 -0
  70. package/lib/module/components/controllers/screen-lifecycle.js +18 -4
  71. package/lib/module/components/controllers/screen-lifecycle.js.map +1 -1
  72. package/lib/module/components/create-transition-aware-component.js +23 -12
  73. package/lib/module/components/create-transition-aware-component.js.map +1 -1
  74. package/lib/module/components/integrations/masked-view.js +48 -0
  75. package/lib/module/components/integrations/masked-view.js.map +1 -0
  76. package/lib/module/components/root-transition-aware.js +7 -16
  77. package/lib/module/components/root-transition-aware.js.map +1 -1
  78. package/lib/module/configs/index.js +6 -3
  79. package/lib/module/configs/index.js.map +1 -1
  80. package/lib/module/configs/presets.js +374 -6
  81. package/lib/module/configs/presets.js.map +1 -1
  82. package/lib/module/configs/specs.js +2 -1
  83. package/lib/module/configs/specs.js.map +1 -1
  84. package/lib/module/hooks/animation/use-associated-style.js +6 -10
  85. package/lib/module/hooks/animation/use-associated-style.js.map +1 -1
  86. package/lib/module/hooks/animation/use-screen-animation.js +37 -37
  87. package/lib/module/hooks/animation/use-screen-animation.js.map +1 -1
  88. package/lib/module/hooks/bounds/use-bound-registry.js +59 -0
  89. package/lib/module/hooks/bounds/use-bound-registry.js.map +1 -0
  90. package/lib/module/hooks/gestures/use-build-gestures.js +156 -153
  91. package/lib/module/hooks/gestures/use-build-gestures.js.map +1 -1
  92. package/lib/module/hooks/gestures/use-parent-gesture-registry.js +23 -0
  93. package/lib/module/hooks/gestures/use-parent-gesture-registry.js.map +1 -0
  94. package/lib/module/hooks/gestures/use-scroll-registry.js +140 -0
  95. package/lib/module/hooks/gestures/use-scroll-registry.js.map +1 -0
  96. package/lib/module/index.js +2 -0
  97. package/lib/module/index.js.map +1 -1
  98. package/lib/module/integrations/native-stack/views/NativeStackView.native.js +7 -4
  99. package/lib/module/integrations/native-stack/views/NativeStackView.native.js.map +1 -1
  100. package/lib/module/providers/gestures.js +16 -16
  101. package/lib/module/providers/gestures.js.map +1 -1
  102. package/lib/module/providers/transition-styles.js +39 -0
  103. package/lib/module/providers/transition-styles.js.map +1 -0
  104. package/lib/module/stores/bounds.js +142 -1
  105. package/lib/module/stores/bounds.js.map +1 -1
  106. package/lib/module/stores/utils/reset-stores-for-screen.js +4 -2
  107. package/lib/module/stores/utils/reset-stores-for-screen.js.map +1 -1
  108. package/lib/module/types/gesture.js +7 -0
  109. package/lib/module/types/gesture.js.map +1 -1
  110. package/lib/module/utils/animation/derivations.js +34 -0
  111. package/lib/module/utils/animation/derivations.js.map +1 -0
  112. package/lib/module/utils/animation/run-transition.js +6 -2
  113. package/lib/module/utils/animation/run-transition.js.map +1 -1
  114. package/lib/module/utils/bounds/_utils/flatten-styles.js.map +1 -0
  115. package/lib/module/utils/bounds/_utils/geometry.js +174 -0
  116. package/lib/module/utils/bounds/_utils/geometry.js.map +1 -0
  117. package/lib/module/utils/bounds/{get-bounds.js → _utils/get-bounds.js} +7 -9
  118. package/lib/module/utils/bounds/_utils/get-bounds.js.map +1 -0
  119. package/lib/module/utils/bounds/_utils/is-bounds-equal.js +14 -0
  120. package/lib/module/utils/bounds/_utils/is-bounds-equal.js.map +1 -0
  121. package/lib/module/utils/bounds/_utils/style-composers.js +194 -0
  122. package/lib/module/utils/bounds/_utils/style-composers.js.map +1 -0
  123. package/lib/module/utils/bounds/constants.js +14 -3
  124. package/lib/module/utils/bounds/constants.js.map +1 -1
  125. package/lib/module/utils/bounds/index.js +208 -15
  126. package/lib/module/utils/bounds/index.js.map +1 -1
  127. package/lib/module/utils/gesture/apply-offset-rules.js +228 -0
  128. package/lib/module/utils/gesture/apply-offset-rules.js.map +1 -0
  129. package/lib/module/utils/gesture/check-gesture-activation.js +226 -0
  130. package/lib/module/utils/gesture/check-gesture-activation.js.map +1 -0
  131. package/lib/module/utils/gesture/determine-dismissal.js +93 -0
  132. package/lib/module/utils/gesture/determine-dismissal.js.map +1 -0
  133. package/lib/typescript/components/bound-capture.d.ts +8 -0
  134. package/lib/typescript/components/bound-capture.d.ts.map +1 -0
  135. package/lib/typescript/components/controllers/screen-lifecycle.d.ts.map +1 -1
  136. package/lib/typescript/components/create-transition-aware-component.d.ts.map +1 -1
  137. package/lib/typescript/components/integrations/masked-view.d.ts +6 -0
  138. package/lib/typescript/components/integrations/masked-view.d.ts.map +1 -0
  139. package/lib/typescript/components/root-transition-aware.d.ts +3 -3
  140. package/lib/typescript/components/root-transition-aware.d.ts.map +1 -1
  141. package/lib/typescript/configs/index.d.ts +3 -0
  142. package/lib/typescript/configs/index.d.ts.map +1 -1
  143. package/lib/typescript/configs/presets.d.ts +3 -0
  144. package/lib/typescript/configs/presets.d.ts.map +1 -1
  145. package/lib/typescript/configs/specs.d.ts.map +1 -1
  146. package/lib/typescript/hooks/animation/use-associated-style.d.ts +6 -4
  147. package/lib/typescript/hooks/animation/use-associated-style.d.ts.map +1 -1
  148. package/lib/typescript/hooks/animation/use-screen-animation.d.ts.map +1 -1
  149. package/lib/typescript/hooks/bounds/{use-bound-measurer.d.ts → use-bound-registry.d.ts} +4 -4
  150. package/lib/typescript/hooks/bounds/{use-bound-measurer.d.ts.map → use-bound-registry.d.ts.map} +1 -1
  151. package/lib/typescript/hooks/gestures/use-build-gestures.d.ts +6 -5
  152. package/lib/typescript/hooks/gestures/use-build-gestures.d.ts.map +1 -1
  153. package/lib/typescript/hooks/gestures/use-parent-gesture-registry.d.ts +6 -0
  154. package/lib/typescript/hooks/gestures/use-parent-gesture-registry.d.ts.map +1 -0
  155. package/lib/typescript/hooks/gestures/{use-scroll-progress.d.ts → use-scroll-registry.d.ts} +2 -2
  156. package/lib/typescript/hooks/gestures/use-scroll-registry.d.ts.map +1 -0
  157. package/lib/typescript/index.d.ts +17 -8
  158. package/lib/typescript/index.d.ts.map +1 -1
  159. package/lib/typescript/integrations/native-stack/views/NativeStackView.native.d.ts.map +1 -1
  160. package/lib/typescript/providers/gestures.d.ts +4 -2
  161. package/lib/typescript/providers/gestures.d.ts.map +1 -1
  162. package/lib/typescript/providers/transition-styles.d.ts +8 -0
  163. package/lib/typescript/providers/transition-styles.d.ts.map +1 -0
  164. package/lib/typescript/stores/bounds.d.ts +11 -0
  165. package/lib/typescript/stores/bounds.d.ts.map +1 -1
  166. package/lib/typescript/stores/utils/reset-stores-for-screen.d.ts +3 -1
  167. package/lib/typescript/stores/utils/reset-stores-for-screen.d.ts.map +1 -1
  168. package/lib/typescript/types/bounds.d.ts +5 -1
  169. package/lib/typescript/types/bounds.d.ts.map +1 -1
  170. package/lib/typescript/types/core.d.ts +8 -0
  171. package/lib/typescript/types/core.d.ts.map +1 -1
  172. package/lib/typescript/types/gesture.d.ts +14 -0
  173. package/lib/typescript/types/gesture.d.ts.map +1 -1
  174. package/lib/typescript/types/navigator.d.ts +5 -1
  175. package/lib/typescript/types/navigator.d.ts.map +1 -1
  176. package/lib/typescript/utils/animation/derivations.d.ts +19 -0
  177. package/lib/typescript/utils/animation/derivations.d.ts.map +1 -0
  178. package/lib/typescript/utils/animation/run-transition.d.ts +2 -1
  179. package/lib/typescript/utils/animation/run-transition.d.ts.map +1 -1
  180. package/lib/typescript/utils/bounds/_types/builder.d.ts +96 -14
  181. package/lib/typescript/utils/bounds/_types/builder.d.ts.map +1 -1
  182. package/lib/typescript/utils/bounds/_types/geometry.d.ts +0 -1
  183. package/lib/typescript/utils/bounds/_types/geometry.d.ts.map +1 -1
  184. package/lib/typescript/utils/bounds/_utils/flatten-styles.d.ts.map +1 -0
  185. package/lib/typescript/utils/bounds/{geometry.d.ts → _utils/geometry.d.ts} +8 -5
  186. package/lib/typescript/utils/bounds/_utils/geometry.d.ts.map +1 -0
  187. package/lib/typescript/utils/bounds/_utils/get-bounds.d.ts +4 -0
  188. package/lib/typescript/utils/bounds/_utils/get-bounds.d.ts.map +1 -0
  189. package/lib/typescript/utils/bounds/_utils/is-bounds-equal.d.ts +7 -0
  190. package/lib/typescript/utils/bounds/_utils/is-bounds-equal.d.ts.map +1 -0
  191. package/lib/typescript/utils/bounds/{style-composers.d.ts → _utils/style-composers.d.ts} +7 -10
  192. package/lib/typescript/utils/bounds/_utils/style-composers.d.ts.map +1 -0
  193. package/lib/typescript/utils/bounds/constants.d.ts +5 -5
  194. package/lib/typescript/utils/bounds/constants.d.ts.map +1 -1
  195. package/lib/typescript/utils/bounds/index.d.ts +2 -4
  196. package/lib/typescript/utils/bounds/index.d.ts.map +1 -1
  197. package/lib/typescript/utils/gesture/apply-offset-rules.d.ts +38 -0
  198. package/lib/typescript/utils/gesture/apply-offset-rules.d.ts.map +1 -0
  199. package/lib/typescript/utils/gesture/check-gesture-activation.d.ts +38 -0
  200. package/lib/typescript/utils/gesture/check-gesture-activation.d.ts.map +1 -0
  201. package/lib/typescript/utils/gesture/determine-dismissal.d.ts +25 -0
  202. package/lib/typescript/utils/gesture/determine-dismissal.d.ts.map +1 -0
  203. package/package.json +2 -2
  204. package/src/__tests__/geometry.test.ts +15 -12
  205. package/src/components/{bounds-activator.tsx → bound-capture.tsx} +1 -1
  206. package/src/components/controllers/screen-lifecycle.tsx +13 -5
  207. package/src/components/create-transition-aware-component.tsx +34 -13
  208. package/src/components/integrations/masked-view.tsx +56 -0
  209. package/src/components/root-transition-aware.tsx +31 -39
  210. package/src/configs/index.ts +20 -8
  211. package/src/configs/presets.ts +401 -6
  212. package/src/configs/specs.ts +1 -0
  213. package/src/hooks/animation/use-associated-style.tsx +12 -11
  214. package/src/hooks/animation/use-screen-animation.tsx +48 -49
  215. package/src/hooks/bounds/{use-bound-measurer.tsx → use-bound-registry.tsx} +24 -20
  216. package/src/hooks/gestures/use-build-gestures.tsx +193 -228
  217. package/src/hooks/gestures/use-parent-gesture-registry.tsx +18 -0
  218. package/src/hooks/gestures/use-scroll-registry.tsx +145 -0
  219. package/src/index.ts +2 -0
  220. package/src/integrations/native-stack/views/NativeStackView.native.tsx +8 -5
  221. package/src/providers/gestures.tsx +19 -22
  222. package/src/providers/transition-styles.tsx +52 -0
  223. package/src/stores/bounds.ts +156 -0
  224. package/src/stores/utils/reset-stores-for-screen.ts +7 -2
  225. package/src/types/bounds.ts +8 -1
  226. package/src/types/core.ts +9 -0
  227. package/src/types/gesture.ts +19 -0
  228. package/src/types/navigator.ts +5 -1
  229. package/src/utils/animation/derivations.ts +38 -0
  230. package/src/utils/animation/run-transition.ts +4 -1
  231. package/src/utils/bounds/_types/builder.ts +127 -11
  232. package/src/utils/bounds/_types/geometry.ts +0 -1
  233. package/src/utils/bounds/_utils/geometry.ts +166 -0
  234. package/src/utils/bounds/_utils/get-bounds.ts +54 -0
  235. package/src/utils/bounds/_utils/is-bounds-equal.ts +24 -0
  236. package/src/utils/bounds/_utils/style-composers.ts +216 -0
  237. package/src/utils/bounds/constants.ts +37 -22
  238. package/src/utils/bounds/index.ts +269 -19
  239. package/src/utils/gesture/apply-offset-rules.ts +314 -0
  240. package/src/utils/gesture/check-gesture-activation.ts +310 -0
  241. package/src/utils/gesture/determine-dismissal.ts +131 -0
  242. package/lib/commonjs/components/bounds-activator.js.map +0 -1
  243. package/lib/commonjs/hooks/bounds/use-bound-measurer.js +0 -52
  244. package/lib/commonjs/hooks/bounds/use-bound-measurer.js.map +0 -1
  245. package/lib/commonjs/hooks/gestures/use-scroll-progress.js +0 -57
  246. package/lib/commonjs/hooks/gestures/use-scroll-progress.js.map +0 -1
  247. package/lib/commonjs/utils/bounds/build-bound-styles.js +0 -145
  248. package/lib/commonjs/utils/bounds/build-bound-styles.js.map +0 -1
  249. package/lib/commonjs/utils/bounds/flatten-styles.js.map +0 -1
  250. package/lib/commonjs/utils/bounds/geometry.js +0 -94
  251. package/lib/commonjs/utils/bounds/geometry.js.map +0 -1
  252. package/lib/commonjs/utils/bounds/get-bounds.js.map +0 -1
  253. package/lib/commonjs/utils/bounds/style-composers.js +0 -199
  254. package/lib/commonjs/utils/bounds/style-composers.js.map +0 -1
  255. package/lib/commonjs/utils/gesture/apply-gesture-activation-criteria.js +0 -81
  256. package/lib/commonjs/utils/gesture/apply-gesture-activation-criteria.js.map +0 -1
  257. package/lib/commonjs/utils/gesture/normalize-gesture-translation.js +0 -21
  258. package/lib/commonjs/utils/gesture/normalize-gesture-translation.js.map +0 -1
  259. package/lib/module/components/bounds-activator.js.map +0 -1
  260. package/lib/module/hooks/bounds/use-bound-measurer.js +0 -47
  261. package/lib/module/hooks/bounds/use-bound-measurer.js.map +0 -1
  262. package/lib/module/hooks/gestures/use-scroll-progress.js +0 -52
  263. package/lib/module/hooks/gestures/use-scroll-progress.js.map +0 -1
  264. package/lib/module/utils/bounds/build-bound-styles.js +0 -141
  265. package/lib/module/utils/bounds/build-bound-styles.js.map +0 -1
  266. package/lib/module/utils/bounds/flatten-styles.js.map +0 -1
  267. package/lib/module/utils/bounds/geometry.js +0 -89
  268. package/lib/module/utils/bounds/geometry.js.map +0 -1
  269. package/lib/module/utils/bounds/get-bounds.js.map +0 -1
  270. package/lib/module/utils/bounds/style-composers.js +0 -191
  271. package/lib/module/utils/bounds/style-composers.js.map +0 -1
  272. package/lib/module/utils/gesture/apply-gesture-activation-criteria.js +0 -76
  273. package/lib/module/utils/gesture/apply-gesture-activation-criteria.js.map +0 -1
  274. package/lib/module/utils/gesture/normalize-gesture-translation.js +0 -16
  275. package/lib/module/utils/gesture/normalize-gesture-translation.js.map +0 -1
  276. package/lib/typescript/components/bounds-activator.d.ts +0 -8
  277. package/lib/typescript/components/bounds-activator.d.ts.map +0 -1
  278. package/lib/typescript/hooks/gestures/use-scroll-progress.d.ts.map +0 -1
  279. package/lib/typescript/utils/bounds/build-bound-styles.d.ts +0 -4
  280. package/lib/typescript/utils/bounds/build-bound-styles.d.ts.map +0 -1
  281. package/lib/typescript/utils/bounds/flatten-styles.d.ts.map +0 -1
  282. package/lib/typescript/utils/bounds/geometry.d.ts.map +0 -1
  283. package/lib/typescript/utils/bounds/get-bounds.d.ts +0 -4
  284. package/lib/typescript/utils/bounds/get-bounds.d.ts.map +0 -1
  285. package/lib/typescript/utils/bounds/style-composers.d.ts.map +0 -1
  286. package/lib/typescript/utils/gesture/apply-gesture-activation-criteria.d.ts +0 -17
  287. package/lib/typescript/utils/gesture/apply-gesture-activation-criteria.d.ts.map +0 -1
  288. package/lib/typescript/utils/gesture/normalize-gesture-translation.d.ts +0 -6
  289. package/lib/typescript/utils/gesture/normalize-gesture-translation.d.ts.map +0 -1
  290. package/src/hooks/gestures/use-scroll-progress.tsx +0 -60
  291. package/src/utils/bounds/build-bound-styles.ts +0 -184
  292. package/src/utils/bounds/geometry.ts +0 -113
  293. package/src/utils/bounds/get-bounds.ts +0 -56
  294. package/src/utils/bounds/style-composers.ts +0 -172
  295. package/src/utils/gesture/apply-gesture-activation-criteria.ts +0 -109
  296. package/src/utils/gesture/normalize-gesture-translation.ts +0 -20
  297. /package/lib/commonjs/utils/bounds/{flatten-styles.js → _utils/flatten-styles.js} +0 -0
  298. /package/lib/module/utils/bounds/{flatten-styles.js → _utils/flatten-styles.js} +0 -0
  299. /package/lib/typescript/utils/bounds/{flatten-styles.d.ts → _utils/flatten-styles.d.ts} +0 -0
  300. /package/src/utils/bounds/{flatten-styles.ts → _utils/flatten-styles.ts} +0 -0
@@ -1,4 +1,5 @@
1
1
  import type { ParamListBase, RouteProp } from "@react-navigation/native";
2
+ import { useMemo } from "react";
2
3
  import { useWindowDimensions } from "react-native";
3
4
  import { type SharedValue, useDerivedValue } from "react-native-reanimated";
4
5
  import { useSafeAreaInsets } from "react-native-safe-area-context";
@@ -12,7 +13,7 @@ import type {
12
13
  } from "../../types/animation";
13
14
  import type { BoundEntry } from "../../types/bounds";
14
15
  import type { NativeStackDescriptor } from "../../types/navigator";
15
- import { buildBoundsAccessor } from "../../utils/bounds";
16
+ import { derivations } from "../../utils/animation/derivations";
16
17
 
17
18
  type BuiltState = {
18
19
  progress: SharedValue<number>;
@@ -22,7 +23,9 @@ type BuiltState = {
22
23
  route: RouteProp<ParamListBase>;
23
24
  };
24
25
 
25
- const FALLBACK = Object.freeze({
26
+ const EMPTY_BOUNDS = Object.freeze({}) as Record<string, BoundEntry>;
27
+
28
+ const FALLBACK: ScreenTransitionState = Object.freeze({
26
29
  progress: 0,
27
30
  closing: 0,
28
31
  animating: 0,
@@ -38,62 +41,64 @@ const FALLBACK = Object.freeze({
38
41
  route: {} as RouteProp<ParamListBase>,
39
42
  });
40
43
 
41
- const useBuildScreenTransitionState = (
42
- descriptor: NativeStackDescriptor | undefined,
43
- ): BuiltState | undefined => {
44
- const key = descriptor?.route.key;
45
- if (!key) return undefined;
46
- const progress = Animations.getAnimation(key, "progress");
47
- const closing = Animations.getAnimation(key, "closing");
48
- const animating = Animations.getAnimation(key, "animating");
49
- const gesture = Gestures.getRouteGestures(key);
50
- const route = descriptor?.route;
51
-
52
- return { progress, closing, animating, gesture, route };
53
- };
54
-
55
44
  const unwrap = (
56
45
  s: BuiltState | undefined,
57
46
  key: string | undefined,
58
47
  ): ScreenTransitionState | undefined => {
59
48
  "worklet";
60
- return s && key
61
- ? {
62
- progress: s.progress.value ?? 0,
63
- closing: s.closing.value ?? 0,
64
- animating: s.animating.value ?? 0,
65
- gesture: {
66
- x: s.gesture.x.value ?? 0,
67
- y: s.gesture.y.value ?? 0,
68
- normalizedX: s.gesture.normalizedX.value ?? 0,
69
- normalizedY: s.gesture.normalizedY.value ?? 0,
70
- isDismissing: s.gesture.isDismissing.value ?? 0,
71
- isDragging: s.gesture.isDragging.value ?? 0,
72
- },
73
- bounds: Bounds.getBounds(key) ?? {},
74
- route: s.route,
75
- }
76
- : undefined;
49
+ if (!s || !key) return undefined;
50
+
51
+ return {
52
+ progress: s.progress.value,
53
+ closing: s.closing.value,
54
+ animating: s.animating.value,
55
+ gesture: {
56
+ x: s.gesture.x.value,
57
+ y: s.gesture.y.value,
58
+ normalizedX: s.gesture.normalizedX.value,
59
+ normalizedY: s.gesture.normalizedY.value,
60
+ isDismissing: s.gesture.isDismissing.value,
61
+ isDragging: s.gesture.isDragging.value,
62
+ },
63
+ bounds: Bounds.getBounds(key) || EMPTY_BOUNDS,
64
+ route: s.route,
65
+ };
66
+ };
67
+
68
+ const useBuildScreenTransitionState = (
69
+ descriptor: NativeStackDescriptor | undefined,
70
+ ): BuiltState | undefined => {
71
+ const key = descriptor?.route.key;
72
+
73
+ return useMemo(() => {
74
+ if (!key) return undefined;
75
+
76
+ return {
77
+ progress: Animations.getAnimation(key, "progress"),
78
+ closing: Animations.getAnimation(key, "closing"),
79
+ animating: Animations.getAnimation(key, "animating"),
80
+ gesture: Gestures.getRouteGestures(key),
81
+ route: descriptor.route,
82
+ };
83
+ }, [key, descriptor?.route]);
77
84
  };
78
85
 
79
86
  export function _useScreenAnimation() {
87
+ const dimensions = useWindowDimensions();
88
+ const insets = useSafeAreaInsets();
89
+
80
90
  const {
81
91
  current: currentDescriptor,
82
92
  next: nextDescriptor,
83
93
  previous: previousDescriptor,
84
94
  } = useKeys();
85
95
 
86
- const dimensions = useWindowDimensions();
87
-
88
96
  const currentAnimation = useBuildScreenTransitionState(currentDescriptor);
89
-
90
97
  const nextAnimation = useBuildScreenTransitionState(nextDescriptor);
91
98
  const prevAnimation = useBuildScreenTransitionState(previousDescriptor);
92
99
 
93
- const insets = useSafeAreaInsets();
94
-
95
100
  const screenInterpolatorProps = useDerivedValue<ScreenInterpolationProps>(
96
- () => {
101
+ (): ScreenInterpolationProps => {
97
102
  "worklet";
98
103
 
99
104
  const previous = unwrap(prevAnimation, previousDescriptor?.route.key);
@@ -101,17 +106,10 @@ export function _useScreenAnimation() {
101
106
  const current =
102
107
  unwrap(currentAnimation, currentDescriptor?.route.key) ?? FALLBACK;
103
108
 
104
- const progress = current.progress + (next?.progress ?? 0);
105
-
106
- const focused = !next;
107
- const activeBoundId = Bounds.getActiveBoundId() || "";
108
-
109
- const bounds = buildBoundsAccessor({
110
- activeBoundId,
109
+ const { progress, focused, activeBoundId, bounds } = derivations({
111
110
  current,
112
- previous,
113
111
  next,
114
- progress,
112
+ previous,
115
113
  dimensions,
116
114
  });
117
115
 
@@ -125,7 +123,7 @@ export function _useScreenAnimation() {
125
123
  activeBoundId,
126
124
  progress,
127
125
  bounds,
128
- } satisfies ScreenInterpolationProps;
126
+ };
129
127
  },
130
128
  );
131
129
 
@@ -135,6 +133,7 @@ export function _useScreenAnimation() {
135
133
 
136
134
  return { screenInterpolatorProps, screenStyleInterpolator };
137
135
  }
136
+
138
137
  export function useScreenAnimation() {
139
138
  const { screenInterpolatorProps } = _useScreenAnimation();
140
139
 
@@ -8,7 +8,8 @@ import {
8
8
  } from "react-native-reanimated";
9
9
  import { useKeys } from "../../providers/keys";
10
10
  import { Bounds } from "../../stores/bounds";
11
- import { flattenStyle } from "../../utils/bounds/flatten-styles";
11
+ import { flattenStyle } from "../../utils/bounds/_utils/flatten-styles";
12
+ import { isBoundsEqual } from "../../utils/bounds/_utils/is-bounds-equal";
12
13
  import { useScreenAnimation } from "../animation/use-screen-animation";
13
14
 
14
15
  interface BoundMeasurerHookProps {
@@ -18,7 +19,7 @@ interface BoundMeasurerHookProps {
18
19
  style: StyleProps;
19
20
  }
20
21
 
21
- export const useBoundMeasurer = ({
22
+ export const useBoundsRegistry = ({
22
23
  sharedBoundTag,
23
24
  animatedRef,
24
25
  current,
@@ -26,46 +27,49 @@ export const useBoundMeasurer = ({
26
27
  }: BoundMeasurerHookProps) => {
27
28
  const { previous } = useKeys();
28
29
  const interpolatorProps = useScreenAnimation();
29
- const hasAlreadyMeasured = useSharedValue(false);
30
+ const isMeasured = useSharedValue(false);
30
31
 
31
- const measureAndSet = useCallback(() => {
32
+ const measureBounds = useCallback(() => {
32
33
  "worklet";
33
34
  if (!sharedBoundTag) return;
34
35
  const measured = measure(animatedRef);
35
36
  if (measured) {
36
- Bounds.setBounds(
37
- current.route.key,
38
- sharedBoundTag,
39
- measured,
40
- flattenStyle(style),
41
- );
37
+ const key = current.route.key;
38
+ if (isBoundsEqual({ measured, key, sharedBoundTag })) {
39
+ Bounds.setRouteActive(key, sharedBoundTag);
40
+ return;
41
+ }
42
+
43
+ Bounds.setBounds(key, sharedBoundTag, measured, flattenStyle(style));
44
+ Bounds.setRouteActive(key, sharedBoundTag);
42
45
  }
43
46
  }, [sharedBoundTag, animatedRef, current.route.key, style]);
44
47
 
45
- const measureOnLayout = useCallback(() => {
48
+ const handleLayout = useCallback(() => {
46
49
  "worklet";
47
- if (!sharedBoundTag || hasAlreadyMeasured.value) return;
48
-
49
50
  const previousRouteKey = previous?.route.key;
50
- if (!previousRouteKey) return;
51
+
52
+ if (!sharedBoundTag || isMeasured.value || !previousRouteKey) {
53
+ return;
54
+ }
51
55
 
52
56
  const previousBounds = Bounds.getBounds(previousRouteKey);
53
57
  const hasPreviousBoundForTag = previousBounds[sharedBoundTag];
54
58
 
55
59
  if (interpolatorProps.value.current.animating && hasPreviousBoundForTag) {
56
- measureAndSet();
57
- hasAlreadyMeasured.value = true;
60
+ measureBounds();
61
+ isMeasured.value = true;
58
62
  }
59
63
  }, [
60
- measureAndSet,
64
+ measureBounds,
61
65
  interpolatorProps,
62
66
  sharedBoundTag,
63
67
  previous?.route.key,
64
- hasAlreadyMeasured,
68
+ isMeasured,
65
69
  ]);
66
70
 
67
71
  return {
68
- measureAndSet,
69
- measureOnLayout,
72
+ measureBounds,
73
+ handleLayout,
70
74
  };
71
75
  };