-
-
- {row.key}
- [{row.type}]
- {!isDefault && (
- edited
- )}
-
- {row.description && (
-
{row.description}
- )}
-
-
-
- {row.type === 'bool' ? (
- onCommit(e.target.checked)}
- className="w-5 h-5 accent-cyan-500"
- />
- ) : row.type === 'json' ? (
-
+ return (
+
+
+
+ {row.key}
+ [{row.type}]
+ {!isDefault && (
+ edited
+ )}
- )
+ {row.description && (
+
{row.description}
+ )}
+
+
+
+ {row.type === 'bool' ? (
+ onCommit(e.target.checked)}
+ className="w-5 h-5 accent-[#f59e0b]"
+ />
+ ) : row.type === 'json' ? (
+
+
+ )
}
@@ -360,15 +360,15 @@ function KeyRow({ row, status, error, onCommit, onReset }: KeyRowProps) {
function SaveBadge({ status, error, dirty }: { status: SaveStatus; error?: string; dirty?: boolean }) {
- if (status === 'saving') return
- if (status === 'saved') return
- if (status === 'error') return (
-
-
-
- )
- if (dirty) return
- return
+ if (status === 'saving') return
+ if (status === 'saved') return
+ if (status === 'error') return (
+
+
+
+ )
+ if (dirty) return
+ return
}
@@ -376,41 +376,41 @@ function SaveBadge({ status, error, dirty }: { status: SaveStatus; error?: strin
function stringifyForInput(row: ConfigRow): string {
- if (row.type === 'bool') return String(row.value === true)
- if (row.type === 'json') return JSON.stringify(row.value, null, 2)
- if (row.value === null || row.value === undefined) return ''
- return String(row.value)
+ if (row.type === 'bool') return String(row.value === true)
+ if (row.type === 'json') return JSON.stringify(row.value, null, 2)
+ if (row.value === null || row.value === undefined) return ''
+ return String(row.value)
}
function parseFromInput(s: string, type: ConfigRow['type']):
- | { error: string; value: null; changed: () => boolean }
- | { error: null; value: unknown; changed: (prev: unknown) => boolean }
+ | { error: string; value: null; changed: () => boolean }
+ | { error: null; value: unknown; changed: (prev: unknown) => boolean }
{
- if (type === 'int') {
- const n = Number(s)
- if (!Number.isFinite(n) || !Number.isInteger(n)) {
- return { error: 'expected integer', value: null, changed: () => false }
- }
- return { error: null, value: n, changed: (prev) => prev !== n }
+ if (type === 'int') {
+ const n = Number(s)
+ if (!Number.isFinite(n) || !Number.isInteger(n)) {
+ return { error: 'expected integer', value: null, changed: () => false }
}
- if (type === 'float') {
- const n = Number(s)
- if (!Number.isFinite(n)) {
- return { error: 'expected number', value: null, changed: () => false }
- }
- return { error: null, value: n, changed: (prev) => prev !== n }
+ return { error: null, value: n, changed: (prev) => prev !== n }
+ }
+ if (type === 'float') {
+ const n = Number(s)
+ if (!Number.isFinite(n)) {
+ return { error: 'expected number', value: null, changed: () => false }
}
- if (type === 'str') {
- return { error: null, value: s, changed: (prev) => prev !== s }
+ return { error: null, value: n, changed: (prev) => prev !== n }
+ }
+ if (type === 'str') {
+ return { error: null, value: s, changed: (prev) => prev !== s }
+ }
+ if (type === 'json') {
+ try {
+ const v = JSON.parse(s)
+ return { error: null, value: v, changed: (prev) => JSON.stringify(prev) !== JSON.stringify(v) }
+ } catch {
+ return { error: 'invalid JSON', value: null, changed: () => false }
}
- if (type === 'json') {
- try {
- const v = JSON.parse(s)
- return { error: null, value: v, changed: (prev) => JSON.stringify(prev) !== JSON.stringify(v) }
- } catch {
- return { error: 'invalid JSON', value: null, changed: () => false }
- }
- }
- // bool branch handled inline -- never reaches parseFromInput.
- return { error: null, value: s, changed: () => true }
+ }
+ // bool branch handled inline -- never reaches parseFromInput.
+ return { error: null, value: s, changed: () => true }
}
diff --git a/dashboard-frontend/src/pages/Alerts.tsx b/dashboard-frontend/src/pages/Alerts.tsx
index dd4ec28..9f92dd2 100644
--- a/dashboard-frontend/src/pages/Alerts.tsx
+++ b/dashboard-frontend/src/pages/Alerts.tsx
@@ -76,10 +76,10 @@ function getSeverityStyles(severity: string) {
case 'routine':
default:
return {
- bg: 'bg-blue-500/10',
- border: 'border-blue-500',
- badge: 'bg-blue-500/20 text-blue-400',
- iconColor: 'text-blue-500',
+ bg: 'bg-sky-400/10',
+ border: 'border-sky-400',
+ badge: 'bg-sky-400/20 text-sky-400',
+ iconColor: 'text-sky-400',
}
}
}
@@ -129,7 +129,7 @@ function ActiveAlertCard({
const Icon = getAlertIcon(alert.type)
return (
-
+
@@ -197,7 +197,7 @@ function AlertHistoryTable({
const severities = ["all", "immediate", "priority", "routine"]
return (
-
+
{/* Filters */}
@@ -207,7 +207,7 @@ function AlertHistoryTable({