expo-router 7.0.0-canary-20251211-7da85ea → 7.0.0-canary-20251216-6e1f9a7

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 (147) hide show
  1. package/android/build.gradle +2 -2
  2. package/build/exports.d.ts +1 -0
  3. package/build/exports.d.ts.map +1 -1
  4. package/build/exports.js +1 -0
  5. package/build/exports.js.map +1 -1
  6. package/build/layouts/StackClient.d.ts +9 -1
  7. package/build/layouts/StackClient.d.ts.map +1 -1
  8. package/build/layouts/stack-utils/StackHeaderButton.d.ts +39 -0
  9. package/build/layouts/stack-utils/StackHeaderButton.d.ts.map +1 -0
  10. package/build/layouts/stack-utils/StackHeaderButton.js +46 -0
  11. package/build/layouts/stack-utils/StackHeaderButton.js.map +1 -0
  12. package/build/layouts/stack-utils/StackHeaderComponent.d.ts.map +1 -1
  13. package/build/layouts/stack-utils/StackHeaderComponent.js +5 -6
  14. package/build/layouts/stack-utils/StackHeaderComponent.js.map +1 -1
  15. package/build/layouts/stack-utils/StackHeaderItem.d.ts +45 -0
  16. package/build/layouts/stack-utils/StackHeaderItem.d.ts.map +1 -0
  17. package/build/layouts/stack-utils/StackHeaderItem.js +52 -0
  18. package/build/layouts/stack-utils/StackHeaderItem.js.map +1 -0
  19. package/build/layouts/stack-utils/StackHeaderLeftRight.d.ts +15 -0
  20. package/build/layouts/stack-utils/StackHeaderLeftRight.d.ts.map +1 -0
  21. package/build/layouts/stack-utils/StackHeaderLeftRight.js +111 -0
  22. package/build/layouts/stack-utils/StackHeaderLeftRight.js.map +1 -0
  23. package/build/layouts/stack-utils/StackHeaderMenu.d.ts +191 -0
  24. package/build/layouts/stack-utils/StackHeaderMenu.d.ts.map +1 -0
  25. package/build/layouts/stack-utils/StackHeaderMenu.js +203 -0
  26. package/build/layouts/stack-utils/StackHeaderMenu.js.map +1 -0
  27. package/build/layouts/stack-utils/StackHeaderSpacer.d.ts +40 -0
  28. package/build/layouts/stack-utils/StackHeaderSpacer.d.ts.map +1 -0
  29. package/build/layouts/stack-utils/StackHeaderSpacer.js +41 -0
  30. package/build/layouts/stack-utils/StackHeaderSpacer.js.map +1 -0
  31. package/build/layouts/stack-utils/common-primitives.d.ts +24 -0
  32. package/build/layouts/stack-utils/common-primitives.d.ts.map +1 -0
  33. package/build/layouts/stack-utils/common-primitives.js +8 -0
  34. package/build/layouts/stack-utils/common-primitives.js.map +1 -0
  35. package/build/layouts/stack-utils/index.d.ts +16 -3
  36. package/build/layouts/stack-utils/index.d.ts.map +1 -1
  37. package/build/layouts/stack-utils/index.js +27 -8
  38. package/build/layouts/stack-utils/index.js.map +1 -1
  39. package/build/layouts/stack-utils/shared.d.ts +62 -0
  40. package/build/layouts/stack-utils/shared.d.ts.map +1 -0
  41. package/build/layouts/stack-utils/shared.js +78 -0
  42. package/build/layouts/stack-utils/shared.js.map +1 -0
  43. package/build/link/ExpoLink.d.ts.map +1 -1
  44. package/build/link/ExpoLink.js +10 -9
  45. package/build/link/ExpoLink.js.map +1 -1
  46. package/build/link/preview/native.d.ts +4 -2
  47. package/build/link/preview/native.d.ts.map +1 -1
  48. package/build/link/preview/native.js +3 -1
  49. package/build/link/preview/native.js.map +1 -1
  50. package/build/link/zoom/ZoomTransitionEnabler.ios.d.ts.map +1 -1
  51. package/build/link/zoom/ZoomTransitionEnabler.ios.js +4 -2
  52. package/build/link/zoom/ZoomTransitionEnabler.ios.js.map +1 -1
  53. package/build/link/zoom/link-apple-zoom.js +10 -3
  54. package/build/link/zoom/link-apple-zoom.js.map +1 -1
  55. package/build/link/zoom/useZoomHref.d.ts +3 -0
  56. package/build/link/zoom/useZoomHref.d.ts.map +1 -0
  57. package/build/link/zoom/useZoomHref.ios.d.ts +3 -0
  58. package/build/link/zoom/useZoomHref.ios.d.ts.map +1 -0
  59. package/build/link/zoom/useZoomHref.ios.js +38 -0
  60. package/build/link/zoom/useZoomHref.ios.js.map +1 -0
  61. package/build/link/zoom/useZoomHref.js +8 -0
  62. package/build/link/zoom/useZoomHref.js.map +1 -0
  63. package/build/link/zoom/zoom-transition-context-providers.d.ts +4 -0
  64. package/build/link/zoom/zoom-transition-context-providers.d.ts.map +1 -0
  65. package/build/link/zoom/zoom-transition-context-providers.ios.d.ts +4 -0
  66. package/build/link/zoom/zoom-transition-context-providers.ios.d.ts.map +1 -0
  67. package/build/link/zoom/zoom-transition-context-providers.ios.js +71 -0
  68. package/build/link/zoom/zoom-transition-context-providers.ios.js.map +1 -0
  69. package/build/link/zoom/zoom-transition-context-providers.js +11 -0
  70. package/build/link/zoom/zoom-transition-context-providers.js.map +1 -0
  71. package/build/link/zoom/zoom-transition-context-providers.types.d.ts +9 -0
  72. package/build/link/zoom/zoom-transition-context-providers.types.d.ts.map +1 -0
  73. package/build/link/zoom/zoom-transition-context-providers.types.js +3 -0
  74. package/build/link/zoom/zoom-transition-context-providers.types.js.map +1 -0
  75. package/build/link/zoom/zoom-transition-context.d.ts +4 -6
  76. package/build/link/zoom/zoom-transition-context.d.ts.map +1 -1
  77. package/build/link/zoom/zoom-transition-context.js +0 -27
  78. package/build/link/zoom/zoom-transition-context.js.map +1 -1
  79. package/build/primitives/types.d.ts +6 -5
  80. package/build/primitives/types.d.ts.map +1 -1
  81. package/build/primitives/types.js.map +1 -1
  82. package/build/split-view/elements.d.ts +4 -5
  83. package/build/split-view/elements.d.ts.map +1 -1
  84. package/build/split-view/elements.js +3 -0
  85. package/build/split-view/elements.js.map +1 -1
  86. package/build/split-view/index.d.ts +2 -0
  87. package/build/split-view/index.d.ts.map +1 -1
  88. package/build/split-view/index.js +15 -0
  89. package/build/split-view/index.js.map +1 -1
  90. package/build/split-view/split-view.d.ts +3 -0
  91. package/build/split-view/split-view.d.ts.map +1 -1
  92. package/build/split-view/split-view.js.map +1 -1
  93. package/build/useScreens.js +3 -3
  94. package/build/useScreens.js.map +1 -1
  95. package/expo-module.config.json +1 -1
  96. package/ios/LinkPreview/LinkPreviewNativeModule.swift +4 -1
  97. package/ios/LinkPreview/LinkZoomTransition.swift +121 -43
  98. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.module → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.module} +7 -7
  99. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.module.md5 +1 -0
  100. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.module.sha1 +1 -0
  101. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.module.sha256 +1 -0
  102. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.module.sha512 +1 -0
  103. package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.pom → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.pom} +1 -1
  104. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.pom.md5 +1 -0
  105. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.pom.sha1 +1 -0
  106. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.pom.sha256 +1 -0
  107. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.pom.sha512 +1 -0
  108. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
  109. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
  110. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
  111. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
  112. package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
  113. package/package.json +12 -12
  114. package/build/layouts/stack-utils/StackHeaderLeft.d.ts +0 -9
  115. package/build/layouts/stack-utils/StackHeaderLeft.d.ts.map +0 -1
  116. package/build/layouts/stack-utils/StackHeaderLeft.js +0 -17
  117. package/build/layouts/stack-utils/StackHeaderLeft.js.map +0 -1
  118. package/build/layouts/stack-utils/StackHeaderRight.d.ts +0 -9
  119. package/build/layouts/stack-utils/StackHeaderRight.d.ts.map +0 -1
  120. package/build/layouts/stack-utils/StackHeaderRight.js +0 -17
  121. package/build/layouts/stack-utils/StackHeaderRight.js.map +0 -1
  122. package/build/link/zoom/useZoomTransitionPrimitives.d.ts +0 -6
  123. package/build/link/zoom/useZoomTransitionPrimitives.d.ts.map +0 -1
  124. package/build/link/zoom/useZoomTransitionPrimitives.ios.d.ts +0 -11
  125. package/build/link/zoom/useZoomTransitionPrimitives.ios.d.ts.map +0 -1
  126. package/build/link/zoom/useZoomTransitionPrimitives.ios.js +0 -69
  127. package/build/link/zoom/useZoomTransitionPrimitives.ios.js.map +0 -1
  128. package/build/link/zoom/useZoomTransitionPrimitives.js +0 -9
  129. package/build/link/zoom/useZoomTransitionPrimitives.js.map +0 -1
  130. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.module.md5 +0 -1
  131. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.module.sha1 +0 -1
  132. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.module.sha256 +0 -1
  133. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.module.sha512 +0 -1
  134. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.pom.md5 +0 -1
  135. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.pom.sha1 +0 -1
  136. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.pom.sha256 +0 -1
  137. package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.pom.sha512 +0 -1
  138. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea-sources.jar → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7-sources.jar} +0 -0
  139. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea-sources.jar.md5 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7-sources.jar.md5} +0 -0
  140. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea-sources.jar.sha1 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7-sources.jar.sha1} +0 -0
  141. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea-sources.jar.sha256 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7-sources.jar.sha256} +0 -0
  142. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea-sources.jar.sha512 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7-sources.jar.sha512} +0 -0
  143. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.aar → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.aar} +0 -0
  144. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.aar.md5 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.aar.md5} +0 -0
  145. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.aar.sha1 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.aar.sha1} +0 -0
  146. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.aar.sha256 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.aar.sha256} +0 -0
  147. /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251211-7da85ea/expo.modules.router-7.0.0-canary-20251211-7da85ea.aar.sha512 → 7.0.0-canary-20251216-6e1f9a7/expo.modules.router-7.0.0-canary-20251216-6e1f9a7.aar.sha512} +0 -0
