From 1246791fe1638355602a4866037da239d507ba93 Mon Sep 17 00:00:00 2001 From: m5r Date: Wed, 12 Aug 2026 22:32:56 +0200 Subject: [PATCH] milestone 23 s3: convert features/dashboard/DiskCard.tsx to stylex --- web/src/features/dashboard/DiskCard.tsx | 102 +++++++++++++++++++----- 1 file changed, 82 insertions(+), 20 deletions(-) diff --git a/web/src/features/dashboard/DiskCard.tsx b/web/src/features/dashboard/DiskCard.tsx index 73734d7..bf251a6 100644 --- a/web/src/features/dashboard/DiskCard.tsx +++ b/web/src/features/dashboard/DiskCard.tsx @@ -1,33 +1,95 @@ +import * as stylex from "@stylexjs/stylex"; import { formatBytes } from "@/lib/format"; import type { Health } from "@/lib/types"; +import { styles as shared } from "@/ui/styles"; +import { colors } from "@/ui/tokens.stylex"; -const STATE_CLASSES: Record = { - ok: "bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-300", - warn: "bg-amber-100 text-amber-800 dark:bg-amber-950 dark:text-amber-300", - critical: "bg-red-100 text-red-800 dark:bg-red-950 dark:text-red-300", -}; +const DARK = "@media (prefers-color-scheme: dark)"; + +const styles = stylex.create({ + card: { + borderRadius: "0.25rem", + borderWidth: 1, + borderStyle: "solid", + borderColor: colors.border, + backgroundColor: colors.surfaceRaised, + paddingInline: "1rem", + paddingBlock: "0.75rem", + }, + heading: { + display: "flex", + alignItems: "center", + justifyContent: "space-between", + fontSize: "0.875rem", + lineHeight: "1.25rem", + fontWeight: 600, + }, + badge: { + borderRadius: "0.25rem", + paddingInline: "0.5rem", + paddingBlock: "0.125rem", + fontSize: "0.75rem", + lineHeight: "1rem", + fontWeight: 500, + }, + /** + * The badge fills are their own three-step scale, not the `danger`/`warn` + * banner tokens: they read as a tinted chip against a raised card, where a + * banner fill would be too heavy. + */ + ok: { + backgroundColor: { default: "oklch(95% 0.052 163.051)", [DARK]: "oklch(26.2% 0.051 172.552)" }, + color: { default: "oklch(43.2% 0.095 166.913)", [DARK]: "oklch(84.5% 0.143 164.978)" }, + }, + warn: { + backgroundColor: { default: "oklch(96.2% 0.059 95.617)", [DARK]: "oklch(27.9% 0.077 45.635)" }, + color: { default: "oklch(47.3% 0.137 46.201)", [DARK]: "oklch(87.9% 0.169 91.605)" }, + }, + critical: { + backgroundColor: { default: "oklch(93.6% 0.032 17.717)", [DARK]: "oklch(25.8% 0.092 26.042)" }, + color: { default: "oklch(44.4% 0.177 26.899)", [DARK]: "oklch(80.8% 0.114 19.571)" }, + }, + list: { + display: "flex", + flexDirection: "column", + gap: "0.5rem", + marginTop: "0.75rem", + fontSize: "0.875rem", + lineHeight: "1.25rem", + }, + row: { + display: "flex", + justifyContent: "space-between", + }, + term: { + color: colors.textMuted, + }, +}); + +function stateStyle(state: Health["disk"]["state"]) { + if (state === "critical") return styles.critical; + return state === "warn" ? styles.warn : styles.ok; +} export default function DiskCard({ disk }: { disk: Health["disk"] }) { return ( -
-

+
+

Disk - - {disk.state} - + {disk.state}

-
-
-
Free
-
{formatBytes(disk.free_bytes)}
+
+
+
Free
+
{formatBytes(disk.free_bytes)}
-
-
Database
-
{formatBytes(disk.db_bytes)}
+
+
Database
+
{formatBytes(disk.db_bytes)}
-
-
Logs
-
{formatBytes(disk.log_bytes)}
+
+
Logs
+
{formatBytes(disk.log_bytes)}