Pipeline/frontend/src/components/dashboard/tokens.ts

91 lines
4.3 KiB
TypeScript

/** Central tone → className map. Use this instead of ternary chains throughout dashboard components. */
export type Tone = "default" | "success" | "warning" | "danger";
export type BadgeTone = "online" | "offline" | "neutral";
export type MetricToneKey = "accent" | "success" | "warning" | "danger";
export type SectionToneKey = "neutral" | MetricToneKey;
/** Inline text color for a data value. */
export const toneText: Record<Tone, string> = {
default: "text-strong",
success: "text-[color:var(--success)]",
warning: "text-[color:var(--warning)]",
danger: "text-[color:var(--danger)]",
};
/** Soft background + text for banners and empty-state callouts. */
export const toneBanner: Record<Tone, string> = {
default:
"border-[color:var(--border)] bg-[color:var(--surface-muted)] text-muted",
success:
"border-[color:rgba(52,211,153,0.35)] bg-[color:rgba(52,211,153,0.08)] text-[color:var(--success)]",
warning:
"border-[color:rgba(251,191,36,0.35)] bg-[color:rgba(251,191,36,0.08)] text-[color:var(--warning)]",
danger:
"border-[color:rgba(248,113,113,0.35)] bg-[color:rgba(248,113,113,0.08)] text-[color:var(--danger)]",
};
/** Small pill / badge background + text. */
export const toneBadge: Record<BadgeTone, string> = {
online: "bg-[color:rgba(52,211,153,0.15)] text-[color:var(--success)]",
offline: "bg-[color:rgba(248,113,113,0.12)] text-[color:var(--danger)]",
neutral: "bg-[color:var(--surface-strong)] text-muted",
};
/** Icon container background + icon color for metric cards. */
export const toneIcon: Record<MetricToneKey, string> = {
accent:
"border border-[color:rgba(96,165,250,0.3)] bg-[color:var(--accent-soft)] text-[color:var(--accent-strong)]",
success:
"border border-[color:rgba(52,211,153,0.3)] bg-[color:rgba(52,211,153,0.15)] text-[color:var(--success)]",
warning:
"border border-[color:rgba(251,191,36,0.32)] bg-[color:rgba(251,191,36,0.15)] text-[color:var(--warning)]",
danger:
"border border-[color:rgba(248,113,113,0.3)] bg-[color:rgba(248,113,113,0.12)] text-[color:var(--danger)]",
};
/** Card-level background + border tint for metric cards. */
export const toneCard: Record<MetricToneKey, string> = {
accent:
"border border-[color:rgba(96,165,250,0.3)] bg-[linear-gradient(145deg,rgba(96,165,250,0.16),var(--surface)_44%)]",
success:
"border border-[color:rgba(52,211,153,0.3)] bg-[linear-gradient(145deg,rgba(52,211,153,0.14),var(--surface)_44%)]",
warning:
"border border-[color:rgba(251,191,36,0.3)] bg-[linear-gradient(145deg,rgba(251,191,36,0.13),var(--surface)_44%)]",
danger:
"border border-[color:rgba(248,113,113,0.3)] bg-[linear-gradient(145deg,rgba(248,113,113,0.13),var(--surface)_44%)]",
};
export const toneGlow: Record<MetricToneKey, string> = {
accent: "bg-[color:rgba(96,165,250,0.34)]",
success: "bg-[color:rgba(52,211,153,0.28)]",
warning: "bg-[color:rgba(251,191,36,0.3)]",
danger: "bg-[color:rgba(248,113,113,0.28)]",
};
export const sectionTone: Record<SectionToneKey, string> = {
neutral:
"border-[color:var(--border)] bg-[linear-gradient(180deg,rgba(255,255,255,0.035),rgba(255,255,255,0)_72%),var(--surface)]",
accent:
"border-[color:rgba(96,165,250,0.22)] bg-[linear-gradient(180deg,rgba(96,165,250,0.08),rgba(255,255,255,0)_72%),var(--surface)]",
success:
"border-[color:rgba(52,211,153,0.22)] bg-[linear-gradient(180deg,rgba(52,211,153,0.075),rgba(255,255,255,0)_72%),var(--surface)]",
warning:
"border-[color:rgba(251,191,36,0.24)] bg-[linear-gradient(180deg,rgba(251,191,36,0.075),rgba(255,255,255,0)_72%),var(--surface)]",
danger:
"border-[color:rgba(248,113,113,0.24)] bg-[linear-gradient(180deg,rgba(248,113,113,0.075),rgba(255,255,255,0)_72%),var(--surface)]",
};
export const sectionRail: Record<SectionToneKey, string> = {
neutral:
"bg-[linear-gradient(90deg,rgba(96,165,250,0),rgba(96,165,250,0.28),rgba(52,211,153,0.2),rgba(96,165,250,0))]",
accent:
"bg-[linear-gradient(90deg,rgba(96,165,250,0),rgba(96,165,250,0.82),rgba(96,165,250,0))]",
success:
"bg-[linear-gradient(90deg,rgba(52,211,153,0),rgba(52,211,153,0.78),rgba(52,211,153,0))]",
warning:
"bg-[linear-gradient(90deg,rgba(251,191,36,0),rgba(251,191,36,0.82),rgba(251,191,36,0))]",
danger:
"bg-[linear-gradient(90deg,rgba(248,113,113,0),rgba(248,113,113,0.78),rgba(248,113,113,0))]",
};