react-native-screen-transitions 4.0.0-alpha.1 → 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 (398) 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/hooks/use-boundary-content-portal-attachment.js +47 -188
  14. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  15. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js +21 -13
  16. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js.map +1 -1
  17. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js +1 -12
  18. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js.map +1 -1
  19. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +40 -33
  20. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +1 -1
  21. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/offset-style.js +3 -4
  22. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +1 -1
  23. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +46 -131
  24. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  25. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js +45 -9
  26. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js.map +1 -1
  27. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +1 -1
  28. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js +2 -29
  29. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +1 -1
  30. package/lib/commonjs/components/boundary/portal/utils/handoff-target.js +33 -0
  31. package/lib/commonjs/components/boundary/portal/utils/handoff-target.js.map +1 -0
  32. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js +19 -15
  33. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  34. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js +1 -10
  35. package/lib/commonjs/components/boundary/portal/utils/teleport-control.js.map +1 -1
  36. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js +18 -36
  37. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js.map +1 -1
  38. package/lib/commonjs/components/boundary/utils/refresh-signals.js +7 -0
  39. package/lib/commonjs/components/boundary/utils/refresh-signals.js.map +1 -1
  40. package/lib/commonjs/components/boundary/utils/resolve-boundary-target.js +29 -0
  41. package/lib/commonjs/components/boundary/utils/resolve-boundary-target.js.map +1 -0
  42. package/lib/commonjs/components/masked-view.js +9 -1
  43. package/lib/commonjs/components/masked-view.js.map +1 -1
  44. package/lib/commonjs/components/screen-container/layers/backdrop.js +3 -1
  45. package/lib/commonjs/components/screen-container/layers/backdrop.js.map +1 -1
  46. package/lib/commonjs/components/screen-container/layers/maybe-masked-navigation-container.js +9 -1
  47. package/lib/commonjs/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  48. package/lib/commonjs/components/screen-lifecycle/hooks/use-transition-start-controller.js +2 -0
  49. package/lib/commonjs/components/screen-lifecycle/hooks/use-transition-start-controller.js.map +1 -1
  50. package/lib/commonjs/navigators/react-navigation/index.js +7 -8
  51. package/lib/commonjs/navigators/react-navigation/index.js.map +1 -1
  52. package/lib/commonjs/providers/helpers/measured-bounds-writes.js +4 -1
  53. package/lib/commonjs/providers/helpers/measured-bounds-writes.js.map +1 -1
  54. package/lib/commonjs/providers/screen/gestures/gestures.provider.js +2 -8
  55. package/lib/commonjs/providers/screen/gestures/gestures.provider.js.map +1 -1
  56. package/lib/commonjs/providers/screen/gestures/pan/behavior/pan-lifecycle.js +1 -0
  57. package/lib/commonjs/providers/screen/gestures/pan/behavior/pan-lifecycle.js.map +1 -1
  58. package/lib/commonjs/providers/screen/gestures/pinch/activation/use-pinch-activation.js +37 -3
  59. package/lib/commonjs/providers/screen/gestures/pinch/activation/use-pinch-activation.js.map +1 -1
  60. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js +1 -0
  61. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js.map +1 -1
  62. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-release.js +3 -2
  63. package/lib/commonjs/providers/screen/gestures/pinch/behavior/pinch-release.js.map +1 -1
  64. package/lib/commonjs/providers/screen/gestures/types.js.map +1 -1
  65. package/lib/commonjs/providers/screen/styles/helpers/transition-visual-state.js +42 -0
  66. package/lib/commonjs/providers/screen/styles/helpers/transition-visual-state.js.map +1 -0
  67. package/lib/commonjs/providers/screen/styles/helpers/visibility-gate.js +11 -5
  68. package/lib/commonjs/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  69. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js +23 -10
  70. package/lib/commonjs/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  71. package/lib/commonjs/providers/screen/styles/hooks/use-maybe-block-visibility.js +10 -8
  72. package/lib/commonjs/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  73. package/lib/commonjs/stores/bounds/internals/links.js +4 -4
  74. package/lib/commonjs/stores/bounds/internals/links.js.map +1 -1
  75. package/lib/commonjs/stores/scroll.store.js +20 -2
  76. package/lib/commonjs/stores/scroll.store.js.map +1 -1
  77. package/lib/commonjs/stores/system.store.js +2 -0
  78. package/lib/commonjs/stores/system.store.js.map +1 -1
  79. package/lib/commonjs/utils/animation/animate-to-progress.js +23 -1
  80. package/lib/commonjs/utils/animation/animate-to-progress.js.map +1 -1
  81. package/lib/commonjs/utils/animation/animate.js +14 -2
  82. package/lib/commonjs/utils/animation/animate.js.map +1 -1
  83. package/lib/commonjs/utils/animation/spring/spring.js +22 -2
  84. package/lib/commonjs/utils/animation/spring/spring.js.map +1 -1
  85. package/lib/commonjs/utils/animation/spring/springUtils.js +96 -0
  86. package/lib/commonjs/utils/animation/spring/springUtils.js.map +1 -1
  87. package/lib/commonjs/utils/animation/state.js +4 -0
  88. package/lib/commonjs/utils/bounds/navigation/reveal/math.js +17 -5
  89. package/lib/commonjs/utils/bounds/navigation/reveal/math.js.map +1 -1
  90. package/lib/commonjs/utils/bounds/navigation/zoom/build.js +44 -20
  91. package/lib/commonjs/utils/bounds/navigation/zoom/build.js.map +1 -1
  92. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js +2 -31
  93. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js.map +1 -1
  94. package/lib/commonjs/utils/bounds/navigation/zoom/helpers.js +3 -17
  95. package/lib/commonjs/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  96. package/lib/module/animation/snap-to.js +2 -0
  97. package/lib/module/animation/snap-to.js.map +1 -1
  98. package/lib/module/components/boundary/components/boundary-target.js +19 -20
  99. package/lib/module/components/boundary/components/boundary-target.js.map +1 -1
  100. package/lib/module/components/boundary/create-boundary-component.js +17 -3
  101. package/lib/module/components/boundary/create-boundary-component.js.map +1 -1
  102. package/lib/module/components/boundary/hooks/lifecycles/use-refresh-boundary.js +5 -0
  103. package/lib/module/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -1
  104. package/lib/module/components/boundary/hooks/use-boundary-measurement.js +1 -3
  105. package/lib/module/components/boundary/hooks/use-boundary-measurement.js.map +1 -1
  106. package/lib/module/components/boundary/index.js +3 -2
  107. package/lib/module/components/boundary/index.js.map +1 -1
  108. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +49 -190
  109. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +1 -1
  110. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js +21 -13
  111. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js.map +1 -1
  112. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js +2 -13
  113. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js.map +1 -1
  114. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +43 -36
  115. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +1 -1
  116. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/offset-style.js +3 -4
  117. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +1 -1
  118. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +50 -135
  119. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +1 -1
  120. package/lib/module/components/boundary/portal/components/boundary-portal/index.js +44 -9
  121. package/lib/module/components/boundary/portal/components/boundary-portal/index.js.map +1 -1
  122. package/lib/module/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +1 -1
  123. package/lib/module/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js +1 -27
  124. package/lib/module/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +1 -1
  125. package/lib/module/components/boundary/portal/utils/handoff-target.js +28 -0
  126. package/lib/module/components/boundary/portal/utils/handoff-target.js.map +1 -0
  127. package/lib/module/components/boundary/portal/utils/resolve-portal.js +19 -15
  128. package/lib/module/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  129. package/lib/module/components/boundary/portal/utils/teleport-control.js +0 -8
  130. package/lib/module/components/boundary/portal/utils/teleport-control.js.map +1 -1
  131. package/lib/module/components/boundary/providers/boundary-root.provider.js +19 -37
  132. package/lib/module/components/boundary/providers/boundary-root.provider.js.map +1 -1
  133. package/lib/module/components/boundary/utils/refresh-signals.js +7 -0
  134. package/lib/module/components/boundary/utils/refresh-signals.js.map +1 -1
  135. package/lib/module/components/boundary/utils/resolve-boundary-target.js +24 -0
  136. package/lib/module/components/boundary/utils/resolve-boundary-target.js.map +1 -0
  137. package/lib/module/components/masked-view.js +10 -2
  138. package/lib/module/components/masked-view.js.map +1 -1
  139. package/lib/module/components/screen-container/layers/backdrop.js +3 -1
  140. package/lib/module/components/screen-container/layers/backdrop.js.map +1 -1
  141. package/lib/module/components/screen-container/layers/maybe-masked-navigation-container.js +10 -2
  142. package/lib/module/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  143. package/lib/module/components/screen-lifecycle/hooks/use-transition-start-controller.js +2 -0
  144. package/lib/module/components/screen-lifecycle/hooks/use-transition-start-controller.js.map +1 -1
  145. package/lib/module/navigators/react-navigation/index.js +4 -6
  146. package/lib/module/navigators/react-navigation/index.js.map +1 -1
  147. package/lib/module/providers/helpers/measured-bounds-writes.js +4 -1
  148. package/lib/module/providers/helpers/measured-bounds-writes.js.map +1 -1
  149. package/lib/module/providers/screen/gestures/gestures.provider.js +2 -8
  150. package/lib/module/providers/screen/gestures/gestures.provider.js.map +1 -1
  151. package/lib/module/providers/screen/gestures/pan/behavior/pan-lifecycle.js +1 -0
  152. package/lib/module/providers/screen/gestures/pan/behavior/pan-lifecycle.js.map +1 -1
  153. package/lib/module/providers/screen/gestures/pinch/activation/use-pinch-activation.js +35 -2
  154. package/lib/module/providers/screen/gestures/pinch/activation/use-pinch-activation.js.map +1 -1
  155. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js +1 -0
  156. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-lifecycle.js.map +1 -1
  157. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-release.js +3 -2
  158. package/lib/module/providers/screen/gestures/pinch/behavior/pinch-release.js.map +1 -1
  159. package/lib/module/providers/screen/gestures/types.js.map +1 -1
  160. package/lib/module/providers/screen/styles/helpers/transition-visual-state.js +35 -0
  161. package/lib/module/providers/screen/styles/helpers/transition-visual-state.js.map +1 -0
  162. package/lib/module/providers/screen/styles/helpers/visibility-gate.js +11 -5
  163. package/lib/module/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  164. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js +23 -10
  165. package/lib/module/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  166. package/lib/module/providers/screen/styles/hooks/use-maybe-block-visibility.js +10 -8
  167. package/lib/module/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  168. package/lib/module/stores/bounds/internals/links.js +4 -4
  169. package/lib/module/stores/bounds/internals/links.js.map +1 -1
  170. package/lib/module/stores/scroll.store.js +17 -0
  171. package/lib/module/stores/scroll.store.js.map +1 -1
  172. package/lib/module/stores/system.store.js +2 -0
  173. package/lib/module/stores/system.store.js.map +1 -1
  174. package/lib/module/utils/animation/animate-to-progress.js +21 -0
  175. package/lib/module/utils/animation/animate-to-progress.js.map +1 -1
  176. package/lib/module/utils/animation/animate.js +14 -2
  177. package/lib/module/utils/animation/animate.js.map +1 -1
  178. package/lib/module/utils/animation/spring/spring.js +23 -3
  179. package/lib/module/utils/animation/spring/spring.js.map +1 -1
  180. package/lib/module/utils/animation/spring/springUtils.js +95 -0
  181. package/lib/module/utils/animation/spring/springUtils.js.map +1 -1
  182. package/lib/module/utils/animation/state.js +2 -0
  183. package/lib/module/utils/bounds/navigation/reveal/math.js +16 -5
  184. package/lib/module/utils/bounds/navigation/reveal/math.js.map +1 -1
  185. package/lib/module/utils/bounds/navigation/zoom/build.js +46 -22
  186. package/lib/module/utils/bounds/navigation/zoom/build.js.map +1 -1
  187. package/lib/module/utils/bounds/navigation/zoom/drag.js +2 -30
  188. package/lib/module/utils/bounds/navigation/zoom/drag.js.map +1 -1
  189. package/lib/module/utils/bounds/navigation/zoom/helpers.js +4 -18
  190. package/lib/module/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  191. package/lib/typescript/animation/snap-to.d.ts.map +1 -1
  192. package/lib/typescript/components/boundary/components/boundary-target.d.ts +2 -1
  193. package/lib/typescript/components/boundary/components/boundary-target.d.ts.map +1 -1
  194. package/lib/typescript/components/boundary/create-boundary-component.d.ts.map +1 -1
  195. package/lib/typescript/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts.map +1 -1
  196. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts +3 -4
  197. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts.map +1 -1
  198. package/lib/typescript/components/boundary/index.d.ts +6 -9
  199. package/lib/typescript/components/boundary/index.d.ts.map +1 -1
  200. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts +1 -3
  201. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +1 -1
  202. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/index.d.ts.map +1 -1
  203. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/host.d.ts.map +1 -1
  204. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.d.ts.map +1 -1
  205. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/offset-style.d.ts +1 -10
  206. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/offset-style.d.ts.map +1 -1
  207. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts +1 -3
  208. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +1 -1
  209. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts +2 -2
  210. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts +2 -2
  211. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts.map +1 -1
  212. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/host-registry.store.d.ts +0 -1
  213. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/host-registry.store.d.ts.map +1 -1
  214. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.d.ts +1 -10
  215. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.d.ts.map +1 -1
  216. package/lib/typescript/components/boundary/portal/utils/handoff-target.d.ts +12 -0
  217. package/lib/typescript/components/boundary/portal/utils/handoff-target.d.ts.map +1 -0
  218. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts +2 -3
  219. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -1
  220. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts +0 -4
  221. package/lib/typescript/components/boundary/portal/utils/teleport-control.d.ts.map +1 -1
  222. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts +8 -12
  223. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  224. package/lib/typescript/components/boundary/utils/refresh-signals.d.ts +1 -0
  225. package/lib/typescript/components/boundary/utils/refresh-signals.d.ts.map +1 -1
  226. package/lib/typescript/components/boundary/utils/resolve-boundary-target.d.ts +12 -0
  227. package/lib/typescript/components/boundary/utils/resolve-boundary-target.d.ts.map +1 -0
  228. package/lib/typescript/components/create-transition-aware-component.d.ts +5 -6
  229. package/lib/typescript/components/create-transition-aware-component.d.ts.map +1 -1
  230. package/lib/typescript/components/masked-view.d.ts.map +1 -1
  231. package/lib/typescript/components/screen-container/layers/backdrop.d.ts.map +1 -1
  232. package/lib/typescript/components/screen-container/layers/maybe-masked-navigation-container.d.ts.map +1 -1
  233. package/lib/typescript/components/screen-lifecycle/hooks/use-transition-start-controller.d.ts.map +1 -1
  234. package/lib/typescript/index.d.ts +650 -702
  235. package/lib/typescript/index.d.ts.map +1 -1
  236. package/lib/typescript/navigators/react-navigation/index.d.ts +6 -17
  237. package/lib/typescript/navigators/react-navigation/index.d.ts.map +1 -1
  238. package/lib/typescript/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  239. package/lib/typescript/providers/screen/gestures/gestures.provider.d.ts.map +1 -1
  240. package/lib/typescript/providers/screen/gestures/pan/behavior/pan-lifecycle.d.ts.map +1 -1
  241. package/lib/typescript/providers/screen/gestures/pinch/activation/use-pinch-activation.d.ts +2 -1
  242. package/lib/typescript/providers/screen/gestures/pinch/activation/use-pinch-activation.d.ts.map +1 -1
  243. package/lib/typescript/providers/screen/gestures/pinch/behavior/pinch-lifecycle.d.ts.map +1 -1
  244. package/lib/typescript/providers/screen/gestures/pinch/behavior/pinch-release.d.ts.map +1 -1
  245. package/lib/typescript/providers/screen/gestures/types.d.ts +1 -9
  246. package/lib/typescript/providers/screen/gestures/types.d.ts.map +1 -1
  247. package/lib/typescript/providers/screen/styles/helpers/transition-visual-state.d.ts +18 -0
  248. package/lib/typescript/providers/screen/styles/helpers/transition-visual-state.d.ts.map +1 -0
  249. package/lib/typescript/providers/screen/styles/helpers/visibility-gate.d.ts +2 -2
  250. package/lib/typescript/providers/screen/styles/helpers/visibility-gate.d.ts.map +1 -1
  251. package/lib/typescript/providers/screen/styles/hooks/slot-resolvers.d.ts +4 -4
  252. package/lib/typescript/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -1
  253. package/lib/typescript/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  254. package/lib/typescript/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +2 -2
  255. package/lib/typescript/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  256. package/lib/typescript/stores/bounds/internals/links.d.ts +1 -1
  257. package/lib/typescript/stores/bounds/internals/links.d.ts.map +1 -1
  258. package/lib/typescript/stores/scroll.store.d.ts +7 -0
  259. package/lib/typescript/stores/scroll.store.d.ts.map +1 -1
  260. package/lib/typescript/stores/system.store.d.ts +5 -0
  261. package/lib/typescript/stores/system.store.d.ts.map +1 -1
  262. package/lib/typescript/utils/animation/animate-to-progress.d.ts +6 -1
  263. package/lib/typescript/utils/animation/animate-to-progress.d.ts.map +1 -1
  264. package/lib/typescript/utils/animation/animate.d.ts +2 -2
  265. package/lib/typescript/utils/animation/animate.d.ts.map +1 -1
  266. package/lib/typescript/utils/animation/spring/spring.d.ts +2 -2
  267. package/lib/typescript/utils/animation/spring/spring.d.ts.map +1 -1
  268. package/lib/typescript/utils/animation/spring/springUtils.d.ts +3 -0
  269. package/lib/typescript/utils/animation/spring/springUtils.d.ts.map +1 -1
  270. package/lib/typescript/utils/animation/state.d.ts +6 -0
  271. package/lib/typescript/utils/animation/state.d.ts.map +1 -1
  272. package/lib/typescript/utils/bounds/navigation/reveal/math.d.ts +9 -0
  273. package/lib/typescript/utils/bounds/navigation/reveal/math.d.ts.map +1 -1
  274. package/lib/typescript/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  275. package/lib/typescript/utils/bounds/navigation/zoom/drag.d.ts +2 -11
  276. package/lib/typescript/utils/bounds/navigation/zoom/drag.d.ts.map +1 -1
  277. package/lib/typescript/utils/bounds/navigation/zoom/helpers.d.ts +7 -4
  278. package/lib/typescript/utils/bounds/navigation/zoom/helpers.d.ts.map +1 -1
  279. package/package.json +1 -1
  280. package/src/animation/snap-to.ts +5 -0
  281. package/src/components/boundary/components/boundary-target.tsx +37 -23
  282. package/src/components/boundary/create-boundary-component.tsx +29 -3
  283. package/src/components/boundary/hooks/lifecycles/use-refresh-boundary.ts +11 -0
  284. package/src/components/boundary/hooks/use-boundary-measurement.ts +3 -9
  285. package/src/components/boundary/index.tsx +4 -8
  286. package/src/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +73 -276
  287. package/src/components/boundary/portal/components/boundary-content-portal/index.tsx +31 -12
  288. package/src/components/boundary/portal/components/boundary-portal/components/host.tsx +2 -12
  289. package/src/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.tsx +64 -62
  290. package/src/components/boundary/portal/components/boundary-portal/helpers/offset-style.ts +2 -9
  291. package/src/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +73 -187
  292. package/src/components/boundary/portal/components/boundary-portal/index.tsx +72 -12
  293. package/src/components/boundary/portal/components/boundary-portal/stores/host-registry.store.ts +0 -1
  294. package/src/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.ts +2 -39
  295. package/src/components/boundary/portal/utils/handoff-target.ts +48 -0
  296. package/src/components/boundary/portal/utils/resolve-portal.ts +26 -18
  297. package/src/components/boundary/portal/utils/teleport-control.ts +0 -12
  298. package/src/components/boundary/providers/boundary-root.provider.tsx +28 -80
  299. package/src/components/boundary/utils/refresh-signals.ts +8 -0
  300. package/src/components/boundary/utils/resolve-boundary-target.tsx +39 -0
  301. package/src/components/masked-view.tsx +20 -4
  302. package/src/components/screen-container/layers/backdrop.tsx +3 -1
  303. package/src/components/screen-container/layers/maybe-masked-navigation-container.tsx +14 -4
  304. package/src/components/screen-lifecycle/hooks/use-transition-start-controller.ts +2 -0
  305. package/src/navigators/react-navigation/index.tsx +4 -48
  306. package/src/providers/helpers/measured-bounds-writes.ts +1 -0
  307. package/src/providers/screen/gestures/gestures.provider.tsx +2 -10
  308. package/src/providers/screen/gestures/pan/behavior/pan-lifecycle.ts +1 -0
  309. package/src/providers/screen/gestures/pinch/activation/use-pinch-activation.ts +74 -3
  310. package/src/providers/screen/gestures/pinch/behavior/pinch-lifecycle.ts +1 -0
  311. package/src/providers/screen/gestures/pinch/behavior/pinch-release.ts +2 -4
  312. package/src/providers/screen/gestures/types.ts +0 -14
  313. package/src/providers/screen/styles/helpers/transition-visual-state.ts +44 -0
  314. package/src/providers/screen/styles/helpers/visibility-gate.ts +17 -7
  315. package/src/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +30 -15
  316. package/src/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +14 -13
  317. package/src/stores/bounds/internals/links.ts +13 -2
  318. package/src/stores/scroll.store.ts +23 -0
  319. package/src/stores/system.store.ts +8 -0
  320. package/src/utils/animation/animate-to-progress.ts +59 -28
  321. package/src/utils/animation/animate.ts +18 -2
  322. package/src/utils/animation/spring/spring.ts +36 -1
  323. package/src/utils/animation/spring/springUtils.ts +130 -0
  324. package/src/utils/animation/state.ts +8 -0
  325. package/src/utils/bounds/navigation/reveal/math.ts +21 -5
  326. package/src/utils/bounds/navigation/zoom/build.ts +77 -23
  327. package/src/utils/bounds/navigation/zoom/drag.ts +3 -42
  328. package/src/utils/bounds/navigation/zoom/helpers.ts +9 -23
  329. package/lib/commonjs/components/boundary/hooks/use-register-target.js +0 -32
  330. package/lib/commonjs/components/boundary/hooks/use-register-target.js.map +0 -1
  331. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-slot.js +0 -52
  332. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-slot.js.map +0 -1
  333. package/lib/commonjs/components/boundary/portal/utils/ownership.js +0 -220
  334. package/lib/commonjs/components/boundary/portal/utils/ownership.js.map +0 -1
  335. package/lib/commonjs/components/boundary/portal/utils/shallow-equal.js +0 -29
  336. package/lib/commonjs/components/boundary/portal/utils/shallow-equal.js.map +0 -1
  337. package/lib/commonjs/components/boundary/portal/utils/visible-host.js +0 -25
  338. package/lib/commonjs/components/boundary/portal/utils/visible-host.js.map +0 -1
  339. package/lib/commonjs/providers/screen/gestures/rotation/activation/use-rotation-activation.js +0 -64
  340. package/lib/commonjs/providers/screen/gestures/rotation/activation/use-rotation-activation.js.map +0 -1
  341. package/lib/commonjs/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js +0 -21
  342. package/lib/commonjs/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js.map +0 -1
  343. package/lib/commonjs/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js +0 -29
  344. package/lib/commonjs/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js.map +0 -1
  345. package/lib/commonjs/providers/screen/gestures/rotation/use-build-rotation-gesture.js +0 -38
  346. package/lib/commonjs/providers/screen/gestures/rotation/use-build-rotation-gesture.js.map +0 -1
  347. package/lib/commonjs/providers/screen/styles/helpers/opening-phase.js +0 -32
  348. package/lib/commonjs/providers/screen/styles/helpers/opening-phase.js.map +0 -1
  349. package/lib/module/components/boundary/hooks/use-register-target.js +0 -27
  350. package/lib/module/components/boundary/hooks/use-register-target.js.map +0 -1
  351. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-slot.js +0 -47
  352. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-slot.js.map +0 -1
  353. package/lib/module/components/boundary/portal/utils/ownership.js +0 -213
  354. package/lib/module/components/boundary/portal/utils/ownership.js.map +0 -1
  355. package/lib/module/components/boundary/portal/utils/shallow-equal.js +0 -24
  356. package/lib/module/components/boundary/portal/utils/shallow-equal.js.map +0 -1
  357. package/lib/module/components/boundary/portal/utils/visible-host.js +0 -20
  358. package/lib/module/components/boundary/portal/utils/visible-host.js.map +0 -1
  359. package/lib/module/providers/screen/gestures/rotation/activation/use-rotation-activation.js +0 -59
  360. package/lib/module/providers/screen/gestures/rotation/activation/use-rotation-activation.js.map +0 -1
  361. package/lib/module/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js +0 -15
  362. package/lib/module/providers/screen/gestures/rotation/behavior/rotation-lifecycle.js.map +0 -1
  363. package/lib/module/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js +0 -24
  364. package/lib/module/providers/screen/gestures/rotation/behavior/use-rotation-behavior.js.map +0 -1
  365. package/lib/module/providers/screen/gestures/rotation/use-build-rotation-gesture.js +0 -33
  366. package/lib/module/providers/screen/gestures/rotation/use-build-rotation-gesture.js.map +0 -1
  367. package/lib/module/providers/screen/styles/helpers/opening-phase.js +0 -26
  368. package/lib/module/providers/screen/styles/helpers/opening-phase.js.map +0 -1
  369. package/lib/typescript/components/boundary/hooks/use-register-target.d.ts +0 -10
  370. package/lib/typescript/components/boundary/hooks/use-register-target.d.ts.map +0 -1
  371. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-slot.d.ts +0 -13
  372. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-slot.d.ts.map +0 -1
  373. package/lib/typescript/components/boundary/portal/utils/ownership.d.ts +0 -34
  374. package/lib/typescript/components/boundary/portal/utils/ownership.d.ts.map +0 -1
  375. package/lib/typescript/components/boundary/portal/utils/shallow-equal.d.ts +0 -8
  376. package/lib/typescript/components/boundary/portal/utils/shallow-equal.d.ts.map +0 -1
  377. package/lib/typescript/components/boundary/portal/utils/visible-host.d.ts +0 -8
  378. package/lib/typescript/components/boundary/portal/utils/visible-host.d.ts.map +0 -1
  379. package/lib/typescript/providers/screen/gestures/rotation/activation/use-rotation-activation.d.ts +0 -15
  380. package/lib/typescript/providers/screen/gestures/rotation/activation/use-rotation-activation.d.ts.map +0 -1
  381. package/lib/typescript/providers/screen/gestures/rotation/behavior/rotation-lifecycle.d.ts +0 -4
  382. package/lib/typescript/providers/screen/gestures/rotation/behavior/rotation-lifecycle.d.ts.map +0 -1
  383. package/lib/typescript/providers/screen/gestures/rotation/behavior/use-rotation-behavior.d.ts +0 -5
  384. package/lib/typescript/providers/screen/gestures/rotation/behavior/use-rotation-behavior.d.ts.map +0 -1
  385. package/lib/typescript/providers/screen/gestures/rotation/use-build-rotation-gesture.d.ts +0 -9
  386. package/lib/typescript/providers/screen/gestures/rotation/use-build-rotation-gesture.d.ts.map +0 -1
  387. package/lib/typescript/providers/screen/styles/helpers/opening-phase.d.ts +0 -16
  388. package/lib/typescript/providers/screen/styles/helpers/opening-phase.d.ts.map +0 -1
  389. package/src/components/boundary/hooks/use-register-target.ts +0 -43
  390. package/src/components/boundary/portal/components/boundary-portal/components/portal-slot.tsx +0 -80
  391. package/src/components/boundary/portal/utils/ownership.ts +0 -319
  392. package/src/components/boundary/portal/utils/shallow-equal.ts +0 -25
  393. package/src/components/boundary/portal/utils/visible-host.ts +0 -24
  394. package/src/providers/screen/gestures/rotation/activation/use-rotation-activation.ts +0 -88
  395. package/src/providers/screen/gestures/rotation/behavior/rotation-lifecycle.ts +0 -19
  396. package/src/providers/screen/gestures/rotation/behavior/use-rotation-behavior.ts +0 -47
  397. package/src/providers/screen/gestures/rotation/use-build-rotation-gesture.ts +0 -50
  398. package/src/providers/screen/styles/helpers/opening-phase.ts +0 -25
