react-native-screen-transitions 4.1.0-beta.0 → 4.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (454) hide show
  1. package/lib/commonjs/components/boundary/components/boundary-lifecycle.js +40 -8
  2. package/lib/commonjs/components/boundary/components/boundary-lifecycle.js.map +1 -1
  3. package/lib/commonjs/components/boundary/components/boundary-target.js +10 -17
  4. package/lib/commonjs/components/boundary/components/boundary-target.js.map +1 -1
  5. package/lib/commonjs/components/boundary/create-boundary-component.js +13 -16
  6. package/lib/commonjs/components/boundary/create-boundary-component.js.map +1 -1
  7. package/lib/commonjs/components/boundary/helpers/presentation.js +56 -0
  8. package/lib/commonjs/components/boundary/helpers/presentation.js.map +1 -0
  9. package/lib/commonjs/components/boundary/hooks/use-boundary-presentation.js +65 -0
  10. package/lib/commonjs/components/boundary/hooks/use-boundary-presentation.js.map +1 -0
  11. package/lib/commonjs/components/boundary/hooks/use-composed-boundary-style.js +43 -0
  12. package/lib/commonjs/components/boundary/hooks/use-composed-boundary-style.js.map +1 -0
  13. package/lib/commonjs/components/boundary/index.js +2 -3
  14. package/lib/commonjs/components/boundary/index.js.map +1 -1
  15. package/lib/commonjs/components/boundary/portal/components/portal-host.js +39 -0
  16. package/lib/commonjs/components/boundary/portal/components/portal-host.js.map +1 -0
  17. package/lib/commonjs/components/boundary/portal/components/portal-overlay.js +170 -0
  18. package/lib/commonjs/components/boundary/portal/components/portal-overlay.js.map +1 -0
  19. package/lib/commonjs/components/boundary/portal/components/portal.js +88 -0
  20. package/lib/commonjs/components/boundary/portal/components/portal.js.map +1 -0
  21. package/lib/commonjs/components/boundary/portal/helpers/offset-style.js.map +1 -0
  22. package/lib/commonjs/components/boundary/portal/hooks/use-active-portal-boundary-host.js +35 -0
  23. package/lib/commonjs/components/boundary/portal/hooks/use-active-portal-boundary-host.js.map +1 -0
  24. package/lib/commonjs/components/boundary/portal/hooks/use-host-measurement.js +83 -0
  25. package/lib/commonjs/components/boundary/portal/hooks/use-host-measurement.js.map +1 -0
  26. package/lib/commonjs/components/boundary/portal/hooks/use-placeholder-styles.js.map +1 -0
  27. package/lib/commonjs/components/boundary/portal/hooks/use-portal-destination.js +58 -0
  28. package/lib/commonjs/components/boundary/portal/hooks/use-portal-destination.js.map +1 -0
  29. package/lib/commonjs/components/boundary/portal/index.js +0 -7
  30. package/lib/commonjs/components/boundary/portal/index.js.map +1 -1
  31. package/lib/commonjs/components/boundary/portal/{components/boundary-portal/stores → stores}/host-registry.store.js +1 -12
  32. package/lib/commonjs/components/boundary/portal/stores/host-registry.store.js.map +1 -0
  33. package/lib/commonjs/components/boundary/portal/{components/boundary-portal/stores → stores}/portal-boundary-host.store.js +17 -17
  34. package/lib/commonjs/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -0
  35. package/lib/commonjs/components/boundary/portal/utils/naming.js +8 -1
  36. package/lib/commonjs/components/boundary/portal/utils/naming.js.map +1 -1
  37. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js +7 -27
  38. package/lib/commonjs/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  39. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js +13 -7
  40. package/lib/commonjs/components/boundary/providers/boundary-root.provider.js.map +1 -1
  41. package/lib/commonjs/components/screen/container/helpers/layer-component.js +39 -0
  42. package/lib/commonjs/components/screen/container/helpers/layer-component.js.map +1 -0
  43. package/lib/commonjs/components/screen/container/{layers/render-component.js → helpers/uses-layer-render-props.js} +1 -1
  44. package/lib/commonjs/components/screen/container/helpers/uses-layer-render-props.js.map +1 -0
  45. package/lib/commonjs/components/screen/container/layers/backdrop.js +4 -13
  46. package/lib/commonjs/components/screen/container/layers/backdrop.js.map +1 -1
  47. package/lib/commonjs/components/screen/container/layers/clip.js +117 -0
  48. package/lib/commonjs/components/screen/container/layers/clip.js.map +1 -0
  49. package/lib/commonjs/components/screen/container/layers/content.js +17 -33
  50. package/lib/commonjs/components/screen/container/layers/content.js.map +1 -1
  51. package/lib/commonjs/components/screen/container/layers/surface.js +3 -15
  52. package/lib/commonjs/components/screen/container/layers/surface.js.map +1 -1
  53. package/lib/commonjs/components/screen/lifecycle/hooks/use-open-transition-intent.js +15 -0
  54. package/lib/commonjs/components/screen/lifecycle/hooks/use-open-transition-intent.js.map +1 -1
  55. package/lib/commonjs/constants.js +3 -1
  56. package/lib/commonjs/constants.js.map +1 -1
  57. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js +16 -4
  58. package/lib/commonjs/hooks/navigation/use-navigation-helpers.js.map +1 -1
  59. package/lib/commonjs/providers/screen/motion/animation/helpers/build-screen-transition-options.js +0 -1
  60. package/lib/commonjs/providers/screen/motion/animation/helpers/build-screen-transition-options.js.map +1 -1
  61. package/lib/commonjs/providers/screen/motion/animation/helpers/hydrate-transition-state/index.js +3 -2
  62. package/lib/commonjs/providers/screen/motion/animation/helpers/hydrate-transition-state/index.js.map +1 -1
  63. package/lib/commonjs/providers/screen/motion/options/helpers.js +1 -3
  64. package/lib/commonjs/providers/screen/motion/options/helpers.js.map +1 -1
  65. package/lib/commonjs/providers/screen/orchestrator/helpers/use-interpolator-state.js +4 -2
  66. package/lib/commonjs/providers/screen/orchestrator/helpers/use-interpolator-state.js.map +1 -1
  67. package/lib/commonjs/providers/screen/orchestrator/helpers/use-pair-presentation.js +79 -0
  68. package/lib/commonjs/providers/screen/orchestrator/helpers/use-pair-presentation.js.map +1 -0
  69. package/lib/commonjs/providers/screen/orchestrator/orchestrator.provider.js +3 -0
  70. package/lib/commonjs/providers/screen/orchestrator/orchestrator.provider.js.map +1 -1
  71. package/lib/commonjs/providers/screen/orchestrator/styles/constants.js +1 -0
  72. package/lib/commonjs/providers/screen/orchestrator/styles/constants.js.map +1 -1
  73. package/lib/commonjs/providers/screen/orchestrator/styles/hooks/slot-resolvers.js +5 -8
  74. package/lib/commonjs/providers/screen/orchestrator/styles/hooks/slot-resolvers.js.map +1 -1
  75. package/lib/commonjs/utils/bounds/navigation/reveal/build.js +28 -61
  76. package/lib/commonjs/utils/bounds/navigation/reveal/build.js.map +1 -1
  77. package/lib/commonjs/utils/bounds/navigation/reveal/config.js +3 -4
  78. package/lib/commonjs/utils/bounds/navigation/reveal/config.js.map +1 -1
  79. package/lib/commonjs/utils/bounds/navigation/reveal/math.js +8 -8
  80. package/lib/commonjs/utils/bounds/navigation/reveal/math.js.map +1 -1
  81. package/lib/commonjs/utils/bounds/navigation/reveal/types.js +3 -1
  82. package/lib/commonjs/utils/bounds/navigation/reveal/types.js.map +1 -1
  83. package/lib/commonjs/utils/bounds/navigation/zoom/build.js +4 -6
  84. package/lib/commonjs/utils/bounds/navigation/zoom/build.js.map +1 -1
  85. package/lib/commonjs/utils/bounds/navigation/zoom/clip.js +64 -0
  86. package/lib/commonjs/utils/bounds/navigation/zoom/clip.js.map +1 -0
  87. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js +1 -1
  88. package/lib/commonjs/utils/bounds/navigation/zoom/drag.js.map +1 -1
  89. package/lib/commonjs/utils/bounds/navigation/zoom/types.js +3 -1
  90. package/lib/commonjs/utils/bounds/navigation/zoom/types.js.map +1 -1
  91. package/lib/module/components/boundary/components/boundary-lifecycle.js +41 -9
  92. package/lib/module/components/boundary/components/boundary-lifecycle.js.map +1 -1
  93. package/lib/module/components/boundary/components/boundary-target.js +10 -17
  94. package/lib/module/components/boundary/components/boundary-target.js.map +1 -1
  95. package/lib/module/components/boundary/create-boundary-component.js +13 -16
  96. package/lib/module/components/boundary/create-boundary-component.js.map +1 -1
  97. package/lib/module/components/boundary/helpers/presentation.js +50 -0
  98. package/lib/module/components/boundary/helpers/presentation.js.map +1 -0
  99. package/lib/module/components/boundary/hooks/use-boundary-presentation.js +62 -0
  100. package/lib/module/components/boundary/hooks/use-boundary-presentation.js.map +1 -0
  101. package/lib/module/components/boundary/hooks/use-composed-boundary-style.js +39 -0
  102. package/lib/module/components/boundary/hooks/use-composed-boundary-style.js.map +1 -0
  103. package/lib/module/components/boundary/index.js +2 -3
  104. package/lib/module/components/boundary/index.js.map +1 -1
  105. package/lib/module/components/boundary/portal/components/portal-host.js +34 -0
  106. package/lib/module/components/boundary/portal/components/portal-host.js.map +1 -0
  107. package/lib/module/components/boundary/portal/components/portal-overlay.js +165 -0
  108. package/lib/module/components/boundary/portal/components/portal-overlay.js.map +1 -0
  109. package/lib/module/components/boundary/portal/components/portal.js +83 -0
  110. package/lib/module/components/boundary/portal/components/portal.js.map +1 -0
  111. package/lib/module/components/boundary/portal/helpers/offset-style.js.map +1 -0
  112. package/lib/module/components/boundary/portal/hooks/use-active-portal-boundary-host.js +31 -0
  113. package/lib/module/components/boundary/portal/hooks/use-active-portal-boundary-host.js.map +1 -0
  114. package/lib/module/components/boundary/portal/hooks/use-host-measurement.js +78 -0
  115. package/lib/module/components/boundary/portal/hooks/use-host-measurement.js.map +1 -0
  116. package/lib/module/components/boundary/portal/hooks/use-placeholder-styles.js.map +1 -0
  117. package/lib/module/components/boundary/portal/hooks/use-portal-destination.js +54 -0
  118. package/lib/module/components/boundary/portal/hooks/use-portal-destination.js.map +1 -0
  119. package/lib/module/components/boundary/portal/index.js +0 -1
  120. package/lib/module/components/boundary/portal/index.js.map +1 -1
  121. package/lib/module/components/boundary/portal/{components/boundary-portal/stores → stores}/host-registry.store.js +1 -12
  122. package/lib/module/components/boundary/portal/stores/host-registry.store.js.map +1 -0
  123. package/lib/module/components/boundary/portal/{components/boundary-portal/stores → stores}/portal-boundary-host.store.js +17 -17
  124. package/lib/module/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -0
  125. package/lib/module/components/boundary/portal/utils/naming.js +6 -0
  126. package/lib/module/components/boundary/portal/utils/naming.js.map +1 -1
  127. package/lib/module/components/boundary/portal/utils/resolve-portal.js +7 -27
  128. package/lib/module/components/boundary/portal/utils/resolve-portal.js.map +1 -1
  129. package/lib/module/components/boundary/providers/boundary-root.provider.js +13 -7
  130. package/lib/module/components/boundary/providers/boundary-root.provider.js.map +1 -1
  131. package/lib/module/components/screen/container/helpers/layer-component.js +35 -0
  132. package/lib/module/components/screen/container/helpers/layer-component.js.map +1 -0
  133. package/lib/module/components/screen/container/{layers/render-component.js → helpers/uses-layer-render-props.js} +1 -1
  134. package/lib/module/components/screen/container/helpers/uses-layer-render-props.js.map +1 -0
  135. package/lib/module/components/screen/container/layers/backdrop.js +5 -13
  136. package/lib/module/components/screen/container/layers/backdrop.js.map +1 -1
  137. package/lib/module/components/screen/container/layers/clip.js +112 -0
  138. package/lib/module/components/screen/container/layers/clip.js.map +1 -0
  139. package/lib/module/components/screen/container/layers/content.js +18 -33
  140. package/lib/module/components/screen/container/layers/content.js.map +1 -1
  141. package/lib/module/components/screen/container/layers/surface.js +4 -15
  142. package/lib/module/components/screen/container/layers/surface.js.map +1 -1
  143. package/lib/module/components/screen/lifecycle/hooks/use-open-transition-intent.js +17 -2
  144. package/lib/module/components/screen/lifecycle/hooks/use-open-transition-intent.js.map +1 -1
  145. package/lib/module/constants.js +3 -1
  146. package/lib/module/constants.js.map +1 -1
  147. package/lib/module/hooks/navigation/use-navigation-helpers.js +16 -4
  148. package/lib/module/hooks/navigation/use-navigation-helpers.js.map +1 -1
  149. package/lib/module/providers/screen/motion/animation/helpers/build-screen-transition-options.js +0 -1
  150. package/lib/module/providers/screen/motion/animation/helpers/build-screen-transition-options.js.map +1 -1
  151. package/lib/module/providers/screen/motion/animation/helpers/hydrate-transition-state/index.js +3 -2
  152. package/lib/module/providers/screen/motion/animation/helpers/hydrate-transition-state/index.js.map +1 -1
  153. package/lib/module/providers/screen/motion/options/helpers.js +1 -3
  154. package/lib/module/providers/screen/motion/options/helpers.js.map +1 -1
  155. package/lib/module/providers/screen/orchestrator/helpers/use-interpolator-state.js +6 -4
  156. package/lib/module/providers/screen/orchestrator/helpers/use-interpolator-state.js.map +1 -1
  157. package/lib/module/providers/screen/orchestrator/helpers/use-pair-presentation.js +73 -0
  158. package/lib/module/providers/screen/orchestrator/helpers/use-pair-presentation.js.map +1 -0
  159. package/lib/module/providers/screen/orchestrator/orchestrator.provider.js +3 -0
  160. package/lib/module/providers/screen/orchestrator/orchestrator.provider.js.map +1 -1
  161. package/lib/module/providers/screen/orchestrator/styles/constants.js +1 -0
  162. package/lib/module/providers/screen/orchestrator/styles/constants.js.map +1 -1
  163. package/lib/module/providers/screen/orchestrator/styles/hooks/slot-resolvers.js +5 -8
  164. package/lib/module/providers/screen/orchestrator/styles/hooks/slot-resolvers.js.map +1 -1
  165. package/lib/module/types/animation.types.js +3 -1
  166. package/lib/module/types/animation.types.js.map +1 -1
  167. package/lib/module/utils/bounds/navigation/reveal/build.js +30 -63
  168. package/lib/module/utils/bounds/navigation/reveal/build.js.map +1 -1
  169. package/lib/module/utils/bounds/navigation/reveal/config.js +2 -3
  170. package/lib/module/utils/bounds/navigation/reveal/config.js.map +1 -1
  171. package/lib/module/utils/bounds/navigation/reveal/math.js +7 -7
  172. package/lib/module/utils/bounds/navigation/reveal/math.js.map +1 -1
  173. package/lib/module/utils/bounds/navigation/reveal/types.js +1 -1
  174. package/lib/module/utils/bounds/navigation/reveal/types.js.map +1 -1
  175. package/lib/module/utils/bounds/navigation/zoom/build.js +5 -7
  176. package/lib/module/utils/bounds/navigation/zoom/build.js.map +1 -1
  177. package/lib/module/utils/bounds/navigation/zoom/clip.js +59 -0
  178. package/lib/module/utils/bounds/navigation/zoom/clip.js.map +1 -0
  179. package/lib/module/utils/bounds/navigation/zoom/drag.js +1 -1
  180. package/lib/module/utils/bounds/navigation/zoom/drag.js.map +1 -1
  181. package/lib/module/utils/bounds/navigation/zoom/types.js +1 -1
  182. package/lib/module/utils/bounds/navigation/zoom/types.js.map +1 -1
  183. package/lib/typescript/components/boundary/components/boundary-lifecycle.d.ts.map +1 -1
  184. package/lib/typescript/components/boundary/components/boundary-target.d.ts.map +1 -1
  185. package/lib/typescript/components/boundary/create-boundary-component.d.ts.map +1 -1
  186. package/lib/typescript/components/boundary/helpers/presentation.d.ts +14 -0
  187. package/lib/typescript/components/boundary/helpers/presentation.d.ts.map +1 -0
  188. package/lib/typescript/components/boundary/hooks/use-boundary-presentation.d.ts +9 -0
  189. package/lib/typescript/components/boundary/hooks/use-boundary-presentation.d.ts.map +1 -0
  190. package/lib/typescript/components/boundary/hooks/use-composed-boundary-style.d.ts +4 -0
  191. package/lib/typescript/components/boundary/hooks/use-composed-boundary-style.d.ts.map +1 -0
  192. package/lib/typescript/components/boundary/index.d.ts +3 -2
  193. package/lib/typescript/components/boundary/index.d.ts.map +1 -1
  194. package/lib/typescript/components/boundary/portal/components/portal-host.d.ts +15 -0
  195. package/lib/typescript/components/boundary/portal/components/portal-host.d.ts.map +1 -0
  196. package/lib/typescript/components/boundary/portal/components/portal-overlay.d.ts +20 -0
  197. package/lib/typescript/components/boundary/portal/components/portal-overlay.d.ts.map +1 -0
  198. package/lib/typescript/components/boundary/portal/components/portal.d.ts +23 -0
  199. package/lib/typescript/components/boundary/portal/components/portal.d.ts.map +1 -0
  200. package/lib/typescript/components/boundary/portal/helpers/offset-style.d.ts.map +1 -0
  201. package/lib/typescript/components/boundary/portal/hooks/use-active-portal-boundary-host.d.ts +11 -0
  202. package/lib/typescript/components/boundary/portal/hooks/use-active-portal-boundary-host.d.ts.map +1 -0
  203. package/lib/typescript/components/boundary/portal/hooks/use-host-measurement.d.ts +13 -0
  204. package/lib/typescript/components/boundary/portal/hooks/use-host-measurement.d.ts.map +1 -0
  205. package/lib/typescript/components/boundary/portal/hooks/use-placeholder-styles.d.ts.map +1 -0
  206. package/lib/typescript/components/boundary/portal/hooks/use-portal-destination.d.ts +8 -0
  207. package/lib/typescript/components/boundary/portal/hooks/use-portal-destination.d.ts.map +1 -0
  208. package/lib/typescript/components/boundary/portal/index.d.ts +0 -1
  209. package/lib/typescript/components/boundary/portal/index.d.ts.map +1 -1
  210. package/lib/typescript/components/boundary/portal/stores/host-registry.store.d.ts.map +1 -0
  211. package/lib/typescript/components/boundary/portal/{components/boundary-portal/stores → stores}/portal-boundary-host.store.d.ts +2 -3
  212. package/lib/typescript/components/boundary/portal/stores/portal-boundary-host.store.d.ts.map +1 -0
  213. package/lib/typescript/components/boundary/portal/utils/naming.d.ts +1 -0
  214. package/lib/typescript/components/boundary/portal/utils/naming.d.ts.map +1 -1
  215. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts +2 -7
  216. package/lib/typescript/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -1
  217. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts +5 -2
  218. package/lib/typescript/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  219. package/lib/typescript/components/screen/container/helpers/layer-component.d.ts +10 -0
  220. package/lib/typescript/components/screen/container/helpers/layer-component.d.ts.map +1 -0
  221. package/lib/typescript/components/screen/container/{layers/render-component.d.ts → helpers/uses-layer-render-props.d.ts} +1 -1
  222. package/lib/typescript/components/screen/container/helpers/uses-layer-render-props.d.ts.map +1 -0
  223. package/lib/typescript/components/screen/container/layers/backdrop.d.ts.map +1 -1
  224. package/lib/typescript/components/screen/container/layers/clip.d.ts +7 -0
  225. package/lib/typescript/components/screen/container/layers/clip.d.ts.map +1 -0
  226. package/lib/typescript/components/screen/container/layers/content.d.ts.map +1 -1
  227. package/lib/typescript/components/screen/container/layers/surface.d.ts.map +1 -1
  228. package/lib/typescript/components/screen/lifecycle/hooks/use-open-transition-intent.d.ts.map +1 -1
  229. package/lib/typescript/constants.d.ts +3 -1
  230. package/lib/typescript/constants.d.ts.map +1 -1
  231. package/lib/typescript/hooks/navigation/use-navigation-helpers.d.ts.map +1 -1
  232. package/lib/typescript/index.d.ts +1 -1
  233. package/lib/typescript/index.d.ts.map +1 -1
  234. package/lib/typescript/providers/screen/motion/animation/helpers/build-screen-transition-options.d.ts.map +1 -1
  235. package/lib/typescript/providers/screen/motion/animation/helpers/hydrate-transition-state/index.d.ts.map +1 -1
  236. package/lib/typescript/providers/screen/motion/options/helpers.d.ts.map +1 -1
  237. package/lib/typescript/providers/screen/motion/options/types.d.ts +0 -1
  238. package/lib/typescript/providers/screen/motion/options/types.d.ts.map +1 -1
  239. package/lib/typescript/providers/screen/orchestrator/helpers/use-interpolator-state.d.ts.map +1 -1
  240. package/lib/typescript/providers/screen/orchestrator/helpers/use-pair-presentation.d.ts +21 -0
  241. package/lib/typescript/providers/screen/orchestrator/helpers/use-pair-presentation.d.ts.map +1 -0
  242. package/lib/typescript/providers/screen/orchestrator/orchestrator.provider.d.ts +2 -0
  243. package/lib/typescript/providers/screen/orchestrator/orchestrator.provider.d.ts.map +1 -1
  244. package/lib/typescript/providers/screen/orchestrator/styles/constants.d.ts.map +1 -1
  245. package/lib/typescript/providers/screen/orchestrator/styles/hooks/slot-resolvers.d.ts +1 -1
  246. package/lib/typescript/providers/screen/orchestrator/styles/hooks/slot-resolvers.d.ts.map +1 -1
  247. package/lib/typescript/providers/screen/orchestrator/styles/types.d.ts +1 -1
  248. package/lib/typescript/providers/screen/orchestrator/styles/types.d.ts.map +1 -1
  249. package/lib/typescript/types/animation.types.d.ts +16 -4
  250. package/lib/typescript/types/animation.types.d.ts.map +1 -1
  251. package/lib/typescript/types/bounds.types.d.ts +7 -15
  252. package/lib/typescript/types/bounds.types.d.ts.map +1 -1
  253. package/lib/typescript/types/index.d.ts +1 -1
  254. package/lib/typescript/types/index.d.ts.map +1 -1
  255. package/lib/typescript/types/screen.types.d.ts +1 -8
  256. package/lib/typescript/types/screen.types.d.ts.map +1 -1
  257. package/lib/typescript/utils/bounds/navigation/reveal/build.d.ts.map +1 -1
  258. package/lib/typescript/utils/bounds/navigation/reveal/config.d.ts +2 -3
  259. package/lib/typescript/utils/bounds/navigation/reveal/config.d.ts.map +1 -1
  260. package/lib/typescript/utils/bounds/navigation/reveal/math.d.ts +3 -3
  261. package/lib/typescript/utils/bounds/navigation/reveal/types.d.ts +1 -5
  262. package/lib/typescript/utils/bounds/navigation/reveal/types.d.ts.map +1 -1
  263. package/lib/typescript/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  264. package/lib/typescript/utils/bounds/navigation/zoom/{mask.d.ts → clip.d.ts} +5 -5
  265. package/lib/typescript/utils/bounds/navigation/zoom/clip.d.ts.map +1 -0
  266. package/lib/typescript/utils/bounds/navigation/zoom/drag.d.ts +1 -1
  267. package/lib/typescript/utils/bounds/navigation/zoom/types.d.ts +1 -5
  268. package/lib/typescript/utils/bounds/navigation/zoom/types.d.ts.map +1 -1
  269. package/package.json +1 -1
  270. package/src/components/boundary/components/boundary-lifecycle.tsx +44 -8
  271. package/src/components/boundary/components/boundary-target.tsx +14 -36
  272. package/src/components/boundary/create-boundary-component.tsx +16 -17
  273. package/src/components/boundary/helpers/presentation.ts +88 -0
  274. package/src/components/boundary/hooks/use-boundary-presentation.ts +82 -0
  275. package/src/components/boundary/hooks/use-composed-boundary-style.ts +58 -0
  276. package/src/components/boundary/index.tsx +10 -5
  277. package/src/components/boundary/portal/components/portal-host.tsx +36 -0
  278. package/src/components/boundary/portal/components/portal-overlay.tsx +223 -0
  279. package/src/components/boundary/portal/components/portal.tsx +124 -0
  280. package/src/components/boundary/portal/hooks/use-active-portal-boundary-host.ts +52 -0
  281. package/src/components/boundary/portal/hooks/use-host-measurement.ts +101 -0
  282. package/src/components/boundary/portal/hooks/use-portal-destination.ts +53 -0
  283. package/src/components/boundary/portal/index.ts +0 -1
  284. package/src/components/boundary/portal/{components/boundary-portal/stores → stores}/host-registry.store.ts +1 -20
  285. package/src/components/boundary/portal/{components/boundary-portal/stores → stores}/portal-boundary-host.store.ts +19 -26
  286. package/src/components/boundary/portal/utils/naming.ts +10 -0
  287. package/src/components/boundary/portal/utils/resolve-portal.ts +9 -48
  288. package/src/components/boundary/providers/boundary-root.provider.tsx +34 -22
  289. package/src/components/screen/container/helpers/layer-component.tsx +38 -0
  290. package/src/components/screen/container/layers/backdrop.tsx +8 -31
  291. package/src/components/screen/container/layers/clip.tsx +124 -0
  292. package/src/components/screen/container/layers/content.tsx +21 -62
  293. package/src/components/screen/container/layers/surface.tsx +5 -23
  294. package/src/components/screen/lifecycle/hooks/use-open-transition-intent.ts +26 -2
  295. package/src/constants.ts +3 -1
  296. package/src/hooks/navigation/use-navigation-helpers.ts +13 -7
  297. package/src/index.ts +1 -0
  298. package/src/providers/screen/motion/animation/helpers/build-screen-transition-options.ts +0 -1
  299. package/src/providers/screen/motion/animation/helpers/hydrate-transition-state/index.ts +3 -2
  300. package/src/providers/screen/motion/options/helpers.ts +0 -6
  301. package/src/providers/screen/motion/options/types.ts +0 -1
  302. package/src/providers/screen/orchestrator/helpers/use-interpolator-state.ts +13 -8
  303. package/src/providers/screen/orchestrator/helpers/use-pair-presentation.ts +103 -0
  304. package/src/providers/screen/orchestrator/orchestrator.provider.tsx +4 -0
  305. package/src/providers/screen/orchestrator/styles/constants.ts +1 -0
  306. package/src/providers/screen/orchestrator/styles/hooks/slot-resolvers.tsx +8 -11
  307. package/src/providers/screen/orchestrator/styles/types.ts +1 -0
  308. package/src/types/animation.types.ts +35 -4
  309. package/src/types/bounds.types.ts +7 -15
  310. package/src/types/index.ts +1 -0
  311. package/src/types/screen.types.ts +1 -8
  312. package/src/utils/bounds/navigation/reveal/build.ts +46 -80
  313. package/src/utils/bounds/navigation/reveal/config.ts +2 -4
  314. package/src/utils/bounds/navigation/reveal/math.ts +9 -9
  315. package/src/utils/bounds/navigation/reveal/types.ts +1 -8
  316. package/src/utils/bounds/navigation/zoom/build.ts +16 -26
  317. package/src/utils/bounds/navigation/zoom/{mask.ts → clip.ts} +42 -48
  318. package/src/utils/bounds/navigation/zoom/drag.ts +2 -2
  319. package/src/utils/bounds/navigation/zoom/types.ts +1 -8
  320. package/lib/commonjs/components/boundary/hooks/use-boundary-measurement.js +0 -83
  321. package/lib/commonjs/components/boundary/hooks/use-boundary-measurement.js.map +0 -1
  322. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/components/host.js +0 -45
  323. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/components/host.js.map +0 -1
  324. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +0 -119
  325. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +0 -1
  326. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.js +0 -20
  327. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.js.map +0 -1
  328. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/host-name.js +0 -14
  329. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/helpers/host-name.js.map +0 -1
  330. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +0 -136
  331. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +0 -1
  332. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js +0 -53
  333. package/lib/commonjs/components/boundary/portal/components/boundary-content-portal/index.js.map +0 -1
  334. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js +0 -99
  335. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/host.js.map +0 -1
  336. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +0 -104
  337. package/lib/commonjs/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +0 -1
  338. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/local-measurement.js +0 -13
  339. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/local-measurement.js.map +0 -1
  340. package/lib/commonjs/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +0 -1
  341. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.js +0 -82
  342. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.js.map +0 -1
  343. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +0 -58
  344. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +0 -1
  345. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.js +0 -67
  346. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.js.map +0 -1
  347. package/lib/commonjs/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.js.map +0 -1
  348. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js +0 -68
  349. package/lib/commonjs/components/boundary/portal/components/boundary-portal/index.js.map +0 -1
  350. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +0 -1
  351. package/lib/commonjs/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +0 -1
  352. package/lib/commonjs/components/screen/container/layers/maybe-masked-navigation-container.js +0 -83
  353. package/lib/commonjs/components/screen/container/layers/maybe-masked-navigation-container.js.map +0 -1
  354. package/lib/commonjs/components/screen/container/layers/render-component.js.map +0 -1
  355. package/lib/commonjs/utils/bounds/navigation/zoom/mask.js +0 -73
  356. package/lib/commonjs/utils/bounds/navigation/zoom/mask.js.map +0 -1
  357. package/lib/module/components/boundary/hooks/use-boundary-measurement.js +0 -78
  358. package/lib/module/components/boundary/hooks/use-boundary-measurement.js.map +0 -1
  359. package/lib/module/components/boundary/portal/components/boundary-content-portal/components/host.js +0 -40
  360. package/lib/module/components/boundary/portal/components/boundary-content-portal/components/host.js.map +0 -1
  361. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js +0 -110
  362. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.js.map +0 -1
  363. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.js +0 -16
  364. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.js.map +0 -1
  365. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/host-name.js +0 -9
  366. package/lib/module/components/boundary/portal/components/boundary-content-portal/helpers/host-name.js.map +0 -1
  367. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js +0 -131
  368. package/lib/module/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.js.map +0 -1
  369. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js +0 -42
  370. package/lib/module/components/boundary/portal/components/boundary-content-portal/index.js.map +0 -1
  371. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js +0 -94
  372. package/lib/module/components/boundary/portal/components/boundary-portal/components/host.js.map +0 -1
  373. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js +0 -99
  374. package/lib/module/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.js.map +0 -1
  375. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/local-measurement.js +0 -8
  376. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/local-measurement.js.map +0 -1
  377. package/lib/module/components/boundary/portal/components/boundary-portal/helpers/offset-style.js.map +0 -1
  378. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.js +0 -76
  379. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.js.map +0 -1
  380. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js +0 -53
  381. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.js.map +0 -1
  382. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.js +0 -62
  383. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.js.map +0 -1
  384. package/lib/module/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.js.map +0 -1
  385. package/lib/module/components/boundary/portal/components/boundary-portal/index.js +0 -63
  386. package/lib/module/components/boundary/portal/components/boundary-portal/index.js.map +0 -1
  387. package/lib/module/components/boundary/portal/components/boundary-portal/stores/host-registry.store.js.map +0 -1
  388. package/lib/module/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.js.map +0 -1
  389. package/lib/module/components/screen/container/layers/maybe-masked-navigation-container.js +0 -78
  390. package/lib/module/components/screen/container/layers/maybe-masked-navigation-container.js.map +0 -1
  391. package/lib/module/components/screen/container/layers/render-component.js.map +0 -1
  392. package/lib/module/utils/bounds/navigation/zoom/mask.js +0 -68
  393. package/lib/module/utils/bounds/navigation/zoom/mask.js.map +0 -1
  394. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts +0 -28
  395. package/lib/typescript/components/boundary/hooks/use-boundary-measurement.d.ts.map +0 -1
  396. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/components/host.d.ts +0 -10
  397. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/components/host.d.ts.map +0 -1
  398. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts +0 -45
  399. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.d.ts.map +0 -1
  400. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.d.ts +0 -8
  401. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.d.ts.map +0 -1
  402. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/host-name.d.ts +0 -2
  403. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/helpers/host-name.d.ts.map +0 -1
  404. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts +0 -10
  405. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.d.ts.map +0 -1
  406. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/index.d.ts +0 -9
  407. package/lib/typescript/components/boundary/portal/components/boundary-content-portal/index.d.ts.map +0 -1
  408. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/host.d.ts +0 -7
  409. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/host.d.ts.map +0 -1
  410. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.d.ts +0 -13
  411. package/lib/typescript/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.d.ts.map +0 -1
  412. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/local-measurement.d.ts +0 -4
  413. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/local-measurement.d.ts.map +0 -1
  414. package/lib/typescript/components/boundary/portal/components/boundary-portal/helpers/offset-style.d.ts.map +0 -1
  415. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.d.ts +0 -21
  416. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.d.ts.map +0 -1
  417. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts +0 -10
  418. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.d.ts.map +0 -1
  419. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.d.ts +0 -12
  420. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.d.ts.map +0 -1
  421. package/lib/typescript/components/boundary/portal/components/boundary-portal/hooks/use-placeholder-styles.d.ts.map +0 -1
  422. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts +0 -12
  423. package/lib/typescript/components/boundary/portal/components/boundary-portal/index.d.ts.map +0 -1
  424. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/host-registry.store.d.ts.map +0 -1
  425. package/lib/typescript/components/boundary/portal/components/boundary-portal/stores/portal-boundary-host.store.d.ts.map +0 -1
  426. package/lib/typescript/components/screen/container/layers/maybe-masked-navigation-container.d.ts +0 -9
  427. package/lib/typescript/components/screen/container/layers/maybe-masked-navigation-container.d.ts.map +0 -1
  428. package/lib/typescript/components/screen/container/layers/render-component.d.ts.map +0 -1
  429. package/lib/typescript/utils/bounds/navigation/zoom/mask.d.ts.map +0 -1
  430. package/src/components/boundary/hooks/use-boundary-measurement.ts +0 -98
  431. package/src/components/boundary/portal/components/boundary-content-portal/components/host.tsx +0 -56
  432. package/src/components/boundary/portal/components/boundary-content-portal/helpers/active-handoff-receiver.ts +0 -192
  433. package/src/components/boundary/portal/components/boundary-content-portal/helpers/handoff-visibility.ts +0 -23
  434. package/src/components/boundary/portal/components/boundary-content-portal/helpers/host-name.ts +0 -9
  435. package/src/components/boundary/portal/components/boundary-content-portal/hooks/use-boundary-content-portal-attachment.ts +0 -252
  436. package/src/components/boundary/portal/components/boundary-content-portal/index.tsx +0 -81
  437. package/src/components/boundary/portal/components/boundary-portal/components/host.tsx +0 -119
  438. package/src/components/boundary/portal/components/boundary-portal/components/portal-boundary-host.tsx +0 -139
  439. package/src/components/boundary/portal/components/boundary-portal/helpers/local-measurement.ts +0 -10
  440. package/src/components/boundary/portal/components/boundary-portal/hooks/use-active-portal-boundary-host.ts +0 -118
  441. package/src/components/boundary/portal/components/boundary-portal/hooks/use-boundary-portal-attachment.ts +0 -64
  442. package/src/components/boundary/portal/components/boundary-portal/hooks/use-host-measurement.ts +0 -90
  443. package/src/components/boundary/portal/components/boundary-portal/index.tsx +0 -97
  444. package/src/components/screen/container/layers/maybe-masked-navigation-container.tsx +0 -113
  445. /package/lib/commonjs/components/boundary/portal/{components/boundary-portal/helpers → helpers}/offset-style.js +0 -0
  446. /package/lib/commonjs/components/boundary/portal/{components/boundary-portal/hooks → hooks}/use-placeholder-styles.js +0 -0
  447. /package/lib/module/components/boundary/portal/{components/boundary-portal/helpers → helpers}/offset-style.js +0 -0
  448. /package/lib/module/components/boundary/portal/{components/boundary-portal/hooks → hooks}/use-placeholder-styles.js +0 -0
  449. /package/lib/typescript/components/boundary/portal/{components/boundary-portal/helpers → helpers}/offset-style.d.ts +0 -0
  450. /package/lib/typescript/components/boundary/portal/{components/boundary-portal/hooks → hooks}/use-placeholder-styles.d.ts +0 -0
  451. /package/lib/typescript/components/boundary/portal/{components/boundary-portal/stores → stores}/host-registry.store.d.ts +0 -0
  452. /package/src/components/boundary/portal/{components/boundary-portal/helpers → helpers}/offset-style.ts +0 -0
  453. /package/src/components/boundary/portal/{components/boundary-portal/hooks → hooks}/use-placeholder-styles.ts +0 -0
  454. /package/src/components/screen/container/{layers/render-component.ts → helpers/uses-layer-render-props.ts} +0 -0
