expo-router 7.0.0-canary-20260114-d8e19f5 → 7.0.0-canary-20260119-70f7c28

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 (239) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/ExpoRoot.d.ts.map +1 -1
  3. package/build/ExpoRoot.js +2 -0
  4. package/build/ExpoRoot.js.map +1 -1
  5. package/build/global.d.ts +29 -0
  6. package/build/global.d.ts.map +1 -0
  7. package/build/global.js +3 -0
  8. package/build/global.js.map +1 -0
  9. package/build/index.d.ts +1 -0
  10. package/build/index.d.ts.map +1 -1
  11. package/build/index.js +1 -0
  12. package/build/index.js.map +1 -1
  13. package/build/layouts/Stack.d.ts.map +1 -1
  14. package/build/layouts/Stack.js +3 -0
  15. package/build/layouts/Stack.js.map +1 -1
  16. package/build/layouts/Stack.web.js +1 -0
  17. package/build/layouts/Stack.web.js.map +1 -1
  18. package/build/layouts/StackClient.d.ts +13 -14
  19. package/build/layouts/StackClient.d.ts.map +1 -1
  20. package/build/layouts/StackClient.js +3 -2
  21. package/build/layouts/StackClient.js.map +1 -1
  22. package/build/layouts/stack-utils/StackHeaderComponent.d.ts +12 -23
  23. package/build/layouts/stack-utils/StackHeaderComponent.d.ts.map +1 -1
  24. package/build/layouts/stack-utils/StackHeaderComponent.js +15 -55
  25. package/build/layouts/stack-utils/StackHeaderComponent.js.map +1 -1
  26. package/build/layouts/stack-utils/StackScreen.d.ts +5 -0
  27. package/build/layouts/stack-utils/StackScreen.d.ts.map +1 -1
  28. package/build/layouts/stack-utils/StackScreen.js +34 -7
  29. package/build/layouts/stack-utils/StackScreen.js.map +1 -1
  30. package/build/layouts/stack-utils/StackSearchBar.d.ts +28 -0
  31. package/build/layouts/stack-utils/StackSearchBar.d.ts.map +1 -1
  32. package/build/layouts/stack-utils/StackSearchBar.js +29 -0
  33. package/build/layouts/stack-utils/StackSearchBar.js.map +1 -1
  34. package/build/layouts/stack-utils/common-primitives.d.ts +6 -6
  35. package/build/layouts/stack-utils/common-primitives.d.ts.map +1 -1
  36. package/build/layouts/stack-utils/common-primitives.js +4 -4
  37. package/build/layouts/stack-utils/common-primitives.js.map +1 -1
  38. package/build/layouts/stack-utils/index.d.ts +4 -23
  39. package/build/layouts/stack-utils/index.d.ts.map +1 -1
  40. package/build/layouts/stack-utils/index.js +18 -35
  41. package/build/layouts/stack-utils/index.js.map +1 -1
  42. package/build/layouts/stack-utils/screen/StackScreenBackButton.d.ts +68 -0
  43. package/build/layouts/stack-utils/screen/StackScreenBackButton.d.ts.map +1 -0
  44. package/build/layouts/stack-utils/screen/StackScreenBackButton.js +58 -0
  45. package/build/layouts/stack-utils/screen/StackScreenBackButton.js.map +1 -0
  46. package/build/layouts/stack-utils/screen/StackScreenTitle.d.ts +58 -0
  47. package/build/layouts/stack-utils/screen/StackScreenTitle.d.ts.map +1 -0
  48. package/build/layouts/stack-utils/screen/StackScreenTitle.js +75 -0
  49. package/build/layouts/stack-utils/screen/StackScreenTitle.js.map +1 -0
  50. package/build/layouts/stack-utils/screen/index.d.ts +3 -0
  51. package/build/layouts/stack-utils/screen/index.d.ts.map +1 -0
  52. package/build/layouts/stack-utils/screen/index.js +10 -0
  53. package/build/layouts/stack-utils/screen/index.js.map +1 -0
  54. package/build/layouts/stack-utils/shared.js +3 -3
  55. package/build/layouts/stack-utils/shared.js.map +1 -1
  56. package/build/layouts/stack-utils/toolbar/StackToolbar.d.ts +3 -0
  57. package/build/layouts/stack-utils/toolbar/StackToolbar.d.ts.map +1 -0
  58. package/build/layouts/stack-utils/toolbar/StackToolbar.js +24 -0
  59. package/build/layouts/stack-utils/toolbar/StackToolbar.js.map +1 -0
  60. package/build/layouts/stack-utils/toolbar/StackToolbarButton.d.ts +144 -0
  61. package/build/layouts/stack-utils/toolbar/StackToolbarButton.d.ts.map +1 -0
  62. package/build/layouts/stack-utils/toolbar/StackToolbarButton.js +68 -0
  63. package/build/layouts/stack-utils/toolbar/StackToolbarButton.js.map +1 -0
  64. package/build/layouts/stack-utils/toolbar/StackToolbarClient.d.ts +104 -0
  65. package/build/layouts/stack-utils/toolbar/StackToolbarClient.d.ts.map +1 -0
  66. package/build/layouts/stack-utils/toolbar/StackToolbarClient.js +214 -0
  67. package/build/layouts/stack-utils/toolbar/StackToolbarClient.js.map +1 -0
  68. package/build/layouts/stack-utils/{StackHeaderMenu.d.ts → toolbar/StackToolbarMenu.d.ts} +58 -106
  69. package/build/layouts/stack-utils/toolbar/StackToolbarMenu.d.ts.map +1 -0
  70. package/build/layouts/stack-utils/toolbar/StackToolbarMenu.js +190 -0
  71. package/build/layouts/stack-utils/toolbar/StackToolbarMenu.js.map +1 -0
  72. package/build/layouts/stack-utils/toolbar/StackToolbarSearchBarSlot.d.ts +48 -0
  73. package/build/layouts/stack-utils/toolbar/StackToolbarSearchBarSlot.d.ts.map +1 -0
  74. package/build/layouts/stack-utils/toolbar/StackToolbarSearchBarSlot.js +44 -0
  75. package/build/layouts/stack-utils/toolbar/StackToolbarSearchBarSlot.js.map +1 -0
  76. package/build/layouts/stack-utils/toolbar/StackToolbarSpacer.d.ts +80 -0
  77. package/build/layouts/stack-utils/toolbar/StackToolbarSpacer.d.ts.map +1 -0
  78. package/build/layouts/stack-utils/toolbar/StackToolbarSpacer.js +77 -0
  79. package/build/layouts/stack-utils/toolbar/StackToolbarSpacer.js.map +1 -0
  80. package/build/layouts/stack-utils/{StackHeaderView.d.ts → toolbar/StackToolbarView.d.ts} +21 -17
  81. package/build/layouts/stack-utils/toolbar/StackToolbarView.d.ts.map +1 -0
  82. package/build/layouts/stack-utils/toolbar/StackToolbarView.js +61 -0
  83. package/build/layouts/stack-utils/toolbar/StackToolbarView.js.map +1 -0
  84. package/build/layouts/stack-utils/toolbar/bottom-toolbar-native-elements.d.ts +93 -0
  85. package/build/layouts/stack-utils/toolbar/bottom-toolbar-native-elements.d.ts.map +1 -0
  86. package/build/layouts/stack-utils/toolbar/bottom-toolbar-native-elements.js +89 -0
  87. package/build/layouts/stack-utils/toolbar/bottom-toolbar-native-elements.js.map +1 -0
  88. package/build/layouts/stack-utils/toolbar/context.d.ts +9 -0
  89. package/build/layouts/stack-utils/toolbar/context.d.ts.map +1 -0
  90. package/build/layouts/stack-utils/toolbar/context.js +16 -0
  91. package/build/layouts/stack-utils/toolbar/context.js.map +1 -0
  92. package/build/layouts/stack-utils/toolbar/index.d.ts +10 -0
  93. package/build/layouts/stack-utils/toolbar/index.d.ts.map +1 -0
  94. package/build/layouts/stack-utils/toolbar/index.js +23 -0
  95. package/build/layouts/stack-utils/toolbar/index.js.map +1 -0
  96. package/build/link/LinkWithPreview.d.ts.map +1 -1
  97. package/build/link/LinkWithPreview.js +8 -5
  98. package/build/link/LinkWithPreview.js.map +1 -1
  99. package/build/link/NativeMenuContext.d.ts +5 -0
  100. package/build/link/NativeMenuContext.d.ts.map +1 -0
  101. package/build/link/NativeMenuContext.js +9 -0
  102. package/build/link/NativeMenuContext.js.map +1 -0
  103. package/build/link/elements.d.ts +41 -0
  104. package/build/link/elements.d.ts.map +1 -1
  105. package/build/link/elements.js +3 -2
  106. package/build/link/elements.js.map +1 -1
  107. package/build/link/preview/native.d.ts +2 -0
  108. package/build/link/preview/native.d.ts.map +1 -1
  109. package/build/link/preview/native.js +3 -1
  110. package/build/link/preview/native.js.map +1 -1
  111. package/build/native-tabs/NativeBottomTabsNavigator.d.ts +1 -1
  112. package/build/native-tabs/NativeBottomTabsNavigator.d.ts.map +1 -1
  113. package/build/native-tabs/NativeBottomTabsNavigator.js +2 -1
  114. package/build/native-tabs/NativeBottomTabsNavigator.js.map +1 -1
  115. package/build/native-tabs/NativeTabTrigger.d.ts.map +1 -1
  116. package/build/native-tabs/NativeTabTrigger.js +6 -4
  117. package/build/native-tabs/NativeTabTrigger.js.map +1 -1
  118. package/build/native-tabs/NativeTabsView.d.ts.map +1 -1
  119. package/build/native-tabs/NativeTabsView.js +0 -3
  120. package/build/native-tabs/NativeTabsView.js.map +1 -1
  121. package/build/native-tabs/common/elements.d.ts +10 -0
  122. package/build/native-tabs/common/elements.d.ts.map +1 -1
  123. package/build/native-tabs/common/elements.js.map +1 -1
  124. package/build/native-tabs/types.d.ts +6 -0
  125. package/build/native-tabs/types.d.ts.map +1 -1
  126. package/build/native-tabs/types.js.map +1 -1
  127. package/build/native-tabs/utils/icon.d.ts +2 -0
  128. package/build/native-tabs/utils/icon.d.ts.map +1 -1
  129. package/build/native-tabs/utils/icon.js +3 -0
  130. package/build/native-tabs/utils/icon.js.map +1 -1
  131. package/build/navigationEvents/index.d.ts +7 -24
  132. package/build/navigationEvents/index.d.ts.map +1 -1
  133. package/build/navigationEvents/index.js +47 -12
  134. package/build/navigationEvents/index.js.map +1 -1
  135. package/build/navigationEvents/types.d.ts +23 -0
  136. package/build/navigationEvents/types.d.ts.map +1 -0
  137. package/build/navigationEvents/types.js +3 -0
  138. package/build/navigationEvents/types.js.map +1 -0
  139. package/build/navigationEvents/utils.d.ts +9 -0
  140. package/build/navigationEvents/utils.d.ts.map +1 -0
  141. package/build/navigationEvents/utils.js +25 -0
  142. package/build/navigationEvents/utils.js.map +1 -0
  143. package/build/primitives/types.d.ts +6 -6
  144. package/build/primitives/types.d.ts.map +1 -1
  145. package/build/primitives/types.js.map +1 -1
  146. package/build/screensFeatureFlags.d.ts +2 -0
  147. package/build/screensFeatureFlags.d.ts.map +1 -0
  148. package/build/screensFeatureFlags.js +20 -0
  149. package/build/screensFeatureFlags.js.map +1 -0
  150. package/build/toolbar/native.types.d.ts +0 -14
  151. package/build/toolbar/native.types.d.ts.map +1 -1
  152. package/build/toolbar/native.types.js.map +1 -1
  153. package/build/ui/TabRouter.d.ts +14 -2
  154. package/build/ui/TabRouter.d.ts.map +1 -1
  155. package/build/ui/TabRouter.js +34 -4
  156. package/build/ui/TabRouter.js.map +1 -1
  157. package/build/useScreens.d.ts.map +1 -1
  158. package/build/useScreens.js +30 -15
  159. package/build/useScreens.js.map +1 -1
  160. package/expo-module.config.json +1 -1
  161. package/ios/LinkPreview/LinkPreviewNativeActionView.swift +18 -2
  162. package/ios/LinkPreview/LinkPreviewNativeModule.swift +3 -0
  163. package/ios/LinkPreview/LinkPreviewNativeNavigation.swift +2 -2
  164. package/ios/LinkPreview/LinkZoomTransition.swift +2 -2
  165. package/ios/Toolbar/RouterToolbarHostView.swift +68 -43
  166. package/ios/Toolbar/RouterToolbarItemView.swift +89 -21
  167. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.module → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.module} +7 -7
  168. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.module.md5 +1 -0
  169. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.module.sha1 +1 -0
  170. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.module.sha256 +1 -0
  171. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.module.sha512 +1 -0
  172. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.pom → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.pom} +1 -1
  173. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.pom.md5 +1 -0
  174. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.pom.sha1 +1 -0
  175. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.pom.sha256 +1 -0
  176. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.pom.sha512 +1 -0
  177. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  178. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  179. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  180. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  181. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  182. package/package.json +11 -13
  183. package/plugin/build/index.js +1 -1
  184. package/plugin/options.json +5 -0
  185. package/plugin/src/index.ts +1 -1
  186. package/build/layouts/stack-utils/StackHeaderBackButton.d.ts +0 -14
  187. package/build/layouts/stack-utils/StackHeaderBackButton.d.ts.map +0 -1
  188. package/build/layouts/stack-utils/StackHeaderBackButton.js +0 -19
  189. package/build/layouts/stack-utils/StackHeaderBackButton.js.map +0 -1
  190. package/build/layouts/stack-utils/StackHeaderButton.d.ts +0 -114
  191. package/build/layouts/stack-utils/StackHeaderButton.d.ts.map +0 -1
  192. package/build/layouts/stack-utils/StackHeaderButton.js +0 -49
  193. package/build/layouts/stack-utils/StackHeaderButton.js.map +0 -1
  194. package/build/layouts/stack-utils/StackHeaderLeftRight.d.ts +0 -119
  195. package/build/layouts/stack-utils/StackHeaderLeftRight.d.ts.map +0 -1
  196. package/build/layouts/stack-utils/StackHeaderLeftRight.js +0 -206
  197. package/build/layouts/stack-utils/StackHeaderLeftRight.js.map +0 -1
  198. package/build/layouts/stack-utils/StackHeaderMenu.d.ts.map +0 -1
  199. package/build/layouts/stack-utils/StackHeaderMenu.js +0 -214
  200. package/build/layouts/stack-utils/StackHeaderMenu.js.map +0 -1
  201. package/build/layouts/stack-utils/StackHeaderSpacer.d.ts +0 -46
  202. package/build/layouts/stack-utils/StackHeaderSpacer.d.ts.map +0 -1
  203. package/build/layouts/stack-utils/StackHeaderSpacer.js +0 -44
  204. package/build/layouts/stack-utils/StackHeaderSpacer.js.map +0 -1
  205. package/build/layouts/stack-utils/StackHeaderTitle.d.ts +0 -22
  206. package/build/layouts/stack-utils/StackHeaderTitle.d.ts.map +0 -1
  207. package/build/layouts/stack-utils/StackHeaderTitle.js +0 -36
  208. package/build/layouts/stack-utils/StackHeaderTitle.js.map +0 -1
  209. package/build/layouts/stack-utils/StackHeaderView.d.ts.map +0 -1
  210. package/build/layouts/stack-utils/StackHeaderView.js +0 -56
  211. package/build/layouts/stack-utils/StackHeaderView.js.map +0 -1
  212. package/build/toolbar/elements.d.ts +0 -417
  213. package/build/toolbar/elements.d.ts.map +0 -1
  214. package/build/toolbar/elements.js +0 -188
  215. package/build/toolbar/elements.js.map +0 -1
  216. package/build/toolbar/index.d.ts +0 -42
  217. package/build/toolbar/index.d.ts.map +0 -1
  218. package/build/toolbar/index.js +0 -49
  219. package/build/toolbar/index.js.map +0 -1
  220. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.module.md5 +0 -1
  221. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.module.sha1 +0 -1
  222. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.module.sha256 +0 -1
  223. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.module.sha512 +0 -1
  224. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.pom.md5 +0 -1
  225. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.pom.sha1 +0 -1
  226. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.pom.sha256 +0 -1
  227. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.pom.sha512 +0 -1
  228. package/unstable-toolbar.d.ts +0 -1
  229. package/unstable-toolbar.js +0 -1
  230. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5-sources.jar → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28-sources.jar} +0 -0
  231. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5-sources.jar.md5 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28-sources.jar.md5} +0 -0
  232. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5-sources.jar.sha1 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28-sources.jar.sha1} +0 -0
  233. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5-sources.jar.sha256 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28-sources.jar.sha256} +0 -0
  234. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5-sources.jar.sha512 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28-sources.jar.sha512} +0 -0
  235. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.aar → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.aar} +0 -0
  236. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.aar.md5 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.aar.md5} +0 -0
  237. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.aar.sha1 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.aar.sha1} +0 -0
  238. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.aar.sha256 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.aar.sha256} +0 -0
  239. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20260114-d8e19f5/expo.modules.router-7.0.0-canary-20260114-d8e19f5.aar.sha512 → 7.0.0-canary-20260119-70f7c28/expo.modules.router-7.0.0-canary-20260119-70f7c28.aar.sha512} +0 -0
