one 1.17.10 → 1.17.11
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/dist/cjs/Root.native.js.map +1 -1
- package/dist/cjs/__mocks__/@react-navigation/native-stack.cjs +3 -1
- package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js +4 -0
- package/dist/cjs/__mocks__/@react-navigation/native-stack.native.js.map +1 -1
- package/dist/cjs/__mocks__/expo-linking.native.js.map +1 -1
- package/dist/cjs/__mocks__/expo-modules-core.native.js.map +1 -1
- package/dist/cjs/__mocks__/react-native-screens.native.js.map +1 -1
- package/dist/cjs/babel-plugins/environment-guard.native.js.map +1 -1
- package/dist/cjs/babel-plugins/inline-one-server-url.native.js.map +1 -1
- package/dist/cjs/babel-plugins/one-router-metro.native.js.map +1 -1
- package/dist/cjs/babel-plugins/one-router-metro.test.native.js.map +1 -1
- package/dist/cjs/babel-plugins/remove-server-code.native.js.map +1 -1
- package/dist/cjs/babel-preset/index.native.js.map +1 -1
- package/dist/cjs/babel-preset/index.test.native.js.map +1 -1
- package/dist/cjs/babel-preset/integration.test.native.js.map +1 -1
- package/dist/cjs/cli/build.native.js.map +1 -1
- package/dist/cjs/cli/buildPage.native.js.map +1 -1
- package/dist/cjs/cli/buildPageWorker.native.js.map +1 -1
- package/dist/cjs/cli/checkNodeVersion.native.js.map +1 -1
- package/dist/cjs/cli/daemon.native.js.map +1 -1
- package/dist/cjs/cli/dev.native.js.map +1 -1
- package/dist/cjs/cli/generateBundlerConfig.native.js.map +1 -1
- package/dist/cjs/cli/generateBundlerConfig.test.native.js.map +1 -1
- package/dist/cjs/cli/generateRoutes.native.js.map +1 -1
- package/dist/cjs/cli/generateSitemap.native.js.map +1 -1
- package/dist/cjs/cli/generateSitemap.test.native.js.map +1 -1
- package/dist/cjs/cli/install-error-handlers.native.js.map +1 -1
- package/dist/cjs/cli/label-process.native.js.map +1 -1
- package/dist/cjs/cli/main.native.js.map +1 -1
- package/dist/cjs/cli/patch.native.js.map +1 -1
- package/dist/cjs/cli/patch.test.native.js.map +1 -1
- package/dist/cjs/cli/prebuild.native.js.map +1 -1
- package/dist/cjs/cli/runAndroid.native.js.map +1 -1
- package/dist/cjs/cli/runIos.native.js.map +1 -1
- package/dist/cjs/cli/securityScan.native.js.map +1 -1
- package/dist/cjs/cli/workerPool.native.js.map +1 -1
- package/dist/cjs/cli.native.js.map +1 -1
- package/dist/cjs/clientLoaderResolver.native.js.map +1 -1
- package/dist/cjs/config.native.js.map +1 -1
- package/dist/cjs/constants.native.js.map +1 -1
- package/dist/cjs/constants.test.native.js.map +1 -1
- package/dist/cjs/createAPIRoute.native.js.map +1 -1
- package/dist/cjs/createHandleRequest.cjs +21 -12
- package/dist/cjs/createHandleRequest.native.js +22 -12
- package/dist/cjs/createHandleRequest.native.js.map +1 -1
- package/dist/cjs/createHandleRequest.test.cjs +51 -6
- package/dist/cjs/createHandleRequest.test.native.js +53 -6
- package/dist/cjs/createHandleRequest.test.native.js.map +1 -1
- package/dist/cjs/createMiddleware.native.js.map +1 -1
- package/dist/cjs/daemon/index.native.js.map +1 -1
- package/dist/cjs/daemon/ipc.native.js.map +1 -1
- package/dist/cjs/daemon/picker.native.js.map +1 -1
- package/dist/cjs/daemon/proxy.native.js.map +1 -1
- package/dist/cjs/daemon/registry.native.js.map +1 -1
- package/dist/cjs/daemon/server.native.js.map +1 -1
- package/dist/cjs/daemon/tui.native.js.map +1 -1
- package/dist/cjs/daemon/types.native.js.map +1 -1
- package/dist/cjs/daemon/utils.native.js.map +1 -1
- package/dist/cjs/devtools/registry.native.js.map +1 -1
- package/dist/cjs/drawer.native.js.map +1 -1
- package/dist/cjs/fallbackViews/Sitemap.native.js.map +1 -1
- package/dist/cjs/fallbackViews/Unmatched.native.js.map +1 -1
- package/dist/cjs/fork/NavigationContainer.native.js.map +1 -1
- package/dist/cjs/fork/SSRNavigationContainer.native.js.map +1 -1
- package/dist/cjs/fork/__tests__/getPathFromState.test.native.js.map +1 -1
- package/dist/cjs/fork/__tests__/getStateFromPath.test.native.js.map +1 -1
- package/dist/cjs/fork/_shared.native.js.map +1 -1
- package/dist/cjs/fork/createMemoryHistory.native.js.map +1 -1
- package/dist/cjs/fork/createMemoryHistory.test.native.js.map +1 -1
- package/dist/cjs/fork/extractPathFromURL.native.js.map +1 -1
- package/dist/cjs/fork/extractPathFromURL.test.native.js.map +1 -1
- package/dist/cjs/fork/findFocusedRoute.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState-mods.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState.native.js.map +1 -1
- package/dist/cjs/fork/getPathFromState.test.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath-mods.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath.native.js.map +1 -1
- package/dist/cjs/fork/getStateFromPath.test.native.js.map +1 -1
- package/dist/cjs/fork/useThenable.native.js.map +1 -1
- package/dist/cjs/fork/validatePathConfig.native.js.map +1 -1
- package/dist/cjs/getReactNavigationConfig.native.js.map +1 -1
- package/dist/cjs/head/Head.native.js.map +1 -1
- package/dist/cjs/head/HeadModule.native.js.map +1 -1
- package/dist/cjs/head/index.native.js.map +1 -1
- package/dist/cjs/head/types.native.js.map +1 -1
- package/dist/cjs/head/url.native.js.map +1 -1
- package/dist/cjs/headless-server.native.js.map +1 -1
- package/dist/cjs/headless.cjs +1 -0
- package/dist/cjs/headless.native.js +1 -0
- package/dist/cjs/headless.native.js.map +1 -1
- package/dist/cjs/hooks.native.js.map +1 -1
- package/dist/cjs/hooks.test.native.js.map +1 -1
- package/dist/cjs/href.native.js.map +1 -1
- package/dist/cjs/image/getImageData.native.js.map +1 -1
- package/dist/cjs/image.native.js.map +1 -1
- package/dist/cjs/index.cjs +3 -0
- package/dist/cjs/index.native.js +4 -1
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/interfaces/router.native.js.map +1 -1
- package/dist/cjs/layouts/Drawer.cjs +46 -1
- package/dist/cjs/layouts/Drawer.native.js +47 -1
- package/dist/cjs/layouts/Drawer.native.js.map +1 -1
- package/dist/cjs/layouts/NativeTabs.native.js.map +1 -1
- package/dist/cjs/layouts/Stack.cjs +12 -3
- package/dist/cjs/layouts/Stack.native.js +13 -4
- package/dist/cjs/layouts/Stack.native.js.map +1 -1
- package/dist/cjs/layouts/Tabs.cjs +42 -8
- package/dist/cjs/layouts/Tabs.native.js +43 -8
- package/dist/cjs/layouts/Tabs.native.js.map +1 -1
- package/dist/cjs/layouts/stack-navigator.cjs +29 -0
- package/dist/cjs/layouts/stack-navigator.native.js +32 -0
- package/dist/cjs/layouts/stack-navigator.native.js.map +1 -0
- package/dist/cjs/layouts/stack-utils/StackHeaderBackButton.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderComponent.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderLeft.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderRight.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderSearchBar.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackHeaderTitle.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/StackScreen.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/__tests__/composition.test.native.js.map +1 -1
- package/dist/cjs/layouts/stack-utils/index.native.js.map +1 -1
- package/dist/cjs/layouts/withLayoutContext.native.js.map +1 -1
- package/dist/cjs/lazyWithRetry.native.js.map +1 -1
- package/dist/cjs/link/Link.native.js.map +1 -1
- package/dist/cjs/link/Redirect.native.js.map +1 -1
- package/dist/cjs/link/getLinking.native.js.map +1 -1
- package/dist/cjs/link/href.native.js.map +1 -1
- package/dist/cjs/link/path.native.js.map +1 -1
- package/dist/cjs/link/prefetchIntent.native.js.map +1 -1
- package/dist/cjs/link/prefetchIntent.test.native.js.map +1 -1
- package/dist/cjs/link/prefetchViewport.native.js.map +1 -1
- package/dist/cjs/link/prefetchViewport.test.native.js.map +1 -1
- package/dist/cjs/link/useLinkTo.native.js.map +1 -1
- package/dist/cjs/link/useLoadedNavigation.native.js.map +1 -1
- package/dist/cjs/metro-config/buildOneMetroResolverOverrides.native.js.map +1 -1
- package/dist/cjs/metro-config/getViteMetroPluginOptions.integration.test.native.js.map +1 -1
- package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js +1 -1
- package/dist/cjs/metro-config/getViteMetroPluginOptions.native.js.map +1 -1
- package/dist/cjs/metro-config/withOne.native.js.map +1 -1
- package/dist/cjs/metro-config/withOne.test.native.js.map +1 -1
- package/dist/cjs/native-tabs.native.js.map +1 -1
- package/dist/cjs/notFoundState.native.js.map +1 -1
- package/dist/cjs/polyfills-mobile.native.js.map +1 -1
- package/dist/cjs/polyfills-server.native.js.map +1 -1
- package/dist/cjs/router/FlagsContext.native.js.map +1 -1
- package/dist/cjs/router/Route.native.js.map +1 -1
- package/dist/cjs/router/RouteInfoContext.native.js.map +1 -1
- package/dist/cjs/router/RouterStore.native.js.map +1 -1
- package/dist/cjs/router/SpaShellContext.native.js.map +1 -1
- package/dist/cjs/router/createRoute.native.js.map +1 -1
- package/dist/cjs/router/filterRootHTML.native.js.map +1 -1
- package/dist/cjs/router/findRouteNode.native.js.map +1 -1
- package/dist/cjs/router/getLinkingConfig.native.js.map +1 -1
- package/dist/cjs/router/getLinkingConfig.test.native.js.map +1 -1
- package/dist/cjs/router/getNormalizedStatePath.native.js.map +1 -1
- package/dist/cjs/router/getRouteInfo.native.js.map +1 -1
- package/dist/cjs/router/getRoutes.native.js.map +1 -1
- package/dist/cjs/router/getRoutes.test.native.js.map +1 -1
- package/dist/cjs/router/glob-patterns.native.js.map +1 -1
- package/dist/cjs/router/imperative-api.native.js.map +1 -1
- package/dist/cjs/router/interceptRoutes.native.js.map +1 -1
- package/dist/cjs/router/isIndexPath.native.js.map +1 -1
- package/dist/cjs/router/lastAction.native.js.map +1 -1
- package/dist/cjs/router/linkingConfig.native.js.map +1 -1
- package/dist/cjs/router/matchers.native.js.map +1 -1
- package/dist/cjs/router/matchers.test.native.js.map +1 -1
- package/dist/cjs/router/params.native.js.map +1 -1
- package/dist/cjs/router/renderingRegistry.cjs +53 -0
- package/dist/cjs/router/renderingRegistry.native.js +56 -0
- package/dist/cjs/router/renderingRegistry.native.js.map +1 -0
- package/dist/cjs/router/router.cjs +2 -0
- package/dist/cjs/router/router.native.js.map +1 -1
- package/dist/cjs/router/serverLocationContext.native.js.map +1 -1
- package/dist/cjs/router/sitemap.native.js.map +1 -1
- package/dist/cjs/router/sitemap.test.native.js.map +1 -1
- package/dist/cjs/router/sortRoutes.native.js.map +1 -1
- package/dist/cjs/router/useInitializeOneRouter.native.js.map +1 -1
- package/dist/cjs/router/useNavigation.native.js.map +1 -1
- package/dist/cjs/router/useScreens.native.js.map +1 -1
- package/dist/cjs/router/useViteRoutes.native.js.map +1 -1
- package/dist/cjs/router/utils/getNavigateAction.native.js.map +1 -1
- package/dist/cjs/router/utils/getNavigateAction.test.native.js.map +1 -1
- package/dist/cjs/router/web/ScreenRenderContext.cjs +36 -0
- package/dist/cjs/router/web/ScreenRenderContext.native.js +38 -0
- package/dist/cjs/router/web/ScreenRenderContext.native.js.map +1 -0
- package/dist/cjs/router/web/WebStackNavigator.cjs +74 -0
- package/dist/cjs/router/web/WebStackNavigator.native.js +78 -0
- package/dist/cjs/router/web/WebStackNavigator.native.js.map +1 -0
- package/dist/cjs/router/web/WebStackView.cjs +182 -0
- package/dist/cjs/router/web/WebStackView.native.js +235 -0
- package/dist/cjs/router/web/WebStackView.native.js.map +1 -0
- package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.cjs +295 -0
- package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.native.js +335 -0
- package/dist/cjs/router/web/__tests__/WebStackView.runtime.test.native.js.map +1 -0
- package/dist/cjs/router/web/__tests__/WebStackView.test.cjs +464 -0
- package/dist/cjs/router/web/__tests__/WebStackView.test.native.js +515 -0
- package/dist/cjs/router/web/__tests__/WebStackView.test.native.js.map +1 -0
- package/dist/cjs/router/web/__tests__/stackStateUtils.test.cjs +134 -0
- package/dist/cjs/router/web/__tests__/stackStateUtils.test.native.js +163 -0
- package/dist/cjs/router/web/__tests__/stackStateUtils.test.native.js.map +1 -0
- package/dist/cjs/router/web/stackStateUtils.cjs +60 -0
- package/dist/cjs/router/web/stackStateUtils.native.js +66 -0
- package/dist/cjs/router/web/stackStateUtils.native.js.map +1 -0
- package/dist/cjs/screensFeatureFlags.native.js.map +1 -1
- package/dist/cjs/serve-worker.native.js.map +1 -1
- package/dist/cjs/serve.native.js.map +1 -1
- package/dist/cjs/server/ServerContextScript.cjs +2 -1
- package/dist/cjs/server/ServerContextScript.native.js +2 -1
- package/dist/cjs/server/ServerContextScript.native.js.map +1 -1
- package/dist/cjs/server/createRoutesManifest.native.js.map +1 -1
- package/dist/cjs/server/getServerManifest.native.js.map +1 -1
- package/dist/cjs/server/getServerManifest.test.native.js.map +1 -1
- package/dist/cjs/server/oneServe.native.js.map +1 -1
- package/dist/cjs/server/setServerGlobals.native.js.map +1 -1
- package/dist/cjs/server/setupBuildOptions.native.js.map +1 -1
- package/dist/cjs/server/setupServerGlobals.native.js.map +1 -1
- package/dist/cjs/server/ssrLoaderData.native.js.map +1 -1
- package/dist/cjs/server/staticHtmlFetcher.native.js.map +1 -1
- package/dist/cjs/server/workerHandler.native.js.map +1 -1
- package/dist/cjs/server-render.native.js.map +1 -1
- package/dist/cjs/skewProtection.native.js.map +1 -1
- package/dist/cjs/testing-utils.native.js.map +1 -1
- package/dist/cjs/typed-routes/generateRouteTypes.native.js.map +1 -1
- package/dist/cjs/typed-routes/generateRouteTypes.test.native.js.map +1 -1
- package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.native.js.map +1 -1
- package/dist/cjs/typed-routes/getTypedRoutesDeclarationFile.test.native.js.map +1 -1
- package/dist/cjs/typed-routes/injectRouteHelpers.native.js.map +1 -1
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/cjs/ui/Slot.native.js.map +1 -1
- package/dist/cjs/ui/TabContext.native.js.map +1 -1
- package/dist/cjs/ui/TabList.native.js.map +1 -1
- package/dist/cjs/ui/TabRouter.native.js.map +1 -1
- package/dist/cjs/ui/TabSlot.native.js.map +1 -1
- package/dist/cjs/ui/TabTrigger.native.js.map +1 -1
- package/dist/cjs/ui/Tabs.native.js.map +1 -1
- package/dist/cjs/ui/common.native.js.map +1 -1
- package/dist/cjs/ui/index.native.js.map +1 -1
- package/dist/cjs/ui/useComponent.native.js.map +1 -1
- package/dist/cjs/useFocusEffect.native.js.map +1 -1
- package/dist/cjs/useLoader.native.js.map +1 -1
- package/dist/cjs/useMatches.native.js.map +1 -1
- package/dist/cjs/useMatches.test.native.js.map +1 -1
- package/dist/cjs/useServerHeadInsertion.native.js.map +1 -1
- package/dist/cjs/utils/assertIsReady.native.js.map +1 -1
- package/dist/cjs/utils/buildOutputPointer.native.js.map +1 -1
- package/dist/cjs/utils/buildOutputPointer.test.native.js.map +1 -1
- package/dist/cjs/utils/children.native.js.map +1 -1
- package/dist/cjs/utils/cleanUrl.native.js.map +1 -1
- package/dist/cjs/utils/cleanUrl.test.native.js.map +1 -1
- package/dist/cjs/utils/dynamicImport.native.js.map +1 -1
- package/dist/cjs/utils/dynamicImport.test.native.js.map +1 -1
- package/dist/cjs/utils/ensureExists.native.js.map +1 -1
- package/dist/cjs/utils/evictOldest.native.js.map +1 -1
- package/dist/cjs/utils/existsAsync.native.js.map +1 -1
- package/dist/cjs/utils/findRootLayout.native.js.map +1 -1
- package/dist/cjs/utils/getPageExport.native.js.map +1 -1
- package/dist/cjs/utils/getPathnameFromFilePath.native.js.map +1 -1
- package/dist/cjs/utils/getPathnameFromFilePath.test.native.js.map +1 -1
- package/dist/cjs/utils/getRouterRootFromOneOptions.native.js.map +1 -1
- package/dist/cjs/utils/globDir.native.js.map +1 -1
- package/dist/cjs/utils/hashString.native.js.map +1 -1
- package/dist/cjs/utils/htmlEscape.native.js.map +1 -1
- package/dist/cjs/utils/isResponse.native.js.map +1 -1
- package/dist/cjs/utils/isRolldown.native.js.map +1 -1
- package/dist/cjs/utils/isStatus.native.js.map +1 -1
- package/dist/cjs/utils/pLimit.native.js.map +1 -1
- package/dist/cjs/utils/posixPathContract.test.native.js.map +1 -1
- package/dist/cjs/utils/promiseWithResolvers.native.js.map +1 -1
- package/dist/cjs/utils/rand.native.js.map +1 -1
- package/dist/cjs/utils/redirect.native.js.map +1 -1
- package/dist/cjs/utils/removeParams.native.js.map +1 -1
- package/dist/cjs/utils/removeSearch.native.js.map +1 -1
- package/dist/cjs/utils/removeUndefined.native.js.map +1 -1
- package/dist/cjs/utils/routeFileWatch.native.js.map +1 -1
- package/dist/cjs/utils/routeFileWatch.test.native.js.map +1 -1
- package/dist/cjs/utils/style.native.js.map +1 -1
- package/dist/cjs/utils/toAbsolute.native.js.map +1 -1
- package/dist/cjs/utils/toServerOutputPath.native.js.map +1 -1
- package/dist/cjs/utils/toServerOutputPath.test.native.js.map +1 -1
- package/dist/cjs/utils/trackLoaderDependencies.native.js.map +1 -1
- package/dist/cjs/utils/url.native.js.map +1 -1
- package/dist/cjs/utils/useConstant.native.js.map +1 -1
- package/dist/cjs/utils/watchFile.native.js.map +1 -1
- package/dist/cjs/utils/weakKey.native.js.map +1 -1
- package/dist/cjs/utils/weakMemo.native.js.map +1 -1
- package/dist/cjs/utils/withStaticProperties.native.js.map +1 -1
- package/dist/cjs/utils/workerImport.native.js.map +1 -1
- package/dist/cjs/validateParams.native.js.map +1 -1
- package/dist/cjs/validateSearch.native.js.map +1 -1
- package/dist/cjs/vercel/build/buildVercelOutputDirectory.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-build-output-config-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-config-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/config/vc-package-base.native.js.map +1 -1
- package/dist/cjs/vercel/build/generate/createApiServerlessFunction.native.js.map +1 -1
- package/dist/cjs/vercel/build/generate/createSsrServerlessFunction.native.js.map +1 -1
- package/dist/cjs/vercel/build/getPathFromRoute.native.js.map +1 -1
- package/dist/cjs/views/EmptyRoute.native.js.map +1 -1
- package/dist/cjs/views/ErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/LoadProgressBar.native.js.map +1 -1
- package/dist/cjs/views/Navigator.native.js.map +1 -1
- package/dist/cjs/views/OneStackRouter.native.js.map +1 -1
- package/dist/cjs/views/Protected.native.js.map +1 -1
- package/dist/cjs/views/RootErrorBoundary.native.js.map +1 -1
- package/dist/cjs/views/Screen.native.js.map +1 -1
- package/dist/cjs/views/ScrollBehavior.native.js.map +1 -1
- package/dist/cjs/views/SourceInspector.native.js.map +1 -1
- package/dist/cjs/views/Try.native.js.map +1 -1
- package/dist/cjs/vite/DevHead.native.js.map +1 -1
- package/dist/cjs/vite/constants.native.js.map +1 -1
- package/dist/cjs/vite/customNodeExternals.native.js.map +1 -1
- package/dist/cjs/vite/ensureTsConfig.native.js.map +1 -1
- package/dist/cjs/vite/findDepsToOptimize.native.js.map +1 -1
- package/dist/cjs/vite/getManifest.native.js.map +1 -1
- package/dist/cjs/vite/getManifest.test.native.js.map +1 -1
- package/dist/cjs/vite/loadConfig.native.js.map +1 -1
- package/dist/cjs/vite/makePluginWebOnly.native.js.map +1 -1
- package/dist/cjs/vite/one-server-only.test.native.js.map +1 -1
- package/dist/cjs/vite/one.native.js.map +1 -1
- package/dist/cjs/vite/plugins/SSRCSSPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/clientTreeShakePlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/criticalCSSPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/criticalCSSPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/devtoolsPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/environmentGuardPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/environmentGuardPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fileSystemRouterPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/fixDependenciesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/generateFileSystemRouteTypesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/imageDataPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/imageDataPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/removeReactNativeWebAnimatedPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/sourceInspectorPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/useDomPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryConstants.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.native.js.map +1 -1
- package/dist/cjs/vite/plugins/virtualEntryPlugin.test.native.js.map +1 -1
- package/dist/cjs/vite/plugins/warmRoutesPlugin.native.js.map +1 -1
- package/dist/cjs/vite/replaceLoader.native.js.map +1 -1
- package/dist/cjs/vite/resolveResponse.native.js.map +1 -1
- package/dist/cjs/vite/types.native.js.map +1 -1
- package/dist/cjs/vite-auto-warm.native.js.map +1 -1
- package/dist/cjs/vite.native.js.map +1 -1
- package/dist/cjs/zero/getQueryKey.native.js.map +1 -1
- package/dist/cjs/zero/isZeroQuery.native.js.map +1 -1
- package/dist/cjs/zero/resolveQuery.native.js.map +1 -1
- package/dist/cjs/zero/subscribeToQuery.native.js.map +1 -1
- package/dist/cjs/zero/types.native.js.map +1 -1
- package/dist/cjs/zero/useQuery.native.js.map +1 -1
- package/dist/cjs/zero/useQueryZero.native.js.map +1 -1
- package/dist/cjs/zero.native.js.map +1 -1
- package/dist/esm/__mocks__/@react-navigation/native-stack.mjs +2 -1
- package/dist/esm/__mocks__/@react-navigation/native-stack.mjs.map +1 -1
- package/dist/esm/__mocks__/@react-navigation/native-stack.native.js +4 -1
- package/dist/esm/__mocks__/@react-navigation/native-stack.native.js.map +1 -1
- package/dist/esm/constants.test.mjs.map +1 -1
- package/dist/esm/constants.test.native.js.map +1 -1
- package/dist/esm/createHandleRequest.mjs +21 -12
- package/dist/esm/createHandleRequest.mjs.map +1 -1
- package/dist/esm/createHandleRequest.native.js +22 -12
- package/dist/esm/createHandleRequest.native.js.map +1 -1
- package/dist/esm/createHandleRequest.test.mjs +51 -6
- package/dist/esm/createHandleRequest.test.mjs.map +1 -1
- package/dist/esm/createHandleRequest.test.native.js +53 -6
- package/dist/esm/createHandleRequest.test.native.js.map +1 -1
- package/dist/esm/headless.mjs +1 -0
- package/dist/esm/headless.mjs.map +1 -1
- package/dist/esm/headless.native.js +1 -0
- package/dist/esm/headless.native.js.map +1 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.mjs +2 -1
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/index.native.js +2 -1
- package/dist/esm/index.native.js.map +1 -1
- package/dist/esm/layouts/Drawer.mjs +35 -1
- package/dist/esm/layouts/Drawer.mjs.map +1 -1
- package/dist/esm/layouts/Drawer.native.js +36 -1
- package/dist/esm/layouts/Drawer.native.js.map +1 -1
- package/dist/esm/layouts/Stack.mjs +12 -3
- package/dist/esm/layouts/Stack.mjs.map +1 -1
- package/dist/esm/layouts/Stack.native.js +12 -3
- package/dist/esm/layouts/Stack.native.js.map +1 -1
- package/dist/esm/layouts/Tabs.mjs +31 -8
- package/dist/esm/layouts/Tabs.mjs.map +1 -1
- package/dist/esm/layouts/Tabs.native.js +32 -8
- package/dist/esm/layouts/Tabs.native.js.map +1 -1
- package/dist/esm/layouts/stack-navigator.mjs +4 -0
- package/dist/esm/layouts/stack-navigator.mjs.map +1 -0
- package/dist/esm/layouts/stack-navigator.native.js +4 -0
- package/dist/esm/layouts/stack-navigator.native.js.map +1 -0
- package/dist/esm/layouts/stack-utils/StackScreen.mjs.map +1 -1
- package/dist/esm/layouts/stack-utils/StackScreen.native.js.map +1 -1
- package/dist/esm/layouts/stack-utils/index.mjs.map +1 -1
- package/dist/esm/router/renderingRegistry.mjs +26 -0
- package/dist/esm/router/renderingRegistry.mjs.map +1 -0
- package/dist/esm/router/renderingRegistry.native.js +26 -0
- package/dist/esm/router/renderingRegistry.native.js.map +1 -0
- package/dist/esm/router/router.mjs +2 -0
- package/dist/esm/router/router.mjs.map +1 -1
- package/dist/esm/router/router.native.js.map +1 -1
- package/dist/esm/router/web/ScreenRenderContext.mjs +10 -0
- package/dist/esm/router/web/ScreenRenderContext.mjs.map +1 -0
- package/dist/esm/router/web/ScreenRenderContext.native.js +10 -0
- package/dist/esm/router/web/ScreenRenderContext.native.js.map +1 -0
- package/dist/esm/router/web/WebStackNavigator.mjs +49 -0
- package/dist/esm/router/web/WebStackNavigator.mjs.map +1 -0
- package/dist/esm/router/web/WebStackNavigator.native.js +51 -0
- package/dist/esm/router/web/WebStackNavigator.native.js.map +1 -0
- package/dist/esm/router/web/WebStackView.mjs +155 -0
- package/dist/esm/router/web/WebStackView.mjs.map +1 -0
- package/dist/esm/router/web/WebStackView.native.js +206 -0
- package/dist/esm/router/web/WebStackView.native.js.map +1 -0
- package/dist/esm/router/web/__tests__/WebStackView.runtime.test.mjs +272 -0
- package/dist/esm/router/web/__tests__/WebStackView.runtime.test.mjs.map +1 -0
- package/dist/esm/router/web/__tests__/WebStackView.runtime.test.native.js +309 -0
- package/dist/esm/router/web/__tests__/WebStackView.runtime.test.native.js.map +1 -0
- package/dist/esm/router/web/__tests__/WebStackView.test.mjs +465 -0
- package/dist/esm/router/web/__tests__/WebStackView.test.mjs.map +1 -0
- package/dist/esm/router/web/__tests__/WebStackView.test.native.js +513 -0
- package/dist/esm/router/web/__tests__/WebStackView.test.native.js.map +1 -0
- package/dist/esm/router/web/__tests__/stackStateUtils.test.mjs +135 -0
- package/dist/esm/router/web/__tests__/stackStateUtils.test.mjs.map +1 -0
- package/dist/esm/router/web/__tests__/stackStateUtils.test.native.js +161 -0
- package/dist/esm/router/web/__tests__/stackStateUtils.test.native.js.map +1 -0
- package/dist/esm/router/web/stackStateUtils.mjs +32 -0
- package/dist/esm/router/web/stackStateUtils.mjs.map +1 -0
- package/dist/esm/router/web/stackStateUtils.native.js +35 -0
- package/dist/esm/router/web/stackStateUtils.native.js.map +1 -0
- package/dist/esm/server/ServerContextScript.mjs +2 -1
- package/dist/esm/server/ServerContextScript.mjs.map +1 -1
- package/dist/esm/server/ServerContextScript.native.js +2 -1
- package/dist/esm/server/ServerContextScript.native.js.map +1 -1
- package/dist/esm/utils/dynamicImport.test.mjs.map +1 -1
- package/dist/esm/utils/dynamicImport.test.native.js.map +1 -1
- package/package.json +10 -9
- package/src/__mocks__/@react-navigation/native-stack.ts +22 -0
- package/src/constants.test.ts +12 -8
- package/src/createHandleRequest.test.ts +50 -6
- package/src/createHandleRequest.ts +26 -24
- package/src/headless.tsx +6 -0
- package/src/index.ts +20 -5
- package/src/layouts/Drawer.tsx +43 -1
- package/src/layouts/Stack.tsx +51 -33
- package/src/layouts/Tabs.tsx +89 -57
- package/src/layouts/stack-navigator.ts +9 -0
- package/src/layouts/stack-navigator.web.ts +3 -0
- package/src/layouts/stack-utils/StackScreen.tsx +30 -9
- package/src/layouts/stack-utils/index.tsx +1 -0
- package/src/router/renderingRegistry.ts +109 -0
- package/src/router/router.ts +33 -9
- package/src/router/web/ScreenRenderContext.tsx +61 -0
- package/src/router/web/WebStackNavigator.tsx +87 -0
- package/src/router/web/WebStackView.tsx +264 -0
- package/src/router/web/__tests__/WebStackView.runtime.test.tsx +309 -0
- package/src/router/web/__tests__/WebStackView.test.tsx +444 -0
- package/src/router/web/__tests__/stackStateUtils.test.ts +153 -0
- package/src/router/web/stackStateUtils.ts +89 -0
- package/src/server/ServerContextScript.tsx +8 -7
- package/src/utils/dynamicImport.test.ts +9 -7
- package/types/__mocks__/@react-navigation/native-stack.d.ts +9 -0
- package/types/__mocks__/@react-navigation/native-stack.d.ts.map +1 -1
- package/types/createHandleRequest.d.ts.map +1 -1
- package/types/headless.d.ts.map +1 -1
- package/types/index.d.ts +4 -2
- package/types/index.d.ts.map +1 -1
- package/types/layouts/Drawer.d.ts +13 -2
- package/types/layouts/Drawer.d.ts.map +1 -1
- package/types/layouts/Stack.d.ts +11 -1
- package/types/layouts/Stack.d.ts.map +1 -1
- package/types/layouts/Tabs.d.ts +14 -4
- package/types/layouts/Tabs.d.ts.map +1 -1
- package/types/layouts/stack-navigator.d.ts +9 -0
- package/types/layouts/stack-navigator.d.ts.map +1 -0
- package/types/layouts/stack-navigator.web.d.ts +2 -0
- package/types/layouts/stack-navigator.web.d.ts.map +1 -0
- package/types/layouts/stack-utils/StackScreen.d.ts +24 -2
- package/types/layouts/stack-utils/StackScreen.d.ts.map +1 -1
- package/types/layouts/stack-utils/index.d.ts +1 -1
- package/types/layouts/stack-utils/index.d.ts.map +1 -1
- package/types/router/renderingRegistry.d.ts +90 -0
- package/types/router/renderingRegistry.d.ts.map +1 -0
- package/types/router/router.d.ts.map +1 -1
- package/types/router/web/ScreenRenderContext.d.ts +46 -0
- package/types/router/web/ScreenRenderContext.d.ts.map +1 -0
- package/types/router/web/WebStackNavigator.d.ts +2 -0
- package/types/router/web/WebStackNavigator.d.ts.map +1 -0
- package/types/router/web/WebStackView.d.ts +42 -0
- package/types/router/web/WebStackView.d.ts.map +1 -0
- package/types/router/web/stackStateUtils.d.ts +35 -0
- package/types/router/web/stackStateUtils.d.ts.map +1 -0
- package/types/server/ServerContextScript.d.ts.map +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import { createContext, useContext, type ComponentType, type ReactNode } from 'react'
|
|
4
|
+
import type { NativeStackNavigationOptions } from '@react-navigation/native-stack'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Props passed to a user-supplied screen-render component. Mirrors the
|
|
8
|
+
* native-stack option shape so the same render works for any overlay
|
|
9
|
+
* presentation (modal, formSheet, pageSheet, ...).
|
|
10
|
+
*
|
|
11
|
+
* `open` is driven by the router. The render component decides how to
|
|
12
|
+
* animate based on transitions of `open`, and calls `dismiss()` after its
|
|
13
|
+
* close animation completes (this triggers the actual `StackActions.pop`).
|
|
14
|
+
*/
|
|
15
|
+
export type StackRenderProps = {
|
|
16
|
+
routeKey: string
|
|
17
|
+
routeName: string
|
|
18
|
+
presentation: NonNullable<NativeStackNavigationOptions['presentation']>
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Whether this overlay should currently be visible. For non-keepMounted
|
|
22
|
+
* routes, this is always `true` while the render is invoked. For
|
|
23
|
+
* keepMounted routes, this toggles as the user navigates away from /
|
|
24
|
+
* back to this route - the React subtree stays mounted in both states.
|
|
25
|
+
*/
|
|
26
|
+
open: boolean
|
|
27
|
+
|
|
28
|
+
dismiss: () => void
|
|
29
|
+
dismissible: boolean
|
|
30
|
+
|
|
31
|
+
// sheet detent IR (pass-through from native-stack options)
|
|
32
|
+
sheetAllowedDetents?: number[] | 'fitToContents'
|
|
33
|
+
sheetGrabberVisible?: boolean
|
|
34
|
+
sheetCornerRadius?: number
|
|
35
|
+
sheetInitialDetentIndex?: number | 'last'
|
|
36
|
+
sheetLargestUndimmedDetentIndex?: number | 'none' | 'last'
|
|
37
|
+
sheetExpandsWhenScrolledToEdge?: boolean
|
|
38
|
+
|
|
39
|
+
children: ReactNode
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type StackRenderComponent = ComponentType<StackRenderProps>
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Platform-keyed render map. v1 consumes `web` only; `ios`/`android` are
|
|
46
|
+
* reserved for future use (a route overrides react-native-screens' native
|
|
47
|
+
* sheet with a custom impl).
|
|
48
|
+
*/
|
|
49
|
+
export type StackRender = {
|
|
50
|
+
web?: StackRenderComponent
|
|
51
|
+
ios?: StackRenderComponent
|
|
52
|
+
android?: StackRenderComponent
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const StackRenderContext = createContext<StackRender | undefined>(undefined)
|
|
56
|
+
|
|
57
|
+
export const StackRenderProvider = StackRenderContext.Provider
|
|
58
|
+
|
|
59
|
+
export function useStackRender(): StackRender | undefined {
|
|
60
|
+
return useContext(StackRenderContext)
|
|
61
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
createNavigatorFactory,
|
|
5
|
+
StackActions,
|
|
6
|
+
StackRouter,
|
|
7
|
+
useNavigationBuilder,
|
|
8
|
+
type EventArg,
|
|
9
|
+
type ParamListBase,
|
|
10
|
+
type StackActionHelpers,
|
|
11
|
+
type StackNavigationState,
|
|
12
|
+
type StackRouterOptions,
|
|
13
|
+
} from '@react-navigation/native'
|
|
14
|
+
import type {
|
|
15
|
+
NativeStackNavigationEventMap,
|
|
16
|
+
NativeStackNavigationOptions,
|
|
17
|
+
} from '@react-navigation/native-stack'
|
|
18
|
+
import { useEffect, type ReactNode } from 'react'
|
|
19
|
+
|
|
20
|
+
import { WebStackView } from './WebStackView'
|
|
21
|
+
|
|
22
|
+
type WebStackNavigatorProps = {
|
|
23
|
+
initialRouteName?: string
|
|
24
|
+
screenOptions?: NativeStackNavigationOptions
|
|
25
|
+
children: ReactNode
|
|
26
|
+
id?: string
|
|
27
|
+
// accept anything else NativeStackNavigator does so withLayoutContext can pass through
|
|
28
|
+
[k: string]: any
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Drop-in replacement for NativeStackNavigator on web.
|
|
33
|
+
*
|
|
34
|
+
* Uses the same router (StackRouter) and option shape as native-stack so
|
|
35
|
+
* navigation behavior is identical; the difference is that overlay-type
|
|
36
|
+
* presentations (modal, formSheet, ...) get peeled off the underlying view
|
|
37
|
+
* and rendered via the configured Stack render component in WebStackView.
|
|
38
|
+
*/
|
|
39
|
+
function WebStackNavigator({
|
|
40
|
+
initialRouteName,
|
|
41
|
+
children,
|
|
42
|
+
screenOptions,
|
|
43
|
+
...rest
|
|
44
|
+
}: WebStackNavigatorProps) {
|
|
45
|
+
const { state, navigation, descriptors, NavigationContent, describe } =
|
|
46
|
+
useNavigationBuilder<
|
|
47
|
+
StackNavigationState<ParamListBase>,
|
|
48
|
+
StackRouterOptions,
|
|
49
|
+
StackActionHelpers<ParamListBase>,
|
|
50
|
+
NativeStackNavigationOptions,
|
|
51
|
+
NativeStackNavigationEventMap
|
|
52
|
+
>(StackRouter, {
|
|
53
|
+
...(rest as any),
|
|
54
|
+
children,
|
|
55
|
+
screenOptions,
|
|
56
|
+
initialRouteName,
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
// Mirror native-stack tabPress popToTop behavior
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
// @ts-expect-error: tabPress may not exist on this navigation
|
|
62
|
+
return navigation?.addListener?.('tabPress', (e: EventArg<'tabPress', true>) => {
|
|
63
|
+
const isFocused = navigation.isFocused()
|
|
64
|
+
requestAnimationFrame(() => {
|
|
65
|
+
if (state.index > 0 && isFocused && !e.defaultPrevented) {
|
|
66
|
+
navigation.dispatch({
|
|
67
|
+
...StackActions.popToTop(),
|
|
68
|
+
target: state.key,
|
|
69
|
+
})
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
}, [navigation, state.index, state.key])
|
|
74
|
+
|
|
75
|
+
return (
|
|
76
|
+
<NavigationContent>
|
|
77
|
+
<WebStackView
|
|
78
|
+
state={state}
|
|
79
|
+
navigation={navigation as any}
|
|
80
|
+
descriptors={descriptors as any}
|
|
81
|
+
describe={describe as any}
|
|
82
|
+
/>
|
|
83
|
+
</NavigationContent>
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export const createWebStackNavigator = createNavigatorFactory(WebStackNavigator)
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
StackActions,
|
|
5
|
+
type ParamListBase,
|
|
6
|
+
type StackActionHelpers,
|
|
7
|
+
type StackNavigationState,
|
|
8
|
+
} from '@react-navigation/native'
|
|
9
|
+
import type {
|
|
10
|
+
NativeStackNavigationEventMap,
|
|
11
|
+
NativeStackNavigationOptions,
|
|
12
|
+
} from '@react-navigation/native-stack'
|
|
13
|
+
import { NativeStackView } from '@react-navigation/native-stack'
|
|
14
|
+
import {
|
|
15
|
+
Fragment,
|
|
16
|
+
useCallback,
|
|
17
|
+
useRef,
|
|
18
|
+
useState,
|
|
19
|
+
type ReactElement,
|
|
20
|
+
type ReactNode,
|
|
21
|
+
} from 'react'
|
|
22
|
+
|
|
23
|
+
import {
|
|
24
|
+
convertStackStateToNonOverlayState,
|
|
25
|
+
findLastNonOverlayIndex,
|
|
26
|
+
isOverlayPresentation,
|
|
27
|
+
} from './stackStateUtils'
|
|
28
|
+
import {
|
|
29
|
+
type StackRender,
|
|
30
|
+
type StackRenderComponent,
|
|
31
|
+
type StackRenderProps,
|
|
32
|
+
useStackRender,
|
|
33
|
+
} from './ScreenRenderContext'
|
|
34
|
+
|
|
35
|
+
type RouteOptions = NativeStackNavigationOptions & {
|
|
36
|
+
render?: StackRender
|
|
37
|
+
keepMounted?: boolean
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
type Descriptors = Record<
|
|
41
|
+
string,
|
|
42
|
+
{
|
|
43
|
+
options: RouteOptions
|
|
44
|
+
render: () => ReactNode
|
|
45
|
+
navigation: any
|
|
46
|
+
}
|
|
47
|
+
>
|
|
48
|
+
|
|
49
|
+
type WebStackViewProps = {
|
|
50
|
+
state: StackNavigationState<ParamListBase>
|
|
51
|
+
navigation: StackActionHelpers<ParamListBase> & {
|
|
52
|
+
dispatch: (action: any) => void
|
|
53
|
+
}
|
|
54
|
+
descriptors: Descriptors
|
|
55
|
+
describe?: (route: any, placeholder?: boolean) => any
|
|
56
|
+
eventMap?: NativeStackNavigationEventMap
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Resolve which render component to use for an overlay route, in order:
|
|
61
|
+
* 1. options.render?.web (per-route override)
|
|
62
|
+
* 2. context.web (Stack-level default; also fed by setupRendering)
|
|
63
|
+
* Returns undefined when neither is set.
|
|
64
|
+
*/
|
|
65
|
+
export function resolveOverlayRender(
|
|
66
|
+
options: RouteOptions | undefined,
|
|
67
|
+
contextRender: StackRender | undefined
|
|
68
|
+
): StackRenderComponent | undefined {
|
|
69
|
+
return options?.render?.web ?? contextRender?.web
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
type PersistentSlot = {
|
|
73
|
+
routeName: string
|
|
74
|
+
Render: StackRenderComponent
|
|
75
|
+
options: RouteOptions
|
|
76
|
+
content: ReactElement
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function WebStackView({
|
|
80
|
+
state,
|
|
81
|
+
navigation,
|
|
82
|
+
descriptors,
|
|
83
|
+
describe,
|
|
84
|
+
}: WebStackViewProps) {
|
|
85
|
+
const contextRender = useStackRender()
|
|
86
|
+
|
|
87
|
+
// Persistent slots survive route pops for routes with `keepMounted: true`.
|
|
88
|
+
// Keyed by route NAME (not key) so re-navigation reuses the same mount.
|
|
89
|
+
const persistentSlotsRef = useRef<Map<string, PersistentSlot>>(new Map())
|
|
90
|
+
|
|
91
|
+
// Capture / refresh persistent slots from current descriptors.
|
|
92
|
+
for (const route of state.routes) {
|
|
93
|
+
const desc = descriptors[route.key]
|
|
94
|
+
if (!desc) continue
|
|
95
|
+
const { options } = desc
|
|
96
|
+
if (!options.keepMounted) continue
|
|
97
|
+
if (!isOverlayPresentation(options)) continue
|
|
98
|
+
const Render = resolveOverlayRender(options, contextRender)
|
|
99
|
+
if (!Render) continue
|
|
100
|
+
if (persistentSlotsRef.current.has(route.name)) continue
|
|
101
|
+
persistentSlotsRef.current.set(route.name, {
|
|
102
|
+
routeName: route.name,
|
|
103
|
+
Render,
|
|
104
|
+
options,
|
|
105
|
+
content: desc.render() as ReactElement,
|
|
106
|
+
})
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Compute which routes are currently focused as overlays (trailing).
|
|
110
|
+
const isOverlayCandidate = (options: NativeStackNavigationOptions | undefined | null) =>
|
|
111
|
+
isOverlayPresentation(options) &&
|
|
112
|
+
resolveOverlayRender(options ?? undefined, contextRender) !== undefined
|
|
113
|
+
|
|
114
|
+
const nonOverlay = convertStackStateToNonOverlayState(
|
|
115
|
+
state,
|
|
116
|
+
descriptors,
|
|
117
|
+
isOverlayCandidate
|
|
118
|
+
)
|
|
119
|
+
const underlyingState = {
|
|
120
|
+
...state,
|
|
121
|
+
routes: nonOverlay.routes,
|
|
122
|
+
index: nonOverlay.index,
|
|
123
|
+
} as StackNavigationState<ParamListBase>
|
|
124
|
+
|
|
125
|
+
const lastNonOverlay = findLastNonOverlayIndex(state, descriptors, isOverlayCandidate)
|
|
126
|
+
const trailingOverlays = state.routes.slice(lastNonOverlay + 1)
|
|
127
|
+
|
|
128
|
+
// Track which route NAMES are currently focused as a trailing overlay, so
|
|
129
|
+
// persistent slots know whether to be open or just kept-mounted-hidden.
|
|
130
|
+
const focusedOverlayNames = new Set(trailingOverlays.map((r) => r.name))
|
|
131
|
+
|
|
132
|
+
// Trailing overlays that AREN'T keepMounted render in the regular slot.
|
|
133
|
+
const regularOverlays = trailingOverlays.filter(
|
|
134
|
+
(r) => !descriptors[r.key]?.options.keepMounted
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
return (
|
|
138
|
+
<Fragment>
|
|
139
|
+
<NativeStackView
|
|
140
|
+
state={underlyingState}
|
|
141
|
+
descriptors={descriptors as any}
|
|
142
|
+
navigation={navigation as any}
|
|
143
|
+
describe={describe as any}
|
|
144
|
+
/>
|
|
145
|
+
|
|
146
|
+
{regularOverlays.map((route) => (
|
|
147
|
+
<OverlayHost
|
|
148
|
+
key={route.key}
|
|
149
|
+
route={route}
|
|
150
|
+
descriptor={descriptors[route.key]!}
|
|
151
|
+
contextRender={contextRender}
|
|
152
|
+
open
|
|
153
|
+
onDismiss={() =>
|
|
154
|
+
navigation.dispatch({
|
|
155
|
+
...StackActions.pop(),
|
|
156
|
+
source: route.key,
|
|
157
|
+
target: state.key,
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
/>
|
|
161
|
+
))}
|
|
162
|
+
|
|
163
|
+
{/* Persistent slots - render once each, never unmount. `open` toggles
|
|
164
|
+
based on whether the route is the current trailing overlay. */}
|
|
165
|
+
{Array.from(persistentSlotsRef.current.values()).map((slot) => (
|
|
166
|
+
<PersistentOverlayHost
|
|
167
|
+
key={slot.routeName}
|
|
168
|
+
slot={slot}
|
|
169
|
+
open={focusedOverlayNames.has(slot.routeName)}
|
|
170
|
+
onDismiss={() => {
|
|
171
|
+
// Find the live route key for this name (if any) and pop it.
|
|
172
|
+
const live = state.routes.find((r) => r.name === slot.routeName)
|
|
173
|
+
if (live) {
|
|
174
|
+
navigation.dispatch({
|
|
175
|
+
...StackActions.pop(),
|
|
176
|
+
source: live.key,
|
|
177
|
+
target: state.key,
|
|
178
|
+
})
|
|
179
|
+
}
|
|
180
|
+
}}
|
|
181
|
+
/>
|
|
182
|
+
))}
|
|
183
|
+
</Fragment>
|
|
184
|
+
)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export function OverlayHost({
|
|
188
|
+
route,
|
|
189
|
+
descriptor,
|
|
190
|
+
contextRender,
|
|
191
|
+
open,
|
|
192
|
+
onDismiss,
|
|
193
|
+
}: {
|
|
194
|
+
route: { key: string; name: string }
|
|
195
|
+
descriptor: Descriptors[string]
|
|
196
|
+
contextRender: StackRender | undefined
|
|
197
|
+
open: boolean
|
|
198
|
+
onDismiss: () => void
|
|
199
|
+
}) {
|
|
200
|
+
const dismiss = useStableCallback(onDismiss)
|
|
201
|
+
|
|
202
|
+
const options = descriptor.options
|
|
203
|
+
const Render = resolveOverlayRender(options, contextRender)
|
|
204
|
+
const content = descriptor.render()
|
|
205
|
+
|
|
206
|
+
if (!Render || !isOverlayPresentation(options)) {
|
|
207
|
+
return <Fragment>{content}</Fragment>
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const renderProps: StackRenderProps = {
|
|
211
|
+
routeKey: route.key,
|
|
212
|
+
routeName: route.name,
|
|
213
|
+
presentation: options.presentation!,
|
|
214
|
+
open,
|
|
215
|
+
dismiss,
|
|
216
|
+
dismissible: options.gestureEnabled ?? true,
|
|
217
|
+
sheetAllowedDetents: options.sheetAllowedDetents,
|
|
218
|
+
sheetGrabberVisible: options.sheetGrabberVisible,
|
|
219
|
+
sheetCornerRadius: options.sheetCornerRadius,
|
|
220
|
+
sheetInitialDetentIndex: options.sheetInitialDetentIndex,
|
|
221
|
+
sheetLargestUndimmedDetentIndex: options.sheetLargestUndimmedDetentIndex,
|
|
222
|
+
sheetExpandsWhenScrolledToEdge: options.sheetExpandsWhenScrolledToEdge,
|
|
223
|
+
children: content,
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
return <Render {...renderProps} />
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function PersistentOverlayHost({
|
|
230
|
+
slot,
|
|
231
|
+
open,
|
|
232
|
+
onDismiss,
|
|
233
|
+
}: {
|
|
234
|
+
slot: PersistentSlot
|
|
235
|
+
open: boolean
|
|
236
|
+
onDismiss: () => void
|
|
237
|
+
}) {
|
|
238
|
+
const dismiss = useStableCallback(onDismiss)
|
|
239
|
+
const { Render, options, content, routeName } = slot
|
|
240
|
+
|
|
241
|
+
const renderProps: StackRenderProps = {
|
|
242
|
+
routeKey: `__keepMounted:${routeName}`,
|
|
243
|
+
routeName,
|
|
244
|
+
presentation: options.presentation!,
|
|
245
|
+
open,
|
|
246
|
+
dismiss,
|
|
247
|
+
dismissible: options.gestureEnabled ?? true,
|
|
248
|
+
sheetAllowedDetents: options.sheetAllowedDetents,
|
|
249
|
+
sheetGrabberVisible: options.sheetGrabberVisible,
|
|
250
|
+
sheetCornerRadius: options.sheetCornerRadius,
|
|
251
|
+
sheetInitialDetentIndex: options.sheetInitialDetentIndex,
|
|
252
|
+
sheetLargestUndimmedDetentIndex: options.sheetLargestUndimmedDetentIndex,
|
|
253
|
+
sheetExpandsWhenScrolledToEdge: options.sheetExpandsWhenScrolledToEdge,
|
|
254
|
+
children: content,
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
return <Render {...renderProps} />
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
function useStableCallback<T extends (...args: any[]) => any>(fn: T): T {
|
|
261
|
+
const [ref] = useState(() => ({ current: fn }))
|
|
262
|
+
ref.current = fn
|
|
263
|
+
return useCallback(((...args: any[]) => ref.current(...args)) as T, [ref])
|
|
264
|
+
}
|