@@ -0,0 +1,101 @@
1
+ import type { View } from "react-native";
2
+ import {
3
+ cancelAnimation,
4
+ type MeasuredDimensions,
5
+ measure,
6
+ useAnimatedReaction,
7
+ useAnimatedRef,
8
+ useDerivedValue,
9
+ useSharedValue,
10
+ withDelay,
11
+ withTiming,
12
+ } from "react-native-reanimated";
13
+
14
+ import type { BoundaryLocalMeasurementValue } from "../../types";
15
+
16
+ const HOST_MEASUREMENT_RETRY_DELAY_MS = 16;
17
+ const MAX_HOST_MEASUREMENT_ATTEMPTS = 20;
18
+
19
+ type UseHostMeasurementParams = {
20
+ measurementKey: string | null;
21
+ boundaryMeasurements: BoundaryLocalMeasurementValue[];
22
+ };
23
+
24
+ export const useHostMeasurement = ({
25
+ measurementKey,
26
+ boundaryMeasurements,
27
+ }: UseHostMeasurementParams) => {
28
+ const hostRef = useAnimatedRef<View>();
29
+ const measurement = useSharedValue<{
30
+ key: string;
31
+ bounds: MeasuredDimensions;
32
+ } | null>(null);
33
+ const hostBounds = useDerivedValue(() => {
34
+ const captured = measurement.get();
35
+ return captured?.key === measurementKey ? captured.bounds : null;
36
+ });
37
+ const retryToken = useSharedValue(0);
38
+ const attempts = useSharedValue({ key: measurementKey, count: 0 });
39
+
40
+ useAnimatedReaction(
41
+ () => {
42
+ "worklet";
43
+ if (!measurementKey) {
44
+ return null;
45
+ }
46
+
47
+ // Hosts mount before their screen is visible. Wait for source capture
48
+ // rather than caching the screen's initial offscreen position.
49
+ let hasSource = false;
50
+ for (const measurement of boundaryMeasurements) {
51
+ if (measurement.get()) {
52
+ hasSource = true;
53
+ break;
54
+ }
55
+ }
56
+ if (!hasSource) return null;
57
+ return [
58
+ measurementKey,
59
+ measurement.get()?.key ?? null,
60
+ retryToken.get(),
61
+ ] as const;
62
+ },
63
+ (state) => {
64
+ "worklet";
65
+ if (!state) {
66
+ cancelAnimation(retryToken);
67
+ return;
68
+ }
69
+
70
+ const [requestedKey, completedKey] = state;
71
+ if (requestedKey === completedKey) {
72
+ return;
73
+ }
74
+
75
+ cancelAnimation(retryToken);
76
+ const count =
77
+ attempts.get().key === requestedKey ? attempts.get().count : 0;
78
+ if (count >= MAX_HOST_MEASUREMENT_ATTEMPTS) return;
79
+ attempts.set({ key: requestedKey, count: count + 1 });
80
+
81
+ const measured = measure(hostRef);
82
+ if (!measured || measured.width <= 0 || measured.height <= 0) {
83
+ if (count + 1 < MAX_HOST_MEASUREMENT_ATTEMPTS) {
84
+ retryToken.set(
85
+ withDelay(
86
+ HOST_MEASUREMENT_RETRY_DELAY_MS,
87
+ withTiming(retryToken.get() + 1, { duration: 0 }),
88
+ ),
89
+ );
90
+ }
91
+ return;
92
+ }
93
+
94
+ measurement.set({ key: requestedKey, bounds: { ...measured } });
95
+ },
96
+ );
97
+ return {
98
+ hostBounds,
99
+ hostRef,
100
+ };
101
+ };
@@ -0,0 +1,53 @@
1
+ import { useAnimatedProps, useSharedValue } from "react-native-reanimated";
2
+ import { useBoundaryRootStore } from "../../providers/boundary-root.provider";
3
+ import { useActiveHostKey } from "../stores/host-registry.store";
4
+ import {
5
+ createHandoffHostName,
6
+ PORTAL_HOST_NAME_RESET_VALUE,
7
+ } from "../utils/naming";
8
+ import { useActivePortalBoundaryHost } from "./use-active-portal-boundary-host";
9
+
10
+ export type PortalMode = "handoff" | "escapeClipping";
11
+
12
+ export function usePortalDestination(boundaryId: string, mode: PortalMode) {
13
+ const { currentScreenKey, localMeasurement, slotsMap, boundaryPresentation } =
14
+ useBoundaryRootStore((s) => s);
15
+ const portalHostReady = useSharedValue(false);
16
+ const escapeHostKey = useActiveHostKey(
17
+ mode === "escapeClipping" ? currentScreenKey : null,
18
+ );
19
+ const portalHostName = useActivePortalBoundaryHost({
20
+ boundaryId,
21
+ escapeHostKey,
22
+ localMeasurement,
23
+ portalHostReady,
24
+ slotsMap,
25
+ });
26
+ const teleportProps = useAnimatedProps(() => {
27
+ "worklet";
28
+ const { owner, receiver, slots } = boundaryPresentation.get();
29
+ const slot = slots[boundaryId];
30
+ const {
31
+ pointerEvents: _pointerEvents,
32
+ handoffTarget: _handoffTarget,
33
+ ...props
34
+ } = slot?.props ?? {};
35
+ let hostName: string | null = PORTAL_HOST_NAME_RESET_VALUE;
36
+ if (mode === "handoff") {
37
+ hostName = createHandoffHostName(receiver, boundaryId);
38
+ } else if (
39
+ owner?.ready &&
40
+ localMeasurement.get()?.pairKey === owner.pairKey &&
41
+ slot !== undefined &&
42
+ portalHostReady.get()
43
+ ) {
44
+ hostName = portalHostName;
45
+ }
46
+
47
+ return { ...props, hostName };
48
+ });
49
+ return {
50
+ teleportProps,
51
+ localHostName: createHandoffHostName(currentScreenKey, boundaryId),
52
+ };
53
+ }
@@ -1,2 +1 @@
1
- export { Host } from "./components/boundary-portal/components/host";
2
1
  export { PortalProvider } from "./components/portal-provider";
