{{#if (includes examples "ai")}} import "@/polyfills"; {{/if}} {{#if (eq backend "convex")}} import { ConvexProvider, ConvexReactClient } from "convex/react"; {{#if (eq auth "clerk")}} import { ClerkProvider, useAuth } from "@clerk/clerk-expo"; import { ConvexProviderWithClerk } from "convex/react-clerk"; import { tokenCache } from "@clerk/clerk-expo/token-cache"; {{/if}} {{else}} {{#unless (eq api "none")}} import { QueryClientProvider } from "@tanstack/react-query"; {{/unless}} {{/if}} import { Stack } from "expo-router"; import { DarkTheme, DefaultTheme, type Theme, ThemeProvider, } from "@react-navigation/native"; import { StatusBar } from "expo-status-bar"; import { GestureHandlerRootView } from "react-native-gesture-handler"; import "../global.css"; {{#if (eq api "trpc")}} import { queryClient } from "@/utils/trpc"; {{/if}} {{#if (eq api "orpc")}} import { queryClient } from "@/utils/orpc"; {{/if}} import { NAV_THEME } from "@/lib/constants"; import React, { useRef } from "react"; import { useColorScheme } from "@/lib/use-color-scheme"; import { Platform } from "react-native"; import { setAndroidNavigationBar } from "@/lib/android-navigation-bar"; const LIGHT_THEME: Theme = { ...DefaultTheme, colors: NAV_THEME.light, }; const DARK_THEME: Theme = { ...DarkTheme, colors: NAV_THEME.dark, }; export const unstable_settings = { initialRouteName: "(drawer)", }; {{#if (eq backend "convex")}} const convex = new ConvexReactClient(process.env.EXPO_PUBLIC_CONVEX_URL!, { unsavedChangesWarning: false, }); {{/if}} export default function RootLayout() { const hasMounted = useRef(false); const { colorScheme, isDarkColorScheme } = useColorScheme(); const [isColorSchemeLoaded, setIsColorSchemeLoaded] = React.useState(false); useIsomorphicLayoutEffect(() => { if (hasMounted.current) { return; } if (Platform.OS === "web") { document.documentElement.classList.add("bg-background"); } setAndroidNavigationBar(colorScheme); setIsColorSchemeLoaded(true); hasMounted.current = true; }, []); if (!isColorSchemeLoaded) { return null; } return ( {{#if (eq backend "convex")}} {{#if (eq auth "clerk")}} {{else}} {{/if}} {{else}} {{#unless (eq api "none")}} {{else}} {{/unless}} {{/if}} ); } const useIsomorphicLayoutEffect = Platform.OS === "web" && typeof window === "undefined" ? React.useEffect : React.useLayoutEffect;