@@ -0,0 +1,104 @@
1
+ import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
2
+ import React, { type ReactNode } from 'react';
3
+ import { type ToolbarPlacement } from './context';
4
+ export interface StackToolbarProps {
5
+ /**
6
+ * Child elements to compose the toolbar. Can include Stack.Toolbar.Button,
7
+ * Stack.Toolbar.Menu, Stack.Toolbar.View, Stack.Toolbar.Spacer, and
8
+ * Stack.Toolbar.SearchBarSlot (bottom only) components.
9
+ */
10
+ children?: ReactNode;
11
+ /**
12
+ * The placement of the toolbar.
13
+ *
14
+ * - `'left'`: Renders items in the left area of the header.
15
+ * - `'right'`: Renders items in the right area of the header.
16
+ * - `'bottom'`: Renders items in the bottom toolbar (iOS only).
17
+ *
18
+ * @default 'bottom'
19
+ */
20
+ placement?: ToolbarPlacement;
21
+ /**
22
+ * When `true`, renders children as a custom component in the header area,
23
+ * replacing the default header layout.
24
+ *
25
+ * Only applies to `placement="left"` and `placement="right"`.
26
+ *
27
+ * @default false
28
+ */
29
+ asChild?: boolean;
30
+ }
31
+ /**
32
+ * The component used to configure the stack toolbar.
33
+ *
34
+ * - Use `placement="left"` to customize the left side of the header.
35
+ * - Use `placement="right"` to customize the right side of the header.
36
+ * - Use `placement="bottom"` (default) to show a bottom toolbar (iOS only).
37
+ *
38
+ * > **Note:** Using `Stack.Toolbar` with `placement="left"` or `placement="right"` will
39
+ * automatically make the header visible (`headerShown: true`), as the toolbar is rendered
40
+ * as part of the native header.
41
+ *
42
+ * > **Note:** `Stack.Toolbar` with `placement="bottom"` can only be used inside **page**
43
+ * components, not in layout components.
44
+ *
45
+ * > **Note**: Stack.Toolbar is an experimental API and may change without notice.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * import { Stack } from 'expo-router';
50
+ *
51
+ * export default function Layout() {
52
+ * return (
53
+ * <Stack>
54
+ * <Stack.Screen name="index">
55
+ * <Stack.Toolbar placement="left">
56
+ * <Stack.Toolbar.Button icon="sidebar.left" onPress={() => alert('Left button pressed!')} />
57
+ * </Stack.Toolbar>
58
+ * <Stack.Toolbar placement="right">
59
+ * <Stack.Toolbar.Button icon="ellipsis.circle" onPress={() => alert('Right button pressed!')} />
60
+ * </Stack.Toolbar>
61
+ * </Stack.Screen>
62
+ * </Stack>
63
+ * );
64
+ * }
65
+ * ```
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * import { Stack } from 'expo-router';
70
+ *
71
+ * export default function Page() {
72
+ * return (
73
+ * <>
74
+ * <Stack.Toolbar placement="left">
75
+ * <Stack.Toolbar.Button icon="sidebar.left" onPress={() => alert('Left button pressed!')} />
76
+ * </Stack.Toolbar>
77
+ * <Stack.Toolbar>
78
+ * <Stack.Toolbar.Spacer />
79
+ * <Stack.Toolbar.Button icon="magnifyingglass" onPress={() => {}} />
80
+ * <Stack.Toolbar.Spacer />
81
+ * </Stack.Toolbar>
82
+ * <ScreenContent />
83
+ * </>
84
+ * );
85
+ * }
86
+ * ```
87
+ *
88
+ * @platform ios
89
+ */
90
+ export declare const StackToolbar: {
91
+ ({ children, placement, asChild }: StackToolbarProps): React.JSX.Element;
92
+ Button: React.FC<import("./StackToolbarButton").StackToolbarButtonProps>;
93
+ Menu: React.FC<import("./StackToolbarMenu").StackToolbarMenuProps>;
94
+ MenuAction: React.FC<import("./StackToolbarMenu").StackToolbarMenuActionProps>;
95
+ SearchBarSlot: React.FC<import("./StackToolbarSearchBarSlot").StackToolbarSearchBarSlotProps>;
96
+ Spacer: React.FC<import("./StackToolbarSpacer").StackToolbarSpacerProps>;
97
+ View: React.FC<import("./StackToolbarView").StackToolbarViewProps>;
98
+ Label: React.FC<import("../common-primitives").StackToolbarLabelProps>;
99
+ Icon: React.FC<import("../common-primitives").StackToolbarIconProps>;
100
+ Badge: React.FC<import("../common-primitives").StackToolbarBadgeProps>;
101
+ };
102
+ export declare function appendStackToolbarPropsToOptions(options: NativeStackNavigationOptions, props: StackToolbarProps): NativeStackNavigationOptions;
103
+ export default StackToolbar;
104
+ //# sourceMappingURL=StackToolbarClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackToolbarClient.d.ts","sourceRoot":"","sources":["../../../../src/layouts/stack-utils/toolbar/StackToolbarClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAkBxE,OAAO,EAAgD,KAAK,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAOhG,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,eAAO,MAAM,YAAY;uCAAiD,iBAAiB;;;;;;;;;;CA4B1F,CAAC;AAiDF,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,iBAAiB,GACvB,4BAA4B,CAqC9B;AAYD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ 'use client';
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.StackToolbar = void 0;
38
+ exports.appendStackToolbarPropsToOptions = appendStackToolbarPropsToOptions;
39
+ const react_1 = __importStar(require("react"));
40
+ const react_2 = require("react");
41
+ const StackToolbarButton_1 = require("./StackToolbarButton");
42
+ const StackToolbarMenu_1 = require("./StackToolbarMenu");
43
+ const StackToolbarSearchBarSlot_1 = require("./StackToolbarSearchBarSlot");
44
+ const StackToolbarSpacer_1 = require("./StackToolbarSpacer");
45
+ const StackToolbarView_1 = require("./StackToolbarView");
46
+ const context_1 = require("./context");
47
+ const NativeMenuContext_1 = require("../../../link/NativeMenuContext");
48
+ const native_1 = require("../../../toolbar/native");
49
+ const children_1 = require("../../../utils/children");
50
+ const Screen_1 = require("../../../views/Screen");
51
+ const common_primitives_1 = require("../common-primitives");
52
+ /**
53
+ * The component used to configure the stack toolbar.
54
+ *
55
+ * - Use `placement="left"` to customize the left side of the header.
56
+ * - Use `placement="right"` to customize the right side of the header.
57
+ * - Use `placement="bottom"` (default) to show a bottom toolbar (iOS only).
58
+ *
59
+ * > **Note:** Using `Stack.Toolbar` with `placement="left"` or `placement="right"` will
60
+ * automatically make the header visible (`headerShown: true`), as the toolbar is rendered
61
+ * as part of the native header.
62
+ *
63
+ * > **Note:** `Stack.Toolbar` with `placement="bottom"` can only be used inside **page**
64
+ * components, not in layout components.
65
+ *
66
+ * > **Note**: Stack.Toolbar is an experimental API and may change without notice.
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * import { Stack } from 'expo-router';
71
+ *
72
+ * export default function Layout() {
73
+ * return (
74
+ * <Stack>
75
+ * <Stack.Screen name="index">
76
+ * <Stack.Toolbar placement="left">
77
+ * <Stack.Toolbar.Button icon="sidebar.left" onPress={() => alert('Left button pressed!')} />
78
+ * </Stack.Toolbar>
79
+ * <Stack.Toolbar placement="right">
80
+ * <Stack.Toolbar.Button icon="ellipsis.circle" onPress={() => alert('Right button pressed!')} />
81
+ * </Stack.Toolbar>
82
+ * </Stack.Screen>
83
+ * </Stack>
84
+ * );
85
+ * }
86
+ * ```
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * import { Stack } from 'expo-router';
91
+ *
92
+ * export default function Page() {
93
+ * return (
94
+ * <>
95
+ * <Stack.Toolbar placement="left">
96
+ * <Stack.Toolbar.Button icon="sidebar.left" onPress={() => alert('Left button pressed!')} />
97
+ * </Stack.Toolbar>
98
+ * <Stack.Toolbar>
99
+ * <Stack.Toolbar.Spacer />
100
+ * <Stack.Toolbar.Button icon="magnifyingglass" onPress={() => {}} />
101
+ * <Stack.Toolbar.Spacer />
102
+ * </Stack.Toolbar>
103
+ * <ScreenContent />
104
+ * </>
105
+ * );
106
+ * }
107
+ * ```
108
+ *
109
+ * @platform ios
110
+ */
111
+ const StackToolbar = ({ children, placement = 'bottom', asChild }) => {
112
+ const parentPlacement = (0, context_1.useToolbarPlacement)();
113
+ if (parentPlacement) {
114
+ throw new Error(`Stack.Toolbar cannot be nested inside another Stack.Toolbar.`);
115
+ }
116
+ if (placement === 'bottom') {
117
+ return (<context_1.ToolbarPlacementContext.Provider value="bottom">
118
+ <NativeMenuContext_1.NativeMenuContext value>
119
+ <native_1.RouterToolbarHost>{children}</native_1.RouterToolbarHost>
120
+ </NativeMenuContext_1.NativeMenuContext>
121
+ </context_1.ToolbarPlacementContext.Provider>);
122
+ }
123
+ // placement === 'left' or 'right'
124
+ // This component will only render when used inside a page
125
+ // eslint-disable-next-line react-hooks/rules-of-hooks
126
+ const updatedOptions = (0, react_2.useMemo)(() => appendStackToolbarPropsToOptions({}, { children, placement, asChild }), [children, placement, asChild]);
127
+ return (<context_1.ToolbarPlacementContext.Provider value={placement}>
128
+ <Screen_1.Screen options={updatedOptions}/>
129
+ </context_1.ToolbarPlacementContext.Provider>);
130
+ };
131
+ exports.StackToolbar = StackToolbar;
132
+ function convertToolbarChildrenToUnstableItems(children, side) {
133
+ const allChildren = react_1.default.Children.toArray(children);
134
+ const actions = allChildren.filter((child) => (0, children_1.isChildOfType)(child, StackToolbarButton_1.StackToolbarButton) ||
135
+ (0, children_1.isChildOfType)(child, StackToolbarMenu_1.StackToolbarMenu) ||
136
+ (0, children_1.isChildOfType)(child, StackToolbarSpacer_1.StackToolbarSpacer) ||
137
+ (0, children_1.isChildOfType)(child, StackToolbarView_1.StackToolbarView));
138
+ if (actions.length !== allChildren.length && process.env.NODE_ENV !== 'production') {
139
+ const otherElements = allChildren
140
+ .filter((child) => !actions.some((action) => action === child))
141
+ .map((e) => {
142
+ if ((0, react_1.isValidElement)(e)) {
143
+ if (e.type === react_1.Fragment) {
144
+ return '<Fragment>';
145
+ }
146
+ else {
147
+ return e.type?.name ?? e.type;
148
+ }
149
+ }
150
+ return String(e);
151
+ });
152
+ console.warn(`Stack.Toolbar with placement="${side}" only accepts <Stack.Toolbar.Button>, <Stack.Toolbar.Menu>, <Stack.Toolbar.View>, and <Stack.Toolbar.Spacer> as children. Found invalid children: ${otherElements.join(', ')}`);
153
+ }
154
+ return () => actions
155
+ .map((action) => {
156
+ if ((0, children_1.isChildOfType)(action, StackToolbarButton_1.StackToolbarButton)) {
157
+ return (0, StackToolbarButton_1.convertStackToolbarButtonPropsToRNHeaderItem)(action.props);
158
+ }
159
+ else if ((0, children_1.isChildOfType)(action, StackToolbarMenu_1.StackToolbarMenu)) {
160
+ return (0, StackToolbarMenu_1.convertStackToolbarMenuPropsToRNHeaderItem)(action.props);
161
+ }
162
+ else if ((0, children_1.isChildOfType)(action, StackToolbarSpacer_1.StackToolbarSpacer)) {
163
+ return (0, StackToolbarSpacer_1.convertStackToolbarSpacerPropsToRNHeaderItem)(action.props);
164
+ }
165
+ return (0, StackToolbarView_1.convertStackToolbarViewPropsToRNHeaderItem)(action.props);
166
+ })
167
+ .filter((item) => !!item);
168
+ }
169
+ function appendStackToolbarPropsToOptions(options, props) {
170
+ const { children, placement = 'bottom', asChild } = props;
171
+ if (placement === 'bottom') {
172
+ // Bottom toolbar doesn't modify navigation options
173
+ return options;
174
+ }
175
+ if (asChild) {
176
+ if (placement === 'left') {
177
+ return {
178
+ ...options,
179
+ headerShown: true,
180
+ headerLeft: () => children,
181
+ };
182
+ }
183
+ else {
184
+ return {
185
+ ...options,
186
+ headerShown: true,
187
+ headerRight: () => children,
188
+ };
189
+ }
190
+ }
191
+ if (placement === 'left') {
192
+ return {
193
+ ...options,
194
+ headerShown: true,
195
+ unstable_headerLeftItems: convertToolbarChildrenToUnstableItems(children, 'left'),
196
+ };
197
+ }
198
+ return {
199
+ ...options,
200
+ headerShown: true,
201
+ unstable_headerRightItems: convertToolbarChildrenToUnstableItems(children, 'right'),
202
+ };
203
+ }
204
+ exports.StackToolbar.Button = StackToolbarButton_1.StackToolbarButton;
205
+ exports.StackToolbar.Menu = StackToolbarMenu_1.StackToolbarMenu;
206
+ exports.StackToolbar.MenuAction = StackToolbarMenu_1.StackToolbarMenuAction;
207
+ exports.StackToolbar.SearchBarSlot = StackToolbarSearchBarSlot_1.StackToolbarSearchBarSlot;
208
+ exports.StackToolbar.Spacer = StackToolbarSpacer_1.StackToolbarSpacer;
209
+ exports.StackToolbar.View = StackToolbarView_1.StackToolbarView;
210
+ exports.StackToolbar.Label = common_primitives_1.StackToolbarLabel;
211
+ exports.StackToolbar.Icon = common_primitives_1.StackToolbarIcon;
212
+ exports.StackToolbar.Badge = common_primitives_1.StackToolbarBadge;
213
+ exports.default = exports.StackToolbar;
214
+ //# sourceMappingURL=StackToolbarClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackToolbarClient.js","sourceRoot":"","sources":["../../../../src/layouts/stack-utils/toolbar/StackToolbarClient.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport React, { Fragment, isValidElement, type ReactNode } from 'react';\nimport { useMemo } from 'react';\n\nimport {\n convertStackToolbarButtonPropsToRNHeaderItem,\n StackToolbarButton,\n} from './StackToolbarButton';\nimport {\n convertStackToolbarMenuPropsToRNHeaderItem,\n StackToolbarMenu,\n StackToolbarMenuAction,\n} from './StackToolbarMenu';\nimport { StackToolbarSearchBarSlot } from './StackToolbarSearchBarSlot';\nimport {\n convertStackToolbarSpacerPropsToRNHeaderItem,\n StackToolbarSpacer,\n} from './StackToolbarSpacer';\nimport { convertStackToolbarViewPropsToRNHeaderItem, StackToolbarView } from './StackToolbarView';\nimport { ToolbarPlacementContext, useToolbarPlacement, type ToolbarPlacement } from './context';\nimport { NativeMenuContext } from '../../../link/NativeMenuContext';\nimport { RouterToolbarHost } from '../../../toolbar/native';\nimport { isChildOfType } from '../../../utils/children';\nimport { Screen } from '../../../views/Screen';\nimport { StackToolbarBadge, StackToolbarIcon, StackToolbarLabel } from '../common-primitives';\n\nexport interface StackToolbarProps {\n /**\n * Child elements to compose the toolbar. Can include Stack.Toolbar.Button,\n * Stack.Toolbar.Menu, Stack.Toolbar.View, Stack.Toolbar.Spacer, and\n * Stack.Toolbar.SearchBarSlot (bottom only) components.\n */\n children?: ReactNode;\n /**\n * The placement of the toolbar.\n *\n * - `'left'`: Renders items in the left area of the header.\n * - `'right'`: Renders items in the right area of the header.\n * - `'bottom'`: Renders items in the bottom toolbar (iOS only).\n *\n * @default 'bottom'\n */\n placement?: ToolbarPlacement;\n /**\n * When `true`, renders children as a custom component in the header area,\n * replacing the default header layout.\n *\n * Only applies to `placement=\"left\"` and `placement=\"right\"`.\n *\n * @default false\n */\n asChild?: boolean;\n}\n\n/**\n * The component used to configure the stack toolbar.\n *\n * - Use `placement=\"left\"` to customize the left side of the header.\n * - Use `placement=\"right\"` to customize the right side of the header.\n * - Use `placement=\"bottom\"` (default) to show a bottom toolbar (iOS only).\n *\n * > **Note:** Using `Stack.Toolbar` with `placement=\"left\"` or `placement=\"right\"` will\n * automatically make the header visible (`headerShown: true`), as the toolbar is rendered\n * as part of the native header.\n *\n * > **Note:** `Stack.Toolbar` with `placement=\"bottom\"` can only be used inside **page**\n * components, not in layout components.\n *\n * > **Note**: Stack.Toolbar is an experimental API and may change without notice.\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Layout() {\n * return (\n * <Stack>\n * <Stack.Screen name=\"index\">\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button icon=\"sidebar.left\" onPress={() => alert('Left button pressed!')} />\n * </Stack.Toolbar>\n * <Stack.Toolbar placement=\"right\">\n * <Stack.Toolbar.Button icon=\"ellipsis.circle\" onPress={() => alert('Right button pressed!')} />\n * </Stack.Toolbar>\n * </Stack.Screen>\n * </Stack>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Toolbar placement=\"left\">\n * <Stack.Toolbar.Button icon=\"sidebar.left\" onPress={() => alert('Left button pressed!')} />\n * </Stack.Toolbar>\n * <Stack.Toolbar>\n * <Stack.Toolbar.Spacer />\n * <Stack.Toolbar.Button icon=\"magnifyingglass\" onPress={() => {}} />\n * <Stack.Toolbar.Spacer />\n * </Stack.Toolbar>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\n *\n * @platform ios\n */\nexport const StackToolbar = ({ children, placement = 'bottom', asChild }: StackToolbarProps) => {\n const parentPlacement = useToolbarPlacement();\n if (parentPlacement) {\n throw new Error(`Stack.Toolbar cannot be nested inside another Stack.Toolbar.`);\n }\n\n if (placement === 'bottom') {\n return (\n <ToolbarPlacementContext.Provider value=\"bottom\">\n <NativeMenuContext value>\n <RouterToolbarHost>{children}</RouterToolbarHost>\n </NativeMenuContext>\n </ToolbarPlacementContext.Provider>\n );\n }\n\n // placement === 'left' or 'right'\n // This component will only render when used inside a page\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const updatedOptions = useMemo(\n () => appendStackToolbarPropsToOptions({}, { children, placement, asChild }),\n [children, placement, asChild]\n );\n return (\n <ToolbarPlacementContext.Provider value={placement}>\n <Screen options={updatedOptions} />\n </ToolbarPlacementContext.Provider>\n );\n};\n\nfunction convertToolbarChildrenToUnstableItems(\n children: React.ReactNode,\n side: 'left' | 'right'\n):\n | NativeStackNavigationOptions['unstable_headerRightItems']\n | NativeStackNavigationOptions['unstable_headerLeftItems'] {\n const allChildren = React.Children.toArray(children);\n const actions = allChildren.filter(\n (child) =>\n isChildOfType(child, StackToolbarButton) ||\n isChildOfType(child, StackToolbarMenu) ||\n isChildOfType(child, StackToolbarSpacer) ||\n isChildOfType(child, StackToolbarView)\n );\n if (actions.length !== allChildren.length && process.env.NODE_ENV !== 'production') {\n const otherElements = allChildren\n .filter((child) => !actions.some((action) => action === child))\n .map((e) => {\n if (isValidElement(e)) {\n if (e.type === Fragment) {\n return '<Fragment>';\n } else {\n return (e.type as { name: string })?.name ?? e.type;\n }\n }\n\n return String(e);\n });\n console.warn(\n `Stack.Toolbar with placement=\"${side}\" only accepts <Stack.Toolbar.Button>, <Stack.Toolbar.Menu>, <Stack.Toolbar.View>, and <Stack.Toolbar.Spacer> as children. Found invalid children: ${otherElements.join(', ')}`\n );\n }\n return () =>\n actions\n .map((action) => {\n if (isChildOfType(action, StackToolbarButton)) {\n return convertStackToolbarButtonPropsToRNHeaderItem(action.props);\n } else if (isChildOfType(action, StackToolbarMenu)) {\n return convertStackToolbarMenuPropsToRNHeaderItem(action.props);\n } else if (isChildOfType(action, StackToolbarSpacer)) {\n return convertStackToolbarSpacerPropsToRNHeaderItem(action.props);\n }\n return convertStackToolbarViewPropsToRNHeaderItem(action.props);\n })\n .filter((item) => !!item);\n}\n\nexport function appendStackToolbarPropsToOptions(\n options: NativeStackNavigationOptions,\n props: StackToolbarProps\n): NativeStackNavigationOptions {\n const { children, placement = 'bottom', asChild } = props;\n\n if (placement === 'bottom') {\n // Bottom toolbar doesn't modify navigation options\n return options;\n }\n\n if (asChild) {\n if (placement === 'left') {\n return {\n ...options,\n headerShown: true,\n headerLeft: () => children,\n };\n } else {\n return {\n ...options,\n headerShown: true,\n headerRight: () => children,\n };\n }\n }\n\n if (placement === 'left') {\n return {\n ...options,\n headerShown: true,\n unstable_headerLeftItems: convertToolbarChildrenToUnstableItems(children, 'left'),\n };\n }\n\n return {\n ...options,\n headerShown: true,\n unstable_headerRightItems: convertToolbarChildrenToUnstableItems(children, 'right'),\n };\n}\n\nStackToolbar.Button = StackToolbarButton;\nStackToolbar.Menu = StackToolbarMenu;\nStackToolbar.MenuAction = StackToolbarMenuAction;\nStackToolbar.SearchBarSlot = StackToolbarSearchBarSlot;\nStackToolbar.Spacer = StackToolbarSpacer;\nStackToolbar.View = StackToolbarView;\nStackToolbar.Label = StackToolbarLabel;\nStackToolbar.Icon = StackToolbarIcon;\nStackToolbar.Badge = StackToolbarBadge;\n\nexport default StackToolbar;\n"]}
@@ -1,38 +1,23 @@
1
1
  import type { NativeStackHeaderItemMenu, NativeStackHeaderItemMenuAction } from '@react-navigation/native-stack';
