feat(ui): sweep remaining components for Deep Space consistency
Replace old design tokens and hardcoded colors across 29 files: - bg-primary/text-primary-foreground -> bg-accent/text-white - text-muted-foreground -> text-text-muted - text-destructive/bg-destructive -> text-error/bg-error - bg-muted -> bg-elevated (background usage) - Hardcoded green/red/yellow/emerald/amber/slate -> semantic tokens - Remove shadow-md/lg from cards, tooltips, topology nodes - rounded-xl -> rounded-lg on cards/panels - focus:ring-1 focus:ring-ring -> focus:border-accent on inputs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -166,7 +166,7 @@ export function RemoteWinBoxButton({ tenantId, deviceId }: RemoteWinBoxButtonPro
|
||||
<button
|
||||
onClick={handleOpen}
|
||||
disabled={createMutation.isPending}
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50"
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-accent text-white hover:bg-accent/90 disabled:opacity-50"
|
||||
>
|
||||
{createMutation.isPending ? (
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
@@ -186,11 +186,11 @@ export function RemoteWinBoxButton({ tenantId, deviceId }: RemoteWinBoxButtonPro
|
||||
</div>
|
||||
{state === 'failed' && error && (
|
||||
<div className="mt-2 flex items-center gap-2">
|
||||
<p className="text-sm text-destructive">{error}</p>
|
||||
<p className="text-sm text-error">{error}</p>
|
||||
</div>
|
||||
)}
|
||||
{state === 'terminated' && (
|
||||
<p className="mt-2 text-sm text-muted-foreground">Session ended</p>
|
||||
<p className="mt-2 text-sm text-text-muted">Session ended</p>
|
||||
)}
|
||||
</div>
|
||||
)
|
||||
@@ -206,7 +206,7 @@ export function RemoteWinBoxButton({ tenantId, deviceId }: RemoteWinBoxButtonPro
|
||||
{state === 'requesting' ? 'Requesting session...' : 'Provisioning WinBox container...'}
|
||||
</p>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">This may take a few seconds</p>
|
||||
<p className="text-xs text-text-muted">This may take a few seconds</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -234,12 +234,12 @@ export function RemoteWinBoxButton({ tenantId, deviceId }: RemoteWinBoxButtonPro
|
||||
}
|
||||
>
|
||||
{/* Header bar */}
|
||||
<div className="flex items-center justify-between px-3 py-2 border-b bg-muted/50">
|
||||
<div className="flex items-center justify-between px-3 py-2 border-b bg-elevated/50">
|
||||
<div className="flex items-center gap-2">
|
||||
<Globe className="h-4 w-4 text-primary" />
|
||||
<Globe className="h-4 w-4 text-accent" />
|
||||
<span className="text-sm font-medium">Remote WinBox</span>
|
||||
{countdown && (
|
||||
<span className="text-xs text-muted-foreground">
|
||||
<span className="text-xs text-text-muted">
|
||||
Expires in {countdown}
|
||||
</span>
|
||||
)}
|
||||
@@ -281,7 +281,7 @@ export function RemoteWinBoxButton({ tenantId, deviceId }: RemoteWinBoxButtonPro
|
||||
// Active but no iframe URL (missing xpra_ws_port) — show reset option
|
||||
return (
|
||||
<div className="rounded-md border p-4 space-y-2">
|
||||
<p className="text-sm text-destructive">Session active but display unavailable</p>
|
||||
<p className="text-sm text-error">Session active but display unavailable</p>
|
||||
<button
|
||||
onClick={handleReset}
|
||||
className="inline-flex items-center gap-2 px-3 py-1.5 rounded-md border border-input bg-background hover:bg-accent text-sm"
|
||||
|
||||
@@ -162,7 +162,7 @@ export function SSHTerminal({ tenantId, deviceId, deviceName }: SSHTerminalProps
|
||||
return (
|
||||
<button
|
||||
onClick={handleOpen}
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-primary text-primary-foreground hover:bg-primary/90"
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-accent text-white hover:bg-accent/90"
|
||||
>
|
||||
<TerminalIcon className="h-4 w-4" />
|
||||
SSH Terminal
|
||||
@@ -172,14 +172,14 @@ export function SSHTerminal({ tenantId, deviceId, deviceName }: SSHTerminalProps
|
||||
|
||||
return (
|
||||
<div className={`rounded-md border overflow-hidden ${expanded ? 'fixed inset-4 z-50 bg-background' : ''}`}>
|
||||
<div className="flex items-center justify-between px-3 py-2 bg-muted/50 border-b">
|
||||
<div className="flex items-center justify-between px-3 py-2 bg-elevated/50 border-b">
|
||||
<span className="text-sm font-medium">SSH: {deviceName}</span>
|
||||
<div className="flex gap-1">
|
||||
<button onClick={() => setExpanded(!expanded)} className="p-1 hover:bg-accent rounded">
|
||||
{expanded ? <Minimize2 className="h-4 w-4" /> : <Maximize2 className="h-4 w-4" />}
|
||||
</button>
|
||||
{state === 'disconnected' ? (
|
||||
<button onClick={handleReconnect} className="px-2 py-1 text-xs rounded bg-primary text-primary-foreground">
|
||||
<button onClick={handleReconnect} className="px-2 py-1 text-xs rounded bg-accent text-white">
|
||||
Reconnect
|
||||
</button>
|
||||
) : (
|
||||
@@ -191,7 +191,7 @@ export function SSHTerminal({ tenantId, deviceId, deviceName }: SSHTerminalProps
|
||||
</div>
|
||||
<div ref={termRef} className="h-80" tabIndex={0} style={expanded ? { height: 'calc(100% - 40px)' } : {}} />
|
||||
{state === 'connected' && (
|
||||
<div className="px-3 py-1 text-xs text-muted-foreground border-t">
|
||||
<div className="px-3 py-1 text-xs text-text-muted border-t">
|
||||
SSH session active — idle timeout: 15 min
|
||||
</div>
|
||||
)}
|
||||
|
||||
@@ -78,7 +78,7 @@ export function WinBoxButton({ tenantId, deviceId }: WinBoxButtonProps) {
|
||||
openMutation.mutate()
|
||||
}}
|
||||
disabled={openMutation.isPending}
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-primary text-primary-foreground hover:bg-primary/90 disabled:opacity-50"
|
||||
className="inline-flex items-center gap-2 px-4 py-2 rounded-md bg-accent text-white hover:bg-accent/90 disabled:opacity-50"
|
||||
>
|
||||
{openMutation.isPending ? (
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
@@ -87,7 +87,7 @@ export function WinBoxButton({ tenantId, deviceId }: WinBoxButtonProps) {
|
||||
)}
|
||||
{openMutation.isPending ? 'Connecting...' : 'Open WinBox'}
|
||||
</button>
|
||||
{error && <p className="mt-2 text-sm text-destructive">{error}</p>}
|
||||
{error && <p className="mt-2 text-sm text-error">{error}</p>}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -96,7 +96,7 @@ export function WinBoxButton({ tenantId, deviceId }: WinBoxButtonProps) {
|
||||
return (
|
||||
<div className="rounded-md border p-4 space-y-3">
|
||||
<p className="font-medium text-sm">WinBox tunnel ready</p>
|
||||
<p className="text-sm text-muted-foreground">
|
||||
<p className="text-sm text-text-muted">
|
||||
Connect to: <code className="font-mono">{tunnelInfo.host}:{tunnelInfo.port}</code>
|
||||
</p>
|
||||
<div className="flex gap-2">
|
||||
@@ -119,7 +119,7 @@ export function WinBoxButton({ tenantId, deviceId }: WinBoxButtonProps) {
|
||||
Close Tunnel
|
||||
</button>
|
||||
</div>
|
||||
<p className="text-xs text-muted-foreground">
|
||||
<p className="text-xs text-text-muted">
|
||||
Tunnel closes after 5 min of inactivity
|
||||
</p>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user