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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (481) hide show
  1. package/lib/commonjs/shared/components/boundary/components/boundary-target.js +21 -16
  2. package/lib/commonjs/shared/components/boundary/components/boundary-target.js.map +1 -1
  3. package/lib/commonjs/shared/components/boundary/create-boundary-component.js +88 -114
  4. package/lib/commonjs/shared/components/boundary/create-boundary-component.js.map +1 -1
  5. package/lib/commonjs/shared/components/boundary/hooks/{use-boundary-presence.js → lifecycles/use-boundary-presence.js} +14 -7
  6. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js.map +1 -0
  7. package/lib/commonjs/shared/components/boundary/hooks/{use-initial-destination-measurement.js → lifecycles/use-initial-destination-measurement.js} +51 -24
  8. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.js.map +1 -0
  9. package/lib/commonjs/shared/components/boundary/hooks/{use-initial-source-measurement.js → lifecycles/use-initial-source-measurement.js} +7 -10
  10. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.js.map +1 -0
  11. package/lib/commonjs/shared/components/boundary/hooks/{use-refresh-boundary.js → lifecycles/use-refresh-boundary.js} +10 -7
  12. package/lib/commonjs/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -0
  13. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-measurement.js +82 -0
  14. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -0
  15. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js +10 -13
  16. package/lib/commonjs/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  17. package/lib/commonjs/shared/components/boundary/index.js +27 -30
  18. package/lib/commonjs/shared/components/boundary/index.js.map +1 -1
  19. package/lib/commonjs/shared/components/boundary/portal/components/boundary-local-portal-host.js +58 -0
  20. package/lib/commonjs/shared/components/boundary/portal/components/boundary-local-portal-host.js.map +1 -0
  21. package/lib/commonjs/shared/components/boundary/portal/components/host.js +20 -4
  22. package/lib/commonjs/shared/components/boundary/portal/components/host.js.map +1 -1
  23. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js +53 -32
  24. package/lib/commonjs/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -1
  25. package/lib/commonjs/shared/components/boundary/portal/components/portal.js +206 -96
  26. package/lib/commonjs/shared/components/boundary/portal/components/portal.js.map +1 -1
  27. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js +14 -2
  28. package/lib/commonjs/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -1
  29. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js +5 -44
  30. package/lib/commonjs/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  31. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js +37 -5
  32. package/lib/commonjs/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  33. package/lib/commonjs/shared/components/boundary/portal/teleport.js +15 -2
  34. package/lib/commonjs/shared/components/boundary/portal/teleport.js.map +1 -1
  35. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js +18 -0
  36. package/lib/commonjs/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  37. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js +10 -3
  38. package/lib/commonjs/shared/components/boundary/portal/utils/naming.js.map +1 -1
  39. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js +28 -49
  40. package/lib/commonjs/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  41. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js +254 -0
  42. package/lib/commonjs/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  43. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js +38 -0
  44. package/lib/commonjs/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  45. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js +29 -0
  46. package/lib/commonjs/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  47. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js +10 -1
  48. package/lib/commonjs/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  49. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js +25 -0
  50. package/lib/commonjs/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  51. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js +65 -0
  52. package/lib/commonjs/shared/components/boundary/providers/boundary-root.provider.js.map +1 -0
  53. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js +12 -2
  54. package/lib/commonjs/shared/components/boundary/utils/destination-signals.js.map +1 -1
  55. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js +0 -21
  56. package/lib/commonjs/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  57. package/lib/commonjs/shared/components/boundary/utils/source-signals.js +4 -9
  58. package/lib/commonjs/shared/components/boundary/utils/source-signals.js.map +1 -1
  59. package/lib/commonjs/shared/components/create-transition-aware-component.js +2 -20
  60. package/lib/commonjs/shared/components/create-transition-aware-component.js.map +1 -1
  61. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js +1 -1
  62. package/lib/commonjs/shared/components/overlay/variations/float-overlay.js.map +1 -1
  63. package/lib/commonjs/shared/components/screen-container/layers/backdrop.js +2 -14
  64. package/lib/commonjs/shared/components/screen-container/layers/backdrop.js.map +1 -1
  65. package/lib/commonjs/shared/components/screen-container/layers/content.js +4 -16
  66. package/lib/commonjs/shared/components/screen-container/layers/content.js.map +1 -1
  67. package/lib/commonjs/shared/components/screen-container/layers/maybe-masked-navigation-container.js +4 -15
  68. package/lib/commonjs/shared/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  69. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js +4 -16
  70. package/lib/commonjs/shared/components/screen-container/layers/surface-container.js.map +1 -1
  71. package/lib/commonjs/shared/index.js.map +1 -1
  72. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js +6 -3
  73. package/lib/commonjs/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  74. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js +1 -0
  75. package/lib/commonjs/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  76. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js +143 -24
  77. package/lib/commonjs/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  78. package/lib/commonjs/shared/providers/screen/screen-composer.js +1 -1
  79. package/lib/commonjs/shared/providers/screen/screen-composer.js.map +1 -1
  80. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js +95 -0
  81. package/lib/commonjs/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  82. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  83. package/lib/commonjs/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  84. package/lib/commonjs/shared/providers/screen/styles/helpers/opening-phase.js +32 -0
  85. package/lib/commonjs/shared/providers/screen/styles/helpers/opening-phase.js.map +1 -0
  86. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +16 -11
  87. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  88. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  89. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  90. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js +1 -20
  91. package/lib/commonjs/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js.map +1 -1
  92. package/lib/commonjs/shared/providers/screen/styles/helpers/visibility-gate.js +1 -11
  93. package/lib/commonjs/shared/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  94. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js +96 -0
  95. package/lib/commonjs/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  96. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +36 -36
  97. package/lib/commonjs/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  98. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +1 -19
  99. package/lib/commonjs/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  100. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +8 -3
  101. package/lib/commonjs/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  102. package/lib/commonjs/shared/providers/screen/styles/index.js +38 -7
  103. package/lib/commonjs/shared/providers/screen/styles/index.js.map +1 -1
  104. package/lib/commonjs/shared/providers/screen/styles/{styles.provider.js → slot.provider.js} +34 -21
  105. package/lib/commonjs/shared/providers/screen/styles/slot.provider.js.map +1 -0
  106. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js +53 -0
  107. package/lib/commonjs/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  108. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js +37 -2
  109. package/lib/commonjs/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  110. package/lib/commonjs/shared/stores/bounds/internals/entries.js +11 -4
  111. package/lib/commonjs/shared/stores/bounds/internals/entries.js.map +1 -1
  112. package/lib/commonjs/shared/stores/bounds/internals/links.js +134 -51
  113. package/lib/commonjs/shared/stores/bounds/internals/links.js.map +1 -1
  114. package/lib/commonjs/shared/stores/bounds/internals/resolver.js +1 -3
  115. package/lib/commonjs/shared/stores/bounds/internals/resolver.js.map +1 -1
  116. package/lib/commonjs/shared/stores/system.store.js +5 -0
  117. package/lib/commonjs/shared/stores/system.store.js.map +1 -1
  118. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js +10 -69
  119. package/lib/commonjs/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  120. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js +59 -0
  121. package/lib/commonjs/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  122. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js +8 -1
  123. package/lib/commonjs/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  124. package/lib/commonjs/shared/utils/bounds/navigation/zoom/helpers.js +59 -0
  125. package/lib/commonjs/shared/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  126. package/lib/commonjs/shared/utils/logger.js +11 -0
  127. package/lib/commonjs/shared/utils/logger.js.map +1 -1
  128. package/lib/module/shared/components/boundary/components/boundary-target.js +19 -14
  129. package/lib/module/shared/components/boundary/components/boundary-target.js.map +1 -1
  130. package/lib/module/shared/components/boundary/create-boundary-component.js +93 -119
  131. package/lib/module/shared/components/boundary/create-boundary-component.js.map +1 -1
  132. package/lib/module/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js +30 -0
  133. package/lib/module/shared/components/boundary/hooks/lifecycles/use-boundary-presence.js.map +1 -0
  134. package/lib/module/shared/components/boundary/hooks/{use-initial-destination-measurement.js → lifecycles/use-initial-destination-measurement.js} +51 -24
  135. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.js.map +1 -0
  136. package/lib/module/shared/components/boundary/hooks/{use-initial-source-measurement.js → lifecycles/use-initial-source-measurement.js} +7 -10
  137. package/lib/module/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.js.map +1 -0
  138. package/lib/module/shared/components/boundary/hooks/{use-refresh-boundary.js → lifecycles/use-refresh-boundary.js} +10 -7
  139. package/lib/module/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.js.map +1 -0
  140. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js +77 -0
  141. package/lib/module/shared/components/boundary/hooks/use-boundary-measurement.js.map +1 -0
  142. package/lib/module/shared/components/boundary/hooks/use-measurer.js +10 -13
  143. package/lib/module/shared/components/boundary/hooks/use-measurer.js.map +1 -1
  144. package/lib/module/shared/components/boundary/index.js +27 -30
  145. package/lib/module/shared/components/boundary/index.js.map +1 -1
  146. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js +53 -0
  147. package/lib/module/shared/components/boundary/portal/components/boundary-local-portal-host.js.map +1 -0
  148. package/lib/module/shared/components/boundary/portal/components/host.js +21 -5
  149. package/lib/module/shared/components/boundary/portal/components/host.js.map +1 -1
  150. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js +53 -32
  151. package/lib/module/shared/components/boundary/portal/components/portal-boundary-host.js.map +1 -1
  152. package/lib/module/shared/components/boundary/portal/components/portal.js +213 -103
  153. package/lib/module/shared/components/boundary/portal/components/portal.js.map +1 -1
  154. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js +15 -3
  155. package/lib/module/shared/components/boundary/portal/hooks/use-host-measurement.js.map +1 -1
  156. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js +4 -41
  157. package/lib/module/shared/components/boundary/portal/stores/host-registry.store.js.map +1 -1
  158. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js +35 -4
  159. package/lib/module/shared/components/boundary/portal/stores/portal-boundary-host.store.js.map +1 -1
  160. package/lib/module/shared/components/boundary/portal/teleport.js +16 -2
  161. package/lib/module/shared/components/boundary/portal/teleport.js.map +1 -1
  162. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js +13 -0
  163. package/lib/module/shared/components/boundary/portal/utils/has-local-slot.js.map +1 -0
  164. package/lib/module/shared/components/boundary/portal/utils/naming.js +8 -2
  165. package/lib/module/shared/components/boundary/portal/utils/naming.js.map +1 -1
  166. package/lib/module/shared/components/boundary/portal/utils/offset-style.js +29 -49
  167. package/lib/module/shared/components/boundary/portal/utils/offset-style.js.map +1 -1
  168. package/lib/module/shared/components/boundary/portal/utils/ownership.js +246 -0
  169. package/lib/module/shared/components/boundary/portal/utils/ownership.js.map +1 -0
  170. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js +33 -0
  171. package/lib/module/shared/components/boundary/portal/utils/resolve-portal.js.map +1 -0
  172. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js +24 -0
  173. package/lib/module/shared/components/boundary/portal/utils/shallow-equal.js.map +1 -0
  174. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js +8 -0
  175. package/lib/module/shared/components/boundary/portal/utils/teleport-control.js.map +1 -1
  176. package/lib/module/shared/components/boundary/portal/utils/visible-host.js +20 -0
  177. package/lib/module/shared/components/boundary/portal/utils/visible-host.js.map +1 -0
  178. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js +57 -0
  179. package/lib/module/shared/components/boundary/providers/boundary-root.provider.js.map +1 -0
  180. package/lib/module/shared/components/boundary/utils/destination-signals.js +12 -2
  181. package/lib/module/shared/components/boundary/utils/destination-signals.js.map +1 -1
  182. package/lib/module/shared/components/boundary/utils/refresh-signals.js +0 -21
  183. package/lib/module/shared/components/boundary/utils/refresh-signals.js.map +1 -1
  184. package/lib/module/shared/components/boundary/utils/source-signals.js +4 -9
  185. package/lib/module/shared/components/boundary/utils/source-signals.js.map +1 -1
  186. package/lib/module/shared/components/create-transition-aware-component.js +4 -22
  187. package/lib/module/shared/components/create-transition-aware-component.js.map +1 -1
  188. package/lib/module/shared/components/overlay/variations/float-overlay.js +2 -2
  189. package/lib/module/shared/components/overlay/variations/float-overlay.js.map +1 -1
  190. package/lib/module/shared/components/screen-container/layers/backdrop.js +4 -16
  191. package/lib/module/shared/components/screen-container/layers/backdrop.js.map +1 -1
  192. package/lib/module/shared/components/screen-container/layers/content.js +4 -16
  193. package/lib/module/shared/components/screen-container/layers/content.js.map +1 -1
  194. package/lib/module/shared/components/screen-container/layers/maybe-masked-navigation-container.js +5 -16
  195. package/lib/module/shared/components/screen-container/layers/maybe-masked-navigation-container.js.map +1 -1
  196. package/lib/module/shared/components/screen-container/layers/surface-container.js +4 -16
  197. package/lib/module/shared/components/screen-container/layers/surface-container.js.map +1 -1
  198. package/lib/module/shared/index.js.map +1 -1
  199. package/lib/module/shared/providers/helpers/measured-bounds-writes.js +6 -3
  200. package/lib/module/shared/providers/helpers/measured-bounds-writes.js.map +1 -1
  201. package/lib/module/shared/providers/screen/animation/helpers/derivations.js +1 -0
  202. package/lib/module/shared/providers/screen/animation/helpers/derivations.js.map +1 -1
  203. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js +144 -25
  204. package/lib/module/shared/providers/screen/animation/helpers/pipeline.js.map +1 -1
  205. package/lib/module/shared/providers/screen/screen-composer.js +2 -2
  206. package/lib/module/shared/providers/screen/screen-composer.js.map +1 -1
  207. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js +89 -0
  208. package/lib/module/shared/providers/screen/styles/helpers/compose-slot-style.js.map +1 -0
  209. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js +30 -9
  210. package/lib/module/shared/providers/screen/styles/helpers/normalize-slots.js.map +1 -1
  211. package/lib/module/shared/providers/screen/styles/helpers/opening-phase.js +26 -0
  212. package/lib/module/shared/providers/screen/styles/helpers/opening-phase.js.map +1 -0
  213. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js +16 -11
  214. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/index.js.map +1 -1
  215. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js +2 -0
  216. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.js.map +1 -1
  217. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js +0 -18
  218. package/lib/module/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.js.map +1 -1
  219. package/lib/module/shared/providers/screen/styles/helpers/visibility-gate.js +0 -9
  220. package/lib/module/shared/providers/screen/styles/helpers/visibility-gate.js.map +1 -1
  221. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js +87 -0
  222. package/lib/module/shared/providers/screen/styles/hooks/slot-resolvers.js.map +1 -0
  223. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js +36 -36
  224. package/lib/module/shared/providers/screen/styles/hooks/use-interpolated-style-maps.js.map +1 -1
  225. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js +1 -19
  226. package/lib/module/shared/providers/screen/styles/hooks/use-maybe-block-visibility.js.map +1 -1
  227. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js +9 -4
  228. package/lib/module/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.js.map +1 -1
  229. package/lib/module/shared/providers/screen/styles/index.js +2 -1
  230. package/lib/module/shared/providers/screen/styles/index.js.map +1 -1
  231. package/lib/module/shared/providers/screen/styles/slot.provider.js +66 -0
  232. package/lib/module/shared/providers/screen/styles/slot.provider.js.map +1 -0
  233. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js +47 -0
  234. package/lib/module/shared/providers/screen/styles/stores/slot-references.store.js.map +1 -0
  235. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js +33 -1
  236. package/lib/module/shared/stores/bounds/helpers/link-pairs.helpers.js.map +1 -1
  237. package/lib/module/shared/stores/bounds/internals/entries.js +11 -4
  238. package/lib/module/shared/stores/bounds/internals/entries.js.map +1 -1
  239. package/lib/module/shared/stores/bounds/internals/links.js +135 -53
  240. package/lib/module/shared/stores/bounds/internals/links.js.map +1 -1
  241. package/lib/module/shared/stores/bounds/internals/resolver.js +1 -3
  242. package/lib/module/shared/stores/bounds/internals/resolver.js.map +1 -1
  243. package/lib/module/shared/stores/system.store.js +5 -0
  244. package/lib/module/shared/stores/system.store.js.map +1 -1
  245. package/lib/module/shared/types/animation.types.js.map +1 -1
  246. package/lib/module/shared/utils/bounds/helpers/styles/compute.js +10 -69
  247. package/lib/module/shared/utils/bounds/helpers/styles/compute.js.map +1 -1
  248. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js +52 -0
  249. package/lib/module/shared/utils/bounds/helpers/styles/local-transform.js.map +1 -0
  250. package/lib/module/shared/utils/bounds/navigation/zoom/build.js +9 -2
  251. package/lib/module/shared/utils/bounds/navigation/zoom/build.js.map +1 -1
  252. package/lib/module/shared/utils/bounds/navigation/zoom/helpers.js +58 -0
  253. package/lib/module/shared/utils/bounds/navigation/zoom/helpers.js.map +1 -1
  254. package/lib/module/shared/utils/logger.js +11 -0
  255. package/lib/module/shared/utils/logger.js.map +1 -1
  256. package/lib/typescript/shared/components/boundary/components/boundary-target.d.ts.map +1 -1
  257. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts +0 -1
  258. package/lib/typescript/shared/components/boundary/create-boundary-component.d.ts.map +1 -1
  259. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts +11 -0
  260. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-boundary-presence.d.ts.map +1 -0
  261. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.d.ts +10 -0
  262. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-destination-measurement.d.ts.map +1 -0
  263. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts +8 -0
  264. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-initial-source-measurement.d.ts.map +1 -0
  265. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts +10 -0
  266. package/lib/typescript/shared/components/boundary/hooks/lifecycles/use-refresh-boundary.d.ts.map +1 -0
  267. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts +28 -0
  268. package/lib/typescript/shared/components/boundary/hooks/use-boundary-measurement.d.ts.map +1 -0
  269. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts +5 -6
  270. package/lib/typescript/shared/components/boundary/hooks/use-measurer.d.ts.map +1 -1
  271. package/lib/typescript/shared/components/boundary/index.d.ts +36 -229
  272. package/lib/typescript/shared/components/boundary/index.d.ts.map +1 -1
  273. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts +8 -0
  274. package/lib/typescript/shared/components/boundary/portal/components/boundary-local-portal-host.d.ts.map +1 -0
  275. package/lib/typescript/shared/components/boundary/portal/components/host.d.ts.map +1 -1
  276. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts +1 -1
  277. package/lib/typescript/shared/components/boundary/portal/components/portal-boundary-host.d.ts.map +1 -1
  278. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts +4 -3
  279. package/lib/typescript/shared/components/boundary/portal/components/portal.d.ts.map +1 -1
  280. package/lib/typescript/shared/components/boundary/portal/hooks/use-host-measurement.d.ts.map +1 -1
  281. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts +0 -7
  282. package/lib/typescript/shared/components/boundary/portal/stores/host-registry.store.d.ts.map +1 -1
  283. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts +16 -1
  284. package/lib/typescript/shared/components/boundary/portal/stores/portal-boundary-host.store.d.ts.map +1 -1
  285. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts +1 -1
  286. package/lib/typescript/shared/components/boundary/portal/teleport.d.ts.map +1 -1
  287. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts +3 -0
  288. package/lib/typescript/shared/components/boundary/portal/utils/has-local-slot.d.ts.map +1 -0
  289. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts +2 -1
  290. package/lib/typescript/shared/components/boundary/portal/utils/naming.d.ts.map +1 -1
  291. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts +16 -32
  292. package/lib/typescript/shared/components/boundary/portal/utils/offset-style.d.ts.map +1 -1
  293. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts +35 -0
  294. package/lib/typescript/shared/components/boundary/portal/utils/ownership.d.ts.map +1 -0
  295. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts +12 -0
  296. package/lib/typescript/shared/components/boundary/portal/utils/resolve-portal.d.ts.map +1 -0
  297. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts +8 -0
  298. package/lib/typescript/shared/components/boundary/portal/utils/shallow-equal.d.ts.map +1 -0
  299. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts +4 -0
  300. package/lib/typescript/shared/components/boundary/portal/utils/teleport-control.d.ts.map +1 -1
  301. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts +8 -0
  302. package/lib/typescript/shared/components/boundary/portal/utils/visible-host.d.ts.map +1 -0
  303. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts +37 -0
  304. package/lib/typescript/shared/components/boundary/providers/boundary-root.provider.d.ts.map +1 -0
  305. package/lib/typescript/shared/components/boundary/types.d.ts +9 -36
  306. package/lib/typescript/shared/components/boundary/types.d.ts.map +1 -1
  307. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts +1 -0
  308. package/lib/typescript/shared/components/boundary/utils/destination-signals.d.ts.map +1 -1
  309. package/lib/typescript/shared/components/boundary/utils/refresh-signals.d.ts.map +1 -1
  310. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts +0 -1
  311. package/lib/typescript/shared/components/boundary/utils/source-signals.d.ts.map +1 -1
  312. package/lib/typescript/shared/components/create-transition-aware-component.d.ts.map +1 -1
  313. package/lib/typescript/shared/components/screen-container/layers/backdrop.d.ts.map +1 -1
  314. package/lib/typescript/shared/components/screen-container/layers/content.d.ts.map +1 -1
  315. package/lib/typescript/shared/components/screen-container/layers/maybe-masked-navigation-container.d.ts.map +1 -1
  316. package/lib/typescript/shared/components/screen-container/layers/surface-container.d.ts.map +1 -1
  317. package/lib/typescript/shared/index.d.ts +3 -215
  318. package/lib/typescript/shared/index.d.ts.map +1 -1
  319. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts +3 -3
  320. package/lib/typescript/shared/providers/helpers/measured-bounds-writes.d.ts.map +1 -1
  321. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts +1 -0
  322. package/lib/typescript/shared/providers/screen/animation/helpers/derivations.d.ts.map +1 -1
  323. package/lib/typescript/shared/providers/screen/animation/helpers/pipeline.d.ts.map +1 -1
  324. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts +4 -0
  325. package/lib/typescript/shared/providers/screen/styles/helpers/compose-slot-style.d.ts.map +1 -0
  326. package/lib/typescript/shared/providers/screen/styles/helpers/normalize-slots.d.ts.map +1 -1
  327. package/lib/typescript/shared/providers/screen/styles/helpers/opening-phase.d.ts +16 -0
  328. package/lib/typescript/shared/providers/screen/styles/helpers/opening-phase.d.ts.map +1 -0
  329. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts +3 -4
  330. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/index.d.ts.map +1 -1
  331. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts +2 -1
  332. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.d.ts.map +1 -1
  333. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.d.ts +0 -1
  334. package/lib/typescript/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.d.ts.map +1 -1
  335. package/lib/typescript/shared/providers/screen/styles/helpers/visibility-gate.d.ts +0 -1
  336. package/lib/typescript/shared/providers/screen/styles/helpers/visibility-gate.d.ts.map +1 -1
  337. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts +11 -0
  338. package/lib/typescript/shared/providers/screen/styles/hooks/slot-resolvers.d.ts.map +1 -0
  339. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts +4 -6
  340. package/lib/typescript/shared/providers/screen/styles/hooks/use-interpolated-style-maps.d.ts.map +1 -1
  341. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts +0 -1
  342. package/lib/typescript/shared/providers/screen/styles/hooks/use-maybe-block-visibility.d.ts.map +1 -1
  343. package/lib/typescript/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.d.ts.map +1 -1
  344. package/lib/typescript/shared/providers/screen/styles/index.d.ts +2 -1
  345. package/lib/typescript/shared/providers/screen/styles/index.d.ts.map +1 -1
  346. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts +18 -0
  347. package/lib/typescript/shared/providers/screen/styles/slot.provider.d.ts.map +1 -0
  348. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts +6 -0
  349. package/lib/typescript/shared/providers/screen/styles/stores/slot-references.store.d.ts.map +1 -0
  350. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts +8 -1
  351. package/lib/typescript/shared/stores/bounds/helpers/link-pairs.helpers.d.ts.map +1 -1
  352. package/lib/typescript/shared/stores/bounds/internals/entries.d.ts.map +1 -1
  353. package/lib/typescript/shared/stores/bounds/internals/links.d.ts +4 -3
  354. package/lib/typescript/shared/stores/bounds/internals/links.d.ts.map +1 -1
  355. package/lib/typescript/shared/stores/bounds/internals/resolver.d.ts.map +1 -1
  356. package/lib/typescript/shared/stores/bounds/types.d.ts +22 -20
  357. package/lib/typescript/shared/stores/bounds/types.d.ts.map +1 -1
  358. package/lib/typescript/shared/stores/system.store.d.ts +1 -0
  359. package/lib/typescript/shared/stores/system.store.d.ts.map +1 -1
  360. package/lib/typescript/shared/types/animation.types.d.ts +7 -1
  361. package/lib/typescript/shared/types/animation.types.d.ts.map +1 -1
  362. package/lib/typescript/shared/utils/bounds/helpers/styles/compute.d.ts.map +1 -1
  363. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts +6 -0
  364. package/lib/typescript/shared/utils/bounds/helpers/styles/local-transform.d.ts.map +1 -0
  365. package/lib/typescript/shared/utils/bounds/navigation/zoom/build.d.ts.map +1 -1
  366. package/lib/typescript/shared/utils/bounds/navigation/zoom/helpers.d.ts +9 -0
  367. package/lib/typescript/shared/utils/bounds/navigation/zoom/helpers.d.ts.map +1 -1
  368. package/lib/typescript/shared/utils/logger.d.ts +6 -0
  369. package/lib/typescript/shared/utils/logger.d.ts.map +1 -1
  370. package/package.json +1 -1
  371. package/src/shared/components/boundary/components/boundary-target.tsx +30 -16
  372. package/src/shared/components/boundary/create-boundary-component.tsx +132 -164
  373. package/src/shared/components/boundary/hooks/lifecycles/use-boundary-presence.ts +41 -0
  374. package/src/shared/components/boundary/hooks/{use-initial-destination-measurement.ts → lifecycles/use-initial-destination-measurement.ts} +65 -22
  375. package/src/shared/components/boundary/hooks/{use-initial-source-measurement.ts → lifecycles/use-initial-source-measurement.ts} +10 -12
  376. package/src/shared/components/boundary/hooks/{use-refresh-boundary.ts → lifecycles/use-refresh-boundary.ts} +10 -10
  377. package/src/shared/components/boundary/hooks/use-boundary-measurement.ts +97 -0
  378. package/src/shared/components/boundary/hooks/use-measurer.ts +16 -24
  379. package/src/shared/components/boundary/index.tsx +56 -30
  380. package/src/shared/components/boundary/portal/components/boundary-local-portal-host.tsx +66 -0
  381. package/src/shared/components/boundary/portal/components/host.tsx +20 -5
  382. package/src/shared/components/boundary/portal/components/portal-boundary-host.tsx +67 -52
  383. package/src/shared/components/boundary/portal/components/portal.tsx +281 -120
  384. package/src/shared/components/boundary/portal/hooks/use-host-measurement.ts +23 -2
  385. package/src/shared/components/boundary/portal/stores/host-registry.store.ts +4 -51
  386. package/src/shared/components/boundary/portal/stores/portal-boundary-host.store.ts +59 -6
  387. package/src/shared/components/boundary/portal/teleport.ts +28 -3
  388. package/src/shared/components/boundary/portal/utils/has-local-slot.ts +16 -0
  389. package/src/shared/components/boundary/portal/utils/naming.ts +11 -1
  390. package/src/shared/components/boundary/portal/utils/offset-style.ts +37 -139
  391. package/src/shared/components/boundary/portal/utils/ownership.ts +371 -0
  392. package/src/shared/components/boundary/portal/utils/resolve-portal.ts +50 -0
  393. package/src/shared/components/boundary/portal/utils/shallow-equal.ts +25 -0
  394. package/src/shared/components/boundary/portal/utils/teleport-control.ts +12 -0
  395. package/src/shared/components/boundary/portal/utils/visible-host.ts +24 -0
  396. package/src/shared/components/boundary/providers/{boundary-owner.provider.tsx → boundary-root.provider.tsx} +33 -47
  397. package/src/shared/components/boundary/types.ts +9 -39
  398. package/src/shared/components/boundary/utils/destination-signals.ts +22 -2
  399. package/src/shared/components/boundary/utils/refresh-signals.ts +0 -41
  400. package/src/shared/components/boundary/utils/source-signals.ts +5 -17
  401. package/src/shared/components/create-transition-aware-component.tsx +3 -25
  402. package/src/shared/components/overlay/variations/float-overlay.tsx +3 -3
  403. package/src/shared/components/screen-container/layers/backdrop.tsx +4 -17
  404. package/src/shared/components/screen-container/layers/content.tsx +4 -16
  405. package/src/shared/components/screen-container/layers/maybe-masked-navigation-container.tsx +8 -18
  406. package/src/shared/components/screen-container/layers/surface-container.tsx +4 -17
  407. package/src/shared/index.ts +0 -5
  408. package/src/shared/providers/helpers/measured-bounds-writes.ts +6 -11
  409. package/src/shared/providers/screen/animation/helpers/derivations.ts +3 -0
  410. package/src/shared/providers/screen/animation/helpers/pipeline.ts +251 -68
  411. package/src/shared/providers/screen/screen-composer.tsx +3 -3
  412. package/src/shared/providers/screen/styles/helpers/compose-slot-style.ts +129 -0
  413. package/src/shared/providers/screen/styles/helpers/normalize-slots.ts +45 -8
  414. package/src/shared/providers/screen/styles/helpers/opening-phase.ts +25 -0
  415. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/index.ts +22 -12
  416. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/materialize-slot.ts +3 -1
  417. package/src/shared/providers/screen/styles/helpers/resolve-slot-styles/slot-state.ts +0 -24
  418. package/src/shared/providers/screen/styles/helpers/visibility-gate.ts +0 -12
  419. package/src/shared/providers/screen/styles/hooks/slot-resolvers.tsx +111 -0
  420. package/src/shared/providers/screen/styles/hooks/use-interpolated-style-maps.tsx +48 -38
  421. package/src/shared/providers/screen/styles/hooks/use-maybe-block-visibility.tsx +0 -18
  422. package/src/shared/providers/screen/styles/hooks/use-resolved-slot-style-map.tsx +17 -4
  423. package/src/shared/providers/screen/styles/index.tsx +13 -4
  424. package/src/shared/providers/screen/styles/slot.provider.tsx +93 -0
  425. package/src/shared/providers/screen/styles/stores/slot-references.store.ts +71 -0
  426. package/src/shared/stores/bounds/helpers/link-pairs.helpers.ts +41 -1
  427. package/src/shared/stores/bounds/internals/entries.ts +13 -5
  428. package/src/shared/stores/bounds/internals/links.ts +167 -85
  429. package/src/shared/stores/bounds/internals/resolver.ts +0 -2
  430. package/src/shared/stores/bounds/types.ts +24 -22
  431. package/src/shared/stores/system.store.ts +6 -0
  432. package/src/shared/types/animation.types.ts +8 -1
  433. package/src/shared/utils/bounds/helpers/styles/compute.ts +22 -124
  434. package/src/shared/utils/bounds/helpers/styles/local-transform.ts +86 -0
  435. package/src/shared/utils/bounds/navigation/zoom/build.ts +9 -1
  436. package/src/shared/utils/bounds/navigation/zoom/helpers.ts +96 -0
  437. package/src/shared/utils/logger.ts +12 -0
  438. package/lib/commonjs/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  439. package/lib/commonjs/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  440. package/lib/commonjs/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  441. package/lib/commonjs/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  442. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js +0 -40
  443. package/lib/commonjs/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  444. package/lib/commonjs/shared/components/boundary/providers/boundary-owner.provider.js +0 -68
  445. package/lib/commonjs/shared/components/boundary/providers/boundary-owner.provider.js.map +0 -1
  446. package/lib/commonjs/shared/providers/screen/styles/helpers/preserve-animated-props-only.js +0 -26
  447. package/lib/commonjs/shared/providers/screen/styles/helpers/preserve-animated-props-only.js.map +0 -1
  448. package/lib/commonjs/shared/providers/screen/styles/styles.provider.js.map +0 -1
  449. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js +0 -23
  450. package/lib/module/shared/components/boundary/hooks/use-boundary-presence.js.map +0 -1
  451. package/lib/module/shared/components/boundary/hooks/use-initial-destination-measurement.js.map +0 -1
  452. package/lib/module/shared/components/boundary/hooks/use-initial-source-measurement.js.map +0 -1
  453. package/lib/module/shared/components/boundary/hooks/use-refresh-boundary.js.map +0 -1
  454. package/lib/module/shared/components/boundary/portal/utils/attachment.js +0 -35
  455. package/lib/module/shared/components/boundary/portal/utils/attachment.js.map +0 -1
  456. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js +0 -60
  457. package/lib/module/shared/components/boundary/providers/boundary-owner.provider.js.map +0 -1
  458. package/lib/module/shared/providers/screen/styles/helpers/preserve-animated-props-only.js +0 -21
  459. package/lib/module/shared/providers/screen/styles/helpers/preserve-animated-props-only.js.map +0 -1
  460. package/lib/module/shared/providers/screen/styles/styles.provider.js +0 -53
  461. package/lib/module/shared/providers/screen/styles/styles.provider.js.map +0 -1
  462. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts +0 -8
  463. package/lib/typescript/shared/components/boundary/hooks/use-boundary-presence.d.ts.map +0 -1
  464. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts +0 -9
  465. package/lib/typescript/shared/components/boundary/hooks/use-initial-destination-measurement.d.ts.map +0 -1
  466. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts +0 -9
  467. package/lib/typescript/shared/components/boundary/hooks/use-initial-source-measurement.d.ts.map +0 -1
  468. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts +0 -10
  469. package/lib/typescript/shared/components/boundary/hooks/use-refresh-boundary.d.ts.map +0 -1
  470. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts +0 -21
  471. package/lib/typescript/shared/components/boundary/portal/utils/attachment.d.ts.map +0 -1
  472. package/lib/typescript/shared/components/boundary/providers/boundary-owner.provider.d.ts +0 -44
  473. package/lib/typescript/shared/components/boundary/providers/boundary-owner.provider.d.ts.map +0 -1
  474. package/lib/typescript/shared/providers/screen/styles/helpers/preserve-animated-props-only.d.ts +0 -3
  475. package/lib/typescript/shared/providers/screen/styles/helpers/preserve-animated-props-only.d.ts.map +0 -1
  476. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts +0 -14
  477. package/lib/typescript/shared/providers/screen/styles/styles.provider.d.ts.map +0 -1
  478. package/src/shared/components/boundary/hooks/use-boundary-presence.ts +0 -28
  479. package/src/shared/components/boundary/portal/utils/attachment.ts +0 -48
  480. package/src/shared/providers/screen/styles/helpers/preserve-animated-props-only.ts +0 -22
  481. package/src/shared/providers/screen/styles/styles.provider.tsx +0 -60
