react-native-screen-transitions 3.9.0-alpha.2 → 3.9.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (475) hide show
  1. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +14 -9
  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 +66 -28
  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} +8 -4
  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} +27 -10
  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} +5 -7
  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} +4 -4
  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 +14 -35
  14. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -1
  15. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +5 -6
  16. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  17. package/lib/commonjs/shared/components/boundary/index.js +26 -29
  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 +78 -27
  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 +195 -121
  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/hooks/use-placeholder-styles.js +57 -0
  30. package/lib/commonjs/shared/components/boundary/portal/hooks/use-placeholder-styles.js.map +1 -0
  31. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js +5 -44
  32. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  33. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js +37 -5
  34. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  35. package/lib/commonjs/shared/components/boundary/portal/teleport.js +15 -2
  36. package/lib/commonjs/shared/components/boundary/portal/teleport.js.map +1 -1
  37. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js +18 -0
  38. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  39. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js +10 -3
  40. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js.map +1 -1
  41. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js +28 -48
  42. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  43. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js +254 -0
  44. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  45. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js +38 -0
  46. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  47. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js +29 -0
  48. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  49. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js +10 -1
  50. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  51. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js +25 -0
  52. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  53. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +6 -7
  54. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  55. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js +1 -22
  56. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js.map +1 -1
  57. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js +0 -21
  58. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  59. package/lib/commonjs/shared/components/boundary/utils/source-signals.js +4 -9
  60. package/lib/commonjs/shared/components/boundary/utils/source-signals.js.map +1 -1
  61. package/lib/commonjs/shared/components/masked-view.js +5 -0
  62. package/lib/commonjs/shared/components/masked-view.js.map +1 -1
  63. package/lib/commonjs/shared/components/screen-container/layers/backdrop.js +18 -8
  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 +34 -16
  66. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  67. package/lib/commonjs/shared/components/screen-container/layers/render-component.js +10 -0
  68. package/lib/commonjs/shared/components/screen-container/layers/render-component.js.map +1 -0
  69. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js +5 -3
  70. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js.map +1 -1
  71. package/lib/commonjs/shared/index.js +4 -0
  72. package/lib/commonjs/shared/index.js.map +1 -1
  73. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js +6 -3
  74. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  75. package/lib/commonjs/shared/providers/register-bounds.provider.js +6 -0
  76. package/lib/commonjs/shared/providers/register-bounds.provider.js.map +1 -1
  77. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js +1 -0
  78. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  79. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +1 -0
  80. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  81. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js +95 -0
  82. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  83. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  84. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  85. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +9 -3
  86. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  87. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  88. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  89. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +96 -0
  90. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  91. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +16 -3
  92. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  93. package/lib/commonjs/shared/providers/screen/styles/index.js +16 -3
  94. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  95. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js +22 -51
  96. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -1
  97. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js +53 -0
  98. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  99. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js +22 -2
  100. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  101. package/lib/commonjs/shared/stores/bounds/internals/entries.js +11 -4
  102. package/lib/commonjs/shared/stores/bounds/internals/entries.js.map +1 -1
  103. package/lib/commonjs/shared/stores/bounds/internals/links.js +134 -51
  104. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  105. package/lib/commonjs/shared/stores/bounds/internals/resolver.js +1 -3
  106. package/lib/commonjs/shared/stores/bounds/internals/resolver.js.map +1 -1
  107. package/lib/commonjs/shared/stores/system.store.js +5 -0
  108. package/lib/commonjs/shared/stores/system.store.js.map +1 -1
  109. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js +10 -69
  110. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  111. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js +59 -0
  112. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  113. package/lib/module/shared/components/boundary/components/boundary-target.js +12 -7
  114. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  115. package/lib/module/shared/components/boundary/create-boundary-component.js +67 -29
  116. package/lib/module/shared/components/boundary/create-boundary-component.js.map +1 -1
  117. package/lib/module/shared/components/boundary/hooks/{use-boundary-presence.js → lifecycles/use-boundary-presence.js} +8 -4
  118. package/lib/module/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js.map +1 -0
  119. package/lib/module/shared/components/boundary/hooks/{use-initial-destination-measurement.js → lifecycles/use-initial-destination-measurement.js} +27 -10
  120. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.js.map +1 -0
  121. package/lib/module/shared/components/boundary/hooks/{use-initial-source-measurement.js → lifecycles/use-initial-source-measurement.js} +5 -7
  122. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.js.map +1 -0
  123. package/lib/module/shared/components/boundary/hooks/{use-refresh-boundary.js → lifecycles/use-refresh-boundary.js} +4 -4
  124. package/lib/module/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -0
  125. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js +15 -36
  126. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -1
  127. package/lib/module/shared/components/boundary/hooks/use-measurer.js +5 -6
  128. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  129. package/lib/module/shared/components/boundary/index.js +26 -29
  130. package/lib/module/shared/components/boundary/index.js.map +1 -1
  131. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js +53 -0
  132. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js.map +1 -0
  133. package/lib/module/shared/components/boundary/portal/components/host.js +21 -5
  134. package/lib/module/shared/components/boundary/portal/components/host.js.map +1 -1
  135. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js +79 -28
  136. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -1
  137. package/lib/module/shared/components/boundary/portal/components/portal.js +201 -127
  138. package/lib/module/shared/components/boundary/portal/components/portal.js.map +1 -1
  139. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js +15 -3
  140. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -1
  141. package/lib/module/shared/components/boundary/portal/hooks/use-placeholder-styles.js +52 -0
  142. package/lib/module/shared/components/boundary/portal/hooks/use-placeholder-styles.js.map +1 -0
  143. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js +4 -41
  144. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  145. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js +35 -4
  146. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  147. package/lib/module/shared/components/boundary/portal/teleport.js +16 -2
  148. package/lib/module/shared/components/boundary/portal/teleport.js.map +1 -1
  149. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js +13 -0
  150. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  151. package/lib/module/shared/components/boundary/portal/utils/naming.js +8 -2
  152. package/lib/module/shared/components/boundary/portal/utils/naming.js.map +1 -1
  153. package/lib/module/shared/components/boundary/portal/utils/offset-style.js +29 -48
  154. package/lib/module/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  155. package/lib/module/shared/components/boundary/portal/utils/ownership.js +246 -0
  156. package/lib/module/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  157. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js +33 -0
  158. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  159. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js +24 -0
  160. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  161. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js +8 -0
  162. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  163. package/lib/module/shared/components/boundary/portal/utils/visible-host.js +20 -0
  164. package/lib/module/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  165. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +6 -7
  166. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -1
  167. package/lib/module/shared/components/boundary/utils/destination-signals.js +2 -23
  168. package/lib/module/shared/components/boundary/utils/destination-signals.js.map +1 -1
  169. package/lib/module/shared/components/boundary/utils/refresh-signals.js +0 -21
  170. package/lib/module/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  171. package/lib/module/shared/components/boundary/utils/source-signals.js +4 -9
  172. package/lib/module/shared/components/boundary/utils/source-signals.js.map +1 -1
  173. package/lib/module/shared/components/masked-view.js +5 -0
  174. package/lib/module/shared/components/masked-view.js.map +1 -1
  175. package/lib/module/shared/components/screen-container/layers/backdrop.js +19 -9
  176. package/lib/module/shared/components/screen-container/layers/backdrop.js.map +1 -1
  177. package/lib/module/shared/components/screen-container/layers/content.js +35 -17
  178. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  179. package/lib/module/shared/components/screen-container/layers/render-component.js +6 -0
  180. package/lib/module/shared/components/screen-container/layers/render-component.js.map +1 -0
  181. package/lib/module/shared/components/screen-container/layers/surface-container.js +5 -3
  182. package/lib/module/shared/components/screen-container/layers/surface-container.js.map +1 -1
  183. package/lib/module/shared/index.js +4 -0
  184. package/lib/module/shared/index.js.map +1 -1
  185. package/lib/module/shared/providers/helpers/measured-bounds-writes.js +6 -3
  186. package/lib/module/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  187. package/lib/module/shared/providers/register-bounds.provider.js +6 -0
  188. package/lib/module/shared/providers/register-bounds.provider.js.map +1 -1
  189. package/lib/module/shared/providers/screen/animation/helpers/derivations.js +1 -0
  190. package/lib/module/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  191. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +1 -0
  192. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  193. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js +89 -0
  194. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  195. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  196. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  197. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +9 -3
  198. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  199. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  200. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  201. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +87 -0
  202. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  203. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +16 -3
  204. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  205. package/lib/module/shared/providers/screen/styles/index.js +2 -1
  206. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  207. package/lib/module/shared/providers/screen/styles/slot.provider.js +22 -47
  208. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -1
  209. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js +47 -0
  210. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  211. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js +19 -1
  212. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  213. package/lib/module/shared/stores/bounds/internals/entries.js +11 -4
  214. package/lib/module/shared/stores/bounds/internals/entries.js.map +1 -1
  215. package/lib/module/shared/stores/bounds/internals/links.js +135 -53
  216. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  217. package/lib/module/shared/stores/bounds/internals/resolver.js +1 -3
  218. package/lib/module/shared/stores/bounds/internals/resolver.js.map +1 -1
  219. package/lib/module/shared/stores/system.store.js +5 -0
  220. package/lib/module/shared/stores/system.store.js.map +1 -1
  221. package/lib/module/shared/types/animation.types.js.map +1 -1
  222. package/lib/module/shared/utils/bounds/helpers/styles/compute.js +10 -69
  223. package/lib/module/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  224. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js +52 -0
  225. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  226. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts +1 -2
  227. package/lib/typescript/blank-stack/navigators/create-blank-stack-navigator.d.ts.map +1 -1
  228. package/lib/typescript/component-stack/components/component-screen.d.ts +1 -1
  229. package/lib/typescript/component-stack/components/component-screen.d.ts.map +1 -1
  230. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts +1 -2
  231. package/lib/typescript/component-stack/navigators/create-component-stack-navigator.d.ts.map +1 -1
  232. package/lib/typescript/component-stack/types.d.ts +26 -0
  233. package/lib/typescript/component-stack/types.d.ts.map +1 -1
  234. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts +1 -1
  235. package/lib/typescript/native-stack/navigators/createNativeStackNavigator.d.ts.map +1 -1
  236. package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -2
  237. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
  238. package/lib/typescript/native-stack/views/useHeaderConfigProps.d.ts +2 -2
  239. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts +1 -1
  240. package/lib/typescript/shared/adapters/with-screen-transitions/context.d.ts.map +1 -1
  241. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts +1 -1
  242. package/lib/typescript/shared/adapters/with-screen-transitions/stack-layout.d.ts.map +1 -1
  243. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts +1 -1
  244. package/lib/typescript/shared/components/activity/variants/activity-container.d.ts.map +1 -1
  245. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts +1 -1
  246. package/lib/typescript/shared/components/activity/variants/activity-screen.d.ts.map +1 -1
  247. package/lib/typescript/shared/components/boundary/components/boundary-target.d.ts +1 -1
  248. package/lib/typescript/shared/components/boundary/components/boundary-target.d.ts.map +1 -1
  249. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts +0 -1
  250. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts.map +1 -1
  251. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts +11 -0
  252. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts.map +1 -0
  253. package/lib/typescript/shared/components/boundary/hooks/{use-initial-destination-measurement.d.ts → lifecycles/use-initial-destination-measurement.d.ts} +2 -2
  254. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.d.ts.map +1 -0
  255. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts +8 -0
  256. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts.map +1 -0
  257. package/lib/typescript/shared/components/boundary/hooks/{use-refresh-boundary.d.ts → lifecycles/use-refresh-boundary.d.ts} +2 -2
  258. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts.map +1 -0
  259. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts +5 -9
  260. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts.map +1 -1
  261. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts +4 -3
  262. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  263. package/lib/typescript/shared/components/boundary/index.d.ts +35 -24
  264. package/lib/typescript/shared/components/boundary/index.d.ts.map +1 -1
  265. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts +8 -0
  266. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts.map +1 -0
  267. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts +2 -2
  268. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts.map +1 -1
  269. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts +2 -2
  270. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts.map +1 -1
  271. package/lib/typescript/shared/components/boundary/portal/components/portal-provider.d.ts +1 -1
  272. package/lib/typescript/shared/components/boundary/portal/components/portal-provider.d.ts.map +1 -1
  273. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts +4 -3
  274. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts.map +1 -1
  275. package/lib/typescript/shared/components/boundary/portal/hooks/use-host-measurement.d.ts.map +1 -1
  276. package/lib/typescript/shared/components/boundary/portal/hooks/use-placeholder-styles.d.ts +17 -0
  277. package/lib/typescript/shared/components/boundary/portal/hooks/use-placeholder-styles.d.ts.map +1 -0
  278. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts +0 -7
  279. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts.map +1 -1
  280. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts +16 -1
  281. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts.map +1 -1
  282. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts +1 -1
  283. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts.map +1 -1
  284. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts +3 -0
  285. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts.map +1 -0
  286. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts +2 -1
  287. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts.map +1 -1
  288. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts +23 -30
  289. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts.map +1 -1
  290. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts +35 -0
  291. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts.map +1 -0
  292. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts +12 -0
  293. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -0
  294. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts +8 -0
  295. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts.map +1 -0
  296. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts +4 -0
  297. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts.map +1 -1
  298. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts +8 -0
  299. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts.map +1 -0
  300. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +7 -12
  301. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -1
  302. package/lib/typescript/shared/components/boundary/types.d.ts +9 -36
  303. package/lib/typescript/shared/components/boundary/types.d.ts.map +1 -1
  304. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts.map +1 -1
  305. package/lib/typescript/shared/components/boundary/utils/refresh-signals.d.ts.map +1 -1
  306. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts +0 -1
  307. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts.map +1 -1
  308. package/lib/typescript/shared/components/create-transition-aware-component.d.ts +6 -5
  309. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  310. package/lib/typescript/shared/components/masked-view.d.ts +5 -1
  311. package/lib/typescript/shared/components/masked-view.d.ts.map +1 -1
  312. package/lib/typescript/shared/components/overlay/variations/float-overlay.d.ts +1 -1
  313. package/lib/typescript/shared/components/overlay/variations/float-overlay.d.ts.map +1 -1
  314. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts +1 -1
  315. package/lib/typescript/shared/components/overlay/variations/overlay-host.d.ts.map +1 -1
  316. package/lib/typescript/shared/components/scene-view.d.ts +1 -1
  317. package/lib/typescript/shared/components/scene-view.d.ts.map +1 -1
  318. package/lib/typescript/shared/components/screen-container/index.d.ts +1 -1
  319. package/lib/typescript/shared/components/screen-container/index.d.ts.map +1 -1
  320. package/lib/typescript/shared/components/screen-container/layers/backdrop.d.ts +1 -1
  321. package/lib/typescript/shared/components/screen-container/layers/backdrop.d.ts.map +1 -1
  322. package/lib/typescript/shared/components/screen-container/layers/content.d.ts +1 -1
  323. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  324. package/lib/typescript/shared/components/screen-container/layers/maybe-masked-navigation-container.d.ts +1 -1
  325. package/lib/typescript/shared/components/screen-container/layers/maybe-masked-navigation-container.d.ts.map +1 -1
  326. package/lib/typescript/shared/components/screen-container/layers/render-component.d.ts +3 -0
  327. package/lib/typescript/shared/components/screen-container/layers/render-component.d.ts.map +1 -0
  328. package/lib/typescript/shared/components/screen-container/layers/surface-container.d.ts +1 -1
  329. package/lib/typescript/shared/components/screen-container/layers/surface-container.d.ts.map +1 -1
  330. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts +1 -1
  331. package/lib/typescript/shared/hooks/navigation/use-stack.d.ts.map +1 -1
  332. package/lib/typescript/shared/index.d.ts +731 -683
  333. package/lib/typescript/shared/index.d.ts.map +1 -1
  334. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts +3 -3
  335. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  336. package/lib/typescript/shared/providers/register-bounds.provider.d.ts.map +1 -1
  337. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts +1 -0
  338. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts.map +1 -1
  339. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  340. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts +1 -1
  341. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  342. package/lib/typescript/shared/providers/screen/screen-composer.d.ts +1 -1
  343. package/lib/typescript/shared/providers/screen/screen-composer.d.ts.map +1 -1
  344. package/lib/typescript/shared/providers/screen/styles/components/floating-overlay-layer.d.ts +1 -1
  345. package/lib/typescript/shared/providers/screen/styles/components/floating-overlay-layer.d.ts.map +1 -1
  346. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts +4 -0
  347. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts.map +1 -0
  348. package/lib/typescript/shared/providers/screen/styles/helpers/normalize-slots.d.ts.map +1 -1
  349. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
  350. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts +2 -1
  351. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts.map +1 -1
  352. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +11 -0
  353. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -0
  354. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts +4 -1
  355. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  356. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +3 -3
  357. package/lib/typescript/shared/providers/screen/styles/index.d.ts +2 -1
  358. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  359. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +5 -10
  360. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -1
  361. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts +6 -0
  362. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts.map +1 -0
  363. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts +2 -0
  364. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts.map +1 -1
  365. package/lib/typescript/shared/stores/bounds/internals/entries.d.ts.map +1 -1
  366. package/lib/typescript/shared/stores/bounds/internals/links.d.ts +4 -3
  367. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  368. package/lib/typescript/shared/stores/bounds/internals/resolver.d.ts.map +1 -1
  369. package/lib/typescript/shared/stores/bounds/types.d.ts +9 -20
  370. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  371. package/lib/typescript/shared/stores/system.store.d.ts +1 -0
  372. package/lib/typescript/shared/stores/system.store.d.ts.map +1 -1
  373. package/lib/typescript/shared/types/animation.types.d.ts +7 -1
  374. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  375. package/lib/typescript/shared/types/index.d.ts +1 -1
  376. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  377. package/lib/typescript/shared/types/screen.types.d.ts +99 -4
  378. package/lib/typescript/shared/types/screen.types.d.ts.map +1 -1
  379. package/lib/typescript/shared/utils/bounds/helpers/styles/compute.d.ts.map +1 -1
  380. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts +6 -0
  381. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts.map +1 -0
  382. package/lib/typescript/shared/utils/bounds/types/options.d.ts +2 -0
  383. package/lib/typescript/shared/utils/bounds/types/options.d.ts.map +1 -1
  384. package/package.json +1 -1
  385. package/src/component-stack/types.ts +26 -0
  386. package/src/shared/components/boundary/components/boundary-target.tsx +21 -7
  387. package/src/shared/components/boundary/create-boundary-component.tsx +92 -28
  388. package/src/shared/components/boundary/hooks/{use-boundary-presence.ts → lifecycles/use-boundary-presence.ts} +16 -5
  389. package/src/shared/components/boundary/hooks/{use-initial-destination-measurement.ts → lifecycles/use-initial-destination-measurement.ts} +40 -13
  390. package/src/shared/components/boundary/hooks/{use-initial-source-measurement.ts → lifecycles/use-initial-source-measurement.ts} +7 -9
  391. package/src/shared/components/boundary/hooks/{use-refresh-boundary.ts → lifecycles/use-refresh-boundary.ts} +6 -6
  392. package/src/shared/components/boundary/hooks/use-boundary-measurement.ts +15 -45
  393. package/src/shared/components/boundary/hooks/use-measurer.ts +9 -14
  394. package/src/shared/components/boundary/index.tsx +55 -29
  395. package/src/shared/components/boundary/portal/components/boundary-local-portal-host.tsx +66 -0
  396. package/src/shared/components/boundary/portal/components/host.tsx +20 -5
  397. package/src/shared/components/boundary/portal/components/portal-boundary-host.tsx +112 -46
  398. package/src/shared/components/boundary/portal/components/portal.tsx +263 -134
  399. package/src/shared/components/boundary/portal/hooks/use-host-measurement.ts +23 -2
  400. package/src/shared/components/boundary/portal/hooks/use-placeholder-styles.ts +55 -0
  401. package/src/shared/components/boundary/portal/stores/host-registry.store.ts +4 -51
  402. package/src/shared/components/boundary/portal/stores/portal-boundary-host.store.ts +59 -6
  403. package/src/shared/components/boundary/portal/teleport.ts +28 -3
  404. package/src/shared/components/boundary/portal/utils/has-local-slot.ts +16 -0
  405. package/src/shared/components/boundary/portal/utils/naming.ts +11 -1
  406. package/src/shared/components/boundary/portal/utils/offset-style.ts +42 -137
  407. package/src/shared/components/boundary/portal/utils/ownership.ts +371 -0
  408. package/src/shared/components/boundary/portal/utils/resolve-portal.ts +50 -0
  409. package/src/shared/components/boundary/portal/utils/shallow-equal.ts +25 -0
  410. package/src/shared/components/boundary/portal/utils/teleport-control.ts +12 -0
  411. package/src/shared/components/boundary/portal/utils/visible-host.ts +24 -0
  412. package/src/shared/components/boundary/providers/boundary-root.provider.tsx +9 -18
  413. package/src/shared/components/boundary/types.ts +9 -39
  414. package/src/shared/components/boundary/utils/destination-signals.ts +1 -32
  415. package/src/shared/components/boundary/utils/refresh-signals.ts +0 -41
  416. package/src/shared/components/boundary/utils/source-signals.ts +5 -17
  417. package/src/shared/components/masked-view.tsx +4 -0
  418. package/src/shared/components/screen-container/layers/backdrop.tsx +31 -10
  419. package/src/shared/components/screen-container/layers/content.tsx +61 -22
  420. package/src/shared/components/screen-container/layers/render-component.ts +9 -0
  421. package/src/shared/components/screen-container/layers/surface-container.tsx +5 -4
  422. package/src/shared/index.ts +9 -5
  423. package/src/shared/providers/helpers/measured-bounds-writes.ts +6 -11
  424. package/src/shared/providers/register-bounds.provider.tsx +5 -0
  425. package/src/shared/providers/screen/animation/helpers/derivations.ts +3 -0
  426. package/src/shared/providers/screen/animation/helpers/pipeline.ts +1 -0
  427. package/src/shared/providers/screen/styles/helpers/compose-slot-style.ts +129 -0
  428. package/src/shared/providers/screen/styles/helpers/normalize-slots.ts +45 -8
  429. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +14 -2
  430. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.ts +3 -0
  431. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +111 -0
  432. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +21 -3
  433. package/src/shared/providers/screen/styles/index.tsx +8 -3
  434. package/src/shared/providers/screen/styles/slot.provider.tsx +36 -54
  435. package/src/shared/providers/screen/styles/stores/slot-references.store.ts +71 -0
  436. package/src/shared/stores/bounds/helpers/link-pairs.helpers.ts +24 -1
  437. package/src/shared/stores/bounds/internals/entries.ts +13 -5
  438. package/src/shared/stores/bounds/internals/links.ts +167 -85
  439. package/src/shared/stores/bounds/internals/resolver.ts +0 -2
  440. package/src/shared/stores/bounds/types.ts +10 -22
  441. package/src/shared/stores/system.store.ts +6 -0
  442. package/src/shared/types/animation.types.ts +8 -1
  443. package/src/shared/types/index.ts +5 -0
  444. package/src/shared/types/screen.types.ts +111 -4
  445. package/src/shared/utils/bounds/helpers/styles/compute.ts +22 -124
  446. package/src/shared/utils/bounds/helpers/styles/local-transform.ts +86 -0
  447. package/src/shared/utils/bounds/types/options.ts +2 -0
  448. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  449. package/lib/commonjs/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  450. package/lib/commonjs/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  451. package/lib/commonjs/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  452. package/lib/commonjs/shared/components/boundary/portal/resolve-portal.js +0 -36
  453. package/lib/commonjs/shared/components/boundary/portal/resolve-portal.js.map +0 -1
  454. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js +0 -40
  455. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  456. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  457. package/lib/module/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  458. package/lib/module/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  459. package/lib/module/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  460. package/lib/module/shared/components/boundary/portal/resolve-portal.js +0 -31
  461. package/lib/module/shared/components/boundary/portal/resolve-portal.js.map +0 -1
  462. package/lib/module/shared/components/boundary/portal/utils/attachment.js +0 -35
  463. package/lib/module/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  464. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts +0 -9
  465. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts.map +0 -1
  466. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts.map +0 -1
  467. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts +0 -9
  468. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts.map +0 -1
  469. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts.map +0 -1
  470. package/lib/typescript/shared/components/boundary/portal/resolve-portal.d.ts +0 -14
  471. package/lib/typescript/shared/components/boundary/portal/resolve-portal.d.ts.map +0 -1
  472. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts +0 -21
  473. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts.map +0 -1
  474. package/src/shared/components/boundary/portal/resolve-portal.ts +0 -40
  475. package/src/shared/components/boundary/portal/utils/attachment.ts +0 -48