@@ -6,15 +6,9 @@ export type HostRegistration = {
6
6
  fallback: boolean;
7
7
  };
8
8
 
9
- type HostRegistrySnapshot = Record<string, string>;
10
-
11
- const EMPTY_SNAPSHOT: HostRegistrySnapshot = {};
12
-
13
9
  const listeners = new Set<() => void>();
14
10
  const hostStacks = new Map<string, HostRegistration[]>();
15
11
 
16
- let snapshot: HostRegistrySnapshot = EMPTY_SNAPSHOT;
17
-
18
12
  /**
19
13
  * The active host for a screen. Stack ordering is the load-bearing invariant:
20
14
  * `registerHost` unshifts fallback hosts to the front and pushes real hosts to
@@ -39,19 +33,7 @@ const getActiveHostFromStack = (
39
33
  return stack[0]?.hostKey ?? screenKey;
40
34
  };
41
35
 
42
- const buildSnapshot = (): HostRegistrySnapshot => {
43
- const nextSnapshot: HostRegistrySnapshot = {};
44
-
45
- for (const [screenKey, stack] of hostStacks) {
46
- nextSnapshot[screenKey] = getActiveHostFromStack(screenKey, stack);
47
- }
48
-
49
- return nextSnapshot;
50
- };
51
-
52
36
  const emit = () => {
53
- snapshot = buildSnapshot();
54
-
55
37
  for (const listener of listeners) {
56
38
  listener();
57
39
  }
@@ -116,7 +98,7 @@ export const unregisterHost = (screenKey: string, hostKey: string) => {
116
98
  };
117
99
 
118
100
  export const getActiveHostKey = (screenKey: string) => {
119
- return snapshot[screenKey] ?? screenKey;
101
+ return getActiveHostFromStack(screenKey, hostStacks.get(screenKey));
120
102
  };
121
103
 
122
104
  export const useActiveHostKey = (screenKey?: string | null) => {
@@ -129,6 +111,5 @@ export const useActiveHostKey = (screenKey?: string | null) => {
129
111
 
130
112
  export const resetHostRegistry = () => {
131
113
  hostStacks.clear();
132
- snapshot = EMPTY_SNAPSHOT;
133
114
  emit();
134
115
  };
@@ -1,13 +1,12 @@
1
1
  import { useSyncExternalStore } from "react";
2
2
  import type { SharedValue } from "react-native-reanimated";
3
- import type { NormalizedTransitionInterpolatedStyle } from "../../../../../../types/animation.types";
4
- import type { BoundaryLocalMeasurementValue } from "../../../../types";
3
+ import type { NormalizedTransitionInterpolatedStyle } from "../../../../types/animation.types";
4
+ import type { BoundaryLocalMeasurementValue } from "../../types";
5
5
 
6
6
  export type ActivePortalBoundaryHost = {
7
7
  boundaryId: string;
8
8
  hostKey: string;
9
9
  localMeasurement: BoundaryLocalMeasurementValue;
10
- pairKey: string;
11
10
  portalHostName: string;
12
11
  portalHostReady: SharedValue<boolean>;
13
12
  slotsMap: SharedValue<NormalizedTransitionInterpolatedStyle>;
@@ -26,26 +25,17 @@ let snapshot: PortalSnapshot = {
26
25
  hostsByScope: {},
27
26
  };
28
27
 
29
- const buildSnapshot = (): PortalSnapshot => {
30
- const hostsByScope: Record<string, ActivePortalBoundaryHost[]> = {};
31
-
32
- for (const host of activeBoundaryHosts.values()) {
33
- const hosts = hostsByScope[host.hostKey] ?? [];
34
- hosts.push(host);
35
- hostsByScope[host.hostKey] = hosts;
36
- }
37
-
38
- return {
39
- hostsByScope,
40
- };
41
- };
42
-
43
- const emit = () => {
44
- snapshot = buildSnapshot();
45
-
46
- for (const listener of listeners) {
47
- listener();
28
+ // Preserve other overlays' snapshots so a registration only rerenders its owners.
29
+ const emit = (...hostKeys: string[]) => {
30
+ const hostsByScope = { ...snapshot.hostsByScope };
31
+ for (const hostKey of new Set(hostKeys)) {
32
+ hostsByScope[hostKey] = Array.from(activeBoundaryHosts.values()).filter(
33
+ (host) => host.hostKey === hostKey,
34
+ );
35
+ if (!hostsByScope[hostKey].length) delete hostsByScope[hostKey];
48
36
  }
37
+ snapshot = { hostsByScope };
38
+ for (const listener of listeners) listener();
49
39
  };
50
40
 
51
41
  const isSameHost = (
@@ -56,7 +46,6 @@ const isSameHost = (
56
46
  a.boundaryId === b.boundaryId &&
57
47
  a.hostKey === b.hostKey &&
58
48
  a.localMeasurement === b.localMeasurement &&
59
- a.pairKey === b.pairKey &&
60
49
  a.portalHostName === b.portalHostName &&
61
50
  a.portalHostReady === b.portalHostReady &&
62
51
  a.slotsMap === b.slotsMap
@@ -70,17 +59,21 @@ export const mountPortalBoundaryHost = (host: ActivePortalBoundaryHost) => {
70
59
  }
71
60
 
72
61
  activeBoundaryHosts.set(host.portalHostName, host);
73
- emit();
62
+ emit(host.hostKey, previous?.hostKey ?? host.hostKey);
74
63
  };
75
64
 
76
65
  export const unmountPortalBoundaryHostByName = (
77
66
  portalHostName: string | null | undefined,
78
67
  ) => {
79
- if (!portalHostName || !activeBoundaryHosts.delete(portalHostName)) {
68
+ const host = portalHostName
69
+ ? activeBoundaryHosts.get(portalHostName)
70
+ : undefined;
71
+ if (!host) {
80
72
  return;
81
73
  }
82
74
 
83
- emit();
75
+ activeBoundaryHosts.delete(host.portalHostName);
76
+ emit(host.hostKey);
84
77
  };
85
78
 
86
79
  const subscribe = (listener: () => void) => {
@@ -10,3 +10,13 @@ export const createBoundaryPortalHostName = (
10
10
  };
11
11
 
12
12
  export const PORTAL_HOST_NAME_RESET_VALUE = null;
13
+
14
+ const BOUNDARY_CONTENT_PORTAL_HOST_NAME_SUFFIX = "-content-portal-host";
15
+
16
+ export const createHandoffHostName = (
17
+ screenKey: string,
18
+ boundaryId: string,
19
+ ) => {
20
+ "worklet";
21
+ return `${screenKey}-${boundaryId}${BOUNDARY_CONTENT_PORTAL_HOST_NAME_SUFFIX}`;
22
+ };
@@ -1,58 +1,19 @@
1
+ import type { BoundaryRuntimeFlags } from "../../../../stores/bounds/types";
1
2
  import { logger } from "../../../../utils/logger";
2
3
  import { isTeleportAvailable } from "../teleport";
3
4
 
4
- export type BoundaryPortalRuntime = Readonly<{
5
- handoff: boolean;
6
- escapeClipping: boolean;
7
- }>;
8
-
9
- type ResolveBoundaryPortalParams = {
10
- handoff?: boolean;
11
- escapeClipping?: boolean;
12
- };
13
-
14
- const DISABLED_RUNTIME: BoundaryPortalRuntime = {
15
- handoff: false,
16
- escapeClipping: false,
17
- };
18
- const HANDOFF_RUNTIME: BoundaryPortalRuntime = {
19
- handoff: true,
20
- escapeClipping: false,
21
- };
22
- const ESCAPE_CLIPPING_RUNTIME: BoundaryPortalRuntime = {
23
- handoff: false,
24
- escapeClipping: true,
25
- };
26
- const HANDOFF_ESCAPE_CLIPPING_RUNTIME: BoundaryPortalRuntime = {
27
- handoff: true,
28
- escapeClipping: true,
29
- };
30
-
31
5
  export const resolveBoundaryPortal = ({
32
- handoff,
33
- escapeClipping,
34
- }: ResolveBoundaryPortalParams): BoundaryPortalRuntime => {
35
- const resolvedHandoff = handoff ?? false;
36
- const resolvedEscapeClipping = escapeClipping ?? false;
37
-
38
- const enabled = resolvedHandoff || resolvedEscapeClipping;
39
-
40
- if (!enabled) {
41
- return DISABLED_RUNTIME;
42
- }
43
-
44
- if (!isTeleportAvailable) {
6
+ handoff = false,
7
+ escapeClipping = false,
8
+ }: BoundaryRuntimeFlags) => {
9
+ if (!isTeleportAvailable && (handoff || escapeClipping)) {
45
10
  logger.warnOnce(
46
11
  "boundary:teleport-missing",
47
12
  "react-native-teleport is not installed; handoff and escapeClipping boundaries will render inline.",
48
13
  );
49
-
50
- return DISABLED_RUNTIME;
51
14
  }
52
-
53
- return resolvedHandoff
54
- ? resolvedEscapeClipping
55
- ? HANDOFF_ESCAPE_CLIPPING_RUNTIME
56
- : HANDOFF_RUNTIME
57
- : ESCAPE_CLIPPING_RUNTIME;
15
+ return {
16
+ handoff: isTeleportAvailable && handoff,
17
+ escapeClipping: isTeleportAvailable && escapeClipping,
18
+ };
58
19
  };
@@ -10,20 +10,15 @@ import type { View } from "react-native";
10
10
  import type { AnimatedRef } from "react-native-reanimated";
11
11
  import { useAnimatedRef, useSharedValue } from "react-native-reanimated";
12
12
  import { useBuilderStore } from "../../../providers/screen/builder";
13
- import {
14
- useComposedSlotStyles,
15
- useSlotStackingStyles,
16
- } from "../../../providers/screen/orchestrator/styles";
17
13
  import { useBlankStackStore } from "../../../providers/stack/blank-stack.provider";
18
14
  import { createBoundTag } from "../../../stores/bounds/helpers/link-pairs.helpers";
19
15
  import type { BoundTag } from "../../../stores/bounds/types";
20
16
  import createProvider from "../../../utils/create-provider";
21
17
  import { logger } from "../../../utils/logger";
22
18
  import { BoundaryLifecycle } from "../components/boundary-lifecycle";
23
- import {
24
- type BoundaryPortalRuntime,
25
- resolveBoundaryPortal,
26
- } from "../portal/utils/resolve-portal";
19
+ import { useBoundaryPresentation } from "../hooks/use-boundary-presentation";
20
+ import { useComposedBoundaryStyle } from "../hooks/use-composed-boundary-style";
21
+ import { resolveBoundaryPortal } from "../portal/utils/resolve-portal";
27
22
  import type {
28
23
  BoundaryConfigProps,
29
24
  BoundaryId,
@@ -42,13 +37,17 @@ export const TARGET_OUTSIDE_ROOT_WARNING =
42
37
  "Boundary.Target must be rendered inside Transition.Boundary or a component created by createBoundaryComponent.";
43
38
 
44
39
  export type BoundaryRootRenderState = {
40
+ boundaryPresentation: ReturnType<
41
+ typeof useBoundaryPresentation
42
+ >["presentation"];
43
+ slotsMap: ReturnType<typeof useBoundaryPresentation>["slotsMap"];
45
44
  attachedStyle: unknown;
46
45
  boundTag: BoundTag;
47
46
  currentScreenKey: string;
48
47
  handoffEnabled: boolean;
49
48
  localMeasurement: BoundaryLocalMeasurementValue;
50
49
  measurementRef: AnimatedRef<View>;
51
- portalRuntime: BoundaryPortalRuntime;
50
+ portalRuntime: ReturnType<typeof resolveBoundaryPortal>;
52
51
  ref: AnimatedRef<View>;
53
52
  shouldRenderBoundaryRootThroughPortal: boolean;
54
53
  shouldRenderHandoffHost: boolean;
@@ -94,10 +93,10 @@ export const {
94
93
  () => createBoundTag(String(id), group),
95
94
  [id, group],
96
95
  );
97
- const portalRuntime = resolveBoundaryPortal({
98
- handoff,
99
- escapeClipping,
100
- });
96
+ const portalRuntime = useMemo(
97
+ () => resolveBoundaryPortal({ handoff, escapeClipping }),
98
+ [handoff, escapeClipping],
99
+ );
101
100
 
102
101
  const currentScreenKey = useBuilderStore(
103
102
  (s) => s.derivations.currentScreenKey,
@@ -124,8 +123,19 @@ export const {
124
123
  const shouldAttachAssociatedStyles = enabled;
125
124
  const shouldEscapeBoundaryRootToScreenHost = portalRuntime.escapeClipping;
126
125
 
127
- const associatedStyles = useComposedSlotStyles(boundTag.tag, style);
128
- const associatedStackingStyles = useSlotStackingStyles(boundTag.tag);
126
+ const { presentation: boundaryPresentation, slotsMap } =
127
+ useBoundaryPresentation(
128
+ boundTag.tag,
129
+ enabled && (portalRuntime.handoff || portalRuntime.escapeClipping),
130
+ );
131
+
132
+ const associatedStyles = useComposedBoundaryStyle(
133
+ slotsMap,
134
+ boundTag.tag,
135
+ style,
136
+ hasTarget ? "stacking" : "full",
137
+ );
138
+
129
139
  const rootRef = useAnimatedRef<View>();
130
140
  const measurementRef = useAnimatedRef<View>();
131
141
  const localMeasurement = useSharedValue<BoundaryLocalMeasurement | null>(
@@ -155,16 +165,16 @@ export const {
155
165
  // Host-only handoff receivers still need the associated style: their
156
166
  // handoff host is absolute-filled inside this root, so the root is the
157
167
  // visual frame that animates the received payload.
158
- const attachedStyle = shouldAttachAssociatedStyles
159
- ? hasTarget
160
- ? associatedStackingStyles
161
- : shouldRenderBoundaryRootThroughPortal
162
- ? undefined
163
- : associatedStyles
164
- : undefined;
168
+ const attachedStyle =
169
+ shouldAttachAssociatedStyles &&
170
+ (hasTarget || !shouldRenderBoundaryRootThroughPortal)
171
+ ? associatedStyles
172
+ : undefined;
165
173
 
166
174
  const value = useMemo<BoundaryRootContextValue>(
167
175
  () => ({
176
+ boundaryPresentation,
177
+ slotsMap,
168
178
  attachedStyle,
169
179
  boundTag,
170
180
  currentScreenKey,
@@ -177,6 +187,8 @@ export const {
177
187
  shouldRenderHandoffHost: handoffEnabled && !hasTarget,
178
188
  }),
179
189
  [
190
+ boundaryPresentation,
191
+ slotsMap,
180
192
  attachedStyle,
181
193
  boundTag,
182
194
  currentScreenKey,
@@ -0,0 +1,38 @@
1
+ import { type ComponentType, type ReactNode, useMemo } from "react";
2
+ import type { ViewProps } from "react-native";
3
+ import Animated from "react-native-reanimated";
4
+ import type { ScreenLayerComponentProps } from "../../../../types";
5
+ import { usesLayerRenderProps } from "./uses-layer-render-props";
6
+
7
+ /** Adapts the two supported custom layer APIs without changing component identity. */
8
+ export function LayerComponent({
9
+ component,
10
+ styles,
11
+ props,
12
+ pointerEvents,
13
+ children,
14
+ collapsable,
15
+ }: ScreenLayerComponentProps & {
16
+ component?: ComponentType<any>;
17
+ children?: ReactNode;
18
+ collapsable?: ViewProps["collapsable"];
19
+ }) {
20
+ const renderProps = component && usesLayerRenderProps(component);
21
+ const Component = useMemo<ComponentType<any>>(() => {
22
+ if (!component) return Animated.View;
23
+ return usesLayerRenderProps(component)
24
+ ? component
25
+ : Animated.createAnimatedComponent(component);
26
+ }, [component]);
27
+ return (
28
+ <Component
29
+ {...(renderProps
30
+ ? { styles, props }
31
+ : { style: styles, animatedProps: props })}
32
+ pointerEvents={pointerEvents}
33
+ collapsable={collapsable}
34
+ >
35
+ {children}
36
+ </Component>
37
+ );
38
+ }
@@ -1,6 +1,5 @@
1
- import { type ComponentType, memo, useCallback, useMemo } from "react";
1
+ import { memo, useCallback } from "react";
2
2
  import { Pressable, StyleSheet } from "react-native";