@@ -2,45 +2,53 @@ import {
2
2
  type ComponentType,
3
3
  forwardRef,
4
4
  memo,
5
- useCallback,
5
+ type ReactNode,
6
6
  useImperativeHandle,
7
7
  useMemo,
8
- useRef,
9
8
  } from "react";
10
9
  import type { View } from "react-native";
11
- import Animated, {
12
- runOnUI,
13
- useAnimatedRef,
14
- useAnimatedStyle,
15
- } from "react-native-reanimated";
16
- import { NO_STYLES } from "../../constants";
10
+ import Animated, { useAnimatedRef } from "react-native-reanimated";
17
11
  import { useDescriptorsStore } from "../../providers/screen/descriptors";
18
- import { useScreenStyles } from "../../providers/screen/styles";
19
- import { createPendingPairKey } from "../../stores/bounds/helpers/link-pairs.helpers";
20
- import { prepareStyleForBounds } from "../../utils/bounds/helpers/styles/styles";
21
- import { logger } from "../../utils/logger";
22
- import { useBoundaryPresence } from "./hooks/use-boundary-presence";
23
- import { useInitialDestinationMeasurement } from "./hooks/use-initial-destination-measurement";
24
- import { useInitialSourceMeasurement } from "./hooks/use-initial-source-measurement";
25
- import { useMeasurer } from "./hooks/use-measurer";
26
- import { useRefreshBoundary } from "./hooks/use-refresh-boundary";
27
- import { isTeleportAvailable } from "./portal/teleport";
28
12
  import {
29
- BoundaryOwnerProvider,
30
- useBoundaryOwner,
31
- } from "./providers/boundary-owner.provider";
32
- import type { BoundaryComponentProps, BoundaryConfigProps } from "./types";
13
+ useComposedSlotStyles,
14
+ useSlotStackingStyles,
15
+ } from "../../providers/screen/styles";
16
+ import { createBoundTag } from "../../stores/bounds/helpers/link-pairs.helpers";
17
+ import { useBoundaryMeasurement } from "./hooks/use-boundary-measurement";
18
+ import { BoundaryLocalPortalHost } from "./portal/components/boundary-local-portal-host";
19
+ import { Portal } from "./portal/components/portal";
20
+ import { resolveBoundaryPortal } from "./portal/utils/resolve-portal";
21
+ import {
22
+ BoundaryRootProvider,
23
+ useBoundaryRootState,
24
+ } from "./providers/boundary-root.provider";
25
+ import type { BoundaryComponentProps } from "./types";
33
26
 