@@ -1,6 +1,4 @@
1
1
  import { useSyncExternalStore } from "react";
2
- import { makeMutable } from "react-native-reanimated";
3
- import type { SourceHostRef } from "../../../../stores/bounds/types";
4
2
 
5
3
  export type HostRegistration = {
6
4
  hostKey: string;
@@ -19,13 +17,11 @@ const hostStacks = new Map<string, HostRegistration[]>();
19
17
  let snapshot: HostRegistrySnapshot = EMPTY_SNAPSHOT;
20
18
 
21
19
  /**
22
- * UI-readable mirror of each screen's active host, kept only for hosts that
23
- * capture scroll. Measurement worklets read it to record which scroll-scoped
24
- * host a source boundary originated from at measure time, without any React
25
- * subscription on the boundary itself.
20
+ * The active host for a screen. Stack ordering is the load-bearing invariant:
21
+ * `registerHost` unshifts fallback hosts to the front and pushes real hosts to
22
+ * the back, so the active host is the last real (non-fallback) host, falling
23
+ * back to the first entry and finally to the screen's own key.
26
24
  */
27
- const activeScrollHosts = makeMutable<Record<string, SourceHostRef>>({});
28
-
29
25
  const getActiveHostFromStack = (
30
26
  screenKey: string,
31
27
  stack: HostRegistration[] | undefined,
@@ -54,27 +50,8 @@ const buildSnapshot = (): HostRegistrySnapshot => {
54
50
  return nextSnapshot;
55
51
  };
56
52
 
57
- const buildScrollHostSnapshot = (): Record<string, SourceHostRef> => {
58
- const nextSnapshot: Record<string, SourceHostRef> = {};
59
-
60
- for (const [screenKey, stack] of hostStacks) {
61
- const activeHostKey = getActiveHostFromStack(screenKey, stack);
62
- const activeHost = stack.find((host) => host.hostKey === activeHostKey);
63
-
64
- if (activeHost?.capturesScroll) {
65
- nextSnapshot[screenKey] = {
66
- hostKey: activeHost.hostKey,
67
- capturesScroll: true,
68
- };
69
- }
70
- }
71
-
72
- return nextSnapshot;
73
- };
74
-
75
53
  const emit = () => {
76
54
  snapshot = buildSnapshot();
77
- activeScrollHosts.set(buildScrollHostSnapshot());
78
55
 
79
56
  for (const listener of listeners) {
80
57
  listener();
@@ -143,29 +120,6 @@ export const getActiveHostKey = (screenKey: string) => {
143
120
  return snapshot[screenKey] ?? screenKey;
144
121
  };
145
122
 
146
- /**
147
- * The screen's active host, if it captures scroll. Worklet-safe: measurement
148
- * code calls this on the UI thread while writing source bounds.
149
- */
150
- export const getActiveScrollHost = (
151
- screenKey: string,
152
- ): SourceHostRef | null => {
153
- "worklet";
154
- return activeScrollHosts.get()[screenKey] ?? null;
155
- };
156
-
157
- export const getHostCapturesScroll = (hostKey: string) => {
158
- for (const stack of hostStacks.values()) {
159
- const host = stack.find((registration) => registration.hostKey === hostKey);
160
-
161
- if (host) {
162
- return host.capturesScroll;
163
- }
164
- }
165
-
166
- return false;
167
- };
168
-
169
123
  export const useActiveHostKey = (screenKey?: string | null) => {
170
124
  return useSyncExternalStore(
171
125
  subscribe,
@@ -177,6 +131,5 @@ export const useActiveHostKey = (screenKey?: string | null) => {
177
131
  export const resetHostRegistry = () => {
178
132
  hostStacks.clear();
179
133
  snapshot = EMPTY_SNAPSHOT;
180
- activeScrollHosts.set({});
181
134
  emit();
182
135
  };
@@ -1,11 +1,17 @@
1
1
  import { useSyncExternalStore } from "react";
2
+ import type { SharedValue } from "react-native-reanimated";
3
+ import type { LocalStyleLayers } from "../../../../providers/screen/styles/helpers/resolve-slot-styles";
4
+ import type { NormalizedTransitionInterpolatedStyle } from "../../../../types/animation.types";
2
5
 
3
6
  export type ActivePortalBoundaryHost = {
4
7
  boundaryId: string;
5
- capturesScroll: boolean;
8
+ escapeClipping: boolean;
6
9
  hostKey: string;
10
+ localStylesMaps: SharedValue<LocalStyleLayers>;
7
11
  pairKey: string;
12
+ portalHostName: string;
8
13
  screenKey: string;
14
+ slotsMap: SharedValue<NormalizedTransitionInterpolatedStyle>;
9
15
  };
10
16
 
11
17
  type PortalSnapshot = {
@@ -49,25 +55,72 @@ const isSameHost = (
49
55
  ) => {
50
56
  return (
51
57
  a.boundaryId === b.boundaryId &&
52
- a.capturesScroll === b.capturesScroll &&
58
+ a.escapeClipping === b.escapeClipping &&
53
59
  a.hostKey === b.hostKey &&
60
+ a.localStylesMaps === b.localStylesMaps &&
54
61
  a.pairKey === b.pairKey &&
55
- a.screenKey === b.screenKey
62
+ a.portalHostName === b.portalHostName &&
63
+ a.screenKey === b.screenKey &&
64
+ a.slotsMap === b.slotsMap
56
65
  );
57
66
  };
58
67
 
59
68
  export const mountPortalBoundaryHost = (host: ActivePortalBoundaryHost) => {
60
- const previous = activeBoundaryHosts.get(host.boundaryId);
69
+ const previous = activeBoundaryHosts.get(host.portalHostName);
61
70
  if (previous && isSameHost(previous, host)) {
62
71
  return;
63
72
  }
64
73
 
65
- activeBoundaryHosts.set(host.boundaryId, host);
74
+ activeBoundaryHosts.set(host.portalHostName, host);
66
75
  emit();
67
76
  };
68
77
 
69
78
  export const unmountPortalBoundaryHost = (boundaryId: string) => {
70
- if (!activeBoundaryHosts.delete(boundaryId)) {
79
+ let didDelete = false;
80
+
81
+ for (const [hostEntryKey, host] of activeBoundaryHosts) {
82
+ if (host.boundaryId !== boundaryId) {
83
+ continue;
84
+ }
85
+
86
+ activeBoundaryHosts.delete(hostEntryKey);
87
+ didDelete = true;
88
+ }
89
+
90
+ if (!didDelete) {
91
+ return;
92
+ }
93
+
94
+ emit();
95
+ };
96
+
97
+ /**
98
+ * Post-handoff GC: drop every receiver for this boundary except the one now
99
+ * visible (`keepPortalHostName`). Called once the new host is confirmed on
100
+ * screen so the superseded receivers stop rendering.
101
+ */
102
+ export const dropStalePortalBoundaryHosts = ({
103
+ boundaryId,
104
+ keepPortalHostName,
105
+ }: {
106
+ boundaryId: string;
107
+ keepPortalHostName: string;
108
+ }) => {
109
+ let didDelete = false;
110
+
111
+ for (const [hostEntryKey, host] of activeBoundaryHosts) {
112
+ if (
113
+ host.boundaryId !== boundaryId ||
114
+ host.portalHostName === keepPortalHostName
115
+ ) {
116
+ continue;
117
+ }
118
+
119
+ activeBoundaryHosts.delete(hostEntryKey);
120
+ didDelete = true;
121
+ }
122
+
123
+ if (!didDelete) {
71
124
  return;
72
125
  }
73
126
 
@@ -1,4 +1,4 @@
1
- import type { ComponentType } from "react";
1
+ import { type ComponentType, createElement, type ReactNode } from "react";
2
2
 
3
3
  /**
4
4
  * `react-native-teleport` is an optional peer dependency. The require sits in a
@@ -9,13 +9,38 @@ import type { ComponentType } from "react";
9
9
  * rendering; everything else keeps working.
10
10
  */
11
11
  let mod: any = null;
12
+ let managerMod: any = null;
13
+ let providerViewMod: any = null;
12
14
  try {
13
15
  mod = require("react-native-teleport");
16
+ managerMod = require("react-native-teleport/lib/module/contexts/PortalManager");
17
+ providerViewMod = require("react-native-teleport/lib/module/views/PortalProvider");
14
18
  } catch {}
15
19
 
16
- export const isTeleportAvailable = mod !== null;
20
+ const NativePortalProviderView: ComponentType<{ children: ReactNode }> | null =
21
+ providerViewMod?.default ?? null;
22
+ const PortalManagerProvider: ComponentType<{ children: ReactNode }> | null =
23
+ managerMod?.PortalManagerProvider ?? null;
24
+
25
+ const SafeNativePortalProvider: ComponentType<{ children: ReactNode }> | null =
26
+ PortalManagerProvider
27
+ ? ({ children }: { children: ReactNode }) => {
28
+ const managedChildren = createElement(
29
+ PortalManagerProvider,
30
+ null,
31
+ children,
32
+ );
33
+
34
+ return NativePortalProviderView
35
+ ? createElement(NativePortalProviderView, null, managedChildren)
36
+ : managedChildren;
37
+ }
38
+ : null;
39
+
40
+ export const isTeleportAvailable =
41
+ mod !== null && SafeNativePortalProvider !== null;
17
42
  export const NativePortal: ComponentType<any> | null = mod?.Portal ?? null;
18
43
  export const NativePortalProvider: ComponentType<any> | null =
19
- mod?.PortalProvider ?? null;
44
+ SafeNativePortalProvider;
20
45
  export const NativePortalHost: ComponentType<any> | null =
21
46
  mod?.PortalHost ?? null;
@@ -0,0 +1,16 @@
1
+ import type { LocalStyleLayers } from "../../../../providers/screen/styles/helpers/resolve-slot-styles";
2
+
3
+ export const hasLocalSlot = (
4
+ localStylesMaps: LocalStyleLayers,
5
+ slotId: string,
6
+ ) => {
7
+ "worklet";
8
+
9
+ for (let index = 0; index < localStylesMaps.length; index++) {
10
+ if (localStylesMaps[index]?.[slotId] !== undefined) {
11
+ return true;
12
+ }
13
+ }
14
+
15
+ return false;
16
+ };
@@ -1,10 +1,20 @@
1
1
  export const PORTAL_HOST_NAME_RESET_VALUE = null;
2
2
  const PORTAL_HOST_NAME_SUFFIX = "-portal-host";
3
+ const BOUNDARY_LOCAL_PORTAL_HOST_NAME_SUFFIX = "-boundary-local-portal-host";
3
4
 
4
5
  export const createPortalBoundaryHostName = (
5
6
  hostKey: string,
6
7
  boundaryId: string,
8
+ pairKey?: string | null,
7
9
  ) => {
8
10
  "worklet";
9
- return `${hostKey}-${boundaryId}${PORTAL_HOST_NAME_SUFFIX}`;
11
+ return `${hostKey}-${pairKey ? `${pairKey}-` : ""}${boundaryId}${PORTAL_HOST_NAME_SUFFIX}`;
12
+ };
13
+
14
+ export const createBoundaryLocalPortalHostName = (
15
+ screenKey: string,
16
+ boundaryId: string,
17
+ ) => {
18
+ "worklet";
19
+ return `${screenKey}-${boundaryId}${BOUNDARY_LOCAL_PORTAL_HOST_NAME_SUFFIX}`;
10
20
  };
@@ -1,171 +1,76 @@
1
- import {
2
- interpolate,
3
- type MeasuredDimensions,
4
- type StyleProps,
5
- } from "react-native-reanimated";
1
+ import type { StyleProps } from "react-native-reanimated";
6
2
  import { getClampedScrollAxisDelta } from "../../../../stores/scroll.store";
7
- import type { ScrollMetadataState } from "../../../../types/gesture.types";
3
+ import type { ScrollMeasuredDimensions } from "../../utils/measured-bounds";
8
4
  import { getPortalHostBounds } from "../stores/host-bounds.store";
9
5
 
10
- export type PortalOffsetPlacement =
11
- | "same-screen"
12
- | "cross-screen-open"
13
- | "cross-screen-close";
6
+ /**
7
+ * The two portal coordinate cases we support:
8
+ *
9
+ * - same-screen: source and host live on the same screen; re-base the stored
10
+ * host frame onto the source measurement's scroll snapshot.
11
+ * - cross-screen: source and host live on different screens; the host is the
12
+ * replacement coordinate space, so destination scroll is inherited naturally
13
+ * from host placement instead of manually propagated.
14
+ */
15
+ export type PortalOffsetPlacement = "same-screen" | "cross-screen";
14
16
 
15
17
  type ResolvePortalOffsetStyleParams = {
16
- alignHostToBoundsScroll?: boolean;
17
- bounds: MeasuredDimensions;
18
- boundsCurrentScroll?: ScrollMetadataState | null;
19
- /**
20
- * Express the source rect in its scroll host's live frame: the rect is
21
- * shifted by the clamped travel of `sourceCurrentScroll` since the scroll
22
- * snapshot stored on `bounds`. Independent of the host scroll fallback
23
- * chain below — that chain compensates the attached host's own scrolling.
24
- */
25
- compensateSourceScroll?: boolean;
26
- currentScroll?: ScrollMetadataState | null;
27
- hostCurrentScroll?: ScrollMetadataState | null;
18
+ /** Source rect, carrying the scroll snapshot taken at measure time. */
19
+ bounds: ScrollMeasuredDimensions;
28
20
  hostKey: string;
29
- hostProgress?: number;
30
- includeScrollOffsets?: boolean;
21
+ placement: PortalOffsetPlacement;
31
22
  /**
32
- * The three portal coordinate cases we support:
33
- *
34
- * - same-screen: source and host are on the same screen; align the stored
35
- * host frame to the source measurement's scroll snapshot once.
36
- * - cross-screen-open: source and host are on different screens; host
37
- * placement is static during the open/idle portion.
38
- * - cross-screen-close: source and host are on different screens; the
39
- * dismissal needs the host's live scroll frame until the portal detaches.
23
+ * Live correction applied on top of the stored source placement. Used by
24
+ * cross-screen hosts to keep the landing rect tracking the source screen's
25
+ * scroll while the source is interactive mid-flight.
40
26
  */
41
- placement?: PortalOffsetPlacement;
42
- position?: "absolute" | "relative";
43
- sourceCurrentScroll?: ScrollMetadataState | null;
44
- trackSourceScroll?: boolean;
27
+ landingShift?: { x: number; y: number };
45
28
  };
46
29
 
47
30
  export const resolvePortalOffsetStyle = ({
48
- alignHostToBoundsScroll = false,
49
31
  bounds,
50
- boundsCurrentScroll,
51
- compensateSourceScroll = false,
52
- currentScroll,
53
- hostCurrentScroll,
54
32
  hostKey,
55
- hostProgress = 0,
56
- includeScrollOffsets = true,
57
33
  placement,
58
- position = "relative",
59
- sourceCurrentScroll,
60
- trackSourceScroll = false,
34
+ landingShift,
61
35
  }: ResolvePortalOffsetStyleParams): StyleProps => {
62
36
  "worklet";
63
37
  const hostBounds = getPortalHostBounds(hostKey);
64
- const shouldAlignHostToBoundsScroll = placement
65
- ? placement === "same-screen"
66
- : alignHostToBoundsScroll;
67
- const shouldCompensateSourceScroll =
68
- trackSourceScroll || compensateSourceScroll;
69
- const shouldIncludeHostScrollOffsets = placement
70
- ? placement === "cross-screen-close"
71
- : includeScrollOffsets;
72
- const boundsScrollSnapshot =
73
- (bounds as { scroll?: ScrollMetadataState | null }).scroll ?? null;
74
- const sourceScrollSnapshot = shouldCompensateSourceScroll
75
- ? boundsScrollSnapshot
76
- : null;
77
- const sourceScrollDeltaX = shouldCompensateSourceScroll
38
+ const boundsScrollSnapshot = bounds.scroll ?? null;
39
+ const hostBoundsScrollSnapshot = hostBounds?.scroll ?? null;
40
+
41
+ // same-screen re-bases the static host frame onto the source scroll snapshot.
42
+ // Cross-screen hosts are the chosen replacement coordinate space, so their
43
+ // destination scroll is represented by where the host itself is mounted.
44
+ const alignHostToBoundsScroll = placement === "same-screen";
45
+
46
+ const hostSnapshotDeltaX = alignHostToBoundsScroll
78
47
  ? getClampedScrollAxisDelta(
79
- sourceCurrentScroll ?? null,
80
- sourceScrollSnapshot,
48
+ boundsScrollSnapshot,
49
+ hostBoundsScrollSnapshot,
81
50
  "horizontal",
82
51
  )
83
52
  : 0;
84
- const sourceScrollDeltaY = shouldCompensateSourceScroll
53
+ const hostSnapshotDeltaY = alignHostToBoundsScroll
85
54
  ? getClampedScrollAxisDelta(
86
- sourceCurrentScroll ?? null,
87
- sourceScrollSnapshot,
55
+ boundsScrollSnapshot,
56
+ hostBoundsScrollSnapshot,
88
57
  "vertical",
89
58
  )
90
59
  : 0;
91
- const sourcePageX = bounds.pageX - sourceScrollDeltaX;
92
- const sourcePageY = bounds.pageY - sourceScrollDeltaY;
93
- const boundsScroll = shouldIncludeHostScrollOffsets
94
- ? (boundsScrollSnapshot ?? boundsCurrentScroll ?? currentScroll ?? null)
95
- : null;
96
- const hostBoundsScrollSnapshot = hostBounds?.scroll ?? null;
97
- const hostBoundsScroll = shouldIncludeHostScrollOffsets
98
- ? hostBoundsScrollSnapshot
99
- : null;
100
- const resolvedHostCurrentScroll =
101
- hostCurrentScroll ?? boundsScroll ?? hostBoundsScroll ?? null;
102
- const hostSnapshotDeltaX =
103
- shouldAlignHostToBoundsScroll && !shouldIncludeHostScrollOffsets
104
- ? getClampedScrollAxisDelta(
105
- boundsScrollSnapshot,
106
- hostBoundsScrollSnapshot,
107
- "horizontal",
108
- )
109
- : 0;
110
- const hostSnapshotDeltaY =
111
- shouldAlignHostToBoundsScroll && !shouldIncludeHostScrollOffsets
112
- ? getClampedScrollAxisDelta(
113
- boundsScrollSnapshot,
114
- hostBoundsScrollSnapshot,
115
- "vertical",
116
- )
117
- : 0;
118
- // Deltas are clamped to the layout range: iOS rubber-band offsets are
119
- // outside the real scroll range and must not become coordinate-space deltas.
120
- const hostScrollDeltaX = getClampedScrollAxisDelta(
121
- resolvedHostCurrentScroll,
122
- hostBoundsScroll,
123
- "horizontal",
124
- );
125
- const hostScrollDeltaY = getClampedScrollAxisDelta(
126
- resolvedHostCurrentScroll,
127
- hostBoundsScroll,
128
- "vertical",
129
- );
130
60
 
61
+ // Without registered host bounds the host frame is the origin, so the source
62
+ // page position becomes the offset directly.
131
63
  const adjustedHostPageX = hostBounds
132
- ? hostBounds.pageX -
133
- hostSnapshotDeltaX -
134
- interpolate(hostProgress, [0, 1], [hostScrollDeltaX, 0])
64
+ ? hostBounds.pageX - hostSnapshotDeltaX
135
65
  : 0;
136
66
  const adjustedHostPageY = hostBounds
137
- ? hostBounds.pageY -
138
- hostSnapshotDeltaY -
139
- interpolate(hostProgress, [0, 1], [hostScrollDeltaY, 0])
67
+ ? hostBounds.pageY - hostSnapshotDeltaY
140
68
  : 0;
141
- const boundsScrollDeltaX = shouldIncludeHostScrollOffsets
142
- ? getClampedScrollAxisDelta(
143
- currentScroll ?? null,
144
- boundsScroll,
145
- "horizontal",
146
- )
147
- : 0;
148
- const boundsScrollDeltaY = shouldIncludeHostScrollOffsets
149
- ? getClampedScrollAxisDelta(currentScroll ?? null, boundsScroll, "vertical")
150
- : 0;
151
- const offsetX = hostBounds
152
- ? sourcePageX - adjustedHostPageX
153
- : sourcePageX - boundsScrollDeltaX;
154
- const offsetY = hostBounds
155
- ? sourcePageY - adjustedHostPageY
156
- : sourcePageY - boundsScrollDeltaY;
157
- const transform = [{ translateY: offsetY }, { translateX: offsetX }];
158
-
159
- if (position === "absolute") {
160
- return {
161
- left: 0,
162
- position: "absolute",
163
- top: 0,
164
- transform,
165
- };
166
- }
167
69
 
168
70
  return {
169
- transform,
71
+ transform: [
72
+ { translateY: bounds.pageY - adjustedHostPageY + (landingShift?.y ?? 0) },
73
+ { translateX: bounds.pageX - adjustedHostPageX + (landingShift?.x ?? 0) },
74
+ ],
170
75
  };
171
76
  };