@@ -0,0 +1,191 @@
1
+ import type { NativeStackHeaderItemMenu, NativeStackHeaderItemMenuAction } from '@react-navigation/native-stack';
2
+ import { type ReactNode } from 'react';
3
+ import type { ImageSourcePropType } from 'react-native';
4
+ import type { SFSymbol } from 'sf-symbols-typescript';
5
+ import { type StackHeaderItemSharedProps } from './shared';
6
+ export interface StackHeaderMenuProps extends StackHeaderItemSharedProps {
7
+ /**
8
+ * Optional title to show on top of the menu.
9
+ */
10
+ title?: string;
11
+ /**
12
+ * If `true`, the menu will be displayed inline.
13
+ * This means that the menu will not be collapsed
14
+ *
15
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.
16
+ */
17
+ inline?: boolean;
18
+ /**
19
+ * If `true`, the menu will be displayed as a palette.
20
+ * This means that the menu will be displayed as one row
21
+ *
22
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information.
23
+ */
24
+ palette?: boolean;
25
+ /**
26
+ * If `true`, the menu item will be displayed as destructive.
27
+ *
28
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.
29
+ */
30
+ destructive?: boolean;
31
+ }
32
+ /**
33
+ * Component representing menu for `Stack.Header.Right` or `Stack.Header.Left`.
34
+ *
35
+ * Use as `Stack.Header.Menu` to provide top-level menus on iOS header bars.
36
+ * It accepts `Stack.Header.MenuAction` and nested `Stack.Header.Menu`
37
+ * elements. Menu can be configured using both component props and child
38
+ * elements.
39
+ *
40
+ * @example
41
+ * ```tsx
42
+ * import { Stack } from 'expo-router';
43
+ * import { Alert } from 'react-native';
44
+ *
45
+ * export default function Screen() {
46
+ * return (
47
+ * <>
48
+ * <ScreenContent />
49
+ * <Stack.Screen>
50
+ * <Stack.Header>
51
+ * <Stack.Header.Right>
52
+ * <Stack.Header.Menu>
53
+ * <Stack.Header.Label>Menu</Stack.Header.Label>
54
+ * <Stack.Header.Icon sf="ellipsis.circle" />
55
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
56
+ * Action 1
57
+ * </Stack.Header.MenuAction>
58
+ * <Stack.Header.MenuAction isOn icon="star.fill">
59
+ * Action 2
60
+ * </Stack.Header.MenuAction>
61
+ * <Stack.Header.Menu inline>
62
+ * <Stack.Header.MenuAction isOn>Sub Action</Stack.Header.MenuAction>
63
+ * </Stack.Header.Menu>
64
+ * </Stack.Header.Menu>
65
+ * </Stack.Header.Right>
66
+ * </Stack.Header>
67
+ * </Stack.Screen>
68
+ * </>
69
+ * );
70
+ * }
71
+ * ```
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * import { Stack } from 'expo-router';
76
+ * import { Text } from 'react-native';
77
+ *
78
+ * export default function Screen() {
79
+ * return (
80
+ * <>
81
+ * <ScreenContent />
82
+ * <Stack.Screen>
83
+ * <Stack.Header>
84
+ * <Stack.Header.Left>
85
+ * <Stack.Header.Menu>
86
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
87
+ * Action 1
88
+ * </Stack.Header.MenuAction>
89
+ * <Stack.Header.Menu inline palette title="Icons">
90
+ * <Stack.Header.MenuAction isOn icon="star.fill" />
91
+ * <Stack.Header.MenuAction icon="heart.fill" />
92
+ * </Stack.Header.Menu>
93
+ * </Stack.Header.Menu>
94
+ * </Stack.Header.Left>
95
+ * </Stack.Header>
96
+ * </Stack.Screen>
97
+ * </>
98
+ * );
99
+ * }
100
+ * ```
101
+ *
102
+ * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.
103
+ *
104
+ * @platform ios
105
+ */
106
+ export declare const StackHeaderMenu: React.FC<StackHeaderMenuProps>;
107
+ export declare function convertStackHeaderMenuPropsToRNHeaderItem(props: StackHeaderMenuProps): NativeStackHeaderItemMenu;
108
+ export interface StackHeaderMenuActionProps {
109
+ /**
110
+ * Can be an Icon, Label or string title.
111
+ */
112
+ children?: ReactNode;
113
+ /**
114
+ * If `true`, the menu item will be disabled and not selectable.
115
+ *
116
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled) for more information.
117
+ */
118
+ disabled?: boolean;
119
+ icon?: SFSymbol | ImageSourcePropType;
120
+ /**
121
+ * If `true`, the menu item will be displayed as destructive.
122
+ *
123
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.
124
+ */
125
+ destructive?: boolean;
126
+ /**
127
+ * If `true`, the menu will be kept presented after the action is selected.
128
+ *
129
+ * This is marked as unstable, because when action is selected it will recreate the menu,
130
+ * which will close all opened submenus and reset the scroll position.
131
+ *
132
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented) for more information.
133
+ */
134
+ unstable_keepPresented?: boolean;
135
+ /**
136
+ * If `true`, the menu item will be displayed as selected.
137
+ */
138
+ isOn?: boolean;
139
+ onPress?: () => void;
140
+ /**
141
+ * An elaborated title that explains the purpose of the action.
142
+ */
143
+ discoverabilityLabel?: string;
144
+ /**
145
+ * An optional subtitle for the menu item.
146
+ *
147
+ * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/subtitle) for more information.
148
+ */
149
+ subtitle?: string;
150
+ hidden?: boolean;
151
+ }
152
+ /**
153
+ * An action item for a `Stack.Header.Menu`.
154
+ *
155
+ * @example
156
+ * ```tsx
157
+ * import React from 'react';
158
+ * import { Alert } from 'react-native';
159
+ * import { Stack, Label, Icon } from 'expo-router';
160
+ *
161
+ * export default function ExampleScreen() {
162
+ * return (
163
+ * <>
164
+ * <ScreenContent />
165
+ * <Stack.Screen>
166
+ * <Stack.Header>
167
+ * <Stack.Header.Right>
168
+ * <Stack.Header.Menu icon="ellipsis.circle">
169
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
170
+ * Action 1
171
+ * </Stack.Header.MenuAction>
172
+ * <Stack.Header.MenuAction isOn onPress={() => Alert.alert('Action 2 pressed!')}>
173
+ * <Label>Action 2</Label>
174
+ * <Icon sf="star.fill" />
175
+ * </Stack.Header.MenuAction>
176
+ * </Stack.Header.Menu>
177
+ * </Stack.Header.Right>
178
+ * </Stack.Header>
179
+ * </Stack.Screen>
180
+ * </>
181
+ * );
182
+ * }
183
+ * ```
184
+ *
185
+ * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.
186
+ *
187
+ * @platform ios
188
+ */
189
+ export declare const StackHeaderMenuAction: React.FC<StackHeaderMenuActionProps>;
190
+ export declare function convertStackHeaderMenuActionPropsToRNHeaderItem(props: StackHeaderMenuActionProps): NativeStackHeaderItemMenuAction;
191
+ //# sourceMappingURL=StackHeaderMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackHeaderMenu.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,+BAA+B,EAEhC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,UAAU,CAAC;AAIlB,MAAM,WAAW,oBAAqB,SAAQ,0BAA0B;IACtE;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAQ,CAAC;AAEpE,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,oBAAoB,GAC1B,yBAAyB,CAsB3B;AAiDD,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,QAAQ,GAAG,mBAAmB,CAAC;IACtC;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAAc,CAAC;AAEtF,wBAAgB,+CAA+C,CAC7D,KAAK,EAAE,0BAA0B,GAChC,+BAA+B,CAwBjC"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StackHeaderMenuAction = exports.StackHeaderMenu = void 0;
4
+ exports.convertStackHeaderMenuPropsToRNHeaderItem = convertStackHeaderMenuPropsToRNHeaderItem;
5
+ exports.convertStackHeaderMenuActionPropsToRNHeaderItem = convertStackHeaderMenuActionPropsToRNHeaderItem;
6
+ const react_1 = require("react");
7
+ const shared_1 = require("./shared");
8
+ const primitives_1 = require("../../primitives");
9
+ const children_1 = require("../../utils/children");
10
+ /**
11
+ * Component representing menu for `Stack.Header.Right` or `Stack.Header.Left`.
12
+ *
13
+ * Use as `Stack.Header.Menu` to provide top-level menus on iOS header bars.
14
+ * It accepts `Stack.Header.MenuAction` and nested `Stack.Header.Menu`
15
+ * elements. Menu can be configured using both component props and child
16
+ * elements.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * import { Stack } from 'expo-router';
21
+ * import { Alert } from 'react-native';
22
+ *
23
+ * export default function Screen() {
24
+ * return (
25
+ * <>
26
+ * <ScreenContent />
27
+ * <Stack.Screen>
28
+ * <Stack.Header>
29
+ * <Stack.Header.Right>
30
+ * <Stack.Header.Menu>
31
+ * <Stack.Header.Label>Menu</Stack.Header.Label>
32
+ * <Stack.Header.Icon sf="ellipsis.circle" />
33
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
34
+ * Action 1
35
+ * </Stack.Header.MenuAction>
36
+ * <Stack.Header.MenuAction isOn icon="star.fill">
37
+ * Action 2
38
+ * </Stack.Header.MenuAction>
39
+ * <Stack.Header.Menu inline>
40
+ * <Stack.Header.MenuAction isOn>Sub Action</Stack.Header.MenuAction>
41
+ * </Stack.Header.Menu>
42
+ * </Stack.Header.Menu>
43
+ * </Stack.Header.Right>
44
+ * </Stack.Header>
45
+ * </Stack.Screen>
46
+ * </>
47
+ * );
48
+ * }
49
+ * ```
50
+ *
51
+ * @example
52
+ * ```tsx
53
+ * import { Stack } from 'expo-router';
54
+ * import { Text } from 'react-native';
55
+ *
56
+ * export default function Screen() {
57
+ * return (
58
+ * <>
59
+ * <ScreenContent />
60
+ * <Stack.Screen>
61
+ * <Stack.Header>
62
+ * <Stack.Header.Left>
63
+ * <Stack.Header.Menu>
64
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
65
+ * Action 1
66
+ * </Stack.Header.MenuAction>
67
+ * <Stack.Header.Menu inline palette title="Icons">
68
+ * <Stack.Header.MenuAction isOn icon="star.fill" />
69
+ * <Stack.Header.MenuAction icon="heart.fill" />
70
+ * </Stack.Header.Menu>
71
+ * </Stack.Header.Menu>
72
+ * </Stack.Header.Left>
73
+ * </Stack.Header>
74
+ * </Stack.Screen>
75
+ * </>
76
+ * );
77
+ * }
78
+ * ```
79
+ *
80
+ * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.
81
+ *
82
+ * @platform ios
83
+ */
84
+ exports.StackHeaderMenu = primitives_1.Menu;
85
+ function convertStackHeaderMenuPropsToRNHeaderItem(props) {
86
+ const { title, ...rest } = props;
87
+ const actions = react_1.Children.toArray(props.children).filter((child) => (0, children_1.isChildOfType)(child, exports.StackHeaderMenuAction) || (0, children_1.isChildOfType)(child, exports.StackHeaderMenu));
88
+ const item = {
89
+ ...(0, shared_1.convertStackHeaderSharedPropsToRNSharedHeaderItem)(rest),
90
+ type: 'menu',
91
+ menu: {
92
+ items: actions.map((action) => {
93
+ if ((0, children_1.isChildOfType)(action, exports.StackHeaderMenu)) {
94
+ return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);
95
+ }
96
+ return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);
97
+ }),
98
+ },
99
+ };
100
+ if (title) {
101
+ item.menu.title = title;
102
+ }
103
+ return item;
104
+ }
105
+ function convertStackHeaderSubmenuMenuPropsToRNHeaderItem(props) {
106
+ // Removing children. Otherwise the buttons will be broken
107
+ const sharedProps = (0, shared_1.convertStackHeaderSharedPropsToRNSharedHeaderItem)(props);
108
+ const actions = react_1.Children.toArray(props.children).filter((child) => (0, children_1.isChildOfType)(child, exports.StackHeaderMenuAction) || (0, children_1.isChildOfType)(child, exports.StackHeaderMenu));
109
+ // TODO: Remove Pick<HeaderBarButtonItemSubmenu> when this PR is merged and released in react-navigation:
110
+ // https://github.com/react-navigation/react-navigation/pull/12895
111
+ const item = {
112
+ type: 'submenu',
113
+ items: actions.map((action) => {
114
+ if ((0, children_1.isChildOfType)(action, exports.StackHeaderMenu)) {
115
+ return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);
116
+ }
117
+ return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);
118
+ }),
119
+ label: sharedProps.label || props.title || '',
120
+ };
121
+ if (props.inline !== undefined) {
122
+ item.displayInline = props.inline;
123
+ }
124
+ if (props.palette !== undefined) {
125
+ item.displayAsPalette = props.palette;
126
+ }
127
+ if (props.destructive !== undefined) {
128
+ item.destructive = props.destructive;
129
+ }
130
+ if (sharedProps.icon) {
131
+ // Only SF Symbols are supported in submenu icons
132
+ if (sharedProps.icon.type === 'sfSymbol') {
133
+ item.icon = sharedProps.icon;
134
+ }
135
+ else {
136
+ console.warn('When Icon is used inside Stack.Header.Menu used as a submenu, only sfSymbol icons are supported. This is a limitation of React Native Screens.');
137
+ }
138
+ }
139
+ return item;
140
+ }
141
+ /**
142
+ * An action item for a `Stack.Header.Menu`.
143
+ *
144
+ * @example
145
+ * ```tsx
146
+ * import React from 'react';
147
+ * import { Alert } from 'react-native';
148
+ * import { Stack, Label, Icon } from 'expo-router';
149
+ *
150
+ * export default function ExampleScreen() {
151
+ * return (
152
+ * <>
153
+ * <ScreenContent />
154
+ * <Stack.Screen>
155
+ * <Stack.Header>
156
+ * <Stack.Header.Right>
157
+ * <Stack.Header.Menu icon="ellipsis.circle">
158
+ * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>
159
+ * Action 1
160
+ * </Stack.Header.MenuAction>
161
+ * <Stack.Header.MenuAction isOn onPress={() => Alert.alert('Action 2 pressed!')}>
162
+ * <Label>Action 2</Label>
163
+ * <Icon sf="star.fill" />
164
+ * </Stack.Header.MenuAction>
165
+ * </Stack.Header.Menu>
166
+ * </Stack.Header.Right>
167
+ * </Stack.Header>
168
+ * </Stack.Screen>
169
+ * </>
170
+ * );
171
+ * }
172
+ * ```
173
+ *
174
+ * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.
175
+ *
176
+ * @platform ios
177
+ */
178
+ exports.StackHeaderMenuAction = primitives_1.MenuAction;
179
+ function convertStackHeaderMenuActionPropsToRNHeaderItem(props) {
180
+ const { children, isOn, unstable_keepPresented, icon, ...rest } = props;
181
+ const sharedProps = (0, shared_1.convertStackHeaderSharedPropsToRNSharedHeaderItem)(props);
182
+ const item = {
183
+ ...rest,
184
+ type: 'action',
185
+ label: sharedProps.label,
186
+ state: isOn ? 'on' : 'off',
187
+ onPress: props.onPress ?? (() => { }),
188
+ };
189
+ if (unstable_keepPresented !== undefined) {
190
+ item.keepsMenuPresented = unstable_keepPresented;
191
+ }
192
+ if (sharedProps.icon) {
193
+ // Only SF Symbols are supported in action icons
194
+ if (sharedProps.icon.type === 'sfSymbol') {
195
+ item.icon = sharedProps.icon;
196
+ }
197
+ else {
198
+ console.warn('When Icon is used inside Stack.Header.Menu.Action, only sfSymbol icons are supported. This is a limitation of React Native Screens.');
199
+ }
200
+ }
201
+ return item;
202
+ }
203
+ //# sourceMappingURL=StackHeaderMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackHeaderMenu.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {\n NativeStackHeaderItemMenu,\n NativeStackHeaderItemMenuAction,\n NativeStackHeaderItemMenuSubmenu,\n} from '@react-navigation/native-stack';\nimport { Children, type ReactNode } from 'react';\nimport type { ImageSourcePropType } from 'react-native';\nimport type { HeaderBarButtonItemSubmenu } from 'react-native-screens';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport {\n convertStackHeaderSharedPropsToRNSharedHeaderItem,\n type StackHeaderItemSharedProps,\n} from './shared';\nimport { Menu, MenuAction } from '../../primitives';\nimport { isChildOfType } from '../../utils/children';\n\nexport interface StackHeaderMenuProps extends StackHeaderItemSharedProps {\n /**\n * Optional title to show on top of the menu.\n */\n title?: string;\n /**\n * If `true`, the menu will be displayed inline.\n * This means that the menu will not be collapsed\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.\n */\n inline?: boolean;\n /**\n * If `true`, the menu will be displayed as a palette.\n * This means that the menu will be displayed as one row\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information.\n */\n palette?: boolean;\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n */\n destructive?: boolean;\n}\n\n/**\n * Component representing menu for `Stack.Header.Right` or `Stack.Header.Left`.\n *\n * Use as `Stack.Header.Menu` to provide top-level menus on iOS header bars.\n * It accepts `Stack.Header.MenuAction` and nested `Stack.Header.Menu`\n * elements. Menu can be configured using both component props and child\n * elements.\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n * import { Alert } from 'react-native';\n *\n * export default function Screen() {\n * return (\n * <>\n * <ScreenContent />\n * <Stack.Screen>\n * <Stack.Header>\n * <Stack.Header.Right>\n * <Stack.Header.Menu>\n * <Stack.Header.Label>Menu</Stack.Header.Label>\n * <Stack.Header.Icon sf=\"ellipsis.circle\" />\n * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>\n * Action 1\n * </Stack.Header.MenuAction>\n * <Stack.Header.MenuAction isOn icon=\"star.fill\">\n * Action 2\n * </Stack.Header.MenuAction>\n * <Stack.Header.Menu inline>\n * <Stack.Header.MenuAction isOn>Sub Action</Stack.Header.MenuAction>\n * </Stack.Header.Menu>\n * </Stack.Header.Menu>\n * </Stack.Header.Right>\n * </Stack.Header>\n * </Stack.Screen>\n * </>\n * );\n * }\n * ```\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n * import { Text } from 'react-native';\n *\n * export default function Screen() {\n * return (\n * <>\n * <ScreenContent />\n * <Stack.Screen>\n * <Stack.Header>\n * <Stack.Header.Left>\n * <Stack.Header.Menu>\n * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>\n * Action 1\n * </Stack.Header.MenuAction>\n * <Stack.Header.Menu inline palette title=\"Icons\">\n * <Stack.Header.MenuAction isOn icon=\"star.fill\" />\n * <Stack.Header.MenuAction icon=\"heart.fill\" />\n * </Stack.Header.Menu>\n * </Stack.Header.Menu>\n * </Stack.Header.Left>\n * </Stack.Header>\n * </Stack.Screen>\n * </>\n * );\n * }\n * ```\n *\n * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.\n *\n * @platform ios\n */\nexport const StackHeaderMenu: React.FC<StackHeaderMenuProps> = Menu;\n\nexport function convertStackHeaderMenuPropsToRNHeaderItem(\n props: StackHeaderMenuProps\n): NativeStackHeaderItemMenu {\n const { title, ...rest } = props;\n const actions = Children.toArray(props.children).filter(\n (child) => isChildOfType(child, StackHeaderMenuAction) || isChildOfType(child, StackHeaderMenu)\n );\n const item: NativeStackHeaderItemMenu = {\n ...convertStackHeaderSharedPropsToRNSharedHeaderItem(rest),\n type: 'menu',\n menu: {\n items: actions.map((action) => {\n if (isChildOfType(action, StackHeaderMenu)) {\n return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);\n }\n return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);\n }),\n },\n };\n if (title) {\n item.menu.title = title;\n }\n\n return item;\n}\n\nfunction convertStackHeaderSubmenuMenuPropsToRNHeaderItem(\n props: StackHeaderMenuProps\n): NativeStackHeaderItemMenuSubmenu {\n // Removing children. Otherwise the buttons will be broken\n const sharedProps = convertStackHeaderSharedPropsToRNSharedHeaderItem(props);\n const actions = Children.toArray(props.children).filter(\n (child) => isChildOfType(child, StackHeaderMenuAction) || isChildOfType(child, StackHeaderMenu)\n );\n\n // TODO: Remove Pick<HeaderBarButtonItemSubmenu> when this PR is merged and released in react-navigation:\n // https://github.com/react-navigation/react-navigation/pull/12895\n const item: NativeStackHeaderItemMenuSubmenu &\n Pick<HeaderBarButtonItemSubmenu, 'displayAsPalette' | 'displayInline' | 'destructive'> = {\n type: 'submenu',\n items: actions.map((action) => {\n if (isChildOfType(action, StackHeaderMenu)) {\n return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);\n }\n return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);\n }),\n label: sharedProps.label || props.title || '',\n };\n\n if (props.inline !== undefined) {\n item.displayInline = props.inline;\n }\n if (props.palette !== undefined) {\n item.displayAsPalette = props.palette;\n }\n if (props.destructive !== undefined) {\n item.destructive = props.destructive;\n }\n\n if (sharedProps.icon) {\n // Only SF Symbols are supported in submenu icons\n if (sharedProps.icon.type === 'sfSymbol') {\n item.icon = sharedProps.icon;\n } else {\n console.warn(\n 'When Icon is used inside Stack.Header.Menu used as a submenu, only sfSymbol icons are supported. This is a limitation of React Native Screens.'\n );\n }\n }\n\n return item;\n}\n\nexport interface StackHeaderMenuActionProps {\n /**\n * Can be an Icon, Label or string title.\n */\n children?: ReactNode;\n /**\n * If `true`, the menu item will be disabled and not selectable.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/disabled) for more information.\n */\n disabled?: boolean;\n icon?: SFSymbol | ImageSourcePropType;\n /**\n * If `true`, the menu item will be displayed as destructive.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.\n */\n destructive?: boolean;\n /**\n * If `true`, the menu will be kept presented after the action is selected.\n *\n * This is marked as unstable, because when action is selected it will recreate the menu,\n * which will close all opened submenus and reset the scroll position.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/keepsmenupresented) for more information.\n */\n unstable_keepPresented?: boolean;\n /**\n * If `true`, the menu item will be displayed as selected.\n */\n isOn?: boolean;\n onPress?: () => void;\n /**\n * An elaborated title that explains the purpose of the action.\n */\n discoverabilityLabel?: string;\n /**\n * An optional subtitle for the menu item.\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/subtitle) for more information.\n */\n subtitle?: string;\n hidden?: boolean;\n}\n\n/**\n * An action item for a `Stack.Header.Menu`.\n *\n * @example\n * ```tsx\n * import React from 'react';\n * import { Alert } from 'react-native';\n * import { Stack, Label, Icon } from 'expo-router';\n *\n * export default function ExampleScreen() {\n * return (\n * <>\n * <ScreenContent />\n * <Stack.Screen>\n * <Stack.Header>\n * <Stack.Header.Right>\n * <Stack.Header.Menu icon=\"ellipsis.circle\">\n * <Stack.Header.MenuAction onPress={() => Alert.alert('Action 1 pressed!')}>\n * Action 1\n * </Stack.Header.MenuAction>\n * <Stack.Header.MenuAction isOn onPress={() => Alert.alert('Action 2 pressed!')}>\n * <Label>Action 2</Label>\n * <Icon sf=\"star.fill\" />\n * </Stack.Header.MenuAction>\n * </Stack.Header.Menu>\n * </Stack.Header.Right>\n * </Stack.Header>\n * </Stack.Screen>\n * </>\n * );\n * }\n * ```\n *\n * @see [Human Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/menus) for more information about menus on iOS.\n *\n * @platform ios\n */\nexport const StackHeaderMenuAction: React.FC<StackHeaderMenuActionProps> = MenuAction;\n\nexport function convertStackHeaderMenuActionPropsToRNHeaderItem(\n props: StackHeaderMenuActionProps\n): NativeStackHeaderItemMenuAction {\n const { children, isOn, unstable_keepPresented, icon, ...rest } = props;\n const sharedProps = convertStackHeaderSharedPropsToRNSharedHeaderItem(props);\n const item: NativeStackHeaderItemMenuAction = {\n ...rest,\n type: 'action',\n label: sharedProps.label,\n state: isOn ? 'on' : 'off',\n onPress: props.onPress ?? (() => {}),\n };\n if (unstable_keepPresented !== undefined) {\n item.keepsMenuPresented = unstable_keepPresented;\n }\n if (sharedProps.icon) {\n // Only SF Symbols are supported in action icons\n if (sharedProps.icon.type === 'sfSymbol') {\n item.icon = sharedProps.icon;\n } else {\n console.warn(\n 'When Icon is used inside Stack.Header.Menu.Action, only sfSymbol icons are supported. This is a limitation of React Native Screens.'\n );\n }\n }\n return item;\n}\n"]}
@@ -0,0 +1,40 @@
1
+ import type { NativeStackHeaderItemSpacing } from '@react-navigation/native-stack';
2
+ export interface StackHeaderSpacerProps {
3
+ /**
4
+ * The width of the spacing element.
5
+ *
6
+ * This is typically used to create space between header elements.
7
+ */
8
+ width: number;
9
+ }
10
+ /**
11
+ * A spacing helper used inside `Stack.Header.Left` or `Stack.Header.Right` to create
12
+ * empty space between header items.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * import { Stack } from 'expo-router';
17
+ *
18
+ * export default function Screen() {
19
+ * return (
20
+ * <>
21
+ * <ScreenContent />
22
+ * <Stack.Screen>
23
+ * <Stack.Header>
24
+ * <Stack.Header.Left>
25
+ * <Stack.Header.Button icon="arrow.left" />
26
+ * <Stack.Header.Spacer width={8} />
27
+ * <Stack.Header.Button icon="arrow.right" />
28
+ * </Stack.Header.Left>
29
+ * </Stack.Header>
30
+ * </Stack.Screen>
31
+ * </>
32
+ * );
33
+ * }
34
+ * ```
35
+ *
36
+ * @platform ios
37
+ */
38
+ export declare const StackHeaderSpacer: React.FC<StackHeaderSpacerProps>;
39
+ export declare function convertStackHeaderSpacerPropsToRNHeaderItem(props: StackHeaderSpacerProps): NativeStackHeaderItemSpacing;
40
+ //# sourceMappingURL=StackHeaderSpacer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackHeaderSpacer.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSpacer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAc,CAAC;AAE9E,wBAAgB,2CAA2C,CACzD,KAAK,EAAE,sBAAsB,GAC5B,4BAA4B,CAK9B"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StackHeaderSpacer = void 0;
4
+ exports.convertStackHeaderSpacerPropsToRNHeaderItem = convertStackHeaderSpacerPropsToRNHeaderItem;
5
+ /**
6
+ * A spacing helper used inside `Stack.Header.Left` or `Stack.Header.Right` to create
7
+ * empty space between header items.
8
+ *
9
+ * @example
10
+ * ```tsx
11
+ * import { Stack } from 'expo-router';
12
+ *
13
+ * export default function Screen() {
14
+ * return (
15
+ * <>
16
+ * <ScreenContent />
17
+ * <Stack.Screen>
18
+ * <Stack.Header>
19
+ * <Stack.Header.Left>
20
+ * <Stack.Header.Button icon="arrow.left" />
21
+ * <Stack.Header.Spacer width={8} />
22
+ * <Stack.Header.Button icon="arrow.right" />
23
+ * </Stack.Header.Left>
24
+ * </Stack.Header>
25
+ * </Stack.Screen>
26
+ * </>
27
+ * );
28
+ * }
29
+ * ```
30
+ *
31
+ * @platform ios
32
+ */
33
+ const StackHeaderSpacer = () => null;
34
+ exports.StackHeaderSpacer = StackHeaderSpacer;
35
+ function convertStackHeaderSpacerPropsToRNHeaderItem(props) {
36
+ return {
37
+ type: 'spacing',
38
+ spacing: props.width,
39
+ };
40
+ }
41
+ //# sourceMappingURL=StackHeaderSpacer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackHeaderSpacer.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSpacer.tsx"],"names":[],"mappings":";;;AAyCA,kGAOC;AArCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACI,MAAM,iBAAiB,GAAqC,GAAG,EAAE,CAAC,IAAI,CAAC;AAAjE,QAAA,iBAAiB,qBAAgD;AAE9E,SAAgB,2CAA2C,CACzD,KAA6B;IAE7B,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK,CAAC,KAAK;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import type { NativeStackHeaderItemSpacing } from '@react-navigation/native-stack';\n\nexport interface StackHeaderSpacerProps {\n /**\n * The width of the spacing element.\n *\n * This is typically used to create space between header elements.\n */\n width: number;\n}\n\n/**\n * A spacing helper used inside `Stack.Header.Left` or `Stack.Header.Right` to create\n * empty space between header items.\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Screen() {\n * return (\n * <>\n * <ScreenContent />\n * <Stack.Screen>\n * <Stack.Header>\n * <Stack.Header.Left>\n * <Stack.Header.Button icon=\"arrow.left\" />\n * <Stack.Header.Spacer width={8} />\n * <Stack.Header.Button icon=\"arrow.right\" />\n * </Stack.Header.Left>\n * </Stack.Header>\n * </Stack.Screen>\n * </>\n * );\n * }\n * ```\n *\n * @platform ios\n */\nexport const StackHeaderSpacer: React.FC<StackHeaderSpacerProps> = () => null;\n\nexport function convertStackHeaderSpacerPropsToRNHeaderItem(\n props: StackHeaderSpacerProps\n): NativeStackHeaderItemSpacing {\n return {\n type: 'spacing',\n spacing: props.width,\n };\n}\n"]}
@@ -0,0 +1,24 @@
1
+ import { type ImageSourcePropType, type StyleProp, type TextStyle } from 'react-native';
2
+ import type { SFSymbol } from 'sf-symbols-typescript';
3
+ export interface StackHeaderLabelProps {
4
+ /**
5
+ * The text to display as the label for the tab.
6
+ */
7
+ children?: string;
8
+ }
9
+ export declare const StackHeaderLabel: React.FC<StackHeaderLabelProps>;
10
+ export type StackHeaderIconProps = {
11
+ src: ImageSourcePropType;
12
+ } | {
13
+ sf: SFSymbol;
14
+ };
15
+ export declare const StackHeaderIcon: React.FC<StackHeaderIconProps>;
16
+ export interface StackHeaderBadgeProps {
17
+ /**
18
+ * The text to display as the badge
19
+ */
20
+ children?: string;
21
+ style?: StyleProp<Pick<TextStyle, 'fontFamily' | 'fontSize' | 'color' | 'fontWeight' | 'backgroundColor'>>;
22
+ }
23
+ export declare const StackHeaderBadge: React.FC<StackHeaderBadgeProps>;
24
+ //# sourceMappingURL=common-primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-primitives.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/common-primitives.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAS,CAAC;AAEvE,MAAM,MAAM,oBAAoB,GAC5B;IAEE,GAAG,EAAE,mBAAmB,CAAC;CAC1B,GACD;IACE,EAAE,EAAE,QAAQ,CAAC;CACd,CAAC;AAEN,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAQ,CAAC;AAEpE,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,KAAK,CAAC,EAAE,SAAS,CACf,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,iBAAiB,CAAC,CACxF,CAAC;CACH;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StackHeaderBadge = exports.StackHeaderIcon = exports.StackHeaderLabel = void 0;
4
+ const primitives_1 = require("../../primitives");
5
+ exports.StackHeaderLabel = primitives_1.Label;
6
+ exports.StackHeaderIcon = primitives_1.Icon;
7
+ exports.StackHeaderBadge = primitives_1.Badge;
8
+ //# sourceMappingURL=common-primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-primitives.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/common-primitives.tsx"],"names":[],"mappings":";;;AAGA,iDAAsD;AASzC,QAAA,gBAAgB,GAAoC,kBAAK,CAAC;AAW1D,QAAA,eAAe,GAAmC,iBAAI,CAAC;AAavD,QAAA,gBAAgB,GAAoC,kBAAK,CAAC","sourcesContent":["import { type ImageSourcePropType, type StyleProp, type TextStyle } from 'react-native';\nimport type { SFSymbol } from 'sf-symbols-typescript';\n\nimport { Badge, Icon, Label } from '../../primitives';\n\nexport interface StackHeaderLabelProps {\n /**\n * The text to display as the label for the tab.\n */\n children?: string;\n}\n\nexport const StackHeaderLabel: React.FC<StackHeaderLabelProps> = Label;\n\nexport type StackHeaderIconProps =\n | {\n // TODO: add support for vector icons\n src: ImageSourcePropType;\n }\n | {\n sf: SFSymbol;\n };\n\nexport const StackHeaderIcon: React.FC<StackHeaderIconProps> = Icon;\n\nexport interface StackHeaderBadgeProps {\n /**\n * The text to display as the badge\n */\n children?: string;\n\n style?: StyleProp<\n Pick<TextStyle, 'fontFamily' | 'fontSize' | 'color' | 'fontWeight' | 'backgroundColor'>\n >;\n}\n\nexport const StackHeaderBadge: React.FC<StackHeaderBadgeProps> = Badge;\n"]}
@@ -1,16 +1,29 @@
1
1
  import { StackHeaderBackButton, type StackHeaderBackButtonProps } from './StackHeaderBackButton';
