react-native-screen-transitions 4.0.0-alpha.0 → 4.0.0-alpha.2

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 (403) hide show
  1. package/lib/commonjs/animation/snap-to.js +2 -0
  2. package/lib/commonjs/animation/snap-to.js.map +1 -1
  3. package/lib/commonjs/components/boundary/components/boundary-target.js +19 -20
  4. package/lib/commonjs/components/boundary/components/boundary-target.js.map +1 -1
  5. package/lib/commonjs/components/boundary/create-boundary-component.js +16 -2
  6. package/lib/commonjs/components/boundary/create-boundary-component.js.map +1 -1
  7. package/lib/commonjs/components/boundary/hooks/lifecycles/use-refresh-boundary.js +5 -0
  8. package/lib/commonjs/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -1
  9. package/lib/commonjs/components/boundary/hooks/use-boundary-measurement.js +1 -3
  10. package/lib/commonjs/components/boundary/hooks/use-boundary-measurement.js.map +1 -1
  11. package/lib/commonjs/components/boundary/index.js +4 -3
  12. package/lib/commonjs/components/boundary/index.js.map +1 -1
  13. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/components/host.js +5 -1
  14. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/components/host.js.map +1 -1
  15. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +47 -188
  16. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  17. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js +21 -13
  18. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js.map +1 -1
  19. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js +1 -12
  20. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js.map +1 -1
  21. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +40 -33
  22. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +1 -1
  23. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/offset-style.js +3 -4
  24. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +1 -1
  25. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +46 -131
  26. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  27. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js +45 -9
  28. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js.map +1 -1
  29. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +1 -1
  30. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js +2 -29
  31. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +1 -1
  32. package/lib/commonjs/components/boundary/portal/utils/handoff-target.js +33 -0
  33. package/lib/commonjs/components/boundary/portal/utils/handoff-target.js.map +1 -0
  34. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js +19 -15
  35. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  36. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js +1 -10
  37. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js.map +1 -1
  38. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js +18 -36
  39. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js.map +1 -1
  40. package/lib/commonjs/components/boundary/utils/refresh-signals.js +7 -0
  41. package/lib/commonjs/components/boundary/utils/refresh-signals.js.map +1 -1
  42. package/lib/commonjs/components/boundary/utils/resolve-boundary-target.js +29 -0
  43. package/lib/commonjs/components/boundary/utils/resolve-boundary-target.js.map +1 -0
  44. package/lib/commonjs/components/masked-view.js +9 -1
  45. package/lib/commonjs/components/masked-view.js.map +1 -1
  46. package/lib/commonjs/components/screen-container/layers/backdrop.js +3 -1
  47. package/lib/commonjs/components/screen-container/layers/backdrop.js.map +1 -1
  48. package/lib/commonjs/components/screen-container/layers/maybe-masked-navigation-container.js +9 -1
  49. package/lib/commonjs/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  50. package/lib/commonjs/components/screen-lifecycle/hooks/use-transition-start-controller.js +2 -0
  51. package/lib/commonjs/components/screen-lifecycle/hooks/use-transition-start-controller.js.map +1 -1
  52. package/lib/commonjs/navigators/react-navigation/index.js +7 -8
  53. package/lib/commonjs/navigators/react-navigation/index.js.map +1 -1
  54. package/lib/commonjs/providers/helpers/measured-bounds-writes.js +4 -1
  55. package/lib/commonjs/providers/helpers/measured-bounds-writes.js.map +1 -1
  56. package/lib/commonjs/providers/screen/gestures/gestures.provider.js +2 -8
  57. package/lib/commonjs/providers/screen/gestures/gestures.provider.js.map +1 -1
  58. package/lib/commonjs/providers/screen/gestures/pan/behavior/pan-lifecycle.js +1 -0
  59. package/lib/commonjs/providers/screen/gestures/pan/behavior/pan-lifecycle.js.map +1 -1
  60. package/lib/commonjs/providers/screen/gestures/pinch/activation/use-pinch-activation.js +37 -3
  61. package/lib/commonjs/providers/screen/gestures/pinch/activation/use-pinch-activation.js.map +1 -1
  62. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js +1 -0
  63. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js.map +1 -1
  64. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-release.js +3 -2
  65. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-release.js.map +1 -1
  66. package/lib/commonjs/providers/screen/gestures/types.js.map +1 -1
  67. package/lib/commonjs/providers/screen/styles/helpers/transition-visual-state.js +42 -0
  68. package/lib/commonjs/providers/screen/styles/helpers/transition-visual-state.js.map +1 -0
  69. package/lib/commonjs/providers/screen/styles/helpers/visibility-gate.js +11 -5
  70. package/lib/commonjs/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  71. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js +23 -10
  72. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  73. package/lib/commonjs/providers/screen/styles/hooks/use-maybe-block-visibility.js +10 -8
  74. package/lib/commonjs/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  75. package/lib/commonjs/stores/bounds/internals/links.js +4 -4
  76. package/lib/commonjs/stores/bounds/internals/links.js.map +1 -1
  77. package/lib/commonjs/stores/scroll.store.js +20 -2
  78. package/lib/commonjs/stores/scroll.store.js.map +1 -1
  79. package/lib/commonjs/stores/system.store.js +2 -0
  80. package/lib/commonjs/stores/system.store.js.map +1 -1
  81. package/lib/commonjs/utils/animation/animate-to-progress.js +23 -1
  82. package/lib/commonjs/utils/animation/animate-to-progress.js.map +1 -1
  83. package/lib/commonjs/utils/animation/animate.js +14 -2
  84. package/lib/commonjs/utils/animation/animate.js.map +1 -1
  85. package/lib/commonjs/utils/animation/spring/spring.js +22 -2
  86. package/lib/commonjs/utils/animation/spring/spring.js.map +1 -1
  87. package/lib/commonjs/utils/animation/spring/springUtils.js +96 -0
  88. package/lib/commonjs/utils/animation/spring/springUtils.js.map +1 -1
  89. package/lib/commonjs/utils/animation/state.js +4 -0
  90. package/lib/commonjs/utils/bounds/navigation/reveal/math.js +17 -5
  91. package/lib/commonjs/utils/bounds/navigation/reveal/math.js.map +1 -1
  92. package/lib/commonjs/utils/bounds/navigation/zoom/build.js +44 -20
  93. package/lib/commonjs/utils/bounds/navigation/zoom/build.js.map +1 -1
  94. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js +2 -31
  95. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js.map +1 -1
  96. package/lib/commonjs/utils/bounds/navigation/zoom/helpers.js +3 -17
  97. package/lib/commonjs/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  98. package/lib/module/animation/snap-to.js +2 -0
  99. package/lib/module/animation/snap-to.js.map +1 -1
  100. package/lib/module/components/boundary/components/boundary-target.js +19 -20
  101. package/lib/module/components/boundary/components/boundary-target.js.map +1 -1
  102. package/lib/module/components/boundary/create-boundary-component.js +17 -3
  103. package/lib/module/components/boundary/create-boundary-component.js.map +1 -1
  104. package/lib/module/components/boundary/hooks/lifecycles/use-refresh-boundary.js +5 -0
  105. package/lib/module/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -1
  106. package/lib/module/components/boundary/hooks/use-boundary-measurement.js +1 -3
  107. package/lib/module/components/boundary/hooks/use-boundary-measurement.js.map +1 -1
  108. package/lib/module/components/boundary/index.js +3 -2
  109. package/lib/module/components/boundary/index.js.map +1 -1
  110. package/lib/module/components/boundary/portal/components/boundary-content-portal/components/host.js +5 -1
  111. package/lib/module/components/boundary/portal/components/boundary-content-portal/components/host.js.map +1 -1
  112. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +49 -190
  113. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  114. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js +21 -13
  115. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js.map +1 -1
  116. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js +2 -13
  117. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js.map +1 -1
  118. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +43 -36
  119. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +1 -1
  120. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/offset-style.js +3 -4
  121. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +1 -1
  122. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +50 -135
  123. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  124. package/lib/module/components/boundary/portal/components/boundary-portal/index.js +44 -9
  125. package/lib/module/components/boundary/portal/components/boundary-portal/index.js.map +1 -1
  126. package/lib/module/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +1 -1
  127. package/lib/module/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js +1 -27
  128. package/lib/module/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +1 -1
  129. package/lib/module/components/boundary/portal/utils/handoff-target.js +28 -0
  130. package/lib/module/components/boundary/portal/utils/handoff-target.js.map +1 -0
  131. package/lib/module/components/boundary/portal/utils/resolve-portal.js +19 -15
  132. package/lib/module/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  133. package/lib/module/components/boundary/portal/utils/teleport-control.js +0 -8
  134. package/lib/module/components/boundary/portal/utils/teleport-control.js.map +1 -1
  135. package/lib/module/components/boundary/providers/boundary-root.provider.js +19 -37
  136. package/lib/module/components/boundary/providers/boundary-root.provider.js.map +1 -1
  137. package/lib/module/components/boundary/utils/refresh-signals.js +7 -0
  138. package/lib/module/components/boundary/utils/refresh-signals.js.map +1 -1
  139. package/lib/module/components/boundary/utils/resolve-boundary-target.js +24 -0
  140. package/lib/module/components/boundary/utils/resolve-boundary-target.js.map +1 -0
  141. package/lib/module/components/masked-view.js +10 -2
  142. package/lib/module/components/masked-view.js.map +1 -1
  143. package/lib/module/components/screen-container/layers/backdrop.js +3 -1
  144. package/lib/module/components/screen-container/layers/backdrop.js.map +1 -1
  145. package/lib/module/components/screen-container/layers/maybe-masked-navigation-container.js +10 -2
  146. package/lib/module/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  147. package/lib/module/components/screen-lifecycle/hooks/use-transition-start-controller.js +2 -0
  148. package/lib/module/components/screen-lifecycle/hooks/use-transition-start-controller.js.map +1 -1
  149. package/lib/module/navigators/react-navigation/index.js +4 -6
  150. package/lib/module/navigators/react-navigation/index.js.map +1 -1
  151. package/lib/module/providers/helpers/measured-bounds-writes.js +4 -1
  152. package/lib/module/providers/helpers/measured-bounds-writes.js.map +1 -1
  153. package/lib/module/providers/screen/gestures/gestures.provider.js +2 -8
  154. package/lib/module/providers/screen/gestures/gestures.provider.js.map +1 -1
  155. package/lib/module/providers/screen/gestures/pan/behavior/pan-lifecycle.js +1 -0
  156. package/lib/module/providers/screen/gestures/pan/behavior/pan-lifecycle.js.map +1 -1
  157. package/lib/module/providers/screen/gestures/pinch/activation/use-pinch-activation.js +35 -2
  158. package/lib/module/providers/screen/gestures/pinch/activation/use-pinch-activation.js.map +1 -1
  159. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js +1 -0
  160. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js.map +1 -1
  161. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-release.js +3 -2
  162. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-release.js.map +1 -1
  163. package/lib/module/providers/screen/gestures/types.js.map +1 -1
  164. package/lib/module/providers/screen/styles/helpers/transition-visual-state.js +35 -0
  165. package/lib/module/providers/screen/styles/helpers/transition-visual-state.js.map +1 -0
  166. package/lib/module/providers/screen/styles/helpers/visibility-gate.js +11 -5
  167. package/lib/module/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  168. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js +23 -10
  169. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  170. package/lib/module/providers/screen/styles/hooks/use-maybe-block-visibility.js +10 -8
  171. package/lib/module/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  172. package/lib/module/stores/bounds/internals/links.js +4 -4
  173. package/lib/module/stores/bounds/internals/links.js.map +1 -1
  174. package/lib/module/stores/scroll.store.js +17 -0
  175. package/lib/module/stores/scroll.store.js.map +1 -1
  176. package/lib/module/stores/system.store.js +2 -0
  177. package/lib/module/stores/system.store.js.map +1 -1
  178. package/lib/module/utils/animation/animate-to-progress.js +21 -0
  179. package/lib/module/utils/animation/animate-to-progress.js.map +1 -1
  180. package/lib/module/utils/animation/animate.js +14 -2
  181. package/lib/module/utils/animation/animate.js.map +1 -1
  182. package/lib/module/utils/animation/spring/spring.js +23 -3
  183. package/lib/module/utils/animation/spring/spring.js.map +1 -1
  184. package/lib/module/utils/animation/spring/springUtils.js +95 -0
  185. package/lib/module/utils/animation/spring/springUtils.js.map +1 -1
  186. package/lib/module/utils/animation/state.js +2 -0
  187. package/lib/module/utils/bounds/navigation/reveal/math.js +16 -5
  188. package/lib/module/utils/bounds/navigation/reveal/math.js.map +1 -1
  189. package/lib/module/utils/bounds/navigation/zoom/build.js +46 -22
  190. package/lib/module/utils/bounds/navigation/zoom/build.js.map +1 -1
  191. package/lib/module/utils/bounds/navigation/zoom/drag.js +2 -30
  192. package/lib/module/utils/bounds/navigation/zoom/drag.js.map +1 -1
  193. package/lib/module/utils/bounds/navigation/zoom/helpers.js +4 -18
  194. package/lib/module/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  195. package/lib/typescript/animation/snap-to.d.ts.map +1 -1
  196. package/lib/typescript/components/boundary/components/boundary-target.d.ts +2 -1
  197. package/lib/typescript/components/boundary/components/boundary-target.d.ts.map +1 -1
  198. package/lib/typescript/components/boundary/create-boundary-component.d.ts.map +1 -1
  199. package/lib/typescript/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts.map +1 -1
  200. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts +3 -4
  201. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts.map +1 -1
  202. package/lib/typescript/components/boundary/index.d.ts +6 -9
  203. package/lib/typescript/components/boundary/index.d.ts.map +1 -1
  204. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts +1 -3
  205. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  206. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/index.d.ts.map +1 -1
  207. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/host.d.ts.map +1 -1
  208. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.d.ts.map +1 -1
  209. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/offset-style.d.ts +1 -10
  210. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/offset-style.d.ts.map +1 -1
  211. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts +1 -3
  212. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  213. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts +2 -2
  214. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts +2 -2
  215. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts.map +1 -1
  216. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/host-registry.store.d.ts +0 -1
  217. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/host-registry.store.d.ts.map +1 -1
  218. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.d.ts +1 -10
  219. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.d.ts.map +1 -1
  220. package/lib/typescript/components/boundary/portal/utils/handoff-target.d.ts +12 -0
  221. package/lib/typescript/components/boundary/portal/utils/handoff-target.d.ts.map +1 -0
  222. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts +2 -3
  223. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -1
  224. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts +0 -4
  225. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts.map +1 -1
  226. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts +8 -12
  227. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  228. package/lib/typescript/components/boundary/utils/refresh-signals.d.ts +1 -0
  229. package/lib/typescript/components/boundary/utils/refresh-signals.d.ts.map +1 -1
  230. package/lib/typescript/components/boundary/utils/resolve-boundary-target.d.ts +12 -0
  231. package/lib/typescript/components/boundary/utils/resolve-boundary-target.d.ts.map +1 -0
  232. package/lib/typescript/components/create-transition-aware-component.d.ts +5 -6
  233. package/lib/typescript/components/create-transition-aware-component.d.ts.map +1 -1
  234. package/lib/typescript/components/masked-view.d.ts.map +1 -1
  235. package/lib/typescript/components/screen-container/layers/backdrop.d.ts.map +1 -1
  236. package/lib/typescript/components/screen-container/layers/maybe-masked-navigation-container.d.ts.map +1 -1
  237. package/lib/typescript/components/screen-lifecycle/hooks/use-transition-start-controller.d.ts.map +1 -1
  238. package/lib/typescript/index.d.ts +650 -702
  239. package/lib/typescript/index.d.ts.map +1 -1
  240. package/lib/typescript/navigators/react-navigation/index.d.ts +6 -17
  241. package/lib/typescript/navigators/react-navigation/index.d.ts.map +1 -1
  242. package/lib/typescript/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  243. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  244. package/lib/typescript/providers/screen/gestures/pan/behavior/pan-lifecycle.d.ts.map +1 -1
  245. package/lib/typescript/providers/screen/gestures/pinch/activation/use-pinch-activation.d.ts +2 -1
  246. package/lib/typescript/providers/screen/gestures/pinch/activation/use-pinch-activation.d.ts.map +1 -1
  247. package/lib/typescript/providers/screen/gestures/pinch/behavior/pinch-lifecycle.d.ts.map +1 -1
  248. package/lib/typescript/providers/screen/gestures/pinch/behavior/pinch-release.d.ts.map +1 -1
  249. package/lib/typescript/providers/screen/gestures/types.d.ts +1 -9
  250. package/lib/typescript/providers/screen/gestures/types.d.ts.map +1 -1
  251. package/lib/typescript/providers/screen/styles/helpers/transition-visual-state.d.ts +18 -0
  252. package/lib/typescript/providers/screen/styles/helpers/transition-visual-state.d.ts.map +1 -0
  253. package/lib/typescript/providers/screen/styles/helpers/visibility-gate.d.ts +2 -2
  254. package/lib/typescript/providers/screen/styles/helpers/visibility-gate.d.ts.map +1 -1
  255. package/lib/typescript/providers/screen/styles/hooks/slot-resolvers.d.ts +4 -4
  256. package/lib/typescript/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  257. package/lib/typescript/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  258. package/lib/typescript/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +2 -2
  259. package/lib/typescript/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  260. package/lib/typescript/stores/bounds/internals/links.d.ts +1 -1
  261. package/lib/typescript/stores/bounds/internals/links.d.ts.map +1 -1
  262. package/lib/typescript/stores/scroll.store.d.ts +7 -0
  263. package/lib/typescript/stores/scroll.store.d.ts.map +1 -1
  264. package/lib/typescript/stores/system.store.d.ts +5 -0
  265. package/lib/typescript/stores/system.store.d.ts.map +1 -1
  266. package/lib/typescript/utils/animation/animate-to-progress.d.ts +6 -1
  267. package/lib/typescript/utils/animation/animate-to-progress.d.ts.map +1 -1
  268. package/lib/typescript/utils/animation/animate.d.ts +2 -2
  269. package/lib/typescript/utils/animation/animate.d.ts.map +1 -1
  270. package/lib/typescript/utils/animation/spring/spring.d.ts +2 -2
  271. package/lib/typescript/utils/animation/spring/spring.d.ts.map +1 -1
  272. package/lib/typescript/utils/animation/spring/springUtils.d.ts +3 -0
  273. package/lib/typescript/utils/animation/spring/springUtils.d.ts.map +1 -1
  274. package/lib/typescript/utils/animation/state.d.ts +6 -0
  275. package/lib/typescript/utils/animation/state.d.ts.map +1 -1
  276. package/lib/typescript/utils/bounds/navigation/reveal/math.d.ts +9 -0
  277. package/lib/typescript/utils/bounds/navigation/reveal/math.d.ts.map +1 -1
  278. package/lib/typescript/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  279. package/lib/typescript/utils/bounds/navigation/zoom/drag.d.ts +2 -11
  280. package/lib/typescript/utils/bounds/navigation/zoom/drag.d.ts.map +1 -1
  281. package/lib/typescript/utils/bounds/navigation/zoom/helpers.d.ts +7 -4
  282. package/lib/typescript/utils/bounds/navigation/zoom/helpers.d.ts.map +1 -1
  283. package/package.json +1 -1
  284. package/src/animation/snap-to.ts +5 -0
  285. package/src/components/boundary/components/boundary-target.tsx +37 -23
  286. package/src/components/boundary/create-boundary-component.tsx +29 -3
  287. package/src/components/boundary/hooks/lifecycles/use-refresh-boundary.ts +11 -0
  288. package/src/components/boundary/hooks/use-boundary-measurement.ts +3 -9
  289. package/src/components/boundary/index.tsx +4 -8
  290. package/src/components/boundary/portal/components/boundary-content-portal/components/host.tsx +5 -1
  291. package/src/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +73 -276
  292. package/src/components/boundary/portal/components/boundary-content-portal/index.tsx +31 -12
  293. package/src/components/boundary/portal/components/boundary-portal/components/host.tsx +2 -12
  294. package/src/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.tsx +64 -62
  295. package/src/components/boundary/portal/components/boundary-portal/helpers/offset-style.ts +2 -9
  296. package/src/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +73 -187
  297. package/src/components/boundary/portal/components/boundary-portal/index.tsx +72 -12
  298. package/src/components/boundary/portal/components/boundary-portal/stores/host-registry.store.ts +0 -1
  299. package/src/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.ts +2 -39
  300. package/src/components/boundary/portal/utils/handoff-target.ts +48 -0
  301. package/src/components/boundary/portal/utils/resolve-portal.ts +26 -18
  302. package/src/components/boundary/portal/utils/teleport-control.ts +0 -12
  303. package/src/components/boundary/providers/boundary-root.provider.tsx +28 -80
  304. package/src/components/boundary/utils/refresh-signals.ts +8 -0
  305. package/src/components/boundary/utils/resolve-boundary-target.tsx +39 -0
  306. package/src/components/masked-view.tsx +20 -4
  307. package/src/components/screen-container/layers/backdrop.tsx +3 -1
  308. package/src/components/screen-container/layers/maybe-masked-navigation-container.tsx +14 -4
  309. package/src/components/screen-lifecycle/hooks/use-transition-start-controller.ts +2 -0
  310. package/src/navigators/react-navigation/index.tsx +4 -48
  311. package/src/providers/helpers/measured-bounds-writes.ts +1 -0
  312. package/src/providers/screen/gestures/gestures.provider.tsx +2 -10
  313. package/src/providers/screen/gestures/pan/behavior/pan-lifecycle.ts +1 -0
  314. package/src/providers/screen/gestures/pinch/activation/use-pinch-activation.ts +74 -3
  315. package/src/providers/screen/gestures/pinch/behavior/pinch-lifecycle.ts +1 -0
  316. package/src/providers/screen/gestures/pinch/behavior/pinch-release.ts +2 -4
  317. package/src/providers/screen/gestures/types.ts +0 -14
  318. package/src/providers/screen/styles/helpers/transition-visual-state.ts +44 -0
  319. package/src/providers/screen/styles/helpers/visibility-gate.ts +17 -7
  320. package/src/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +30 -15
  321. package/src/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +14 -13
  322. package/src/stores/bounds/internals/links.ts +13 -2
  323. package/src/stores/scroll.store.ts +23 -0
  324. package/src/stores/system.store.ts +8 -0
  325. package/src/utils/animation/animate-to-progress.ts +59 -28
  326. package/src/utils/animation/animate.ts +18 -2
  327. package/src/utils/animation/spring/spring.ts +36 -1
  328. package/src/utils/animation/spring/springUtils.ts +130 -0
  329. package/src/utils/animation/state.ts +8 -0
  330. package/src/utils/bounds/navigation/reveal/math.ts +21 -5
  331. package/src/utils/bounds/navigation/zoom/build.ts +77 -23
  332. package/src/utils/bounds/navigation/zoom/drag.ts +3 -42
  333. package/src/utils/bounds/navigation/zoom/helpers.ts +9 -23
  334. package/lib/commonjs/components/boundary/hooks/use-register-target.js +0 -32
  335. package/lib/commonjs/components/boundary/hooks/use-register-target.js.map +0 -1
  336. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-slot.js +0 -52
  337. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-slot.js.map +0 -1
  338. package/lib/commonjs/components/boundary/portal/utils/ownership.js +0 -220
  339. package/lib/commonjs/components/boundary/portal/utils/ownership.js.map +0 -1
  340. package/lib/commonjs/components/boundary/portal/utils/shallow-equal.js +0 -29
  341. package/lib/commonjs/components/boundary/portal/utils/shallow-equal.js.map +0 -1
  342. package/lib/commonjs/components/boundary/portal/utils/visible-host.js +0 -25
  343. package/lib/commonjs/components/boundary/portal/utils/visible-host.js.map +0 -1
  344. package/lib/commonjs/providers/screen/gestures/rotation/activation/use-rotation-activation.js +0 -64
  345. package/lib/commonjs/providers/screen/gestures/rotation/activation/use-rotation-activation.js.map +0 -1
  346. package/lib/commonjs/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js +0 -21
  347. package/lib/commonjs/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js.map +0 -1
  348. package/lib/commonjs/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js +0 -29
  349. package/lib/commonjs/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js.map +0 -1
  350. package/lib/commonjs/providers/screen/gestures/rotation/use-build-rotation-gesture.js +0 -38
  351. package/lib/commonjs/providers/screen/gestures/rotation/use-build-rotation-gesture.js.map +0 -1
  352. package/lib/commonjs/providers/screen/styles/helpers/opening-phase.js +0 -32
  353. package/lib/commonjs/providers/screen/styles/helpers/opening-phase.js.map +0 -1
  354. package/lib/module/components/boundary/hooks/use-register-target.js +0 -27
  355. package/lib/module/components/boundary/hooks/use-register-target.js.map +0 -1
  356. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-slot.js +0 -47
  357. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-slot.js.map +0 -1
  358. package/lib/module/components/boundary/portal/utils/ownership.js +0 -213
  359. package/lib/module/components/boundary/portal/utils/ownership.js.map +0 -1
  360. package/lib/module/components/boundary/portal/utils/shallow-equal.js +0 -24
  361. package/lib/module/components/boundary/portal/utils/shallow-equal.js.map +0 -1
  362. package/lib/module/components/boundary/portal/utils/visible-host.js +0 -20
  363. package/lib/module/components/boundary/portal/utils/visible-host.js.map +0 -1
  364. package/lib/module/providers/screen/gestures/rotation/activation/use-rotation-activation.js +0 -59
  365. package/lib/module/providers/screen/gestures/rotation/activation/use-rotation-activation.js.map +0 -1
  366. package/lib/module/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js +0 -15
  367. package/lib/module/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js.map +0 -1
  368. package/lib/module/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js +0 -24
  369. package/lib/module/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js.map +0 -1
  370. package/lib/module/providers/screen/gestures/rotation/use-build-rotation-gesture.js +0 -33
  371. package/lib/module/providers/screen/gestures/rotation/use-build-rotation-gesture.js.map +0 -1
  372. package/lib/module/providers/screen/styles/helpers/opening-phase.js +0 -26
  373. package/lib/module/providers/screen/styles/helpers/opening-phase.js.map +0 -1
  374. package/lib/typescript/components/boundary/hooks/use-register-target.d.ts +0 -10
  375. package/lib/typescript/components/boundary/hooks/use-register-target.d.ts.map +0 -1
  376. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-slot.d.ts +0 -13
  377. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-slot.d.ts.map +0 -1
  378. package/lib/typescript/components/boundary/portal/utils/ownership.d.ts +0 -34
  379. package/lib/typescript/components/boundary/portal/utils/ownership.d.ts.map +0 -1
  380. package/lib/typescript/components/boundary/portal/utils/shallow-equal.d.ts +0 -8
  381. package/lib/typescript/components/boundary/portal/utils/shallow-equal.d.ts.map +0 -1
  382. package/lib/typescript/components/boundary/portal/utils/visible-host.d.ts +0 -8
  383. package/lib/typescript/components/boundary/portal/utils/visible-host.d.ts.map +0 -1
  384. package/lib/typescript/providers/screen/gestures/rotation/activation/use-rotation-activation.d.ts +0 -15
  385. package/lib/typescript/providers/screen/gestures/rotation/activation/use-rotation-activation.d.ts.map +0 -1
  386. package/lib/typescript/providers/screen/gestures/rotation/behavior/rotation-lifecycle.d.ts +0 -4
  387. package/lib/typescript/providers/screen/gestures/rotation/behavior/rotation-lifecycle.d.ts.map +0 -1
  388. package/lib/typescript/providers/screen/gestures/rotation/behavior/use-rotation-behavior.d.ts +0 -5
  389. package/lib/typescript/providers/screen/gestures/rotation/behavior/use-rotation-behavior.d.ts.map +0 -1
  390. package/lib/typescript/providers/screen/gestures/rotation/use-build-rotation-gesture.d.ts +0 -9
  391. package/lib/typescript/providers/screen/gestures/rotation/use-build-rotation-gesture.d.ts.map +0 -1
  392. package/lib/typescript/providers/screen/styles/helpers/opening-phase.d.ts +0 -16
  393. package/lib/typescript/providers/screen/styles/helpers/opening-phase.d.ts.map +0 -1
  394. package/src/components/boundary/hooks/use-register-target.ts +0 -43
  395. package/src/components/boundary/portal/components/boundary-portal/components/portal-slot.tsx +0 -80
  396. package/src/components/boundary/portal/utils/ownership.ts +0 -319
  397. package/src/components/boundary/portal/utils/shallow-equal.ts +0 -25
  398. package/src/components/boundary/portal/utils/visible-host.ts +0 -24
  399. package/src/providers/screen/gestures/rotation/activation/use-rotation-activation.ts +0 -88
  400. package/src/providers/screen/gestures/rotation/behavior/rotation-lifecycle.ts +0 -19
  401. package/src/providers/screen/gestures/rotation/behavior/use-rotation-behavior.ts +0 -47
  402. package/src/providers/screen/gestures/rotation/use-build-rotation-gesture.ts +0 -50
  403. package/src/providers/screen/styles/helpers/opening-phase.ts +0 -25
