expo-router 7.0.0-canary-20251230-fc48ddc → 7.0.0-canary-20260113-0ce2b9c
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/Route.d.ts +3 -5
- package/build/Route.d.ts.map +1 -1
- package/build/Route.js +2 -2
- package/build/Route.js.map +1 -1
- package/build/exports.d.ts +3 -0
- package/build/exports.d.ts.map +1 -1
- package/build/exports.js +3 -1
- package/build/exports.js.map +1 -1
- package/build/fork/native-stack/createNativeStackNavigator.d.ts.map +1 -1
- package/build/fork/native-stack/createNativeStackNavigator.js +9 -0
- package/build/fork/native-stack/createNativeStackNavigator.js.map +1 -1
- package/build/getRoutesCore.d.ts +2 -0
- package/build/getRoutesCore.d.ts.map +1 -1
- package/build/getRoutesCore.js.map +1 -1
- package/build/internal/utils.d.ts +1 -1
- package/build/internal/utils.d.ts.map +1 -1
- package/build/internal/utils.js +2 -2
- package/build/internal/utils.js.map +1 -1
- package/build/layouts/StackClient.d.ts +2 -2
- package/build/layouts/StackClient.d.ts.map +1 -1
- package/build/layouts/StackClient.js +1 -0
- package/build/layouts/StackClient.js.map +1 -1
- package/build/layouts/stack-utils/StackHeaderComponent.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderComponent.js +3 -3
- package/build/layouts/stack-utils/StackHeaderComponent.js.map +1 -1
- package/build/layouts/stack-utils/StackHeaderMenu.d.ts.map +1 -1
- package/build/layouts/stack-utils/StackHeaderMenu.js +1 -0
- package/build/layouts/stack-utils/StackHeaderMenu.js.map +1 -1
- package/build/layouts/stack-utils/StackSearchBar.d.ts +7 -0
- package/build/layouts/stack-utils/StackSearchBar.d.ts.map +1 -0
- package/build/layouts/stack-utils/StackSearchBar.js +19 -0
- package/build/layouts/stack-utils/StackSearchBar.js.map +1 -0
- package/build/layouts/stack-utils/index.d.ts +2 -3
- package/build/layouts/stack-utils/index.d.ts.map +1 -1
- package/build/layouts/stack-utils/index.js +3 -4
- package/build/layouts/stack-utils/index.js.map +1 -1
- package/build/link/elements.d.ts +13 -1
- package/build/link/elements.d.ts.map +1 -1
- package/build/link/elements.js +1 -1
- package/build/link/elements.js.map +1 -1
- package/build/link/preview/native.d.ts +8 -1
- package/build/link/preview/native.d.ts.map +1 -1
- package/build/link/preview/native.js +0 -2
- package/build/link/preview/native.js.map +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.d.ts +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.d.ts.map +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.ios.d.ts +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.ios.d.ts.map +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.ios.js +9 -12
- package/build/link/zoom/ZoomTransitionEnabler.ios.js.map +1 -1
- package/build/link/zoom/ZoomTransitionEnabler.js +2 -2
- package/build/link/zoom/ZoomTransitionEnabler.js.map +1 -1
- package/build/link/zoom/usePreventZoomTransitionDismissal.d.ts +36 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.d.ts.map +1 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.ios.d.ts +3 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.ios.d.ts.map +1 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.ios.js +60 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.ios.js.map +1 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.js +41 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.js.map +1 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.types.d.ts +14 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.types.d.ts.map +1 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.types.js +3 -0
- package/build/link/zoom/usePreventZoomTransitionDismissal.types.js.map +1 -0
- package/build/link/zoom/zoom-transition-context-providers.ios.d.ts.map +1 -1
- package/build/link/zoom/zoom-transition-context-providers.ios.js +6 -1
- package/build/link/zoom/zoom-transition-context-providers.ios.js.map +1 -1
- package/build/link/zoom/zoom-transition-context.d.ts +25 -0
- package/build/link/zoom/zoom-transition-context.d.ts.map +1 -1
- package/build/link/zoom/zoom-transition-context.js +1 -0
- package/build/link/zoom/zoom-transition-context.js.map +1 -1
- package/build/native-tabs/NativeTabsView.d.ts.map +1 -1
- package/build/native-tabs/NativeTabsView.js +21 -2
- package/build/native-tabs/NativeTabsView.js.map +1 -1
- package/build/native-tabs/common/elements.d.ts +8 -0
- package/build/native-tabs/common/elements.d.ts.map +1 -1
- package/build/native-tabs/common/elements.js.map +1 -1
- package/build/navigationParams.d.ts +20 -0
- package/build/navigationParams.d.ts.map +1 -1
- package/build/navigationParams.js +10 -1
- package/build/navigationParams.js.map +1 -1
- package/build/toolbar/elements.d.ts +81 -3
- package/build/toolbar/elements.d.ts.map +1 -1
- package/build/toolbar/elements.js +40 -6
- package/build/toolbar/elements.js.map +1 -1
- package/build/toolbar/index.d.ts +6 -5
- package/build/toolbar/index.d.ts.map +1 -1
- package/build/toolbar/index.js +5 -3
- package/build/toolbar/index.js.map +1 -1
- package/build/toolbar/native.ios.d.ts.map +1 -1
- package/build/toolbar/native.ios.js +3 -1
- package/build/toolbar/native.ios.js.map +1 -1
- package/build/toolbar/native.types.d.ts +17 -1
- package/build/toolbar/native.types.d.ts.map +1 -1
- package/build/toolbar/native.types.js.map +1 -1
- package/build/ui/Slot.d.ts.map +1 -1
- package/build/ui/Slot.js +44 -1
- package/build/ui/Slot.js.map +1 -1
- package/build/useScreens.d.ts +9 -2
- package/build/useScreens.d.ts.map +1 -1
- package/build/useScreens.js +7 -5
- package/build/useScreens.js.map +1 -1
- package/expo-module.config.json +1 -1
- package/ios/LinkPreview/LinkPreviewNativeActionView.swift +7 -0
- package/ios/LinkPreview/LinkPreviewNativeModule.swift +37 -3
- package/ios/LinkPreview/LinkZoomTransition.swift +13 -3
- package/ios/Toolbar/RouterToolbarHostView.swift +1 -1
- package/ios/Toolbar/RouterToolbarItemView.swift +35 -4
- package/ios/Toolbar/RouterToolbarModule.swift +4 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.module → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.module} +7 -7
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.module.md5 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.module.sha1 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.module.sha256 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.module.sha512 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.pom → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.pom} +1 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.pom.md5 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.pom.sha1 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.pom.sha256 +1 -0
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.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 +11 -10
- package/plugin/build/index.d.ts +2 -0
- package/plugin/options.json +5 -0
- package/plugin/src/index.ts +2 -0
- package/build/layouts/stack-utils/StackHeaderSearchBar.d.ts +0 -7
- package/build/layouts/stack-utils/StackHeaderSearchBar.d.ts.map +0 -1
- package/build/layouts/stack-utils/StackHeaderSearchBar.js +0 -16
- package/build/layouts/stack-utils/StackHeaderSearchBar.js.map +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.module.md5 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.module.sha1 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.module.sha256 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.module.sha512 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.pom.md5 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.pom.sha1 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.pom.sha256 +0 -1
- package/local-maven-repo/expo/modules/router/expo.modules.router/7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.pom.sha512 +0 -1
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc-sources.jar → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc-sources.jar.md5 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar.md5} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc-sources.jar.sha1 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar.sha1} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc-sources.jar.sha256 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar.sha256} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc-sources.jar.sha512 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar.sha512} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.aar → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.aar.md5 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar.md5} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.aar.sha1 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar.sha1} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.aar.sha256 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar.sha256} +0 -0
- /package/local-maven-repo/expo/modules/router/expo.modules.router/{7.0.0-canary-20251230-fc48ddc/expo.modules.router-7.0.0-canary-20251230-fc48ddc.aar.sha512 → 7.0.0-canary-20260113-0ce2b9c/expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar.sha512} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ParamListBase, StackRouter as RNStackRouter, StackNavigationState, type RouteProp } from '@react-navigation/native';
|
|
2
2
|
import { NativeStackNavigationEventMap, NativeStackNavigationOptions } from '@react-navigation/native-stack';
|
|
3
3
|
import React, { ComponentProps } from 'react';
|
|
4
|
-
import { StackScreen } from './stack-utils';
|
|
4
|
+
import { StackScreen, StackSearchBar } from './stack-utils';
|
|
5
5
|
import { Protected, type ProtectedProps } from '../views/Protected';
|
|
6
6
|
/**
|
|
7
7
|
* We extend NativeStackNavigationOptions with our custom props
|
|
@@ -158,7 +158,6 @@ declare const Stack: ((props: ComponentProps<typeof RNStack>) => React.JSX.Eleme
|
|
|
158
158
|
Right: React.FC<import("./stack-utils").StackHeaderRightProps>;
|
|
159
159
|
BackButton: typeof import("./stack-utils").StackHeaderBackButton;
|
|
160
160
|
Title: typeof import("./stack-utils").StackHeaderTitle;
|
|
161
|
-
SearchBar: typeof import("./stack-utils").StackHeaderSearchBar;
|
|
162
161
|
Button: React.FC<import("./stack-utils").StackHeaderButtonProps>;
|
|
163
162
|
Badge: React.FC<import("./stack-utils").StackHeaderBadgeProps>;
|
|
164
163
|
Label: React.FC<import("./stack-utils").StackHeaderLabelProps>;
|
|
@@ -168,6 +167,7 @@ declare const Stack: ((props: ComponentProps<typeof RNStack>) => React.JSX.Eleme
|
|
|
168
167
|
View: React.FC<import("./stack-utils").StackHeaderViewProps>;
|
|
169
168
|
Spacer: React.FC<import("./stack-utils").StackHeaderSpacerProps>;
|
|
170
169
|
};
|
|
170
|
+
SearchBar: typeof StackSearchBar;
|
|
171
171
|
};
|
|
172
172
|
export default Stack;
|
|
173
173
|
export declare const StackRouter: typeof RNStackRouter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackClient.d.ts","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,EAKb,WAAW,IAAI,aAAa,EAE5B,oBAAoB,EACpB,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,EAAY,cAAc,EAAW,MAAM,OAAO,CAAC;AAcjE,OAAO,EAGL,WAAW,
|
|
1
|
+
{"version":3,"file":"StackClient.d.ts","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,aAAa,EAKb,WAAW,IAAI,aAAa,EAE5B,oBAAoB,EACpB,KAAK,SAAS,EACf,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,EAAY,cAAc,EAAW,MAAM,OAAO,CAAC;AAcjE,OAAO,EAGL,WAAW,EACX,cAAc,EAEf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOpE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,GAAG,4BAA4B,GAAG;IAC1E,aAAa,CAAC,EAAE;QACd;;;WAGG;QACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACxB;;;WAGG;QACH,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB;;;WAGG;QACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC5B;;;WAGG;QACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAC3B;;;WAGG;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB;;;WAGG;QACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B;;;WAGG;QACH,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKU,CAAC;AA4CxB;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,cAAc,CAAC,OAAO,OAAO,CAAC,CAAC,iBAAiB,CAAC,CA4U9F,CAAC;AA0FF,QAAA,MAAM,KAAK,WACD,cAAc,CAAC,OAAO,OAAO,CAAC;;;;;;;;;;;;;;;;;;CAoDvC,CAAC;AAoCF,eAAe,KAAK,CAAC;AAErB,eAAO,MAAM,WAAW,EAAE,OAAO,aAMhC,CAAC"}
|
|
@@ -474,6 +474,7 @@ const Stack = Object.assign((props) => {
|
|
|
474
474
|
Screen: stack_utils_1.StackScreen,
|
|
475
475
|
Protected: Protected_1.Protected,
|
|
476
476
|
Header: stack_utils_1.StackHeader,
|
|
477
|
+
SearchBar: stack_utils_1.StackSearchBar,
|
|
477
478
|
});
|
|
478
479
|
function disableAnimationInScreenOptions(options, condition) {
|
|
479
480
|
if (options && typeof options === 'function') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackClient.js","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport {\n CommonNavigationAction,\n NavigationAction,\n ParamListBase,\n PartialRoute,\n PartialState,\n Route,\n RouterConfigOptions,\n StackRouter as RNStackRouter,\n StackActionType,\n StackNavigationState,\n type RouteProp,\n} from '@react-navigation/native';\nimport {\n NativeStackNavigationEventMap,\n NativeStackNavigationOptions,\n} from '@react-navigation/native-stack';\nimport { nanoid } from 'nanoid/non-secure';\nimport React, { Children, ComponentProps, useMemo } from 'react';\n\nimport { withLayoutContext } from './withLayoutContext';\nimport { createNativeStackNavigator } from '../fork/native-stack/createNativeStackNavigator';\nimport { useLinkPreviewContext } from '../link/preview/LinkPreviewContext';\nimport {\n getInternalExpoRouterParams,\n INTERNAL_EXPO_ROUTER_IS_PREVIEW_NAVIGATION_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SCREEN_ID_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME,\n type InternalExpoRouterParams,\n} from '../navigationParams';\nimport { SingularOptions, getSingularId } from '../useScreens';\nimport {\n type StackScreenProps,\n StackHeader,\n StackScreen,\n appendScreenStackPropsToOptions,\n} from './stack-utils';\nimport { isChildOfType } from '../utils/children';\nimport { Protected, type ProtectedProps } from '../views/Protected';\nimport { Screen } from '../views/Screen';\n\ntype GetId = NonNullable<RouterConfigOptions['routeGetIdList'][string]>;\n\nconst NativeStackNavigator = createNativeStackNavigator().Navigator;\n\n/**\n * We extend NativeStackNavigationOptions with our custom props\n * to allow for several extra props to be used on web, like modalWidth\n */\nexport type ExtendedStackNavigationOptions = NativeStackNavigationOptions & {\n webModalStyle?: {\n /**\n * Override the width of the modal (px or percentage). Only applies on web platform.\n * @platform web\n */\n width?: number | string;\n /**\n * Override the height of the modal (px or percentage). Applies on web desktop.\n * @platform web\n */\n height?: number | string;\n /**\n * Minimum height of the desktop modal (px or percentage). Overrides the default 640px clamp.\n * @platform web\n */\n minHeight?: number | string;\n /**\n * Minimum width of the desktop modal (px or percentage). Overrides the default 580px.\n * @platform web\n */\n minWidth?: number | string;\n /**\n * Override the border of the desktop modal (any valid CSS border value, e.g. '1px solid #ccc' or 'none').\n * @platform web\n */\n border?: string;\n /**\n * Override the overlay background color (any valid CSS color or rgba/hsla value).\n * @platform web\n */\n overlayBackground?: string;\n /**\n * Override the modal shadow filter (any valid CSS filter value, e.g. 'drop-shadow(0 4px 8px rgba(0,0,0,0.1))' or 'none').\n * @platform web\n */\n shadow?: string;\n };\n};\n\nconst RNStack = withLayoutContext<\n ExtendedStackNavigationOptions,\n typeof NativeStackNavigator,\n StackNavigationState<ParamListBase>,\n NativeStackNavigationEventMap\n>(NativeStackNavigator);\n\ntype RNNavigationAction = Extract<CommonNavigationAction, { type: 'NAVIGATE' }>;\ntype RNPreloadAction = Extract<CommonNavigationAction, { type: 'PRELOAD' }>;\ntype ExpoNavigationAction = Omit<RNNavigationAction, 'payload'> & {\n payload: Omit<RNNavigationAction['payload'], 'params'> & {\n params: RNNavigationAction['payload']['params'] & InternalExpoRouterParams;\n };\n};\n\nfunction isStackAction(\n action: NavigationAction\n): action is StackActionType | RNPreloadAction | ExpoNavigationAction {\n return (\n action.type === 'PUSH' ||\n action.type === 'NAVIGATE' ||\n action.type === 'POP' ||\n action.type === 'POP_TO_TOP' ||\n action.type === 'REPLACE' ||\n action.type === 'PRELOAD'\n );\n}\n\nconst isPreviewAction = (action: NavigationAction): action is ExpoNavigationAction =>\n !!action.payload &&\n 'params' in action.payload &&\n typeof action.payload.params === 'object' &&\n !!getInternalExpoRouterParams(action.payload?.params ?? undefined)[\n INTERNAL_EXPO_ROUTER_IS_PREVIEW_NAVIGATION_PARAM_NAME\n ];\n\nconst getZoomTransitionIdFromAction = (action: NavigationAction): string | undefined => {\n const allParams =\n !!action.payload && 'params' in action.payload && typeof action.payload.params === 'object'\n ? action.payload.params\n : undefined;\n const internalParams = getInternalExpoRouterParams(allParams ?? undefined);\n const val = internalParams[INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME];\n if (val && typeof val === 'string') {\n return val;\n }\n return undefined;\n};\n\n/**\n * React Navigation matches a screen by its name or a 'getID' function that uniquely identifies a screen.\n * When a screen has been uniquely identified, the Stack can only have one instance of that screen.\n *\n * Expo Router allows for a screen to be matched by name and path params, a 'getID' function or a singular id.\n *\n * Instead of reimplementing the entire StackRouter, we can override the getStateForAction method to handle the singular screen logic.\n *\n */\nexport const stackRouterOverride: NonNullable<ComponentProps<typeof RNStack>['UNSTABLE_router']> = (\n original\n) => {\n return {\n getStateForAction: (state, action, options) => {\n if (action.target && action.target !== state.key) {\n return null;\n }\n\n if (!isStackAction(action)) {\n return original.getStateForAction(state, action, options);\n }\n\n // The dynamic getId added to an action, `router.push('screen', { singular: true })`\n const actionSingularOptions =\n action.payload && 'singular' in action.payload\n ? (action.payload.singular as SingularOptions)\n : undefined;\n\n // Handle if 'getID' or 'singular' is set.\n function getIdFunction(): GetId | undefined {\n // Actions can be fired by the user, so we do need to validate their structure.\n if (\n !('payload' in action) ||\n !action.payload ||\n !('name' in action.payload) ||\n typeof action.payload.name !== 'string'\n ) {\n return;\n }\n\n const actionName = action.payload.name;\n\n return (\n // The dynamic singular added to an action, `router.push('screen', { singular: () => 'id' })`\n getActionSingularIdFn(actionSingularOptions, actionName) ||\n // The static getId added as a prop to `<Screen singular />` or `<Screen getId={} />`\n options.routeGetIdList[actionName]\n );\n }\n\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'PUSH':\n case 'NAVIGATE': {\n if (!state.routeNames.includes(action.payload.name)) {\n return null;\n }\n\n // START FORK\n const getId = getIdFunction();\n // const getId = options.routeGetIdList[action.payload.name];\n // END FORK\n const id = getId?.({ params: action.payload.params });\n\n let route: Route<string> | undefined;\n\n if (id !== undefined) {\n route = state.routes.findLast(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n } else if (action.type === 'NAVIGATE') {\n const currentRoute = state.routes[state.index];\n\n // If the route matches the current one, then navigate to it\n if (action.payload.name === currentRoute.name && !isPreviewAction(action)) {\n route = currentRoute;\n } else if (action.payload.pop) {\n route = state.routes.findLast((route) => route.name === action.payload.name);\n }\n }\n\n // START FORK\n let isPreloadedRoute = false;\n if (isPreviewAction(action) && !route) {\n route = state.preloadedRoutes.find(\n (route) => route.name === action.payload.name && id === route.key\n );\n isPreloadedRoute = !!route;\n }\n // END FORK\n\n if (!route) {\n route = state.preloadedRoutes.find(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n // START FORK\n isPreloadedRoute = !!route;\n // END FORK\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge && route) {\n params =\n action.payload.params !== undefined ||\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n let routes: Route<string>[];\n\n if (route) {\n if (action.type === 'NAVIGATE' && action.payload.pop) {\n routes = [];\n\n // Get all routes until the matching one\n for (const r of state.routes) {\n if (r.key === route.key) {\n routes.push({\n ...route,\n path: action.payload.path !== undefined ? action.payload.path : route.path,\n params,\n });\n break;\n }\n\n routes.push(r);\n }\n } else {\n // START FORK\n // If there is an id, then filter out the existing route with the same id.\n // THIS ACTION IS DANGEROUS. This can cause React Native Screens to freeze\n if (id !== undefined) {\n routes = state.routes.filter((r) => r.key !== route.key);\n } else if (action.type === 'NAVIGATE' && state.routes.length > 0) {\n // The navigation action should only replace the last route if it has the same name and path params.\n const lastRoute = state.routes[state.routes.length - 1];\n if (\n getSingularId(lastRoute.name, { params: lastRoute.params }) ===\n getSingularId(route.name, { params })\n ) {\n routes = state.routes.slice(0, -1);\n } else {\n routes = [...state.routes];\n }\n } else {\n routes = [...state.routes];\n }\n\n // If the routes length is the same as the state routes length, then we are navigating to a new route.\n // Otherwise we are replacing an existing route.\n // For preloaded route, we want to use the same key, so that preloaded screen is used.\n const key =\n routes.length === state.routes.length && !isPreloadedRoute\n ? `${action.payload.name}-${nanoid()}`\n : route.key;\n\n routes.push({\n ...route,\n key,\n path:\n action.type === 'NAVIGATE' && action.payload.path !== undefined\n ? action.payload.path\n : route.path,\n params,\n });\n\n // routes = state.routes.filter((r) => r.key !== route.key);\n // routes.push({\n // ...route,\n // path:\n // action.type === 'NAVIGATE' && action.payload.path !== undefined\n // ? action.payload.path\n // : route.path,\n // params,\n // });\n // END FORK\n }\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.type === 'NAVIGATE' ? action.payload.path : undefined,\n params,\n },\n ];\n }\n\n // START FORK\n // return filterSingular(\n const result = {\n ...state,\n index: routes.length - 1,\n preloadedRoutes: state.preloadedRoutes.filter(\n (route) => routes[routes.length - 1].key !== route.key\n ),\n routes,\n };\n\n if (actionSingularOptions) {\n return filterSingular(result, getId);\n }\n\n const zoomTransitionId = getZoomTransitionIdFromAction(action);\n if (zoomTransitionId) {\n const lastRoute = result.routes[result.routes.length - 1];\n const key = lastRoute.key;\n const modifiedLastRoute: typeof lastRoute = {\n ...lastRoute,\n params: {\n ...lastRoute.params,\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SCREEN_ID_PARAM_NAME]: key,\n },\n };\n return {\n ...result,\n routes: [...result.routes.slice(0, -1), modifiedLastRoute],\n };\n }\n\n return result;\n // return {\n // ...state,\n // index: routes.length - 1,\n // preloadedRoutes: state.preloadedRoutes.filter(\n // (route) => routes[routes.length - 1].key !== route.key\n // ),\n // routes,\n // };\n // END FORK\n }\n case 'PRELOAD': {\n // START FORK\n // This will be the case for example for protected route\n if (!state.routeNames.includes(action.payload.name)) {\n return null;\n }\n // END FORK\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n let route: Route<string> | undefined;\n\n if (id !== undefined) {\n route = state.routes.find(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n }\n\n if (route) {\n return {\n ...state,\n routes: state.routes.map((r) => {\n if (r.key !== route?.key) {\n return r;\n }\n return {\n ...r,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n };\n }),\n };\n } else {\n // START FORK\n const currentPreloadedRoute: (typeof state)['preloadedRoutes'][number] = {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n };\n // END FORK\n return {\n ...state,\n // START FORK\n // Adding the current preloaded route to the beginning of the preloadedRoutes array\n // This ensures that the preloaded route will be the next one after the visible route\n // and when navigation will happen, there will be no reshuffling\n // This is a workaround for the link preview navigation issue, when screen would freeze after navigation from native side\n // and reshuffling from react-navigation\n preloadedRoutes: [currentPreloadedRoute].concat(\n state.preloadedRoutes.filter(\n (r) => r.name !== action.payload.name || id !== getId?.({ params: r.params })\n )\n ),\n // preloadedRoutes: state.preloadedRoutes\n // .filter(\n // (r) =>\n // r.name !== action.payload.name ||\n // id !== getId?.({ params: r.params })\n // )\n // .concat({\n // key: `${action.payload.name}-${nanoid()}`,\n // name: action.payload.name,\n // params:\n // routeParamList[action.payload.name] !== undefined\n // ? {\n // ...routeParamList[action.payload.name],\n // ...action.payload.params,\n // }\n // : action.payload.params,\n // }),\n // END FORK\n };\n }\n }\n default: {\n return original.getStateForAction(state, action, options);\n }\n }\n },\n };\n};\n\nfunction getActionSingularIdFn(\n actionGetId: SingularOptions | undefined,\n name: string\n): GetId | undefined {\n if (typeof actionGetId === 'function') {\n return (options) => actionGetId(name, options.params ?? {});\n } else if (actionGetId === true) {\n return (options) => getSingularId(name, options);\n }\n\n return undefined;\n}\n\n/**\n * If there is a dynamic singular on an action, then we need to filter the state to only have singular screens.\n * As multiples may have been added before we did the singular navigation.\n */\nfunction filterSingular<\n T extends\n | StackNavigationState<ParamListBase>\n | PartialState<StackNavigationState<ParamListBase>>\n | null,\n>(state: T, getId?: GetId): T {\n if (!state) {\n return state;\n }\n\n if (!state.routes) {\n return state;\n }\n\n const currentIndex = state.index || state.routes.length - 1;\n const current = state.routes[currentIndex];\n const name = current.name;\n\n const id = getId?.({ params: current.params });\n\n if (!id) {\n return state;\n }\n\n // TypeScript needs a type assertion here for the filter to work.\n let routes = state.routes as PartialRoute<Route<string, object | undefined>>[];\n routes = routes.filter((route, index) => {\n // If the route is the current route, keep it.\n if (index === currentIndex) {\n return true;\n }\n\n // Remove all other routes with the same name and id.\n return name !== route.name || id !== getId?.({ params: route.params });\n });\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n}\n\nfunction mapProtectedScreen(props: ProtectedProps): ProtectedProps {\n return {\n ...props,\n children: Children.toArray(props.children)\n .map((child, index) => {\n if (isChildOfType(child, StackScreen)) {\n const options = appendScreenStackPropsToOptions({}, child.props);\n const { children, ...rest } = child.props;\n return <Screen key={child.props.name} {...rest} options={options} />;\n } else if (isChildOfType(child, Protected)) {\n return <Protected key={`${index}-${props.guard}`} {...mapProtectedScreen(child.props)} />;\n } else if (isChildOfType(child, StackHeader)) {\n // Ignore Stack.Header, because it can be used to set header options for Stack\n // and we use this function to process children of Stack, as well.\n return null;\n } else {\n if (React.isValidElement(child)) {\n console.warn(`Warning: Unknown child element passed to Stack: ${child.type}`);\n } else {\n console.warn(`Warning: Unknown child element passed to Stack: ${child}`);\n }\n }\n return null;\n })\n .filter(Boolean),\n };\n}\n\nconst Stack = Object.assign(\n (props: ComponentProps<typeof RNStack>) => {\n const { isStackAnimationDisabled } = useLinkPreviewContext();\n\n const screenOptionsWithCompositionAPIOptions = useMemo<NativeStackScreenOptions>(() => {\n const stackHeader = Children.toArray(props.children).find((child) =>\n isChildOfType(child, StackHeader)\n );\n if (stackHeader) {\n const screenStackProps: StackScreenProps = { children: stackHeader };\n const currentOptions = props.screenOptions;\n if (currentOptions) {\n if (typeof currentOptions === 'function') {\n return (...args) => {\n const options = currentOptions(...args);\n return appendScreenStackPropsToOptions(options, screenStackProps);\n };\n }\n return appendScreenStackPropsToOptions(currentOptions, screenStackProps);\n } else {\n return appendScreenStackPropsToOptions({}, screenStackProps);\n }\n } else {\n return props.screenOptions;\n }\n }, [props.screenOptions, props.children]);\n\n const screenOptions = useMemo(() => {\n const condition = isStackAnimationDisabled ? () => true : shouldDisableAnimationBasedOnParams;\n\n return disableAnimationInScreenOptions(screenOptionsWithCompositionAPIOptions, condition);\n }, [screenOptionsWithCompositionAPIOptions, isStackAnimationDisabled]);\n\n const rnChildren = useMemo(\n () => mapProtectedScreen({ guard: true, children: props.children }).children,\n [props.children]\n );\n\n return (\n <RNStack\n {...props}\n children={rnChildren}\n screenOptions={screenOptions}\n UNSTABLE_router={stackRouterOverride}\n />\n );\n },\n {\n Screen: StackScreen,\n Protected,\n Header: StackHeader,\n }\n);\n\ntype NativeStackScreenOptions = ComponentProps<typeof RNStack>['screenOptions'];\n\nfunction disableAnimationInScreenOptions(\n options: NativeStackScreenOptions | undefined,\n condition: (route: RouteProp<ParamListBase, string>) => boolean\n): NativeStackScreenOptions {\n if (options && typeof options === 'function') {\n return (props) => {\n const oldOptions = options(props);\n if (condition(props.route)) {\n return {\n ...oldOptions,\n animation: 'none',\n };\n }\n return oldOptions ?? {};\n };\n }\n return (props) => {\n if (condition(props.route)) {\n return {\n ...(options ?? {}),\n animation: 'none',\n };\n }\n return options ?? {};\n };\n}\n\nfunction shouldDisableAnimationBasedOnParams(route: RouteProp<ParamListBase, string>): boolean {\n const expoParams = getInternalExpoRouterParams(route.params);\n return !!expoParams[INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME];\n}\n\nexport default Stack;\n\nexport const StackRouter: typeof RNStackRouter = (options) => {\n const router = RNStackRouter(options);\n return {\n ...router,\n ...stackRouterOverride(router),\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"StackClient.js","sourceRoot":"","sources":["../../src/layouts/StackClient.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\nimport {\n CommonNavigationAction,\n NavigationAction,\n ParamListBase,\n PartialRoute,\n PartialState,\n Route,\n RouterConfigOptions,\n StackRouter as RNStackRouter,\n StackActionType,\n StackNavigationState,\n type RouteProp,\n} from '@react-navigation/native';\nimport {\n NativeStackNavigationEventMap,\n NativeStackNavigationOptions,\n} from '@react-navigation/native-stack';\nimport { nanoid } from 'nanoid/non-secure';\nimport React, { Children, ComponentProps, useMemo } from 'react';\n\nimport { withLayoutContext } from './withLayoutContext';\nimport { createNativeStackNavigator } from '../fork/native-stack/createNativeStackNavigator';\nimport { useLinkPreviewContext } from '../link/preview/LinkPreviewContext';\nimport {\n getInternalExpoRouterParams,\n INTERNAL_EXPO_ROUTER_IS_PREVIEW_NAVIGATION_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SCREEN_ID_PARAM_NAME,\n INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME,\n type InternalExpoRouterParams,\n} from '../navigationParams';\nimport { SingularOptions, getSingularId } from '../useScreens';\nimport {\n type StackScreenProps,\n StackHeader,\n StackScreen,\n StackSearchBar,\n appendScreenStackPropsToOptions,\n} from './stack-utils';\nimport { isChildOfType } from '../utils/children';\nimport { Protected, type ProtectedProps } from '../views/Protected';\nimport { Screen } from '../views/Screen';\n\ntype GetId = NonNullable<RouterConfigOptions['routeGetIdList'][string]>;\n\nconst NativeStackNavigator = createNativeStackNavigator().Navigator;\n\n/**\n * We extend NativeStackNavigationOptions with our custom props\n * to allow for several extra props to be used on web, like modalWidth\n */\nexport type ExtendedStackNavigationOptions = NativeStackNavigationOptions & {\n webModalStyle?: {\n /**\n * Override the width of the modal (px or percentage). Only applies on web platform.\n * @platform web\n */\n width?: number | string;\n /**\n * Override the height of the modal (px or percentage). Applies on web desktop.\n * @platform web\n */\n height?: number | string;\n /**\n * Minimum height of the desktop modal (px or percentage). Overrides the default 640px clamp.\n * @platform web\n */\n minHeight?: number | string;\n /**\n * Minimum width of the desktop modal (px or percentage). Overrides the default 580px.\n * @platform web\n */\n minWidth?: number | string;\n /**\n * Override the border of the desktop modal (any valid CSS border value, e.g. '1px solid #ccc' or 'none').\n * @platform web\n */\n border?: string;\n /**\n * Override the overlay background color (any valid CSS color or rgba/hsla value).\n * @platform web\n */\n overlayBackground?: string;\n /**\n * Override the modal shadow filter (any valid CSS filter value, e.g. 'drop-shadow(0 4px 8px rgba(0,0,0,0.1))' or 'none').\n * @platform web\n */\n shadow?: string;\n };\n};\n\nconst RNStack = withLayoutContext<\n ExtendedStackNavigationOptions,\n typeof NativeStackNavigator,\n StackNavigationState<ParamListBase>,\n NativeStackNavigationEventMap\n>(NativeStackNavigator);\n\ntype RNNavigationAction = Extract<CommonNavigationAction, { type: 'NAVIGATE' }>;\ntype RNPreloadAction = Extract<CommonNavigationAction, { type: 'PRELOAD' }>;\ntype ExpoNavigationAction = Omit<RNNavigationAction, 'payload'> & {\n payload: Omit<RNNavigationAction['payload'], 'params'> & {\n params: RNNavigationAction['payload']['params'] & InternalExpoRouterParams;\n };\n};\n\nfunction isStackAction(\n action: NavigationAction\n): action is StackActionType | RNPreloadAction | ExpoNavigationAction {\n return (\n action.type === 'PUSH' ||\n action.type === 'NAVIGATE' ||\n action.type === 'POP' ||\n action.type === 'POP_TO_TOP' ||\n action.type === 'REPLACE' ||\n action.type === 'PRELOAD'\n );\n}\n\nconst isPreviewAction = (action: NavigationAction): action is ExpoNavigationAction =>\n !!action.payload &&\n 'params' in action.payload &&\n typeof action.payload.params === 'object' &&\n !!getInternalExpoRouterParams(action.payload?.params ?? undefined)[\n INTERNAL_EXPO_ROUTER_IS_PREVIEW_NAVIGATION_PARAM_NAME\n ];\n\nconst getZoomTransitionIdFromAction = (action: NavigationAction): string | undefined => {\n const allParams =\n !!action.payload && 'params' in action.payload && typeof action.payload.params === 'object'\n ? action.payload.params\n : undefined;\n const internalParams = getInternalExpoRouterParams(allParams ?? undefined);\n const val = internalParams[INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SOURCE_ID_PARAM_NAME];\n if (val && typeof val === 'string') {\n return val;\n }\n return undefined;\n};\n\n/**\n * React Navigation matches a screen by its name or a 'getID' function that uniquely identifies a screen.\n * When a screen has been uniquely identified, the Stack can only have one instance of that screen.\n *\n * Expo Router allows for a screen to be matched by name and path params, a 'getID' function or a singular id.\n *\n * Instead of reimplementing the entire StackRouter, we can override the getStateForAction method to handle the singular screen logic.\n *\n */\nexport const stackRouterOverride: NonNullable<ComponentProps<typeof RNStack>['UNSTABLE_router']> = (\n original\n) => {\n return {\n getStateForAction: (state, action, options) => {\n if (action.target && action.target !== state.key) {\n return null;\n }\n\n if (!isStackAction(action)) {\n return original.getStateForAction(state, action, options);\n }\n\n // The dynamic getId added to an action, `router.push('screen', { singular: true })`\n const actionSingularOptions =\n action.payload && 'singular' in action.payload\n ? (action.payload.singular as SingularOptions)\n : undefined;\n\n // Handle if 'getID' or 'singular' is set.\n function getIdFunction(): GetId | undefined {\n // Actions can be fired by the user, so we do need to validate their structure.\n if (\n !('payload' in action) ||\n !action.payload ||\n !('name' in action.payload) ||\n typeof action.payload.name !== 'string'\n ) {\n return;\n }\n\n const actionName = action.payload.name;\n\n return (\n // The dynamic singular added to an action, `router.push('screen', { singular: () => 'id' })`\n getActionSingularIdFn(actionSingularOptions, actionName) ||\n // The static getId added as a prop to `<Screen singular />` or `<Screen getId={} />`\n options.routeGetIdList[actionName]\n );\n }\n\n const { routeParamList } = options;\n\n switch (action.type) {\n case 'PUSH':\n case 'NAVIGATE': {\n if (!state.routeNames.includes(action.payload.name)) {\n return null;\n }\n\n // START FORK\n const getId = getIdFunction();\n // const getId = options.routeGetIdList[action.payload.name];\n // END FORK\n const id = getId?.({ params: action.payload.params });\n\n let route: Route<string> | undefined;\n\n if (id !== undefined) {\n route = state.routes.findLast(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n } else if (action.type === 'NAVIGATE') {\n const currentRoute = state.routes[state.index];\n\n // If the route matches the current one, then navigate to it\n if (action.payload.name === currentRoute.name && !isPreviewAction(action)) {\n route = currentRoute;\n } else if (action.payload.pop) {\n route = state.routes.findLast((route) => route.name === action.payload.name);\n }\n }\n\n // START FORK\n let isPreloadedRoute = false;\n if (isPreviewAction(action) && !route) {\n route = state.preloadedRoutes.find(\n (route) => route.name === action.payload.name && id === route.key\n );\n isPreloadedRoute = !!route;\n }\n // END FORK\n\n if (!route) {\n route = state.preloadedRoutes.find(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n // START FORK\n isPreloadedRoute = !!route;\n // END FORK\n }\n\n let params;\n\n if (action.type === 'NAVIGATE' && action.payload.merge && route) {\n params =\n action.payload.params !== undefined ||\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...route.params,\n ...action.payload.params,\n }\n : route.params;\n } else {\n params =\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params;\n }\n\n let routes: Route<string>[];\n\n if (route) {\n if (action.type === 'NAVIGATE' && action.payload.pop) {\n routes = [];\n\n // Get all routes until the matching one\n for (const r of state.routes) {\n if (r.key === route.key) {\n routes.push({\n ...route,\n path: action.payload.path !== undefined ? action.payload.path : route.path,\n params,\n });\n break;\n }\n\n routes.push(r);\n }\n } else {\n // START FORK\n // If there is an id, then filter out the existing route with the same id.\n // THIS ACTION IS DANGEROUS. This can cause React Native Screens to freeze\n if (id !== undefined) {\n routes = state.routes.filter((r) => r.key !== route.key);\n } else if (action.type === 'NAVIGATE' && state.routes.length > 0) {\n // The navigation action should only replace the last route if it has the same name and path params.\n const lastRoute = state.routes[state.routes.length - 1];\n if (\n getSingularId(lastRoute.name, { params: lastRoute.params }) ===\n getSingularId(route.name, { params })\n ) {\n routes = state.routes.slice(0, -1);\n } else {\n routes = [...state.routes];\n }\n } else {\n routes = [...state.routes];\n }\n\n // If the routes length is the same as the state routes length, then we are navigating to a new route.\n // Otherwise we are replacing an existing route.\n // For preloaded route, we want to use the same key, so that preloaded screen is used.\n const key =\n routes.length === state.routes.length && !isPreloadedRoute\n ? `${action.payload.name}-${nanoid()}`\n : route.key;\n\n routes.push({\n ...route,\n key,\n path:\n action.type === 'NAVIGATE' && action.payload.path !== undefined\n ? action.payload.path\n : route.path,\n params,\n });\n\n // routes = state.routes.filter((r) => r.key !== route.key);\n // routes.push({\n // ...route,\n // path:\n // action.type === 'NAVIGATE' && action.payload.path !== undefined\n // ? action.payload.path\n // : route.path,\n // params,\n // });\n // END FORK\n }\n } else {\n routes = [\n ...state.routes,\n {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n path: action.type === 'NAVIGATE' ? action.payload.path : undefined,\n params,\n },\n ];\n }\n\n // START FORK\n // return filterSingular(\n const result = {\n ...state,\n index: routes.length - 1,\n preloadedRoutes: state.preloadedRoutes.filter(\n (route) => routes[routes.length - 1].key !== route.key\n ),\n routes,\n };\n\n if (actionSingularOptions) {\n return filterSingular(result, getId);\n }\n\n const zoomTransitionId = getZoomTransitionIdFromAction(action);\n if (zoomTransitionId) {\n const lastRoute = result.routes[result.routes.length - 1];\n const key = lastRoute.key;\n const modifiedLastRoute: typeof lastRoute = {\n ...lastRoute,\n params: {\n ...lastRoute.params,\n [INTERNAL_EXPO_ROUTER_ZOOM_TRANSITION_SCREEN_ID_PARAM_NAME]: key,\n },\n };\n return {\n ...result,\n routes: [...result.routes.slice(0, -1), modifiedLastRoute],\n };\n }\n\n return result;\n // return {\n // ...state,\n // index: routes.length - 1,\n // preloadedRoutes: state.preloadedRoutes.filter(\n // (route) => routes[routes.length - 1].key !== route.key\n // ),\n // routes,\n // };\n // END FORK\n }\n case 'PRELOAD': {\n // START FORK\n // This will be the case for example for protected route\n if (!state.routeNames.includes(action.payload.name)) {\n return null;\n }\n // END FORK\n const getId = options.routeGetIdList[action.payload.name];\n const id = getId?.({ params: action.payload.params });\n\n let route: Route<string> | undefined;\n\n if (id !== undefined) {\n route = state.routes.find(\n (route) =>\n route.name === action.payload.name && id === getId?.({ params: route.params })\n );\n }\n\n if (route) {\n return {\n ...state,\n routes: state.routes.map((r) => {\n if (r.key !== route?.key) {\n return r;\n }\n return {\n ...r,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n };\n }),\n };\n } else {\n // START FORK\n const currentPreloadedRoute: (typeof state)['preloadedRoutes'][number] = {\n key: `${action.payload.name}-${nanoid()}`,\n name: action.payload.name,\n params:\n routeParamList[action.payload.name] !== undefined\n ? {\n ...routeParamList[action.payload.name],\n ...action.payload.params,\n }\n : action.payload.params,\n };\n // END FORK\n return {\n ...state,\n // START FORK\n // Adding the current preloaded route to the beginning of the preloadedRoutes array\n // This ensures that the preloaded route will be the next one after the visible route\n // and when navigation will happen, there will be no reshuffling\n // This is a workaround for the link preview navigation issue, when screen would freeze after navigation from native side\n // and reshuffling from react-navigation\n preloadedRoutes: [currentPreloadedRoute].concat(\n state.preloadedRoutes.filter(\n (r) => r.name !== action.payload.name || id !== getId?.({ params: r.params })\n )\n ),\n // preloadedRoutes: state.preloadedRoutes\n // .filter(\n // (r) =>\n // r.name !== action.payload.name ||\n // id !== getId?.({ params: r.params })\n // )\n // .concat({\n // key: `${action.payload.name}-${nanoid()}`,\n // name: action.payload.name,\n // params:\n // routeParamList[action.payload.name] !== undefined\n // ? {\n // ...routeParamList[action.payload.name],\n // ...action.payload.params,\n // }\n // : action.payload.params,\n // }),\n // END FORK\n };\n }\n }\n default: {\n return original.getStateForAction(state, action, options);\n }\n }\n },\n };\n};\n\nfunction getActionSingularIdFn(\n actionGetId: SingularOptions | undefined,\n name: string\n): GetId | undefined {\n if (typeof actionGetId === 'function') {\n return (options) => actionGetId(name, options.params ?? {});\n } else if (actionGetId === true) {\n return (options) => getSingularId(name, options);\n }\n\n return undefined;\n}\n\n/**\n * If there is a dynamic singular on an action, then we need to filter the state to only have singular screens.\n * As multiples may have been added before we did the singular navigation.\n */\nfunction filterSingular<\n T extends\n | StackNavigationState<ParamListBase>\n | PartialState<StackNavigationState<ParamListBase>>\n | null,\n>(state: T, getId?: GetId): T {\n if (!state) {\n return state;\n }\n\n if (!state.routes) {\n return state;\n }\n\n const currentIndex = state.index || state.routes.length - 1;\n const current = state.routes[currentIndex];\n const name = current.name;\n\n const id = getId?.({ params: current.params });\n\n if (!id) {\n return state;\n }\n\n // TypeScript needs a type assertion here for the filter to work.\n let routes = state.routes as PartialRoute<Route<string, object | undefined>>[];\n routes = routes.filter((route, index) => {\n // If the route is the current route, keep it.\n if (index === currentIndex) {\n return true;\n }\n\n // Remove all other routes with the same name and id.\n return name !== route.name || id !== getId?.({ params: route.params });\n });\n\n return {\n ...state,\n index: routes.length - 1,\n routes,\n };\n}\n\nfunction mapProtectedScreen(props: ProtectedProps): ProtectedProps {\n return {\n ...props,\n children: Children.toArray(props.children)\n .map((child, index) => {\n if (isChildOfType(child, StackScreen)) {\n const options = appendScreenStackPropsToOptions({}, child.props);\n const { children, ...rest } = child.props;\n return <Screen key={child.props.name} {...rest} options={options} />;\n } else if (isChildOfType(child, Protected)) {\n return <Protected key={`${index}-${props.guard}`} {...mapProtectedScreen(child.props)} />;\n } else if (isChildOfType(child, StackHeader)) {\n // Ignore Stack.Header, because it can be used to set header options for Stack\n // and we use this function to process children of Stack, as well.\n return null;\n } else {\n if (React.isValidElement(child)) {\n console.warn(`Warning: Unknown child element passed to Stack: ${child.type}`);\n } else {\n console.warn(`Warning: Unknown child element passed to Stack: ${child}`);\n }\n }\n return null;\n })\n .filter(Boolean),\n };\n}\n\nconst Stack = Object.assign(\n (props: ComponentProps<typeof RNStack>) => {\n const { isStackAnimationDisabled } = useLinkPreviewContext();\n\n const screenOptionsWithCompositionAPIOptions = useMemo<NativeStackScreenOptions>(() => {\n const stackHeader = Children.toArray(props.children).find((child) =>\n isChildOfType(child, StackHeader)\n );\n if (stackHeader) {\n const screenStackProps: StackScreenProps = { children: stackHeader };\n const currentOptions = props.screenOptions;\n if (currentOptions) {\n if (typeof currentOptions === 'function') {\n return (...args) => {\n const options = currentOptions(...args);\n return appendScreenStackPropsToOptions(options, screenStackProps);\n };\n }\n return appendScreenStackPropsToOptions(currentOptions, screenStackProps);\n } else {\n return appendScreenStackPropsToOptions({}, screenStackProps);\n }\n } else {\n return props.screenOptions;\n }\n }, [props.screenOptions, props.children]);\n\n const screenOptions = useMemo(() => {\n const condition = isStackAnimationDisabled ? () => true : shouldDisableAnimationBasedOnParams;\n\n return disableAnimationInScreenOptions(screenOptionsWithCompositionAPIOptions, condition);\n }, [screenOptionsWithCompositionAPIOptions, isStackAnimationDisabled]);\n\n const rnChildren = useMemo(\n () => mapProtectedScreen({ guard: true, children: props.children }).children,\n [props.children]\n );\n\n return (\n <RNStack\n {...props}\n children={rnChildren}\n screenOptions={screenOptions}\n UNSTABLE_router={stackRouterOverride}\n />\n );\n },\n {\n Screen: StackScreen,\n Protected,\n Header: StackHeader,\n SearchBar: StackSearchBar,\n }\n);\n\ntype NativeStackScreenOptions = ComponentProps<typeof RNStack>['screenOptions'];\n\nfunction disableAnimationInScreenOptions(\n options: NativeStackScreenOptions | undefined,\n condition: (route: RouteProp<ParamListBase, string>) => boolean\n): NativeStackScreenOptions {\n if (options && typeof options === 'function') {\n return (props) => {\n const oldOptions = options(props);\n if (condition(props.route)) {\n return {\n ...oldOptions,\n animation: 'none',\n };\n }\n return oldOptions ?? {};\n };\n }\n return (props) => {\n if (condition(props.route)) {\n return {\n ...(options ?? {}),\n animation: 'none',\n };\n }\n return options ?? {};\n };\n}\n\nfunction shouldDisableAnimationBasedOnParams(route: RouteProp<ParamListBase, string>): boolean {\n const expoParams = getInternalExpoRouterParams(route.params);\n return !!expoParams[INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME];\n}\n\nexport default Stack;\n\nexport const StackRouter: typeof RNStackRouter = (options) => {\n const router = RNStackRouter(options);\n return {\n ...router,\n ...stackRouterOverride(router),\n };\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackHeaderComponent.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"StackHeaderComponent.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,EAAqC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC3E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAiBzE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,4BAA4B,CAAC,YAAY,CAAC,CAAC;IACxD;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;QAChB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,eAAe,CAAC,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;QAClE,WAAW,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;KACzC,CAAC,CAAC;IACH;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC;QACrB,eAAe,CAAC,EAAE,4BAA4B,CAAC,2BAA2B,CAAC,CAAC;QAC5E,WAAW,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;KACzC,CAAC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,+BAK3D;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,gBAAgB,GACtB,4BAA4B,CAqD9B"}
|
|
@@ -6,8 +6,8 @@ const react_1 = require("react");
|
|
|
6
6
|
const react_native_1 = require("react-native");
|
|
7
7
|
const StackHeaderBackButton_1 = require("./StackHeaderBackButton");
|
|
8
8
|
const StackHeaderLeftRight_1 = require("./StackHeaderLeftRight");
|
|
9
|
-
const StackHeaderSearchBar_1 = require("./StackHeaderSearchBar");
|
|
10
9
|
const StackHeaderTitle_1 = require("./StackHeaderTitle");
|
|
10
|
+
const StackSearchBar_1 = require("./StackSearchBar");
|
|
11
11
|
const children_1 = require("../../utils/children");
|
|
12
12
|
const Screen_1 = require("../../views/Screen");
|
|
13
13
|
/**
|
|
@@ -101,8 +101,8 @@ function appendStackHeaderPropsToOptions(options, props) {
|
|
|
101
101
|
else if ((0, children_1.isChildOfType)(child, StackHeaderBackButton_1.StackHeaderBackButton)) {
|
|
102
102
|
updatedOptions = (0, StackHeaderBackButton_1.appendStackHeaderBackButtonPropsToOptions)(updatedOptions, child.props);
|
|
103
103
|
}
|
|
104
|
-
else if ((0, children_1.isChildOfType)(child,
|
|
105
|
-
updatedOptions = (0,
|
|
104
|
+
else if ((0, children_1.isChildOfType)(child, StackSearchBar_1.StackSearchBar)) {
|
|
105
|
+
updatedOptions = (0, StackSearchBar_1.appendStackSearchBarPropsToOptions)(updatedOptions, child.props);
|
|
106
106
|
}
|
|
107
107
|
else {
|
|
108
108
|
console.warn(`Warning: Unknown child element passed to Stack.Header: ${child.type.name ?? child.type}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackHeaderComponent.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderComponent.tsx"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"StackHeaderComponent.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderComponent.tsx"],"names":[],"mappings":"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","sourcesContent":["import { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport { Children, isValidElement, useMemo, type ReactNode } from 'react';\nimport { StyleSheet, type ColorValue, type StyleProp } from 'react-native';\nimport type { ScreenStackHeaderConfigProps } from 'react-native-screens';\n\nimport {\n appendStackHeaderBackButtonPropsToOptions,\n StackHeaderBackButton,\n} from './StackHeaderBackButton';\nimport {\n appendStackHeaderLeftPropsToOptions,\n appendStackHeaderRightPropsToOptions,\n StackHeaderLeft,\n StackHeaderRight,\n} from './StackHeaderLeftRight';\nimport { appendStackHeaderTitlePropsToOptions, StackHeaderTitle } from './StackHeaderTitle';\nimport { appendStackSearchBarPropsToOptions, StackSearchBar } from './StackSearchBar';\nimport { isChildOfType } from '../../utils/children';\nimport { Screen } from '../../views/Screen';\n\nexport interface StackHeaderProps {\n /**\n * Child elements to compose the header. Can include Stack.Header.Title, Stack.Header.Left,\n * Stack.Header.Right, Stack.Header.BackButton, and Stack.Header.SearchBar components.\n */\n children?: ReactNode;\n /**\n * Whether to hide the header completely. When set to `true`, the header will not be rendered.\n *\n * @default false\n */\n hidden?: boolean;\n /**\n * When `true`, renders children as a custom header component, replacing the default header entirely.\n * Use this to implement fully custom header layouts.\n *\n * @default false\n */\n asChild?: boolean;\n /**\n * The blur effect to apply to the header background on iOS.\n * Common values include 'regular', 'prominent', 'systemMaterial', etc.\n *\n * @platform ios\n */\n blurEffect?: ScreenStackHeaderConfigProps['blurEffect'];\n /**\n * Style properties for the standard-sized header.\n * - `color`: Tint color for header elements (similar to tintColor in React Navigation)\n * - `backgroundColor`: Background color of the header\n * - `shadowColor`: Set to 'transparent' to hide the header shadow/border\n */\n style?: StyleProp<{\n color?: ColorValue; // tintColor from ReactNavigation\n backgroundColor?: ScreenStackHeaderConfigProps['backgroundColor'];\n shadowColor?: undefined | 'transparent';\n }>;\n /**\n * Style properties for the large title header (iOS).\n * - `backgroundColor`: Background color of the large title header\n * - `shadowColor`: Set to 'transparent' to hide the large title shadow/border\n *\n * @platform ios\n */\n largeStyle?: StyleProp<{\n backgroundColor?: ScreenStackHeaderConfigProps['largeTitleBackgroundColor'];\n shadowColor?: undefined | 'transparent';\n }>;\n}\n\n/**\n * The component used to configure the whole stack header.\n *\n * When used inside a screen, it allows you to customize the header dynamically by composing\n * header subcomponents (title, left/right areas, back button, search bar, etc.).\n *\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Page() {\n * return (\n * <>\n * <Stack.Header>\n * <Stack.Header.Title>Page title</Stack.Header.Title>\n * <Stack.Header.Left>\n * <Stack.Header.Button onPress={() => alert('Left pressed')} />\n * </Stack.Header.Left>\n * <Stack.Header.Right>\n * <Stack.Header.Button onPress={() => alert('Right pressed')} />\n * </Stack.Header.Right>\n * </Stack.Header>\n * <ScreenContent />\n * </>\n * );\n * }\n * ```\n *\n * When used inside a layout, it needs to be wrapped in `Stack.Screen` to take effect.\n *\n * Example (inside a layout):\n * ```tsx\n * import { Stack } from 'expo-router';\n *\n * export default function Layout() {\n * return (\n * <Stack>\n * <Stack.Screen name=\"index\">\n * <Stack.Header>\n * <Stack.Header.Title>Layout title</Stack.Header.Title>\n * <Stack.Header.Right>\n * <Stack.Header.Button onPress={() => alert('Right pressed')} />\n * </Stack.Header.Right>\n * </Stack.Header>\n * </Stack.Screen>\n * </Stack>\n * );\n * }\n * ```\n */\nexport function StackHeaderComponent(props: StackHeaderProps) {\n // This component will only render when used inside a page\n // but only if it is not wrapped in Stack.Screen\n const updatedOptions = useMemo(() => appendStackHeaderPropsToOptions({}, props), [props]);\n return <Screen options={updatedOptions} />;\n}\n\nexport function appendStackHeaderPropsToOptions(\n options: NativeStackNavigationOptions,\n props: StackHeaderProps\n): NativeStackNavigationOptions {\n const flattenedStyle = StyleSheet.flatten(props.style);\n const flattenedLargeStyle = StyleSheet.flatten(props.largeStyle);\n\n if (props.hidden) {\n return { ...options, headerShown: false };\n }\n\n if (props.asChild) {\n return { ...options, header: () => props.children };\n }\n\n let updatedOptions: NativeStackNavigationOptions = {\n ...options,\n headerShown: !props.hidden,\n headerBlurEffect: props.blurEffect,\n headerStyle: {\n backgroundColor: flattenedStyle?.backgroundColor as string | undefined,\n },\n headerLargeStyle: {\n backgroundColor: flattenedLargeStyle?.backgroundColor as string | undefined,\n },\n headerShadowVisible: flattenedStyle?.shadowColor !== 'transparent',\n headerLargeTitleShadowVisible: flattenedLargeStyle?.shadowColor !== 'transparent',\n };\n\n function appendChildOptions(child: React.ReactElement, options: NativeStackNavigationOptions) {\n let updatedOptions = options;\n if (isChildOfType(child, StackHeaderTitle)) {\n updatedOptions = appendStackHeaderTitlePropsToOptions(updatedOptions, child.props);\n } else if (isChildOfType(child, StackHeaderLeft)) {\n updatedOptions = appendStackHeaderLeftPropsToOptions(updatedOptions, child.props);\n } else if (isChildOfType(child, StackHeaderRight)) {\n updatedOptions = appendStackHeaderRightPropsToOptions(updatedOptions, child.props);\n } else if (isChildOfType(child, StackHeaderBackButton)) {\n updatedOptions = appendStackHeaderBackButtonPropsToOptions(updatedOptions, child.props);\n } else if (isChildOfType(child, StackSearchBar)) {\n updatedOptions = appendStackSearchBarPropsToOptions(updatedOptions, child.props);\n } else {\n console.warn(\n `Warning: Unknown child element passed to Stack.Header: ${(child.type as { name: string }).name ?? child.type}`\n );\n }\n return updatedOptions;\n }\n\n Children.forEach(props.children, (child) => {\n if (isValidElement(child)) {\n updatedOptions = appendChildOptions(child, updatedOptions);\n }\n });\n\n return updatedOptions;\n}\n"]}
|
|
@@ -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,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;
|
|
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;AAuDD,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"}
|
|
@@ -137,6 +137,7 @@ function convertStackHeaderSubmenuMenuPropsToRNHeaderItem(props) {
|
|
|
137
137
|
if (props.destructive !== undefined) {
|
|
138
138
|
item.destructive = props.destructive;
|
|
139
139
|
}
|
|
140
|
+
// TODO: Add elementSize to react-native-screens
|
|
140
141
|
if (sharedProps.icon) {
|
|
141
142
|
// Only SF Symbols are supported in submenu icons
|
|
142
143
|
if (sharedProps.icon.type === 'sfSymbol') {
|
|
@@ -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 {\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
|
+
{"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 // TODO: Add elementSize to react-native-screens\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,7 @@
|
|
|
1
|
+
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
|
|
2
|
+
import type { SearchBarProps } from 'react-native-screens';
|
|
3
|
+
export interface StackSearchBarProps extends SearchBarProps {
|
|
4
|
+
}
|
|
5
|
+
export declare function StackSearchBar(props: StackSearchBarProps): import("react").JSX.Element;
|
|
6
|
+
export declare function appendStackSearchBarPropsToOptions(options: NativeStackNavigationOptions, props: StackSearchBarProps): NativeStackNavigationOptions;
|
|
7
|
+
//# sourceMappingURL=StackSearchBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackSearchBar.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackSearchBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAE9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAO3D,MAAM,WAAW,mBAAoB,SAAQ,cAAc;CAAG;AAE9D,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,+BAGxD;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,mBAAmB,GACzB,4BAA4B,CAO9B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StackSearchBar = StackSearchBar;
|
|
4
|
+
exports.appendStackSearchBarPropsToOptions = appendStackSearchBarPropsToOptions;
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const Screen_1 = require("../../views/Screen");
|
|
7
|
+
function StackSearchBar(props) {
|
|
8
|
+
const updatedOptions = (0, react_1.useMemo)(() => appendStackSearchBarPropsToOptions({}, props), [props]);
|
|
9
|
+
return <Screen_1.Screen options={updatedOptions}/>;
|
|
10
|
+
}
|
|
11
|
+
function appendStackSearchBarPropsToOptions(options, props) {
|
|
12
|
+
return {
|
|
13
|
+
...options,
|
|
14
|
+
headerSearchBarOptions: {
|
|
15
|
+
...props,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=StackSearchBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StackSearchBar.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackSearchBar.tsx"],"names":[],"mappings":";;AAWA,wCAGC;AAED,gFAUC;AAzBD,iCAAgC;AAGhC,+CAA4C;AAO5C,SAAgB,cAAc,CAAC,KAA0B;IACvD,MAAM,cAAc,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,kCAAkC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7F,OAAO,CAAC,eAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,EAAG,CAAC;AAC7C,CAAC;AAED,SAAgB,kCAAkC,CAChD,OAAqC,EACrC,KAA0B;IAE1B,OAAO;QACL,GAAG,OAAO;QACV,sBAAsB,EAAE;YACtB,GAAG,KAAK;SACT;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport { useMemo } from 'react';\nimport type { SearchBarProps } from 'react-native-screens';\n\nimport { Screen } from '../../views/Screen';\n\n// TODO: Discuss adding SearchBarPreferredSlot to react-native-screens header items\n// and exposing it as Stack.Header.SearchBarPreferredSlot\n// https://linear.app/expo/issue/ENG-18555\nexport interface StackSearchBarProps extends SearchBarProps {}\n\nexport function StackSearchBar(props: StackSearchBarProps) {\n const updatedOptions = useMemo(() => appendStackSearchBarPropsToOptions({}, props), [props]);\n return <Screen options={updatedOptions} />;\n}\n\nexport function appendStackSearchBarPropsToOptions(\n options: NativeStackNavigationOptions,\n props: StackSearchBarProps\n): NativeStackNavigationOptions {\n return {\n ...options,\n headerSearchBarOptions: {\n ...props,\n },\n };\n}\n"]}
|
|
@@ -3,10 +3,10 @@ import { StackHeaderButton, type StackHeaderButtonProps } from './StackHeaderBut
|
|
|
3
3
|
import { StackHeaderComponent, type StackHeaderProps } from './StackHeaderComponent';
|
|
4
4
|
import { StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps } from './StackHeaderLeftRight';
|
|
5
5
|
import { StackHeaderMenu, StackHeaderMenuAction, type StackHeaderMenuActionProps, type StackHeaderMenuProps } from './StackHeaderMenu';
|
|
6
|
-
import { StackHeaderSearchBar, type StackHeaderSearchBarProps } from './StackHeaderSearchBar';
|
|
7
6
|
import { StackHeaderSpacer, type StackHeaderSpacerProps } from './StackHeaderSpacer';
|
|
8
7
|
import { StackHeaderTitle, type StackHeaderTitleProps } from './StackHeaderTitle';
|
|
9
8
|
import { StackHeaderView, type StackHeaderViewProps } from './StackHeaderView';
|
|
9
|
+
import { StackSearchBar, type StackSearchBarProps } from './StackSearchBar';
|
|
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 & {
|
|
@@ -14,7 +14,6 @@ export declare const StackHeader: typeof StackHeaderComponent & {
|
|
|
14
14
|
Right: import("react").FC<StackHeaderRightProps>;
|
|
15
15
|
BackButton: typeof StackHeaderBackButton;
|
|
16
16
|
Title: typeof StackHeaderTitle;
|
|
17
|
-
SearchBar: typeof StackHeaderSearchBar;
|
|
18
17
|
Button: import("react").FC<StackHeaderButtonProps>;
|
|
19
18
|
Badge: import("react").FC<StackHeaderBadgeProps>;
|
|
20
19
|
Label: import("react").FC<StackHeaderLabelProps>;
|
|
@@ -24,6 +23,6 @@ export declare const StackHeader: typeof StackHeaderComponent & {
|
|
|
24
23
|
View: import("react").FC<StackHeaderViewProps>;
|
|
25
24
|
Spacer: import("react").FC<StackHeaderSpacerProps>;
|
|
26
25
|
};
|
|
27
|
-
export { StackHeaderBackButton, type StackHeaderBackButtonProps, type StackHeaderProps, StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps,
|
|
26
|
+
export { StackHeaderBackButton, type StackHeaderBackButtonProps, type StackHeaderProps, StackHeaderLeft, type StackHeaderLeftProps, StackHeaderRight, type StackHeaderRightProps, StackSearchBar, type StackSearchBarProps, 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
27
|
export { StackScreen, appendScreenStackPropsToOptions, type StackScreenProps } from './StackScreen';
|
|
29
28
|
//# 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,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,
|
|
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,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,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,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;;;;;;;;;;;;;CAatB,CAAC;AAEH,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,gBAAgB,EACrB,eAAe,EACf,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,cAAc,EACd,KAAK,mBAAmB,EACxB,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,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.appendScreenStackPropsToOptions = exports.StackScreen = exports.StackHeaderSpacer = exports.StackHeaderView = exports.StackHeaderMenuAction = exports.StackHeaderMenu = exports.StackHeaderIcon = exports.StackHeaderLabel = exports.StackHeaderBadge = exports.StackHeaderButton = exports.StackHeaderTitle = 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.StackSearchBar = 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");
|
|
@@ -12,14 +12,14 @@ Object.defineProperty(exports, "StackHeaderRight", { enumerable: true, get: func
|
|
|
12
12
|
const StackHeaderMenu_1 = require("./StackHeaderMenu");
|
|
13
13
|
Object.defineProperty(exports, "StackHeaderMenu", { enumerable: true, get: function () { return StackHeaderMenu_1.StackHeaderMenu; } });
|
|
14
14
|
Object.defineProperty(exports, "StackHeaderMenuAction", { enumerable: true, get: function () { return StackHeaderMenu_1.StackHeaderMenuAction; } });
|
|
15
|
-
const StackHeaderSearchBar_1 = require("./StackHeaderSearchBar");
|
|
16
|
-
Object.defineProperty(exports, "StackHeaderSearchBar", { enumerable: true, get: function () { return StackHeaderSearchBar_1.StackHeaderSearchBar; } });
|
|
17
15
|
const StackHeaderSpacer_1 = require("./StackHeaderSpacer");
|
|
18
16
|
Object.defineProperty(exports, "StackHeaderSpacer", { enumerable: true, get: function () { return StackHeaderSpacer_1.StackHeaderSpacer; } });
|
|
19
17
|
const StackHeaderTitle_1 = require("./StackHeaderTitle");
|
|
20
18
|
Object.defineProperty(exports, "StackHeaderTitle", { enumerable: true, get: function () { return StackHeaderTitle_1.StackHeaderTitle; } });
|
|
21
19
|
const StackHeaderView_1 = require("./StackHeaderView");
|
|
22
20
|
Object.defineProperty(exports, "StackHeaderView", { enumerable: true, get: function () { return StackHeaderView_1.StackHeaderView; } });
|
|
21
|
+
const StackSearchBar_1 = require("./StackSearchBar");
|
|
22
|
+
Object.defineProperty(exports, "StackSearchBar", { enumerable: true, get: function () { return StackSearchBar_1.StackSearchBar; } });
|
|
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; } });
|
|
@@ -29,7 +29,6 @@ exports.StackHeader = Object.assign(StackHeaderComponent_1.StackHeaderComponent,
|
|
|
29
29
|
Right: StackHeaderLeftRight_1.StackHeaderRight,
|
|
30
30
|
BackButton: StackHeaderBackButton_1.StackHeaderBackButton,
|
|
31
31
|
Title: StackHeaderTitle_1.StackHeaderTitle,
|
|
32
|
-
SearchBar: StackHeaderSearchBar_1.StackHeaderSearchBar,
|
|
33
32
|
Button: StackHeaderButton_1.StackHeaderButton,
|
|
34
33
|
Badge: common_primitives_1.StackHeaderBadge,
|
|
35
34
|
Label: common_primitives_1.StackHeaderLabel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":";;;AAAA,mEAAiG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/index.tsx"],"names":[],"mappings":";;;AAAA,mEAAiG;AA6C/F,sGA7CO,6CAAqB,OA6CP;AA5CvB,2DAAqF;AAuDnF,kGAvDO,qCAAiB,OAuDP;AAtDnB,iEAAqF;AACrF,iEAKgC;AAwC9B,gGA5CA,sCAAe,OA4CA;AAEf,iGA5CA,uCAAgB,OA4CA;AAzClB,uDAK2B;AAkDzB,gGAtDA,iCAAe,OAsDA;AAEf,sGAvDA,uCAAqB,OAuDA;AAnDvB,2DAAqF;AAuDnF,kGAvDO,qCAAiB,OAuDP;AAtDnB,yDAAkF;AAsChF,iGAtCO,mCAAgB,OAsCP;AArClB,uDAA+E;AAmD7E,gGAnDO,iCAAe,OAmDP;AAlDjB,qDAA4E;AAkC1E,+FAlCO,+BAAc,OAkCP;AAjChB,2DAO6B;AAgC3B,iGAtCA,oCAAgB,OAsCA;AAIhB,gGAzCA,mCAAe,OAyCA;AAFf,iGAtCA,oCAAgB,OAsCA;AA/BL,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,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 { StackHeaderSpacer, type StackHeaderSpacerProps } from './StackHeaderSpacer';\nimport { StackHeaderTitle, type StackHeaderTitleProps } from './StackHeaderTitle';\nimport { StackHeaderView, type StackHeaderViewProps } from './StackHeaderView';\nimport { StackSearchBar, type StackSearchBarProps } from './StackSearchBar';\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 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 StackSearchBar,\n type StackSearchBarProps,\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"]}
|