2
+ import { StackHeaderButton, type StackHeaderButtonProps } from './StackHeaderButton';
2
3
  import { StackHeaderComponent, type StackHeaderProps } from './StackHeaderComponent';
3
- import { StackHeaderLeft, type StackHeaderLeftProps } from './StackHeaderLeft';
4
- import { StackHeaderRight, type StackHeaderRightProps } from './StackHeaderRight';
4
+ import { StackHeaderItem, type StackHeaderItemProps } from './StackHeaderItem';
5
+ import { StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps } from './StackHeaderLeftRight';
6
+ import { StackHeaderMenu, StackHeaderMenuAction, type StackHeaderMenuActionProps, type StackHeaderMenuProps } from './StackHeaderMenu';
5
7
  import { StackHeaderSearchBar, type StackHeaderSearchBarProps } from './StackHeaderSearchBar';
8
+ import { StackHeaderSpacer, type StackHeaderSpacerProps } from './StackHeaderSpacer';
6
9
  import { StackHeaderTitle, type StackHeaderTitleProps } from './StackHeaderTitle';
10
+ import { StackHeaderBadge, StackHeaderIcon, StackHeaderLabel, type StackHeaderBadgeProps, type StackHeaderIconProps, type StackHeaderLabelProps } from './common-primitives';
11
+ import type { StackHeaderItemSharedProps } from './shared';
7
12
  export declare const StackHeader: typeof StackHeaderComponent & {
8
13
  Left: typeof StackHeaderLeft;
9
14
  Right: typeof StackHeaderRight;
10
15
  BackButton: typeof StackHeaderBackButton;
11
16
  Title: typeof StackHeaderTitle;
12
17
  SearchBar: typeof StackHeaderSearchBar;
18
+ Button: import("react").FC<StackHeaderButtonProps>;
19
+ Badge: import("react").FC<StackHeaderBadgeProps>;
20
+ Label: import("react").FC<StackHeaderLabelProps>;
21
+ Icon: import("react").FC<StackHeaderIconProps>;
22
+ Menu: import("react").FC<StackHeaderMenuProps>;
23
+ MenuAction: import("react").FC<StackHeaderMenuActionProps>;
24
+ Item: import("react").FC<StackHeaderItemProps>;
25
+ Spacer: import("react").FC<StackHeaderSpacerProps>;
13
26
  };
