react-native-screen-transitions 3.8.0 → 3.9.0-alpha.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 (485) hide show
  1. package/lib/commonjs/blank-stack/components/stack-view.js +2 -1
  2. package/lib/commonjs/blank-stack/components/stack-view.js.map +1 -1
  3. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/components/boundary-target.js +21 -8
  4. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -0
  5. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/create-boundary-component.js +10 -24
  6. package/lib/commonjs/shared/components/boundary/create-boundary-component.js.map +1 -0
  7. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-presence.js.map +1 -0
  8. package/lib/commonjs/shared/components/boundary/hooks/use-initial-destination-measurement.js +115 -0
  9. package/lib/commonjs/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +1 -0
  10. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/hooks/use-initial-source-measurement.js +4 -5
  11. package/lib/commonjs/shared/components/boundary/hooks/use-initial-source-measurement.js.map +1 -0
  12. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/hooks/use-measurer.js +26 -22
  13. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -0
  14. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/hooks/use-refresh-boundary.js +10 -7
  15. package/lib/commonjs/shared/components/boundary/hooks/use-refresh-boundary.js.map +1 -0
  16. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/index.js +8 -1
  17. package/lib/commonjs/shared/components/boundary/index.js.map +1 -0
  18. package/lib/commonjs/shared/components/boundary/portal/components/host.js +99 -0
  19. package/lib/commonjs/shared/components/boundary/portal/components/host.js.map +1 -0
  20. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js +68 -0
  21. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -0
  22. package/lib/commonjs/shared/components/boundary/portal/components/portal-provider.js +17 -0
  23. package/lib/commonjs/shared/components/boundary/portal/components/portal-provider.js.map +1 -0
  24. package/lib/commonjs/shared/components/boundary/portal/components/portal.js +195 -0
  25. package/lib/commonjs/shared/components/boundary/portal/components/portal.js.map +1 -0
  26. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js +74 -0
  27. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -0
  28. package/lib/commonjs/shared/components/boundary/portal/index.js +27 -0
  29. package/lib/commonjs/shared/components/boundary/portal/index.js.map +1 -0
  30. package/lib/commonjs/shared/components/boundary/portal/stores/host-bounds.store.js +47 -0
  31. package/lib/commonjs/shared/components/boundary/portal/stores/host-bounds.store.js.map +1 -0
  32. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js +137 -0
  33. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -0
  34. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js +60 -0
  35. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -0
  36. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js +40 -0
  37. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js.map +1 -0
  38. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js +15 -0
  39. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js.map +1 -0
  40. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js +71 -0
  41. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js.map +1 -0
  42. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js +16 -0
  43. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js.map +1 -0
  44. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/providers/boundary-owner.provider.js +26 -25
  45. package/lib/commonjs/shared/components/boundary/providers/boundary-owner.provider.js.map +1 -0
  46. package/lib/commonjs/shared/components/boundary/types.js.map +1 -0
  47. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js +25 -0
  48. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js.map +1 -0
  49. package/lib/commonjs/shared/components/{create-boundary-component → boundary}/utils/measured-bounds.js +19 -9
  50. package/lib/commonjs/shared/components/boundary/utils/measured-bounds.js.map +1 -0
  51. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js +105 -0
  52. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js.map +1 -0
  53. package/lib/commonjs/shared/components/boundary/utils/source-signals.js +48 -0
  54. package/lib/commonjs/shared/components/boundary/utils/source-signals.js.map +1 -0
  55. package/lib/commonjs/shared/components/create-transition-aware-component.js +8 -3
  56. package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
  57. package/lib/commonjs/shared/components/{integrations/masked-view.js → masked-view.js} +2 -2
  58. package/lib/commonjs/shared/components/masked-view.js.map +1 -0
  59. package/lib/commonjs/shared/components/screen-container/layers/content.js +9 -5
  60. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  61. package/lib/commonjs/shared/configs/presets.js +6 -6
  62. package/lib/commonjs/shared/configs/presets.js.map +1 -1
  63. package/lib/commonjs/shared/index.js +4 -4
  64. package/lib/commonjs/shared/index.js.map +1 -1
  65. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js +4 -2
  66. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  67. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js +7 -3
  68. package/lib/commonjs/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  69. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +8 -1
  70. package/lib/commonjs/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  71. package/lib/commonjs/shared/providers/screen/descriptors/helpers/get-ancestor-keys.js +21 -6
  72. package/lib/commonjs/shared/providers/screen/descriptors/helpers/get-ancestor-keys.js.map +1 -1
  73. package/lib/commonjs/shared/providers/screen/origin.provider.js +41 -0
  74. package/lib/commonjs/shared/providers/screen/origin.provider.js.map +1 -0
  75. package/lib/commonjs/shared/providers/screen/styles/constants.js +2 -0
  76. package/lib/commonjs/shared/providers/screen/styles/constants.js.map +1 -1
  77. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.js +58 -0
  78. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.js.map +1 -0
  79. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +7 -0
  80. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  81. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +2 -1
  82. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  83. package/lib/commonjs/shared/providers/screen/styles/styles.provider.js +7 -5
  84. package/lib/commonjs/shared/providers/screen/styles/styles.provider.js.map +1 -1
  85. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js +1 -10
  86. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  87. package/lib/commonjs/shared/stores/bounds/index.js.map +1 -1
  88. package/lib/commonjs/shared/stores/bounds/internals/entries.js.map +1 -1
  89. package/lib/commonjs/shared/stores/bounds/internals/links.js +36 -19
  90. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  91. package/lib/commonjs/shared/stores/bounds/internals/resolver.js +6 -4
  92. package/lib/commonjs/shared/stores/bounds/internals/resolver.js.map +1 -1
  93. package/lib/commonjs/shared/stores/bounds/internals/state.js.map +1 -1
  94. package/lib/commonjs/shared/stores/scroll.store.js +54 -1
  95. package/lib/commonjs/shared/stores/scroll.store.js.map +1 -1
  96. package/lib/commonjs/shared/utils/bounds/helpers/create-bound-tag.js +38 -4
  97. package/lib/commonjs/shared/utils/bounds/helpers/create-bound-tag.js.map +1 -1
  98. package/lib/commonjs/shared/utils/bounds/helpers/create-bounds-accessor-core.js +40 -87
  99. package/lib/commonjs/shared/utils/bounds/helpers/create-bounds-accessor-core.js.map +1 -1
  100. package/lib/commonjs/shared/utils/bounds/helpers/create-link-accessor.js +6 -67
  101. package/lib/commonjs/shared/utils/bounds/helpers/create-link-accessor.js.map +1 -1
  102. package/lib/commonjs/shared/utils/bounds/helpers/prepare-bound-styles.js +8 -12
  103. package/lib/commonjs/shared/utils/bounds/helpers/prepare-bound-styles.js.map +1 -1
  104. package/lib/commonjs/shared/utils/bounds/helpers/styles/composers.js +235 -68
  105. package/lib/commonjs/shared/utils/bounds/helpers/styles/composers.js.map +1 -1
  106. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js +74 -4
  107. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  108. package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js +5 -9
  109. package/lib/commonjs/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
  110. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js +5 -10
  111. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  112. package/lib/module/blank-stack/components/stack-view.js +3 -2
  113. package/lib/module/blank-stack/components/stack-view.js.map +1 -1
  114. package/lib/module/shared/components/{create-boundary-component → boundary}/components/boundary-target.js +21 -8
  115. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -0
  116. package/lib/module/shared/components/{create-boundary-component → boundary}/create-boundary-component.js +11 -25
  117. package/lib/module/shared/components/boundary/create-boundary-component.js.map +1 -0
  118. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js.map +1 -0
  119. package/lib/module/shared/components/boundary/hooks/use-initial-destination-measurement.js +110 -0
  120. package/lib/module/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +1 -0
  121. package/lib/module/shared/components/{create-boundary-component → boundary}/hooks/use-initial-source-measurement.js +4 -5
  122. package/lib/module/shared/components/boundary/hooks/use-initial-source-measurement.js.map +1 -0
  123. package/lib/module/shared/components/{create-boundary-component → boundary}/hooks/use-measurer.js +27 -23
  124. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -0
  125. package/lib/module/shared/components/{create-boundary-component → boundary}/hooks/use-refresh-boundary.js +10 -7
  126. package/lib/module/shared/components/boundary/hooks/use-refresh-boundary.js.map +1 -0
  127. package/lib/module/shared/components/{create-boundary-component → boundary}/index.js +8 -1
  128. package/lib/module/shared/components/boundary/index.js.map +1 -0
  129. package/lib/module/shared/components/boundary/portal/components/host.js +94 -0
  130. package/lib/module/shared/components/boundary/portal/components/host.js.map +1 -0
  131. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js +63 -0
  132. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -0
  133. package/lib/module/shared/components/boundary/portal/components/portal-provider.js +13 -0
  134. package/lib/module/shared/components/boundary/portal/components/portal-provider.js.map +1 -0
  135. package/lib/module/shared/components/boundary/portal/components/portal.js +190 -0
  136. package/lib/module/shared/components/boundary/portal/components/portal.js.map +1 -0
  137. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js +69 -0
  138. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -0
  139. package/lib/module/shared/components/boundary/portal/index.js +6 -0
  140. package/lib/module/shared/components/boundary/portal/index.js.map +1 -0
  141. package/lib/module/shared/components/boundary/portal/stores/host-bounds.store.js +40 -0
  142. package/lib/module/shared/components/boundary/portal/stores/host-bounds.store.js.map +1 -0
  143. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js +126 -0
  144. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -0
  145. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js +53 -0
  146. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -0
  147. package/lib/module/shared/components/boundary/portal/utils/attachment.js +35 -0
  148. package/lib/module/shared/components/boundary/portal/utils/attachment.js.map +1 -0
  149. package/lib/module/shared/components/boundary/portal/utils/naming.js +10 -0
  150. package/lib/module/shared/components/boundary/portal/utils/naming.js.map +1 -0
  151. package/lib/module/shared/components/boundary/portal/utils/offset-style.js +66 -0
  152. package/lib/module/shared/components/boundary/portal/utils/offset-style.js.map +1 -0
  153. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js +11 -0
  154. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js.map +1 -0
  155. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js +60 -0
  156. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js.map +1 -0
  157. package/lib/module/shared/components/boundary/types.js.map +1 -0
  158. package/lib/module/shared/components/boundary/utils/destination-signals.js +20 -0
  159. package/lib/module/shared/components/boundary/utils/destination-signals.js.map +1 -0
  160. package/lib/module/shared/components/{create-boundary-component → boundary}/utils/measured-bounds.js +16 -7
  161. package/lib/module/shared/components/boundary/utils/measured-bounds.js.map +1 -0
  162. package/lib/module/shared/components/boundary/utils/refresh-signals.js +100 -0
  163. package/lib/module/shared/components/boundary/utils/refresh-signals.js.map +1 -0
  164. package/lib/module/shared/components/boundary/utils/source-signals.js +43 -0
  165. package/lib/module/shared/components/boundary/utils/source-signals.js.map +1 -0
  166. package/lib/module/shared/components/create-transition-aware-component.js +8 -3
  167. package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
  168. package/lib/module/shared/components/{integrations/masked-view.js → masked-view.js} +2 -2
  169. package/lib/module/shared/components/masked-view.js.map +1 -0
  170. package/lib/module/shared/components/screen-container/layers/content.js +10 -6
  171. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  172. package/lib/module/shared/configs/presets.js +6 -6
  173. package/lib/module/shared/configs/presets.js.map +1 -1
  174. package/lib/module/shared/index.js +2 -2
  175. package/lib/module/shared/index.js.map +1 -1
  176. package/lib/module/shared/providers/helpers/measured-bounds-writes.js +4 -2
  177. package/lib/module/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  178. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js +8 -4
  179. package/lib/module/shared/providers/screen/descriptors/descriptors.provider.js.map +1 -1
  180. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js +8 -1
  181. package/lib/module/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.js.map +1 -1
  182. package/lib/module/shared/providers/screen/descriptors/helpers/get-ancestor-keys.js +20 -6
  183. package/lib/module/shared/providers/screen/descriptors/helpers/get-ancestor-keys.js.map +1 -1
  184. package/lib/module/shared/providers/screen/origin.provider.js +33 -0
  185. package/lib/module/shared/providers/screen/origin.provider.js.map +1 -0
  186. package/lib/module/shared/providers/screen/styles/constants.js +2 -0
  187. package/lib/module/shared/providers/screen/styles/constants.js.map +1 -1
  188. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.js +53 -0
  189. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.js.map +1 -0
  190. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +1 -0
  191. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  192. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +2 -1
  193. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  194. package/lib/module/shared/providers/screen/styles/styles.provider.js +7 -5
  195. package/lib/module/shared/providers/screen/styles/styles.provider.js.map +1 -1
  196. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js +1 -8
  197. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  198. package/lib/module/shared/stores/bounds/index.js.map +1 -1
  199. package/lib/module/shared/stores/bounds/internals/entries.js.map +1 -1
  200. package/lib/module/shared/stores/bounds/internals/links.js +36 -19
  201. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  202. package/lib/module/shared/stores/bounds/internals/resolver.js +6 -4
  203. package/lib/module/shared/stores/bounds/internals/resolver.js.map +1 -1
  204. package/lib/module/shared/stores/bounds/internals/state.js.map +1 -1
  205. package/lib/module/shared/stores/scroll.store.js +50 -0
  206. package/lib/module/shared/stores/scroll.store.js.map +1 -1
  207. package/lib/module/shared/types/animation.types.js.map +1 -1
  208. package/lib/module/shared/types/bounds.types.js.map +1 -1
  209. package/lib/module/shared/utils/bounds/helpers/create-bound-tag.js +36 -3
  210. package/lib/module/shared/utils/bounds/helpers/create-bound-tag.js.map +1 -1
  211. package/lib/module/shared/utils/bounds/helpers/create-bounds-accessor-core.js +42 -89
  212. package/lib/module/shared/utils/bounds/helpers/create-bounds-accessor-core.js.map +1 -1
  213. package/lib/module/shared/utils/bounds/helpers/create-link-accessor.js +6 -67
  214. package/lib/module/shared/utils/bounds/helpers/create-link-accessor.js.map +1 -1
  215. package/lib/module/shared/utils/bounds/helpers/prepare-bound-styles.js +8 -13
  216. package/lib/module/shared/utils/bounds/helpers/prepare-bound-styles.js.map +1 -1
  217. package/lib/module/shared/utils/bounds/helpers/styles/composers.js +236 -69
  218. package/lib/module/shared/utils/bounds/helpers/styles/composers.js.map +1 -1
  219. package/lib/module/shared/utils/bounds/helpers/styles/compute.js +74 -4
  220. package/lib/module/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  221. package/lib/module/shared/utils/bounds/navigation/reveal/build.js +5 -9
  222. package/lib/module/shared/utils/bounds/navigation/reveal/build.js.map +1 -1
  223. package/lib/module/shared/utils/bounds/navigation/zoom/build.js +5 -10
  224. package/lib/module/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  225. package/lib/typescript/blank-stack/components/stack-view.d.ts.map +1 -1
  226. package/lib/typescript/shared/components/boundary/components/boundary-target.d.ts.map +1 -0
  227. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts.map +1 -0
  228. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts.map +1 -0
  229. package/lib/typescript/shared/components/{create-boundary-component → boundary}/hooks/use-initial-destination-measurement.d.ts +1 -4
  230. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts.map +1 -0
  231. package/lib/typescript/shared/components/{create-boundary-component → boundary}/hooks/use-initial-source-measurement.d.ts +0 -2
  232. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts.map +1 -0
  233. package/lib/typescript/shared/components/{create-boundary-component → boundary}/hooks/use-measurer.d.ts +4 -2
  234. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -0
  235. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts +10 -0
  236. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts.map +1 -0
  237. package/lib/typescript/shared/components/{create-boundary-component → boundary}/index.d.ts +8 -2
  238. package/lib/typescript/shared/components/boundary/index.d.ts.map +1 -0
  239. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts +7 -0
  240. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts.map +1 -0
  241. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts +9 -0
  242. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts.map +1 -0
  243. package/lib/typescript/shared/components/boundary/portal/components/portal-provider.d.ts +4 -0
  244. package/lib/typescript/shared/components/boundary/portal/components/portal-provider.d.ts.map +1 -0
  245. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts +19 -0
  246. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts.map +1 -0
  247. package/lib/typescript/shared/components/boundary/portal/hooks/use-host-measurement.d.ts +13 -0
  248. package/lib/typescript/shared/components/boundary/portal/hooks/use-host-measurement.d.ts.map +1 -0
  249. package/lib/typescript/shared/components/boundary/portal/index.d.ts +4 -0
  250. package/lib/typescript/shared/components/boundary/portal/index.d.ts.map +1 -0
  251. package/lib/typescript/shared/components/boundary/portal/stores/host-bounds.store.d.ts +9 -0
  252. package/lib/typescript/shared/components/boundary/portal/stores/host-bounds.store.d.ts.map +1 -0
  253. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts +19 -0
  254. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts.map +1 -0
  255. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts +11 -0
  256. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts.map +1 -0
  257. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts +21 -0
  258. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts.map +1 -0
  259. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts +3 -0
  260. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts.map +1 -0
  261. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts +37 -0
  262. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts.map +1 -0
  263. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts +3 -0
  264. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts.map +1 -0
  265. package/lib/typescript/shared/components/{create-boundary-component → boundary}/providers/boundary-owner.provider.d.ts +14 -6
  266. package/lib/typescript/shared/components/boundary/providers/boundary-owner.provider.d.ts.map +1 -0
  267. package/lib/typescript/shared/components/boundary/types.d.ts +78 -0
  268. package/lib/typescript/shared/components/boundary/types.d.ts.map +1 -0
  269. package/lib/typescript/shared/components/{create-boundary-component → boundary}/utils/destination-signals.d.ts +2 -3
  270. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts.map +1 -0
  271. package/lib/typescript/shared/components/boundary/utils/measured-bounds.d.ts +12 -0
  272. package/lib/typescript/shared/components/boundary/utils/measured-bounds.d.ts.map +1 -0
  273. package/lib/typescript/shared/components/{create-boundary-component → boundary}/utils/refresh-signals.d.ts +4 -3
  274. package/lib/typescript/shared/components/boundary/utils/refresh-signals.d.ts.map +1 -0
  275. package/lib/typescript/shared/components/{create-boundary-component → boundary}/utils/source-signals.d.ts +1 -2
  276. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts.map +1 -0
  277. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  278. package/lib/typescript/shared/components/masked-view.d.ts.map +1 -0
  279. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  280. package/lib/typescript/shared/configs/presets.d.ts.map +1 -1
  281. package/lib/typescript/shared/index.d.ts +19 -17
  282. package/lib/typescript/shared/index.d.ts.map +1 -1
  283. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts +3 -1
  284. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  285. package/lib/typescript/shared/providers/screen/descriptors/descriptors.provider.d.ts.map +1 -1
  286. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts +6 -1
  287. package/lib/typescript/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.d.ts.map +1 -1
  288. package/lib/typescript/shared/providers/screen/descriptors/helpers/get-ancestor-keys.d.ts +9 -3
  289. package/lib/typescript/shared/providers/screen/descriptors/helpers/get-ancestor-keys.d.ts.map +1 -1
  290. package/lib/typescript/shared/providers/screen/origin.provider.d.ts +11 -0
  291. package/lib/typescript/shared/providers/screen/origin.provider.d.ts.map +1 -0
  292. package/lib/typescript/shared/providers/screen/styles/constants.d.ts.map +1 -1
  293. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.d.ts +3 -0
  294. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.d.ts.map +1 -0
  295. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts +1 -0
  296. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
  297. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +1 -0
  298. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  299. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts +1 -0
  300. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts.map +1 -1
  301. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts +1 -3
  302. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts.map +1 -1
  303. package/lib/typescript/shared/stores/bounds/index.d.ts +1 -1
  304. package/lib/typescript/shared/stores/bounds/index.d.ts.map +1 -1
  305. package/lib/typescript/shared/stores/bounds/internals/entries.d.ts +2 -2
  306. package/lib/typescript/shared/stores/bounds/internals/entries.d.ts.map +1 -1
  307. package/lib/typescript/shared/stores/bounds/internals/links.d.ts +2 -2
  308. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  309. package/lib/typescript/shared/stores/bounds/internals/resolver.d.ts.map +1 -1
  310. package/lib/typescript/shared/stores/bounds/internals/state.d.ts +4 -2
  311. package/lib/typescript/shared/stores/bounds/internals/state.d.ts.map +1 -1
  312. package/lib/typescript/shared/stores/bounds/types.d.ts +47 -12
  313. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  314. package/lib/typescript/shared/stores/scroll.store.d.ts +12 -1
  315. package/lib/typescript/shared/stores/scroll.store.d.ts.map +1 -1
  316. package/lib/typescript/shared/types/animation.types.d.ts +13 -2
  317. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  318. package/lib/typescript/shared/types/bounds.types.d.ts +10 -40
  319. package/lib/typescript/shared/types/bounds.types.d.ts.map +1 -1
  320. package/lib/typescript/shared/types/index.d.ts +2 -2
  321. package/lib/typescript/shared/types/index.d.ts.map +1 -1
  322. package/lib/typescript/shared/utils/bounds/helpers/create-bound-tag.d.ts +2 -1
  323. package/lib/typescript/shared/utils/bounds/helpers/create-bound-tag.d.ts.map +1 -1
  324. package/lib/typescript/shared/utils/bounds/helpers/create-bounds-accessor-core.d.ts +7 -11
  325. package/lib/typescript/shared/utils/bounds/helpers/create-bounds-accessor-core.d.ts.map +1 -1
  326. package/lib/typescript/shared/utils/bounds/helpers/create-link-accessor.d.ts +0 -3
  327. package/lib/typescript/shared/utils/bounds/helpers/create-link-accessor.d.ts.map +1 -1
  328. package/lib/typescript/shared/utils/bounds/helpers/prepare-bound-styles.d.ts +7 -3
  329. package/lib/typescript/shared/utils/bounds/helpers/prepare-bound-styles.d.ts.map +1 -1
  330. package/lib/typescript/shared/utils/bounds/helpers/styles/composers.d.ts +3 -0
  331. package/lib/typescript/shared/utils/bounds/helpers/styles/composers.d.ts.map +1 -1
  332. package/lib/typescript/shared/utils/bounds/helpers/styles/compute.d.ts +1 -1
  333. package/lib/typescript/shared/utils/bounds/helpers/styles/compute.d.ts.map +1 -1
  334. package/lib/typescript/shared/utils/bounds/navigation/reveal/build.d.ts.map +1 -1
  335. package/lib/typescript/shared/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  336. package/lib/typescript/shared/utils/bounds/types/options.d.ts +93 -6
  337. package/lib/typescript/shared/utils/bounds/types/options.d.ts.map +1 -1
  338. package/package.json +3 -2
  339. package/src/blank-stack/components/stack-view.tsx +4 -3
  340. package/src/shared/components/{create-boundary-component → boundary}/components/boundary-target.tsx +28 -11
  341. package/src/shared/components/{create-boundary-component → boundary}/create-boundary-component.tsx +20 -31
  342. package/src/shared/components/boundary/hooks/use-initial-destination-measurement.ts +156 -0
  343. package/src/shared/components/{create-boundary-component → boundary}/hooks/use-initial-source-measurement.ts +5 -14
  344. package/src/shared/components/{create-boundary-component → boundary}/hooks/use-measurer.ts +42 -46
  345. package/src/shared/components/{create-boundary-component → boundary}/hooks/use-refresh-boundary.ts +16 -11
  346. package/src/shared/components/{create-boundary-component → boundary}/index.tsx +12 -0
  347. package/src/shared/components/boundary/portal/components/host.tsx +114 -0
  348. package/src/shared/components/boundary/portal/components/portal-boundary-host.tsx +90 -0
  349. package/src/shared/components/boundary/portal/components/portal-provider.tsx +10 -0
  350. package/src/shared/components/boundary/portal/components/portal.tsx +278 -0
  351. package/src/shared/components/boundary/portal/hooks/use-host-measurement.ts +102 -0
  352. package/src/shared/components/boundary/portal/index.ts +3 -0
  353. package/src/shared/components/boundary/portal/stores/host-bounds.store.ts +45 -0
  354. package/src/shared/components/boundary/portal/stores/host-registry.store.ts +182 -0
  355. package/src/shared/components/boundary/portal/stores/portal-boundary-host.store.ts +91 -0
  356. package/src/shared/components/boundary/portal/utils/attachment.ts +48 -0
  357. package/src/shared/components/boundary/portal/utils/naming.ts +10 -0
  358. package/src/shared/components/boundary/portal/utils/offset-style.ts +171 -0
  359. package/src/shared/components/boundary/portal/utils/teleport-control.ts +13 -0
  360. package/src/shared/components/{create-boundary-component → boundary}/providers/boundary-owner.provider.tsx +41 -33
  361. package/src/shared/components/boundary/types.ts +92 -0
  362. package/src/shared/components/boundary/utils/destination-signals.ts +31 -0
  363. package/src/shared/components/{create-boundary-component → boundary}/utils/measured-bounds.ts +34 -11
  364. package/src/shared/components/boundary/utils/refresh-signals.ts +175 -0
  365. package/src/shared/components/boundary/utils/source-signals.ts +63 -0
  366. package/src/shared/components/create-transition-aware-component.tsx +8 -3
  367. package/src/shared/components/{integrations/masked-view.tsx → masked-view.tsx} +2 -2
  368. package/src/shared/components/screen-container/layers/content.tsx +12 -7
  369. package/src/shared/configs/presets.ts +2 -6
  370. package/src/shared/index.ts +13 -5
  371. package/src/shared/providers/helpers/measured-bounds-writes.ts +11 -1
  372. package/src/shared/providers/screen/descriptors/descriptors.provider.tsx +7 -3
  373. package/src/shared/providers/screen/descriptors/helpers/derive-descriptor-derivations.ts +16 -0
  374. package/src/shared/providers/screen/descriptors/helpers/get-ancestor-keys.ts +31 -6
  375. package/src/shared/providers/screen/origin.provider.tsx +38 -0
  376. package/src/shared/providers/screen/styles/constants.ts +2 -0
  377. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/are-resettable-states-equal.ts +74 -0
  378. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +1 -0
  379. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +1 -0
  380. package/src/shared/providers/screen/styles/styles.provider.tsx +5 -3
  381. package/src/shared/stores/bounds/helpers/link-pairs.helpers.ts +1 -10
  382. package/src/shared/stores/bounds/index.ts +2 -4
  383. package/src/shared/stores/bounds/internals/entries.ts +4 -4
  384. package/src/shared/stores/bounds/internals/links.ts +52 -18
  385. package/src/shared/stores/bounds/internals/resolver.ts +5 -3
  386. package/src/shared/stores/bounds/internals/state.ts +5 -2
  387. package/src/shared/stores/bounds/types.ts +59 -15
  388. package/src/shared/stores/scroll.store.ts +68 -0
  389. package/src/shared/types/animation.types.ts +17 -2
  390. package/src/shared/types/bounds.types.ts +22 -60
  391. package/src/shared/types/index.ts +5 -0
  392. package/src/shared/utils/bounds/helpers/create-bound-tag.ts +46 -4
  393. package/src/shared/utils/bounds/helpers/create-bounds-accessor-core.ts +65 -116
  394. package/src/shared/utils/bounds/helpers/create-link-accessor.ts +10 -80
  395. package/src/shared/utils/bounds/helpers/prepare-bound-styles.ts +10 -13
  396. package/src/shared/utils/bounds/helpers/styles/composers.ts +269 -46
  397. package/src/shared/utils/bounds/helpers/styles/compute.ts +134 -2
  398. package/src/shared/utils/bounds/navigation/reveal/build.ts +5 -7
  399. package/src/shared/utils/bounds/navigation/zoom/build.ts +5 -8
  400. package/src/shared/utils/bounds/types/options.ts +105 -6
  401. package/lib/commonjs/shared/components/create-boundary-component/components/boundary-target.js.map +0 -1
  402. package/lib/commonjs/shared/components/create-boundary-component/create-boundary-component.js.map +0 -1
  403. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-boundary-presence.js.map +0 -1
  404. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.js +0 -99
  405. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.js.map +0 -1
  406. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-initial-source-measurement.js.map +0 -1
  407. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-measurer.js.map +0 -1
  408. package/lib/commonjs/shared/components/create-boundary-component/hooks/use-refresh-boundary.js.map +0 -1
  409. package/lib/commonjs/shared/components/create-boundary-component/index.js.map +0 -1
  410. package/lib/commonjs/shared/components/create-boundary-component/providers/boundary-owner.provider.js.map +0 -1
  411. package/lib/commonjs/shared/components/create-boundary-component/types.js.map +0 -1
  412. package/lib/commonjs/shared/components/create-boundary-component/utils/destination-signals.js +0 -75
  413. package/lib/commonjs/shared/components/create-boundary-component/utils/destination-signals.js.map +0 -1
  414. package/lib/commonjs/shared/components/create-boundary-component/utils/measured-bounds.js.map +0 -1
  415. package/lib/commonjs/shared/components/create-boundary-component/utils/refresh-signals.js +0 -103
  416. package/lib/commonjs/shared/components/create-boundary-component/utils/refresh-signals.js.map +0 -1
  417. package/lib/commonjs/shared/components/create-boundary-component/utils/source-signals.js +0 -52
  418. package/lib/commonjs/shared/components/create-boundary-component/utils/source-signals.js.map +0 -1
  419. package/lib/commonjs/shared/components/integrations/masked-view.js.map +0 -1
  420. package/lib/commonjs/shared/utils/bounds/helpers/create-interpolators.js +0 -68
  421. package/lib/commonjs/shared/utils/bounds/helpers/create-interpolators.js.map +0 -1
  422. package/lib/commonjs/shared/utils/bounds/helpers/styles/interpolate-link-style.js +0 -30
  423. package/lib/commonjs/shared/utils/bounds/helpers/styles/interpolate-link-style.js.map +0 -1
  424. package/lib/module/shared/components/create-boundary-component/components/boundary-target.js.map +0 -1
  425. package/lib/module/shared/components/create-boundary-component/create-boundary-component.js.map +0 -1
  426. package/lib/module/shared/components/create-boundary-component/hooks/use-boundary-presence.js.map +0 -1
  427. package/lib/module/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.js +0 -94
  428. package/lib/module/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.js.map +0 -1
  429. package/lib/module/shared/components/create-boundary-component/hooks/use-initial-source-measurement.js.map +0 -1
  430. package/lib/module/shared/components/create-boundary-component/hooks/use-measurer.js.map +0 -1
  431. package/lib/module/shared/components/create-boundary-component/hooks/use-refresh-boundary.js.map +0 -1
  432. package/lib/module/shared/components/create-boundary-component/index.js.map +0 -1
  433. package/lib/module/shared/components/create-boundary-component/providers/boundary-owner.provider.js +0 -60
  434. package/lib/module/shared/components/create-boundary-component/providers/boundary-owner.provider.js.map +0 -1
  435. package/lib/module/shared/components/create-boundary-component/types.js.map +0 -1
  436. package/lib/module/shared/components/create-boundary-component/utils/destination-signals.js +0 -70
  437. package/lib/module/shared/components/create-boundary-component/utils/destination-signals.js.map +0 -1
  438. package/lib/module/shared/components/create-boundary-component/utils/measured-bounds.js.map +0 -1
  439. package/lib/module/shared/components/create-boundary-component/utils/refresh-signals.js +0 -98
  440. package/lib/module/shared/components/create-boundary-component/utils/refresh-signals.js.map +0 -1
  441. package/lib/module/shared/components/create-boundary-component/utils/source-signals.js +0 -47
  442. package/lib/module/shared/components/create-boundary-component/utils/source-signals.js.map +0 -1
  443. package/lib/module/shared/components/integrations/masked-view.js.map +0 -1
  444. package/lib/module/shared/utils/bounds/helpers/create-interpolators.js +0 -63
  445. package/lib/module/shared/utils/bounds/helpers/create-interpolators.js.map +0 -1
  446. package/lib/module/shared/utils/bounds/helpers/styles/interpolate-link-style.js +0 -26
  447. package/lib/module/shared/utils/bounds/helpers/styles/interpolate-link-style.js.map +0 -1
  448. package/lib/typescript/shared/components/create-boundary-component/components/boundary-target.d.ts.map +0 -1
  449. package/lib/typescript/shared/components/create-boundary-component/create-boundary-component.d.ts.map +0 -1
  450. package/lib/typescript/shared/components/create-boundary-component/hooks/use-boundary-presence.d.ts.map +0 -1
  451. package/lib/typescript/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.d.ts.map +0 -1
  452. package/lib/typescript/shared/components/create-boundary-component/hooks/use-initial-source-measurement.d.ts.map +0 -1
  453. package/lib/typescript/shared/components/create-boundary-component/hooks/use-measurer.d.ts.map +0 -1
  454. package/lib/typescript/shared/components/create-boundary-component/hooks/use-refresh-boundary.d.ts +0 -14
  455. package/lib/typescript/shared/components/create-boundary-component/hooks/use-refresh-boundary.d.ts.map +0 -1
  456. package/lib/typescript/shared/components/create-boundary-component/index.d.ts.map +0 -1
  457. package/lib/typescript/shared/components/create-boundary-component/providers/boundary-owner.provider.d.ts.map +0 -1
  458. package/lib/typescript/shared/components/create-boundary-component/types.d.ts +0 -37
  459. package/lib/typescript/shared/components/create-boundary-component/types.d.ts.map +0 -1
  460. package/lib/typescript/shared/components/create-boundary-component/utils/destination-signals.d.ts.map +0 -1
  461. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts +0 -8
  462. package/lib/typescript/shared/components/create-boundary-component/utils/measured-bounds.d.ts.map +0 -1
  463. package/lib/typescript/shared/components/create-boundary-component/utils/refresh-signals.d.ts.map +0 -1
  464. package/lib/typescript/shared/components/create-boundary-component/utils/source-signals.d.ts.map +0 -1
  465. package/lib/typescript/shared/components/integrations/masked-view.d.ts.map +0 -1
  466. package/lib/typescript/shared/utils/bounds/helpers/create-interpolators.d.ts +0 -14
  467. package/lib/typescript/shared/utils/bounds/helpers/create-interpolators.d.ts.map +0 -1
  468. package/lib/typescript/shared/utils/bounds/helpers/styles/interpolate-link-style.d.ts +0 -17
  469. package/lib/typescript/shared/utils/bounds/helpers/styles/interpolate-link-style.d.ts.map +0 -1
  470. package/src/shared/components/create-boundary-component/hooks/use-initial-destination-measurement.ts +0 -130
  471. package/src/shared/components/create-boundary-component/types.ts +0 -48
  472. package/src/shared/components/create-boundary-component/utils/destination-signals.ts +0 -129
  473. package/src/shared/components/create-boundary-component/utils/refresh-signals.ts +0 -164
  474. package/src/shared/components/create-boundary-component/utils/source-signals.ts +0 -72
  475. package/src/shared/utils/bounds/helpers/create-interpolators.ts +0 -117
  476. package/src/shared/utils/bounds/helpers/styles/interpolate-link-style.ts +0 -43
  477. /package/lib/commonjs/shared/components/{create-boundary-component → boundary}/hooks/use-boundary-presence.js +0 -0
  478. /package/lib/commonjs/shared/components/{create-boundary-component → boundary}/types.js +0 -0
  479. /package/lib/module/shared/components/{create-boundary-component → boundary}/hooks/use-boundary-presence.js +0 -0
  480. /package/lib/module/shared/components/{create-boundary-component → boundary}/types.js +0 -0
  481. /package/lib/typescript/shared/components/{create-boundary-component → boundary}/components/boundary-target.d.ts +0 -0
  482. /package/lib/typescript/shared/components/{create-boundary-component → boundary}/create-boundary-component.d.ts +0 -0
  483. /package/lib/typescript/shared/components/{create-boundary-component → boundary}/hooks/use-boundary-presence.d.ts +0 -0
  484. /package/lib/typescript/shared/components/{integrations/masked-view.d.ts → masked-view.d.ts} +0 -0
  485. /package/src/shared/components/{create-boundary-component → boundary}/hooks/use-boundary-presence.ts +0 -0