@@ -3,7 +3,7 @@ import type {
3
3
  AnimationCallback,
4
4
  ReduceMotion,
5
5
  } from "react-native-reanimated";
6
- import type { AnimationStateCallback } from "../state";
6
+ import type { AnimationProgressDriver, AnimationStateCallback } from "../state";
7
7
  import type { SpringConfig } from "./springConfigs";
8
8
  import type {
9
9
  DefaultSpringConfig,
@@ -13,6 +13,7 @@ import type {
13
13
  } from "./springUtils";
14
14
  import {
15
15
  calculateNewStiffnessToMatchDuration,
16
+ calculateSpringAnimationDuration,
16
17
  checkIfConfigIsValid,
17
18
  criticallyDampedSpringCalculations,
18
19
  getEnergy,
@@ -30,6 +31,7 @@ const REACT_NATIVE_RUNTIME_KIND = 1;
30
31
  const REDUCE_MOTION_SYSTEM = "system";
31
32
  const REDUCE_MOTION_ALWAYS = "always";
32
33
  const DEFAULT_SPRING_SETTLE_DISTANCE = 0.001;
34
+ const MAX_UNFINISHED_ANIMATION_PROGRESS = 1 - 1e-6;
33
35
 
34
36
  const DEFAULT_SPRING_CONFIG = {
35
37
  damping: 120,
@@ -61,6 +63,7 @@ const getReduceMotionForAnimation = (config?: ReduceMotion) => {
61
63
  const defineSpringAnimation = <TAnimation extends Animation<TAnimation>>(
62
64
  _starting: number,
63
65
  factory: () => TAnimation,
66
+ onReducedMotion?: () => void,
64
67
  ): TAnimation => {
65
68
  "worklet";
66
69
  const create = (() => {
@@ -76,6 +79,7 @@ const defineSpringAnimation = <TAnimation extends Animation<TAnimation>>(
76
79
  ) => {
77
80
  "worklet";
78
81
  if (animation.reduceMotion) {
82
+ onReducedMotion?.();
79
83
  animation.current = animation.toValue;
80
84
  animation.onFrame = () => true;
81
85
  return;
@@ -99,6 +103,7 @@ type withSpringType = (
99
103
  toValue: number,
100
104
  userConfig?: SpringConfig,
101
105
  callback?: AnimationStateCallback,
106
+ animationProgress?: AnimationProgressDriver,
102
107
  ) => number;
103
108
 
104
109
  /**
@@ -123,9 +128,11 @@ export const withInternalSpring = ((
123
128
  toValue: number,
124
129
  userConfig?: SpringConfig,
125
130
  callback?: AnimationStateCallback,
131
+ animationProgress?: AnimationProgressDriver,
126
132
  ): Animation<SpringAnimation> => {
127
133
  "worklet";
128
134
 
135
+ // biome-ignore format: Keep this Reanimated fork aligned with its upstream layout.
129
136
  return defineSpringAnimation<SpringAnimation>(toValue, () => {
130
137
  "worklet";
131
138
  const config: DefaultSpringConfig & SpringConfigInner = safeMergeConfigs<
@@ -175,6 +182,7 @@ export const withInternalSpring = ((
175
182
 
176
183
  if (config.skipAnimation) {
177
184
  animation.current = toValue;
185
+ animationProgress?.value.set(animationProgress.to);
178
186
  animation.lastTimestamp = 0;
179
187
  return true;
180
188
  }
@@ -182,6 +190,7 @@ export const withInternalSpring = ((
182
190
 
183
191
  const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
184
192
  animation.lastTimestamp = now;
193
+ animation.animationProgressElapsed += deltaTime;
185
194
 
186
195
  const t = deltaTime / 1000;
187
196
  const v0 = velocity as number;
@@ -212,6 +221,7 @@ export const withInternalSpring = ((
212
221
  if (isAnimationTerminatingCalculation(animation, config)) {
213
222
  animation.velocity = 0;
214
223
  animation.current = toValue;
224
+ animationProgress?.value.set(animationProgress.to);
215
225
  settled = true;
216
226
  animation.settled = true;
217
227
  // clear lastTimestamp to avoid using stale value by the next spring animation that starts after this one
@@ -221,6 +231,21 @@ export const withInternalSpring = ((
221
231
 
222
232
  notifySettled(animation);
223
233
 
234
+ if (animationProgress) {
235
+ const elapsedFraction =
236
+ animation.animationProgressDuration <= 0
237
+ ? MAX_UNFINISHED_ANIMATION_PROGRESS
238
+ : Math.min(
239
+ animation.animationProgressElapsed /
240
+ animation.animationProgressDuration,
241
+ MAX_UNFINISHED_ANIMATION_PROGRESS,
242
+ );
243
+ const nextAnimationProgress =
244
+ animationProgress.from +
245
+ (animationProgress.to - animationProgress.from) * elapsedFraction;
246
+ animationProgress.value.set(nextAnimationProgress);
247
+ }
248
+
224
249
  return false;
225
250
  }
226
251
 
@@ -307,6 +332,11 @@ export const withInternalSpring = ((
307
332
  config.mass,
308
333
  );
309
334
  animation.initialEnergy = initialEnergy;
335
+ animation.animationProgressElapsed = 0;
336
+ animation.animationProgressDuration = config.skipAnimation
337
+ ? 0
338
+ : calculateSpringAnimationDuration(animation, config);
339
+ animationProgress?.value.set(animationProgress.from);
310
340
 
311
341
  animation.lastTimestamp = previousAnimation?.lastTimestamp || now;
312
342
 
@@ -339,9 +369,14 @@ export const withInternalSpring = ((
339
369
  omega0: 0,
340
370
  omega1: 0,
341
371
  initialEnergy: 0,
372
+ animationProgressElapsed: 0,
373
+ animationProgressDuration: 0,
342
374
  reduceMotion: getReduceMotionForAnimation(config.reduceMotion),
343
375
  } as SpringAnimation;
344
376
 
345
377
  return animation;
378
+ }, () => {
379
+ "worklet";
380
+ animationProgress?.value.set(animationProgress.to);
346
381
  });
347
382
  }) as unknown as withSpringType;
@@ -29,6 +29,8 @@ export interface SpringAnimation extends Animation<SpringAnimation> {
29
29
  omega0: number;
30
30
  omega1: number;
31
31
  initialEnergy: number;
32
+ animationProgressElapsed: number;
33
+ animationProgressDuration: number;
32
34
  }
33
35
 
34
36
  export type InnerSpringAnimation = SpringAnimation;
@@ -362,6 +364,134 @@ export function underDampedSpringCalculations(
362
364
  return { position: underDampedPosition, velocity: underDampedVelocity };
363
365
  }
364
366
 
367
+ const MAX_SPRING_DURATION_SECONDS = 60;
368
+ const SPRING_DURATION_PRECISION_SECONDS = 0.0001;
369
+ const MAX_OVERSHOOT_DURATION_SAMPLES = 4096;
370
+
371
+ export function calculateSpringAnimationDuration(
372
+ animation: InnerSpringAnimation,
373
+ config: DefaultSpringConfig & SpringConfigInner,
374
+ ): number {
375
+ "worklet";
376
+ const startPosition = animation.current;
377
+ const startVelocity = animation.velocity;
378
+ const x0 = startPosition - animation.toValue;
379
+
380
+ const stateAt = (time: number) => {
381
+ "worklet";
382
+ return animation.zeta < 1
383
+ ? underDampedSpringCalculations(animation, {
384
+ zeta: animation.zeta,
385
+ v0: startVelocity,
386
+ x0,
387
+ omega0: animation.omega0,
388
+ omega1: animation.omega1,
389
+ t: time,
390
+ })
391
+ : criticallyDampedSpringCalculations(animation, {
392
+ v0: startVelocity,
393
+ x0,
394
+ omega0: animation.omega0,
395
+ t: time,
396
+ });
397
+ };
398
+
399
+ const terminatesByEnergyAt = (time: number) => {
400
+ "worklet";
401
+ if (animation.initialEnergy === 0) {
402
+ return true;
403
+ }
404
+
405
+ const state = stateAt(time);
406
+ const energy = getEnergy(
407
+ animation.toValue - state.position,
408
+ state.velocity,
409
+ config.stiffness,
410
+ config.mass,
411
+ );
412
+
413
+ return energy / animation.initialEnergy <= config.energyThreshold;
414
+ };
415
+
416
+ if (terminatesByEnergyAt(0)) {
417
+ return 0;
418
+ }
419
+
420
+ let lowerBound = 0;
421
+ let upperBound = 1 / 60;
422
+ while (
423
+ upperBound < MAX_SPRING_DURATION_SECONDS &&
424
+ !terminatesByEnergyAt(upperBound)
425
+ ) {
426
+ lowerBound = upperBound;
427
+ upperBound *= 2;
428
+ }
429
+ upperBound = Math.min(upperBound, MAX_SPRING_DURATION_SECONDS);
430
+
431
+ if (terminatesByEnergyAt(upperBound)) {
432
+ while (upperBound - lowerBound > SPRING_DURATION_PRECISION_SECONDS) {
433
+ const midpoint = (lowerBound + upperBound) / 2;
434
+ if (terminatesByEnergyAt(midpoint)) {
435
+ upperBound = midpoint;
436
+ } else {
437
+ lowerBound = midpoint;
438
+ }
439
+ }
440
+ }
441
+
442
+ const energyDuration = upperBound;
443
+ if (!config.overshootClamping || energyDuration === 0) {
444
+ return energyDuration * 1000;
445
+ }
446
+
447
+ const leftBound =
448
+ animation.startValue >= 0
449
+ ? animation.toValue
450
+ : animation.toValue + animation.startValue;
451
+ const rightBound = leftBound + Math.abs(animation.startValue);
452
+ const isOutsideBoundsAt = (time: number) => {
453
+ "worklet";
454
+ const { position } = stateAt(time);
455
+ return position < leftBound || position > rightBound;
456
+ };
457
+
458
+ const frequency = animation.zeta < 1 ? animation.omega1 : animation.omega0;
459
+ const sampleStep =
460
+ frequency > 0 ? Math.min(1 / 240, Math.PI / (frequency * 8)) : 1 / 240;
461
+ const sampleCount = Math.min(
462
+ MAX_OVERSHOOT_DURATION_SAMPLES,
463
+ Math.max(1, Math.ceil(energyDuration / sampleStep)),
464
+ );
465
+ const effectiveStep = energyDuration / sampleCount;
466
+ let previousTime = 0;
467
+
468
+ for (let index = 1; index <= sampleCount; index += 1) {
469
+ const time = effectiveStep * index;
470
+ if (!isOutsideBoundsAt(time)) {
471
+ previousTime = time;
472
+ continue;
473
+ }
474
+
475
+ let crossingLowerBound = previousTime;
476
+ let crossingUpperBound = time;
477
+ while (
478
+ crossingUpperBound - crossingLowerBound >
479
+ SPRING_DURATION_PRECISION_SECONDS
480
+ ) {
481
+ const midpoint = (crossingLowerBound + crossingUpperBound) / 2;
482
+ if (isOutsideBoundsAt(midpoint)) {
483
+ crossingUpperBound = midpoint;
484
+ } else {
485
+ crossingLowerBound = midpoint;
486
+ }
487
+ }
488
+
489
+ return crossingUpperBound * 1000;
490
+ }
491
+
492
+ return energyDuration * 1000;
493
+ }
494
+
365
495
  export function isAnimationTerminatingCalculation(
366
496
  animation: InnerSpringAnimation,
367
497
  config: DefaultSpringConfig & SpringConfigInner,
@@ -1,6 +1,14 @@
1
+ import type { SharedValue } from "react-native-reanimated";
2
+
1
3
  export type AnimationState = {
2
4
  finished: boolean;
3
5
  settled: boolean;
4
6
  };
5
7
 
6
8
  export type AnimationStateCallback = (state: AnimationState) => void;
9
+
10
+ export type AnimationProgressDriver = {
11
+ value: SharedValue<number>;
12
+ from: number;
13
+ to: number;
14
+ };
@@ -2,6 +2,7 @@ import type { MeasuredDimensions } from "react-native-reanimated";
2
2
  import { EPSILON } from "../../../../constants";
3
3
  import type { Layout } from "../../../../types/screen.types";
4
4
  import { computeContentTransformGeometry } from "../../helpers/geometry";
5
+ import type { ContentTransformGeometry } from "../../types/geometry";
5
6
  import type { BoundsAnchor } from "../../types/options";
6
7
  import {
7
8
  DRAG_DIRECTIONAL_SCALE_EXPONENT,
@@ -185,6 +186,22 @@ function getBoundsCenterY(bounds: MeasuredDimensions) {
185
186
  return bounds.pageY + bounds.height / 2;
186
187
  }
187
188
 
189
+ export function resolveRevealContentBaseTransformFromGeometry({
190
+ progress,
191
+ geometry,
192
+ }: {
193
+ progress: number;
194
+ geometry: ContentTransformGeometry;
195
+ }) {
196
+ "worklet";
197
+
198
+ return {
199
+ translateX: mixUnit(geometry.tx, 0, progress),
200
+ translateY: mixUnit(geometry.ty, 0, progress),
201
+ scale: mixUnit(geometry.s, 1, progress),
202
+ };
203
+ }
204
+
188
205
  export function resolveRevealContentBaseTransform({
189
206
  progress,
190
207
  sourceBounds,
@@ -209,11 +226,10 @@ export function resolveRevealContentBaseTransform({
209
226
  scaleMode: "uniform",
210
227
  });
211
228
 
212
- return {
213
- translateX: mixUnit(geometry.tx, 0, progress),
214
- translateY: mixUnit(geometry.ty, 0, progress),
215
- scale: mixUnit(geometry.s, 1, progress),
216
- };
229
+ return resolveRevealContentBaseTransformFromGeometry({
230
+ geometry,
231
+ progress,
232
+ });
217
233
  }
218
234
 
219
235
  export function resolveTrackedSourceElementTransform({
@@ -3,9 +3,12 @@ import {
3
3
  EPSILON,
4
4
  NAVIGATION_MASK_ELEMENT_STYLE_ID,
5
5
  } from "../../../../constants";
6
+ import { getVisualScrollAxisDelta } from "../../../../stores/scroll.store";
7
+ import type { ScrollMetadataState } from "../../../../types/gesture.types";
6
8
  import { createBoundsAccessorCore } from "../../helpers/create-bounds-accessor-core";
9
+ import { computeContentTransformGeometry } from "../../helpers/geometry";
7
10
  import { getSourceBorderRadius } from "../helpers";
8
- import { resolveRevealContentBaseTransform } from "../reveal/math";
11
+ import { resolveRevealContentBaseTransformFromGeometry } from "../reveal/math";
9
12
  import {
10
13
  ZOOM_BACKDROP_MAX_OPACITY,
11
14
  ZOOM_BACKGROUND_SCALE,
@@ -16,7 +19,7 @@ import {
16
19
  ZOOM_UNFOCUSED_ELEMENT_CLOSE_OPACITY_RANGE,
17
20
  ZOOM_UNFOCUSED_ELEMENT_OPEN_OPACITY_RANGE,
18
21
  } from "./config";
19
- import { resolveZoomDragState, resolveZoomTrackedGestureScale } from "./drag";
22
+ import { resolveZoomDragState } from "./drag";
20
23
  import {
21
24
  resolveZoomBackdropOpacity,
22
25
  resolveZoomPinchFocalOffset,
@@ -107,23 +110,31 @@ export function buildZoomStyles({
107
110
  return {};
108
111
  }
109
112
 
113
+ const isDismissing = active.gesture.dismissing === 1;
114
+ const dismissalTrackingGeometry = isDismissing
115
+ ? computeContentTransformGeometry({
116
+ start: sourceBounds,
117
+ end: trackingContentTarget,
118
+ entering: true,
119
+ dimensions: screenLayout,
120
+ anchor: zoomContentAnchor,
121
+ scaleMode: "uniform",
122
+ })
123
+ : null;
124
+ const dismissalCollapsedContentScale = dismissalTrackingGeometry
125
+ ? resolveRevealContentBaseTransformFromGeometry({
126
+ geometry: dismissalTrackingGeometry,
127
+ progress: 0,
128
+ }).scale
129
+ : 1;
110
130
  const drag = resolveZoomDragState({
111
131
  gesture: active.gesture,
112
132
  activeTransitionProgress,
113
133
  screenLayout,
114
- sourceBounds,
115
- trackingContentTarget,
134
+ collapsedContentScale: dismissalCollapsedContentScale,
116
135
  dragOptions: zoomOptions?.drag,
117
136
  });
118
137
 
119
- const trackedGestureScale = resolveZoomTrackedGestureScale({
120
- drag,
121
- activeTransitionProgress,
122
- screenLayout,
123
- sourceBounds,
124
- trackingContentTarget,
125
- });
126
-
127
138
  const focalGesture = drag.isDismissing
128
139
  ? active.gesture.handoff
129
140
  : active.gesture;
@@ -134,7 +145,7 @@ export function buildZoomStyles({
134
145
  ? resolveZoomPinchFocalOffset({
135
146
  gestureScale: drag.isDismissing
136
147
  ? focalGesture.scale
137
- : trackedGestureScale,
148
+ : drag.gestureScale,
138
149
  pinchOriginX: focalGesture.pinchOriginX,
139
150
  pinchOriginY: focalGesture.pinchOriginY,
140
151
  progress: focalProgress,
@@ -144,6 +155,28 @@ export function buildZoomStyles({
144
155
  : { x: 0, y: 0 };
145
156
 
146
157
  if (focused) {
158
+ const capturedSourceScroll = (
159
+ sourceBounds as typeof sourceBounds & {
160
+ scroll?: ScrollMetadataState | null;
161
+ }
162
+ ).scroll;
163
+ const liveSourceScroll = props.inactive?.layouts.scroll;
164
+ const sourceScrollWeight =
165
+ keepFocusedVisible && (active.entering || active.closing)
166
+ ? 1 - Math.min(Math.max(activeTransitionProgress, 0), 1)
167
+ : 0;
168
+ const sourceScrollDeltaX =
169
+ getVisualScrollAxisDelta(
170
+ liveSourceScroll,
171
+ capturedSourceScroll,
172
+ "horizontal",
173
+ ) * sourceScrollWeight;
174
+ const sourceScrollDeltaY =
175
+ getVisualScrollAxisDelta(
176
+ liveSourceScroll,
177
+ capturedSourceScroll,
178
+ "vertical",
179
+ ) * sourceScrollWeight;
147
180
  const sourceBorderRadius = getSourceBorderRadius(link);
148
181
  const navigationMaskEnabled = current.options.navigationMaskEnabled;
149
182
  const backdropOpacity = resolveZoomBackdropOpacity({
@@ -179,11 +212,13 @@ export function buildZoomStyles({
179
212
  const contentTranslateX =
180
213
  contentBaseTranslateX +
181
214
  drag.dragX +
182
- pinchFocalOffset.x * contentBaseScale;
215
+ pinchFocalOffset.x * contentBaseScale -
216
+ sourceScrollDeltaX;
183
217
  const contentTranslateY =
184
218
  contentBaseTranslateY +
185
219
  drag.dragY +
186
- pinchFocalOffset.y * contentBaseScale;
220
+ pinchFocalOffset.y * contentBaseScale -
221
+ sourceScrollDeltaY;
187
222
  const contentScale = drag.isDismissing
188
223
  ? drag.dismissContentScale
189
224
  : contentBaseScale * drag.gestureScale;
@@ -277,19 +312,39 @@ export function buildZoomStyles({
277
312
  };
278
313
  }
279
314
 
280
- const trackedContentBaseScale = resolveRevealContentBaseTransform({
281
- progress: activeTransitionProgress,
282
- sourceBounds,
283
- destinationBounds: trackingContentTarget,
284
- screenLayout,
285
- }).scale;
315
+ const trackingGeometry =
316
+ dismissalTrackingGeometry ??
317
+ computeContentTransformGeometry({
318
+ start: sourceBounds,
319
+ end: trackingContentTarget,
320
+ entering: true,
321
+ dimensions: screenLayout,
322
+ anchor: zoomContentAnchor,
323
+ scaleMode: "uniform",
324
+ });
325
+ const trackedContentBaseTransform =
326
+ resolveRevealContentBaseTransformFromGeometry({
327
+ geometry: trackingGeometry,
328
+ progress: activeTransitionProgress,
329
+ });
330
+ const collapsedContentScale = drag.isDismissing
331
+ ? dismissalCollapsedContentScale
332
+ : resolveRevealContentBaseTransformFromGeometry({
333
+ geometry: trackingGeometry,
334
+ progress: 0,
335
+ }).scale;
336
+ const trackedGestureScale = drag.isDismissing
337
+ ? drag.dismissContentScale / trackedContentBaseTransform.scale
338
+ : drag.gestureScale;
339
+ const trackedContentBaseScale = trackedContentBaseTransform.scale;
286
340
  const trackedDragX =
287
341
  drag.dragX + pinchFocalOffset.x * trackedContentBaseScale;
288
342
  const trackedDragY =
289
343
  drag.dragY + pinchFocalOffset.y * trackedContentBaseScale;
290
344
 
291
345
  const trackedSourceElement = resolveZoomTrackedSourceTransform({
292
- progress: activeTransitionProgress,
346
+ contentBaseTransform: trackedContentBaseTransform,
347
+ collapsedContentScale,
293
348
  sourceBounds,
294
349
  destinationBounds: trackingContentTarget,
295
350
  screenLayout,
@@ -298,7 +353,6 @@ export function buildZoomStyles({
298
353
  gestureScale: trackedGestureScale,
299
354
  parentScale: unfocusedContentScale,
300
355
  rotation: drag.rotation,
301
- anchor: zoomContentAnchor,
302
356
  });
303
357
 
304
358
  return {
@@ -1,11 +1,9 @@
1
- import type { MeasuredDimensions } from "react-native-reanimated";
2
1
  import { EPSILON } from "../../../../constants";
3
2
  import type {
4
3
  BoundsInterpolationProps,
5
4
  BoundsNavigationZoomDragOptions,
6
5
  } from "../../../../types/bounds.types";
7
6
  import type { Layout } from "../../../../types/screen.types";
8
- import { resolveRevealContentBaseTransform } from "../reveal/math";
9
7
  import { ZOOM_DISMISS_VELOCITY_DEPTH } from "./config";
10
8
 
11
9
  const ZOOM_DRAG_SCALE_EXPONENT = 2;
@@ -169,15 +167,13 @@ export function resolveZoomDragState({
169
167
  gesture,
170
168
  activeTransitionProgress,
171
169
  screenLayout,
172
- sourceBounds,
173
- trackingContentTarget,
170
+ collapsedContentScale,
174
171
  dragOptions,
175
172
  }: {
176
173
  gesture: ZoomGesture;
177
174
  activeTransitionProgress: number;
178
175
  screenLayout: Layout;
179
- sourceBounds: MeasuredDimensions;
180
- trackingContentTarget: MeasuredDimensions;
176
+ collapsedContentScale: number;
181
177
  dragOptions?: BoundsNavigationZoomDragOptions;
182
178
  }): ZoomDragState {
183
179
  "worklet";
@@ -266,16 +262,10 @@ export function resolveZoomDragState({
266
262
  let dismissContentScale = gestureScale;
267
263
 
268
264
  if (isDismissing) {
269
- const targetContentScale = resolveRevealContentBaseTransform({
270
- progress: 0,
271
- sourceBounds,
272
- destinationBounds: trackingContentTarget,
273
- screenLayout,
274
- }).scale;
275
265
  dismissContentScale = resolveZoomDismissContentScale({
276
266
  transitionRemaining: activeTransitionProgress,
277
267
  releaseScale: gestureScale,
278
- targetScale: targetContentScale,
268
+ targetScale: collapsedContentScale,
279
269
  velocity: gestureHandoff.velocity,
280
270
  velocityDepth:
281
271
  ZOOM_DISMISS_VELOCITY_DEPTH *
@@ -296,32 +286,3 @@ export function resolveZoomDragState({
296
286
  rotation,
297
287
  };
298
288
  }
299
-
300
- export function resolveZoomTrackedGestureScale({
301
- drag,
302
- activeTransitionProgress,
303
- screenLayout,
304
- sourceBounds,
305
- trackingContentTarget,
306
- }: {
307
- drag: ZoomDragState;
308
- activeTransitionProgress: number;
309
- screenLayout: Layout;
310
- sourceBounds: MeasuredDimensions;
311
- trackingContentTarget: MeasuredDimensions;
312
- }) {
313
- "worklet";
314
-
315
- if (!drag.isDismissing) {
316
- return drag.gestureScale;
317
- }
318
-
319
- const trackedContentBaseScale = resolveRevealContentBaseTransform({
320
- progress: activeTransitionProgress,
321
- sourceBounds,
322
- destinationBounds: trackingContentTarget,
323
- screenLayout,
324
- }).scale;
325
-
326
- return drag.dismissContentScale / trackedContentBaseScale;
327
- }
@@ -1,11 +1,7 @@
1
1
  import type { MeasuredDimensions } from "react-native-reanimated";
2
2
  import { EPSILON } from "../../../../constants";
3
3
  import type { Layout } from "../../../../types/screen.types";
4
- import type { BoundsAnchor } from "../../types/options";
5
- import {
6
- resolveRevealContentBaseTransform,
7
- resolveTrackedSourceElementTransform,
8
- } from "../reveal/math";
4
+ import { resolveTrackedSourceElementTransform } from "../reveal/math";
9
5
 
10
6
  export function resolveZoomBackdropOpacity({
11
7
  transitionProgress,
@@ -65,44 +61,34 @@ export function resolveZoomPinchFocalOffset({
65
61
  }
66
62
 
67
63
  export function resolveZoomTrackedSourceTransform({
68
- progress,
69
64
  sourceBounds,
70
65
  destinationBounds,
71
66
  screenLayout,
67
+ contentBaseTransform,
68
+ collapsedContentScale,
72
69
  dragX,
73
70
  dragY,
74
71
  gestureScale,
75
72
  parentScale,
76
73
  rotation = 0,
77
- anchor,
78
74
  }: {
79
- progress: number;
80
75
  sourceBounds: MeasuredDimensions;
81
76
  destinationBounds: MeasuredDimensions;
82
77
  screenLayout: Layout;
78
+ contentBaseTransform: {
79
+ translateX: number;
80
+ translateY: number;
81
+ scale: number;
82
+ };
83
+ collapsedContentScale: number;
83
84
  dragX: number;
84
85
  dragY: number;
85
86
  gestureScale: number;
86
87
  parentScale: number;
87
88
  rotation?: number;
88
- anchor?: BoundsAnchor;
89
89
  }) {
90
90
  "worklet";
91
91
 
92
- const contentBaseTransform = resolveRevealContentBaseTransform({
93
- progress,
94
- sourceBounds,
95
- destinationBounds,
96
- screenLayout,
97
- anchor,
98
- });
99
- const collapsedContentScale = resolveRevealContentBaseTransform({
100
- progress: 0,
101
- sourceBounds,
102
- destinationBounds,
103
- screenLayout,
104
- anchor,
105
- }).scale;
106
92
  const contentScale = contentBaseTransform.scale * gestureScale;
107
93
  const safeCollapsedContentScale = Math.max(
108
94
  Math.abs(collapsedContentScale),
@@ -1,32 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.useRegisterTarget = void 0;
7
- var _react = require("react");
8
- var _logger = require("../../../utils/logger");
9
- var _boundaryRoot = require("../providers/boundary-root.provider");
10
- const useRegisterTarget = ({
11
- targetAnimatedRef,
12
- preparedStyles,
13
- measurementRef
14
- }) => {
15
- const rootContext = (0, _boundaryRoot.useBoundaryRootContext)();
16
- const registerTargetRef = rootContext?.registerTargetRef;
17
- const unregisterTargetRef = rootContext?.unregisterTargetRef;
18
- (0, _react.useLayoutEffect)(() => {
19
- if (!registerTargetRef || !unregisterTargetRef) {
20
- if (__DEV__) {
21
- _logger.logger.warn(_boundaryRoot.TARGET_OUTSIDE_ROOT_WARNING);
22
- }
23
- return;
24
- }
25
- registerTargetRef(targetAnimatedRef, preparedStyles, measurementRef);
26
- return () => {
27
- unregisterTargetRef(targetAnimatedRef);
28
- };
29
- }, [registerTargetRef, unregisterTargetRef, targetAnimatedRef, preparedStyles, measurementRef]);
30
- };
31
- exports.useRegisterTarget = useRegisterTarget;
32
- //# sourceMappingURL=use-register-target.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["_react","require","_logger","_boundaryRoot","useRegisterTarget","targetAnimatedRef","preparedStyles","measurementRef","rootContext","useBoundaryRootContext","registerTargetRef","unregisterTargetRef","useLayoutEffect","__DEV__","logger","warn","TARGET_OUTSIDE_ROOT_WARNING","exports"],"sourceRoot":"../../../../../src","sources":["components/boundary/hooks/use-register-target.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAGA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,aAAA,GAAAF,OAAA;AAWO,MAAMG,iBAAiB,GAAGA,CAAC;EACjCC,iBAAiB;EACjBC,cAAc;EACdC;AACoB,CAAC,KAAK;EAC1B,MAAMC,WAAW,GAAG,IAAAC,oCAAsB,EAAC,CAAC;EAC5C,MAAMC,iBAAiB,GAAGF,WAAW,EAAEE,iBAAiB;EACxD,MAAMC,mBAAmB,GAAGH,WAAW,EAAEG,mBAAmB;EAC5D,IAAAC,sBAAe,EAAC,MAAM;IACrB,IAAI,CAACF,iBAAiB,IAAI,CAACC,mBAAmB,EAAE;MAC/C,IAAIE,OAAO,EAAE;QACZC,cAAM,CAACC,IAAI,CAACC,yCAA2B,CAAC;MACzC;MACA;IACD;IAEAN,iBAAiB,CAACL,iBAAiB,EAAEC,cAAc,EAAEC,cAAc,CAAC;IACpE,OAAO,MAAM;MACZI,mBAAmB,CAACN,iBAAiB,CAAC;IACvC,CAAC;EACF,CAAC,EAAE,CACFK,iBAAiB,EACjBC,mBAAmB,EACnBN,iBAAiB,EACjBC,cAAc,EACdC,cAAc,CACd,CAAC;AACH,CAAC;AAACU,OAAA,CAAAb,iBAAA,GAAAA,iBAAA","ignoreList":[]}