14
- export { StackHeaderBackButton, type StackHeaderBackButtonProps, StackHeaderComponent, type StackHeaderProps, StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps, StackHeaderSearchBar, type StackHeaderSearchBarProps, StackHeaderTitle, type StackHeaderTitleProps, };
27
+ export { StackHeaderBackButton, type StackHeaderBackButtonProps, type StackHeaderProps, StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps, StackHeaderSearchBar, type StackHeaderSearchBarProps, StackHeaderTitle, type StackHeaderTitleProps, StackHeaderButton, type StackHeaderButtonProps, StackHeaderBadge, type StackHeaderBadgeProps, StackHeaderLabel, type StackHeaderLabelProps, StackHeaderIcon, type StackHeaderIconProps, StackHeaderMenu, type StackHeaderMenuProps, StackHeaderMenuAction, type StackHeaderMenuActionProps, StackHeaderItem, type StackHeaderItemProps, StackHeaderSpacer, type StackHeaderSpacerProps, type StackHeaderItemSharedProps, };
15
28
  export { StackScreen, appendScreenStackPropsToOptions, type StackScreenProps } from './StackScreen';
16
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAElF,eAAO,MAAM,WAAW;;;;;;CAMtB,CAAC;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,gBAAgB,EAChB,KAAK,qBAAqB,GAC3B,CAAC;AACF,OAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,eAAe,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAE3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CActB,CAAC;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,oBAAoB,EACzB,eAAe,EACf,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,eAAe,EACf,KAAK,oBAAoB,EACzB,iBAAiB,EACjB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,GAChC,CAAC;AAEF,OAAO,EAAE,WAAW,EAAE,+BAA+B,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC"}