From 763893927359ba57337db1d0c74e6f1004dc2f82 Mon Sep 17 00:00:00 2001 From: Denozordec Date: Fri, 30 Oct 2026 00:22:31 +0700 Subject: [PATCH] Point fixes: badge radius, DHCP Type header, one-line Zones dates, top list headers Badges keep the installed style's radius instead of a pill; the Leases Type column gets its visible header; Zones dates no longer wrap; the Dashboard's top lists use the standard panel header height; DHCP reads the clock with the list, not in render. Co-Authored-By: Claude Opus 5.5 --- src/screens/dashboard/Dashboard.module.css | 3 --- src/screens/dhcp/Leases.tsx | 7 +++++-- src/screens/zones/Zones.module.css | 2 +- src/ui/Tag.tsx | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/screens/dashboard/Dashboard.module.css b/src/screens/dashboard/Dashboard.module.css index 5127450..bace37b 100644 --- a/src/screens/dashboard/Dashboard.module.css +++ b/src/screens/dashboard/Dashboard.module.css @@ -129,9 +129,6 @@ carries two buttons. .panelActions { display: flex; align-items: center; gap: var(--s-3); } .top .panelActions { flex: none; } .pbAdjusted { padding: var(--s-5) var(--s-8) var(--s-7); } -/* The lists' headers are a little shorter than a panel's: their buttons set their - height. */ -.lists .top > :first-child { padding-block: var(--s-2); padding-inline: var(--s-8); } /* A top list's row: rank, the name, the count and the row menu, and under the name diff --git a/src/screens/dhcp/Leases.tsx b/src/screens/dhcp/Leases.tsx index 3e4d44c..69a3618 100644 --- a/src/screens/dhcp/Leases.tsx +++ b/src/screens/dhcp/Leases.tsx @@ -68,6 +68,8 @@ const KEYS: Keys = { export function Leases({ tabs, token, node = '', canModify = true, canDelete = true }: LeasesProps) { const [leases, setLeases] = useState(null) + /* When the list was read: what "expiring in 10 min" counts from. Read with the list, not in render. */ + const [readAt, setReadAt] = useState(0) /* Whether the last load failed. @@ -100,6 +102,7 @@ export function Leases({ tabs, token, node = '', canModify = true, canDelete = t const r = await listLeases(token, node) if (r.kind === 'ok') { setLeases(r.data) + setReadAt(Date.now()) setFailure(false) return } @@ -193,7 +196,7 @@ export function Leases({ tabs, token, node = '', canModify = true, canDelete = t { label: 'Scopes', value: new Set(leases.map((l) => l.scope)).size, icon: 'cache' }, { label: 'Expiring in 10 min', - value: leases.filter((l) => l.type !== 'Reserved' && Date.parse(l.leaseExpires) - Date.now() < 600000 && Date.parse(l.leaseExpires) > Date.now()).length, + value: leases.filter((l) => l.type !== 'Reserved' && Date.parse(l.leaseExpires) - readAt < 600000 && Date.parse(l.leaseExpires) > readAt).length, icon: 'power', }, ]} @@ -238,7 +241,7 @@ export function Leases({ tabs, token, node = '', canModify = true, canDelete = t }, { id: 'type', - ...head({ field: 'type', sort, onSort: toggle, name: 'Type' }), + ...head({ field: 'type', sort, onSort: toggle, children: 'Type' }), cell: (l) => ( {l.type} diff --git a/src/screens/zones/Zones.module.css b/src/screens/zones/Zones.module.css index 71c0516..033fd8b 100644 --- a/src/screens/zones/Zones.module.css +++ b/src/screens/zones/Zones.module.css @@ -14,7 +14,7 @@ /* The count is `ui/count.module.css`'s: see there for why. */ .count { composes: bar above from '../../ui/count.module.css'; } .countFoot { margin-top: var(--gap-group); margin-bottom: 0; } -.mono { composes: mono from '../../ui/text.module.css'; } +.mono { composes: mono from '../../ui/text.module.css'; white-space: nowrap; } /* Table */ .num2 { color:var(--faint); font-family:var(--font-mono); font-variant-numeric:tabular-nums; } diff --git a/src/ui/Tag.tsx b/src/ui/Tag.tsx index 44073bd..4ba163f 100644 --- a/src/ui/Tag.tsx +++ b/src/ui/Tag.tsx @@ -44,7 +44,7 @@ const VARIANT: Record = { export function Tag({ tone = 'neutral', children }: { tone?: TagTone; children: ReactNode }) { return ( - + {children} )