feat: add semantic admin palette
This commit is contained in:
1 parent
d4bcf89449
commit
4ce35e91fb
4 files changed
+97
-2
No files matched your search
@@ -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");
|
||||
|
||||
Reference in new issue
Block a user