- AppTray: template menu-bar icon (22pt, adapts to light/dark). While transfers run it swaps to pre-rendered frames — faded arrows + a fill bar showing aggregate doneBytes/totalBytes of the queue (nearest 5%, throttled 500ms); back to the glyph when idle. No runtime image encoding. - Menu: one entry per tab (checkmark on the active one) with live per-tab transfer count and percentage (jobs mapped via session ids), an overall progress row while transferring, Show <app>, Quit. Selecting a tab activates the window and switches to it. - First use of webview->bun messages: PanelsService pushes workspacesSync (tab names, sessions, active id) via a new ready-gated send proxy; verified end-to-end in the running app. - engine.aggregateProgress(): totals + per-session breakdown over non-terminal jobs (unit-verified idle/mid-transfer/idle). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
34 lines
756 B
TypeScript
34 lines
756 B
TypeScript
import type { ElectrobunConfig } from "electrobun";
|
|
import { BRANDING } from "./src/shared/branding";
|
|
|
|
export default {
|
|
app: {
|
|
name: BRANDING.appName,
|
|
identifier: BRANDING.identifier,
|
|
version: BRANDING.version,
|
|
},
|
|
build: {
|
|
bun: {
|
|
entrypoint: "src/bun/index.ts",
|
|
// ssh2's optional native accelerators must never be bundled; its
|
|
// runtime try/catch falls back to pure JS when the require fails.
|
|
external: ["cpu-features", "*.node"],
|
|
},
|
|
copy: {
|
|
"ui/dist/ui/browser": "views/app",
|
|
"assets/tray": "views/assets/tray",
|
|
},
|
|
watchIgnore: ["ui/**", "dist/**"],
|
|
mac: {
|
|
bundleCEF: false,
|
|
icons: BRANDING.icon,
|
|
},
|
|
linux: {
|
|
bundleCEF: false,
|
|
},
|
|
win: {
|
|
bundleCEF: false,
|
|
},
|
|
},
|
|
} satisfies ElectrobunConfig;
|