import { App } from './App' import { createBrowserRouter, Outlet, redirect, RouterProvider, } from 'react-router-dom' import { ErrorPage } from './components/ErrorPage' import { Settings } from './routes/Settings' import Onboarding, { onboardingRoutes } from './routes/Onboarding' import SignIn from './routes/SignIn' import { Auth } from './Auth' import { isTauri } from './lib/isTauri' import Home from './routes/Home' import makeUrlPathRelative from './lib/makeUrlPathRelative' import DownloadAppBanner from 'components/DownloadAppBanner' import { WasmErrBanner } from 'components/WasmErrBanner' import { CommandBar } from 'components/CommandBar/CommandBar' import ModelingMachineProvider from 'components/ModelingMachineProvider' import FileMachineProvider from 'components/FileMachineProvider' import { paths } from 'lib/paths' import { fileLoader, homeLoader, onboardingRedirectLoader, settingsLoader, } from 'lib/routeLoaders' import { CommandBarProvider } from 'components/CommandBar/CommandBarProvider' import SettingsAuthProvider from 'components/SettingsAuthProvider' import LspProvider from 'components/LspProvider' import { KclContextProvider } from 'lang/KclProvider' import { BROWSER_PROJECT_NAME } from 'lib/constants' const router = createBrowserRouter([ { loader: settingsLoader, id: paths.INDEX, /* Make sure auth is the outermost provider or else we will have * inefficient re-renders, use the react profiler to see. */ element: ( ), errorElement: , children: [ { path: paths.INDEX, loader: () => isTauri() ? redirect(paths.HOME) : redirect(paths.FILE + '/%2F' + BROWSER_PROJECT_NAME), }, { loader: fileLoader, id: paths.FILE, path: paths.FILE + '/:id', element: ( {!isTauri() && import.meta.env.PROD && } ), children: [ { id: paths.FILE + 'SETTINGS', loader: settingsLoader, children: [ { loader: onboardingRedirectLoader, index: true, element: <>, }, { path: makeUrlPathRelative(paths.SETTINGS), element: , }, { path: makeUrlPathRelative(paths.ONBOARDING.INDEX), element: , children: onboardingRoutes, }, ], }, ], }, { path: paths.HOME, element: ( ), id: paths.HOME, loader: homeLoader, children: [ { index: true, element: <>, id: paths.HOME + 'SETTINGS', loader: settingsLoader, }, { path: makeUrlPathRelative(paths.SETTINGS), loader: settingsLoader, element: , }, ], }, { path: paths.SIGN_IN, element: , }, ], }, ]) /** * All routes in the app, used in src/index.tsx * @returns RouterProvider */ export const Router = () => { return }