expo-router 7.0.0-canary-20251216-3f01dbf → 7.0.0-canary-20251223-b83b31e
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.
- package/android/build.gradle +2 -2
- package/build/color/index.d.ts +44 -0
- package/build/color/index.d.ts.map +1 -1
- package/build/color/index.js +69 -5
- package/build/color/index.js.map +1 -1
- package/build/exports.d.ts +1 -0
- package/build/exports.d.ts.map +1 -1
- package/build/exports.js +3 -1
- package/build/exports.js.map +1 -1
- package/build/layouts/StackClient.d.ts +1 -1
- package/build/layouts/stack-utils/StackHeaderButton.d.ts +77 -2
- package/build/layouts/stack-utils/StackHeaderButton.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderButton.js +3 -0
- package/build/layouts/stack-utils/StackHeaderButton.js.map +1 -1
- package/build/layouts/stack-utils/StackHeaderLeftRight.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderLeftRight.js +7 -5
- package/build/layouts/stack-utils/StackHeaderLeftRight.js.map +1 -1
- package/build/layouts/stack-utils/StackHeaderMenu.d.ts +83 -7
- package/build/layouts/stack-utils/StackHeaderMenu.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderMenu.js +14 -4
- package/build/layouts/stack-utils/StackHeaderMenu.js.map +1 -1
- package/build/layouts/stack-utils/StackHeaderSpacer.d.ts +7 -1
- package/build/layouts/stack-utils/StackHeaderSpacer.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderSpacer.js +5 -2
- package/build/layouts/stack-utils/StackHeaderSpacer.js.map +1 -1
- package/build/layouts/stack-utils/{StackHeaderItem.d.ts → StackHeaderView.d.ts} +18 -5
- package/build/layouts/stack-utils/StackHeaderView.d.ts.map +1 -0
- package/build/layouts/stack-utils/{StackHeaderItem.js → StackHeaderView.js} +14 -10
- package/build/layouts/stack-utils/StackHeaderView.js.map +1 -0
- package/build/layouts/stack-utils/index.d.ts +3 -3
- package/build/layouts/stack-utils/index.d.ts.map +1 -1
- package/build/layouts/stack-utils/index.js +4 -4
- package/build/layouts/stack-utils/index.js.map +1 -1
- package/build/layouts/stack-utils/shared.d.ts +4 -42
- package/build/layouts/stack-utils/shared.d.ts.map +1 -1
- package/build/layouts/stack-utils/shared.js +3 -22
- package/build/layouts/stack-utils/shared.js.map +1 -1
- package/build/link/ExpoLink.d.ts.map +1 -1
- package/build/link/ExpoLink.js +1 -8
- package/build/link/ExpoLink.js.map +1 -1
- package/build/link/elements.d.ts +36 -13
- package/build/link/elements.d.ts.map +1 -1
- package/build/link/elements.js +14 -5
- package/build/link/elements.js.map +1 -1
- package/build/link/preview/native.d.ts +12 -1
- package/build/link/preview/native.d.ts.map +1 -1
- package/build/link/preview/native.js.map +1 -1
- package/build/navigationEvents/index.d.ts +36 -0
- package/build/navigationEvents/index.d.ts.map +1 -0
- package/build/navigationEvents/index.js +53 -0
- package/build/navigationEvents/index.js.map +1 -0
- package/build/toolbar/elements.d.ts +325 -16
- package/build/toolbar/elements.d.ts.map +1 -1
- package/build/toolbar/elements.js +130 -12
- package/build/toolbar/elements.js.map +1 -1
- package/build/toolbar/index.d.ts +38 -6
- package/build/toolbar/index.d.ts.map +1 -1
- package/build/toolbar/index.js +36 -1
- package/build/toolbar/index.js.map +1 -1
- package/build/toolbar/native.ios.d.ts.map +1 -1
- package/build/toolbar/native.ios.js.map +1 -1
- package/build/toolbar/native.types.d.ts +6 -5
- package/build/toolbar/native.types.d.ts.map +1 -1
- package/build/toolbar/native.types.js.map +1 -1
- package/build/useScreens.d.ts.map +1 -1
- package/build/useScreens.js +50 -0
- package/build/useScreens.js.map +1 -1
- package/build/utils/font.d.ts +9 -0
- package/build/utils/font.d.ts.map +1 -0
- package/build/utils/font.js +20 -0
- package/build/utils/font.js.map +1 -0
- package/expo-module.config.json +1 -1
- package/ios/LinkPreview/LinkPreviewNativeActionView.swift +105 -24
- package/ios/LinkPreview/LinkPreviewNativeModule.swift +35 -8
- package/ios/LinkPreview/LinkPreviewNativeNavigation.swift +16 -20
- package/ios/LinkPreview/LinkPreviewNativePreviewView.swift +1 -8
- package/ios/LinkPreview/LinkPreviewNativeView.swift +48 -50
- package/ios/LinkPreview/LinkZoomTransition.swift +8 -10
- package/ios/RouterViewWithLogger.swift +5 -0
- package/ios/Toolbar/RouterFontUtils.swift +50 -0
- package/ios/Toolbar/RouterToolbarHostView.swift +41 -17
- package/ios/Toolbar/RouterToolbarItemView.swift +30 -13
- package/ios/Toolbar/RouterToolbarModule.swift +28 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.aar +0 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.aar.md5 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.aar.sha1 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.aar.sha256 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.aar.sha512 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.module → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.module} +17 -17
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.module.md5 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.pom → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.pom} +1 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e.pom.sha512 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml +4 -4
- package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.md5 +1 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha1 +1 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha256 +1 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/maven-metadata.xml.sha512 +1 -1
- package/package.json +10 -10
- package/build/layouts/stack-utils/StackHeaderItem.d.ts.map +0 -1
- package/build/layouts/stack-utils/StackHeaderItem.js.map +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.aar +0 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.aar.md5 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.aar.sha1 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.aar.sha256 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.aar.sha512 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.module.md5 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf.pom.sha512 +0 -1
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf-sources.jar → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e-sources.jar} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf-sources.jar.md5 → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e-sources.jar.md5} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf-sources.jar.sha1 → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e-sources.jar.sha1} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf-sources.jar.sha256 → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e-sources.jar.sha256} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251216-3f01dbf/expo.modules.router-7.0.0-canary-20251216-3f01dbf-sources.jar.sha512 → 7.0.0-canary-20251223-b83b31e/expo.modules.router-7.0.0-canary-20251223-b83b31e-sources.jar.sha512} +0 -0
|
@@ -3,15 +3,71 @@ import { type ReactNode } from 'react';
|
|
|
3
3
|
import type { ImageSourcePropType } from 'react-native';
|
|
4
4
|
import type { SFSymbol } from 'sf-symbols-typescript';
|
|
5
5
|
import { type StackHeaderItemSharedProps } from './shared';
|
|
6
|
-
export interface StackHeaderMenuProps
|
|
6
|
+
export interface StackHeaderMenuProps {
|
|
7
|
+
accessibilityLabel?: string;
|
|
8
|
+
accessibilityHint?: string;
|
|
7
9
|
/**
|
|
8
|
-
*
|
|
10
|
+
* There are two ways to specify the content of the menu header item - using props or child components:
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```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>
|
|
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.
|
|
9
36
|
*/
|
|
10
|
-
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
/**
|
|
39
|
+
* If `true`, the menu item will be displayed as destructive.
|
|
40
|
+
*
|
|
41
|
+
* @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenuelement/attributes/destructive) for more information.
|
|
42
|
+
*/
|
|
43
|
+
destructive?: boolean;
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Whether to hide the shared background.
|
|
47
|
+
*
|
|
48
|
+
* @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.
|
|
49
|
+
*
|
|
50
|
+
* @platform iOS 26+
|
|
51
|
+
*/
|
|
52
|
+
hidesSharedBackground?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Whether the menu should be hidden.
|
|
55
|
+
*
|
|
56
|
+
* @default false
|
|
57
|
+
*/
|
|
58
|
+
hidden?: boolean;
|
|
59
|
+
/**
|
|
60
|
+
* Icon for the menu item.
|
|
61
|
+
*
|
|
62
|
+
* Can be an SF Symbol name or an image source.
|
|
63
|
+
*/
|
|
64
|
+
icon?: StackHeaderItemSharedProps['icon'];
|
|
11
65
|
/**
|
|
12
66
|
* If `true`, the menu will be displayed inline.
|
|
13
67
|
* This means that the menu will not be collapsed
|
|
14
68
|
*
|
|
69
|
+
* > **Note*: Inline menus are only supported in submenus.
|
|
70
|
+
*
|
|
15
71
|
* @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayinline) for more information.
|
|
16
72
|
*/
|
|
17
73
|
inline?: boolean;
|
|
@@ -19,15 +75,35 @@ export interface StackHeaderMenuProps extends StackHeaderItemSharedProps {
|
|
|
19
75
|
* If `true`, the menu will be displayed as a palette.
|
|
20
76
|
* This means that the menu will be displayed as one row
|
|
21
77
|
*
|
|
78
|
+
* > **Note**: Palette menus are only supported in submenus.
|
|
79
|
+
*
|
|
22
80
|
* @see [Apple documentation](https://developer.apple.com/documentation/uikit/uimenu/options-swift.struct/displayaspalette) for more information.
|
|
23
81
|
*/
|
|
24
82
|
palette?: boolean;
|
|
25
83
|
/**
|
|
26
|
-
*
|
|
84
|
+
* Whether to separate the background of this item from other header items.
|
|
27
85
|
*
|
|
28
|
-
* @
|
|
86
|
+
* @default false
|
|
29
87
|
*/
|
|
30
|
-
|
|
88
|
+
separateBackground?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Style for the label of the header item.
|
|
91
|
+
*/
|
|
92
|
+
style?: StackHeaderItemSharedProps['style'];
|
|
93
|
+
/**
|
|
94
|
+
* The tint color to apply to the button item
|
|
95
|
+
*
|
|
96
|
+
* @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.
|
|
97
|
+
*/
|
|
98
|
+
tintColor?: StackHeaderItemSharedProps['tintColor'];
|
|
99
|
+
/**
|
|
100
|
+
* Optional title to show on top of the menu.
|
|
101
|
+
*/
|
|
102
|
+
title?: string;
|
|
103
|
+
/**
|
|
104
|
+
* @default 'plain'
|
|
105
|
+
*/
|
|
106
|
+
variant?: StackHeaderItemSharedProps['variant'];
|
|
31
107
|
}
|
|
32
108
|
/**
|
|
33
109
|
* Component representing menu for `Stack.Header.Right` or `Stack.Header.Left`.
|
|
@@ -104,7 +180,7 @@ export interface StackHeaderMenuProps extends StackHeaderItemSharedProps {
|
|
|
104
180
|
* @platform ios
|
|
105
181
|
*/
|
|
106
182
|
export declare const StackHeaderMenu: React.FC<StackHeaderMenuProps>;
|
|
107
|
-
export declare function convertStackHeaderMenuPropsToRNHeaderItem(props: StackHeaderMenuProps): NativeStackHeaderItemMenu;
|
|
183
|
+
export declare function convertStackHeaderMenuPropsToRNHeaderItem(props: StackHeaderMenuProps): NativeStackHeaderItemMenu | undefined;
|
|
108
184
|
export interface StackHeaderMenuActionProps {
|
|
109
185
|
/**
|
|
110
186
|
* Can be an Icon, Label or string title.
|
|
@@ -1 +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,
|
|
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,oBAAoB;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;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;CACjD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyEG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAQ,CAAC;AAEpE,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,oBAAoB,GAC1B,yBAAyB,GAAG,SAAS,CA2BvC;AAsDD,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"}
|
|
@@ -83,18 +83,23 @@ const children_1 = require("../../utils/children");
|
|
|
83
83
|
*/
|
|
84
84
|
exports.StackHeaderMenu = primitives_1.Menu;
|
|
85
85
|
function convertStackHeaderMenuPropsToRNHeaderItem(props) {
|
|
86
|
+
if (props.hidden) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
86
89
|
const { title, ...rest } = props;
|
|
87
90
|
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
91
|
const item = {
|
|
89
92
|
...(0, shared_1.convertStackHeaderSharedPropsToRNSharedHeaderItem)(rest),
|
|
90
93
|
type: 'menu',
|
|
91
94
|
menu: {
|
|
92
|
-
items: actions
|
|
95
|
+
items: actions
|
|
96
|
+
.map((action) => {
|
|
93
97
|
if ((0, children_1.isChildOfType)(action, exports.StackHeaderMenu)) {
|
|
94
98
|
return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);
|
|
95
99
|
}
|
|
96
100
|
return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);
|
|
97
|
-
})
|
|
101
|
+
})
|
|
102
|
+
.filter((i) => !!i),
|
|
98
103
|
},
|
|
99
104
|
};
|
|
100
105
|
if (title) {
|
|
@@ -103,6 +108,9 @@ function convertStackHeaderMenuPropsToRNHeaderItem(props) {
|
|
|
103
108
|
return item;
|
|
104
109
|
}
|
|
105
110
|
function convertStackHeaderSubmenuMenuPropsToRNHeaderItem(props) {
|
|
111
|
+
if (props.hidden) {
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
106
114
|
// Removing children. Otherwise the buttons will be broken
|
|
107
115
|
const sharedProps = (0, shared_1.convertStackHeaderSharedPropsToRNSharedHeaderItem)(props);
|
|
108
116
|
const actions = react_1.Children.toArray(props.children).filter((child) => (0, children_1.isChildOfType)(child, exports.StackHeaderMenuAction) || (0, children_1.isChildOfType)(child, exports.StackHeaderMenu));
|
|
@@ -110,12 +118,14 @@ function convertStackHeaderSubmenuMenuPropsToRNHeaderItem(props) {
|
|
|
110
118
|
// https://github.com/react-navigation/react-navigation/pull/12895
|
|
111
119
|
const item = {
|
|
112
120
|
type: 'submenu',
|
|
113
|
-
items: actions
|
|
121
|
+
items: actions
|
|
122
|
+
.map((action) => {
|
|
114
123
|
if ((0, children_1.isChildOfType)(action, exports.StackHeaderMenu)) {
|
|
115
124
|
return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);
|
|
116
125
|
}
|
|
117
126
|
return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);
|
|
118
|
-
})
|
|
127
|
+
})
|
|
128
|
+
.filter((i) => !!i),
|
|
119
129
|
label: sharedProps.label || props.title || '',
|
|
120
130
|
};
|
|
121
131
|
if (props.inline !== undefined) {
|
|
@@ -1 +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"]}
|
|
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 {\n accessibilityLabel?: string;\n accessibilityHint?: string;\n /**\n * There are two ways to specify the content of the menu header item - using props or child components:\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * ...\n * <Stack.Header.Menu icon=\"star.fill\" title=\"As props\">\n * <Stack.Header.MenuAction>Action 1</Stack.Header.MenuAction>\n * </Stack.Header.Menu>\n * ```\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * ...\n * <Stack.Header.Menu>\n * <Stack.Header.Icon sf=\"star.fill\" />\n * <Stack.Header.Label>As components</Stack.Header.Label>\n * <Stack.Header.Badge>3</Stack.Header.Badge>\n * <Stack.Header.MenuAction>Action 1</Stack.Header.MenuAction>\n * </Stack.Header.Menu>\n * ```\n *\n * **Note**: When icon is used, the label will not be shown and will be used for accessibility purposes only.\n */\n children?: ReactNode;\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 disabled?: boolean;\n /**\n * Whether to hide the shared background.\n *\n * @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n /**\n * Whether the menu should be hidden.\n *\n * @default false\n */\n hidden?: boolean;\n /**\n * Icon for the menu item.\n *\n * Can be an SF Symbol name or an image source.\n */\n icon?: StackHeaderItemSharedProps['icon'];\n /**\n * If `true`, the menu will be displayed inline.\n * This means that the menu will not be collapsed\n *\n * > **Note*: Inline menus are only supported in submenus.\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 * > **Note**: Palette menus are only supported in submenus.\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 * Whether to separate the background of this item from other header items.\n *\n * @default false\n */\n separateBackground?: boolean;\n /**\n * Style for the label of the header item.\n */\n style?: StackHeaderItemSharedProps['style'];\n /**\n * The tint color to apply to the button item\n *\n * @see [Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/tintcolor) for more information.\n */\n tintColor?: StackHeaderItemSharedProps['tintColor'];\n /**\n * Optional title to show on top of the menu.\n */\n title?: string;\n /**\n * @default 'plain'\n */\n variant?: StackHeaderItemSharedProps['variant'];\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 | undefined {\n if (props.hidden) {\n return undefined;\n }\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\n .map((action) => {\n if (isChildOfType(action, StackHeaderMenu)) {\n return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);\n }\n return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);\n })\n .filter((i) => !!i),\n },\n };\n if (title) {\n item.menu.title = title;\n }\n\n return item;\n}\n\nfunction convertStackHeaderSubmenuMenuPropsToRNHeaderItem(\n props: StackHeaderMenuProps\n): NativeStackHeaderItemMenuSubmenu | undefined {\n if (props.hidden) {\n return undefined;\n }\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\n .map((action) => {\n if (isChildOfType(action, StackHeaderMenu)) {\n return convertStackHeaderSubmenuMenuPropsToRNHeaderItem(action.props);\n }\n return convertStackHeaderMenuActionPropsToRNHeaderItem(action.props);\n })\n .filter((i) => !!i),\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"]}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import type { NativeStackHeaderItemSpacing } from '@react-navigation/native-stack';
|
|
2
2
|
export interface StackHeaderSpacerProps {
|
|
3
|
+
/**
|
|
4
|
+
* Whether the spacer should be hidden.
|
|
5
|
+
*
|
|
6
|
+
* @default false
|
|
7
|
+
*/
|
|
8
|
+
hidden?: boolean;
|
|
3
9
|
/**
|
|
4
10
|
* The width of the spacing element.
|
|
5
11
|
*
|
|
@@ -36,5 +42,5 @@ export interface StackHeaderSpacerProps {
|
|
|
36
42
|
* @platform ios
|
|
37
43
|
*/
|
|
38
44
|
export declare const StackHeaderSpacer: React.FC<StackHeaderSpacerProps>;
|
|
39
|
-
export declare function convertStackHeaderSpacerPropsToRNHeaderItem(
|
|
45
|
+
export declare function convertStackHeaderSpacerPropsToRNHeaderItem({ hidden, width, }: StackHeaderSpacerProps): NativeStackHeaderItemSpacing | undefined;
|
|
40
46
|
//# sourceMappingURL=StackHeaderSpacer.d.ts.map
|
|
@@ -1 +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;
|
|
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,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;CAIf;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAc,CAAC;AAE9E,wBAAgB,2CAA2C,CAAC,EAC1D,MAAM,EACN,KAAK,GACN,EAAE,sBAAsB,GAAG,4BAA4B,GAAG,SAAS,CAQnE"}
|
|
@@ -32,10 +32,13 @@ exports.convertStackHeaderSpacerPropsToRNHeaderItem = convertStackHeaderSpacerPr
|
|
|
32
32
|
*/
|
|
33
33
|
const StackHeaderSpacer = () => null;
|
|
34
34
|
exports.StackHeaderSpacer = StackHeaderSpacer;
|
|
35
|
-
function convertStackHeaderSpacerPropsToRNHeaderItem(
|
|
35
|
+
function convertStackHeaderSpacerPropsToRNHeaderItem({ hidden, width, }) {
|
|
36
|
+
if (hidden) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
36
39
|
return {
|
|
37
40
|
type: 'spacing',
|
|
38
|
-
spacing:
|
|
41
|
+
spacing: width,
|
|
39
42
|
};
|
|
40
43
|
}
|
|
41
44
|
//# sourceMappingURL=StackHeaderSpacer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackHeaderSpacer.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSpacer.tsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"StackHeaderSpacer.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSpacer.tsx"],"names":[],"mappings":";;;AAmDA,kGAWC;AAzCD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACI,MAAM,iBAAiB,GAAqC,GAAG,EAAE,CAAC,IAAI,CAAC;AAAjE,QAAA,iBAAiB,qBAAgD;AAE9E,SAAgB,2CAA2C,CAAC,EAC1D,MAAM,EACN,KAAK,GACkB;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC","sourcesContent":["import type { NativeStackHeaderItemSpacing } from '@react-navigation/native-stack';\n\nexport interface StackHeaderSpacerProps {\n /**\n * Whether the spacer should be hidden.\n *\n * @default false\n */\n hidden?: boolean;\n // TODO: implement fluid spacing in react-native-screens\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 // TODO: implement missing props in react-native-screens\n // hidesSharedBackground?: boolean;\n // sharesBackground?: boolean;\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 hidden,\n width,\n}: StackHeaderSpacerProps): NativeStackHeaderItemSpacing | undefined {\n if (hidden) {\n return undefined;\n }\n return {\n type: 'spacing',\n spacing: width,\n };\n}\n"]}
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import type { NativeStackHeaderItemCustom } from '@react-navigation/native-stack';
|
|
2
|
-
export interface
|
|
2
|
+
export interface StackHeaderViewProps {
|
|
3
3
|
/**
|
|
4
4
|
* Can be any React node.
|
|
5
5
|
*/
|
|
6
6
|
children?: NativeStackHeaderItemCustom['element'];
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Whether the view should be hidden.
|
|
9
|
+
*
|
|
10
|
+
* @default false
|
|
11
|
+
*/
|
|
12
|
+
hidden?: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Whether to hide the shared background.
|
|
15
|
+
*
|
|
16
|
+
* @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.
|
|
17
|
+
*
|
|
18
|
+
* @platform iOS 26+
|
|
19
|
+
*/
|
|
20
|
+
hidesSharedBackground?: boolean;
|
|
8
21
|
}
|
|
9
22
|
/**
|
|
10
23
|
* A wrapper to render custom content in the header.
|
|
@@ -40,6 +53,6 @@ export interface StackHeaderItemProps {
|
|
|
40
53
|
*
|
|
41
54
|
* @platform ios
|
|
42
55
|
*/
|
|
43
|
-
export declare const
|
|
44
|
-
export declare function
|
|
45
|
-
//# sourceMappingURL=
|
|
56
|
+
export declare const StackHeaderView: React.FC<StackHeaderViewProps>;
|
|
57
|
+
export declare function convertStackHeaderViewPropsToRNHeaderItem(props: StackHeaderViewProps): NativeStackHeaderItemCustom | undefined;
|
|
58
|
+
//# sourceMappingURL=StackHeaderView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackHeaderView.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAElF,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,2BAA2B,CAAC,SAAS,CAAC,CAAC;IAClD;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;CAGjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAAc,CAAC;AAE1E,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,oBAAoB,GAC1B,2BAA2B,GAAG,SAAS,CAgBzC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.StackHeaderView = void 0;
|
|
4
|
+
exports.convertStackHeaderViewPropsToRNHeaderItem = convertStackHeaderViewPropsToRNHeaderItem;
|
|
5
5
|
/**
|
|
6
6
|
* A wrapper to render custom content in the header.
|
|
7
7
|
*
|
|
@@ -36,17 +36,21 @@ exports.convertStackHeaderItemPropsToRNHeaderItem = convertStackHeaderItemPropsT
|
|
|
36
36
|
*
|
|
37
37
|
* @platform ios
|
|
38
38
|
*/
|
|
39
|
-
const
|
|
40
|
-
exports.
|
|
41
|
-
function
|
|
42
|
-
|
|
39
|
+
const StackHeaderView = () => null;
|
|
40
|
+
exports.StackHeaderView = StackHeaderView;
|
|
41
|
+
function convertStackHeaderViewPropsToRNHeaderItem(props) {
|
|
42
|
+
if (props.hidden) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const { children, hidesSharedBackground } = props;
|
|
43
46
|
if (!children) {
|
|
44
|
-
console.warn('Stack.Header.
|
|
47
|
+
console.warn('Stack.Header.View requires a child element to render custom content in the header.');
|
|
45
48
|
}
|
|
49
|
+
const element = children ? children : <></>;
|
|
46
50
|
return {
|
|
47
|
-
...rest,
|
|
48
51
|
type: 'custom',
|
|
49
|
-
element
|
|
52
|
+
element,
|
|
53
|
+
hidesSharedBackground,
|
|
50
54
|
};
|
|
51
55
|
}
|
|
52
|
-
//# sourceMappingURL=
|
|
56
|
+
//# sourceMappingURL=StackHeaderView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackHeaderView.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderView.tsx"],"names":[],"mappings":";;;AA6DA,8FAkBC;AAtDD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACI,MAAM,eAAe,GAAmC,GAAG,EAAE,CAAC,IAAI,CAAC;AAA7D,QAAA,eAAe,mBAA8C;AAE1E,SAAgB,yCAAyC,CACvD,KAA2B;IAE3B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,KAAK,CAAC;IAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CACV,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAC5C,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO;QACP,qBAAqB;KACtB,CAAC;AACJ,CAAC","sourcesContent":["import type { NativeStackHeaderItemCustom } from '@react-navigation/native-stack';\n\nexport interface StackHeaderViewProps {\n /**\n * Can be any React node.\n */\n children?: NativeStackHeaderItemCustom['element'];\n /**\n * Whether the view should be hidden.\n *\n * @default false\n */\n hidden?: boolean;\n /**\n * Whether to hide the shared background.\n *\n * @see [Official Apple documentation](https://developer.apple.com/documentation/uikit/uibarbuttonitem/hidessharedbackground) for more information.\n *\n * @platform iOS 26+\n */\n hidesSharedBackground?: boolean;\n // TODO: implement missing props in react-native-screens\n // separateBackground?: boolean;\n}\n\n/**\n * A wrapper to render custom content in the header.\n *\n * Use as `Stack.Header.Item` to render a custom React element into the header\n *\n * @example\n * ```tsx\n * import { Stack } from 'expo-router';\n * import { Text } from 'react-native';\n *\n * function CustomHeaderElement() {\n * return <Text>Custom Element</Text>;\n * }\n *\n * function Screen() {\n * return (\n * <>\n * <ScreenContent />\n * <Stack.Screen>\n * <Stack.Header>\n * <Stack.Header.Left>\n * <Stack.Header.Item>\n * <CustomHeaderElement />\n * </Stack.Header.Item>\n * </Stack.Header.Left>\n * </Stack.Header>\n * </Stack.Screen>\n * </>\n * );\n * }\n * ```\n *\n * @platform ios\n */\nexport const StackHeaderView: React.FC<StackHeaderViewProps> = () => null;\n\nexport function convertStackHeaderViewPropsToRNHeaderItem(\n props: StackHeaderViewProps\n): NativeStackHeaderItemCustom | undefined {\n if (props.hidden) {\n return undefined;\n }\n const { children, hidesSharedBackground } = props;\n if (!children) {\n console.warn(\n 'Stack.Header.View requires a child element to render custom content in the header.'\n );\n }\n const element = children ? children : <></>;\n return {\n type: 'custom',\n element,\n hidesSharedBackground,\n };\n}\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { StackHeaderBackButton, type StackHeaderBackButtonProps } from './StackHeaderBackButton';
|
|
2
2
|
import { StackHeaderButton, type StackHeaderButtonProps } from './StackHeaderButton';
|
|
3
3
|
import { StackHeaderComponent, type StackHeaderProps } from './StackHeaderComponent';
|
|
4
|
-
import { StackHeaderItem, type StackHeaderItemProps } from './StackHeaderItem';
|
|
5
4
|
import { StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps } from './StackHeaderLeftRight';
|
|
6
5
|
import { StackHeaderMenu, StackHeaderMenuAction, type StackHeaderMenuActionProps, type StackHeaderMenuProps } from './StackHeaderMenu';
|
|
7
6
|
import { StackHeaderSearchBar, type StackHeaderSearchBarProps } from './StackHeaderSearchBar';
|
|
8
7
|
import { StackHeaderSpacer, type StackHeaderSpacerProps } from './StackHeaderSpacer';
|
|
9
8
|
import { StackHeaderTitle, type StackHeaderTitleProps } from './StackHeaderTitle';
|
|
9
|
+
import { StackHeaderView, type StackHeaderViewProps } from './StackHeaderView';
|
|
10
10
|
import { StackHeaderBadge, StackHeaderIcon, StackHeaderLabel, type StackHeaderBadgeProps, type StackHeaderIconProps, type StackHeaderLabelProps } from './common-primitives';
|
|
11
11
|
import type { StackHeaderItemSharedProps } from './shared';
|
|
12
12
|
export declare const StackHeader: typeof StackHeaderComponent & {
|
|
@@ -21,9 +21,9 @@ export declare const StackHeader: typeof StackHeaderComponent & {
|
|
|
21
21
|
Icon: import("react").FC<StackHeaderIconProps>;
|
|
22
22
|
Menu: import("react").FC<StackHeaderMenuProps>;
|
|
23
23
|
MenuAction: import("react").FC<StackHeaderMenuActionProps>;
|
|
24
|
-
|
|
24
|
+
View: import("react").FC<StackHeaderViewProps>;
|
|
25
25
|
Spacer: import("react").FC<StackHeaderSpacerProps>;
|
|
26
26
|
};
|
|
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,
|
|
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, StackHeaderView, type StackHeaderViewProps, StackHeaderSpacer, type StackHeaderSpacerProps, type StackHeaderItemSharedProps, };
|
|
28
28
|
export { StackScreen, appendScreenStackPropsToOptions, type StackScreenProps } from './StackScreen';
|
|
29
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,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,
|
|
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,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,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.appendScreenStackPropsToOptions = exports.StackScreen = exports.StackHeaderSpacer = exports.
|
|
3
|
+
exports.appendScreenStackPropsToOptions = exports.StackScreen = exports.StackHeaderSpacer = exports.StackHeaderView = exports.StackHeaderMenuAction = exports.StackHeaderMenu = exports.StackHeaderIcon = exports.StackHeaderLabel = exports.StackHeaderBadge = exports.StackHeaderButton = exports.StackHeaderTitle = exports.StackHeaderSearchBar = exports.StackHeaderRight = exports.StackHeaderLeft = exports.StackHeaderBackButton = exports.StackHeader = void 0;
|
|
4
4
|
const StackHeaderBackButton_1 = require("./StackHeaderBackButton");
|
|
5
5
|
Object.defineProperty(exports, "StackHeaderBackButton", { enumerable: true, get: function () { return StackHeaderBackButton_1.StackHeaderBackButton; } });
|
|
6
6
|
const StackHeaderButton_1 = require("./StackHeaderButton");
|
|
7
7
|
Object.defineProperty(exports, "StackHeaderButton", { enumerable: true, get: function () { return StackHeaderButton_1.StackHeaderButton; } });
|
|
8
8
|
const StackHeaderComponent_1 = require("./StackHeaderComponent");
|
|
9
|
-
const StackHeaderItem_1 = require("./StackHeaderItem");
|
|
10
|
-
Object.defineProperty(exports, "StackHeaderItem", { enumerable: true, get: function () { return StackHeaderItem_1.StackHeaderItem; } });
|
|
11
9
|
const StackHeaderLeftRight_1 = require("./StackHeaderLeftRight");
|
|
12
10
|
Object.defineProperty(exports, "StackHeaderLeft", { enumerable: true, get: function () { return StackHeaderLeftRight_1.StackHeaderLeft; } });
|
|
13
11
|
Object.defineProperty(exports, "StackHeaderRight", { enumerable: true, get: function () { return StackHeaderLeftRight_1.StackHeaderRight; } });
|
|
@@ -20,6 +18,8 @@ const StackHeaderSpacer_1 = require("./StackHeaderSpacer");
|
|
|
20
18
|
Object.defineProperty(exports, "StackHeaderSpacer", { enumerable: true, get: function () { return StackHeaderSpacer_1.StackHeaderSpacer; } });
|
|
21
19
|
const StackHeaderTitle_1 = require("./StackHeaderTitle");
|
|
22
20
|
Object.defineProperty(exports, "StackHeaderTitle", { enumerable: true, get: function () { return StackHeaderTitle_1.StackHeaderTitle; } });
|
|
21
|
+
const StackHeaderView_1 = require("./StackHeaderView");
|
|
22
|
+
Object.defineProperty(exports, "StackHeaderView", { enumerable: true, get: function () { return StackHeaderView_1.StackHeaderView; } });
|
|
23
23
|
const common_primitives_1 = require("./common-primitives");
|
|
24
24
|
Object.defineProperty(exports, "StackHeaderBadge", { enumerable: true, get: function () { return common_primitives_1.StackHeaderBadge; } });
|
|
25
25
|
Object.defineProperty(exports, "StackHeaderIcon", { enumerable: true, get: function () { return common_primitives_1.StackHeaderIcon; } });
|
|
@@ -36,7 +36,7 @@ exports.StackHeader = Object.assign(StackHeaderComponent_1.StackHeaderComponent,
|
|
|
36
36
|
Icon: common_primitives_1.StackHeaderIcon,
|
|
37
37
|
Menu: StackHeaderMenu_1.StackHeaderMenu,
|
|
38
38
|
MenuAction: StackHeaderMenu_1.StackHeaderMenuAction,
|
|
39
|
-
|
|
39
|
+
View: StackHeaderView_1.StackHeaderView,
|
|
40
40
|
Spacer: StackHeaderSpacer_1.StackHeaderSpacer,
|
|
41
41
|
});
|
|
42
42
|
var StackScreen_1 = require("./StackScreen");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":";;;AAAA,mEAAiG;AA8C/F,sGA9CO,6CAAqB,OA8CP;AA7CvB,2DAAqF;AAwDnF,kGAxDO,qCAAiB,OAwDP;AAvDnB,iEAAqF;AACrF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":";;;AAAA,mEAAiG;AA8C/F,sGA9CO,6CAAqB,OA8CP;AA7CvB,2DAAqF;AAwDnF,kGAxDO,qCAAiB,OAwDP;AAvDnB,iEAAqF;AACrF,iEAKgC;AAyC9B,gGA7CA,sCAAe,OA6CA;AAEf,iGA7CA,uCAAgB,OA6CA;AA1ClB,uDAK2B;AAmDzB,gGAvDA,iCAAe,OAuDA;AAEf,sGAxDA,uCAAqB,OAwDA;AApDvB,iEAA8F;AAsC5F,qGAtCO,2CAAoB,OAsCP;AArCtB,2DAAqF;AAuDnF,kGAvDO,qCAAiB,OAuDP;AAtDnB,yDAAkF;AAsChF,iGAtCO,mCAAgB,OAsCP;AArClB,uDAA+E;AAmD7E,gGAnDO,iCAAe,OAmDP;AAlDjB,2DAO6B;AAiC3B,iGAvCA,oCAAgB,OAuCA;AAIhB,gGA1CA,mCAAe,OA0CA;AAFf,iGAvCA,oCAAgB,OAuCA;AAhCL,QAAA,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,2CAAoB,EAAE;IAC7D,IAAI,EAAE,sCAAe;IACrB,KAAK,EAAE,uCAAgB;IACvB,UAAU,EAAE,6CAAqB;IACjC,KAAK,EAAE,mCAAgB;IACvB,SAAS,EAAE,2CAAoB;IAC/B,MAAM,EAAE,qCAAiB;IACzB,KAAK,EAAE,oCAAgB;IACvB,KAAK,EAAE,oCAAgB;IACvB,IAAI,EAAE,mCAAe;IACrB,IAAI,EAAE,iCAAe;IACrB,UAAU,EAAE,uCAAqB;IACjC,IAAI,EAAE,iCAAe;IACrB,MAAM,EAAE,qCAAiB;CAC1B,CAAC,CAAC;AAiCH,6CAAoG;AAA3F,0GAAA,WAAW,OAAA;AAAE,8HAAA,+BAA+B,OAAA","sourcesContent":["import { StackHeaderBackButton, type StackHeaderBackButtonProps } from './StackHeaderBackButton';\nimport { StackHeaderButton, type StackHeaderButtonProps } from './StackHeaderButton';\nimport { StackHeaderComponent, type StackHeaderProps } from './StackHeaderComponent';\nimport {\n StackHeaderLeft,\n type StackHeaderLeftProps,\n StackHeaderRight,\n type StackHeaderRightProps,\n} from './StackHeaderLeftRight';\nimport {\n StackHeaderMenu,\n StackHeaderMenuAction,\n type StackHeaderMenuActionProps,\n type StackHeaderMenuProps,\n} from './StackHeaderMenu';\nimport { StackHeaderSearchBar, type StackHeaderSearchBarProps } from './StackHeaderSearchBar';\nimport { StackHeaderSpacer, type StackHeaderSpacerProps } from './StackHeaderSpacer';\nimport { StackHeaderTitle, type StackHeaderTitleProps } from './StackHeaderTitle';\nimport { StackHeaderView, type StackHeaderViewProps } from './StackHeaderView';\nimport {\n StackHeaderBadge,\n StackHeaderIcon,\n StackHeaderLabel,\n type StackHeaderBadgeProps,\n type StackHeaderIconProps,\n type StackHeaderLabelProps,\n} from './common-primitives';\nimport type { StackHeaderItemSharedProps } from './shared';\n\nexport const StackHeader = Object.assign(StackHeaderComponent, {\n Left: StackHeaderLeft,\n Right: StackHeaderRight,\n BackButton: StackHeaderBackButton,\n Title: StackHeaderTitle,\n SearchBar: StackHeaderSearchBar,\n Button: StackHeaderButton,\n Badge: StackHeaderBadge,\n Label: StackHeaderLabel,\n Icon: StackHeaderIcon,\n Menu: StackHeaderMenu,\n MenuAction: StackHeaderMenuAction,\n View: StackHeaderView,\n Spacer: StackHeaderSpacer,\n});\n\nexport {\n StackHeaderBackButton,\n type StackHeaderBackButtonProps,\n type StackHeaderProps,\n StackHeaderLeft,\n type StackHeaderLeftProps,\n StackHeaderRight,\n type StackHeaderRightProps,\n StackHeaderSearchBar,\n type StackHeaderSearchBarProps,\n StackHeaderTitle,\n type StackHeaderTitleProps,\n StackHeaderButton,\n type StackHeaderButtonProps,\n StackHeaderBadge,\n type StackHeaderBadgeProps,\n StackHeaderLabel,\n type StackHeaderLabelProps,\n StackHeaderIcon,\n type StackHeaderIconProps,\n StackHeaderMenu,\n type StackHeaderMenuProps,\n StackHeaderMenuAction,\n type StackHeaderMenuActionProps,\n StackHeaderView,\n type StackHeaderViewProps,\n StackHeaderSpacer,\n type StackHeaderSpacerProps,\n type StackHeaderItemSharedProps,\n};\n\nexport { StackScreen, appendScreenStackPropsToOptions, type StackScreenProps } from './StackScreen';\n"]}
|
|
@@ -1,50 +1,12 @@
|
|
|
1
1
|
import type { NativeStackHeaderItemButton } from '@react-navigation/native-stack';
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
|
-
import { type ColorValue, type ImageSourcePropType, type StyleProp
|
|
3
|
+
import { type ColorValue, type ImageSourcePropType, type StyleProp } from 'react-native';
|
|
4
4
|
import type { SFSymbol } from 'sf-symbols-typescript';
|
|
5
|
+
import { type BasicTextStyle } from '../../utils/font';
|
|
5
6
|
export interface StackHeaderItemSharedProps {
|
|
6
|
-
/**
|
|
7
|
-
* There are two ways to specify the content of the header item:
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```tsx
|
|
11
|
-
* import { Stack } from 'expo-router';
|
|
12
|
-
*
|
|
13
|
-
* ...
|
|
14
|
-
* <Stack.Header.Button>As text passed as children</Stack.Header.Button>
|
|
15
|
-
* ```
|
|
16
|
-
*
|
|
17
|
-
* @example
|
|
18
|
-
* ```tsx
|
|
19
|
-
* import { Stack } from 'expo-router';
|
|
20
|
-
*
|
|
21
|
-
* ...
|
|
22
|
-
* <Stack.Header.Button>
|
|
23
|
-
* <Stack.Header.Icon sf="star.fill" />
|
|
24
|
-
* <Stack.Header.Label>As components</Stack.Header.Label>
|
|
25
|
-
* <Stack.Header.Badge>3</Stack.Header.Badge>
|
|
26
|
-
* </Stack.Header.Button>
|
|
27
|
-
* ```
|
|
28
|
-
*
|
|
29
|
-
* **Note**: When icon is used, the label will not be shown and will be used for accessibility purposes only.
|
|
30
|
-
*/
|
|
31
7
|
children?: ReactNode;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
*/
|
|
35
|
-
style?: StyleProp<Pick<TextStyle, 'fontFamily' | 'fontSize' | 'fontWeight' | 'color'> & {
|
|
36
|
-
/**
|
|
37
|
-
* When set to 'transparent', the button will have no background color.
|
|
38
|
-
*
|
|
39
|
-
* @platform iOS 26+
|
|
40
|
-
*/
|
|
41
|
-
backgroundColor?: 'transparent';
|
|
42
|
-
}>;
|
|
43
|
-
/**
|
|
44
|
-
* Whether to separate the background of this item from other header items.
|
|
45
|
-
*
|
|
46
|
-
* @default false
|
|
47
|
-
*/
|
|
8
|
+
style?: StyleProp<BasicTextStyle>;
|
|
9
|
+
hidesSharedBackground?: boolean;
|
|
48
10
|
separateBackground?: boolean;
|
|
49
11
|
accessibilityLabel?: string;
|
|
50
12
|
accessibilityHint?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACzF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAiC,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IAClC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,IAAI,CAAC,EAAE,QAAQ,GAAG,mBAAmB,CAAC;IACtC;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAC;CAC1C;AAGD,KAAK,kBAAkB,GAAG,IAAI,CAC5B,2BAA2B,EACzB,OAAO,GACP,YAAY,GACZ,MAAM,GACN,SAAS,GACT,WAAW,GACX,UAAU,GACV,OAAO,GACP,uBAAuB,GACvB,kBAAkB,GAClB,YAAY,GACZ,OAAO,GACP,oBAAoB,GACpB,mBAAmB,CACtB,CAAC;AAEF,wBAAgB,iDAAiD,CAC/D,KAAK,EAAE,0BAA0B,GAChC,kBAAkB,CAmDpB"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.convertStackHeaderSharedPropsToRNSharedHeaderItem = convertStackHeaderSharedPropsToRNSharedHeaderItem;
|
|
4
4
|
const react_1 = require("react");
|
|
5
|
-
const react_native_1 = require("react-native");
|
|
6
5
|
const common_primitives_1 = require("./common-primitives");
|
|
7
6
|
const children_1 = require("../../utils/children");
|
|
7
|
+
const font_1 = require("../../utils/font");
|
|
8
8
|
function convertStackHeaderSharedPropsToRNSharedHeaderItem(props) {
|
|
9
9
|
const { children, style, separateBackground, icon, ...rest } = props;
|
|
10
10
|
const stringChildren = react_1.Children.toArray(children)
|
|
@@ -39,18 +39,14 @@ function convertStackHeaderSharedPropsToRNSharedHeaderItem(props) {
|
|
|
39
39
|
sharesBackground: !separateBackground,
|
|
40
40
|
};
|
|
41
41
|
if (style) {
|
|
42
|
-
const
|
|
42
|
+
const convertedStyle = (0, font_1.convertTextStyleToRNTextStyle)(style) ?? {};
|
|
43
43
|
item.labelStyle = convertedStyle;
|
|
44
|
-
item.hidesSharedBackground = backgroundColor === 'transparent';
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
item.hidesSharedBackground = false;
|
|
48
44
|
}
|
|
49
45
|
if (badgeComponent) {
|
|
50
46
|
item.badge = {
|
|
51
47
|
value: badgeComponent.props.children ?? '',
|
|
52
48
|
};
|
|
53
|
-
const badgeStyle = convertTextStyleToRNTextStyle(badgeComponent.props.style);
|
|
49
|
+
const badgeStyle = (0, font_1.convertTextStyleToRNTextStyle)(badgeComponent.props.style);
|
|
54
50
|
if (badgeStyle) {
|
|
55
51
|
item.badge.style = badgeStyle;
|
|
56
52
|
}
|
|
@@ -60,19 +56,4 @@ function convertStackHeaderSharedPropsToRNSharedHeaderItem(props) {
|
|
|
60
56
|
}
|
|
61
57
|
return item;
|
|
62
58
|
}
|
|
63
|
-
function convertTextStyleToRNTextStyle(style) {
|
|
64
|
-
const flattenedStyle = react_native_1.StyleSheet.flatten(style);
|
|
65
|
-
if (!flattenedStyle) {
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
if ('fontWeight' in flattenedStyle) {
|
|
69
|
-
return {
|
|
70
|
-
...flattenedStyle,
|
|
71
|
-
fontWeight: typeof flattenedStyle.fontWeight === 'number'
|
|
72
|
-
? String(flattenedStyle.fontWeight)
|
|
73
|
-
: flattenedStyle.fontWeight,
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
return flattenedStyle;
|
|
77
|
-
}
|
|
78
59
|
//# sourceMappingURL=shared.js.map
|