react-native-screen-transitions 3.9.0-alpha.1 → 3.9.0-alpha.3

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 (481) hide show
  1. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +21 -16
  2. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -1
  3. package/lib/commonjs/shared/components/boundary/create-boundary-component.js +88 -114
  4. package/lib/commonjs/shared/components/boundary/create-boundary-component.js.map +1 -1
  5. package/lib/commonjs/shared/components/boundary/hooks/{use-boundary-presence.js → lifecycles/use-boundary-presence.js} +14 -7
  6. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js.map +1 -0
  7. package/lib/commonjs/shared/components/boundary/hooks/{use-initial-destination-measurement.js → lifecycles/use-initial-destination-measurement.js} +51 -24
  8. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.js.map +1 -0
  9. package/lib/commonjs/shared/components/boundary/hooks/{use-initial-source-measurement.js → lifecycles/use-initial-source-measurement.js} +7 -10
  10. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.js.map +1 -0
  11. package/lib/commonjs/shared/components/boundary/hooks/{use-refresh-boundary.js → lifecycles/use-refresh-boundary.js} +10 -7
  12. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -0
  13. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-measurement.js +82 -0
  14. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -0
  15. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +10 -13
  16. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  17. package/lib/commonjs/shared/components/boundary/index.js +27 -30
  18. package/lib/commonjs/shared/components/boundary/index.js.map +1 -1
  19. package/lib/commonjs/shared/components/boundary/portal/components/boundary-local-portal-host.js +58 -0
  20. package/lib/commonjs/shared/components/boundary/portal/components/boundary-local-portal-host.js.map +1 -0
  21. package/lib/commonjs/shared/components/boundary/portal/components/host.js +20 -4
  22. package/lib/commonjs/shared/components/boundary/portal/components/host.js.map +1 -1
  23. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js +53 -32
  24. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -1
  25. package/lib/commonjs/shared/components/boundary/portal/components/portal.js +206 -96
  26. package/lib/commonjs/shared/components/boundary/portal/components/portal.js.map +1 -1
  27. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js +14 -2
  28. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -1
  29. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js +5 -44
  30. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  31. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js +37 -5
  32. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  33. package/lib/commonjs/shared/components/boundary/portal/teleport.js +15 -2
  34. package/lib/commonjs/shared/components/boundary/portal/teleport.js.map +1 -1
  35. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js +18 -0
  36. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  37. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js +10 -3
  38. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js.map +1 -1
  39. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js +28 -49
  40. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  41. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js +254 -0
  42. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  43. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js +38 -0
  44. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  45. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js +29 -0
  46. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  47. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js +10 -1
  48. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  49. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js +25 -0
  50. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  51. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +65 -0
  52. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -0
  53. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js +12 -2
  54. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js.map +1 -1
  55. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js +0 -21
  56. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  57. package/lib/commonjs/shared/components/boundary/utils/source-signals.js +4 -9
  58. package/lib/commonjs/shared/components/boundary/utils/source-signals.js.map +1 -1
  59. package/lib/commonjs/shared/components/create-transition-aware-component.js +2 -20
  60. package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
  61. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js +1 -1
  62. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js.map +1 -1
  63. package/lib/commonjs/shared/components/screen-container/layers/backdrop.js +2 -14
  64. package/lib/commonjs/shared/components/screen-container/layers/backdrop.js.map +1 -1
  65. package/lib/commonjs/shared/components/screen-container/layers/content.js +4 -16
  66. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  67. package/lib/commonjs/shared/components/screen-container/layers/maybe-masked-navigation-container.js +4 -15
  68. package/lib/commonjs/shared/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  69. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js +4 -16
  70. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js.map +1 -1
  71. package/lib/commonjs/shared/index.js.map +1 -1
  72. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js +6 -3
  73. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  74. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js +1 -0
  75. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  76. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +143 -24
  77. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  78. package/lib/commonjs/shared/providers/screen/screen-composer.js +1 -1
  79. package/lib/commonjs/shared/providers/screen/screen-composer.js.map +1 -1
  80. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js +95 -0
  81. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  82. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  83. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  84. package/lib/commonjs/shared/providers/screen/styles/helpers/opening-phase.js +32 -0
  85. package/lib/commonjs/shared/providers/screen/styles/helpers/opening-phase.js.map +1 -0
  86. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +16 -11
  87. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  88. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  89. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  90. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js +1 -20
  91. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js.map +1 -1
  92. package/lib/commonjs/shared/providers/screen/styles/helpers/visibility-gate.js +1 -11
  93. package/lib/commonjs/shared/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  94. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +96 -0
  95. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  96. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +36 -36
  97. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  98. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +1 -19
  99. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  100. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +8 -3
  101. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  102. package/lib/commonjs/shared/providers/screen/styles/index.js +38 -7
  103. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  104. package/lib/commonjs/shared/providers/screen/styles/{styles.provider.js → slot.provider.js} +34 -21
  105. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -0
  106. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js +53 -0
  107. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  108. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js +37 -2
  109. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  110. package/lib/commonjs/shared/stores/bounds/internals/entries.js +11 -4
  111. package/lib/commonjs/shared/stores/bounds/internals/entries.js.map +1 -1
  112. package/lib/commonjs/shared/stores/bounds/internals/links.js +134 -51
  113. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  114. package/lib/commonjs/shared/stores/bounds/internals/resolver.js +1 -3
  115. package/lib/commonjs/shared/stores/bounds/internals/resolver.js.map +1 -1
  116. package/lib/commonjs/shared/stores/system.store.js +5 -0
  117. package/lib/commonjs/shared/stores/system.store.js.map +1 -1
  118. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js +10 -69
  119. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  120. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js +59 -0
  121. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  122. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js +8 -1
  123. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  124. package/lib/commonjs/shared/utils/bounds/navigation/zoom/helpers.js +59 -0
  125. package/lib/commonjs/shared/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  126. package/lib/commonjs/shared/utils/logger.js +11 -0
  127. package/lib/commonjs/shared/utils/logger.js.map +1 -1
  128. package/lib/module/shared/components/boundary/components/boundary-target.js +19 -14
  129. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  130. package/lib/module/shared/components/boundary/create-boundary-component.js +93 -119
  131. package/lib/module/shared/components/boundary/create-boundary-component.js.map +1 -1
  132. package/lib/module/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js +30 -0
  133. package/lib/module/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js.map +1 -0
  134. package/lib/module/shared/components/boundary/hooks/{use-initial-destination-measurement.js → lifecycles/use-initial-destination-measurement.js} +51 -24
  135. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.js.map +1 -0
  136. package/lib/module/shared/components/boundary/hooks/{use-initial-source-measurement.js → lifecycles/use-initial-source-measurement.js} +7 -10
  137. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.js.map +1 -0
  138. package/lib/module/shared/components/boundary/hooks/{use-refresh-boundary.js → lifecycles/use-refresh-boundary.js} +10 -7
  139. package/lib/module/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -0
  140. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js +77 -0
  141. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -0
  142. package/lib/module/shared/components/boundary/hooks/use-measurer.js +10 -13
  143. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  144. package/lib/module/shared/components/boundary/index.js +27 -30
  145. package/lib/module/shared/components/boundary/index.js.map +1 -1
  146. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js +53 -0
  147. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js.map +1 -0
  148. package/lib/module/shared/components/boundary/portal/components/host.js +21 -5
  149. package/lib/module/shared/components/boundary/portal/components/host.js.map +1 -1
  150. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js +53 -32
  151. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -1
  152. package/lib/module/shared/components/boundary/portal/components/portal.js +213 -103
  153. package/lib/module/shared/components/boundary/portal/components/portal.js.map +1 -1
  154. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js +15 -3
  155. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -1
  156. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js +4 -41
  157. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  158. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js +35 -4
  159. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  160. package/lib/module/shared/components/boundary/portal/teleport.js +16 -2
  161. package/lib/module/shared/components/boundary/portal/teleport.js.map +1 -1
  162. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js +13 -0
  163. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  164. package/lib/module/shared/components/boundary/portal/utils/naming.js +8 -2
  165. package/lib/module/shared/components/boundary/portal/utils/naming.js.map +1 -1
  166. package/lib/module/shared/components/boundary/portal/utils/offset-style.js +29 -49
  167. package/lib/module/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  168. package/lib/module/shared/components/boundary/portal/utils/ownership.js +246 -0
  169. package/lib/module/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  170. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js +33 -0
  171. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  172. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js +24 -0
  173. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  174. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js +8 -0
  175. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  176. package/lib/module/shared/components/boundary/portal/utils/visible-host.js +20 -0
  177. package/lib/module/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  178. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +57 -0
  179. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -0
  180. package/lib/module/shared/components/boundary/utils/destination-signals.js +12 -2
  181. package/lib/module/shared/components/boundary/utils/destination-signals.js.map +1 -1
  182. package/lib/module/shared/components/boundary/utils/refresh-signals.js +0 -21
  183. package/lib/module/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  184. package/lib/module/shared/components/boundary/utils/source-signals.js +4 -9
  185. package/lib/module/shared/components/boundary/utils/source-signals.js.map +1 -1
  186. package/lib/module/shared/components/create-transition-aware-component.js +4 -22
  187. package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
  188. package/lib/module/shared/components/overlay/variations/float-overlay.js +2 -2
  189. package/lib/module/shared/components/overlay/variations/float-overlay.js.map +1 -1
  190. package/lib/module/shared/components/screen-container/layers/backdrop.js +4 -16
  191. package/lib/module/shared/components/screen-container/layers/backdrop.js.map +1 -1
  192. package/lib/module/shared/components/screen-container/layers/content.js +4 -16
  193. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  194. package/lib/module/shared/components/screen-container/layers/maybe-masked-navigation-container.js +5 -16
  195. package/lib/module/shared/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  196. package/lib/module/shared/components/screen-container/layers/surface-container.js +4 -16
  197. package/lib/module/shared/components/screen-container/layers/surface-container.js.map +1 -1
  198. package/lib/module/shared/index.js.map +1 -1
  199. package/lib/module/shared/providers/helpers/measured-bounds-writes.js +6 -3
  200. package/lib/module/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  201. package/lib/module/shared/providers/screen/animation/helpers/derivations.js +1 -0
  202. package/lib/module/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  203. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +144 -25
  204. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  205. package/lib/module/shared/providers/screen/screen-composer.js +2 -2
  206. package/lib/module/shared/providers/screen/screen-composer.js.map +1 -1
  207. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js +89 -0
  208. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  209. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  210. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  211. package/lib/module/shared/providers/screen/styles/helpers/opening-phase.js +26 -0
  212. package/lib/module/shared/providers/screen/styles/helpers/opening-phase.js.map +1 -0
  213. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +16 -11
  214. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  215. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  216. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  217. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js +0 -18
  218. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js.map +1 -1
  219. package/lib/module/shared/providers/screen/styles/helpers/visibility-gate.js +0 -9
  220. package/lib/module/shared/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  221. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +87 -0
  222. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  223. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +36 -36
  224. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  225. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +1 -19
  226. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  227. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +9 -4
  228. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  229. package/lib/module/shared/providers/screen/styles/index.js +2 -1
  230. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  231. package/lib/module/shared/providers/screen/styles/slot.provider.js +66 -0
  232. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -0
  233. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js +47 -0
  234. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  235. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js +33 -1
  236. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  237. package/lib/module/shared/stores/bounds/internals/entries.js +11 -4
  238. package/lib/module/shared/stores/bounds/internals/entries.js.map +1 -1
  239. package/lib/module/shared/stores/bounds/internals/links.js +135 -53
  240. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  241. package/lib/module/shared/stores/bounds/internals/resolver.js +1 -3
  242. package/lib/module/shared/stores/bounds/internals/resolver.js.map +1 -1
  243. package/lib/module/shared/stores/system.store.js +5 -0
  244. package/lib/module/shared/stores/system.store.js.map +1 -1
  245. package/lib/module/shared/types/animation.types.js.map +1 -1
  246. package/lib/module/shared/utils/bounds/helpers/styles/compute.js +10 -69
  247. package/lib/module/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  248. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js +52 -0
  249. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  250. package/lib/module/shared/utils/bounds/navigation/zoom/build.js +9 -2
  251. package/lib/module/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  252. package/lib/module/shared/utils/bounds/navigation/zoom/helpers.js +58 -0
  253. package/lib/module/shared/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  254. package/lib/module/shared/utils/logger.js +11 -0
  255. package/lib/module/shared/utils/logger.js.map +1 -1
  256. package/lib/typescript/shared/components/boundary/components/boundary-target.d.ts.map +1 -1
  257. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts +0 -1
  258. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts.map +1 -1
  259. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts +11 -0
  260. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts.map +1 -0
  261. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.d.ts +10 -0
  262. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.d.ts.map +1 -0
  263. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts +8 -0
  264. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts.map +1 -0
  265. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts +10 -0
  266. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts.map +1 -0
  267. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts +28 -0
  268. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts.map +1 -0
  269. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts +5 -6
  270. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  271. package/lib/typescript/shared/components/boundary/index.d.ts +36 -229
  272. package/lib/typescript/shared/components/boundary/index.d.ts.map +1 -1
  273. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts +8 -0
  274. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts.map +1 -0
  275. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts.map +1 -1
  276. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts +1 -1
  277. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts.map +1 -1
  278. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts +4 -3
  279. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts.map +1 -1
  280. package/lib/typescript/shared/components/boundary/portal/hooks/use-host-measurement.d.ts.map +1 -1
  281. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts +0 -7
  282. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts.map +1 -1
  283. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts +16 -1
  284. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts.map +1 -1
  285. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts +1 -1
  286. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts.map +1 -1
  287. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts +3 -0
  288. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts.map +1 -0
  289. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts +2 -1
  290. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts.map +1 -1
  291. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts +16 -32
  292. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts.map +1 -1
  293. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts +35 -0
  294. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts.map +1 -0
  295. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts +12 -0
  296. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -0
  297. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts +8 -0
  298. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts.map +1 -0
  299. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts +4 -0
  300. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts.map +1 -1
  301. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts +8 -0
  302. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts.map +1 -0
  303. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +37 -0
  304. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -0
  305. package/lib/typescript/shared/components/boundary/types.d.ts +9 -36
  306. package/lib/typescript/shared/components/boundary/types.d.ts.map +1 -1
  307. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts +1 -0
  308. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts.map +1 -1
  309. package/lib/typescript/shared/components/boundary/utils/refresh-signals.d.ts.map +1 -1
  310. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts +0 -1
  311. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts.map +1 -1
  312. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  313. package/lib/typescript/shared/components/screen-container/layers/backdrop.d.ts.map +1 -1
  314. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  315. package/lib/typescript/shared/components/screen-container/layers/maybe-masked-navigation-container.d.ts.map +1 -1
  316. package/lib/typescript/shared/components/screen-container/layers/surface-container.d.ts.map +1 -1
  317. package/lib/typescript/shared/index.d.ts +3 -215
  318. package/lib/typescript/shared/index.d.ts.map +1 -1
  319. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts +3 -3
  320. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  321. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts +1 -0
  322. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts.map +1 -1
  323. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  324. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts +4 -0
  325. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts.map +1 -0
  326. package/lib/typescript/shared/providers/screen/styles/helpers/normalize-slots.d.ts.map +1 -1
  327. package/lib/typescript/shared/providers/screen/styles/helpers/opening-phase.d.ts +16 -0
  328. package/lib/typescript/shared/providers/screen/styles/helpers/opening-phase.d.ts.map +1 -0
  329. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts +3 -4
  330. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
  331. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts +2 -1
  332. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts.map +1 -1
  333. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.d.ts +0 -1
  334. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.d.ts.map +1 -1
  335. package/lib/typescript/shared/providers/screen/styles/helpers/visibility-gate.d.ts +0 -1
  336. package/lib/typescript/shared/providers/screen/styles/helpers/visibility-gate.d.ts.map +1 -1
  337. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +11 -0
  338. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -0
  339. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts +4 -6
  340. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  341. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +0 -1
  342. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  343. package/lib/typescript/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.d.ts.map +1 -1
  344. package/lib/typescript/shared/providers/screen/styles/index.d.ts +2 -1
  345. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  346. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +18 -0
  347. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -0
  348. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts +6 -0
  349. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts.map +1 -0
  350. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts +8 -1
  351. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts.map +1 -1
  352. package/lib/typescript/shared/stores/bounds/internals/entries.d.ts.map +1 -1
  353. package/lib/typescript/shared/stores/bounds/internals/links.d.ts +4 -3
  354. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  355. package/lib/typescript/shared/stores/bounds/internals/resolver.d.ts.map +1 -1
  356. package/lib/typescript/shared/stores/bounds/types.d.ts +22 -20
  357. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  358. package/lib/typescript/shared/stores/system.store.d.ts +1 -0
  359. package/lib/typescript/shared/stores/system.store.d.ts.map +1 -1
  360. package/lib/typescript/shared/types/animation.types.d.ts +7 -1
  361. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  362. package/lib/typescript/shared/utils/bounds/helpers/styles/compute.d.ts.map +1 -1
  363. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts +6 -0
  364. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts.map +1 -0
  365. package/lib/typescript/shared/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  366. package/lib/typescript/shared/utils/bounds/navigation/zoom/helpers.d.ts +9 -0
  367. package/lib/typescript/shared/utils/bounds/navigation/zoom/helpers.d.ts.map +1 -1
  368. package/lib/typescript/shared/utils/logger.d.ts +6 -0
  369. package/lib/typescript/shared/utils/logger.d.ts.map +1 -1
  370. package/package.json +1 -1
  371. package/src/shared/components/boundary/components/boundary-target.tsx +30 -16
  372. package/src/shared/components/boundary/create-boundary-component.tsx +132 -164
  373. package/src/shared/components/boundary/hooks/lifecycles/use-boundary-presence.ts +41 -0
  374. package/src/shared/components/boundary/hooks/{use-initial-destination-measurement.ts → lifecycles/use-initial-destination-measurement.ts} +65 -22
  375. package/src/shared/components/boundary/hooks/{use-initial-source-measurement.ts → lifecycles/use-initial-source-measurement.ts} +10 -12
  376. package/src/shared/components/boundary/hooks/{use-refresh-boundary.ts → lifecycles/use-refresh-boundary.ts} +10 -10
  377. package/src/shared/components/boundary/hooks/use-boundary-measurement.ts +97 -0
  378. package/src/shared/components/boundary/hooks/use-measurer.ts +16 -24
  379. package/src/shared/components/boundary/index.tsx +56 -30
  380. package/src/shared/components/boundary/portal/components/boundary-local-portal-host.tsx +66 -0
  381. package/src/shared/components/boundary/portal/components/host.tsx +20 -5
  382. package/src/shared/components/boundary/portal/components/portal-boundary-host.tsx +67 -52
  383. package/src/shared/components/boundary/portal/components/portal.tsx +281 -120
  384. package/src/shared/components/boundary/portal/hooks/use-host-measurement.ts +23 -2
  385. package/src/shared/components/boundary/portal/stores/host-registry.store.ts +4 -51
  386. package/src/shared/components/boundary/portal/stores/portal-boundary-host.store.ts +59 -6
  387. package/src/shared/components/boundary/portal/teleport.ts +28 -3
  388. package/src/shared/components/boundary/portal/utils/has-local-slot.ts +16 -0
  389. package/src/shared/components/boundary/portal/utils/naming.ts +11 -1
  390. package/src/shared/components/boundary/portal/utils/offset-style.ts +37 -139
  391. package/src/shared/components/boundary/portal/utils/ownership.ts +371 -0
  392. package/src/shared/components/boundary/portal/utils/resolve-portal.ts +50 -0
  393. package/src/shared/components/boundary/portal/utils/shallow-equal.ts +25 -0
  394. package/src/shared/components/boundary/portal/utils/teleport-control.ts +12 -0
  395. package/src/shared/components/boundary/portal/utils/visible-host.ts +24 -0
  396. package/src/shared/components/boundary/providers/{boundary-owner.provider.tsx → boundary-root.provider.tsx} +33 -47
  397. package/src/shared/components/boundary/types.ts +9 -39
  398. package/src/shared/components/boundary/utils/destination-signals.ts +22 -2
  399. package/src/shared/components/boundary/utils/refresh-signals.ts +0 -41
  400. package/src/shared/components/boundary/utils/source-signals.ts +5 -17
  401. package/src/shared/components/create-transition-aware-component.tsx +3 -25
  402. package/src/shared/components/overlay/variations/float-overlay.tsx +3 -3
  403. package/src/shared/components/screen-container/layers/backdrop.tsx +4 -17
  404. package/src/shared/components/screen-container/layers/content.tsx +4 -16
  405. package/src/shared/components/screen-container/layers/maybe-masked-navigation-container.tsx +8 -18
  406. package/src/shared/components/screen-container/layers/surface-container.tsx +4 -17
  407. package/src/shared/index.ts +0 -5
  408. package/src/shared/providers/helpers/measured-bounds-writes.ts +6 -11
  409. package/src/shared/providers/screen/animation/helpers/derivations.ts +3 -0
  410. package/src/shared/providers/screen/animation/helpers/pipeline.ts +251 -68
  411. package/src/shared/providers/screen/screen-composer.tsx +3 -3
  412. package/src/shared/providers/screen/styles/helpers/compose-slot-style.ts +129 -0
  413. package/src/shared/providers/screen/styles/helpers/normalize-slots.ts +45 -8
  414. package/src/shared/providers/screen/styles/helpers/opening-phase.ts +25 -0
  415. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +22 -12
  416. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.ts +3 -1
  417. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.ts +0 -24
  418. package/src/shared/providers/screen/styles/helpers/visibility-gate.ts +0 -12
  419. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +111 -0
  420. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +48 -38
  421. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +0 -18
  422. package/src/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.tsx +17 -4
  423. package/src/shared/providers/screen/styles/index.tsx +13 -4
  424. package/src/shared/providers/screen/styles/slot.provider.tsx +93 -0
  425. package/src/shared/providers/screen/styles/stores/slot-references.store.ts +71 -0
  426. package/src/shared/stores/bounds/helpers/link-pairs.helpers.ts +41 -1
  427. package/src/shared/stores/bounds/internals/entries.ts +13 -5
  428. package/src/shared/stores/bounds/internals/links.ts +167 -85
  429. package/src/shared/stores/bounds/internals/resolver.ts +0 -2
  430. package/src/shared/stores/bounds/types.ts +24 -22
  431. package/src/shared/stores/system.store.ts +6 -0
  432. package/src/shared/types/animation.types.ts +8 -1
  433. package/src/shared/utils/bounds/helpers/styles/compute.ts +22 -124
  434. package/src/shared/utils/bounds/helpers/styles/local-transform.ts +86 -0
  435. package/src/shared/utils/bounds/navigation/zoom/build.ts +9 -1
  436. package/src/shared/utils/bounds/navigation/zoom/helpers.ts +96 -0
  437. package/src/shared/utils/logger.ts +12 -0
  438. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  439. package/lib/commonjs/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  440. package/lib/commonjs/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  441. package/lib/commonjs/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  442. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js +0 -40
  443. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  444. package/lib/commonjs/shared/components/boundary/providers/boundary-owner.provider.js +0 -68
  445. package/lib/commonjs/shared/components/boundary/providers/boundary-owner.provider.js.map +0 -1
  446. package/lib/commonjs/shared/providers/screen/styles/helpers/preserve-animated-props-only.js +0 -26
  447. package/lib/commonjs/shared/providers/screen/styles/helpers/preserve-animated-props-only.js.map +0 -1
  448. package/lib/commonjs/shared/providers/screen/styles/styles.provider.js.map +0 -1
  449. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js +0 -23
  450. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  451. package/lib/module/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  452. package/lib/module/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  453. package/lib/module/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  454. package/lib/module/shared/components/boundary/portal/utils/attachment.js +0 -35
  455. package/lib/module/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  456. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js +0 -60
  457. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js.map +0 -1
  458. package/lib/module/shared/providers/screen/styles/helpers/preserve-animated-props-only.js +0 -21
  459. package/lib/module/shared/providers/screen/styles/helpers/preserve-animated-props-only.js.map +0 -1
  460. package/lib/module/shared/providers/screen/styles/styles.provider.js +0 -53
  461. package/lib/module/shared/providers/screen/styles/styles.provider.js.map +0 -1
  462. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts +0 -8
  463. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts.map +0 -1
  464. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts +0 -9
  465. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts.map +0 -1
  466. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts +0 -9
  467. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts.map +0 -1
  468. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts +0 -10
  469. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts.map +0 -1
  470. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts +0 -21
  471. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts.map +0 -1
  472. package/lib/typescript/shared/components/boundary/providers/boundary-owner.provider.d.ts +0 -44
  473. package/lib/typescript/shared/components/boundary/providers/boundary-owner.provider.d.ts.map +0 -1
  474. package/lib/typescript/shared/providers/screen/styles/helpers/preserve-animated-props-only.d.ts +0 -3
  475. package/lib/typescript/shared/providers/screen/styles/helpers/preserve-animated-props-only.d.ts.map +0 -1
  476. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts +0 -14
  477. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts.map +0 -1
  478. package/src/shared/components/boundary/hooks/use-boundary-presence.ts +0 -28
  479. package/src/shared/components/boundary/portal/utils/attachment.ts +0 -48
  480. package/src/shared/providers/screen/styles/helpers/preserve-animated-props-only.ts +0 -22
  481. package/src/shared/providers/screen/styles/styles.provider.tsx +0 -60
