Fix workbench dark theme and enlarge dialogs

This commit is contained in:
Miayui
2026-09-18 09:11:59 +08:00
parent c812a1a595
commit e920a92505
18 changed files with 328 additions and 49 deletions
@@ -0,0 +1,65 @@
(() => {
"use strict";
const STORAGE_KEY = "cognitive-agent.glass-theme";
function normalizeTheme(value) {
return value === "light" ? "light" : value === "dark" ? "dark" : "";
}
function themeFromCookie() {
try {
return normalizeTheme(document.cookie
.split(";")
.map((part) => part.trim())
.find((part) => part.startsWith(`${STORAGE_KEY}=`))
?.slice(STORAGE_KEY.length + 1));
} catch (_error) {
return "";
}
}
function resolveInitialTheme() {
const requested = normalizeTheme(new URLSearchParams(window.location.search).get("theme"));
if (requested) return requested;
try {
const parentTheme = normalizeTheme(window.parent?.document?.documentElement?.dataset?.glassTheme);
if (parentTheme) return parentTheme;
} catch (_error) {
// Standalone and cross-origin rendering continue with local preferences.
}
try {
const stored = normalizeTheme(localStorage.getItem(STORAGE_KEY));
if (stored) return stored;
} catch (_error) {
// Storage may be unavailable in hardened browser contexts.
}
return themeFromCookie() || "dark";
}
function applyTheme(theme) {
const normalized = normalizeTheme(theme) || "dark";
document.documentElement.dataset.glassTheme = normalized;
document.documentElement.style.colorScheme = normalized;
document.querySelector("#firmwareWorkbenchThemeColor")
?.setAttribute("content", normalized === "dark" ? "#0f1526" : "#f3f6fb");
return normalized;
}
applyTheme(resolveInitialTheme());
window.addEventListener("storage", (event) => {
if (event.key === STORAGE_KEY) applyTheme(event.newValue);
});
window.addEventListener("message", (event) => {
if (event.origin !== window.location.origin) return;
if (window.parent !== window && event.source !== window.parent) return;
if (event.data?.type !== "cognitive-agent:theme-change") return;
applyTheme(event.data.theme);
});
window.CognitiveAgentFirmwareWorkbenchTheme = Object.freeze({
apply: applyTheme,
current: () => document.documentElement.dataset.glassTheme,
});
})();