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
package/build/useScreens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from '@react-navigation/native';\nimport type { NativeStackNavigationEventMap } from '@react-navigation/native-stack';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { LoadedRoute, Route, RouteNode, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { getPathFromState } from './fork/getPathFromState';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport { SuspenseFallback } from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record<string, any> = Record<string, any>,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record<string, any>;\n options?:\n | TOptions\n | ((prop: { route: RouteProp<ParamListBase, string>; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners<TState, TEventMap>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n navigation: any;\n }) => ScreenListeners<TState, TEventMap>);\n\n getId?: ({ params }: { params?: Record<string, any> }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial<ScreenProps> }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex((child) => child.route === name);\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial<ScreenProps>;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set<string>,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some((userDefinedScreen) => userDefinedScreen.name === child.route)\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => !protectedScreens.has(item.route.route))\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(value: RouteNode, { ErrorBoundary, ...component }: LoadedRoute) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a <Text> component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return <Try catch={ErrorBoundary}>{children}</Try>;\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute };\n }\n }\n\n return { default: component.default };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap<RouteNode, React.ComponentType<any>>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent<React.RefAttributes<unknown>>\n | React.ComponentType<any>;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType<any>;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n ScreenComponent = fromImport(value, res).default!;\n }\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: any) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !('state' in state.routes[state.index]);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !('state' in state.routes[state.index]);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener(\n 'transitionEnd',\n (e?: NativeStackNavigationEventMap['transitionEnd']) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n }\n );\n }, [navigation]);\n\n return (\n <Route node={value} route={route}>\n {value.type === 'route' && unstable_navigationEvents.hasAnyListener() && (\n <AnalyticsListeners navigation={navigation} screenId={route.key} />\n )}\n <ZoomTransitionEnabler route={route} />\n <ZoomTransitionTargetContextProvider route={route}>\n <React.Suspense fallback={<SuspenseFallback route={value} />}>\n <ScreenComponent\n {...props}\n // Expose the template segment path, e.g. `(home)`, `[foo]`, `index`\n // the intention is to make it possible to deduce shared routes.\n segment={value.route}\n />\n </React.Suspense>\n </ZoomTransitionTargetContextProvider>\n </Route>\n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer<EventMapBase>;\n screenId: string;\n}) {\n const stateForPath = useStateForPath();\n const isFirstRenderRef = React.useRef(true);\n\n const pathname = useMemo(\n () => (stateForPath ? decodeURIComponent(getPathFromState(stateForPath)) : undefined),\n [stateForPath]\n );\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (pathname) {\n unstable_navigationEvents.emit('pageWillRender', {\n pathname,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (pathname) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname,\n screenId,\n });\n };\n }\n return () => {};\n }, [pathname]);\n\n useEffect(() => {\n if (pathname) {\n const cleanFocus = navigation.addListener('focus', () => {\n unstable_navigationEvents.emit('pageFocused', {\n pathname,\n screenId,\n });\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname,\n screenId,\n });\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, pathname]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial<ScreenProps> = {}\n) {\n return (\n <Screen\n {...props}\n name={route.route}\n key={route.route}\n getId={getId}\n options={screenOptionsFactory(route, options)}\n getComponent={() => getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record<string, any> = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useScreens.js","sourceRoot":"","sources":["../src/useScreens.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type { BottomTabNavigationEventMap } from '@react-navigation/bottom-tabs';\nimport {\n useStateForPath,\n type EventConsumer,\n type EventMapBase,\n type NavigationProp,\n type NavigationState,\n type ParamListBase,\n type RouteProp,\n type ScreenListeners,\n} from '@react-navigation/native';\nimport type { NativeStackNavigationEventMap } from '@react-navigation/native-stack';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { LoadedRoute, Route, RouteNode, sortRoutesWithInitial, useRouteNode } from './Route';\nimport { getPathFromState } from './fork/getPathFromState';\nimport { useExpoRouterStore } from './global-state/storeContext';\nimport EXPO_ROUTER_IMPORT_MODE from './import-mode';\nimport { ZoomTransitionEnabler } from './link/zoom/ZoomTransitionEnabler';\nimport { ZoomTransitionTargetContextProvider } from './link/zoom/zoom-transition-context-providers';\nimport { unstable_navigationEvents } from './navigationEvents';\nimport {\n hasParam,\n INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME,\n removeParams,\n} from './navigationParams';\nimport { Screen } from './primitives';\nimport { UnknownOutputParams } from './types';\nimport { EmptyRoute } from './views/EmptyRoute';\nimport { SuspenseFallback } from './views/SuspenseFallback';\nimport { Try } from './views/Try';\n\nexport type ScreenProps<\n TOptions extends Record<string, any> = Record<string, any>,\n TState extends NavigationState = NavigationState,\n TEventMap extends EventMapBase = EventMapBase,\n> = {\n /** Name is required when used inside a Layout component. */\n name?: string;\n /**\n * Redirect to the nearest sibling route.\n * If all children are `redirect={true}`, the layout will render `null` as there are no children to render.\n */\n redirect?: boolean;\n initialParams?: Record<string, any>;\n options?:\n | TOptions\n | ((prop: { route: RouteProp<ParamListBase, string>; navigation: any }) => TOptions);\n\n listeners?:\n | ScreenListeners<TState, TEventMap>\n | ((prop: {\n route: RouteProp<ParamListBase, string>;\n navigation: any;\n }) => ScreenListeners<TState, TEventMap>);\n\n getId?: ({ params }: { params?: Record<string, any> }) => string | undefined;\n\n dangerouslySingular?: SingularOptions;\n};\n\nexport type SingularOptions =\n | boolean\n | ((name: string, params: UnknownOutputParams) => string | undefined);\n\nfunction getSortedChildren(\n children: RouteNode[],\n order: ScreenProps[] = [],\n initialRouteName?: string\n): { route: RouteNode; props: Partial<ScreenProps> }[] {\n if (!order?.length) {\n return children\n .sort(sortRoutesWithInitial(initialRouteName))\n .map((route) => ({ route, props: {} }));\n }\n const entries = [...children];\n\n const ordered = order\n .map(\n ({\n name,\n redirect,\n initialParams,\n listeners,\n options,\n getId,\n dangerouslySingular: singular,\n }) => {\n if (!entries.length) {\n console.warn(\n `[Layout children]: Too many screens defined. Route \"${name}\" is extraneous.`\n );\n return null;\n }\n const matchIndex = entries.findIndex((child) => child.route === name);\n if (matchIndex === -1) {\n console.warn(\n `[Layout children]: No route named \"${name}\" exists in nested children:`,\n children.map(({ route }) => route)\n );\n return null;\n } else {\n // Get match and remove from entries\n const match = entries[matchIndex];\n entries.splice(matchIndex, 1);\n\n // Ensure to return null after removing from entries.\n if (redirect) {\n if (typeof redirect === 'string') {\n throw new Error(`Redirecting to a specific route is not supported yet.`);\n }\n return null;\n }\n\n if (getId) {\n console.warn(\n `Deprecated: prop 'getId' on screen ${name} is deprecated. Please rename the prop to 'dangerouslySingular'`\n );\n if (singular) {\n console.warn(\n `Screen ${name} cannot use both getId and dangerouslySingular together.`\n );\n }\n } else if (singular) {\n // If singular is set, use it as the getId function.\n if (typeof singular === 'string') {\n getId = () => singular;\n } else if (typeof singular === 'function' && name) {\n getId = (options) => singular(name, options.params || {});\n } else if (singular === true && name) {\n getId = (options) => getSingularId(name, options);\n }\n }\n\n return {\n route: match,\n props: { initialParams, listeners, options, getId },\n };\n }\n }\n )\n .filter(Boolean) as {\n route: RouteNode;\n props: Partial<ScreenProps>;\n }[];\n\n // Add any remaining children\n ordered.push(\n ...entries.sort(sortRoutesWithInitial(initialRouteName)).map((route) => ({ route, props: {} }))\n );\n\n return ordered;\n}\n\n/**\n * @returns React Navigation screens sorted by the `route` property.\n */\nexport function useSortedScreens(\n order: ScreenProps[],\n protectedScreens: Set<string>,\n useOnlyUserDefinedScreens: boolean = false\n): React.ReactNode[] {\n const node = useRouteNode();\n\n const nodeChildren = node?.children ?? [];\n const children = useOnlyUserDefinedScreens\n ? nodeChildren.filter((child) =>\n order.some((userDefinedScreen) => userDefinedScreen.name === child.route)\n )\n : nodeChildren;\n\n const sorted = children.length ? getSortedChildren(children, order, node?.initialRouteName) : [];\n return React.useMemo(\n () =>\n sorted\n .filter((item) => !protectedScreens.has(item.route.route))\n .map((value) => {\n return routeToScreen(value.route, value.props);\n }),\n [sorted, protectedScreens]\n );\n}\n\nfunction fromImport(value: RouteNode, { ErrorBoundary, ...component }: LoadedRoute) {\n // If possible, add a more helpful display name for the component stack to improve debugging of React errors such as `Text strings must be rendered within a <Text> component.`.\n if (component?.default && __DEV__) {\n component.default.displayName ??= `${component.default.name ?? 'Route'}(${value.contextKey})`;\n }\n\n if (ErrorBoundary) {\n const Wrapped = React.forwardRef((props: any, ref: any) => {\n const children = React.createElement(component.default || EmptyRoute, {\n ...props,\n ref,\n });\n return <Try catch={ErrorBoundary}>{children}</Try>;\n });\n\n if (__DEV__) {\n Wrapped.displayName = `ErrorBoundary(${value.contextKey})`;\n }\n\n return {\n default: Wrapped,\n };\n }\n if (process.env.NODE_ENV !== 'production') {\n if (\n typeof component.default === 'object' &&\n component.default &&\n Object.keys(component.default).length === 0\n ) {\n return { default: EmptyRoute };\n }\n }\n\n return { default: component.default };\n}\n\nfunction fromLoadedRoute(value: RouteNode, res: LoadedRoute) {\n if (!(res instanceof Promise)) {\n return fromImport(value, res);\n }\n\n return res.then(fromImport.bind(null, value));\n}\n\n// TODO: Maybe there's a more React-y way to do this?\n// Without this store, the process enters a recursive loop.\nconst qualifiedStore = new WeakMap<RouteNode, React.ComponentType<any>>();\n\n/** Wrap the component with various enhancements and add access to child routes. */\nexport function getQualifiedRouteComponent(value: RouteNode) {\n if (qualifiedStore.has(value)) {\n return qualifiedStore.get(value)!;\n }\n\n let ScreenComponent:\n | React.ForwardRefExoticComponent<React.RefAttributes<unknown>>\n | React.ComponentType<{ segment?: string }>;\n\n // TODO: This ensures sync doesn't use React.lazy, but it's not ideal.\n if (EXPO_ROUTER_IMPORT_MODE === 'lazy') {\n ScreenComponent = React.lazy(async () => {\n const res = value.loadRoute();\n return fromLoadedRoute(value, res) as Promise<{\n default: React.ComponentType<any>;\n }>;\n });\n\n if (__DEV__) {\n ScreenComponent.displayName = `AsyncRoute(${value.route})`;\n }\n } else {\n const res = value.loadRoute();\n ScreenComponent = fromImport(value, res).default!;\n }\n function BaseRoute({\n // Remove these React Navigation props to\n // enforce usage of expo-router hooks (where the query params are correct).\n route,\n navigation,\n\n // Pass all other props to the component\n ...props\n }: {\n route?: RouteProp<ParamListBase, string>;\n navigation: Omit<\n NavigationProp<\n ParamListBase,\n string,\n undefined,\n NavigationState,\n object,\n NativeStackNavigationEventMap | BottomTabNavigationEventMap\n >,\n 'getState'\n > & {\n getState(): NavigationState | undefined;\n };\n }) {\n const stateForPath = useStateForPath();\n const isFocused = navigation.isFocused();\n const store = useExpoRouterStore();\n\n if (isFocused) {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]);\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }\n\n useEffect(\n () =>\n navigation.addListener('focus', () => {\n const state = navigation.getState();\n const isLeaf = !(state && 'state' in state.routes[state.index]);\n // Because setFocusedState caches the route info, this call will only trigger rerenders\n // if the component itself didn’t rerender and the route info changed.\n // Otherwise, the update from the `if` above will handle it,\n // and this won’t cause a redundant second update.\n if (isLeaf && stateForPath) store.setFocusedState(stateForPath);\n }),\n [navigation]\n );\n\n useEffect(() => {\n return navigation.addListener('transitionEnd', (e) => {\n if (!e?.data?.closing) {\n // When navigating to a screen, remove the no animation param to re-enable animations\n // Otherwise the navigation back would also have no animation\n if (hasParam(route?.params, INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME)) {\n navigation.replaceParams(\n removeParams(route?.params, [INTERNAL_EXPO_ROUTER_NO_ANIMATION_PARAM_NAME])\n );\n }\n }\n });\n }, [navigation]);\n\n const isRouteType = value.type === 'route';\n const hasRouteKey = !!route?.key;\n\n return (\n <Route node={value} params={route?.params}>\n {isRouteType && hasRouteKey && unstable_navigationEvents.hasAnyListener() && (\n <AnalyticsListeners navigation={navigation} screenId={route.key} />\n )}\n <ZoomTransitionTargetContextProvider route={route}>\n <ZoomTransitionEnabler route={route} />\n <React.Suspense fallback={<SuspenseFallback route={value} />}>\n <ScreenComponent\n {...props}\n // Expose the template segment path, e.g. `(home)`, `[foo]`, `index`\n // the intention is to make it possible to deduce shared routes.\n segment={value.route}\n />\n </React.Suspense>\n </ZoomTransitionTargetContextProvider>\n </Route>\n );\n }\n\n if (__DEV__) {\n BaseRoute.displayName = `Route(${value.route})`;\n }\n\n qualifiedStore.set(value, BaseRoute);\n return BaseRoute;\n}\n\nfunction AnalyticsListeners({\n navigation,\n screenId,\n}: {\n navigation: EventConsumer<EventMapBase>;\n screenId: string;\n}) {\n const stateForPath = useStateForPath();\n const isFirstRenderRef = React.useRef(true);\n\n const pathname = useMemo(\n () => (stateForPath ? decodeURIComponent(getPathFromState(stateForPath)) : undefined),\n [stateForPath]\n );\n\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n if (pathname) {\n unstable_navigationEvents.emit('pageWillRender', {\n pathname,\n screenId,\n });\n }\n }\n\n useEffect(() => {\n if (pathname) {\n return () => {\n unstable_navigationEvents.emit('pageRemoved', {\n pathname,\n screenId,\n });\n };\n }\n return () => {};\n }, [pathname]);\n\n useEffect(() => {\n if (pathname) {\n const cleanFocus = navigation.addListener('focus', () => {\n unstable_navigationEvents.emit('pageFocused', {\n pathname,\n screenId,\n });\n });\n const cleanBlur = navigation.addListener('blur', () => {\n unstable_navigationEvents.emit('pageBlurred', {\n pathname,\n screenId,\n });\n });\n return () => {\n cleanFocus();\n cleanBlur();\n };\n }\n return () => {};\n }, [navigation, pathname]);\n\n return null;\n}\n\nexport function screenOptionsFactory(\n route: RouteNode,\n options?: ScreenProps['options']\n): ScreenProps['options'] {\n return (args) => {\n // Only eager load generated components\n const staticOptions = route.generated ? route.loadRoute()?.getNavOptions : null;\n const staticResult = typeof staticOptions === 'function' ? staticOptions(args) : staticOptions;\n const dynamicResult = typeof options === 'function' ? options?.(args) : options;\n const output = {\n ...staticResult,\n ...dynamicResult,\n };\n\n // Prevent generated screens from showing up in the tab bar.\n if (route.internal) {\n output.tabBarItemStyle = { display: 'none' };\n output.tabBarButton = () => null;\n // TODO: React Navigation doesn't provide a way to prevent rendering the drawer item.\n output.drawerItemStyle = { height: 0, display: 'none' };\n }\n\n return output;\n };\n}\n\nexport function routeToScreen(\n route: RouteNode,\n { options, getId, ...props }: Partial<ScreenProps> = {}\n) {\n return (\n <Screen\n {...props}\n name={route.route}\n key={route.route}\n getId={getId}\n options={screenOptionsFactory(route, options)}\n getComponent={() => getQualifiedRouteComponent(route)}\n />\n );\n}\n\nexport function getSingularId(name: string, options: Record<string, any> = {}) {\n return name\n .split('/')\n .map((segment) => {\n if (segment.startsWith('[...')) {\n return options.params?.[segment.slice(4, -1)]?.join('/') || segment;\n } else if (segment.startsWith('[') && segment.endsWith(']')) {\n return options.params?.[segment.slice(1, -1)] || segment;\n } else {\n return segment;\n }\n })\n .join('/');\n}\n"]}
|
package/expo-module.config.json
CHANGED
|
@@ -18,6 +18,7 @@ class LinkPreviewNativeActionView: RouterViewWithLogger, LinkPreviewMenuUpdatabl
|
|
|
18
18
|
@NativeActionProp(updateMenu: true) var singleSelection: Bool = false
|
|
19
19
|
@NativeActionProp(updateMenu: true) var displayAsPalette: Bool = false
|
|
20
20
|
@NativeActionProp(updateMenu: true) var displayInline: Bool = false
|
|
21
|
+
@NativeActionProp(updateMenu: true) var preferredElementSize: MenuElementSize?
|
|
21
22
|
|
|
22
23
|
// MARK: - UIBarButtonItem props
|
|
23
24
|
@NativeActionProp(updateAction: true, updateMenu: true) var routerHidden: Bool = false
|
|
@@ -86,6 +87,12 @@ class LinkPreviewNativeActionView: RouterViewWithLogger, LinkPreviewMenuUpdatabl
|
|
|
86
87
|
menuAction.subtitle = subtitle
|
|
87
88
|
}
|
|
88
89
|
|
|
90
|
+
if #available(iOS 16.0, *) {
|
|
91
|
+
if let preferredElementSize = preferredElementSize {
|
|
92
|
+
menuAction.preferredElementSize = preferredElementSize.toUIMenuElementSize()
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
89
96
|
parentMenuUpdatable?.updateMenu()
|
|
90
97
|
}
|
|
91
98
|
|
|
@@ -106,7 +106,9 @@ public class LinkPreviewNativeModule: Module {
|
|
|
106
106
|
Prop("barButtonItemStyle") { (view: LinkPreviewNativeActionView, style: BarItemStyle?) in
|
|
107
107
|
view.barButtonItemStyle = style?.toUIBarButtonItemStyle()
|
|
108
108
|
}
|
|
109
|
-
|
|
109
|
+
Prop("preferredElementSize") { (view: LinkPreviewNativeActionView, preferredElementSize: MenuElementSize?) in
|
|
110
|
+
view.preferredElementSize = preferredElementSize
|
|
111
|
+
}
|
|
110
112
|
Events("onSelected")
|
|
111
113
|
}
|
|
112
114
|
|
|
@@ -143,8 +145,8 @@ public class LinkPreviewNativeModule: Module {
|
|
|
143
145
|
// This prop is used in ExpoShadowNode in order to disable force flattening, when display: contents is used
|
|
144
146
|
}
|
|
145
147
|
|
|
146
|
-
Prop("
|
|
147
|
-
view.
|
|
148
|
+
Prop("dismissalBoundsRect") { (view: LinkZoomTransitionEnabler, rect: DismissalBoundsRect?) in
|
|
149
|
+
view.dismissalBoundsRect = rect
|
|
148
150
|
}
|
|
149
151
|
}
|
|
150
152
|
|
|
@@ -175,3 +177,35 @@ struct LinkSourceAlignmentRect: Record {
|
|
|
175
177
|
@Field var width: Double
|
|
176
178
|
@Field var height: Double
|
|
177
179
|
}
|
|
180
|
+
|
|
181
|
+
enum MenuElementSize: String, Enumerable {
|
|
182
|
+
case small
|
|
183
|
+
case medium
|
|
184
|
+
case large
|
|
185
|
+
case auto
|
|
186
|
+
|
|
187
|
+
@available(iOS 16.0, *)
|
|
188
|
+
func toUIMenuElementSize() -> UIMenu.ElementSize {
|
|
189
|
+
switch self {
|
|
190
|
+
case .small:
|
|
191
|
+
return .small
|
|
192
|
+
case .medium:
|
|
193
|
+
return .medium
|
|
194
|
+
case .large:
|
|
195
|
+
return .large
|
|
196
|
+
case .auto:
|
|
197
|
+
if #available(iOS 17.0, *) {
|
|
198
|
+
return .automatic
|
|
199
|
+
} else {
|
|
200
|
+
return .medium
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
struct DismissalBoundsRect: Record {
|
|
207
|
+
@Field var minX: Double?
|
|
208
|
+
@Field var maxX: Double?
|
|
209
|
+
@Field var minY: Double?
|
|
210
|
+
@Field var maxY: Double?
|
|
211
|
+
}
|
|
@@ -273,7 +273,7 @@ class LinkZoomTransitionAlignmentRectDetector: LinkZoomExpoView {
|
|
|
273
273
|
|
|
274
274
|
class LinkZoomTransitionEnabler: LinkZoomExpoView {
|
|
275
275
|
var zoomTransitionSourceIdentifier: String = ""
|
|
276
|
-
var
|
|
276
|
+
var dismissalBoundsRect: DismissalBoundsRect?
|
|
277
277
|
|
|
278
278
|
override func didMoveToSuperview() {
|
|
279
279
|
super.didMoveToSuperview()
|
|
@@ -318,8 +318,18 @@ class LinkZoomTransitionEnabler: LinkZoomExpoView {
|
|
|
318
318
|
}
|
|
319
319
|
return rect
|
|
320
320
|
}
|
|
321
|
-
options.interactiveDismissShouldBegin = {
|
|
322
|
-
|
|
321
|
+
options.interactiveDismissShouldBegin = { context in
|
|
322
|
+
// Check dismissal bounds rect if provided
|
|
323
|
+
if let rect = self.dismissalBoundsRect {
|
|
324
|
+
let location = context.location
|
|
325
|
+
// Check each optional bound independently
|
|
326
|
+
if let minX = rect.minX, location.x < minX { return false }
|
|
327
|
+
if let maxX = rect.maxX, location.x > maxX { return false }
|
|
328
|
+
if let minY = rect.minY, location.y < minY { return false }
|
|
329
|
+
if let maxY = rect.maxY, location.y > maxY { return false }
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
return true
|
|
323
333
|
}
|
|
324
334
|
controller.preferredTransition = .zoom(options: options) { _ in
|
|
325
335
|
let sourceInfo = self.sourceRepository?.getSource(
|
|
@@ -155,7 +155,7 @@ class RouterToolbarHostView: RouterViewWithLogger, LinkPreviewMenuUpdatable {
|
|
|
155
155
|
updateToolbarItems()
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
|
|
158
|
+
func findViewController() -> RNSScreen? {
|
|
159
159
|
var responder: UIResponder? = self
|
|
160
160
|
while let r = responder {
|
|
161
161
|
if let r = r as? RNSScreen {
|
|
@@ -6,6 +6,11 @@ class RouterToolbarItemView: RouterViewWithLogger {
|
|
|
6
6
|
@ReactiveProp var type: ItemType?
|
|
7
7
|
@ReactiveProp var title: String?
|
|
8
8
|
@ReactiveProp var systemImageName: String?
|
|
9
|
+
var customImage: SharedRef<UIImage>? {
|
|
10
|
+
didSet {
|
|
11
|
+
performUpdate()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
9
14
|
@ReactiveProp var customView: UIView?
|
|
10
15
|
@ReactiveProp var customTintColor: UIColor?
|
|
11
16
|
@ReactiveProp var hidesSharedBackground: Bool = false
|
|
@@ -42,12 +47,39 @@ class RouterToolbarItemView: RouterViewWithLogger {
|
|
|
42
47
|
item = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
|
|
43
48
|
} else if type == .fixedSpacer {
|
|
44
49
|
item = UIBarButtonItem(barButtonSystemItem: .fixedSpace, target: nil, action: nil)
|
|
50
|
+
} else if type == .searchBar {
|
|
51
|
+
if #available(iOS 16, *) {
|
|
52
|
+
// Hide the item if no search bar is provided
|
|
53
|
+
item.isHidden = true
|
|
54
|
+
}
|
|
55
|
+
guard #available(iOS 26.0, *), let controller = self.host?.findViewController() else {
|
|
56
|
+
// Check for iOS 26, should already be guarded by the JS side, so this warning will only fire if controller is nil
|
|
57
|
+
logger?.warn(
|
|
58
|
+
"[expo-router] navigationItem.searchBarPlacementBarButtonItem not available. This is most likely a bug in expo-router."
|
|
59
|
+
)
|
|
60
|
+
return item
|
|
61
|
+
}
|
|
62
|
+
guard let navController = controller.navigationController else {
|
|
63
|
+
return item
|
|
64
|
+
}
|
|
65
|
+
guard navController.isNavigationBarHidden == false else {
|
|
66
|
+
logger?.warn(
|
|
67
|
+
"[expo-router] Toolbar.SearchBarPreferredSlot should only be used when stack header is shown."
|
|
68
|
+
)
|
|
69
|
+
return item
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
item = controller.navigationItem.searchBarPlacementBarButtonItem
|
|
45
73
|
} else {
|
|
46
74
|
if let title {
|
|
47
75
|
item.title = title
|
|
48
76
|
}
|
|
49
77
|
item.possibleTitles = possibleTitles
|
|
50
|
-
if let
|
|
78
|
+
if let customImage {
|
|
79
|
+
// Use the UIImage from the SharedRef
|
|
80
|
+
item.image = customImage.ref.withRenderingMode(.alwaysOriginal)
|
|
81
|
+
} else if let systemImageName {
|
|
82
|
+
// Fallback to SF Symbol
|
|
51
83
|
item.image = UIImage(systemName: systemImageName)
|
|
52
84
|
}
|
|
53
85
|
if let tintColor = customTintColor {
|
|
@@ -114,21 +146,19 @@ class RouterToolbarItemView: RouterViewWithLogger {
|
|
|
114
146
|
}
|
|
115
147
|
|
|
116
148
|
override func mountChildComponentView(_ childComponentView: UIView, index: Int) {
|
|
117
|
-
|
|
149
|
+
guard customView == nil else {
|
|
118
150
|
logger?.warn(
|
|
119
151
|
"[expo-router] RouterToolbarItemView can only have one child view. This is most likely a bug in expo-router."
|
|
120
152
|
)
|
|
121
153
|
return
|
|
122
154
|
}
|
|
123
155
|
customView = childComponentView
|
|
124
|
-
performUpdate()
|
|
125
156
|
}
|
|
126
157
|
|
|
127
158
|
override func unmountChildComponentView(_ childComponentView: UIView, index: Int) {
|
|
128
159
|
if customView == childComponentView {
|
|
129
160
|
childComponentView.removeFromSuperview()
|
|
130
161
|
customView = nil
|
|
131
|
-
performUpdate()
|
|
132
162
|
}
|
|
133
163
|
}
|
|
134
164
|
}
|
|
@@ -137,6 +167,7 @@ enum ItemType: String, Enumerable {
|
|
|
137
167
|
case normal
|
|
138
168
|
case fixedSpacer
|
|
139
169
|
case fluidSpacer
|
|
170
|
+
case searchBar
|
|
140
171
|
}
|
|
141
172
|
|
|
142
173
|
struct BadgeConfiguration: Equatable {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import ExpoModulesCore
|
|
2
|
+
import UIKit
|
|
2
3
|
|
|
3
4
|
public class RouterToolbarModule: Module {
|
|
4
5
|
public func definition() -> ModuleDefinition {
|
|
@@ -22,6 +23,9 @@ public class RouterToolbarModule: Module {
|
|
|
22
23
|
Prop("systemImageName") { (view: RouterToolbarItemView, systemImageName: String?) in
|
|
23
24
|
view.systemImageName = systemImageName
|
|
24
25
|
}
|
|
26
|
+
Prop("image") { (view: RouterToolbarItemView, image: SharedRef<UIImage>?) in
|
|
27
|
+
view.customImage = image
|
|
28
|
+
}
|
|
25
29
|
Prop("tintColor") { (view: RouterToolbarItemView, tintColor: UIColor?) in
|
|
26
30
|
view.customTintColor = tintColor
|
|
27
31
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"component": {
|
|
4
4
|
"group": "expo.modules.router",
|
|
5
5
|
"module": "expo.modules.router",
|
|
6
|
-
"version": "7.0.0-canary-
|
|
6
|
+
"version": "7.0.0-canary-20260113-0ce2b9c",
|
|
7
7
|
"attributes": {
|
|
8
8
|
"org.gradle.status": "release"
|
|
9
9
|
}
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
},
|
|
25
25
|
"files": [
|
|
26
26
|
{
|
|
27
|
-
"name": "expo.modules.router-7.0.0-canary-
|
|
28
|
-
"url": "expo.modules.router-7.0.0-canary-
|
|
27
|
+
"name": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar",
|
|
28
|
+
"url": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar",
|
|
29
29
|
"size": 13665,
|
|
30
30
|
"sha512": "0c996832cda246cbf02acf875f7c3add8610a0e5e7c466bbe5fa2f073a6a644933eec90d1bff2a7fac7fd3c0c5bdae8a695373cebdec4f9853ce116658960554",
|
|
31
31
|
"sha256": "054876f9b960d2ed5b7762c66b32c7e994f942c05013456f5e41e1fe6c71ee54",
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
],
|
|
61
61
|
"files": [
|
|
62
62
|
{
|
|
63
|
-
"name": "expo.modules.router-7.0.0-canary-
|
|
64
|
-
"url": "expo.modules.router-7.0.0-canary-
|
|
63
|
+
"name": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar",
|
|
64
|
+
"url": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c.aar",
|
|
65
65
|
"size": 13665,
|
|
66
66
|
"sha512": "0c996832cda246cbf02acf875f7c3add8610a0e5e7c466bbe5fa2f073a6a644933eec90d1bff2a7fac7fd3c0c5bdae8a695373cebdec4f9853ce116658960554",
|
|
67
67
|
"sha256": "054876f9b960d2ed5b7762c66b32c7e994f942c05013456f5e41e1fe6c71ee54",
|
|
@@ -80,8 +80,8 @@
|
|
|
80
80
|
},
|
|
81
81
|
"files": [
|
|
82
82
|
{
|
|
83
|
-
"name": "expo.modules.router-7.0.0-canary-
|
|
84
|
-
"url": "expo.modules.router-7.0.0-canary-
|
|
83
|
+
"name": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar",
|
|
84
|
+
"url": "expo.modules.router-7.0.0-canary-20260113-0ce2b9c-sources.jar",
|
|
85
85
|
"size": 2318,
|
|
86
86
|
"sha512": "9864add8e93e3c0a9a9c930aaed67016b15054c3fafd59a0bd3a5402d7cdc5827be84c22c2c137f3e5acb4e39270d9bfb9ca3fe11234458d4f2e0d4c78747f48",
|
|
87
87
|
"sha256": "d5dff6259e86de721fc0f07fe740a5e18088e19b76738719b0a6f94caef06224",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
78f780acad2997d30c831d2c38058219
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0881680e062d43aec62e7c7ed52c824a8c6f27d1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d5fce828e304c3021e7bd16d994ab175bcd22a8fe95bb81b0c4f00a5925fd349
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
020ebe3f9ac0e5f33f89f054bdd78d7643c5130af22f1f717c369ac6cd8191ad9239a8c2c27a4831a4d6157748e332a8dac4fa4e7ea4fe50695791783fb83ab8
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<modelVersion>4.0.0</modelVersion>
|
|
10
10
|
<groupId>expo.modules.router</groupId>
|
|
11
11
|
<artifactId>expo.modules.router</artifactId>
|
|
12
|
-
<version>7.0.0-canary-
|
|
12
|
+
<version>7.0.0-canary-20260113-0ce2b9c</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>expo.modules.router</name>
|
|
15
15
|
<url>https://github.com/expo/expo</url>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fa3e35be3b45fb3a2cfd15641ffdd8bd
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
476666e674430483ecf615d3511a29c0e45b34e7
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
b821e065a71baf0ca0748823dd17b3ff48279d951f6f9f0487e7707e94626e0c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
737b10ca03314dfee204dfdc93cc55eb0e3b76af2e7f0026f957e1d73cbd3436411a1afb60b9e119aedd50b715dff32d35144aad555bbad45b4d2044b4f89c8f
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>expo.modules.router</groupId>
|
|
4
4
|
<artifactId>expo.modules.router</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>7.0.0-canary-
|
|
7
|
-
<release>7.0.0-canary-
|
|
6
|
+
<latest>7.0.0-canary-20260113-0ce2b9c</latest>
|
|
7
|
+
<release>7.0.0-canary-20260113-0ce2b9c</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>7.0.0-canary-
|
|
9
|
+
<version>7.0.0-canary-20260113-0ce2b9c</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20260113181542</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
73b8868c78f3167847d0e39c2243ad0b
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
52e92bd79381fb8f2bb5c25a4888ad67fab98d63
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
f160b46aa41ef5dec9934bcaae09ecbf7055e46e34b4ff5b9fa058d6abf96b2a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
b6cbda3d1252808fa6815e5d2fe2aeb3d83341035226e63f18aabeacd53be1d8bf0920a055e7e5bebdf7eb3912d6689f195818317874fad430b57f8ae493b245
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-router",
|
|
3
|
-
"version": "7.0.0-canary-
|
|
3
|
+
"version": "7.0.0-canary-20260113-0ce2b9c",
|
|
4
4
|
"description": "Expo Router is a file-based router for React Native and web applications.",
|
|
5
5
|
"author": "650 Industries, Inc.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -83,13 +83,13 @@
|
|
|
83
83
|
"expo"
|
|
84
84
|
],
|
|
85
85
|
"peerDependencies": {
|
|
86
|
-
"@expo/metro-runtime": "6.2.0-canary-
|
|
87
|
-
"@expo/log-box": "0.0.13-canary-
|
|
86
|
+
"@expo/metro-runtime": "6.2.0-canary-20260113-0ce2b9c",
|
|
87
|
+
"@expo/log-box": "0.0.13-canary-20260113-0ce2b9c",
|
|
88
88
|
"@react-navigation/drawer": "^7.7.2",
|
|
89
89
|
"@testing-library/react-native": ">= 12.0.0",
|
|
90
|
-
"expo": "55.0.0-canary-
|
|
91
|
-
"expo-constants": "18.1.0-canary-
|
|
92
|
-
"expo-linking": "8.0.12-canary-
|
|
90
|
+
"expo": "55.0.0-canary-20260113-0ce2b9c",
|
|
91
|
+
"expo-constants": "18.1.0-canary-20260113-0ce2b9c",
|
|
92
|
+
"expo-linking": "8.0.12-canary-20260113-0ce2b9c",
|
|
93
93
|
"react": "*",
|
|
94
94
|
"react-dom": "*",
|
|
95
95
|
"react-native": "*",
|
|
@@ -134,8 +134,8 @@
|
|
|
134
134
|
"react-server-dom-webpack": "~19.0.3"
|
|
135
135
|
},
|
|
136
136
|
"dependencies": {
|
|
137
|
-
"@expo/metro-runtime": "6.2.0-canary-
|
|
138
|
-
"@expo/schema-utils": "0.1.9-canary-
|
|
137
|
+
"@expo/metro-runtime": "6.2.0-canary-20260113-0ce2b9c",
|
|
138
|
+
"@expo/schema-utils": "0.1.9-canary-20260113-0ce2b9c",
|
|
139
139
|
"@radix-ui/react-slot": "1.2.0",
|
|
140
140
|
"@radix-ui/react-tabs": "^1.1.12",
|
|
141
141
|
"@react-navigation/bottom-tabs": "^7.7.3",
|
|
@@ -144,8 +144,9 @@
|
|
|
144
144
|
"client-only": "^0.0.1",
|
|
145
145
|
"debug": "^4.3.4",
|
|
146
146
|
"escape-string-regexp": "^4.0.0",
|
|
147
|
-
"expo-
|
|
148
|
-
"expo-
|
|
147
|
+
"expo-image": "3.1.0-canary-20260113-0ce2b9c",
|
|
148
|
+
"expo-server": "1.1.0-canary-20260113-0ce2b9c",
|
|
149
|
+
"expo-symbols": "1.1.0-canary-20260113-0ce2b9c",
|
|
149
150
|
"fast-deep-equal": "^3.1.3",
|
|
150
151
|
"invariant": "^2.2.4",
|
|
151
152
|
"nanoid": "^3.3.8",
|
package/plugin/build/index.d.ts
CHANGED
|
@@ -23,5 +23,7 @@ declare const withRouter: ConfigPlugin<{
|
|
|
23
23
|
unstable_useServerMiddleware?: boolean;
|
|
24
24
|
/** Enable experimental data loader support. Requires `web.output: 'static'` to be set in app config. */
|
|
25
25
|
unstable_useServerDataLoaders?: boolean;
|
|
26
|
+
/** Enable experimental server-side rendering. When enabled with `web.output: 'server'`, HTML is rendered at request time instead of being pre-rendered at build time. */
|
|
27
|
+
unstable_useServerRendering?: boolean;
|
|
26
28
|
} | void>;
|
|
27
29
|
export default withRouter;
|
package/plugin/options.json
CHANGED
|
@@ -163,6 +163,11 @@
|
|
|
163
163
|
"type": "boolean",
|
|
164
164
|
"default": false
|
|
165
165
|
},
|
|
166
|
+
"unstable_useServerRendering": {
|
|
167
|
+
"description": "Enable experimental server-side rendering. When enabled with `web.output: 'server'`, HTML is rendered at request time instead of being pre-rendered at build time.",
|
|
168
|
+
"type": "boolean",
|
|
169
|
+
"default": false
|
|
170
|
+
},
|
|
166
171
|
"unstable_splitView": {
|
|
167
172
|
"description": "Enable experimental SplitView support on ios",
|
|
168
173
|
"type": "boolean",
|
package/plugin/src/index.ts
CHANGED
|
@@ -58,6 +58,8 @@ const withRouter: ConfigPlugin<
|
|
|
58
58
|
unstable_useServerMiddleware?: boolean;
|
|
59
59
|
/** Enable experimental data loader support. Requires `web.output: 'static'` to be set in app config. */
|
|
60
60
|
unstable_useServerDataLoaders?: boolean;
|
|
61
|
+
/** Enable experimental server-side rendering. When enabled with `web.output: 'server'`, HTML is rendered at request time instead of being pre-rendered at build time. */
|
|
62
|
+
unstable_useServerRendering?: boolean;
|
|
61
63
|
} | void
|
|
62
64
|
> = (config, _props) => {
|
|
63
65
|
const props = _props || {};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NativeStackNavigationOptions } from '@react-navigation/native-stack';
|
|
2
|
-
import type { SearchBarProps } from 'react-native-screens';
|
|
3
|
-
export interface StackHeaderSearchBarProps extends SearchBarProps {
|
|
4
|
-
}
|
|
5
|
-
export declare function StackHeaderSearchBar(props: StackHeaderSearchBarProps): null;
|
|
6
|
-
export declare function appendStackHeaderSearchBarPropsToOptions(options: NativeStackNavigationOptions, props: StackHeaderSearchBarProps): NativeStackNavigationOptions;
|
|
7
|
-
//# sourceMappingURL=StackHeaderSearchBar.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StackHeaderSearchBar.d.ts","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSearchBar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,yBAA0B,SAAQ,cAAc;CAAG;AAEpE,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,QAEpE;AAED,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,4BAA4B,EACrC,KAAK,EAAE,yBAAyB,GAC/B,4BAA4B,CAO9B"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StackHeaderSearchBar = StackHeaderSearchBar;
|
|
4
|
-
exports.appendStackHeaderSearchBarPropsToOptions = appendStackHeaderSearchBarPropsToOptions;
|
|
5
|
-
function StackHeaderSearchBar(props) {
|
|
6
|
-
return null;
|
|
7
|
-
}
|
|
8
|
-
function appendStackHeaderSearchBarPropsToOptions(options, props) {
|
|
9
|
-
return {
|
|
10
|
-
...options,
|
|
11
|
-
headerSearchBarOptions: {
|
|
12
|
-
...props,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=StackHeaderSearchBar.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StackHeaderSearchBar.js","sourceRoot":"","sources":["../../../src/layouts/stack-utils/StackHeaderSearchBar.tsx"],"names":[],"mappings":";;AAKA,oDAEC;AAED,4FAUC;AAdD,SAAgB,oBAAoB,CAAC,KAAgC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,wCAAwC,CACtD,OAAqC,EACrC,KAAgC;IAEhC,OAAO;QACL,GAAG,OAAO;QACV,sBAAsB,EAAE;YACtB,GAAG,KAAK;SACT;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { NativeStackNavigationOptions } from '@react-navigation/native-stack';\nimport type { SearchBarProps } from 'react-native-screens';\n\nexport interface StackHeaderSearchBarProps extends SearchBarProps {}\n\nexport function StackHeaderSearchBar(props: StackHeaderSearchBarProps) {\n return null;\n}\n\nexport function appendStackHeaderSearchBarPropsToOptions(\n options: NativeStackNavigationOptions,\n props: StackHeaderSearchBarProps\n): NativeStackNavigationOptions {\n return {\n ...options,\n headerSearchBarOptions: {\n ...props,\n },\n };\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
11c996e0086d03ca14d4ccd2d79a5932
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0a6153e63184ae156d6115f29c5c21d9b23f60ae
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
fd284ea1d06dde5db65eb8b40970efe3ffea09cc59155a6197e891b741efabd2
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
8274b2e37eadf93844e0d6628ae2f7fe2ae027e3089dd4cbe7b55762eaa35fb1769c006fe666d9698c203a4093e5edbd9a85616de6963dbe5f66f7dcaa979d02
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
337ea7d2f5ba3b9410d50320e3980501
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
747d42dd0c68b329f915a00292681d8f6ee27a9a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
a909f2adaa521343694f1e43904528fc3d3d6a574cee43f3c59330d5a5749d88
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2a9151431d99f24cdecf35833e6abad110ca57c39e3702db6ed69bfbafbd159dd0a5c17a0e4f53fccbc38e8fee3055a2f30d2974620fa24cebffe108320c237c
|
|
File without changes
|