@@ -1,3 +1,4 @@
1
+ import { useMemo } from "react";
1
2
  import { useWindowDimensions } from "react-native";
2
3
  import {
3
4
  type DerivedValue,
@@ -6,20 +7,26 @@ import {
6
7
  useSharedValue,
7
8
  } from "react-native-reanimated";
8
9
  import { useSafeAreaInsets } from "react-native-safe-area-context";
9
- import { DEFAULT_SCREEN_TRANSITION_STATE } from "../../../../constants";
10
+ import {
11
+ createScreenTransitionState,
12
+ DEFAULT_SCREEN_TRANSITION_STATE,
13
+ } from "../../../../constants";
10
14
  import { useStack } from "../../../../hooks/navigation/use-stack";
11
15
  import type {
12
16
  ScreenInterpolationProps,
13
17
  ScreenStyleInterpolator,
18
+ ScreenTransitionState,
14
19
  } from "../../../../types/animation.types";
15
20
 
16
- import { useDescriptors } from "../../descriptors";
21
+ import { type BaseDescriptor, useDescriptors } from "../../descriptors";
22
+ import { buildScreenTransitionOptions } from "./build-screen-transition-options";
17
23
  import { updateDerivations } from "./derivations";
18
24
  import { hasTransitionsEnabled } from "./has-transitions-enabled";
19
25
  import { hydrateTransitionState } from "./hydrate-transition-state";
20
26
  import type { SelectedInterpolatorOptions } from "./selected-interpolator-options";
21
27
  import { resolveStackProgress } from "./stack-progress";
22
28
  import { useBuildTransitionState } from "./use-build-transition-state";
29
+ import { toPlainRoute, toPlainValue } from "./worklet";
23
30
 
24
31
  export type ScreenInterpolatorFrame = Omit<
25
32
  ScreenInterpolationProps,
@@ -34,28 +41,236 @@ interface ScreenAnimationPipeline {
34
41
  currentInterpolator: ScreenStyleInterpolator | undefined;
35
42
  }
36
43
 
37
- const createInitialBaseInterpolatorProps = (
38
- dimensions: ScreenInterpolatorFrame["layouts"]["screen"],
39
- insets: ScreenInterpolatorFrame["insets"],
40
- ): ScreenInterpolatorFrame => {
41
- const current = {
42
- ...DEFAULT_SCREEN_TRANSITION_STATE,
43
- layouts: { screen: dimensions },
44
- };
44
+ const getInitialSettledProgress = (descriptor: BaseDescriptor) => {
45
+ const { snapPoints, initialSnapIndex = 0 } = descriptor.options;
45
46
 
46
- return {
47
+ if (!snapPoints?.length) {
48
+ return 1;
49
+ }
50
+
51
+ const clampedIndex = Math.min(
52
+ Math.max(0, initialSnapIndex),
53
+ snapPoints.length - 1,
54
+ );
55
+ const snapPoint = snapPoints[clampedIndex];
56
+
57
+ return typeof snapPoint === "number" ? snapPoint : 0;
58
+ };
59
+
60
+ const applyInitialProgress = ({
61
+ state,
62
+ dimensions,
63
+ progress,
64
+ entering = 0,
65
+ closing = 0,
66
+ animating = 0,
67
+ willAnimate = 0,
68
+ settled = entering || closing || animating ? 0 : 1,
69
+ }: {
70
+ state: ScreenTransitionState;
71
+ dimensions: ScreenInterpolatorFrame["layouts"]["screen"];
72
+ progress: number;
73
+ entering?: number;
74
+ closing?: number;
75
+ animating?: number;
76
+ willAnimate?: number;
77
+ settled?: number;
78
+ }) => {
79
+ state.progress = progress;
80
+ state.transitionProgress = progress;
81
+ state.entering = entering;
82
+ state.closing = closing;
83
+ state.animating = animating;
84
+ state.willAnimate = willAnimate;
85
+ state.settled = settled;
86
+ state.logicallySettled = settled;
87
+ state.layouts.screen = dimensions;
88
+
89
+ return state;
90
+ };
91
+
92
+ const createInitialTransitionState = ({
93
+ descriptor,
94
+ dimensions,
95
+ progress,
96
+ entering,
97
+ animating,
98
+ willAnimate,
99
+ settled,
100
+ }: {
101
+ descriptor: BaseDescriptor;
102
+ dimensions: ScreenInterpolatorFrame["layouts"]["screen"];
103
+ progress: number;
104
+ entering?: number;
105
+ animating?: number;
106
+ willAnimate?: number;
107
+ settled?: number;
108
+ }) => {
109
+ const meta = descriptor.options.meta
110
+ ? (toPlainValue(descriptor.options.meta) as Record<string, unknown>)
111
+ : undefined;
112
+ const state = createScreenTransitionState(
113
+ toPlainRoute(descriptor.route),
114
+ meta,
115
+ buildScreenTransitionOptions(descriptor.options),
116
+ );
117
+
118
+ return applyInitialProgress({
119
+ state,
120
+ dimensions,
121
+ progress,
122
+ entering,
123
+ animating,
124
+ willAnimate,
125
+ settled,
126
+ });
127
+ };
128
+
129
+ const createInitialInterpolatorProps = ({
130
+ dimensions,
131
+ insets,
132
+ currentDescriptor,
133
+ nextDescriptor,
134
+ prevDescriptor,
135
+ }: {
136
+ dimensions: ScreenInterpolatorFrame["layouts"]["screen"];
137
+ insets: ScreenInterpolatorFrame["insets"];
138
+ currentDescriptor: BaseDescriptor;
139
+ nextDescriptor?: BaseDescriptor;
140
+ prevDescriptor?: BaseDescriptor;
141
+ }): ScreenInterpolatorFrame => {
142
+ const hasIncomingNext = !!nextDescriptor;
143
+ const isFocusedEntering = !!prevDescriptor && !nextDescriptor;
144
+ const shouldAnimateInitialMount =
145
+ !prevDescriptor &&
146
+ !nextDescriptor &&
147
+ !!currentDescriptor.options.experimental_animateOnInitialMount;
148
+ const currentProgress =
149
+ hasIncomingNext || (!isFocusedEntering && !shouldAnimateInitialMount)
150
+ ? getInitialSettledProgress(currentDescriptor)
151
+ : 0;
152
+ const currentEntering =
153
+ isFocusedEntering || shouldAnimateInitialMount ? 1 : 0;
154
+ const current = createInitialTransitionState({
155
+ descriptor: currentDescriptor,
156
+ dimensions,
157
+ progress: currentProgress,
158
+ entering: currentEntering,
159
+ animating: currentEntering,
160
+ willAnimate: currentEntering,
161
+ });
162
+ const previous = prevDescriptor
163
+ ? createInitialTransitionState({
164
+ descriptor: prevDescriptor,
165
+ dimensions,
166
+ progress: getInitialSettledProgress(prevDescriptor),
167
+ })
168
+ : undefined;
169
+ const next = nextDescriptor
170
+ ? createInitialTransitionState({
171
+ descriptor: nextDescriptor,
172
+ dimensions,
173
+ progress: 0,
174
+ entering: 1,
175
+ animating: 1,
176
+ willAnimate: 1,
177
+ settled: 0,
178
+ })
179
+ : undefined;
180
+ const frame: ScreenInterpolatorFrame = {
47
181
  layouts: current.layouts,
48
182
  insets,
49
- previous: undefined,
183
+ previous,
50
184
  current,
51
- next: undefined,
185
+ next,
52
186
  progress: 0,
187
+ transitionProgress: 0,
53
188
  stackProgress: 0,
54
189
  logicallySettled: 1,
55
190
  focused: true,
56
191
  active: current,
57
192
  inactive: undefined,
58
193
  };
194
+
195
+ updateDerivations(frame);
196
+ frame.stackProgress = frame.progress;
197
+ frame.logicallySettled = frame.active.settled;
198
+
199
+ return frame;
200
+ };
201
+
202
+ type BuiltTransitionState = NonNullable<
203
+ ReturnType<typeof useBuildTransitionState>
204
+ >;
205
+
206
+ const hydrateInterpolatorFrame = <TFrame extends ScreenInterpolatorFrame>({
207
+ frame,
208
+ dimensions,
209
+ insets,
210
+ currentAnimation,
211
+ nextAnimation,
212
+ prevAnimation,
213
+ nextHasTransitions,
214
+ interpolatorOptions,
215
+ }: {
216
+ frame: TFrame;
217
+ dimensions: ScreenInterpolatorFrame["layouts"]["screen"];
218
+ insets: ScreenInterpolatorFrame["insets"];
219
+ currentAnimation: BuiltTransitionState | undefined;
220
+ nextAnimation: BuiltTransitionState | undefined;
221
+ prevAnimation: BuiltTransitionState | undefined;
222
+ nextHasTransitions: boolean;
223
+ interpolatorOptions: SelectedInterpolatorOptions;
224
+ }): TFrame => {
225
+ "worklet";
226
+ const shouldApplyOptionsToCurrent = interpolatorOptions.owner === "current";
227
+ const shouldApplyOptionsToNext =
228
+ interpolatorOptions.owner === "next" &&
229
+ !!nextAnimation &&
230
+ nextHasTransitions;
231
+ const previousCurrentProgress = currentAnimation?.visualProgress.get();
232
+ const previousNextProgress =
233
+ nextAnimation && nextHasTransitions
234
+ ? nextAnimation.visualProgress.get()
235
+ : undefined;
236
+
237
+ frame.previous = prevAnimation
238
+ ? hydrateTransitionState(prevAnimation, dimensions)
239
+ : undefined;
240
+
241
+ frame.current = currentAnimation
242
+ ? hydrateTransitionState(
243
+ currentAnimation,
244
+ dimensions,
245
+ shouldApplyOptionsToCurrent ? interpolatorOptions.options : undefined,
246
+ )
247
+ : DEFAULT_SCREEN_TRANSITION_STATE;
248
+
249
+ frame.next =
250
+ nextAnimation && nextHasTransitions
251
+ ? hydrateTransitionState(
252
+ nextAnimation,
253
+ dimensions,
254
+ shouldApplyOptionsToNext ? interpolatorOptions.options : undefined,
255
+ )
256
+ : undefined;
257
+
258
+ frame.layouts = frame.current.layouts;
259
+ frame.insets = insets;
260
+
261
+ updateDerivations(frame);
262
+
263
+ frame.stackProgress = resolveStackProgress(
264
+ currentAnimation?.stackProgress,
265
+ frame.progress,
266
+ frame.current.progress,
267
+ previousCurrentProgress,
268
+ frame.next?.progress,
269
+ previousNextProgress,
270
+ );
271
+ frame.logicallySettled = frame.active.settled;
272
+
273
+ return frame;
59
274
  };
60
275
 
61
276
  export function useScreenAnimationPipeline(): ScreenAnimationPipeline {
@@ -80,74 +295,42 @@ export function useScreenAnimationPipeline(): ScreenAnimationPipeline {
80
295
  !!nextRouteKey &&
81
296
  hasTransitionsEnabled(nextDescriptor?.options, transitionsAlwaysOn);
82
297
 
83
- const screenInterpolatorProps = useSharedValue(
84
- createInitialBaseInterpolatorProps(dimensions, insets),
298
+ const initialInterpolatorProps = useMemo(
299
+ () =>
300
+ createInitialInterpolatorProps({
301
+ dimensions,
302
+ insets,
303
+ currentDescriptor: currDescriptor,
304
+ nextDescriptor,
305
+ prevDescriptor,
306
+ }),
307
+ [dimensions, insets, currDescriptor, nextDescriptor, prevDescriptor],
85
308
  );
309
+
310
+ const screenInterpolatorProps = useSharedValue(initialInterpolatorProps);
86
311
  const selectedInterpolatorOptions =
87
312
  useSharedValue<SelectedInterpolatorOptions>({
88
313
  owner: "current",
89
314
  });
90
315
 
91
316
  const propsRevisionState = useSharedValue({ value: 0 });
317
+
92
318
  const screenInterpolatorPropsRevision = useDerivedValue<number>(() => {
93
319
  "worklet";
94
320
 
95
321
  screenInterpolatorProps.modify((frame) => {
96
322
  "worklet";
97
323
  const interpolatorOptions = selectedInterpolatorOptions.get();
98
- const shouldApplyOptionsToCurrent =
99
- interpolatorOptions.owner === "current";
100
- const shouldApplyOptionsToNext =
101
- interpolatorOptions.owner === "next" &&
102
- !!nextAnimation &&
103
- nextHasTransitions;
104
- const previousCurrentProgress = currentAnimation?.visualProgress.get();
105
- const previousNextProgress =
106
- nextAnimation && nextHasTransitions
107
- ? nextAnimation.visualProgress.get()
108
- : undefined;
109
-
110
- frame.previous = prevAnimation
111
- ? hydrateTransitionState(prevAnimation, dimensions)
112
- : undefined;
113
-
114
- frame.current = currentAnimation
115
- ? hydrateTransitionState(
116
- currentAnimation,
117
- dimensions,
118
- shouldApplyOptionsToCurrent
119
- ? interpolatorOptions.options
120
- : undefined,
121
- )
122
- : DEFAULT_SCREEN_TRANSITION_STATE;
123
-
124
- frame.next =
125
- nextAnimation && nextHasTransitions
126
- ? hydrateTransitionState(
127
- nextAnimation,
128
- dimensions,
129
- shouldApplyOptionsToNext
130
- ? interpolatorOptions.options
131
- : undefined,
132
- )
133
- : undefined;
134
-
135
- frame.layouts = frame.current.layouts;
136
- frame.insets = insets;
137
-
138
- updateDerivations(frame);
139
-
140
- frame.stackProgress = resolveStackProgress(
141
- currentAnimation?.stackProgress,
142
- frame.progress,
143
- frame.current.progress,
144
- previousCurrentProgress,
145
- frame.next?.progress,
146
- previousNextProgress,
147
- );
148
- frame.logicallySettled = frame.active.settled;
149
-
150
- return frame;
324
+ return hydrateInterpolatorFrame({
325
+ frame,
326
+ dimensions,
327
+ insets,
328
+ currentAnimation,
329
+ nextAnimation,
330
+ prevAnimation,
331
+ nextHasTransitions,
332
+ interpolatorOptions,
333
+ });
151
334
  }, false);
152
335
 
153
336
  // Critical reactive dependency for `screenInterpolatorProps`.
@@ -5,7 +5,7 @@ import { ScreenAnimationProvider } from "./animation";
5
5
  import { type BaseDescriptor, DescriptorsProvider } from "./descriptors";
6
6
  import { ScreenGestureProvider } from "./gestures";
7
7
  import { ScreenOptionsProvider } from "./options";
8
- import { ScreenStylesProvider } from "./styles";
8
+ import { ScreenSlotProvider } from "./styles";
9
9
 
10
10
  type Props<TDescriptor extends BaseDescriptor> = {
11
11
  previous?: TDescriptor;
@@ -26,9 +26,9 @@ export function ScreenComposer<TDescriptor extends BaseDescriptor>({
26
26
  <ScreenOptionsProvider>
27
27
  <ScreenGestureProvider>
28
28
  <ScreenAnimationProvider>
29
- <ScreenStylesProvider>
29
+ <ScreenSlotProvider>
30
30
  <ScreenContainer>{children}</ScreenContainer>
31
- </ScreenStylesProvider>
31
+ </ScreenSlotProvider>
32
32
  </ScreenAnimationProvider>
33
33
  </ScreenGestureProvider>
34
34
  </ScreenOptionsProvider>
@@ -0,0 +1,129 @@
1
+ import type { StyleProps, TransformArrayItem } from "react-native-reanimated";
2
+ import { NO_STYLES } from "../../../../constants";
3
+
4
+ type SharedValueLike = {
5
+ _isReanimatedSharedValue: true;
6
+ get?: () => unknown;
7
+ value?: unknown;
8
+ };
9
+
10
+ const isSharedValueLike = (value: unknown): value is SharedValueLike => {
11
+ "worklet";
12
+ return (
13
+ (value as Partial<SharedValueLike> | null)?._isReanimatedSharedValue ===
14
+ true
15
+ );
16
+ };
17
+
18
+ const resolveTransformValue = <T>(value: T): T | unknown => {
19
+ "worklet";
20
+ if (isSharedValueLike(value)) {
21
+ return value.value;
22
+ }
23
+
24
+ if (Array.isArray(value)) {
25
+ const resolved = [];
26
+ for (let index = 0; index < value.length; index++) {
27
+ const item = value[index];
28
+ resolved.push(isSharedValueLike(item) ? item.value : item);
29
+ }
30
+ return resolved;
31
+ }
32
+
33
+ return value;
34
+ };
35
+
36
+ const resolveTransformItem = (
37
+ value: TransformArrayItem,
38
+ ): TransformArrayItem => {
39
+ "worklet";
40
+ if (typeof value === "object" && value !== null) {
41
+ const resolved: Record<string, unknown> = {};
42
+ const source = value as Record<string, unknown>;
43
+ for (const key in source) {
44
+ resolved[key] = resolveTransformValue(source[key]);
45
+ }
46
+ return resolved as TransformArrayItem;
47
+ }
48
+
49
+ return value;
50
+ };
51
+
52
+ const resolveLocalTransform = (
53
+ transform: TransformArrayItem[],
54
+ ): TransformArrayItem[] => {
55
+ "worklet";
56
+ const resolved: TransformArrayItem[] = [];
57
+
58
+ for (let index = 0; index < transform.length; index++) {
59
+ resolved.push(resolveTransformItem(transform[index]));
60
+ }
61
+
62
+ return resolved;
63
+ };
64
+
65
+ const flattenStyleObject = (
66
+ style: unknown,
67
+ ): Record<string, unknown> | undefined => {
68
+ if (style === null || style === undefined || typeof style !== "object") {
69
+ return undefined;
70
+ }
71
+
72
+ if (!Array.isArray(style)) {
73
+ return style as Record<string, unknown>;
74
+ }
75
+
76
+ let flattened: Record<string, unknown> | undefined;
77
+ for (let index = 0; index < style.length; index++) {
78
+ const child = flattenStyleObject(style[index]);
79
+
80
+ if (!child) {
81
+ continue;
82
+ }
83
+
84
+ flattened = flattened ?? {};
85
+ Object.assign(flattened, child);
86
+ }
87
+
88
+ return flattened;
89
+ };
90
+
91
+ export const getLocalTransformForSlotComposition = (
92
+ style: unknown,
93
+ ): TransformArrayItem[] | undefined => {
94
+ const flattened = flattenStyleObject(style);
95
+ const transform = flattened?.transform;
96
+
97
+ return Array.isArray(transform)
98
+ ? (transform as TransformArrayItem[])
99
+ : undefined;
100
+ };
101
+
102
+ export const composeSlotStyleWithLocalTransform = (
103
+ slotStyle: StyleProps | undefined,
104
+ localTransform: TransformArrayItem[] | undefined,
105
+ boundsLocalTransform?: TransformArrayItem[],
106
+ ): StyleProps => {
107
+ "worklet";
108
+ const resolvedSlotStyle = (slotStyle ?? NO_STYLES) as StyleProps;
109
+ // The measured bounds snapshot supersedes the live local transform so bounds
110
+ // geometry and payload scale are composed from the same measurement frame.
111
+ const transformToCompose = boundsLocalTransform ?? localTransform;
112
+
113
+ if (!transformToCompose?.length) {
114
+ return resolvedSlotStyle;
115
+ }
116
+
117
+ const slotTransform = resolvedSlotStyle.transform;
118
+ if (!Array.isArray(slotTransform)) {
119
+ return resolvedSlotStyle;
120
+ }
121
+
122
+ return {
123
+ ...resolvedSlotStyle,
124
+ transform: [
125
+ ...(slotTransform as TransformArrayItem[]),
126
+ ...resolveLocalTransform(transformToCompose),
127
+ ],
128
+ };
129
+ };
@@ -2,6 +2,10 @@ import type {
2
2
  NormalizedTransitionInterpolatedStyle,
3
3
  NormalizedTransitionSlotStyle,
4
4
  } from "../../../../types/animation.types";
5
+ import {
6
+ getBoundsLocalTransform,
7
+ stripBoundsLocalTransform,
8
+ } from "../../../../utils/bounds/helpers/styles/local-transform";
5
9
 
6
10
  const isExplicitTransitionSlot = (value: unknown) => {
7
11
  "worklet";
@@ -12,7 +16,14 @@ const isExplicitTransitionSlot = (value: unknown) => {
12
16
  );
13
17
  };
14
18
 
15
- const isAlreadyNormalizedStyleMap = (raw: Record<string, any>) => {
19
+ const hasBoundsLocalTransformMarker = (style: unknown) => {
20
+ "worklet";
21
+ return !!getBoundsLocalTransform(style as any)?.length;
22
+ };
23
+
24
+ const isAlreadyNormalizedStyleMapWithoutBoundsMetadata = (
25
+ raw: Record<string, any>,
26
+ ) => {
16
27
  "worklet";
17
28
 
18
29
  for (const key in raw) {
@@ -25,6 +36,14 @@ const isAlreadyNormalizedStyleMap = (raw: Record<string, any>) => {
25
36
  if (!isExplicitTransitionSlot(value)) {
26
37
  return false;
27
38
  }
39
+
40
+ if (
41
+ hasBoundsLocalTransformMarker(
42
+ (value as NormalizedTransitionSlotStyle).style,
43
+ )
44
+ ) {
45
+ return false;
46
+ }
28
47
  }
29
48
 
30
49
  return true;
@@ -42,10 +61,7 @@ export function normalizeSlots(
42
61
  ): NormalizedTransitionInterpolatedStyle {
43
62
  "worklet";
44
63
 
45
- // Most modern interpolators already return the canonical `{ style, props }`
46
- // slot shape. In that common case, we can forward the raw object directly and
47
- // avoid building a second map just to copy the same slot references over.
48
- if (isAlreadyNormalizedStyleMap(raw)) {
64
+ if (isAlreadyNormalizedStyleMapWithoutBoundsMetadata(raw)) {
49
65
  return raw as NormalizedTransitionInterpolatedStyle;
50
66
  }
51
67
 
@@ -62,11 +78,32 @@ export function normalizeSlots(
62
78
  }
63
79
 
64
80
  if (isExplicitTransitionSlot(value)) {
65
- // Proper TransitionSlotStyle pass through
66
- normalized[key] = value as NormalizedTransitionSlotStyle;
81
+ const explicitSlot = value as NormalizedTransitionSlotStyle;
82
+ const boundsLocalTransform = getBoundsLocalTransform(explicitSlot.style);
83
+
84
+ if (!boundsLocalTransform?.length) {
85
+ normalized[key] = explicitSlot;
86
+ continue;
87
+ }
88
+
89
+ normalized[key] = {
90
+ style: explicitSlot.style
91
+ ? stripBoundsLocalTransform(explicitSlot.style)
92
+ : undefined,
93
+ props: explicitSlot.props,
94
+ boundsLocalTransform,
95
+ };
67
96
  } else {
97
+ const boundsLocalTransform = getBoundsLocalTransform(value);
98
+ const style =
99
+ boundsLocalTransform?.length && value
100
+ ? stripBoundsLocalTransform(value)
101
+ : value;
102
+
68
103
  // Shorthand: plain StyleProps — wrap it
69
- normalized[key] = { style: value };
104
+ normalized[key] = boundsLocalTransform?.length
105
+ ? { style, boundsLocalTransform }
106
+ : { style };
70
107
  }
71
108
  }
72
109
 
@@ -0,0 +1,25 @@
1
+ /**
2
+ * The "pre-start" window of an opening transition: the screen has committed to
3
+ * opening (`entering`) but `transitionProgress` has not yet moved past 0, so no
4
+ * transformed frame has been produced yet.
5
+ *
6
+ * This window is a quarantine, and two source-level guards key off it:
7
+ * - the visibility gate keeps the entering screen hidden (it must not be SEEN), and
8
+ * - interpolator ownership stays on "current" so the entering screen does not
9
+ * DRIVE other screens' styles until its transition is actually live.
10
+ *
11
+ * Both must agree on when the open transition has started, so the threshold
12
+ * lives here in one place rather than being re-derived at each site.
13
+ */
14
+ export const hasOpenTransitionStarted = (transitionProgress: number) => {
15
+ "worklet";
16
+ return transitionProgress > 0;
17
+ };
18
+
19
+ export const isOpeningBeforeStart = (
20
+ entering: number,
21
+ transitionProgress: number,
22
+ ) => {
23
+ "worklet";
24
+ return !!entering && !hasOpenTransitionStarted(transitionProgress);
25
+ };