mirror of
https://github.com/BetterSEQTA/BetterSEQTA-Plus.git
synced 2026-06-14 07:34:40 +00:00
75 lines
1.9 KiB
TypeScript
75 lines
1.9 KiB
TypeScript
import { settingsState } from "@/seqta/utils/listeners/SettingsState";
|
|
|
|
const THEME_CSS_VARS = [
|
|
"--better-main",
|
|
"--better-pale",
|
|
"--better-light",
|
|
"--text-color",
|
|
"--background-primary",
|
|
"--background-secondary",
|
|
"--text-primary",
|
|
"--theme-offset-bg",
|
|
"--better-sub",
|
|
] as const;
|
|
|
|
const ACCENT_CSS_VARS = [
|
|
"--better-main",
|
|
"--accent-color-value",
|
|
"--accentColor",
|
|
"--colour-betterseqta-blue",
|
|
] as const;
|
|
|
|
function extractSolidColor(value: string): string | null {
|
|
const trimmed = value.trim();
|
|
if (!trimmed || trimmed === "initial") return null;
|
|
if (
|
|
trimmed.startsWith("#") ||
|
|
trimmed.startsWith("rgb") ||
|
|
trimmed.startsWith("hsl")
|
|
) {
|
|
return trimmed;
|
|
}
|
|
if (trimmed.includes("gradient")) {
|
|
const match = trimmed.match(
|
|
/#[0-9A-Fa-f]{6}|#[0-9A-Fa-f]{3}|rgba?\([^)]+\)/i,
|
|
);
|
|
return match?.[0] ?? null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function resolvePageAccentColor(): string {
|
|
const computed = getComputedStyle(document.documentElement);
|
|
for (const name of ACCENT_CSS_VARS) {
|
|
const solid = extractSolidColor(computed.getPropertyValue(name));
|
|
if (solid) return solid;
|
|
}
|
|
const fromSettings = settingsState.selectedColor?.trim();
|
|
if (fromSettings) {
|
|
const solid = extractSolidColor(fromSettings);
|
|
if (solid) return solid;
|
|
}
|
|
return "#007bff";
|
|
}
|
|
|
|
/** Copy SEQTA page theme tokens onto a portaled UI root (matches analytics sync). */
|
|
export function syncPageThemeToElement(target: HTMLElement): void {
|
|
const computed = getComputedStyle(document.documentElement);
|
|
|
|
for (const name of THEME_CSS_VARS) {
|
|
const value = computed.getPropertyValue(name).trim();
|
|
if (value) {
|
|
target.style.setProperty(name, value);
|
|
}
|
|
}
|
|
|
|
const accent = resolvePageAccentColor();
|
|
target.style.setProperty("--bsplus-analytics-accent", accent);
|
|
target.style.setProperty("--better-main", accent);
|
|
|
|
target.classList.toggle(
|
|
"dark",
|
|
document.documentElement.classList.contains("dark"),
|
|
);
|
|
}
|