From d531dff8d3f5c60df2e5c08e8bd04bf9a234dbc3 Mon Sep 17 00:00:00 2001 From: Brendan Allan Date: Mon, 8 Dec 2025 13:43:36 +0800 Subject: Export DesktopInterface from desktop and add PlatformContext --- packages/desktop/index.html | 2 +- packages/desktop/package.json | 2 +- packages/desktop/src/DesktopInterface.tsx | 67 +++++++++++++++++++++++++++ packages/desktop/src/PlatformContext.tsx | 14 ++++++ packages/desktop/src/entry.tsx | 22 +++++++++ packages/desktop/src/index.ts | 2 + packages/desktop/src/index.tsx | 77 ------------------------------- packages/tauri/index.html | 2 +- packages/tauri/src-tauri/src/lib.rs | 2 +- packages/tauri/src/index.ts | 1 - packages/tauri/src/index.tsx | 21 +++++++++ packages/tauri/tsconfig.json | 5 +- 12 files changed, 134 insertions(+), 83 deletions(-) create mode 100644 packages/desktop/src/DesktopInterface.tsx create mode 100644 packages/desktop/src/PlatformContext.tsx create mode 100644 packages/desktop/src/entry.tsx create mode 100644 packages/desktop/src/index.ts delete mode 100644 packages/desktop/src/index.tsx delete mode 100644 packages/tauri/src/index.ts create mode 100644 packages/tauri/src/index.tsx (limited to 'packages') diff --git a/packages/desktop/index.html b/packages/desktop/index.html index 0ac3d566d..b9d3e5351 100644 --- a/packages/desktop/index.html +++ b/packages/desktop/index.html @@ -23,6 +23,6 @@
- + diff --git a/packages/desktop/package.json b/packages/desktop/package.json index a71a33fe8..f71f33eda 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -4,7 +4,7 @@ "description": "", "type": "module", "exports": { - ".": "./src/index.tsx", + ".": "./src/index.ts", "./vite": "./vite.js" }, "scripts": { diff --git a/packages/desktop/src/DesktopInterface.tsx b/packages/desktop/src/DesktopInterface.tsx new file mode 100644 index 000000000..c4de3e089 --- /dev/null +++ b/packages/desktop/src/DesktopInterface.tsx @@ -0,0 +1,67 @@ +import "@/index.css" +import { Router, Route, Navigate } from "@solidjs/router" +import { MetaProvider } from "@solidjs/meta" +import { Font } from "@opencode-ai/ui/font" +import { Favicon } from "@opencode-ai/ui/favicon" +import { MarkedProvider } from "@opencode-ai/ui/context/marked" +import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" +import { Diff } from "@opencode-ai/ui/diff" +import { GlobalSyncProvider, useGlobalSync } from "./context/global-sync" +import Layout from "@/pages/layout" +import DirectoryLayout from "@/pages/directory-layout" +import Session from "@/pages/session" +import { LayoutProvider } from "./context/layout" +import { GlobalSDKProvider } from "./context/global-sdk" +import { SessionProvider } from "./context/session" +import { base64Encode } from "./utils" +import { createMemo, Show } from "solid-js" + +const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1" +const port = import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096" + +const url = + new URLSearchParams(document.location.search).get("url") || + (location.hostname.includes("opencode.ai") || location.hostname.includes("localhost") + ? `http://${host}:${port}` + : "/") + +export function DesktopInterface() { + return ( + + + + + + + + + { + const globalSync = useGlobalSync() + const slug = createMemo(() => base64Encode(globalSync.data.defaultProject!.worktree)) + return + }} + /> + + } /> + ( + + + + + + )} + /> + + + + + + + + + ) +} diff --git a/packages/desktop/src/PlatformContext.tsx b/packages/desktop/src/PlatformContext.tsx new file mode 100644 index 000000000..5b510a8d4 --- /dev/null +++ b/packages/desktop/src/PlatformContext.tsx @@ -0,0 +1,14 @@ +import { createContext } from "solid-js" +import { useContext } from "solid-js" + +export interface Platform {} + +const PlatformContext = createContext() + +export const PlatformProvider = PlatformContext.Provider + +export function usePlatform() { + const ctx = useContext(PlatformContext) + if (!ctx) throw new Error("usePlatform must be used within a PlatformProvider") + return ctx +} diff --git a/packages/desktop/src/entry.tsx b/packages/desktop/src/entry.tsx new file mode 100644 index 000000000..82c5dd331 --- /dev/null +++ b/packages/desktop/src/entry.tsx @@ -0,0 +1,22 @@ +// @refresh reload +import { render } from "solid-js/web" +import { DesktopInterface } from "@/DesktopInterface" +import { Platform, PlatformProvider } from "@/PlatformContext" + +const root = document.getElementById("root") +if (import.meta.env.DEV && !(root instanceof HTMLElement)) { + throw new Error( + "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?", + ) +} + +const platform: Platform = {} + +render( + () => ( + + + + ), + root!, +) diff --git a/packages/desktop/src/index.ts b/packages/desktop/src/index.ts new file mode 100644 index 000000000..2142e4886 --- /dev/null +++ b/packages/desktop/src/index.ts @@ -0,0 +1,2 @@ +export { PlatformProvider, type Platform } from "./PlatformContext" +export { DesktopInterface } from "./DesktopInterface" diff --git a/packages/desktop/src/index.tsx b/packages/desktop/src/index.tsx deleted file mode 100644 index 3c21b9a37..000000000 --- a/packages/desktop/src/index.tsx +++ /dev/null @@ -1,77 +0,0 @@ -/* @refresh reload */ -import "@/index.css" -import { render } from "solid-js/web" -import { Router, Route, Navigate } from "@solidjs/router" -import { MetaProvider } from "@solidjs/meta" -import { Font } from "@opencode-ai/ui/font" -import { Favicon } from "@opencode-ai/ui/favicon" -import { MarkedProvider } from "@opencode-ai/ui/context/marked" -import { DiffComponentProvider } from "@opencode-ai/ui/context/diff" -import { Diff } from "@opencode-ai/ui/diff" -import { GlobalSyncProvider, useGlobalSync } from "./context/global-sync" -import Layout from "@/pages/layout" -import DirectoryLayout from "@/pages/directory-layout" -import Session from "@/pages/session" -import { LayoutProvider } from "./context/layout" -import { GlobalSDKProvider } from "./context/global-sdk" -import { SessionProvider } from "./context/session" -import { base64Encode } from "./utils" -import { createMemo, Show } from "solid-js" - -const host = import.meta.env.VITE_OPENCODE_SERVER_HOST ?? "127.0.0.1" -const port = import.meta.env.VITE_OPENCODE_SERVER_PORT ?? "4096" - -const url = - new URLSearchParams(document.location.search).get("url") || - (location.hostname.includes("opencode.ai") || location.hostname.includes("localhost") - ? `http://${host}:${port}` - : "/") - -const root = document.getElementById("root") -if (import.meta.env.DEV && !(root instanceof HTMLElement)) { - throw new Error( - "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?", - ) -} - -render( - () => ( - - - - - - - - - { - const globalSync = useGlobalSync() - const slug = createMemo(() => base64Encode(globalSync.data.defaultProject!.worktree)) - return - }} - /> - - } /> - ( - - - - - - )} - /> - - - - - - - - - ), - root!, -) diff --git a/packages/tauri/index.html b/packages/tauri/index.html index 898aec67a..0ac3d566d 100644 --- a/packages/tauri/index.html +++ b/packages/tauri/index.html @@ -23,6 +23,6 @@
- + diff --git a/packages/tauri/src-tauri/src/lib.rs b/packages/tauri/src-tauri/src/lib.rs index bada4dee2..1809d2f8b 100644 --- a/packages/tauri/src-tauri/src/lib.rs +++ b/packages/tauri/src-tauri/src/lib.rs @@ -4,7 +4,7 @@ use std::{ sync::{Arc, Mutex}, time::{Duration, Instant}, }; -use tauri::{App, AppHandle, Manager, RunEvent, WebviewUrl, WebviewWindow}; +use tauri::{AppHandle, Manager, RunEvent, WebviewUrl, WebviewWindow}; use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogResult}; use tauri_plugin_shell::process::{CommandChild, CommandEvent}; use tauri_plugin_shell::ShellExt; diff --git a/packages/tauri/src/index.ts b/packages/tauri/src/index.ts deleted file mode 100644 index b9060d628..000000000 --- a/packages/tauri/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -import "@opencode-ai/desktop" diff --git a/packages/tauri/src/index.tsx b/packages/tauri/src/index.tsx new file mode 100644 index 000000000..9371b4826 --- /dev/null +++ b/packages/tauri/src/index.tsx @@ -0,0 +1,21 @@ +// @refresh reload +import { render } from "solid-js/web" +import { DesktopInterface, PlatformProvider, Platform } from "@opencode-ai/desktop" + +const root = document.getElementById("root") +if (import.meta.env.DEV && !(root instanceof HTMLElement)) { + throw new Error( + "Root element not found. Did you forget to add it to your index.html? Or maybe the id attribute got misspelled?", + ) +} + +const platform: Platform = {} + +render( + () => ( + + + + ), + root!, +) diff --git a/packages/tauri/tsconfig.json b/packages/tauri/tsconfig.json index 75abdef26..cf73096e5 100644 --- a/packages/tauri/tsconfig.json +++ b/packages/tauri/tsconfig.json @@ -17,7 +17,10 @@ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true + "noFallthroughCasesInSwitch": true, + + "jsx": "preserve", + "jsxImportSource": "solid-js" }, "include": ["src"] } -- cgit v1.2.3