@@ -1,14 +1,13 @@
1
1
  import {
2
2
  type ForwardedRef,
3
3
  type ReactNode,
4
- useCallback,
5
4
  useImperativeHandle,
5
+ useLayoutEffect,
6
6
  useMemo,
7
7
  useRef,
8
- useState,
9
8
  } from "react";
10
9
  import type { View } from "react-native";
11
- import type { AnimatedRef, StyleProps } from "react-native-reanimated";
10
+ import type { AnimatedRef } from "react-native-reanimated";
12
11
  import { useAnimatedRef } from "react-native-reanimated";
13
12
  import { useDescriptorsStore } from "../../../providers/screen/descriptors";
14
13
  import {
@@ -30,28 +29,11 @@ import type {
30
29
  BoundaryOwnProps,
31
30
  } from "../types";
32
31
 
33
- interface BoundaryRootContextValue extends BoundaryRootRenderState {
34
- registerTargetRef: (
35
- targetRef: AnimatedRef<View>,
36
- preparedStyles: StyleProps,
37
- measurementRef?: AnimatedRef<View>,
38
- ) => void;
39
- unregisterTargetRef: (targetRef: AnimatedRef<View>) => void;
40
- activeTargetRef: AnimatedRef<View> | null;
41
- boundTag: BoundTag;
42
- portalRuntime: BoundaryPortalRuntime;
43
- }
44
-
45
- type BoundaryTargetEntry = {
46
- ref: AnimatedRef<View>;
47
- /** Surface to measure — the portal placeholder when content can teleport. */
48
- measurementRef: AnimatedRef<View>;
49
- preparedStyles: StyleProps;
50
- };
32
+ type BoundaryRootContextValue = BoundaryRootRenderState;
51
33
 
52
34
  // logger.warn prepends the library prefix.
53
35
  const MULTIPLE_TARGETS_WARNING =
54
- "Multiple Boundary.Target elements were rendered under the same boundary root. The first registered target will be measured.";
36
+ "Multiple Boundary.Target elements were rendered under the same boundary root. The first target in render order will be measured.";
55
37
 
56
38
  export const TARGET_OUTSIDE_ROOT_WARNING =
57
39
  "Boundary.Target must be rendered inside Transition.Boundary or a component created by createBoundaryComponent.";
@@ -61,9 +43,9 @@ export type BoundaryRootRenderState = {
61
43
  boundTag: BoundTag;
62
44
  currentScreenKey: string;
63
45
  handoffEnabled: boolean;
46
+ measurementRef: AnimatedRef<View>;
64
47
  portalRuntime: BoundaryPortalRuntime;
65
48
  ref: AnimatedRef<View>;
66
- rootEscapePlaceholderRef: AnimatedRef<View>;
67
49
  shouldRenderBoundaryRootThroughPortal: boolean;
68
50
  shouldRenderHandoffHost: boolean;
69
51
  };
@@ -75,8 +57,11 @@ type BoundaryRootProviderProps = Pick<
75
57
  children: (state: BoundaryRootRenderState) => ReactNode;
76
58
  config: BoundaryConfigProps;
77
59
  forwardedRef?: ForwardedRef<any>;
60
+ hasTarget: boolean;
78
61
  id: BoundaryId;
79
62
  style?: unknown;
63
+ targetCount: number;
64
+ targetStyle?: unknown;
80
65
  };
