expo-router 7.0.0-canary-20251120-e46b3cc → 7.0.0-canary-20251205-756eb7a

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 (227) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/fork/getStateFromPath-forks.d.ts +5 -10
  3. package/build/fork/getStateFromPath-forks.d.ts.map +1 -1
  4. package/build/fork/getStateFromPath-forks.js +14 -13
  5. package/build/fork/getStateFromPath-forks.js.map +1 -1
  6. package/build/fork/getStateFromPath.js +3 -3
  7. package/build/fork/getStateFromPath.js.map +1 -1
  8. package/build/fork/native-stack/createNativeStackNavigator.d.ts.map +1 -1
  9. package/build/fork/native-stack/createNativeStackNavigator.js +25 -7
  10. package/build/fork/native-stack/createNativeStackNavigator.js.map +1 -1
  11. package/build/fork/native-stack/descriptors-context.d.ts +8 -0
  12. package/build/fork/native-stack/descriptors-context.d.ts.map +1 -0
  13. package/build/fork/native-stack/descriptors-context.js +6 -0
  14. package/build/fork/native-stack/descriptors-context.js.map +1 -0
  15. package/build/internal/utils.d.ts +1 -0
  16. package/build/internal/utils.d.ts.map +1 -1
  17. package/build/internal/utils.js +3 -1
  18. package/build/internal/utils.js.map +1 -1
  19. package/build/layouts/StackClient.d.ts.map +1 -1
  20. package/build/layouts/StackClient.js +39 -5
  21. package/build/layouts/StackClient.js.map +1 -1
  22. package/build/layouts/stack-utils/StackHeaderComponent.js +6 -6
  23. package/build/layouts/stack-utils/StackHeaderComponent.js.map +1 -1
  24. package/build/layouts/stack-utils/StackHeaderTitle.d.ts.map +1 -1
  25. package/build/layouts/stack-utils/StackHeaderTitle.js +3 -8
  26. package/build/layouts/stack-utils/StackHeaderTitle.js.map +1 -1
  27. package/build/layouts/stack-utils/index.d.ts +0 -1
  28. package/build/layouts/stack-utils/index.d.ts.map +1 -1
  29. package/build/layouts/stack-utils/index.js +1 -3
  30. package/build/layouts/stack-utils/index.js.map +1 -1
  31. package/build/link/ExpoLink.d.ts.map +1 -1
  32. package/build/link/ExpoLink.js +12 -4
  33. package/build/link/ExpoLink.js.map +1 -1
  34. package/build/link/Link.d.ts +2 -0
  35. package/build/link/Link.d.ts.map +1 -1
  36. package/build/link/Link.js +2 -0
  37. package/build/link/Link.js.map +1 -1
  38. package/build/link/LinkWithPreview.d.ts +6 -1
  39. package/build/link/LinkWithPreview.d.ts.map +1 -1
  40. package/build/link/LinkWithPreview.js +10 -11
  41. package/build/link/LinkWithPreview.js.map +1 -1
  42. package/build/link/elements.d.ts +8 -0
  43. package/build/link/elements.d.ts.map +1 -1
  44. package/build/link/elements.js +7 -2
  45. package/build/link/elements.js.map +1 -1
  46. package/build/link/preview/native.d.ts +17 -0
  47. package/build/link/preview/native.d.ts.map +1 -1
  48. package/build/link/preview/native.js +22 -0
  49. package/build/link/preview/native.js.map +1 -1
  50. package/build/link/zoom/ZoomTransitionEnabler.d.ts +5 -0
  51. package/build/link/zoom/ZoomTransitionEnabler.d.ts.map +1 -0
  52. package/build/link/zoom/ZoomTransitionEnabler.ios.d.ts +5 -0
  53. package/build/link/zoom/ZoomTransitionEnabler.ios.d.ts.map +1 -0
  54. package/build/link/zoom/ZoomTransitionEnabler.ios.js +44 -0
  55. package/build/link/zoom/ZoomTransitionEnabler.ios.js.map +1 -0
  56. package/build/link/zoom/ZoomTransitionEnabler.js +13 -0
  57. package/build/link/zoom/ZoomTransitionEnabler.js.map +1 -0
  58. package/build/link/zoom/ZoomTransitionEnabler.types.d.ts +4 -0
  59. package/build/link/zoom/ZoomTransitionEnabler.types.d.ts.map +1 -0
  60. package/build/link/zoom/ZoomTransitionEnabler.types.js +3 -0
  61. package/build/link/zoom/ZoomTransitionEnabler.types.js.map +1 -0
  62. package/build/link/zoom/link-apple-zoom.d.ts +23 -0
  63. package/build/link/zoom/link-apple-zoom.d.ts.map +1 -0
  64. package/build/link/zoom/link-apple-zoom.js +40 -0
  65. package/build/link/zoom/link-apple-zoom.js.map +1 -0
  66. package/build/link/zoom/useZoomTransitionPrimitives.d.ts +6 -0
  67. package/build/link/zoom/useZoomTransitionPrimitives.d.ts.map +1 -0
  68. package/build/link/zoom/useZoomTransitionPrimitives.ios.d.ts +11 -0
  69. package/build/link/zoom/useZoomTransitionPrimitives.ios.d.ts.map +1 -0
  70. package/build/link/zoom/useZoomTransitionPrimitives.ios.js +66 -0
  71. package/build/link/zoom/useZoomTransitionPrimitives.ios.js.map +1 -0
  72. package/build/link/zoom/useZoomTransitionPrimitives.js +9 -0
  73. package/build/link/zoom/useZoomTransitionPrimitives.js.map +1 -0
  74. package/build/link/zoom/zoom-transition-context.d.ts +7 -0
  75. package/build/link/zoom/zoom-transition-context.d.ts.map +1 -0
  76. package/build/link/zoom/zoom-transition-context.js +6 -0
  77. package/build/link/zoom/zoom-transition-context.js.map +1 -0
  78. package/build/native-tabs/NativeBottomTabsNavigator.d.ts +3 -15
  79. package/build/native-tabs/NativeBottomTabsNavigator.d.ts.map +1 -1
  80. package/build/native-tabs/NativeBottomTabsNavigator.js +17 -2
  81. package/build/native-tabs/NativeBottomTabsNavigator.js.map +1 -1
  82. package/build/native-tabs/NativeBottomTabsRouter.d.ts.map +1 -1
  83. package/build/native-tabs/NativeBottomTabsRouter.js +12 -1
  84. package/build/native-tabs/NativeBottomTabsRouter.js.map +1 -1
  85. package/build/native-tabs/NativeTabTrigger.d.ts +2 -2
  86. package/build/native-tabs/NativeTabTrigger.d.ts.map +1 -1
  87. package/build/native-tabs/NativeTabTrigger.js +24 -14
  88. package/build/native-tabs/NativeTabTrigger.js.map +1 -1
  89. package/build/native-tabs/NativeTabs.d.ts +6 -3
  90. package/build/native-tabs/NativeTabs.d.ts.map +1 -1
  91. package/build/native-tabs/NativeTabs.js +7 -2
  92. package/build/native-tabs/NativeTabs.js.map +1 -1
  93. package/build/native-tabs/NativeTabsView.d.ts.map +1 -1
  94. package/build/native-tabs/NativeTabsView.js +26 -3
  95. package/build/native-tabs/NativeTabsView.js.map +1 -1
  96. package/build/native-tabs/appearance.d.ts.map +1 -1
  97. package/build/native-tabs/appearance.js +2 -4
  98. package/build/native-tabs/appearance.js.map +1 -1
  99. package/build/native-tabs/common/elements.d.ts +36 -3
  100. package/build/native-tabs/common/elements.d.ts.map +1 -1
  101. package/build/native-tabs/common/elements.js +30 -1
  102. package/build/native-tabs/common/elements.js.map +1 -1
  103. package/build/native-tabs/hooks.d.ts +45 -0
  104. package/build/native-tabs/hooks.d.ts.map +1 -0
  105. package/build/native-tabs/hooks.js +57 -0
  106. package/build/native-tabs/hooks.js.map +1 -0
  107. package/build/native-tabs/index.d.ts +1 -1
  108. package/build/native-tabs/index.d.ts.map +1 -1
  109. package/build/native-tabs/index.js.map +1 -1
  110. package/build/native-tabs/types.d.ts +42 -55
  111. package/build/native-tabs/types.d.ts.map +1 -1
  112. package/build/native-tabs/types.js.map +1 -1
  113. package/build/native-tabs/utils/bottomAccessory.d.ts +9 -0
  114. package/build/native-tabs/utils/bottomAccessory.d.ts.map +1 -0
  115. package/build/native-tabs/utils/bottomAccessory.js +17 -0
  116. package/build/native-tabs/utils/bottomAccessory.js.map +1 -0
  117. package/build/native-tabs/utils/icon.d.ts +3 -0
  118. package/build/native-tabs/utils/icon.d.ts.map +1 -1
  119. package/build/native-tabs/utils/icon.js +16 -0
  120. package/build/native-tabs/utils/icon.js.map +1 -1
  121. package/build/native-tabs/utils/index.d.ts +0 -1
  122. package/build/native-tabs/utils/index.d.ts.map +1 -1
  123. package/build/native-tabs/utils/index.js +1 -4
  124. package/build/native-tabs/utils/index.js.map +1 -1
  125. package/build/native-tabs/utils/label.d.ts.map +1 -1
  126. package/build/native-tabs/utils/label.js +6 -2
  127. package/build/native-tabs/utils/label.js.map +1 -1
  128. package/build/native-tabs/utils/materialIconConverter.android.d.ts +4 -0
  129. package/build/native-tabs/utils/materialIconConverter.android.d.ts.map +1 -0
  130. package/build/native-tabs/utils/materialIconConverter.android.js +10 -0
  131. package/build/native-tabs/utils/materialIconConverter.android.js.map +1 -0
  132. package/build/native-tabs/utils/materialIconConverter.d.ts +4 -0
  133. package/build/native-tabs/utils/materialIconConverter.d.ts.map +1 -0
  134. package/build/native-tabs/utils/materialIconConverter.js +8 -0
  135. package/build/native-tabs/utils/materialIconConverter.js.map +1 -0
  136. package/build/navigationParams.d.ts +5 -1
  137. package/build/navigationParams.d.ts.map +1 -1
  138. package/build/navigationParams.js +32 -8
  139. package/build/navigationParams.js.map +1 -1
  140. package/build/toolbar/elements.d.ts +24 -0
  141. package/build/toolbar/elements.d.ts.map +1 -0
  142. package/build/toolbar/elements.js +36 -0
  143. package/build/toolbar/elements.js.map +1 -0
  144. package/build/toolbar/index.d.ts +9 -0
  145. package/build/toolbar/index.d.ts.map +1 -0
  146. package/build/toolbar/index.js +12 -0
  147. package/build/toolbar/index.js.map +1 -0
  148. package/build/toolbar/native.d.ts +4 -0
  149. package/build/toolbar/native.d.ts.map +1 -0
  150. package/build/toolbar/native.ios.d.ts +4 -0
  151. package/build/toolbar/native.ios.d.ts.map +1 -0
  152. package/build/toolbar/native.ios.js +21 -0
  153. package/build/toolbar/native.ios.js.map +1 -0
  154. package/build/toolbar/native.js +11 -0
  155. package/build/toolbar/native.js.map +1 -0
  156. package/build/toolbar/native.types.d.ts +30 -0
  157. package/build/toolbar/native.types.d.ts.map +1 -0
  158. package/build/toolbar/native.types.js +3 -0
  159. package/build/toolbar/native.types.js.map +1 -0
  160. package/build/useScreens.d.ts.map +1 -1
  161. package/build/useScreens.js +14 -0
  162. package/build/useScreens.js.map +1 -1
  163. package/build/utils/children.d.ts +7 -0
  164. package/build/utils/children.d.ts.map +1 -0
  165. package/build/utils/children.js +24 -0
  166. package/build/utils/children.js.map +1 -0
  167. package/build/utils/style.d.ts +3 -0
  168. package/build/utils/style.d.ts.map +1 -0
  169. package/build/utils/style.js +10 -0
  170. package/build/utils/style.js.map +1 -0
  171. package/build/views/Sitemap.js +3 -2
  172. package/build/views/Sitemap.js.map +1 -1
  173. package/expo-module.config.json +2 -2
  174. package/ios/LinkPreview/LinkPreviewNativeActionView.swift +1 -0
  175. package/ios/LinkPreview/LinkPreviewNativeModule.swift +49 -1
  176. package/ios/LinkPreview/LinkPreviewNativeNavigation.swift +132 -70
  177. package/ios/LinkPreview/LinkPreviewNativeView.swift +34 -17
  178. package/ios/LinkPreview/LinkZoomTransition.swift +227 -0
  179. package/ios/Toolbar/RouterToolbarHostView.swift +140 -0
  180. package/ios/Toolbar/RouterToolbarItemView.swift +171 -0
  181. package/ios/Toolbar/RouterToolbarModule.swift +102 -0
  182. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.module → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.module} +7 -7
  183. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.module.md5 +1 -0
  184. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.module.sha1 +1 -0
  185. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.module.sha256 +1 -0
  186. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.module.sha512 +1 -0
  187. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.pom → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.pom} +1 -1
  188. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.pom.md5 +1 -0
  189. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.pom.sha1 +1 -0
  190. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.pom.sha256 +1 -0
  191. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.pom.sha512 +1 -0
  192. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  193. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  194. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  195. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  196. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  197. package/package.json +17 -14
  198. package/unstable-toolbar.d.ts +1 -0
  199. package/unstable-toolbar.js +1 -0
  200. package/build/layouts/stack-utils/utils.d.ts +0 -3
  201. package/build/layouts/stack-utils/utils.d.ts.map +0 -1
  202. package/build/layouts/stack-utils/utils.js +0 -8
  203. package/build/layouts/stack-utils/utils.js.map +0 -1
  204. package/build/native-tabs/utils/children.d.ts +0 -5
  205. package/build/native-tabs/utils/children.d.ts.map +0 -1
  206. package/build/native-tabs/utils/children.js +0 -15
  207. package/build/native-tabs/utils/children.js.map +0 -1
  208. package/ios/LinkPreview/LinkPreviewNativeNavigation.h +0 -50
  209. package/ios/LinkPreview/LinkPreviewNativeNavigation.mm +0 -164
  210. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.module.md5 +0 -1
  211. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.module.sha1 +0 -1
  212. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.module.sha256 +0 -1
  213. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.module.sha512 +0 -1
  214. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.pom.md5 +0 -1
  215. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.pom.sha1 +0 -1
  216. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.pom.sha256 +0 -1
  217. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.pom.sha512 +0 -1
  218. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc-sources.jar → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a-sources.jar} +0 -0
  219. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc-sources.jar.md5 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a-sources.jar.md5} +0 -0
  220. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc-sources.jar.sha1 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a-sources.jar.sha1} +0 -0
  221. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc-sources.jar.sha256 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a-sources.jar.sha256} +0 -0
  222. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc-sources.jar.sha512 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a-sources.jar.sha512} +0 -0
  223. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.aar → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.aar} +0 -0
  224. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.aar.md5 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.aar.md5} +0 -0
  225. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.aar.sha1 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.aar.sha1} +0 -0
  226. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.aar.sha256 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.aar.sha256} +0 -0
  227. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251120-e46b3cc/expo.modules.router-7.0.0-canary-20251120-e46b3cc.aar.sha512 → 7.0.0-canary-20251205-756eb7a/expo.modules.router-7.0.0-canary-20251205-756eb7a.aar.sha512} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Sitemap.js","sourceRoot":"","sources":["../../src/views/Sitemap.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright © 2024 650 Industries.\n'use client';\n\nimport { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport Constants from 'expo-constants';\nimport React from 'react';\nimport {\n Image,\n StyleSheet,\n Text,\n View,\n ScrollView,\n Platform,\n StatusBar,\n ViewStyle,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\n\nimport { NoSSR } from './NoSSR';\nimport { Pressable, PressableProps } from './Pressable';\nimport { useSitemap, SitemapType } from './useSitemap';\nimport { Link } from '../link/Link';\nimport { canOverrideStatusBarBehavior } from '../utils/statusbar';\n\nconst INDENT = 20;\n\nexport function getNavOptions(): NativeStackNavigationOptions {\n return {\n title: 'sitemap',\n presentation: 'modal',\n headerLargeTitle: false,\n headerTitleStyle: {\n color: 'white',\n },\n headerShown: true,\n headerTintColor: 'white',\n headerLargeTitleStyle: {\n color: 'white',\n },\n headerStyle: {\n backgroundColor: 'black',\n // @ts-expect-error: mistyped\n borderBottomColor: '#323232',\n },\n header: () => {\n const WrapperElement = Platform.OS === 'android' ? SafeAreaView : View;\n return (\n <WrapperElement style={styles.header}>\n <View style={styles.headerContent}>\n <View style={styles.headerIcon}>\n <SitemapIcon />\n </View>\n <Text role=\"heading\" aria-level={1} style={styles.title}>\n Sitemap\n </Text>\n </View>\n </WrapperElement>\n );\n },\n };\n}\n\nexport function Sitemap() {\n // Following the https://github.com/expo/expo/blob/ubax/router/move-404-and-sitemap-to-root/packages/expo-router/src/getRoutesSSR.ts#L38\n // we need to ensure that the Sitemap component is not rendered on the server.\n return (\n <NoSSR>\n <SitemapInner />\n </NoSSR>\n );\n}\n\nfunction SitemapInner() {\n const sitemap = useSitemap();\n const children = React.useMemo(\n () => sitemap?.children.filter(({ isInternal }) => !isInternal) ?? [],\n [sitemap]\n );\n return (\n <View style={styles.container} testID=\"expo-router-sitemap\">\n {canOverrideStatusBarBehavior && <StatusBar barStyle=\"light-content\" />}\n <ScrollView\n contentContainerStyle={styles.scroll}\n automaticallyAdjustContentInsets\n contentInsetAdjustmentBehavior=\"automatic\">\n {children.map((child) => (\n <View testID=\"sitemap-item-container\" key={child.contextKey} style={styles.itemContainer}>\n <SitemapItem node={child} />\n </View>\n ))}\n <SystemInfo />\n </ScrollView>\n </View>\n );\n}\n\ninterface SitemapItemProps {\n node: SitemapType;\n level?: number;\n info?: string;\n}\n\nfunction SitemapItem({ node, level = 0 }: SitemapItemProps) {\n const isLayout = React.useMemo(\n () => node.children.length > 0 || node.contextKey.match(/_layout\\.[jt]sx?$/),\n [node]\n );\n const info = node.isInitial ? 'Initial' : node.isGenerated ? 'Generated' : '';\n\n if (isLayout) {\n return <LayoutSitemapItem node={node} level={level} info={info} />;\n }\n return <StandardSitemapItem node={node} level={level} info={info} />;\n}\n\nfunction LayoutSitemapItem({ node, level, info }: Required<SitemapItemProps>) {\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n\n return (\n <View style={styles.itemInnerContainer}>\n <SitemapItemPressable\n style={{ opacity: 0.4 }}\n leftIcon={<PkgIcon />}\n rightIcon={<ArrowIcon rotation={isCollapsed ? 0 : 180} />}\n filename={node.filename}\n level={level}\n info={info}\n onPress={() => setIsCollapsed((prev) => !prev)}\n />\n {!isCollapsed &&\n node.children.map((child) => (\n <SitemapItem\n key={child.contextKey}\n node={child}\n level={level + (node.isGenerated ? 0 : 1)}\n />\n ))}\n </View>\n );\n}\n\nfunction StandardSitemapItem({ node, info, level }: Required<SitemapItemProps>) {\n return (\n <Link accessibilityLabel={node.contextKey} href={node.href} asChild replace>\n <SitemapItemPressable\n leftIcon={<FileIcon />}\n rightIcon={<ForwardIcon />}\n filename={node.filename}\n level={level}\n info={info}\n />\n </Link>\n );\n}\n\nfunction SitemapItemPressable({\n style,\n leftIcon,\n rightIcon,\n filename,\n level,\n info,\n ...pressableProps\n}: {\n style?: ViewStyle;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n filename: string;\n level: number;\n info?: string;\n} & Omit<PressableProps, 'style' | 'children'>) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed, hovered }) => (\n <View\n testID=\"sitemap-item\"\n style={[\n styles.itemInnerContainer,\n styles.itemPressable,\n {\n paddingLeft: INDENT + level * INDENT,\n backgroundColor: hovered ? '#202425' : '#151718',\n },\n pressed && { backgroundColor: '#26292b' },\n style,\n ]}>\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {leftIcon}\n <Text style={styles.filename}>{filename}</Text>\n </View>\n\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {!!info && <Text style={[styles.virtual, { marginRight: 8 }]}>{info}</Text>}\n {rightIcon}\n </View>\n </View>\n )}\n </Pressable>\n );\n}\n\nfunction FileIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/file.png')} />;\n}\n\nfunction PkgIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/pkg.png')} />;\n}\n\nfunction ForwardIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/forward.png')} />;\n}\n\nfunction SitemapIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/sitemap.png')} />;\n}\n\nfunction ArrowIcon({ rotation = 0 }: { rotation?: number }) {\n return (\n <Image\n style={[\n styles.image,\n {\n transform: [{ rotate: `${rotation}deg` }],\n },\n ]}\n source={require('expo-router/assets/arrow_down.png')}\n />\n );\n}\n\nfunction SystemInfo() {\n const getHermesVersion = () => {\n if (!global.HermesInternal) {\n return null;\n }\n\n const HERMES_RUNTIME = global.HermesInternal?.getRuntimeProperties?.() ?? {};\n const HERMES_VERSION = HERMES_RUNTIME['OSS Release Version'];\n const isStaticHermes = HERMES_RUNTIME['Static Hermes'];\n\n if (!HERMES_RUNTIME) {\n return null;\n }\n\n if (isStaticHermes) {\n return `${HERMES_VERSION} (shermes)`;\n }\n return HERMES_VERSION;\n };\n\n const locationOrigin = window.location.origin;\n const expoSdkVersion = Constants.expoConfig?.sdkVersion || 'Unknown';\n const hermesVersion = getHermesVersion();\n\n return (\n <View\n testID=\"sitemap-system-info\"\n style={{\n gap: 8,\n marginTop: 16,\n }}>\n <Text style={styles.systemInfoTitle}>System Information</Text>\n <View style={styles.systemInfoContainer}>\n <FormText right={process.env.NODE_ENV}>Mode</FormText>\n <FormText right={expoSdkVersion}>Expo SDK</FormText>\n {hermesVersion && <FormText right={hermesVersion}>Hermes version</FormText>}\n {locationOrigin && <FormText right={locationOrigin}>Location origin</FormText>}\n </View>\n </View>\n );\n}\n\nfunction FormText({ children, right }: { children?: React.ReactNode; right?: React.ReactNode }) {\n return (\n <View style={styles.systemInfoItem}>\n <Text style={styles.systemInfoLabel} numberOfLines={1} ellipsizeMode=\"tail\">\n {children}\n </Text>\n <View style={{ flex: 1 }} />\n\n <Text\n selectable\n style={[styles.systemInfoValue, styles.code]}\n numberOfLines={1}\n ellipsizeMode=\"tail\">\n {right}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: 'black',\n flex: 1,\n alignItems: 'stretch',\n },\n header: {\n backgroundColor: '#151718',\n paddingVertical: 16,\n borderBottomWidth: 1,\n borderColor: '#313538',\n boxShadow: '0px 3px 3px rgba(0, 0, 0, 0.33)',\n },\n headerContent: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 14,\n paddingHorizontal: '5%',\n ...Platform.select({\n web: {\n width: '100%',\n maxWidth: 960,\n marginHorizontal: 'auto',\n },\n }),\n },\n title: {\n color: 'white',\n fontSize: 28,\n fontWeight: 'bold',\n },\n scroll: {\n gap: 12,\n paddingHorizontal: '5%',\n paddingVertical: 16,\n ...Platform.select({\n ios: {\n paddingBottom: 24,\n },\n web: {\n width: '100%',\n maxWidth: 960,\n marginHorizontal: 'auto',\n paddingBottom: 24,\n },\n default: {\n paddingBottom: 12,\n },\n }),\n },\n itemContainer: {\n borderWidth: 1,\n borderColor: '#313538',\n backgroundColor: '#151718',\n borderRadius: 12,\n borderCurve: 'continuous',\n },\n itemInnerContainer: {\n backgroundColor: '#151718',\n borderRadius: 12,\n borderCurve: 'continuous',\n gap: 12,\n },\n itemPressable: {\n paddingHorizontal: INDENT,\n paddingVertical: 16,\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n ...Platform.select({\n web: {\n transitionDuration: '100ms',\n },\n }),\n },\n filename: { color: 'white', fontSize: 20, marginLeft: 12 },\n virtual: { textAlign: 'right', color: 'white' },\n image: { width: 24, height: 24, resizeMode: 'contain', opacity: 0.6 },\n headerIcon: {\n width: 40,\n height: 40,\n backgroundColor: '#202425',\n borderRadius: 8,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n systemInfoContainer: {\n borderWidth: 1,\n borderColor: '#313538',\n backgroundColor: '#151718',\n borderRadius: 12,\n gap: 8,\n borderCurve: 'continuous',\n padding: INDENT,\n },\n systemInfoTitle: {\n color: 'white',\n fontSize: 18,\n fontWeight: '600',\n marginBottom: 12,\n paddingHorizontal: INDENT,\n },\n systemInfoItem: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n flexWrap: 'wrap',\n },\n systemInfoLabel: {\n color: 'white',\n fontSize: 16,\n lineHeight: 24,\n },\n systemInfoValue: {\n color: 'white',\n fontSize: 16,\n opacity: 0.7,\n\n flexShrink: 1,\n letterSpacing: 0.5,\n },\n code: {\n fontVariant: ['tabular-nums'],\n fontFamily: Platform.select({\n default: `SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace`,\n ios: 'ui-monospace',\n android: 'monospace',\n }),\n fontWeight: '500',\n },\n});\n"]}
1
+ {"version":3,"file":"Sitemap.js","sourceRoot":"","sources":["../../src/views/Sitemap.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright © 2024 650 Industries.\n'use client';\n\nimport { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport Constants from 'expo-constants';\nimport React from 'react';\nimport {\n Image,\n StyleSheet,\n Text,\n View,\n ScrollView,\n Platform,\n StatusBar,\n ViewStyle,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\n\nimport { NoSSR } from './NoSSR';\nimport { Pressable, PressableProps } from './Pressable';\nimport { useSitemap, SitemapType } from './useSitemap';\nimport { Link } from '../link/Link';\nimport { canOverrideStatusBarBehavior } from '../utils/statusbar';\n\nconst INDENT = 20;\n\nexport function getNavOptions(): NativeStackNavigationOptions {\n return {\n title: 'sitemap',\n presentation: 'modal',\n headerLargeTitle: false,\n headerTitleStyle: {\n color: 'white',\n },\n headerShown: true,\n headerTintColor: 'white',\n headerLargeTitleStyle: {\n color: 'white',\n },\n headerStyle: {\n backgroundColor: 'black',\n // @ts-expect-error: mistyped\n borderBottomColor: '#323232',\n },\n header: () => {\n const WrapperElement = Platform.OS === 'android' ? SafeAreaView : View;\n return (\n <WrapperElement style={styles.header}>\n <View style={styles.headerContent}>\n <View style={styles.headerIcon}>\n <SitemapIcon />\n </View>\n <Text role=\"heading\" aria-level={1} style={styles.title}>\n Sitemap\n </Text>\n </View>\n </WrapperElement>\n );\n },\n };\n}\n\nexport function Sitemap() {\n // Following the https://github.com/expo/expo/blob/ubax/router/move-404-and-sitemap-to-root/packages/expo-router/src/getRoutesSSR.ts#L38\n // we need to ensure that the Sitemap component is not rendered on the server.\n return (\n <NoSSR>\n <SitemapInner />\n </NoSSR>\n );\n}\n\nfunction SitemapInner() {\n const sitemap = useSitemap();\n const children = React.useMemo(\n () => sitemap?.children.filter(({ isInternal }) => !isInternal) ?? [],\n [sitemap]\n );\n const Wrapper = Platform.OS === 'android' ? SafeAreaView : View;\n return (\n <Wrapper style={styles.container} testID=\"expo-router-sitemap\">\n {canOverrideStatusBarBehavior && <StatusBar barStyle=\"light-content\" />}\n <ScrollView\n contentContainerStyle={styles.scroll}\n automaticallyAdjustContentInsets\n contentInsetAdjustmentBehavior=\"automatic\">\n {children.map((child) => (\n <View testID=\"sitemap-item-container\" key={child.contextKey} style={styles.itemContainer}>\n <SitemapItem node={child} />\n </View>\n ))}\n <SystemInfo />\n </ScrollView>\n </Wrapper>\n );\n}\n\ninterface SitemapItemProps {\n node: SitemapType;\n level?: number;\n info?: string;\n}\n\nfunction SitemapItem({ node, level = 0 }: SitemapItemProps) {\n const isLayout = React.useMemo(\n () => node.children.length > 0 || node.contextKey.match(/_layout\\.[jt]sx?$/),\n [node]\n );\n const info = node.isInitial ? 'Initial' : node.isGenerated ? 'Generated' : '';\n\n if (isLayout) {\n return <LayoutSitemapItem node={node} level={level} info={info} />;\n }\n return <StandardSitemapItem node={node} level={level} info={info} />;\n}\n\nfunction LayoutSitemapItem({ node, level, info }: Required<SitemapItemProps>) {\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n\n return (\n <View style={styles.itemInnerContainer}>\n <SitemapItemPressable\n style={{ opacity: 0.4 }}\n leftIcon={<PkgIcon />}\n rightIcon={<ArrowIcon rotation={isCollapsed ? 0 : 180} />}\n filename={node.filename}\n level={level}\n info={info}\n onPress={() => setIsCollapsed((prev) => !prev)}\n />\n {!isCollapsed &&\n node.children.map((child) => (\n <SitemapItem\n key={child.contextKey}\n node={child}\n level={level + (node.isGenerated ? 0 : 1)}\n />\n ))}\n </View>\n );\n}\n\nfunction StandardSitemapItem({ node, info, level }: Required<SitemapItemProps>) {\n return (\n <Link accessibilityLabel={node.contextKey} href={node.href} asChild replace>\n <SitemapItemPressable\n leftIcon={<FileIcon />}\n rightIcon={<ForwardIcon />}\n filename={node.filename}\n level={level}\n info={info}\n />\n </Link>\n );\n}\n\nfunction SitemapItemPressable({\n style,\n leftIcon,\n rightIcon,\n filename,\n level,\n info,\n ...pressableProps\n}: {\n style?: ViewStyle;\n leftIcon?: React.ReactNode;\n rightIcon?: React.ReactNode;\n filename: string;\n level: number;\n info?: string;\n} & Omit<PressableProps, 'style' | 'children'>) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed, hovered }) => (\n <View\n testID=\"sitemap-item\"\n style={[\n styles.itemInnerContainer,\n styles.itemPressable,\n {\n paddingLeft: INDENT + level * INDENT,\n backgroundColor: hovered ? '#202425' : '#151718',\n },\n pressed && { backgroundColor: '#26292b' },\n style,\n ]}>\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {leftIcon}\n <Text style={styles.filename}>{filename}</Text>\n </View>\n\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {!!info && <Text style={[styles.virtual, { marginRight: 8 }]}>{info}</Text>}\n {rightIcon}\n </View>\n </View>\n )}\n </Pressable>\n );\n}\n\nfunction FileIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/file.png')} />;\n}\n\nfunction PkgIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/pkg.png')} />;\n}\n\nfunction ForwardIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/forward.png')} />;\n}\n\nfunction SitemapIcon() {\n return <Image style={styles.image} source={require('expo-router/assets/sitemap.png')} />;\n}\n\nfunction ArrowIcon({ rotation = 0 }: { rotation?: number }) {\n return (\n <Image\n style={[\n styles.image,\n {\n transform: [{ rotate: `${rotation}deg` }],\n },\n ]}\n source={require('expo-router/assets/arrow_down.png')}\n />\n );\n}\n\nfunction SystemInfo() {\n const getHermesVersion = () => {\n if (!global.HermesInternal) {\n return null;\n }\n\n const HERMES_RUNTIME = global.HermesInternal?.getRuntimeProperties?.() ?? {};\n const HERMES_VERSION = HERMES_RUNTIME['OSS Release Version'];\n const isStaticHermes = HERMES_RUNTIME['Static Hermes'];\n\n if (!HERMES_RUNTIME) {\n return null;\n }\n\n if (isStaticHermes) {\n return `${HERMES_VERSION} (shermes)`;\n }\n return HERMES_VERSION;\n };\n\n const locationOrigin = window.location.origin;\n const expoSdkVersion = Constants.expoConfig?.sdkVersion || 'Unknown';\n const hermesVersion = getHermesVersion();\n\n return (\n <View\n testID=\"sitemap-system-info\"\n style={{\n gap: 8,\n marginTop: 16,\n }}>\n <Text style={styles.systemInfoTitle}>System Information</Text>\n <View style={styles.systemInfoContainer}>\n <FormText right={process.env.NODE_ENV}>Mode</FormText>\n <FormText right={expoSdkVersion}>Expo SDK</FormText>\n {hermesVersion && <FormText right={hermesVersion}>Hermes version</FormText>}\n {locationOrigin && <FormText right={locationOrigin}>Location origin</FormText>}\n </View>\n </View>\n );\n}\n\nfunction FormText({ children, right }: { children?: React.ReactNode; right?: React.ReactNode }) {\n return (\n <View style={styles.systemInfoItem}>\n <Text style={styles.systemInfoLabel} numberOfLines={1} ellipsizeMode=\"tail\">\n {children}\n </Text>\n <View style={{ flex: 1 }} />\n\n <Text\n selectable\n style={[styles.systemInfoValue, styles.code]}\n numberOfLines={1}\n ellipsizeMode=\"tail\">\n {right}\n </Text>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: 'black',\n flex: 1,\n alignItems: 'stretch',\n },\n header: {\n backgroundColor: '#151718',\n paddingVertical: 16,\n borderBottomWidth: 1,\n borderColor: '#313538',\n boxShadow: '0px 3px 3px rgba(0, 0, 0, 0.33)',\n },\n headerContent: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 14,\n paddingHorizontal: '5%',\n ...Platform.select({\n web: {\n width: '100%',\n maxWidth: 960,\n marginHorizontal: 'auto',\n },\n }),\n },\n title: {\n color: 'white',\n fontSize: 28,\n fontWeight: 'bold',\n },\n scroll: {\n gap: 12,\n paddingHorizontal: '5%',\n paddingVertical: 16,\n ...Platform.select({\n ios: {\n paddingBottom: 24,\n },\n web: {\n width: '100%',\n maxWidth: 960,\n marginHorizontal: 'auto',\n paddingBottom: 24,\n },\n default: {\n paddingBottom: 12,\n },\n }),\n },\n itemContainer: {\n borderWidth: 1,\n borderColor: '#313538',\n backgroundColor: '#151718',\n borderRadius: 12,\n borderCurve: 'continuous',\n },\n itemInnerContainer: {\n backgroundColor: '#151718',\n borderRadius: 12,\n borderCurve: 'continuous',\n gap: 12,\n },\n itemPressable: {\n paddingHorizontal: INDENT,\n paddingVertical: 16,\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n ...Platform.select({\n web: {\n transitionDuration: '100ms',\n },\n }),\n },\n filename: { color: 'white', fontSize: 20, marginLeft: 12 },\n virtual: { textAlign: 'right', color: 'white' },\n image: { width: 24, height: 24, resizeMode: 'contain', opacity: 0.6 },\n headerIcon: {\n width: 40,\n height: 40,\n backgroundColor: '#202425',\n borderRadius: 8,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n systemInfoContainer: {\n borderWidth: 1,\n borderColor: '#313538',\n backgroundColor: '#151718',\n borderRadius: 12,\n gap: 8,\n borderCurve: 'continuous',\n padding: INDENT,\n },\n systemInfoTitle: {\n color: 'white',\n fontSize: 18,\n fontWeight: '600',\n marginBottom: 12,\n paddingHorizontal: INDENT,\n },\n systemInfoItem: {\n flexDirection: 'row',\n gap: 8,\n alignItems: 'center',\n flexWrap: 'wrap',\n },\n systemInfoLabel: {\n color: 'white',\n fontSize: 16,\n lineHeight: 24,\n },\n systemInfoValue: {\n color: 'white',\n fontSize: 16,\n opacity: 0.7,\n\n flexShrink: 1,\n letterSpacing: 0.5,\n },\n code: {\n fontVariant: ['tabular-nums'],\n fontFamily: Platform.select({\n default: `SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace`,\n ios: 'ui-monospace',\n android: 'monospace',\n }),\n fontWeight: '500',\n },\n});\n"]}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "platforms": ["apple", "android", "web"],
3
3
  "apple": {
4
- "modules": ["ExpoHeadModule", "LinkPreviewNativeModule"],
4
+ "modules": ["ExpoHeadModule", "LinkPreviewNativeModule", "RouterToolbarModule"],
5
5
  "appDelegateSubscribers": ["ExpoHeadAppDelegateSubscriber"]
6
6
  },
7
7
  "android": {
@@ -9,7 +9,7 @@
9
9
  "publication": {
10
10
  "groupId": "expo.modules.router",
11
11
  "artifactId": "expo.modules.router",
12
- "version": "7.0.0-canary-20251120-e46b3cc",
12
+ "version": "7.0.0-canary-20251205-756eb7a",
13
13
  "repository": "local-maven-repo"
14
14
  }
15
15
  }
@@ -2,6 +2,7 @@ import ExpoModulesCore
2
2
  import WebKit
3
3
 
4
4
  class LinkPreviewNativeActionView: ExpoView, LinkPreviewMenuUpdatable {
5
+ var identifier: String = ""
5
6
  // MARK: - Shared props
6
7
  var title: String = "" {
7
8
  didSet {
@@ -1,8 +1,11 @@
1
1
  import ExpoModulesCore
2
2
 
3
3
  public class LinkPreviewNativeModule: Module {
4
+ static let moduleName: String = "ExpoRouterNativeLinkPreview"
5
+ lazy var zoomSourceRepository = LinkZoomTransitionsSourceRepository()
6
+
4
7
  public func definition() -> ModuleDefinition {
5
- Name("ExpoRouterNativeLinkPreview")
8
+ Name(LinkPreviewNativeModule.moduleName)
6
9
 
7
10
  View(NativeLinkPreviewView.self) {
8
11
  Prop("nextScreenId") { (view: NativeLinkPreviewView, nextScreenId: String) in
@@ -48,6 +51,9 @@ public class LinkPreviewNativeModule: Module {
48
51
  Prop("title") { (view: LinkPreviewNativeActionView, title: String) in
49
52
  view.title = title
50
53
  }
54
+ Prop("identifier") { (view: LinkPreviewNativeActionView, identifier: String) in
55
+ view.identifier = identifier
56
+ }
51
57
  Prop("icon") { (view: LinkPreviewNativeActionView, icon: String?) in
52
58
  view.icon = icon
53
59
  }
@@ -75,6 +81,41 @@ public class LinkPreviewNativeModule: Module {
75
81
 
76
82
  Events("onSelected")
77
83
  }
84
+
85
+ View(LinkZoomTransitionSource.self) {
86
+ Prop("disableForceFlatten") { (_: LinkZoomTransitionSource, _: Bool) in
87
+ // This prop is used in ExpoShadowNode in order to disable force flattening, when display: contents is used
88
+ }
89
+ Prop("identifier") { (view: LinkZoomTransitionSource, identifier: String) in
90
+ view.identifier = identifier
91
+ }
92
+ Prop("alignment") { (view: LinkZoomTransitionSource, alignment: LinkSourceAlignmentRect?) in
93
+ if let alignment = alignment {
94
+ view.alignment = CGRect(
95
+ x: alignment.x,
96
+ y: alignment.y,
97
+ width: alignment.width,
98
+ height: alignment.height
99
+ )
100
+ } else {
101
+ view.alignment = nil
102
+ }
103
+ }
104
+ }
105
+
106
+ View(LinkZoomTransitionEnabler.self) {
107
+ Prop("zoomTransitionSourceIdentifier") {
108
+ (view: LinkZoomTransitionEnabler, identifier: String) in
109
+ view.zoomTransitionSourceIdentifier = identifier
110
+ }
111
+ Prop("disableForceFlatten") { (_: LinkZoomTransitionEnabler, _: Bool) in
112
+ // This prop is used in ExpoShadowNode in order to disable force flattening, when display: contents is used
113
+ }
114
+
115
+ Prop("preventInteractiveDismissal") { (view: LinkZoomTransitionEnabler, prevent: Bool) in
116
+ view.isPreventingInteractiveDismissal = prevent
117
+ }
118
+ }
78
119
  }
79
120
  }
80
121
 
@@ -86,3 +127,10 @@ struct TabStatePath: Record {
86
127
  @Field var oldTabKey: String
87
128
  @Field var newTabKey: String
88
129
  }
130
+
131
+ struct LinkSourceAlignmentRect: Record {
132
+ @Field var x: Double
133
+ @Field var y: Double
134
+ @Field var width: Double
135
+ @Field var height: Double
136
+ }
@@ -1,3 +1,5 @@
1
+ import ExpoModulesCore
2
+ import RNScreens
1
3
  import UIKit
2
4
 
3
5
  struct TabChangeCommand {
@@ -6,23 +8,36 @@ struct TabChangeCommand {
6
8
  }
7
9
 
8
10
  internal class LinkPreviewNativeNavigation {
9
- private var preloadedView: UIView?
10
- private var preloadedStackView: UIView?
11
+ private var preloadedScreenView: RNSScreenView?
12
+ private var preloadedStackView: RNSScreenStackView?
11
13
  private var tabChangeCommands: [TabChangeCommand] = []
14
+ private let logger: Logger?
12
15
 
13
- init() {}
16
+ init(logger: Logger?) {
17
+ self.logger = logger
18
+ }
14
19
 
15
20
  func pushPreloadedView() {
16
- self.tabChangeCommands.forEach { command in
17
- command.tabBarController?.selectedIndex = command.tabIndex
18
- }
19
- guard let preloadedView,
21
+ self.performTabChanges()
22
+
23
+ guard let preloadedScreenView,
20
24
  let preloadedStackView
21
25
  else {
26
+ // Check if there were any tab change commands to perform
27
+ // If there were, the preview transition could be to a different tab only
28
+ if self.tabChangeCommands.isEmpty {
29
+ logger?.warn(
30
+ "expo-router: No preloaded screen view to push. You should only use Link.Preview when navigating inside a stack or native tabs navigator."
31
+ )
32
+ }
22
33
  return
23
34
  }
24
- LinkPreviewNativeNavigationObjC.pushPreloadedView(
25
- preloadedView, ontoStackView: preloadedStackView)
35
+
36
+ // Instead of pushing the preloaded screen view, we set its activity state
37
+ // React native screens will then handle the rest.
38
+ preloadedScreenView.activityState = Int32(RNSActivityState.onTop.rawValue)
39
+ preloadedStackView.markChildUpdated()
40
+ self.pushModalInnerScreenIfNeeded(screenView: preloadedScreenView)
26
41
  }
27
42
 
28
43
  func updatePreloadedView(screenId: String?, tabPath: TabPathPayload?, responder: UIView) {
@@ -30,69 +45,92 @@ internal class LinkPreviewNativeNavigation {
30
45
  let oldTabKeys = tabPath?.path.map { $0.oldTabKey } ?? []
31
46
  let stackOrTabView = findStackViewWithScreenIdOrTabBarController(
32
47
  screenId: screenId, tabKeys: oldTabKeys, responder: responder)
33
- if let stackOrTabView = stackOrTabView {
34
- if LinkPreviewNativeNavigationObjC.isRNSBottomTabsScreenComponentView(stackOrTabView) {
35
- let tabView = stackOrTabView
48
+ if stackOrTabView != nil {
49
+ if let tabView = stackOrTabView as? RNSBottomTabsScreenComponentView {
36
50
  let newTabKeys = tabPath?.path.map { $0.newTabKey } ?? []
37
- let stackView = findStackViewWithScreenIdInSubViews(
38
- screenId: screenId, tabKeys: newTabKeys, rootView: tabView)
39
- if let stackView = stackView {
40
- let screenViews = LinkPreviewNativeNavigationObjC.getScreenViews(stackView)
41
- if let screenView = screenViews.first(where: {
42
- LinkPreviewNativeNavigationObjC.getScreenId($0) == screenId
43
- }) {
44
- preloadedView = screenView
45
- preloadedStackView = stackView
46
- print("LinkPreviewNativeNavigation: Preloaded view for screenId \(screenId).")
47
- }
48
- }
49
- } else if LinkPreviewNativeNavigationObjC.isRNSScreenStackView(stackOrTabView) {
50
- let stackView = stackOrTabView
51
- let screenViews = LinkPreviewNativeNavigationObjC.getScreenViews(stackView)
52
- if let screenView = screenViews.first(where: {
53
- LinkPreviewNativeNavigationObjC.getScreenId($0) == screenId
54
- }) {
55
- preloadedView = screenView
56
- preloadedStackView = stackView
57
- print("LinkPreviewNativeNavigation: Preloaded view for screenId \(screenId).")
51
+ // The order is important here. findStackViewWithScreenIdInSubViews must be called
52
+ // even if screenId is nil to compute the tabChangeCommands.
53
+ if let stackView = findStackViewWithScreenIdInSubViews(
54
+ screenId: screenId, tabKeys: newTabKeys, rootView: tabView), let screenId {
55
+ setPreloadedView(stackView: stackView, screenId: screenId)
58
56
  }
57
+ } else if let stackView = stackOrTabView as? RNSScreenStackView, let screenId {
58
+ setPreloadedView(stackView: stackView, screenId: screenId)
59
59
  }
60
60
  } else {
61
- print("LinkPreviewNativeNavigation: No stack view found for screenId \(screenId).")
61
+ logger?.warn(
62
+ "expo-router: No view found for link preview navigation. You should only use Link.Preview when navigating inside a stack or native tabs navigator."
63
+ )
64
+ }
65
+ }
66
+
67
+ private func performTabChanges() {
68
+ self.tabChangeCommands.forEach { command in
69
+ command.tabBarController?.selectedIndex = command.tabIndex
70
+ }
71
+ }
72
+
73
+ // If screen is a modal with header, it will have an inner stack screen
74
+ // https://github.com/software-mansion/react-native-screens/blob/8b82e081e8fdfa6e0864821134bda9e87a745b00/src/components/ScreenStackItem.tsx#L146-L160
75
+ // In this case we need to set the activity state of the inner screen as well.
76
+ private func pushModalInnerScreenIfNeeded(screenView: RNSScreenView) {
77
+ // If the screen is modal with header then it will have exactly one child - RNSNavigationController.
78
+ if screenView.isModal() && screenView.controller.children.count == 1 {
79
+ // To get the inner screen stack we need to go through RNSNavigationController.
80
+ // The structure is as follows:
81
+ // RNSScreenView (preloadedScreenView)
82
+ // └── RNSNavigationController (outer stack)
83
+ // └── RNSScreenStackView (innerScreenStack)
84
+ if let rnsNavController = screenView.controller.children.first
85
+ as? RNSNavigationController,
86
+ // The delegate of RNSNavigationController is RNSScreenStackView.
87
+ let innerScreenStack = rnsNavController.delegate as? RNSScreenStackView,
88
+ // The first and only child of the inner screen stack should be
89
+ // RNSScreenView (<ScreenStackItem>).
90
+ let screenContentView = innerScreenStack.reactSubviews().first as? RNSScreenView {
91
+ print("screenView screenId:", screenView.screenId)
92
+ print("innerScreenStack screenIds:", innerScreenStack.screenIds)
93
+ // Same as above, we let React Native Screens handle the transition.
94
+ // We need to set the activity of inner screen as well, because its
95
+ // react value is the same as the preloaded screen - 0.
96
+ // https://github.com/software-mansion/react-native-screens/blob/8b82e081e8fdfa6e0864821134bda9e87a745b00/src/components/ScreenStackItem.tsx#L151
97
+ screenContentView.activityState = Int32(RNSActivityState.onTop.rawValue)
98
+ innerScreenStack.markChildUpdated()
99
+ }
100
+ }
101
+ }
102
+
103
+ private func setPreloadedView(
104
+ stackView: RNSScreenStackView, screenId: String
105
+ ) {
106
+ let screenViews = stackView.reactSubviews()
107
+ if let screenView = screenViews?.first(where: {
108
+ ($0 as? RNSScreenView)?.screenId == screenId
109
+ }) as? RNSScreenView {
110
+ preloadedScreenView = screenView
111
+ preloadedStackView = stackView
62
112
  }
63
113
  }
64
114
 
115
+ // Allowing for null screenId to support preloading tab navigators
116
+ // Even if the desired screenId is not found, we still need to compute the tabChangeCommands
65
117
  private func findStackViewWithScreenIdInSubViews(
66
118
  screenId: String?, tabKeys: [String], rootView: UIView
67
- ) -> UIView? {
68
- if LinkPreviewNativeNavigationObjC.isRNSScreenStackView(rootView),
69
- let _screenId = screenId {
70
- let screenIds = LinkPreviewNativeNavigationObjC.getStackViewScreenIds(rootView)
71
- if screenIds.contains(_screenId) {
119
+ ) -> RNSScreenStackView? {
120
+ if let rootView = rootView as? RNSScreenStackView,
121
+ let screenId {
122
+ if rootView.screenIds.contains(screenId) {
72
123
  return rootView
73
124
  }
74
- } else if LinkPreviewNativeNavigationObjC.isRNSBottomTabsScreenComponentView(rootView)
75
- || LinkPreviewNativeNavigationObjC.isRNSBottomTabsHostComponentView(rootView) {
76
- let tabBarController = LinkPreviewNativeNavigationObjC.getBottomTabController(from: rootView)
77
- if let tabBarController = tabBarController {
78
- let views = tabBarController.viewControllers?.compactMap { $0.view } ?? []
79
- let enumeratedViews = views.enumerated()
80
- if let (tabIndex, tabView) =
81
- enumeratedViews
82
- .first(where: { _, view in
83
- LinkPreviewNativeNavigationObjC.isRNSBottomTabsScreenComponentView(view)
84
- && tabKeys.contains(LinkPreviewNativeNavigationObjC.getTabKey(view))
85
- }) {
86
- self.tabChangeCommands.append(
87
- TabChangeCommand(tabBarController: tabBarController, tabIndex: tabIndex))
88
- let test = tabBarController.viewControllers
89
-
90
- for subview in tabView.subviews {
91
- let result = findStackViewWithScreenIdInSubViews(
92
- screenId: screenId, tabKeys: tabKeys, rootView: subview)
93
- if result != nil {
94
- return result
95
- }
125
+ } else if let tabBarController = getTabBarControllerFromTabView(view: rootView) {
126
+ if let (tabIndex, tabView) = getIndexAndViewOfFirstTabWithKey(
127
+ tabBarController: tabBarController, tabKeys: tabKeys) {
128
+ self.tabChangeCommands.append(
129
+ TabChangeCommand(tabBarController: tabBarController, tabIndex: tabIndex))
130
+ for subview in tabView.subviews {
131
+ if let result = findStackViewWithScreenIdInSubViews(
132
+ screenId: screenId, tabKeys: tabKeys, rootView: subview) {
133
+ return result
96
134
  }
97
135
  }
98
136
  }
@@ -109,23 +147,47 @@ internal class LinkPreviewNativeNavigation {
109
147
  return nil
110
148
  }
111
149
 
150
+ private func getIndexAndViewOfFirstTabWithKey(
151
+ tabBarController: UITabBarController, tabKeys: [String]
152
+ ) -> (tabIndex: Int, tabView: UIView)? {
153
+ let views = tabBarController.viewControllers?.compactMap { $0.view } ?? []
154
+ let enumeratedViews = views.enumerated()
155
+ if let result = enumeratedViews
156
+ .first(where: { _, view in
157
+ guard let tabView = view as? RNSBottomTabsScreenComponentView, let tabKey = tabView.tabKey
158
+ else {
159
+ return false
160
+ }
161
+ return tabKeys.contains(tabKey)
162
+ }) {
163
+ return (result.offset, result.element)
164
+ }
165
+ return nil
166
+ }
167
+
168
+ private func getTabBarControllerFromTabView(view: UIView) -> UITabBarController? {
169
+ if let tabScreenView = view as? RNSBottomTabsScreenComponentView {
170
+ return tabScreenView.reactViewController()?.tabBarController as? UITabBarController
171
+ }
172
+ if let tabHostView = view as? RNSBottomTabsHostComponentView {
173
+ return tabHostView.controller as? UITabBarController
174
+ }
175
+ return nil
176
+ }
177
+
112
178
  private func findStackViewWithScreenIdOrTabBarController(
113
179
  screenId: String?, tabKeys: [String], responder: UIView
114
180
  ) -> UIView? {
115
181
  var currentResponder: UIResponder? = responder
116
182
 
117
183
  while let nextResponder = currentResponder?.next {
118
- if let view = nextResponder as? UIView,
119
- LinkPreviewNativeNavigationObjC.isRNSScreenStackView(view),
120
- let _screenId = screenId {
121
- let screenIds = LinkPreviewNativeNavigationObjC.getStackViewScreenIds(view)
122
- if screenIds.contains(_screenId) {
184
+ if let view = nextResponder as? RNSScreenStackView,
185
+ let screenId {
186
+ if view.screenIds.contains(screenId) {
123
187
  return view
124
188
  }
125
- } else if let tabView = nextResponder as? UIView,
126
- LinkPreviewNativeNavigationObjC.isRNSBottomTabsScreenComponentView(tabView) {
127
- let tabKey = LinkPreviewNativeNavigationObjC.getTabKey(tabView)
128
- if tabKeys.contains(tabKey) {
189
+ } else if let tabView = nextResponder as? RNSBottomTabsScreenComponentView {
190
+ if let tabKey = tabView.tabKey, tabKeys.contains(tabKey) {
129
191
  return tabView
130
192
  }
131
193
  }
@@ -1,10 +1,11 @@
1
1
  import ExpoModulesCore
2
+ import RNScreens
2
3
 
3
4
  class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
4
- LinkPreviewModalDismissible, LinkPreviewMenuUpdatable {
5
+ RNSDismissibleModalProtocol, LinkPreviewMenuUpdatable {
5
6
  private var preview: NativeLinkPreviewContentView?
6
7
  private var interaction: UIContextMenuInteraction?
7
- private var directChild: UIView?
8
+ var directChild: UIView?
8
9
  var nextScreenId: String? {
9
10
  didSet {
10
11
  performUpdateOfPreloadedView()
@@ -17,7 +18,9 @@ class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
17
18
  }
18
19
  private var actions: [LinkPreviewNativeActionView] = []
19
20
 
20
- private let linkPreviewNativeNavigation = LinkPreviewNativeNavigation()
21
+ private lazy var linkPreviewNativeNavigation: LinkPreviewNativeNavigation = {
22
+ return LinkPreviewNativeNavigation(logger: appContext?.jsLogger)
23
+ }()
21
24
 
22
25
  let onPreviewTapped = EventDispatcher()
23
26
  let onPreviewTappedAnimationCompleted = EventDispatcher()
@@ -66,7 +69,11 @@ class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
66
69
  }
67
70
  directChild = childComponentView
68
71
  if let interaction = self.interaction {
69
- childComponentView.addInteraction(interaction)
72
+ if let indirectTrigger = childComponentView as? LinkPreviewIndirectTriggerProtocol {
73
+ indirectTrigger.indirectTrigger?.addInteraction(interaction)
74
+ } else {
75
+ childComponentView.addInteraction(interaction)
76
+ }
70
77
  }
71
78
  super.mountChildComponentView(childComponentView, index: index)
72
79
  }
@@ -88,7 +95,11 @@ class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
88
95
  return
89
96
  }
90
97
  if let interaction = self.interaction {
91
- directChild.removeInteraction(interaction)
98
+ if let indirectTrigger = directChild as? LinkPreviewIndirectTriggerProtocol {
99
+ indirectTrigger.indirectTrigger?.removeInteraction(interaction)
100
+ } else {
101
+ directChild.removeInteraction(interaction)
102
+ }
92
103
  }
93
104
  super.unmountChildComponentView(child, index: index)
94
105
  } else {
@@ -123,16 +134,16 @@ class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
123
134
  configuration: UIContextMenuConfiguration,
124
135
  highlightPreviewForItemWithIdentifier identifier: any NSCopying
125
136
  ) -> UITargetedPreview? {
126
- if let superview = self.superview {
127
- if let directChild = self.directChild {
128
- let target = UIPreviewTarget(
129
- container: superview, center: self.convert(directChild.center, to: superview))
137
+ if let superview, let directChild {
138
+ let triggerView: UIView =
139
+ (directChild as? LinkPreviewIndirectTriggerProtocol)?.indirectTrigger ?? directChild
140
+ let target = UIPreviewTarget(
141
+ container: superview, center: self.convert(triggerView.center, to: superview))
130
142
 
131
- let parameters = UIPreviewParameters()
132
- parameters.backgroundColor = .clear
143
+ let parameters = UIPreviewParameters()
144
+ parameters.backgroundColor = .clear
133
145
 
134
- return UITargetedPreview(view: directChild, parameters: parameters, target: target)
135
- }
146
+ return UITargetedPreview(view: triggerView, parameters: parameters, target: target)
136
147
  }
137
148
  return nil
138
149
  }
@@ -167,10 +178,12 @@ class NativeLinkPreviewView: ExpoView, UIContextMenuInteractionDelegate,
167
178
  willPerformPreviewActionForMenuWith configuration: UIContextMenuConfiguration,
168
179
  animator: UIContextMenuInteractionCommitAnimating
169
180
  ) {
170
- self.onPreviewTapped()
171
- animator.addCompletion { [weak self] in
172
- self?.linkPreviewNativeNavigation.pushPreloadedView()
173
- self?.onPreviewTappedAnimationCompleted()
181
+ if preview != nil {
182
+ self.onPreviewTapped()
183
+ animator.addCompletion { [weak self] in
184
+ self?.linkPreviewNativeNavigation.pushPreloadedView()
185
+ self?.onPreviewTappedAnimationCompleted()
186
+ }
174
187
  }
175
188
  }
176
189
 
@@ -229,3 +242,7 @@ class PreviewViewController: UIViewController {
229
242
  linkPreviewNativePreview.setInitialSize(bounds: self.view.bounds)
230
243
  }
231
244
  }
245
+
246
+ protocol LinkPreviewIndirectTriggerProtocol {
247
+ var indirectTrigger: UIView? { get }
248
+ }