- DeviceNode: flat bg-card (no surface gradient), darker icon plate inset, correct text-muted token for category label - GroupNode: label pill gets bg-card/90 background so it reads against canvas - ConnectionEdge: label now has border + bg-card so it doesn't float invisible - BaseHandle: tightened to 12px with accent-toned border - NodeStatusIndicator: glow reduced to 0.15 opacity (design system compliant) - ContextMenu: Ungroup now uses Ungroup icon instead of BoxSelect - DeviceToolbar: group type icons coloured with semantic palette - PropertiesPanel: empty state gets icon tile + cleaner copy hierarchy - DiagramEditor: shortcut ? button repositioned above MiniMap, accent hover - NetworkDiagrams list: card thumbnail placeholder uses dot-grid pattern, card menu gets icons and divider before destructive action Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
import type { ReactNode } from 'react'
|
|
import { cn } from '@/lib/utils'
|
|
|
|
export type NodeStatus = 'online' | 'offline' | 'degraded' | 'unknown'
|
|
|
|
const STATUS_BORDER_COLORS: Record<NodeStatus, string> = {
|
|
online: 'border-emerald-400',
|
|
offline: 'border-red-400',
|
|
degraded: 'border-yellow-400',
|
|
unknown: '',
|
|
}
|
|
|
|
const STATUS_GLOW: Record<NodeStatus, string> = {
|
|
online: 'shadow-[0_0_6px_rgba(52,211,153,0.15)]',
|
|
offline: 'shadow-[0_0_6px_rgba(248,113,113,0.15)]',
|
|
degraded: 'shadow-[0_0_6px_rgba(250,204,21,0.15)]',
|
|
unknown: '',
|
|
}
|
|
|
|
interface NodeStatusIndicatorProps {
|
|
status?: NodeStatus
|
|
children: ReactNode
|
|
className?: string
|
|
}
|
|
|
|
export function NodeStatusIndicator({ status = 'unknown', children, className }: NodeStatusIndicatorProps) {
|
|
if (status === 'unknown') {
|
|
return <>{children}</>
|
|
}
|
|
|
|
return (
|
|
<div
|
|
className={cn(
|
|
'w-full h-full rounded-lg border-2 transition-colors',
|
|
STATUS_BORDER_COLORS[status],
|
|
STATUS_GLOW[status],
|
|
className,
|
|
)}
|
|
>
|
|
{children}
|
|
</div>
|
|
)
|
|
}
|