diff options
| author | Adam <[email protected]> | 2025-12-22 19:38:50 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-22 19:39:00 -0600 |
| commit | 794fe8f381c846f5241800363023d892c12cf495 (patch) | |
| tree | bff98689edfa635a2a9f39cb4ea61639b97f5b2d /packages/app/src/app.tsx | |
| parent | a4eebf9f08262f6bf63017710e2e6d9672ec6708 (diff) | |
| download | opencode-794fe8f381c846f5241800363023d892c12cf495.tar.gz opencode-794fe8f381c846f5241800363023d892c12cf495.zip | |
chore: rename packages/desktop -> packages/app
Diffstat (limited to 'packages/app/src/app.tsx')
| -rw-r--r-- | packages/app/src/app.tsx | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/packages/app/src/app.tsx b/packages/app/src/app.tsx new file mode 100644 index 000000000..11216643e --- /dev/null +++ b/packages/app/src/app.tsx @@ -0,0 +1,92 @@ +import "@/index.css" +import { ErrorBoundary, Show } from "solid-js" +import { Router, Route, Navigate } from "@solidjs/router" +import { MetaProvider } from "@solidjs/meta" +import { Font } from "@opencode-ai/ui/font" +import { MarkedProvider } from "@opencode-ai/ui/context/marked" +import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" +import { CodeComponentProvider } from "@opencode-ai/ui/context/code" +import { Diff } from "@opencode-ai/ui/diff" +import { Code } from "@opencode-ai/ui/code" +import { GlobalSyncProvider } from "@/context/global-sync" +import { LayoutProvider } from "@/context/layout" +import { GlobalSDKProvider } from "@/context/global-sdk" +import { TerminalProvider } from "@/context/terminal" +import { PromptProvider } from "@/context/prompt" +import { NotificationProvider } from "@/context/notification" +import { DialogProvider } from "@opencode-ai/ui/context/dialog" +import { CommandProvider } from "@/context/command" +import Layout from "@/pages/layout" +import Home from "@/pages/home" +import DirectoryLayout from "@/pages/directory-layout" +import Session from "@/pages/session" +import { ErrorPage } from "./pages/error" +import { iife } from "@opencode-ai/util/iife" + +declare global { + interface Window { + __OPENCODE__?: { updaterEnabled?: boolean; port?: number } + } +} + +const url = iife(() => { + const param = new URLSearchParams(document.location.search).get("url") + if (param) return param + + if (location.hostname.includes("opencode.ai")) return "http://localhost:4096" + if (window.__OPENCODE__) return `http://127.0.0.1:${window.__OPENCODE__.port}` + if (import.meta.env.DEV) + return `http://${import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "localhost"}:${import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096"}` + + return "http://localhost:4096" +}) + +export function App() { + return ( + <MetaProvider> + <Font /> + <ErrorBoundary fallback={(error) => <ErrorPage error={error} />}> + <DialogProvider> + <MarkedProvider> + <DiffComponentProvider component={Diff}> + <CodeComponentProvider component={Code}> + <GlobalSDKProvider url={url}> + <GlobalSyncProvider> + <LayoutProvider> + <NotificationProvider> + <Router + root={(props) => ( + <CommandProvider> + <Layout>{props.children}</Layout> + </CommandProvider> + )} + > + <Route path="/" component={Home} /> + <Route path="/:dir" component={DirectoryLayout}> + <Route path="/" component={() => <Navigate href="session" />} /> + <Route + path="/session/:id?" + component={(p) => ( + <Show when={p.params.id || true} keyed> + <TerminalProvider> + <PromptProvider> + <Session /> + </PromptProvider> + </TerminalProvider> + </Show> + )} + /> + </Route> + </Router> + </NotificationProvider> + </LayoutProvider> + </GlobalSyncProvider> + </GlobalSDKProvider> + </CodeComponentProvider> + </DiffComponentProvider> + </MarkedProvider> + </DialogProvider> + </ErrorBoundary> + </MetaProvider> + ) +} |
