Skip to content

Commit bc0d4c5

Browse files
committed
refactor: remove custom/status bar code paths
1 parent e6ea971 commit bc0d4c5

5 files changed

Lines changed: 9 additions & 393 deletions

File tree

frontend/src/App.css

Lines changed: 1 addition & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ body.drag-select-lock * {
7474
.app-root {
7575
height: 100vh;
7676
display: grid;
77-
grid-template-rows: auto auto minmax(0, 1fr);
77+
grid-template-rows: auto minmax(0, 1fr);
7878
overflow: hidden;
7979
user-select: none;
8080
-webkit-user-select: none;
@@ -88,78 +88,6 @@ body.drag-select-lock * {
8888
gap: 1rem;
8989
}
9090

91-
.window-bar {
92-
height: 2.2rem;
93-
width: 100%;
94-
margin: 0;
95-
border: 0;
96-
background: var(--surface);
97-
display: flex;
98-
align-items: center;
99-
justify-content: space-between;
100-
padding: 0 0.4rem 0 0.7rem;
101-
user-select: none;
102-
cursor: grab;
103-
-webkit-app-region: drag;
104-
--webui-app-region: drag;
105-
app-region: drag;
106-
}
107-
108-
.window-title {
109-
margin: 0;
110-
font-size: 0.72rem;
111-
letter-spacing: 0.08em;
112-
text-transform: uppercase;
113-
color: var(--text-soft);
114-
}
115-
116-
.window-drag-area {
117-
flex: 1;
118-
min-width: 1rem;
119-
height: 100%;
120-
-webkit-app-region: drag;
121-
--webui-app-region: drag;
122-
app-region: drag;
123-
}
124-
125-
.window-controls {
126-
display: flex;
127-
gap: 0.3rem;
128-
cursor: default;
129-
-webkit-app-region: no-drag;
130-
--webui-app-region: no-drag;
131-
app-region: no-drag;
132-
}
133-
134-
.window-btn {
135-
width: 1.7rem;
136-
height: 1.45rem;
137-
padding: 0;
138-
display: inline-flex;
139-
align-items: center;
140-
justify-content: center;
141-
}
142-
143-
.window-btn svg {
144-
width: 0.92rem;
145-
height: 0.92rem;
146-
stroke: currentColor;
147-
stroke-width: 1.9;
148-
fill: none;
149-
stroke-linecap: round;
150-
stroke-linejoin: round;
151-
}
152-
153-
.window-btn-close {
154-
color: var(--danger);
155-
border-color: var(--danger);
156-
}
157-
158-
.window-btn-close:hover:enabled {
159-
background: var(--danger);
160-
color: #ffffff;
161-
}
162-
16391
.topbar {
16492
width: 100%;
16593
border: 0;
@@ -177,15 +105,6 @@ body.drag-select-lock * {
177105
min-width: 0;
178106
}
179107

180-
button,
181-
input,
182-
a,
183-
[role="button"] {
184-
-webkit-app-region: no-drag;
185-
--webui-app-region: no-drag;
186-
app-region: no-drag;
187-
}
188-
189108
.topbar h1 {
190109
margin: 0;
191110
font-size: clamp(1.15rem, 2.2vw, 1.55rem);

frontend/src/App.tsx

Lines changed: 1 addition & 207 deletions
Original file line numberDiff line numberDiff line change
@@ -34,98 +34,6 @@ const AUTO_ARCHIVE_ZERO_QUOTA = true;
3434
const AUTO_UNARCHIVE_NON_ZERO_QUOTA = true;
3535
const AUTO_SWITCH_AWAY_FROM_DEPLETED_OR_FROZEN = true;
3636

37-
type BridgeResult<T> = {
38-
ok: boolean;
39-
value?: T;
40-
error?: string;
41-
};
42-
43-
const isDesktopBridgeRuntime = (): boolean => {
44-
if (typeof window === "undefined") {
45-
return false;
46-
}
47-
48-
return typeof window.cm_window_close === "function" || typeof window.webui?.call === "function";
49-
};
50-
51-
const runWindowAction = async <T,>(
52-
actionNames: string[],
53-
action: ((...args: never[]) => Promise<T> | T) | undefined,
54-
...args: unknown[]
55-
): Promise<T | null> => {
56-
const parseBridgeResult = (raw: unknown): T | null => {
57-
if (typeof raw === "string") {
58-
const trimmed = raw.trim();
59-
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
60-
let parsedJson: unknown;
61-
try {
62-
parsedJson = JSON.parse(raw);
63-
} catch {
64-
return raw as T;
65-
}
66-
67-
if (parsedJson && typeof parsedJson === "object" && "ok" in (parsedJson as Record<string, unknown>)) {
68-
const parsed = parsedJson as BridgeResult<T>;
69-
if (!parsed.ok) {
70-
throw new Error(parsed.error || "Backend bridge call failed.");
71-
}
72-
return (parsed.value ?? null) as T | null;
73-
}
74-
}
75-
return raw as T;
76-
}
77-
78-
if (raw && typeof raw === "object" && "ok" in (raw as Record<string, unknown>)) {
79-
const parsed = raw as BridgeResult<T>;
80-
if (!parsed.ok) {
81-
throw new Error(parsed.error || "Backend bridge call failed.");
82-
}
83-
return (parsed.value ?? null) as T | null;
84-
}
85-
86-
return (raw ?? null) as T | null;
87-
};
88-
89-
let lastError: string | null = null;
90-
if (typeof action === "function") {
91-
try {
92-
const directRaw = await action(...(args as never[]));
93-
// For side-effect commands (close/minimize/toggle), many WebUI bindings return
94-
// `undefined` even when they succeed. Treat that as success and do not re-issue
95-
// the same action through fallback RPC (which causes lag/double-toggle).
96-
if (directRaw === undefined) {
97-
return null;
98-
}
99-
return parseBridgeResult(directRaw);
100-
} catch (error) {
101-
lastError = error instanceof Error ? error.message : String(error);
102-
}
103-
}
104-
105-
if (!isDesktopBridgeRuntime()) {
106-
throw new Error(lastError || "Desktop window bridge is unavailable.");
107-
}
108-
109-
const webuiCall = window.webui?.call;
110-
if (typeof webuiCall !== "function") {
111-
throw new Error(lastError || "WebUI call bridge is unavailable.");
112-
}
113-
114-
for (const name of actionNames) {
115-
try {
116-
const raw = await webuiCall(name, ...args);
117-
return parseBridgeResult(raw);
118-
} catch (error) {
119-
lastError = error instanceof Error ? error.message : String(error);
120-
}
121-
}
122-
123-
throw new Error(lastError || `Window action failed: ${actionNames.join(", ")}`);
124-
};
125-
126-
const windowFullscreenGetter = () => window.cm_window_is_fullscreen;
127-
const windowFullscreenToggler = () => window.cm_window_toggle_fullscreen;
128-
12937
const nowEpoch = (): number => Math.floor(Date.now() / 1000);
13038

13139
const formatEpoch = (epoch: number | null | undefined): string => {
@@ -346,28 +254,8 @@ const IconClose = () => (
346254
</svg>
347255
);
348256

349-
const IconMinimize = () => (
350-
<svg viewBox="0 0 24 24" aria-hidden="true">
351-
<path d="M5 12h14" />
352-
</svg>
353-
);
354-
355-
const IconMaximize = () => (
356-
<svg viewBox="0 0 24 24" aria-hidden="true">
357-
<rect x="5" y="5" width="14" height="14" />
358-
</svg>
359-
);
360-
361-
const IconRestore = () => (
362-
<svg viewBox="0 0 24 24" aria-hidden="true">
363-
<path d="M8 8h11v11H8z" />
364-
<path d="M5 5h11v3" />
365-
</svg>
366-
);
367-
368257
function App() {
369258
const embeddedState = getEmbeddedBootstrapState();
370-
const showDesktopTopBar = embeddedState?.showWindowBar ?? false;
371259
const hasEmbeddedState =
372260
Boolean(embeddedState?.view) || Boolean(embeddedState && Object.keys(embeddedState.usageById).length > 0);
373261

@@ -376,7 +264,6 @@ function App() {
376264
const [browserStart, setBrowserStart] = createSignal<BrowserLoginStart | null>(null);
377265
const [apiKeyDraft, setApiKeyDraft] = createSignal("");
378266
const [theme, setTheme] = createSignal<Theme>(embeddedState?.theme === "dark" ? "dark" : "light");
379-
const [fullscreen, setFullscreen] = createSignal(false);
380267
const [addMenuOpen, setAddMenuOpen] = createSignal(false);
381268
const [isListeningForCallback, setIsListeningForCallback] = createSignal(false);
382269
const [showDepleted, setShowDepleted] = createSignal(false);
@@ -490,7 +377,6 @@ function App() {
490377

491378
void saveEmbeddedBootstrapState({
492379
theme: theme(),
493-
showWindowBar: showDesktopTopBar,
494380
autoArchiveZeroQuota: AUTO_ARCHIVE_ZERO_QUOTA,
495381
autoUnarchiveNonZeroQuota: AUTO_UNARCHIVE_NON_ZERO_QUOTA,
496382
autoSwitchAwayFromArchived: AUTO_SWITCH_AWAY_FROM_DEPLETED_OR_FROZEN,
@@ -1311,61 +1197,6 @@ function App() {
13111197
setNotice("Account removed.");
13121198
};
13131199

1314-
const refreshWindowState = async () => {
1315-
try {
1316-
const status = await runWindowAction<boolean>(
1317-
["cm_window_is_fullscreen"],
1318-
windowFullscreenGetter(),
1319-
);
1320-
setFullscreen(Boolean(status));
1321-
} catch {
1322-
setFullscreen(false);
1323-
}
1324-
};
1325-
1326-
const handleMinimize = async () => {
1327-
try {
1328-
await runWindowAction(["cm_window_minimize"], window.cm_window_minimize);
1329-
} catch (error) {
1330-
const message = error instanceof Error ? error.message : String(error);
1331-
setError(`Minimize failed: ${message}`);
1332-
}
1333-
};
1334-
1335-
const handleToggleFullscreen = async () => {
1336-
try {
1337-
await runWindowAction<boolean>(
1338-
["cm_window_toggle_fullscreen"],
1339-
windowFullscreenToggler(),
1340-
);
1341-
const status = await runWindowAction<boolean>(
1342-
["cm_window_is_fullscreen"],
1343-
windowFullscreenGetter(),
1344-
);
1345-
setFullscreen(Boolean(status));
1346-
} catch (error) {
1347-
const message = error instanceof Error ? error.message : String(error);
1348-
setError(`Fullscreen toggle failed: ${message}`);
1349-
}
1350-
};
1351-
1352-
const handleCloseWindow = async () => {
1353-
try {
1354-
await runWindowAction(["cm_window_close"], window.cm_window_close);
1355-
} catch (error) {
1356-
const message = error instanceof Error ? error.message : String(error);
1357-
setError(`Close failed: ${message}`);
1358-
}
1359-
};
1360-
1361-
const handleTitleBarDoubleClick = async (event: MouseEvent) => {
1362-
const target = event.target as HTMLElement | null;
1363-
if (target?.closest(".window-controls")) {
1364-
return;
1365-
}
1366-
await handleToggleFullscreen();
1367-
};
1368-
13691200
const toggleTheme = () => {
13701201
const nextTheme: Theme = theme() === "light" ? "dark" : "light";
13711202
setTheme(nextTheme);
@@ -1418,51 +1249,14 @@ function App() {
14181249
});
14191250

14201251
try {
1421-
await Promise.all([refreshWindowState(), refreshAccounts(true)]);
1252+
await refreshAccounts(true);
14221253
} finally {
14231254
setInitializing(false);
14241255
}
14251256
});
14261257

14271258
return (
14281259
<div class="app-root">
1429-
<Show when={showDesktopTopBar}>
1430-
<header class="window-bar reveal" onDblClick={(event) => void handleTitleBarDoubleClick(event)}>
1431-
<div class="window-title mono">
1432-
Codex Account Manager
1433-
</div>
1434-
<div class="window-drag-area" />
1435-
<div class="window-controls">
1436-
<button
1437-
class="window-btn"
1438-
type="button"
1439-
onClick={handleMinimize}
1440-
aria-label="Minimize"
1441-
>
1442-
<IconMinimize />
1443-
</button>
1444-
<button
1445-
class="window-btn"
1446-
type="button"
1447-
onClick={handleToggleFullscreen}
1448-
aria-label="Toggle fullscreen"
1449-
>
1450-
<Show when={fullscreen()} fallback={<IconMaximize />}>
1451-
<IconRestore />
1452-
</Show>
1453-
</button>
1454-
<button
1455-
class="window-btn window-btn-close"
1456-
type="button"
1457-
onClick={handleCloseWindow}
1458-
aria-label="Close"
1459-
>
1460-
<IconClose />
1461-
</button>
1462-
</div>
1463-
</header>
1464-
</Show>
1465-
14661260
<header class="topbar reveal">
14671261
<div class="topbar-main">
14681262
<h1>Managed Accounts</h1>

frontend/src/lib/codexAuth.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,6 @@ type Paths = {
8989

9090
export type EmbeddedBootstrapState = {
9191
theme: "light" | "dark" | null;
92-
showWindowBar: boolean;
9392
autoArchiveZeroQuota: boolean;
9493
autoUnarchiveNonZeroQuota: boolean;
9594
autoSwitchAwayFromArchived: boolean;
@@ -902,7 +901,6 @@ const asBootstrapState = (value: unknown): EmbeddedBootstrapState | null => {
902901

903902
return {
904903
theme,
905-
showWindowBar: valueAsBoolean(parsed.showWindowBar) ?? false,
906904
autoArchiveZeroQuota: valueAsBoolean(parsed.autoArchiveZeroQuota) ?? legacyAutoArchiveEnabled,
907905
autoUnarchiveNonZeroQuota: valueAsBoolean(parsed.autoUnarchiveNonZeroQuota) ?? false,
908906
autoSwitchAwayFromArchived: valueAsBoolean(parsed.autoSwitchAwayFromArchived) ?? true,

frontend/src/vite-env.d.ts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,4 @@
33
interface Window {
44
__CM_BOOTSTRAP_STATE__?: string;
55
cm_rpc?: (requestJson: string) => Promise<string> | string;
6-
cm_window_minimize?: () => Promise<void> | void;
7-
cm_window_toggle_fullscreen?: () => Promise<boolean> | boolean;
8-
cm_window_is_fullscreen?: () => Promise<boolean> | boolean;
9-
cm_window_close?: () => Promise<void> | void;
10-
webui?: {
11-
call?: (fn: string, ...args: unknown[]) => Promise<string> | string;
12-
};
136
}

0 commit comments

Comments
 (0)