@@ -0,0 +1,48 @@
1
+ import type { BoundaryPortalAttachTarget } from "../../types";
2
+
3
+ export type PortalAttachment = {
4
+ matchedScreenKey: string;
5
+ pairKey: string;
6
+ };
7
+
8
+ type ResolvePortalAttachmentTargetsParams = {
9
+ attachment: PortalAttachment | null;
10
+ currentScreenKey: string;
11
+ nextScreenKey?: string;
12
+ portalAttachTarget: BoundaryPortalAttachTarget;
13
+ sourcePairKey?: string;
14
+ };
15
+
16
+ export const resolvePortalAttachmentTargets = ({
17
+ attachment,
18
+ currentScreenKey,
19
+ nextScreenKey,
20
+ portalAttachTarget,
21
+ sourcePairKey,
22
+ }: ResolvePortalAttachmentTargetsParams) => {
23
+ const hasCurrentAttachment = attachment?.pairKey === sourcePairKey;
24
+
25
+ if (!hasCurrentAttachment || !attachment) {
26
+ return {
27
+ progressScreenKey: null,
28
+ targetScreenKey: null,
29
+ };
30
+ }
31
+
32
+ // Matched-screen portals physically live in the matched destination host. If a
33
+ // closing destination is skipped by descriptor resolution, its own progress
34
+ // still owns the attach gate until this attachment is replaced or cleared.
35
+ if (portalAttachTarget === "matched-screen") {
36
+ return {
37
+ progressScreenKey: attachment.matchedScreenKey,
38
+ targetScreenKey: attachment.matchedScreenKey,
39
+ };
40
+ }
41
+
42
+ // Current-screen portals stay mounted in this screen's host, but the visual
43
+ // handoff is still paced by the adjacent destination transition.
44
+ return {
45
+ progressScreenKey: nextScreenKey ?? null,
46
+ targetScreenKey: currentScreenKey,
47
+ };
48
+ };
@@ -0,0 +1,10 @@
1
+ export const PORTAL_HOST_NAME_RESET_VALUE = null;
2
+ const PORTAL_HOST_NAME_SUFFIX = "-portal-host";
3
+
4
+ export const createPortalBoundaryHostName = (
5
+ hostKey: string,
6
+ boundaryId: string,
7
+ ) => {
8
+ "worklet";
9
+ return `${hostKey}-${boundaryId}${PORTAL_HOST_NAME_SUFFIX}`;
10
+ };
@@ -0,0 +1,171 @@
1
+ import {
2
+ interpolate,
3
+ type MeasuredDimensions,
4
+ type StyleProps,
5
+ } from "react-native-reanimated";
6
+ import { getClampedScrollAxisDelta } from "../../../../stores/scroll.store";
7
+ import type { ScrollMetadataState } from "../../../../types/gesture.types";
8
+ import { getPortalHostBounds } from "../stores/host-bounds.store";
9
+
10
+ export type PortalOffsetPlacement =
11
+ | "same-screen"
12
+ | "cross-screen-open"
13
+ | "cross-screen-close";
14
+
15
+ 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;
28
+ hostKey: string;
29
+ hostProgress?: number;
30
+ includeScrollOffsets?: boolean;
31
+ /**
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.
40
+ */
41
+ placement?: PortalOffsetPlacement;
42
+ position?: "absolute" | "relative";
43
+ sourceCurrentScroll?: ScrollMetadataState | null;
44
+ trackSourceScroll?: boolean;
45
+ };
46
+
47
+ export const resolvePortalOffsetStyle = ({
48
+ alignHostToBoundsScroll = false,
49
+ bounds,
50
+ boundsCurrentScroll,
51
+ compensateSourceScroll = false,
52
+ currentScroll,
53
+ hostCurrentScroll,
54
+ hostKey,
55
+ hostProgress = 0,
56
+ includeScrollOffsets = true,
57
+ placement,
58
+ position = "relative",
59
+ sourceCurrentScroll,
60
+ trackSourceScroll = false,
61
+ }: ResolvePortalOffsetStyleParams): StyleProps => {
62
+ "worklet";
63
+ 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
78
+ ? getClampedScrollAxisDelta(
79
+ sourceCurrentScroll ?? null,
80
+ sourceScrollSnapshot,
81
+ "horizontal",
82
+ )
83
+ : 0;
84
+ const sourceScrollDeltaY = shouldCompensateSourceScroll
85
+ ? getClampedScrollAxisDelta(
86
+ sourceCurrentScroll ?? null,
87
+ sourceScrollSnapshot,
88
+ "vertical",
89
+ )
90
+ : 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
+
131
+ const adjustedHostPageX = hostBounds
132
+ ? hostBounds.pageX -
133
+ hostSnapshotDeltaX -
134
+ interpolate(hostProgress, [0, 1], [hostScrollDeltaX, 0])
135
+ : 0;
136
+ const adjustedHostPageY = hostBounds
137
+ ? hostBounds.pageY -
138
+ hostSnapshotDeltaY -
139
+ interpolate(hostProgress, [0, 1], [hostScrollDeltaY, 0])
140
+ : 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
+
168
+ return {
169
+ transform,
170
+ };
171
+ };
@@ -0,0 +1,13 @@
1
+ import type { BoundaryTeleportControl } from "../../../../types/animation.types";
2
+
3
+ export const isTeleportEnabled = (
4
+ teleport: BoundaryTeleportControl | undefined,
5
+ ) => {
6
+ "worklet";
7
+
8
+ if (typeof teleport === "boolean") {
9
+ return teleport;
10
+ }
11
+
12
+ return teleport?.enabled !== false;
13
+ };
@@ -1,16 +1,11 @@
1
1
  import type React from "react";