2
+ import type { ImageRef } from 'expo-image';
2
3
  import { type ReactNode } from 'react';
3
4
  import type { ImageSourcePropType } from 'react-native';
4
5
  import type { SFSymbol } from 'sf-symbols-typescript';
5
- import { type StackHeaderItemSharedProps } from './shared';
6
- export interface StackHeaderMenuProps {
6
+ import { type StackHeaderItemSharedProps } from '../shared';
7
+ export interface StackToolbarMenuProps {
7
8
  accessibilityLabel?: string;
8
9
  accessibilityHint?: string;
9
10
  /**
10
- * There are two ways to specify the content of the menu header item - using props or child components:
11
+ * Menu content - can include icons, labels, badges and menu actions.
11
12
  *
12
13
  * @example
13
14
  * ```tsx
14
- * import { Stack } from 'expo-router';
15
- *
16
- * ...
17
- * <Stack.Header.Menu icon="star.fill" title="As props">
18
- * <Stack.Header.MenuAction>Action 1</Stack.Header.MenuAction>
19
- * </Stack.Header.Menu>
15
+ * <Stack.Toolbar.Menu>
16
+ * <Stack.Toolbar.Icon sfSymbol="ellipsis.circle" />
17
+ * <Stack.Toolbar.Label>Options</Stack.Toolbar.Label>
18
+ * <Stack.Toolbar.MenuAction onPress={() => {}}>Action 1</Stack.Toolbar.MenuAction>
19
+ * </Stack.Toolbar.Menu>
20
20
  * ```
21
- *
22
- * @example
23
- * ```tsx
24
- * import { Stack } from 'expo-router';
25
- *
26
- * ...
27
- * <Stack.Header.Menu>
28
- * <Stack.Header.Icon sf="star.fill" />
29
- * <Stack.Header.Label>As components</Stack.Header.Label>
30
- * <Stack.Header.Badge>3</Stack.Header.Badge>
31
- * <Stack.Header.MenuAction>Action 1</Stack.Header.MenuAction>
32
- * </Stack.Header.Menu>
33
- * ```
34
- *
35
- * **Note**: When icon is used, the label will not be shown and will be used for accessibility purposes only.
36
21
  */
37
22
  children?: ReactNode;
38
23
  /**
@@ -42,6 +27,12 @@ export interface StackHeaderMenuProps {
42
27
  */
43
28
  destructive?: boolean;
44
29
  disabled?: boolean;
30
+ /**
31
+ * Image to display for the menu item.
32
+ *
33
+ * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.
34
+ */
35
+ image?: ImageRef;
45
36
  /**
46
37
  * Whether to hide the shared background.
47
38
  *
@@ -66,7 +57,7 @@ export interface StackHeaderMenuProps {
66
57
  * If `true`, the menu will be displayed inline.
67
58
  * This means that the menu will not be collapsed
68
59
  *
69
- * > **Note*: Inline menus are only supported in submenus.
60
+ * > **Note**: Inline menus are only supported in submenus.
70
61
  *
71
62
  * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.
72
63
  */
@@ -104,12 +95,20 @@ export interface StackHeaderMenuProps {
104
95
  * @default 'plain'
105
96
  */
106
97
  variant?: StackHeaderItemSharedProps['variant'];
98
+ /**
99
+ * The preferred size of the menu elements.
100
+ *
101
+ * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.
102
+ *
103
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/preferredelementsize) for more information.
104
+ *
105
+ * @platform iOS 16.0+
106
+ */
107
+ elementSize?: 'auto' | 'small' | 'medium' | 'large';
107
108
  }
108
109
  /**
109
- * Component representing menu for `Stack.Header.Right` or `Stack.Header.Left`.
110
- *
111
- * Use as `Stack.Header.Menu` to provide top-level menus on iOS header bars.
112
- * It accepts `Stack.Header.MenuAction` and nested `Stack.Header.Menu`
110
+ * Use as `Stack.Toolbar.Menu` to provide menus in iOS toolbar.
111
+ * It accepts `Stack.Toolbar.MenuAction` and nested `Stack.Toolbar.Menu`
113
112
  * elements. Menu can be configured using both component props and child
114
113
  * elements.
115
114
  *
@@ -118,58 +117,17 @@ export interface StackHeaderMenuProps {
118
117
  * import { Stack } from 'expo-router';
119
118
  * import { Alert } from 'react-native';
120
119
  *
121
- * export default function Screen() {
120
+ * export default function Page() {
122
121
  * return (
123
122
  * <>
123
+ * <Stack.Toolbar placement="right">
124
+ * <Stack.Toolbar.Menu icon="ellipsis.circle">
125
+ * <Stack.Toolbar.MenuAction onPress={() => Alert.alert('Action pressed!')}>
126
+ * Action 1
127
+ * </Stack.Toolbar.MenuAction>
128
+ * </Stack.Toolbar.Menu>
129
+ * </Stack.Toolbar>
124
130
  * <ScreenContent />
125
- * <Stack.Screen>
126
- * <Stack.Header>
127
- * <Stack.Header.Right>
128
- * <Stack.Header.Menu>
129
- * <Stack.Header.Label>Menu</Stack.Header.Label>
130
- * <Stack.Header.Icon sf="ellipsis.circle" />
131
- * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
132
- * Action 1
133
- * </Stack.Header.MenuAction>
134
- * <Stack.Header.MenuAction isOn icon="star.fill">
135
- * Action 2
136
- * </Stack.Header.MenuAction>
137
- * <Stack.Header.Menu inline>
138
- * <Stack.Header.MenuAction isOn>Sub Action</Stack.Header.MenuAction>
139
- * </Stack.Header.Menu>
140
- * </Stack.Header.Menu>
141
- * </Stack.Header.Right>
142
- * </Stack.Header>
143
- * </Stack.Screen>
144
- * </>
145
- * );
146
- * }
147
- * ```
148
- *
149
- * @example
150
- * ```tsx
151
- * import { Stack } from 'expo-router';
152
- * import { Text } from 'react-native';
153
- *
154
- * export default function Screen() {
155
- * return (
156
- * <>
157
- * <ScreenContent />
158
- * <Stack.Screen>
159
- * <Stack.Header>
160
- * <Stack.Header.Left>
161
- * <Stack.Header.Menu>
162
- * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
163
- * Action 1
164
- * </Stack.Header.MenuAction>
165
- * <Stack.Header.Menu inline palette title="Icons">
166
- * <Stack.Header.MenuAction isOn icon="star.fill" />
167
- * <Stack.Header.MenuAction icon="heart.fill" />
168
- * </Stack.Header.Menu>
169
- * </Stack.Header.Menu>
170
- * </Stack.Header.Left>
171
- * </Stack.Header>
172
- * </Stack.Screen>
173
131
  * </>
174
132
  * );
175
133
  * }
@@ -179,9 +137,9 @@ export interface StackHeaderMenuProps {
179
137
  *
180
138
  * @platform ios
181
139
  */
182
- export declare const StackHeaderMenu: React.FC<StackHeaderMenuProps>;
183
- export declare function convertStackHeaderMenuPropsToRNHeaderItem(props: StackHeaderMenuProps): NativeStackHeaderItemMenu | undefined;
184
- export interface StackHeaderMenuActionProps {
140
+ export declare const StackToolbarMenu: React.FC<StackToolbarMenuProps>;
141
+ export declare function convertStackToolbarMenuPropsToRNHeaderItem(props: StackToolbarMenuProps): NativeStackHeaderItemMenu | undefined;
142
+ export interface StackToolbarMenuActionProps {
185
143
  /**
186
144
  * Can be an Icon, Label or string title.
187
145
  */
@@ -193,6 +151,12 @@ export interface StackHeaderMenuActionProps {
193
151
  */
194
152
  disabled?: boolean;
195
153
  icon?: SFSymbol | ImageSourcePropType;
154
+ /**
155
+ * Image to display for the menu action.
156
+ *
157
+ * > **Note**: This prop is only supported in `Stack.Toolbar.Bottom`.
158
+ */
159
+ image?: ImageRef;
196
160
  /**
197
161
  * If `true`, the menu item will be displayed as destructive.
198
162
  *
@@ -226,42 +190,30 @@ export interface StackHeaderMenuActionProps {
226
190
  hidden?: boolean;
227
191
  }
228
192
  /**
229
- * An action item for a `Stack.Header.Menu`.
193
+ * An action item for a `Stack.Toolbar.Menu`.
230
194
  *
231
195
  * @example
232
196
  * ```tsx
233
- * import React from 'react';
234
- * import { Alert } from 'react-native';
235
- * import { Stack, Label, Icon } from 'expo-router';
197
+ * import { Stack } from 'expo-router';
236
198
  *
237
- * export default function ExampleScreen() {
199
+ * export default function Page() {
238
200
  * return (
239
201
  * <>
202
+ * <Stack.Toolbar placement="right">
203
+ * <Stack.Toolbar.Menu icon="ellipsis.circle">
204
+ * <Stack.Toolbar.MenuAction onPress={() => alert('Action pressed!')}>
205
+ * Action 1
206
+ * </Stack.Toolbar.MenuAction>
207
+ * </Stack.Toolbar.Menu>
208
+ * </Stack.Toolbar>
240
209
  * <ScreenContent />
241
- * <Stack.Screen>
242
- * <Stack.Header>
243
- * <Stack.Header.Right>
244
- * <Stack.Header.Menu icon="ellipsis.circle">
245
- * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
246
- * Action 1
247
- * </Stack.Header.MenuAction>
248
- * <Stack.Header.MenuAction isOn onPress={() => Alert.alert('Action 2 pressed!')}>
249
- * <Label>Action 2</Label>
250
- * <Icon sf="star.fill" />
251
- * </Stack.Header.MenuAction>
252
- * </Stack.Header.Menu>
253
- * </Stack.Header.Right>
254
- * </Stack.Header>
255
- * </Stack.Screen>
256
210
  * </>
257
211
  * );
258
212
  * }
259
213
  * ```
260
214
  *
261
- * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.
262
- *
263
215
  * @platform ios
264
216
  */
265
- export declare const StackHeaderMenuAction: React.FC<StackHeaderMenuActionProps>;
266
- export declare function convertStackHeaderMenuActionPropsToRNHeaderItem(props: StackHeaderMenuActionProps): NativeStackHeaderItemMenuAction;
267
- //# sourceMappingURL=StackHeaderMenu.d.ts.map
217
+ export declare const StackToolbarMenuAction: React.FC<StackToolbarMenuActionProps>;
218
+ export declare function convertStackToolbarMenuActionPropsToRNHeaderItem(props: StackToolbarMenuActionProps): NativeStackHeaderItemMenuAction;
219
+ //# sourceMappingURL=StackToolbarMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackToolbarMenu.d.ts","sourceRoot":"","sources":["../../../../src/layouts/stack-utils/toolbar/StackToolbarMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,+BAA+B,EAEhC,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,KAAK,CAAC,EAAE,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAC5C;;;;OAIG;IACH,SAAS,CAAC,EAAE,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACpD;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,OAAO,CAAC,EAAE,0BAA0B,CAAC,SAAS,CAAC,CAAC;IAEhD;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA+B5D,CAAC;AAEF,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,qBAAqB,GAC3B,yBAAyB,GAAG,SAAS,CA4BvC;AAwDD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,mBAAmB,CAAC;IAEtC;;;;OAIG;IACH,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;OAOG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAUxE,CAAC;AAEF,wBAAgB,gDAAgD,CAC9D,KAAK,EAAE,2BAA2B,GACjC,+BAA+B,CAyBjC"}