81
66
 
82
67
  export const {
@@ -95,8 +80,11 @@ export const {
95
80
  forwardedRef,
96
81
  group,
97
82
  handoff,
83
+ hasTarget,
98
84
  id,
99
85
  style,
86
+ targetCount,
87
+ targetStyle,
100
88
  }) => {
101
89
  const requestedBoundTag = useMemo(
102
90
  () => createBoundTag(String(id), group),
@@ -137,51 +125,18 @@ export const {
137
125
  const associatedStyles = useComposedSlotStyles(boundTag.tag, style);
138
126
  const associatedStackingStyles = useSlotStackingStyles(boundTag.tag);
139
127
  const rootRef = useAnimatedRef<View>();
140
- const rootEscapePlaceholderRef = useAnimatedRef<View>();
141
- const [targetEntry, setTargetEntry] = useState<BoundaryTargetEntry | null>(
142
- null,
143
- );
144
-
145
- const registerTargetRef = useCallback(
146
- (
147
- targetRef: AnimatedRef<View>,
148
- preparedStyles: StyleProps,
149
- measurementRef?: AnimatedRef<View>,
150
- ) => {
151
- setTargetEntry((prev) => {
152
- if (prev?.ref === targetRef) {
153
- return prev;
154
- }
155
-
156
- if (__DEV__ && prev !== null) {
157
- logger.warnOnce(
158
- "boundary:multiple-targets",
159
- MULTIPLE_TARGETS_WARNING,
160
- );
161
- }
162
-
163
- return (
164
- prev ?? {
165
- ref: targetRef,
166
- measurementRef: measurementRef ?? targetRef,
167
- preparedStyles,
168
- }
169
- );
170
- });
171
- },
172
- [],
173
- );
128
+ const measurementRef = useAnimatedRef<View>();
174
129
 
175
- const unregisterTargetRef = useCallback((targetRef: AnimatedRef<View>) => {
176
- setTargetEntry((prev) => (prev?.ref === targetRef ? null : prev));
177
- }, []);
130
+ useLayoutEffect(() => {
131
+ if (__DEV__ && targetCount > 1) {
132
+ logger.warnOnce("boundary:multiple-targets", MULTIPLE_TARGETS_WARNING);
133
+ }
134
+ }, [targetCount]);
178
135
 
179
- const rootMeasurementRef = shouldEscapeBoundaryRootToScreenHost
180
- ? rootEscapePlaceholderRef
181
- : rootRef;
182
- const measuredRef = targetEntry?.measurementRef ?? rootMeasurementRef;
183
- const hasActiveTarget = targetEntry !== null;
184
- const targetPreparedStyles = targetEntry?.preparedStyles;
136
+ const measuredRef =
137
+ hasTarget || shouldEscapeBoundaryRootToScreenHost
138
+ ? measurementRef
139
+ : rootRef;
185
140
 
186
141
  useImperativeHandle(forwardedRef, () => rootRef.current as any, [rootRef]);
187
142
 
@@ -191,15 +146,14 @@ export const {
191
146
  runtimeEnabled,
192
147
  currentScreenKey,
193
148
  measuredRef,
194
- style,
195
- targetPreparedStyles,
149
+ style: hasTarget ? targetStyle : style,
196
150
  handoff: portalRuntime.handoff,
197
151
  escapeClipping: portalRuntime.escapeClipping,
198
152
  config,
199
153
  });
200
154
 
201
155
  const shouldRenderBoundaryRootThroughPortal =
202
- shouldEscapeBoundaryRootToScreenHost && !hasActiveTarget;
156
+ shouldEscapeBoundaryRootToScreenHost && !hasTarget;
203
157
  const handoffEnabled = enabled && portalRuntime.handoff;
204
158
  // A nested active target takes the full associated style, so the root keeps
205
159
  // only its stacking context. Root-owned escape-clipping moves the root
@@ -209,7 +163,7 @@ export const {
209
163
  // handoff host is absolute-filled inside this root, so the root is the
210
164
  // visual frame that animates the received payload.
211
165
  const attachedStyle = shouldAttachAssociatedStyles
212
- ? hasActiveTarget
166
+ ? hasTarget
213
167
  ? associatedStackingStyles
214
168
  : shouldRenderBoundaryRootThroughPortal
215
169
  ? undefined
@@ -219,31 +173,25 @@ export const {
219
173
  const value = useMemo<BoundaryRootContextValue>(
220
174
  () => ({
221
175
  attachedStyle,
222
- activeTargetRef: targetEntry?.ref ?? null,
223
176
  boundTag,
224
177
  currentScreenKey,
225
178
  handoffEnabled,
179
+ measurementRef,
226
180
  portalRuntime,
227
- registerTargetRef,
228
181
  ref: rootRef,
229
- rootEscapePlaceholderRef,
230
182
  shouldRenderBoundaryRootThroughPortal,
231
- shouldRenderHandoffHost: handoffEnabled && !hasActiveTarget,
232
- unregisterTargetRef,
183
+ shouldRenderHandoffHost: handoffEnabled && !hasTarget,
233
184
  }),
234
185
  [
235
186
  attachedStyle,
236
187
  boundTag,
237
188
  currentScreenKey,
238
189
  handoffEnabled,
239
- hasActiveTarget,
190
+ hasTarget,
191
+ measurementRef,
240
192
  portalRuntime,
241
- registerTargetRef,
242
193
  rootRef,
243
- rootEscapePlaceholderRef,
244
194
  shouldRenderBoundaryRootThroughPortal,
245
- targetEntry,
246
- unregisterTargetRef,
247
195
  ],
248
196
  );
249
197
 
@@ -40,6 +40,7 @@ export const getRefreshBoundarySignal = (params: {
40
40
  entering: boolean;
41
41
  animating: boolean;
42
42
  progress: number;
43
+ gestureInProgress: boolean;
43
44
  linkState?: LinkPairsState;
44
45
  }): RefreshBoundarySignal | null => {
45
46
  "worklet";
@@ -57,11 +58,18 @@ export const getRefreshBoundarySignal = (params: {
57
58
  entering,
58
59
  animating,
59
60
  progress,
61
+ gestureInProgress,
60
62
  linkState,
61
63
  } = params;
62
64
 
63
65
  if (!enabled) return null;
64
66
 
67
+ // This is temporary for a patch fix. However, this architecture should
68
+ // change: our signals aren't currently doing their intended job, so right
69
+ // now we'll add one more guard until the shape is much more tested and
70
+ // bulletproof.
71
+ if (gestureInProgress) return null;
72
+
65
73
  const canRefreshPreCloseDestination =
66
74
  shouldRefresh && closing && !entering && !animating && progress >= 1;
67
75
 
@@ -0,0 +1,39 @@
1
+ import {
2
+ Children,
3
+ cloneElement,
4
+ Fragment,
5
+ isValidElement,
6
+ type ReactElement,
7
+ type ReactNode,
8
+ } from "react";
9
+
10
+ type ResolveBoundaryTargetOptions = {
11
+ isTarget: (element: ReactElement) => boolean;
12
+ mapTarget?: (element: ReactElement, selected: boolean) => ReactElement;
13
+ };
14
+
15
+ export const resolveBoundaryTarget = (
16
+ children: ReactNode,
17
+ options: ResolveBoundaryTargetOptions,
18
+ ): {
19
+ children: ReactNode;
20
+ target: ReactElement | null;
21
+ targetCount: number;
22
+ } => {
23
+ let target: ReactElement | null = null;
24
+ let targetCount = 0;
25
+ const map = (nodes: ReactNode): ReactNode =>
26
+ Children.map(nodes, (node) => {
27
+ if (!isValidElement<{ children?: ReactNode }>(node)) return node;
28
+ if (node.type === Fragment) {
29
+ return cloneElement(node, undefined, map(node.props.children));
30
+ }
31
+ if (!options.isTarget(node)) return node;
32
+ target ??= node;
33
+ targetCount += 1;
34
+ return options.mapTarget?.(node, targetCount === 1) ?? node;
35
+ });
36
+
37
+ const mappedChildren = map(children);
38
+ return { children: target ? mappedChildren : children, target, targetCount };
39
+ };
@@ -1,4 +1,10 @@
1
- import { type StyleProp, StyleSheet, View, type ViewStyle } from "react-native";
1
+ import {
2
+ I18nManager,
3
+ type StyleProp,
4
+ StyleSheet,
5
+ View,
6
+ type ViewStyle,
7
+ } from "react-native";
2
8
  import { CONTAINER_STYLE_ID, MASK_STYLE_ID } from "../constants";
3
9
  import { createTransitionAwareComponent } from "./create-transition-aware-component";
4
10
 
@@ -49,9 +55,19 @@ const styles = StyleSheet.create({
49
55
  root: {
50
56
  flex: 1,
51
57
  },
52
- rootMask: {
53
- backgroundColor: "white",
54
- },
58
+ // The mask rect's translate math assumes a physical top-left base. Under
59
+ // native RTL a fixed-width flex child anchors to the right edge, so pin it
60
+ // to the physical left (`end` = left edge in RTL).
61
+ rootMask: I18nManager.isRTL
62
+ ? {
63
+ backgroundColor: "white",
64
+ end: 0,
65
+ position: "absolute",
66
+ top: 0,
67
+ }
68
+ : {
69
+ backgroundColor: "white",
70
+ },
55
71
  rootContainer: {
56
72
  flex: 1,
57
73
  },
@@ -30,7 +30,7 @@ export const BackdropLayer = memo(function BackdropLayer({
30
30
  const BackdropComponent = current.options.backdropComponent;
31
31
  const routeKey = current.route.key;
32
32
  const animations = AnimationStore.getBag(routeKey);
33
- const { targetProgress, resolvedAutoSnapPoint } =
33
+ const { targetProgress, animationProgress, resolvedAutoSnapPoint } =
34
34
  SystemStore.getBag(routeKey);
35
35
 
36
36
  const AnimatedBackdropComponent = useMemo(
@@ -99,6 +99,7 @@ export const BackdropLayer = memo(function BackdropLayer({
99
99
  spec,
100
100
  animations,
101
101
  targetProgress,
102
+ animationProgress,
102
103
  onAnimationFinish: shouldDismiss ? dismissScreen : undefined,
103
104
  });
104
105
  });
@@ -106,6 +107,7 @@ export const BackdropLayer = memo(function BackdropLayer({
106
107
  }, [
107
108
  animations,
108
109
  targetProgress,
110
+ animationProgress,
109
111
  resolvedAutoSnapPoint,
110
112
  backdropBehavior,
111
113
  current,
@@ -1,5 +1,5 @@
1
1
  import { memo, useCallback } from "react";
2
- import { StyleSheet, View, type ViewProps } from "react-native";
2
+ import { I18nManager, StyleSheet, View, type ViewProps } from "react-native";
3
3
  import Animated from "react-native-reanimated";
4
4
  import {
5
5
  NAVIGATION_MASK_CONTAINER_STYLE_ID,
@@ -97,7 +97,17 @@ const styles = StyleSheet.create({
97
97
  navigationContainer: {
98
98
  flex: 1,
99
99
  },
100
- navigationMaskElement: {
101
- backgroundColor: "white",
102
- },
100
+ // The mask rect's translate math assumes a physical top-left base. Under
101
+ // native RTL a fixed-width flex child anchors to the right edge, so pin it
102
+ // to the physical left (`end` = left edge in RTL).
103
+ navigationMaskElement: I18nManager.isRTL
104
+ ? {
105
+ backgroundColor: "white",
106
+ end: 0,
107
+ position: "absolute",
108
+ top: 0,
109
+ }
110
+ : {
111
+ backgroundColor: "white",
112
+ },
103
113
  });
@@ -22,6 +22,7 @@ export const useTransitionStartController = ({
22
22
  }) => {
23
23
  const {
24
24
  targetProgress,
25
+ animationProgress,
25
26
  pendingLifecycleRequestKind,
26
27
  pendingLifecycleRequestTarget,
27
28
  pendingLifecycleStartBlockCount,
@@ -62,6 +63,7 @@ export const useTransitionStartController = ({
62
63
  spec: transitionSpec,
63
64
  animations,
64
65
  targetProgress,
66
+ animationProgress,
65
67
  onAnimationFinish,
66
68
  });
67
69
 
@@ -1,22 +1,15 @@
1
1
  import {
2
2
  createStandardNavigationFactories,
3
- type NavigatorTypeBagBase,
4
- type ParamListBase,
5
3
  type StackActionHelpers,
6
4
  type StackNavigationState,
7
5
  StackRouter,
8
6
  type StackRouterOptions,
9
7
  type StandardNavigationTypeBagBase,
10
- type StaticConfig,
11
- type TypedNavigator,
12
8
  } from "@react-navigation/native";
13
- import type * as React from "react";
14
9
  import { reactNavigationHost } from "../../providers/navigation/react-navigation-host";
15
10
  import type {
16
11
  BlankStackNavigationEventMap,
17
12
  BlankStackNavigationOptions,
18
- BlankStackNavigationProp,
19
- BlankStackNavigatorProps,
20
13
  } from "../../types/blank-stack.types";
21
14
  import {
22
15
  BlankStackNavigator,
@@ -31,26 +24,10 @@ interface BlankStackStandardTypeBag extends StandardNavigationTypeBagBase {
31
24
  RouterOptions: StackRouterOptions;
32
25
  }
33
26
 
34
- type BlankStackTypeBagFor<
35
- ParamList extends ParamListBase,
36
- NavigatorID extends string | undefined,
37
- > = NavigatorTypeBagBase & {
38
- ParamList: ParamList;
39
- NavigatorID: NavigatorID;
40
- State: StackNavigationState<ParamList>;
41
- ScreenOptions: BlankStackNavigationOptions;
42
- EventMap: BlankStackNavigationEventMap;
43
- NavigationList: {
44
- [RouteName in keyof ParamList]: BlankStackNavigationProp<
45
- ParamList,
46
- RouteName,
47
- NavigatorID
48
- >;
49
- };
50
- Navigator: React.ComponentType<BlankStackNavigatorProps>;
51
- };
52
-
53
- const standardBlankStackFactories = createStandardNavigationFactories<
27
+ export const {
28
+ createNavigator: createBlankStackNavigator,
29
+ createScreen: createBlankStackScreen,
30
+ } = createStandardNavigationFactories<
54
31
  BlankStackStandardTypeBag,
55
32
  BlankStackStandardNavigatorProps
56
33
  >(BlankStackNavigator, StackRouter, ({ state, navigation }) => ({
@@ -59,27 +36,6 @@ const standardBlankStackFactories = createStandardNavigationFactories<
59
36
  navigationHost: reactNavigationHost,
60
37
  }));
61
38
 
62
- export const createBlankStackScreen = standardBlankStackFactories.createScreen;
63
-
64
- const createReactNavigationBlankStackNavigator =
65
- standardBlankStackFactories.createNavigator as unknown as (
66
- config?: unknown,
67
- ) => unknown;
68
-
69
- export function createBlankStackNavigator<
70
- const ParamList extends ParamListBase = ParamListBase,
71
- const NavigatorID extends string | undefined = undefined,
72
- const TypeBag extends NavigatorTypeBagBase = BlankStackTypeBagFor<
73
- ParamList,
74
- NavigatorID
75
- >,
76
- const Config extends StaticConfig<TypeBag> = StaticConfig<TypeBag>,
77
- >(config?: Config): TypedNavigator<TypeBag, Config> {
78
- return createReactNavigationBlankStackNavigator(
79
- config,
80
- ) as unknown as TypedNavigator<TypeBag, Config>;
81
- }
82
-
83
39
  export type {
84
40
  BlankStackFactoryOptions,
85
41
  BlankStackNavigationEventMap,
@@ -67,6 +67,7 @@ export const applyMeasuredBoundsWrites = (
67
67
  measured,
68
68
  preparedStyles,
69
69
  group,
70
+ { handoff, escapeClipping },
70
71
  );
71
72
  }
72
73
  };
@@ -8,7 +8,6 @@ import { useScreenGestureConfig } from "./hooks/use-screen-gesture-config";
8
8
  import { useWalkUpAndRegisterShadowingClaims } from "./ownership/use-walk-up-and-register-shadowing-claims";
9
9
  import { useBuildPanGesture } from "./pan/use-build-pan-gesture";
10
10
  import { useBuildPinchGesture } from "./pinch/use-build-pinch-gesture";
11
- import { useBuildRotationGesture } from "./rotation/use-build-rotation-gesture";
12
11
  import {
13
12
  type DirectionClaimMap,
14
13
  type GestureCompositionOwner,
@@ -54,14 +53,9 @@ export const {
54
53
  gestureCompositionOwner,
55
54
  });
56
55
 
57
- const rotationGesture = useBuildRotationGesture({
58
- gestureConfig,
59
- gestureCompositionOwner,
60
- });
61
-
62
56
  const detectorGesture = useMemo(
63
- () => Gesture.Simultaneous(panGesture, pinchGesture, rotationGesture),
64
- [panGesture, pinchGesture, rotationGesture],
57
+ () => Gesture.Simultaneous(panGesture, pinchGesture),
58
+ [panGesture, pinchGesture],
65
59
  );
66
60
 
67
61
  const value = useMemo<GestureContextType>(
@@ -70,7 +64,6 @@ export const {
70
64
  detectorGesture,
71
65
  panGesture,
72
66
  pinchGesture,
73
- rotationGesture,
74
67
  scrollState,
75
68
  gestureContext,
76
69
  claimedDirections: gestureConfig.participation.claimedDirections,
@@ -81,7 +74,6 @@ export const {
81
74
  detectorGesture,
82
75
  panGesture,
83
76
  pinchGesture,
84
- rotationGesture,
85
77
  scrollState,
86
78
  gestureContext,
87
79
  gestureConfig.participation.claimedDirections,
@@ -170,6 +170,7 @@ export const finalizePanRelease = (
170
170
  emitWillAnimate: false,
171
171
  markEntering: false,
172
172
  targetProgress: system.targetProgress,
173
+ animationProgress: system.animationProgress,
173
174
  animations,
174
175
  initialVelocity: plan.progressVelocity,
175
176
  });
@@ -3,7 +3,7 @@ import type {
3
3
  GestureStateManager,
4
4
  GestureTouchEvent,
5
5
  } from "react-native-gesture-handler";
6
- import type { SharedValue } from "react-native-reanimated";
6
+ import { type SharedValue, useSharedValue } from "react-native-reanimated";
7
7
  import type { GestureStoreMap } from "../../../../../stores/gesture.store";
8
8
  import type { ScreenOptionsContextValue } from "../../../options";
9
9
  import { resolvePinchRuntime } from "../../shared/runtime";
@@ -34,6 +34,48 @@ export const updateAbsolutePinchFocalPoint = (
34
34
  }
35
35
  };
36
36
 
37
+ export const updatePinchRotation = (
38
+ event: GestureTouchEvent,
39
+ gestures: GestureStoreMap,
40
+ lastAngle: SharedValue<number>,
41
+ accumulatedRotation: SharedValue<number>,
42
+ captureOrigin: boolean,
43
+ ) => {
44
+ "worklet";
45
+ const firstTouch = event.allTouches[0];
46
+ const secondTouch = event.allTouches[1];
47
+
48
+ if (!firstTouch || !secondTouch) {
49
+ return;
50
+ }
51
+
52
+ const angle = Math.atan2(
53
+ secondTouch.absoluteY - firstTouch.absoluteY,
54
+ secondTouch.absoluteX - firstTouch.absoluteX,
55
+ );
56
+
57
+ if (captureOrigin) {
58
+ lastAngle.set(angle);
59
+ accumulatedRotation.set(0);
60
+ gestures.rotation.set(0);
61
+ gestures.raw.rotation.set(0);
62
+ return;
63
+ }
64
+
65
+ let angleDelta = angle - lastAngle.get();
66
+ if (angleDelta > Math.PI) {
67
+ angleDelta -= 2 * Math.PI;
68
+ } else if (angleDelta < -Math.PI) {
69
+ angleDelta += 2 * Math.PI;
70
+ }
71
+
72
+ const rotation = accumulatedRotation.get() + angleDelta;
73
+ lastAngle.set(angle);
74
+ accumulatedRotation.set(rotation);
75
+ gestures.rotation.set(rotation);
76
+ gestures.raw.rotation.set(rotation);
77
+ };
78
+
37
79
  interface UsePinchActivationProps {
38
80
  runtime: SharedValue<PinchGestureRuntime>;
39
81
  screenOptions: ScreenOptionsContextValue;
@@ -45,6 +87,9 @@ export const usePinchActivation = ({
45
87
  screenOptions,
46
88
  gestureCompositionOwner,
47
89
  }: UsePinchActivationProps) => {
90
+ const lastAngle = useSharedValue(0);
91
+ const accumulatedRotation = useSharedValue(0);
92
+
48
93
  const onTouchesDown = useCallback(
49
94
  (
50
95
  event: GestureTouchEvent,
@@ -68,6 +113,13 @@ export const usePinchActivation = ({
68
113
  latestRuntime.stores.gestures,
69
114
  true,
70
115
  );
116
+ updatePinchRotation(
117
+ event,
118
+ latestRuntime.stores.gestures,
119
+ lastAngle,
120
+ accumulatedRotation,
121
+ true,
122
+ );
71
123
  if (gestureCompositionOwner.get() === null) {
72
124
  gestureCompositionOwner.set("pinch");
73
125
  }
@@ -79,7 +131,13 @@ export const usePinchActivation = ({
79
131
  stateManager?.fail();
80
132
  }
81
133
  },
82
- [runtime, screenOptions, gestureCompositionOwner],
134
+ [
135
+ runtime,
136
+ screenOptions,
137
+ gestureCompositionOwner,
138
+ lastAngle,
139
+ accumulatedRotation,
140
+ ],
83
141
  );
84
142
 
85
143
  const onTouchesMove = useCallback(
@@ -102,6 +160,13 @@ export const usePinchActivation = ({
102
160
  latestRuntime.stores.gestures,
103
161
  false,
104
162
  );
163
+ updatePinchRotation(
164
+ event,
165
+ latestRuntime.stores.gestures,
166
+ lastAngle,
167
+ accumulatedRotation,
168
+ false,
169
+ );
105
170
  if (gestureCompositionOwner.get() === null) {
106
171
  gestureCompositionOwner.set("pinch");
107
172
  }
@@ -113,7 +178,13 @@ export const usePinchActivation = ({
113
178
  stateManager.fail();
114
179
  }
115
180
  },
116
- [runtime, screenOptions, gestureCompositionOwner],
181
+ [
182
+ runtime,
183
+ screenOptions,
184
+ gestureCompositionOwner,
185
+ lastAngle,
186
+ accumulatedRotation,
187
+ ],
117
188
  );
118
189
 
119
190
  return useMemo(
@@ -108,6 +108,7 @@ export const finalizePinchRelease = (
108
108
  markEntering: false,
109
109
  animations,
110
110
  targetProgress: system.targetProgress,
111
+ animationProgress: system.animationProgress,
111
112
  initialVelocity: release.initialVelocity,
112
113
  });
113
114
  };
@@ -95,7 +95,7 @@ export const resolvePinchRelease = (
95
95
  const {
96
96
  participation,
97
97
  policy,
98
- stores: { animations },
98
+ stores: { animations, system },
99
99
  } = runtime;
100
100
  const normalizedScale = clamp(normalizePinchScale(event.scale), -1, 1);
101
101
  const currentProgress = animations.transitionProgress.get();
@@ -106,9 +106,7 @@ export const resolvePinchRelease = (
106
106
  policy.pinchInEnabled,
107
107
  policy.pinchOutEnabled,
108
108
  );
109
- const target = shouldDismiss
110
- ? 0
111
- : runtime.stores.gestures.internal.progressBaseline.get();
109
+ const target = shouldDismiss ? 0 : system.targetProgress.get();
112
110
  const progressVelocity = getPinchReleaseHandoffVelocity(event.velocity);
113
111
  const handoffVelocity = getPinchReleaseHandoffVelocity(
114
112
  event.velocity,