2
- import {
3
- createContext,
4
- type ReactNode,
5
- useCallback,
6
- useContext,
7
- useMemo,
8
- useRef,
9
- useState,
10
- } from "react";
2
+ import { type ReactNode, useCallback, useMemo, useRef, useState } from "react";
11
3
  import type { View } from "react-native";
12
4
  import type Animated from "react-native-reanimated";
13
5
  import type { AnimatedRef, StyleProps } from "react-native-reanimated";
6
+ import createProvider from "../../../utils/create-provider";
7
+ import { logger } from "../../../utils/logger";
8
+ import type { BoundaryPortal } from "../types";
14
9
 
15
10
  type BoundaryAssociatedStyle = React.ComponentProps<
16
11
  typeof Animated.View
@@ -21,56 +16,58 @@ interface BoundaryOwnerContextValue {
21
16
  registerTargetRef: (
22
17
  targetRef: AnimatedRef<View>,
23
18
  preparedStyles: StyleProps,
19
+ measurementRef?: AnimatedRef<View>,
24
20
  ) => void;
25
21
  unregisterTargetRef: (targetRef: AnimatedRef<View>) => void;
26
22
  activeTargetRef: AnimatedRef<View> | null;
27
23
  associatedTargetStyles?: BoundaryAssociatedStyle;
24
+ entryTag: string;
25
+ portal?: BoundaryPortal;
28
26
  }
