feat: add semantic admin palette

This commit is contained in:
Simo committed 2026-07-12 18:47:23 +02:00
1 parent d4bcf89449
commit 4ce35e91fb
4 files changed
+97 -2

No files matched your search

+52
View File
@@ -3,6 +3,58 @@ type Rgb = readonly [number, number, number];
export type PublicThemeColors = Record<string, string>;
export interface ContrastPair { name: string; foreground: string; background: string }
export interface AdminPalette {
canvas: string;
surface: string;
surfaceElevated: string;
text: string;
muted: string;
border: string;
accent: string;
accentText: string;
accentForeground: string;
success: string;
warning: string;
error: string;
info: string;
sidebar: string;
sidebarText: string;
overlay: string;
focusRing: string;
}
export function deriveAdminPalette(colors: PublicThemeColors): AdminPalette {
const publicBackground = colors.color_background ?? "#f8fafc";
const blackRatio = contrastRatio("#000000", publicBackground) ?? 21;
const whiteRatio = contrastRatio("#ffffff", publicBackground) ?? 1;
const dark = whiteRatio > blackRatio;
const canvas = dark ? "#0b0f19" : "#f1f5f9";
const surface = dark ? "#151b27" : "#ffffff";
const surfaceElevated = dark ? "#1e2635" : "#f8fafc";
const text = dark ? "#f8fafc" : "#0f172a";
const muted = dark ? "#a8b3c7" : "#475569";
const accent = colors.color_primary ?? "#f59e0b";
return {
canvas,
surface,
surfaceElevated,
text: readableColor(text, [canvas, surface, surfaceElevated]),
muted: readableColor(muted, [canvas, surface, surfaceElevated]),
border: dark ? "#334155" : "#cbd5e1",
accent,
accentText: readableColor(accent, [canvas, surface, surfaceElevated]),
accentForeground: readableColor("#ffffff", [accent]),
success: dark ? "#4ade80" : "#15803d",
warning: dark ? "#facc15" : "#a16207",
error: dark ? "#f87171" : "#b91c1c",
info: dark ? "#38bdf8" : "#0369a1",
sidebar: dark ? "#101622" : "#172033",
sidebarText: "#f8fafc",
overlay: "rgba(2, 6, 23, 0.72)",
focusRing: accent,
};
}
export function derivePublicForegrounds(c: PublicThemeColors) {
const value = (key: string, fallback: string) => c[key] ?? fallback;
const background = value("color_background", "#f8fafc");