34
27
  interface CreateBoundaryComponentOptions {
35
28
  alreadyAnimated?: boolean;
36
- shouldAutoMeasure?: boolean;
37
29
  }
38
30
 
31
+ const hasRenderableChildren = (children: ReactNode): boolean => {
32
+ if (
33
+ children === null ||
34
+ children === undefined ||
35
+ typeof children === "boolean"
36
+ ) {
37
+ return false;
38
+ }
39
+
40
+ if (Array.isArray(children)) {
41
+ return children.some(hasRenderableChildren);
42
+ }
43
+
44
+ return true;
45
+ };
46
+
39
47
  export function createBoundaryComponent<P extends object>(
40
48
  Wrapped: ComponentType<P>,
41
49
  options: CreateBoundaryComponentOptions = {},
42
50
  ) {
43
- const { alreadyAnimated = false, shouldAutoMeasure = false } = options;
51
+ const { alreadyAnimated = false } = options;
44
52
  const AnimatedComponent = alreadyAnimated
45
53
  ? Wrapped
46
54
  : Animated.createAnimatedComponent(Wrapped);
@@ -49,7 +57,6 @@ export function createBoundaryComponent<P extends object>(
49
57
  React.ComponentRef<typeof AnimatedComponent>,
50
58
  BoundaryComponentProps<P>
51
59
  >((props, forwardedRef) => {
52
- const ownerRef = useAnimatedRef<View>();
53
60
  const {
54
61
  enabled = true,
55
62
  group,
@@ -60,12 +67,20 @@ export function createBoundaryComponent<P extends object>(
60
67
  method,
61
68
  style,
62
69
  onPress,
63
- portal,
70
+ handoff,
71
+ escapeClipping,
72
+ children,
64
73
  ...rest
65
74
  } = props as any;
66
75
 
67
- const linkId = String(id);
68
- const entryTag = group ? `${group}:${linkId}` : linkId;
76
+ const boundTag = useMemo(
77
+ () => createBoundTag(String(id), group),
78
+ [id, group],
79
+ );
80
+ const portalRuntime = resolveBoundaryPortal({
81
+ handoff,
82
+ escapeClipping,
83
+ });
69
84
 
70
85
  const currentScreenKey = useDescriptorsStore(
71
86
  (s) => s.derivations.currentScreenKey,
@@ -73,157 +88,110 @@ export function createBoundaryComponent<P extends object>(
73
88
  const hasConfiguredInterpolator = useDescriptorsStore(
74
89
  (s) => s.derivations.hasConfiguredInterpolator,
75
90
  );
76
-
77
91
  const runtimeEnabled = enabled && hasConfiguredInterpolator;
78
- const boundaryConfig = useMemo<BoundaryConfigProps>(() => {
79
- return {
80
- anchor,
81
- scaleMode,
82
- target,
83
- method,
84
- };
85
- }, [anchor, scaleMode, target, method]);
86
-
87
- const ownerPreparedStyles = useMemo(
88
- () => prepareStyleForBounds(style),
89
- [style],
90
- );
91
- const { stylesMap } = useScreenStyles();
92
+ // Associated slot styles attach whenever the boundary is enabled,
93
+ // independent of whether an interpolator is configured for this transition.
94
+ const shouldAttachAssociatedStyles = enabled;
95
+ const canPortalRoot =
96
+ portalRuntime.enabled && hasRenderableChildren(children);
92
97
 
93
- const associatedStyles = useAnimatedStyle(() => {
94
- "worklet";
95
- return stylesMap.get()[entryTag]?.style ?? NO_STYLES;
96
- });
97
-
98
- const associatedStackingStyles = useAnimatedStyle(() => {
99
- "worklet";
100
- const baseStyle = stylesMap.get()[entryTag]?.style;
101
- const zIndex = baseStyle?.zIndex ?? 0;
102
- const elevation = baseStyle?.elevation ?? 0;
98
+ const associatedStyles = useComposedSlotStyles(boundTag.tag, style);
99
+ const associatedStackingStyles = useSlotStackingStyles(boundTag.tag);
100
+ const rootPlaceholderRef = useAnimatedRef<View>();
103
101
 
104
- if (zIndex === 0 && elevation === 0) {
105
- return NO_STYLES;
106
- }
107
-
108
- return { zIndex, elevation };
102
+ const {
103
+ ref,
104
+ contextValue,
105
+ measuredRef,
106
+ hasActiveTarget,
107
+ targetPreparedStyles,
108
+ } = useBoundaryRootState({
109
+ boundTag,
110
+ portalRuntime,
111
+ rootMeasurementRef: canPortalRoot ? rootPlaceholderRef : undefined,
109
112
  });
110
113
 
111
- const hasWarned = useRef(false);
112
- const adjustedPortal = isTeleportAvailable ? portal : undefined;
113
-
114
- if (!hasWarned.current && !isTeleportAvailable && portal) {
115
- logger.warn(
116
- "react-native-teleport is not installed and will fallback to default behavior.",
117
- );
118
- hasWarned.current = true;
119
- }
120
-
121
- const { contextValue, measuredRef, hasActiveTarget, targetPreparedStyles } =
122
- useBoundaryOwner({
123
- ownerRef,
124
- associatedTargetStyles: runtimeEnabled ? associatedStyles : undefined,
125
- entryTag,
126
- portal: adjustedPortal,
127
- });
128
-
129
- const preparedStyles = targetPreparedStyles ?? ownerPreparedStyles;
130
-
131
- const portalHost =
132
- typeof adjustedPortal === "object"
133
- ? (adjustedPortal.attachTo ?? "current-screen")
134
- : adjustedPortal
135
- ? "current-screen"
136
- : undefined;
137
-
138
- const measureBoundary = useMeasurer({
114
+ useBoundaryMeasurement({
115
+ boundTag,
139
116
  enabled,
140
- entryTag,
141
- linkId,
142
- group,
143
- currentScreenKey,
144
- preparedStyles,
145
- measuredAnimatedRef: measuredRef,
146
- portalHost,
147
- });
148
-
149
- // Register/unregister this boundary in the presence map so source/destination
150
- // matching can resolve across concrete screen keys.
151
- useBoundaryPresence({
152
- enabled: runtimeEnabled,
153
- entryTag,
117
+ runtimeEnabled,
154
118
  currentScreenKey,
155
- boundaryConfig,
156
- });
157
-
158
- const shouldPassivelyMeasureSource =
159
- shouldAutoMeasure && typeof onPress !== "function";
160
-
161
- useInitialSourceMeasurement({
162
- enabled: runtimeEnabled,
163
- measureBoundary,
164
- linkId,
165
- group,
166
- shouldAutoMeasure: shouldPassivelyMeasureSource,
167
- });
168
-
169
- useInitialDestinationMeasurement({
170
- linkId,
171
- enabled: runtimeEnabled,
172
- measureBoundary,
173
- });
174
-
175
- useRefreshBoundary({
176
- enabled: runtimeEnabled,
177
- linkId,
178
- group,
179
- measureBoundary,
119
+ measuredRef,
120
+ style,
121
+ targetPreparedStyles,
122
+ handoff: portalRuntime.handoff,
123
+ escapeClipping: portalRuntime.escapeClipping,
124
+ config: { anchor, scaleMode, target, method },
180
125
  });
181
126
 
182
- const handlePress = useCallback(
183
- (...args: unknown[]) => {
184
- // Press path has priority: capture source before user onPress/navigation.
185
- runOnUI(measureBoundary)({
186
- type: "source",
187
- pairKey: createPendingPairKey(currentScreenKey),
188
- });
189
-
190
- if (typeof onPress === "function") {
191
- onPress(...args);
192
- }
193
- },
194
- [measureBoundary, onPress, currentScreenKey],
127
+ useImperativeHandle(forwardedRef, () => ref.current as any, [ref]);
128
+
129
+ const shouldPortalRoot = canPortalRoot && !hasActiveTarget;
130
+ // A nested active target takes the full associated style, so the root keeps
131
+ // only its stacking context. Without a nested target, a portal'd root is the
132
+ // target, so its associated style is applied through the portal host instead
133
+ // of inline on the teleported element.
134
+ // Host-only handoff receivers still need the associated style: their local
135
+ // portal host is absolute-filled inside this root, so the root is the visual
136
+ // frame that animates the received payload.
137
+ const attachedStyle = shouldAttachAssociatedStyles
138
+ ? hasActiveTarget
139
+ ? associatedStackingStyles
140
+ : shouldPortalRoot
141
+ ? undefined
142
+ : associatedStyles
143
+ : undefined;
144
+ const pressProps = typeof onPress === "function" ? { onPress } : undefined;
145
+
146
+ const localPortalHost = (
147
+ <BoundaryLocalPortalHost
148
+ boundaryId={boundTag.tag}
149
+ enabled={enabled && portalRuntime.handoff}
150
+ screenKey={currentScreenKey}
151
+ />
152
+ );
153
+ const canInjectLocalPortalHost = typeof children !== "function";
154
+
155
+ const renderBoundaryRoot = (extraChildren?: ReactNode) => (
156
+ <AnimatedComponent
157
+ {...rest}
158
+ {...pressProps}
159
+ ref={ref}
160
+ style={[style, attachedStyle]}
161
+ collapsable={false}
162
+ >
163
+ {children}
164
+ {canInjectLocalPortalHost ? extraChildren : null}
165
+ </AnimatedComponent>
166
+ );
167
+ const boundaryRoot = renderBoundaryRoot(
168
+ shouldPortalRoot ? undefined : localPortalHost,
195
169
  );
196
-
197
- const resolvedOnPress =
198
- typeof onPress === "function" ? handlePress : undefined;
199
-
200
- useImperativeHandle(forwardedRef, () => ownerRef.current as any, [
201
- ownerRef,
202
- ]);
203
170
 
204
171
  return (
205
- <BoundaryOwnerProvider value={contextValue}>
206
- <AnimatedComponent
207
- {...rest}
208
- ref={ownerRef}
209
- style={[
210
- style,
211
- runtimeEnabled
212
- ? hasActiveTarget
213
- ? associatedStackingStyles
214
- : associatedStyles
215
- : undefined,
216
- ]}
217
- onPress={resolvedOnPress}
218
- collapsable={false}
219
- />
220
- </BoundaryOwnerProvider>
172
+ <BoundaryRootProvider value={contextValue}>
173
+ {shouldPortalRoot ? (
174
+ <Portal
175
+ id={boundTag.tag}
176
+ handoff={portalRuntime.handoff}
177
+ escapeClipping={portalRuntime.escapeClipping}
178
+ placeholderRef={rootPlaceholderRef}
179
+ placeholderChildren={
180
+ portalRuntime.handoff ? localPortalHost : undefined
181
+ }
182
+ >
183
+ {boundaryRoot}
184
+ </Portal>
185
+ ) : (
186
+ boundaryRoot
187
+ )}
188
+ </BoundaryRootProvider>
221
189
  );
222
190
  });
223
191
 
224
- return memo(
225
- Animated.createAnimatedComponent(Inner),
226
- ) as unknown as React.MemoExoticComponent<
192
+ // The HOC's runtime identity (animated + memoized forwardRef) is not
193
+ // expressible against the public boundary props, so assert it here.
194
+ return memo(Inner) as unknown as React.MemoExoticComponent<
227
195
  React.ForwardRefExoticComponent<
228
196
  BoundaryComponentProps<P> &
229
197
  React.RefAttributes<React.ComponentRef<typeof Wrapped>>
@@ -0,0 +1,41 @@
1
+ import { useLayoutEffect } from "react";
2
+ import { runOnUI } from "react-native-reanimated";
3
+ import {
4
+ removeEntry,
5
+ setEntry,
6
+ } from "../../../../stores/bounds/internals/entries";
7
+ import type { BoundTag } from "../../../../stores/bounds/types";
8
+ import type { BoundaryConfigProps } from "../../types";
9
+
10
+ export const useBoundaryPresence = (params: {
11
+ enabled: boolean;
12
+ boundTag: BoundTag;
13
+ currentScreenKey: string;
14
+ boundaryConfig?: BoundaryConfigProps;
15
+ handoff?: boolean;
16
+ escapeClipping?: boolean;
17
+ }) => {
18
+ const {
19
+ enabled,
20
+ boundTag,
21
+ currentScreenKey,
22
+ boundaryConfig,
23
+ handoff,
24
+ escapeClipping,
25
+ } = params;
26
+ const { tag } = boundTag;
27
+
28
+ useLayoutEffect(() => {
29
+ if (!enabled) return;
30
+
31
+ runOnUI(setEntry)(tag, currentScreenKey, {
32
+ boundaryConfig,
33
+ handoff: handoff ? true : null,
34
+ escapeClipping: escapeClipping ? true : null,
35
+ });
36
+
37
+ return () => {
38
+ runOnUI(removeEntry)(tag, currentScreenKey);
39
+ };
40
+ }, [enabled, tag, currentScreenKey, boundaryConfig, handoff, escapeClipping]);
41
+ };
@@ -5,19 +5,29 @@ import {
5
5
  withDelay,
6
6
  withTiming,
7
7
  } from "react-native-reanimated";
8
- import { useDescriptorsStore } from "../../../providers/screen/descriptors";
9
- import { AnimationStore } from "../../../stores/animation.store";
10
- import { getDestination } from "../../../stores/bounds/internals/links";
11
- import { pairs } from "../../../stores/bounds/internals/state";
8
+ import { useDescriptorsStore } from "../../../../providers/screen/descriptors";
9
+ import { AnimationStore } from "../../../../stores/animation.store";
10
+ import { getSourceScreenKeyFromPairKey } from "../../../../stores/bounds/helpers/link-pairs.helpers";
11
+ import { getEntry } from "../../../../stores/bounds/internals/entries";
12
+ import {
13
+ getDestination,
14
+ getLink,
15
+ } from "../../../../stores/bounds/internals/links";
16
+ import { pairs } from "../../../../stores/bounds/internals/state";
17
+ import type { BoundTag } from "../../../../stores/bounds/types";
12
18
  import {
13
19
  LifecycleTransitionRequestKind,
14
20
  SystemStore,
15
- } from "../../../stores/system.store";
16
- import { logger } from "../../../utils/logger";
17
- import type { MeasureBoundary } from "../types";
18
- import { getInitialDestinationMeasurePairKey } from "../utils/destination-signals";
21
+ } from "../../../../stores/system.store";
22
+ import { logger } from "../../../../utils/logger";
23
+ import {
24
+ hasHandoffEscapeContinuation,
25
+ usesEscapeClippingHost,
26
+ } from "../../portal/utils/ownership";
27
+ import type { MeasureBoundary } from "../../types";
28
+ import { getInitialDestinationMeasurePairKey } from "../../utils/destination-signals";
19
29
 
20
- const VIEWPORT_RETRY_DELAY_MS = 16;
30
+ const VIEWPORT_RETRY_DELAY_MS = 100;
21
31
  /**
22
32
  * A destination that keeps failing its measurement guards must not hold the
23
33
  * transition gate forever — after this budget the block is released with a
@@ -26,16 +36,17 @@ const VIEWPORT_RETRY_DELAY_MS = 16;
26
36
  const MAX_VIEWPORT_RETRIES = 20;
27
37
 
28
38
  interface UseInitialDestinationMeasurementParams {
29
- linkId: string;
39
+ boundTag: BoundTag;
30
40
  enabled: boolean;
31
41
  measureBoundary: MeasureBoundary;
32
42
  }
33
43
 
34
44
  export const useInitialDestinationMeasurement = ({
35
- linkId,
45
+ boundTag,
36
46
  enabled,
37
47
  measureBoundary,
38
48
  }: UseInitialDestinationMeasurementParams) => {
49
+ const { tag, linkKey, group } = boundTag;
39
50
  const currentScreenKey = useDescriptorsStore(
40
51
  (s) => s.derivations.currentScreenKey,
41
52
  );
@@ -51,9 +62,12 @@ export const useInitialDestinationMeasurement = ({
51
62
  currentScreenKey,
52
63
  "transitionProgress",
53
64
  );
54
- const system = SystemStore.getBag(currentScreenKey);
55
- const { pendingLifecycleRequestKind } = system;
56
- const { blockLifecycleStart, unblockLifecycleStart } = system.actions;
65
+
66
+ const {
67
+ pendingLifecycleRequestKind,
68
+ actions: { blockLifecycleStart, unblockLifecycleStart },
69
+ } = SystemStore.getBag(currentScreenKey);
70
+
57
71
  const isBlockingLifecycleStart = useSharedValue(0);
58
72
  const retryToken = useSharedValue(0);
59
73
  const viewportRetries = useSharedValue(0);
@@ -90,7 +104,8 @@ export const useInitialDestinationMeasurement = ({
90
104
  enabled: destinationEnabled,
91
105
  destinationPairKey,
92
106
  ancestorDestinationPairKey,
93
- linkId,
107
+ linkId: linkKey,
108
+ group,
94
109
  linkState:
95
110
  destinationEnabled &&
96
111
  (destinationPairKey || ancestorDestinationPairKey)
@@ -100,12 +115,19 @@ export const useInitialDestinationMeasurement = ({
100
115
 
101
116
  return [measurePairKey, retryTick] as const;
102
117
  },
103
- ([measurePairKey]) => {
118
+ ([measurePairKey, retryTick], previous) => {
104
119
  "worklet";
105
120
  if (!measurePairKey) {
106
- releaseLifecycleStartBlock();
107
- viewportRetries.set(0);
108
- hasGivenUp.set(0);
121
+ return;
122
+ }
123
+
124
+ const previousMeasurePairKey = previous?.[0];
125
+ const previousRetryTick = previous?.[1];
126
+ const shouldAttemptMeasure =
127
+ measurePairKey !== previousMeasurePairKey ||
128
+ retryTick !== previousRetryTick;
129
+
130
+ if (!shouldAttemptMeasure) {
109
131
  return;
110
132
  }
111
133
 
@@ -124,9 +146,30 @@ export const useInitialDestinationMeasurement = ({
124
146
  });
125
147
 
126
148
  const destinationAttached =
127
- getDestination(measurePairKey, linkId) !== null;
149
+ getDestination(measurePairKey, linkKey) !== null;
128
150
 
129
151
  if (destinationAttached) {
152
+ const linkState = pairs.get();
153
+ const link = getLink(measurePairKey, linkKey);
154
+ const sourceScreenKey = getSourceScreenKeyFromPairKey(measurePairKey);
155
+ const sourceEntry = getEntry(tag, sourceScreenKey);
156
+ const sourceEntryUsesDestinationEscapeHost =
157
+ sourceEntry?.handoff === true && sourceEntry.escapeClipping === true;
158
+ const shouldWaitForEscapeClippingHost =
159
+ usesEscapeClippingHost(link) ||
160
+ sourceEntryUsesDestinationEscapeHost ||
161
+ hasHandoffEscapeContinuation({
162
+ linkKey,
163
+ linkState,
164
+ sourceScreenKey,
165
+ });
166
+
167
+ if (shouldWaitForEscapeClippingHost) {
168
+ // Screen-level escape has a second readiness phase after destination
169
+ // measurement: the host must commit before the transition starts, or
170
+ // the payload can disappear for a frame.
171
+ return;
172
+ }
130
173
  releaseLifecycleStartBlock();
131
174
  viewportRetries.set(0);
132
175
  return;
@@ -136,13 +179,13 @@ export const useInitialDestinationMeasurement = ({
136
179
  hasGivenUp.set(1);
137
180
  releaseLifecycleStartBlock();
138
181
  logger.warn(
139
- `Destination boundary "${linkId}" never produced a valid measurement after ${MAX_VIEWPORT_RETRIES} attempts; releasing the transition gate without it. The boundary is likely off-viewport (e.g. an inactive group member on a paged screen) or unmounted.`,
182
+ `Destination boundary "${linkKey}" never produced a valid measurement after ${MAX_VIEWPORT_RETRIES} attempts; releasing the transition gate without it. The boundary is likely off-viewport (e.g. an inactive group member on a paged screen) or unmounted.`,
140
183
  );
141
184
  return;
142
185
  }
143
186
 
144
187
  // Destination did not attach (malformed off-screen measurement); retry
145
- // on the next tick while the lifecycle stays blocked.
188
+ // after the retry token advances while the lifecycle stays blocked.
146
189
  viewportRetries.set(viewportRetries.get() + 1);
147
190
  cancelAnimation(retryToken);
148
191
  retryToken.set(
@@ -1,17 +1,16 @@
1
1
  import { useAnimatedReaction, useSharedValue } from "react-native-reanimated";
2
- import { useDescriptorsStore } from "../../../providers/screen/descriptors";
3
- import { pairs } from "../../../stores/bounds/internals/state";
4
- import type { MeasureBoundary } from "../types";
5
- import { getInitialSourceCaptureSignal } from "../utils/source-signals";
2
+ import { useDescriptorsStore } from "../../../../providers/screen/descriptors";
3
+ import { pairs } from "../../../../stores/bounds/internals/state";
4
+ import type { BoundTag } from "../../../../stores/bounds/types";
5
+ import type { MeasureBoundary } from "../../types";
6
+ import { getInitialSourceCaptureSignal } from "../../utils/source-signals";
6
7
 
7
8
  export const useInitialSourceMeasurement = (params: {
8
9
  enabled: boolean;
9
10
  measureBoundary: MeasureBoundary;
10
- linkId: string;
11
- group?: string;
12
- shouldAutoMeasure: boolean;
11
+ boundTag: BoundTag;
13
12
  }) => {
14
- const { enabled, measureBoundary, linkId, group, shouldAutoMeasure } = params;
13
+ const { enabled, measureBoundary, boundTag } = params;
15
14
  const sourcePairKey = useDescriptorsStore((s) => s.derivations.sourcePairKey);
16
15
  const lastSourceCaptureSignal = useSharedValue<string | null>(null);
17
16
 
@@ -21,10 +20,9 @@ export const useInitialSourceMeasurement = (params: {
21
20
  return getInitialSourceCaptureSignal({
22
21
  enabled,
23
22
  sourcePairKey,
24
- linkId,
25
- group,
26
- shouldAutoMeasure,
27
- linkState: shouldAutoMeasure && sourcePairKey ? pairs.get() : undefined,
23
+ linkId: boundTag.linkKey,
24
+ group: boundTag.group,
25
+ linkState: sourcePairKey ? pairs.get() : undefined,
28
26
  });
29
27
  },
30
28
  (captureSignal) => {
@@ -1,23 +1,23 @@
1
1
  import { useAnimatedReaction } from "react-native-reanimated";
2
- import { useDescriptorsStore } from "../../../providers/screen/descriptors";
3
- import { AnimationStore } from "../../../stores/animation.store";
4
- import { pairs } from "../../../stores/bounds/internals/state";
5
- import type { MeasureBoundary } from "../types";
6
- import { getRefreshBoundarySignal } from "../utils/refresh-signals";
2
+ import { useDescriptorsStore } from "../../../../providers/screen/descriptors";
3
+ import { AnimationStore } from "../../../../stores/animation.store";
4
+ import { pairs } from "../../../../stores/bounds/internals/state";
5
+ import type { BoundTag } from "../../../../stores/bounds/types";
6
+ import type { MeasureBoundary } from "../../types";
7
+ import { getRefreshBoundarySignal } from "../../utils/refresh-signals";
7
8
 
8
9
  interface UseRefreshBoundaryParams {
9
10
  enabled: boolean;
10
- linkId: string;
11
- group?: string;
11
+ boundTag: BoundTag;
12
12
  measureBoundary: MeasureBoundary;
13
13
  }
14
14
 
15
15
  export const useRefreshBoundary = ({
16
16
  enabled,
17
- linkId,
18
- group,
17
+ boundTag,
19
18
  measureBoundary,
20
19
  }: UseRefreshBoundaryParams) => {
20
+ const { linkKey, group } = boundTag;
21
21
  const currentScreenKey = useDescriptorsStore(
22
22
  (s) => s.derivations.currentScreenKey,
23
23
  );
@@ -57,7 +57,7 @@ export const useRefreshBoundary = ({
57
57
  destinationPairKey,
58
58
  ancestorDestinationPairKey,
59
59
  nextScreenKey,
60
- linkId,
60
+ linkId: linkKey,
61
61
  group,
62
62
  shouldRefresh: !!refreshWillAnimate.get(),
63
63
  closing: !!refreshClosing.get(),