29
27
 
30
28
  type BoundaryTargetEntry = {
31
29
  ref: AnimatedRef<View>;
30
+ /** Surface to measure — the portal placeholder when content can teleport. */
31
+ measurementRef: AnimatedRef<View>;
32
32
  preparedStyles: StyleProps;
33
33
  };
34
34
 
35
- const BoundaryOwnerContext = createContext<BoundaryOwnerContextValue | null>(
36
- null,
37
- );
38
-
35
+ // logger.warn prepends the library prefix.
39
36
  const MULTIPLE_TARGETS_WARNING =
40
- "[react-native-screen-transitions] Multiple Boundary.Target elements were rendered under the same boundary owner. The first registered target will be measured.";
37
+ "Multiple Boundary.Target elements were rendered under the same boundary owner. The first registered target will be measured.";
41
38
 
42
39
  export const TARGET_OUTSIDE_OWNER_WARNING =
43
- "[react-native-screen-transitions] Boundary.Target must be rendered inside a Boundary owner (Boundary.View, Boundary.Trigger, or a component created by createBoundaryComponent).";
40
+ "Boundary.Target must be rendered inside a Boundary owner (Boundary.View, Boundary.Trigger, or a component created by createBoundaryComponent).";
44
41
 
45
- export const BoundaryOwnerProvider = (props: {
42
+ interface BoundaryOwnerProps {
46
43
  value: BoundaryOwnerContextValue;
47
44
  children: ReactNode;
48
- }) => {
49
- const { value, children } = props;
50
-
51
- return (
52
- <BoundaryOwnerContext.Provider value={value}>
53
- {children}
54
- </BoundaryOwnerContext.Provider>
55
- );
56
- };
45
+ }
57
46
 