3
- import Animated from "react-native-reanimated";
4
3
  import { scheduleOnRN, scheduleOnUI } from "react-native-worklets";
5
4
  import { DefaultSnapSpec } from "../../../../configs/specs";
6
5
  import { useBuilderStore } from "../../../../providers/screen/builder";
@@ -15,7 +14,7 @@ import type {
15
14
  } from "../../../../types/screen.types";
16
15
  import { animateToProgress } from "../../../../utils/animation/animate-to-progress";
17
16
  import { findCollapseTarget } from "../helpers/find-collapse-target";
18
- import { usesLayerRenderProps } from "./render-component";
17
+ import { LayerComponent } from "../helpers/layer-component";
19
18
 
20
19
  export const BackdropLayer = memo(function BackdropLayer({
21
20
  backdropBehavior,
@@ -41,16 +40,6 @@ export const BackdropLayer = memo(function BackdropLayer({
41
40
  const { targetProgress, animationProgress, resolvedAutoSnapPoint } =
42
41
  animations;
43
42
 
44
- const AnimatedBackdropComponent = useMemo(
45
- () =>
46
- BackdropComponent && !usesLayerRenderProps(BackdropComponent)
47
- ? Animated.createAnimatedComponent(
48
- BackdropComponent as ComponentType<any>,
49
- )
50
- : null,
51
- [BackdropComponent],
52
- );
53
-
54
43
  const handleBackdropPress = useCallback(() => {
55
44
  if (backdropBehavior === "dismiss") {
56
45
  onDismissRequest?.();
@@ -140,24 +129,12 @@ export const BackdropLayer = memo(function BackdropLayer({
140
129
  pointerEvents={backdropBehavior === "passthrough" ? "none" : "auto"}
141
130
  onPress={isBackdropActive ? handleBackdropPress : undefined}
142
131
  >
143
- {AnimatedBackdropComponent ? (
144
- <AnimatedBackdropComponent
145
- style={backdropStyles}
146
- animatedProps={animatedBackdropProps}
147
- pointerEvents={backdropPointerEvents}
148
- />
149
- ) : BackdropComponent ? (
150
- <BackdropComponent
151
- styles={backdropStyles}
152
- props={backdropProps}
153
- pointerEvents={backdropPointerEvents}
154
- />
155
- ) : (
156
- <Animated.View
157
- style={backdropStyles}
158
- pointerEvents={backdropPointerEvents}
159
- />
160
- )}
132
+ <LayerComponent
133
+ component={BackdropComponent}
134
+ styles={backdropStyles}
135
+ props={BackdropComponent ? backdropProps : undefined}
136
+ pointerEvents={backdropPointerEvents}
137
+ />
161
138
  </Pressable>
162
139
  );
163
140
  });