import { app, BrowserWindow, Menu, dialog, ipcMain } from "electron"; import { readFile, writeFile } from "node:fs/promises"; import path from "node:path"; import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const titleBarThemes = { light: { color: "#eef1ed", symbolColor: "#17241d" }, dark: { color: "#132019", symbolColor: "#e9f3ec" } }; async function createWindow() { const win = new BrowserWindow({ width: 1220, height: 820, minWidth: 980, minHeight: 680, title: "EnvHelper", titleBarStyle: "hidden", titleBarOverlay: { ...titleBarThemes.light, height: 34 }, autoHideMenuBar: true, backgroundColor: "#f6f7f4", webPreferences: { preload: path.join(__dirname, "preload.js"), contextIsolation: true, nodeIntegration: false } }); Menu.setApplicationMenu(null); if (!app.isPackaged) { await win.loadURL("http://127.0.0.1:5173"); } else { await win.loadFile(path.join(__dirname, "../dist/index.html")); } } ipcMain.handle("envhelper:open-file", async () => { const result = await dialog.showOpenDialog({ properties: ["openFile"], filters: [{ name: "Environment files", extensions: ["env", "txt", "*"] }] }); if (result.canceled || result.filePaths.length === 0) { return null; } const filePath = result.filePaths[0]; return { path: filePath, content: await readFile(filePath, "utf8") }; }); ipcMain.handle("envhelper:set-titlebar-theme", (event, theme: "light" | "dark") => { BrowserWindow.fromWebContents(event.sender)?.setTitleBarOverlay({ ...titleBarThemes[theme], height: 34 }); }); ipcMain.handle("envhelper:save-file", async (_event, content: string) => { const result = await dialog.showSaveDialog({ defaultPath: ".env", filters: [{ name: "Environment file", extensions: ["env"] }] }); if (result.canceled || !result.filePath) { return null; } await writeFile(result.filePath, content, "utf8"); return result.filePath; }); app.whenReady().then(createWindow); app.on("window-all-closed", () => { if (process.platform !== "darwin") { app.quit(); } }); app.on("activate", () => { if (BrowserWindow.getAllWindows().length === 0) { void createWindow(); } });