From 943d82ce0d5c06b1a0a26e4f6d232fb3b67ebd72 Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 8 Apr 2026 13:39:17 -0500 Subject: [PATCH] chore: simpler splash window --- .../desktop-electron/electron.vite.config.ts | 1 - packages/desktop-electron/src/main/index.ts | 3 +- packages/desktop-electron/src/main/windows.ts | 226 +++++++++++++++++- .../src/renderer/html.test.ts | 2 +- .../src/renderer/loading.html | 22 -- .../desktop-electron/src/renderer/loading.tsx | 89 ------- 6 files changed, 225 insertions(+), 118 deletions(-) delete mode 100644 packages/desktop-electron/src/renderer/loading.html delete mode 100644 packages/desktop-electron/src/renderer/loading.tsx diff --git a/packages/desktop-electron/electron.vite.config.ts b/packages/desktop-electron/electron.vite.config.ts index 6903d5ed20..04bbf44310 100644 --- a/packages/desktop-electron/electron.vite.config.ts +++ b/packages/desktop-electron/electron.vite.config.ts @@ -33,7 +33,6 @@ export default defineConfig({ rollupOptions: { input: { main: "src/renderer/index.html", - loading: "src/renderer/loading.html", }, }, }, diff --git a/packages/desktop-electron/src/main/index.ts b/packages/desktop-electron/src/main/index.ts index 69be02428b..489e03c175 100644 --- a/packages/desktop-electron/src/main/index.ts +++ b/packages/desktop-electron/src/main/index.ts @@ -198,7 +198,8 @@ async function initialize() { setInitStep({ phase: "done" }) if (splash) { - await loadingComplete.promise + const ok = await Promise.race([loadingComplete.promise.then(() => true), delay(2_000).then(() => false)]) + if (!ok) logger.warn("loading window complete timed out") splash.close() splash = null } diff --git a/packages/desktop-electron/src/main/windows.ts b/packages/desktop-electron/src/main/windows.ts index 04ada79de3..c1654a1457 100644 --- a/packages/desktop-electron/src/main/windows.ts +++ b/packages/desktop-electron/src/main/windows.ts @@ -21,6 +21,10 @@ export function getBackgroundColor(): string | undefined { return backgroundColor } +function back(mode = tone()) { + return backgroundColor ?? (mode === "dark" ? "#101010" : "#f8f8f8") +} + function iconsDir() { return app.isPackaged ? join(process.resourcesPath, "icons") : join(root, "../../resources/icons") } @@ -69,7 +73,7 @@ export function createMainWindow(globals: Globals, opts: { show?: boolean } = {} show: opts.show ?? true, title: "OpenCode", icon: iconPath(), - backgroundColor, + backgroundColor: back(mode), ...(process.platform === "darwin" ? { titleBarStyle: "hidden" as const, @@ -98,27 +102,241 @@ export function createMainWindow(globals: Globals, opts: { show?: boolean } = {} } export function createLoadingWindow(globals: Globals) { + const mode = tone() const win = new BrowserWindow({ width: 640, height: 480, resizable: false, center: true, - show: true, + show: false, frame: false, icon: iconPath(), - backgroundColor, + backgroundColor: back(mode), webPreferences: { preload: join(root, "../preload/index.mjs"), sandbox: false, }, }) - loadWindow(win, "loading.html") + win.once("ready-to-show", () => { + if (!win.isDestroyed()) win.show() + }) + + loadSplash(win, mode) injectGlobals(win, globals) return win } +function loadSplash(win: BrowserWindow, mode: "dark" | "light") { + void win.loadURL(`data:text/html;charset=UTF-8,${encodeURIComponent(page(mode))}`) +} + +function page(mode: "dark" | "light") { + const dark = mode === "dark" + const bg = back(mode) + const base = dark ? "#7e7e7e" : "#8f8f8f" + const weak = dark ? "#343434" : "#dbdbdb" + const strong = dark ? "#ededed" : "#171717" + const track = dark ? "rgba(255,255,255,0.078)" : "rgba(0,0,0,0.051)" + const warn = dark ? "#fbb73c" : "#ebb76e" + const pulse = mark(base, strong) + const splash = mark(weak, strong) + + return ` + +
+ + +