58
- export const useBoundaryOwnerContext = () => {
59
- return useContext(BoundaryOwnerContext);
60
- };
47
+ export const { BoundaryOwnerProvider, useBoundaryOwnerContext } =
48
+ createProvider("BoundaryOwner", { guarded: false })<
49
+ BoundaryOwnerProps,
50
+ BoundaryOwnerContextValue
51
+ >((props) => props);
61
52
 
62
53
  export const useBoundaryOwner = (params: {
63
54
  ownerRef: AnimatedRef<View>;
64
55
  associatedTargetStyles?: BoundaryAssociatedStyle;
56
+ entryTag: string;
57
+ portal?: BoundaryPortal;
65
58
  }) => {
66
- const { ownerRef, associatedTargetStyles } = params;
59
+ const { ownerRef, associatedTargetStyles, entryTag, portal } = params;
67
60
  const warnedAboutMultipleTargetsRef = useRef(false);
68
61
  const [targetEntry, setTargetEntry] = useState<BoundaryTargetEntry | null>(
69
62
  null,
70
63
  );
71
64
 
72
65
  const registerTargetRef = useCallback(
73
- (targetRef: AnimatedRef<View>, preparedStyles: StyleProps) => {
66
+ (
67
+ targetRef: AnimatedRef<View>,
68
+ preparedStyles: StyleProps,
69
+ measurementRef?: AnimatedRef<View>,
70
+ ) => {
74
71
  setTargetEntry((prev) => {
75
72
  if (prev?.ref === targetRef) {
76
73
  return prev;
@@ -82,10 +79,16 @@ export const useBoundaryOwner = (params: {
82
79
  !warnedAboutMultipleTargetsRef.current
83
80
  ) {
84
81
  warnedAboutMultipleTargetsRef.current = true;
85
- console.warn(MULTIPLE_TARGETS_WARNING);
82
+ logger.warn(MULTIPLE_TARGETS_WARNING);
86
83
  }
87
84
 
88
- return prev ?? { ref: targetRef, preparedStyles };
85
+ return (
86
+ prev ?? {
87
+ ref: targetRef,
88
+ measurementRef: measurementRef ?? targetRef,
89
+ preparedStyles,
90
+ }
91
+ );
89
92
  });
90
93
  },
91
94
  [],
@@ -102,6 +105,8 @@ export const useBoundaryOwner = (params: {
102
105
  unregisterTargetRef,
103
106
  activeTargetRef: targetEntry?.ref ?? null,
104
107
  associatedTargetStyles,
108
+ entryTag,
109
+ portal,
105
110
  }),
106
111
  [
107
112
  ownerRef,
@@ -109,13 +114,16 @@ export const useBoundaryOwner = (params: {
109
114
  unregisterTargetRef,
110
115
  targetEntry,
111
116
  associatedTargetStyles,
117
+ entryTag,
118
+ portal,
112
119
  ],
113
120
  );
114
121
 
115
122
  return {
116
123
  contextValue,
117
124
  hasActiveTarget: targetEntry !== null,
118
- measuredRef: targetEntry?.ref ?? ownerRef,
125
+ measuredRef: targetEntry?.measurementRef ?? ownerRef,
119
126
  targetPreparedStyles: targetEntry?.preparedStyles,
127
+ portal,
120
128
  };
121
129
  };
@@ -0,0 +1,92 @@
1
+ import type { ScreenPairKey } from "../../stores/bounds/types";
2
+ import type { BoundsOptions } from "../../utils/bounds/types/options";
3
+
4
+ export type BoundaryId = string | number;
5
+
6
+ export type BoundaryPortalAttachTarget = "current-screen" | "matched-screen";
7
+
8
+ /**
9
+ * Configures automatic portal attachment for a boundary target.
10
+ *
11
+ * `attachTo` selects where the portal physically renders. Independently of
12
+ * that choice, `Transition.Boundary.Host` marks the screen-local coordinate
13
+ * space the portal should render within.
14
+ *
15
+ * - `current-screen`: the portal attaches to this screen's active host — for a
16
+ * scroll-hosted screen, place `Transition.Boundary.Host` inside that
17
+ * ScrollView to make the content ride with it.
18
+ * - `matched-screen`: the portal attaches to the matched screen's active host
19
+ * for the whole transition (open and close), which avoids re-parenting
20
+ * flicker while keeping the source placeholder measured at home.
21
+ */
22
+ export type BoundaryPortalOptions = {
23
+ /**
24
+ * `current-screen` keeps the portal on this boundary's screen.
25
+ * `matched-screen` moves it to the matched screen once the
26
+ * source/destination link completes.
27
+ *
28
+ * @default "current-screen"
29
+ */
30
+ attachTo?: BoundaryPortalAttachTarget;
31
+ };
32
+
33
+ export type BoundaryPortal = boolean | BoundaryPortalOptions;
34
+
35
+ export type BoundaryConfigProps = Pick<
36
+ BoundsOptions,
37
+ "anchor" | "scaleMode" | "target" | "method"
38
+ >;
39
+
40
+ /**
41
+ * Boundary-specific props shared across all boundary component variants.
42
+ * These are the props that `createBoundaryComponent` extracts and handles
43
+ * internally, regardless of the underlying wrapped component.
44
+ */
45
+ export interface BoundaryOwnProps extends BoundaryConfigProps {
46
+ /**
47
+ * Optional group name for collection/list scenarios.
48
+ * When provided, concrete boundary entries use `group:id`, while transition
49
+ * links stay keyed by the member `id` inside the active screen pair.
50
+ */
51
+ group?: string;
52
+ /**
53
+ * Whether this boundary should participate in matching and measurement.
54
+ * @default true
55
+ */
56
+ enabled?: boolean;
57
+ /**
58
+ * Renders this boundary target through a layout-preserving portal when
59
+ * `react-native-teleport` is installed.
60
+ *
61
+ * The target keeps its measured layout space in the original tree. Once the
62
+ * active source/destination link for this boundary is complete, the screen
63
+ * portal layer can render a boundary-specific host and attach this target to
64
+ * it so the active matched target escapes local clipping.
65
+ *
66
+ * Use `true` to attach to the current screen host. Use
67
+ * `{ attachTo: "matched-screen" }` to attach to the matched screen host.
68
+ *
69
+ * @default false
70
+ */
71
+ portal?: BoundaryPortal;
72
+ id: BoundaryId;
73
+ }
74
+
75
+ /**
76
+ * Full props for a boundary component wrapping a component with props `P`.
77
+ * Omits `id` from the wrapped component's props (since boundary uses its own `id`).
78
+ */
79
+ export type BoundaryComponentProps<P extends object> = Omit<P, "id"> &
80
+ BoundaryOwnProps;
81
+
82
+ export type MeasureTarget =
83
+ | {
84
+ type: "source";
85
+ pairKey: ScreenPairKey;
86
+ }
87
+ | {
88
+ type: "destination";
89
+ pairKey: ScreenPairKey;
90
+ };
91
+
92
+ export type MeasureBoundary = (target: MeasureTarget) => void;
@@ -0,0 +1,31 @@
1
+ import type {
2
+ LinkPairsState,
3
+ ScreenPairKey,
4
+ } from "../../../stores/bounds/types";
5
+
6
+ export const getInitialDestinationMeasurePairKey = (params: {
7
+ enabled: boolean;
8
+ destinationPairKey?: ScreenPairKey;
9
+ ancestorDestinationPairKey?: ScreenPairKey;
10
+ linkId: string;
11
+ linkState?: LinkPairsState;
12
+ }): ScreenPairKey | null => {
13
+ "worklet";
14
+ const {
15
+ enabled,
16
+ destinationPairKey,
17
+ ancestorDestinationPairKey,
18
+ linkId,
19
+ linkState,
20
+ } = params;
21
+ const measurePairKey = destinationPairKey ?? ancestorDestinationPairKey;
22
+
23
+ if (!enabled || !measurePairKey) {
24
+ return null;
25
+ }
26
+
27
+ const hasDestination =
28
+ linkState?.[measurePairKey]?.links?.[linkId]?.destination;
29
+
30
+ return hasDestination ? null : measurePairKey;
31
+ };
@@ -4,17 +4,31 @@ import {
4
4
  type MeasuredDimensions,
5
5
  measure,
6
6
  } from "react-native-reanimated";
7
+ import {
8
+ clampScrollAxisOffset,
9
+ cloneScrollMetadataState,
10
+ } from "../../../stores/scroll.store";
7
11
  import type {
8
12
  ScrollGestureAxisState,
9
13
  ScrollGestureState,
14
+ ScrollMetadataState,
10
15
  } from "../../../types/gesture.types";
11
16
 
12
17
  const SCROLL_MEASUREMENT_EPSILON = 1;
13
18
 
14
- const getOverscrollDelta = (axisState: ScrollGestureAxisState): number => {
19
+ export type ScrollMeasuredDimensions = MeasuredDimensions & {
20
+ scroll?: ScrollMetadataState | null;
21
+ };
22
+
23
+ const getOverscrollDelta = (
24
+ axisState: ScrollGestureAxisState | null | undefined,
25
+ ): number => {
15
26
  "worklet";
16
- const maxOffset = Math.max(0, axisState.contentSize - axisState.layoutSize);
17
- const clampedOffset = Math.min(Math.max(axisState.offset, 0), maxOffset);
27
+ const clampedOffset = clampScrollAxisOffset(axisState);
28
+ if (!axisState || clampedOffset === null) {
29
+ return 0;
30
+ }
31
+
18
32
  const delta = axisState.offset - clampedOffset;
19
33
 
20
34
  return Math.abs(delta) > SCROLL_MEASUREMENT_EPSILON ? delta : 0;
@@ -22,7 +36,7 @@ const getOverscrollDelta = (axisState: ScrollGestureAxisState): number => {
22
36
 
23
37
  export const adjustedMeasuredBoundsForOverscrollDeltas = (
24
38
  measured: MeasuredDimensions,
25
- scrollState: ScrollGestureState | null,
39
+ scrollState: ScrollGestureState | ScrollMetadataState | null,
26
40
  ): MeasuredDimensions => {
27
41
  "worklet";
28
42
 
@@ -46,18 +60,15 @@ export const adjustedMeasuredBoundsForOverscrollDeltas = (
46
60
  };
47
61
  };
48
62
 
49
- export const applyVisibilityBlockOffset = (
63
+ export const normalizeMeasuredBoundsToOrigin = (
50
64
  measured: MeasuredDimensions,
51
- offset: number,
65
+ origin: MeasuredDimensions,
52
66
  ): MeasuredDimensions => {
53
67
  "worklet";
54
- if (offset === 0) {
55
- return measured;
56
- }
57
-
58
68
  return {
59
69
  ...measured,
60
- pageY: measured.pageY - offset,
70
+ pageX: measured.pageX - origin.pageX,
71
+ pageY: measured.pageY - origin.pageY,
61
72
  };
62
73
  };
63
74
 
@@ -95,3 +106,15 @@ export const measureWithOverscrollAwareness = (
95
106
 
96
107
  return adjustedMeasuredBoundsForOverscrollDeltas(measured, scrollState);
97
108
  };
109
+
110
+ export const attachScrollSnapshotToMeasuredBounds = (
111
+ measured: MeasuredDimensions,
112
+ scroll: ScrollMetadataState | null | undefined,
113
+ ): ScrollMeasuredDimensions => {
114
+ "worklet";
115
+
116
+ return {
117
+ ...measured,
118
+ scroll: cloneScrollMetadataState(scroll),
119
+ };
120
+ };