Spaces:
Paused
Paused
| import { | |
| Shield, Lock, Key, Eye, AlertTriangle, AlertCircle, CheckCircle, Skull, Ghost, Siren, | |
| Radio, Unplug, PlugZap, Crosshair, Binary, Braces, FileCode, Webhook, BrainCircuit, | |
| Radar, Biohazard, ShieldAlert, ShieldCheck, ShieldOff, ShieldQuestion, KeyRound, | |
| LockKeyhole, ScanLine, ScanFace, UserX, UserCheck, Network, Router, Laptop, Smartphone, | |
| FileWarning, FileLock, FileSearch, FolderLock, BadgeCheck, BadgeAlert, Award, Globe, | |
| Database, Download, Terminal, FileText, Fingerprint, Bug, Mail, Target, ArrowUp, ArrowDown, | |
| Minus, Box | |
| } from 'lucide-react'; | |
| const rand = (min: number, max: number) => Math.floor(Math.random() * (max - min + 1)) + min; | |
| export const MiniThreatLevel = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-2"> | |
| <div className="relative w-14 h-7 overflow-hidden"> | |
| <div className="absolute inset-0 border-4 border-b-0 rounded-t-full bg-gradient-to-r from-green-500 via-yellow-500 to-red-500 opacity-30" /> | |
| <div className="absolute bottom-0 left-1/2 w-1 h-6 bg-foreground origin-bottom -translate-x-1/2 rotate-[-30deg]" /> | |
| </div> | |
| <span className="text-[8px] text-green-400 font-mono">LOW THREAT</span> | |
| </div> | |
| ); | |
| export const MiniFirewall = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[8px]"> | |
| <Shield className="w-4 h-4 text-green-400" /> | |
| <span className="text-green-400">ACTIVE</span> | |
| </div> | |
| <div className="flex justify-between text-[7px] text-muted-foreground"> | |
| <span>Blocked:</span><span className="text-red-400">1,247</span> | |
| </div> | |
| <div className="flex justify-between text-[7px] text-muted-foreground"> | |
| <span>Allowed:</span><span className="text-green-400">45,892</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniAccessLog = () => ( | |
| <div className="h-full flex flex-col gap-0.5 text-[6px] font-mono"> | |
| {[ | |
| { ip: '192.168.1.1', action: 'LOGIN', status: 'ok' }, | |
| { ip: '10.0.0.45', action: 'API_CALL', status: 'ok' }, | |
| { ip: '203.0.113.5', action: 'LOGIN', status: 'fail' }, | |
| { ip: '198.51.100.2', action: 'ACCESS', status: 'ok' }, | |
| ].map((l, i) => ( | |
| <div key={i} className="flex items-center gap-1"> | |
| <span className="text-muted-foreground w-16 truncate">{l.ip}</span> | |
| <span className="flex-1">{l.action}</span> | |
| <span className={l.status === 'ok' ? 'text-green-400' : 'text-red-400'}>●</span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniVulnerabilities = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Bug className="w-3 h-3 text-yellow-400" /> | |
| <span className="text-[8px] text-muted-foreground">CVE Scan</span> | |
| </div> | |
| <div className="grid grid-cols-3 gap-1 text-center"> | |
| <div className="bg-red-500/20 rounded p-1"><span className="text-[10px] text-red-400 font-bold">2</span><span className="text-[6px] block text-muted-foreground">Critical</span></div> | |
| <div className="bg-yellow-500/20 rounded p-1"><span className="text-[10px] text-yellow-400 font-bold">5</span><span className="text-[6px] block text-muted-foreground">Medium</span></div> | |
| <div className="bg-blue-500/20 rounded p-1"><span className="text-[10px] text-blue-400 font-bold">12</span><span className="text-[6px] block text-muted-foreground">Low</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniEncryption = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-2"> | |
| <div className="relative"> | |
| <Lock className="w-8 h-8 text-primary" /> | |
| <div className="absolute -top-1 -right-1 w-3 h-3 bg-green-500 rounded-full flex items-center justify-center"> | |
| <CheckCircle className="w-2 h-2 text-white" /> | |
| </div> | |
| </div> | |
| <span className="text-[8px] font-mono text-primary">AES-256-GCM</span> | |
| </div> | |
| ); | |
| export const MiniSSLStatus = () => ( | |
| <div className="h-full flex flex-col gap-1 justify-center"> | |
| <div className="flex items-center gap-2"> | |
| <div className="w-2 h-2 bg-green-400 rounded-full" /> | |
| <span className="text-[8px]">SSL/TLS Active</span> | |
| </div> | |
| <div className="text-[7px] text-muted-foreground space-y-0.5"> | |
| <div>Cert: Let's Encrypt</div> | |
| <div>Expires: 89 days</div> | |
| <div>Protocol: TLS 1.3</div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniSOCDashboard = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[8px]"> | |
| <ShieldAlert className="w-4 h-4 text-red-400" /> | |
| <span className="text-red-400 animate-pulse">3 ACTIVE INCIDENTS</span> | |
| </div> | |
| <div className="grid grid-cols-3 gap-1 text-center"> | |
| <div className="bg-red-500/20 rounded p-0.5"><span className="text-[9px] text-red-400 font-bold">3</span><span className="text-[5px] block text-muted-foreground">Critical</span></div> | |
| <div className="bg-yellow-500/20 rounded p-0.5"><span className="text-[9px] text-yellow-400 font-bold">12</span><span className="text-[5px] block text-muted-foreground">Warning</span></div> | |
| <div className="bg-blue-500/20 rounded p-0.5"><span className="text-[9px] text-blue-400 font-bold">47</span><span className="text-[5px] block text-muted-foreground">Info</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniThreatMap = () => ( | |
| <div className="h-full relative bg-secondary/20 rounded overflow-hidden"> | |
| <Globe className="absolute inset-0 m-auto w-10 h-10 text-primary/20" /> | |
| {[...Array(8)].map((_, i) => ( | |
| <div key={i} className="absolute w-1.5 h-1.5 rounded-full bg-red-500 animate-ping" | |
| style={{ left: `${rand(10, 90)}%`, top: `${rand(10, 90)}%`, animationDelay: `${i * 0.3}s`, animationDuration: '2s' }} /> | |
| ))} | |
| <div className="absolute bottom-1 left-1 text-[6px] text-red-400">Live Attacks: 847</div> | |
| </div> | |
| ); | |
| export const MiniMalwareDetection = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Skull className="w-3 h-3 text-red-400" /> | |
| <span className="text-[7px] text-muted-foreground">Last 24h</span> | |
| </div> | |
| {[ | |
| { type: 'Ransomware', count: 3, severity: 'critical' }, | |
| { type: 'Trojan', count: 12, severity: 'high' }, | |
| { type: 'Adware', count: 45, severity: 'low' }, | |
| ].map(m => ( | |
| <div key={m.type} className="flex items-center justify-between text-[6px]"> | |
| <span className="text-muted-foreground">{m.type}</span> | |
| <span className={m.severity === 'critical' ? 'text-red-400' : m.severity === 'high' ? 'text-orange-400' : 'text-yellow-400'}>{m.count}</span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniIntrusionDetection = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[8px]"> | |
| <Radar className="w-4 h-4 text-primary animate-spin" style={{ animationDuration: '3s' }} /> | |
| <span className="text-green-400">IDS ACTIVE</span> | |
| </div> | |
| <div className="flex-1 flex items-end gap-0.5"> | |
| {[12, 8, 15, 6, 22, 18, 9, 14, 11, 7].map((v, i) => ( | |
| <div key={i} className={`flex-1 rounded-t ${v > 15 ? 'bg-red-400' : 'bg-primary/50'}`} style={{ height: `${v * 4}%` }} /> | |
| ))} | |
| </div> | |
| <span className="text-[6px] text-muted-foreground text-center">Packet Analysis</span> | |
| </div> | |
| ); | |
| export const MiniDDoSMonitor = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-1"> | |
| <div className="relative"> | |
| <Network className="w-8 h-8 text-green-400" /> | |
| <div className="absolute -top-1 -right-1 w-3 h-3 bg-green-500 rounded-full flex items-center justify-center"> | |
| <CheckCircle className="w-2 h-2 text-white" /> | |
| </div> | |
| </div> | |
| <span className="text-[8px] text-green-400">NO DDoS DETECTED</span> | |
| <span className="text-[6px] text-muted-foreground">Traffic: 2.4 Gbps</span> | |
| </div> | |
| ); | |
| export const MiniPhishingDetector = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center gap-2"> | |
| <Mail className="w-3 h-3 text-yellow-400" /> | |
| <span className="text-[8px] text-muted-foreground">Email Security</span> | |
| </div> | |
| <div className="flex justify-between text-[7px]"> | |
| <span className="text-muted-foreground">Blocked:</span> | |
| <span className="text-red-400">247 phishing</span> | |
| </div> | |
| <div className="flex justify-between text-[7px]"> | |
| <span className="text-muted-foreground">Quarantined:</span> | |
| <span className="text-yellow-400">89 suspicious</span> | |
| </div> | |
| <div className="flex justify-between text-[7px]"> | |
| <span className="text-muted-foreground">Safe:</span> | |
| <span className="text-green-400">12,458</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniDarkWebMonitor = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Ghost className="w-4 h-4 text-purple-400" /> | |
| <span className="text-[7px] text-purple-400">DARK WEB SCAN</span> | |
| </div> | |
| <div className="bg-purple-500/10 rounded p-1"> | |
| <div className="text-[7px] text-red-400">⚠ 2 Credentials Found</div> | |
| <div className="text-[6px] text-muted-foreground mt-0.5">j***@company.com exposed</div> | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">Last scan: 2h ago</span> | |
| </div> | |
| ); | |
| export const MiniZeroDayAlert = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-2"> | |
| <div className="relative"> | |
| <AlertTriangle className="w-8 h-8 text-red-500 animate-pulse" /> | |
| </div> | |
| <span className="text-[9px] text-red-400 font-mono">CVE-2024-0001</span> | |
| <span className="text-[6px] text-muted-foreground">Zero-Day Detected</span> | |
| </div> | |
| ); | |
| export const MiniPatchStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[8px]"> | |
| <Download className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Patch Status</span> | |
| </div> | |
| <div className="h-3 bg-secondary rounded-full overflow-hidden flex"> | |
| <div className="h-full bg-green-500" style={{ width: '72%' }} /> | |
| <div className="h-full bg-yellow-500" style={{ width: '18%' }} /> | |
| <div className="h-full bg-red-500" style={{ width: '10%' }} /> | |
| </div> | |
| <div className="flex justify-between text-[6px] text-muted-foreground"> | |
| <span>Patched: 72%</span><span>Pending: 18%</span><span>Failed: 10%</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniEndpointProtection = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Laptop className="w-3 h-3 text-primary" /> | |
| <span className="text-green-400">1,247 Protected</span> | |
| </div> | |
| <div className="grid grid-cols-2 gap-1"> | |
| <div className="bg-green-500/10 rounded p-1 text-center"> | |
| <span className="text-[8px] text-green-400 font-bold">98%</span> | |
| <span className="text-[5px] block text-muted-foreground">Compliant</span> | |
| </div> | |
| <div className="bg-red-500/10 rounded p-1 text-center"> | |
| <span className="text-[8px] text-red-400 font-bold">23</span> | |
| <span className="text-[5px] block text-muted-foreground">At Risk</span> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniSIEMAlerts = () => ( | |
| <div className="h-full flex flex-col gap-0.5"> | |
| {[ | |
| { time: '09:42', alert: 'Brute force attempt', severity: 'high' }, | |
| { time: '09:38', alert: 'Unusual outbound traffic', severity: 'medium' }, | |
| { time: '09:35', alert: 'Failed login x5', severity: 'low' }, | |
| ].map((a, i) => ( | |
| <div key={i} className="flex items-center gap-1 text-[6px] bg-secondary/20 rounded px-1 py-0.5"> | |
| <span className="text-primary/70 font-mono w-8">{a.time}</span> | |
| <span className="flex-1 truncate text-muted-foreground">{a.alert}</span> | |
| <div className={`w-1.5 h-1.5 rounded-full ${a.severity === 'high' ? 'bg-red-400' : a.severity === 'medium' ? 'bg-yellow-400' : 'bg-blue-400'}`} /> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniHoneypotStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Target className="w-3 h-3 text-yellow-400" /> | |
| <span className="text-[7px] text-yellow-400">HONEYPOT ACTIVE</span> | |
| </div> | |
| <div className="text-[7px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Traps triggered:</span><span className="text-red-400">47</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Unique IPs:</span><span className="text-orange-400">23</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Data collected:</span><span className="text-primary">2.4 GB</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniIPReputation = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center gap-2 text-[8px]"> | |
| <Globe className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">IP Reputation Check</span> | |
| </div> | |
| <div className="bg-secondary/30 rounded p-1 font-mono text-[7px]"> | |
| <div className="text-muted-foreground">203.0.113.45</div> | |
| <div className="flex items-center gap-1 mt-0.5"> | |
| <div className="w-2 h-2 bg-red-500 rounded-full" /> | |
| <span className="text-red-400">MALICIOUS</span> | |
| </div> | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">Blacklisted on 7 feeds</span> | |
| </div> | |
| ); | |
| export const MiniRansomwareShield = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-2"> | |
| <div className="relative"> | |
| <FileLock className="w-8 h-8 text-green-400" /> | |
| <ShieldCheck className="absolute -bottom-1 -right-1 w-4 h-4 text-green-500" /> | |
| </div> | |
| <span className="text-[8px] text-green-400">RANSOMWARE SHIELD ON</span> | |
| <span className="text-[6px] text-muted-foreground">42 file types protected</span> | |
| </div> | |
| ); | |
| export const MiniNetworkSegments = () => ( | |
| <div className="h-full grid grid-cols-3 gap-1"> | |
| {[ | |
| { name: 'DMZ', status: 'secure', color: 'green' }, | |
| { name: 'PROD', status: 'secure', color: 'green' }, | |
| { name: 'DEV', status: 'warning', color: 'yellow' }, | |
| { name: 'GUEST', status: 'isolated', color: 'blue' }, | |
| { name: 'IOT', status: 'secure', color: 'green' }, | |
| { name: 'MGMT', status: 'secure', color: 'green' }, | |
| ].map(seg => ( | |
| <div key={seg.name} className={`flex flex-col items-center justify-center rounded p-0.5 bg-${seg.color}-500/10`}> | |
| <span className="text-[6px] font-mono text-foreground">{seg.name}</span> | |
| <div className={`w-1.5 h-1.5 rounded-full bg-${seg.color}-400`} /> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniThreatIntel = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <BrainCircuit className="w-3 h-3 text-primary" /> | |
| <span className="text-[7px] text-primary">THREAT INTEL</span> | |
| </div> | |
| {[ | |
| { feed: 'AlienVault', iocs: 1247 }, | |
| { feed: 'VirusTotal', iocs: 892 }, | |
| { feed: 'AbuseIPDB', iocs: 2341 }, | |
| ].map(f => ( | |
| <div key={f.feed} className="flex items-center justify-between text-[6px]"> | |
| <span className="text-muted-foreground">{f.feed}</span> | |
| <span className="text-primary font-mono">{f.iocs} IOCs</span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniMITREMatrix = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <span className="text-[7px] text-muted-foreground">MITRE ATT&CK Coverage</span> | |
| <div className="grid grid-cols-7 gap-0.5 flex-1"> | |
| {['Recon', 'Resource', 'Initial', 'Exec', 'Persist', 'Priv', 'Defense'].map((_, i) => ( | |
| <div key={i} className="flex flex-col gap-0.5"> | |
| {[...Array(4)].map((_, j) => ( | |
| <div key={j} className={`flex-1 rounded-sm ${rand(0, 10) > 3 ? 'bg-green-500/50' : rand(0, 10) > 6 ? 'bg-yellow-500/50' : 'bg-secondary/30'}`} /> | |
| ))} | |
| </div> | |
| ))} | |
| </div> | |
| <span className="text-[6px] text-green-400 text-center">78% Coverage</span> | |
| </div> | |
| ); | |
| export const MiniIncidentTimeline = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <span className="text-[7px] text-red-400">Active Incident #1247</span> | |
| <div className="flex-1 relative pl-2"> | |
| <div className="absolute left-0 top-0 bottom-0 w-0.5 bg-red-500/30" /> | |
| {[ | |
| { time: '09:42', event: 'Detection', done: true }, | |
| { time: '09:45', event: 'Containment', done: true }, | |
| { time: '09:52', event: 'Eradication', done: false }, | |
| ].map((e, i) => ( | |
| <div key={i} className="flex items-center gap-1 text-[6px] mb-0.5"> | |
| <div className={`w-1.5 h-1.5 rounded-full -ml-[5px] ${e.done ? 'bg-green-400' : 'bg-yellow-400 animate-pulse'}`} /> | |
| <span className="text-primary/70 font-mono">{e.time}</span> | |
| <span className="text-muted-foreground">{e.event}</span> | |
| </div> | |
| ))} | |
| </div> | |
| </div> | |
| ); | |
| export const MiniComplianceScore = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-1"> | |
| <div className="relative w-12 h-12"> | |
| <svg viewBox="0 0 36 36" className="w-full h-full -rotate-90"> | |
| <circle cx="18" cy="18" r="15" fill="none" stroke="hsl(var(--secondary))" strokeWidth="3" /> | |
| <circle cx="18" cy="18" r="15" fill="none" stroke="hsl(142 76% 36%)" strokeWidth="3" strokeDasharray="85 15" /> | |
| </svg> | |
| <div className="absolute inset-0 flex items-center justify-center"> | |
| <span className="text-[10px] font-mono text-green-400">85%</span> | |
| </div> | |
| </div> | |
| <span className="text-[7px] text-muted-foreground">SOC 2 Compliance</span> | |
| </div> | |
| ); | |
| export const MiniDataLeakPrevention = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <FileWarning className="w-3 h-3 text-orange-400" /> | |
| <span className="text-[7px] text-orange-400">DLP ACTIVE</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">PII Detected:</span><span className="text-red-400">12</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Blocked Transfers:</span><span className="text-yellow-400">3</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Encrypted:</span><span className="text-green-400">1,247</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniPenTestResults = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Crosshair className="w-3 h-3 text-red-400" /> | |
| <span className="text-muted-foreground">Pen Test Report</span> | |
| </div> | |
| <div className="flex-1 flex items-center gap-2"> | |
| <div className="flex flex-col gap-0.5"> | |
| {[ | |
| { label: 'Critical', count: 0, color: 'bg-green-500' }, | |
| { label: 'High', count: 2, color: 'bg-red-500' }, | |
| { label: 'Medium', count: 8, color: 'bg-yellow-500' }, | |
| { label: 'Low', count: 15, color: 'bg-blue-500' }, | |
| ].map(v => ( | |
| <div key={v.label} className="flex items-center gap-1 text-[5px]"> | |
| <div className={`w-1 h-1 rounded-full ${v.color}`} /> | |
| <span className="text-muted-foreground">{v.count}</span> | |
| </div> | |
| ))} | |
| </div> | |
| <div className="flex-1 text-center"> | |
| <span className="text-lg font-mono text-yellow-400">B+</span> | |
| <span className="text-[6px] block text-muted-foreground">Security Grade</span> | |
| </div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniSecurityPosture = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <span className="text-[7px] text-muted-foreground">Security Posture</span> | |
| <div className="flex gap-0.5 h-3"> | |
| {[85, 72, 90, 68, 95].map((v, i) => ( | |
| <div key={i} className="flex-1 bg-secondary/30 rounded overflow-hidden"> | |
| <div className={`h-full ${v > 80 ? 'bg-green-500' : v > 60 ? 'bg-yellow-500' : 'bg-red-500'}`} style={{ height: `${v}%` }} /> | |
| </div> | |
| ))} | |
| </div> | |
| <div className="flex justify-between text-[5px] text-muted-foreground"> | |
| <span>Net</span><span>End</span><span>App</span><span>Data</span><span>IAM</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniForensicStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center gap-2"> | |
| <FileSearch className="w-3 h-3 text-blue-400" /> | |
| <span className="text-[7px] text-blue-400">FORENSIC ANALYSIS</span> | |
| </div> | |
| <div className="bg-secondary/30 rounded p-1"> | |
| <div className="flex items-center justify-between text-[6px]"> | |
| <span className="text-muted-foreground">Evidence collected:</span> | |
| <span className="text-primary">247 artifacts</span> | |
| </div> | |
| <div className="h-1 bg-secondary rounded-full mt-1"> | |
| <div className="h-full w-3/4 bg-blue-400 rounded-full" /> | |
| </div> | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">Analysis: 75% complete</span> | |
| </div> | |
| ); | |
| export const MiniCertificateMonitor = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <BadgeCheck className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Certificates</span> | |
| </div> | |
| {[ | |
| { domain: '*.example.com', days: 89, status: 'ok' }, | |
| { domain: 'api.example.com', days: 12, status: 'warning' }, | |
| { domain: 'old.example.com', days: -5, status: 'expired' }, | |
| ].map(c => ( | |
| <div key={c.domain} className="flex items-center justify-between text-[6px]"> | |
| <span className="truncate flex-1 text-muted-foreground">{c.domain}</span> | |
| <span className={c.status === 'ok' ? 'text-green-400' : c.status === 'warning' ? 'text-yellow-400' : 'text-red-400'}> | |
| {c.days > 0 ? `${c.days}d` : 'EXP'} | |
| </span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniPortScanner = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <ScanLine className="w-3 h-3 text-primary" /> | |
| <span className="text-green-400">SCAN COMPLETE</span> | |
| </div> | |
| <div className="grid grid-cols-4 gap-0.5 text-[6px] font-mono"> | |
| {[22, 80, 443, 3306, 5432, 8080, 9090, 27017].map(port => ( | |
| <div key={port} className={`text-center rounded py-0.5 ${[22, 80, 443].includes(port) ? 'bg-green-500/20 text-green-400' : 'bg-secondary/20 text-muted-foreground'}`}> | |
| {port} | |
| </div> | |
| ))} | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">3 open, 5 filtered</span> | |
| </div> | |
| ); | |
| export const MiniUserBehavior = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <UserCheck className="w-3 h-3 text-primary" /> | |
| <span className="text-[7px] text-muted-foreground">UEBA</span> | |
| </div> | |
| {[ | |
| { user: 'admin@co', risk: 12, trend: 'down' }, | |
| { user: 'john.d@co', risk: 78, trend: 'up' }, | |
| { user: 'api-svc', risk: 45, trend: 'stable' }, | |
| ].map(u => ( | |
| <div key={u.user} className="flex items-center gap-1 text-[6px]"> | |
| <span className="flex-1 truncate text-muted-foreground">{u.user}</span> | |
| <div className={`w-6 h-1.5 rounded-full ${u.risk > 60 ? 'bg-red-400' : u.risk > 30 ? 'bg-yellow-400' : 'bg-green-400'}`} style={{ width: `${u.risk}%` }} /> | |
| {u.trend === 'up' ? <ArrowUp className="w-2 h-2 text-red-400" /> : u.trend === 'down' ? <ArrowDown className="w-2 h-2 text-green-400" /> : <Minus className="w-2 h-2 text-muted-foreground" />} | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniAPISecurityGateway = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Webhook className="w-3 h-3 text-primary" /> | |
| <span className="text-green-400">API GW SECURE</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Rate Limited:</span><span className="text-yellow-400">247</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Auth Failures:</span><span className="text-red-400">18</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Requests/min:</span><span className="text-primary">12.4K</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniSecretScanner = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <KeyRound className="w-3 h-3 text-yellow-400" /> | |
| <span className="text-[7px] text-yellow-400">SECRET SCAN</span> | |
| </div> | |
| <div className="bg-yellow-500/10 rounded p-1 text-[6px]"> | |
| <div className="text-yellow-400">⚠ 3 Exposed Secrets</div> | |
| <div className="text-muted-foreground mt-0.5">AWS_KEY in config.js:42</div> | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">Scanned: 1,247 files</span> | |
| </div> | |
| ); | |
| export const MiniContainerSecurity = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Box className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Container Security</span> | |
| </div> | |
| <div className="grid grid-cols-2 gap-1 text-[6px]"> | |
| <div className="bg-green-500/10 rounded p-1 text-center"><span className="text-green-400 font-bold">42</span><span className="block text-muted-foreground">Secure</span></div> | |
| <div className="bg-red-500/10 rounded p-1 text-center"><span className="text-red-400 font-bold">3</span><span className="block text-muted-foreground">Vuln</span></div> | |
| </div> | |
| <span className="text-[6px] text-muted-foreground">Last scan: 15m ago</span> | |
| </div> | |
| ); | |
| export const MiniCloudSecurityScore = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-1"> | |
| <Globe className="w-6 h-6 text-primary" /> | |
| <div className="flex items-center gap-1"> | |
| <span className="text-lg font-mono text-primary">92</span> | |
| <span className="text-[8px] text-muted-foreground">/100</span> | |
| </div> | |
| <span className="text-[6px] text-green-400">Cloud Security Score</span> | |
| </div> | |
| ); | |
| export const MiniWAFStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Shield className="w-4 h-4 text-green-400" /> | |
| <span className="text-[8px] text-green-400">WAF ACTIVE</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">SQLi Blocked:</span><span className="text-red-400">147</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">XSS Blocked:</span><span className="text-red-400">89</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Rules Active:</span><span className="text-primary">2,451</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniBotDetection = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <ScanLine className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Bot Detection</span> | |
| </div> | |
| <div className="flex-1 flex items-end gap-0.5"> | |
| {[45, 32, 67, 28, 54, 89, 41, 73].map((v, i) => ( | |
| <div key={i} className="flex-1 flex flex-col items-center gap-0.5"> | |
| <div className={`w-full rounded-t ${v > 60 ? 'bg-red-400' : 'bg-primary/50'}`} style={{ height: `${v}%` }} /> | |
| </div> | |
| ))} | |
| </div> | |
| <span className="text-[6px] text-red-400 text-center">23% bot traffic detected</span> | |
| </div> | |
| ); | |
| export const MiniSSHMonitor = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Terminal className="w-3 h-3 text-primary" /> | |
| <span className="text-[7px] text-muted-foreground">SSH Sessions</span> | |
| </div> | |
| {[ | |
| { user: 'root', ip: '10.0.0.5', status: 'active' }, | |
| { user: 'deploy', ip: '10.0.0.12', status: 'active' }, | |
| { user: 'admin', ip: '203.0.113.5', status: 'blocked' }, | |
| ].map((s, i) => ( | |
| <div key={i} className="flex items-center gap-1 text-[6px]"> | |
| <span className="text-primary">{s.user}</span> | |
| <span className="flex-1 text-muted-foreground truncate">{s.ip}</span> | |
| <div className={`w-1.5 h-1.5 rounded-full ${s.status === 'active' ? 'bg-green-400' : 'bg-red-400'}`} /> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniAuditLog = () => ( | |
| <div className="h-full flex flex-col gap-0.5 text-[5px] font-mono"> | |
| <div className="flex items-center justify-between text-[7px] mb-0.5"> | |
| <FileText className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Audit Trail</span> | |
| </div> | |
| {[ | |
| { time: '09:42:15', event: 'USER_LOGIN admin', type: 'info' }, | |
| { time: '09:42:08', event: 'PERMISSION_CHANGE', type: 'warn' }, | |
| { time: '09:41:55', event: 'FILE_ACCESS sensitive.dat', type: 'info' }, | |
| ].map((l, i) => ( | |
| <div key={i} className="flex gap-1 truncate"> | |
| <span className="text-primary/70">{l.time}</span> | |
| <span className={l.type === 'warn' ? 'text-yellow-400' : 'text-muted-foreground'}>{l.event}</span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniMFAStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Fingerprint className="w-4 h-4 text-primary" /> | |
| <span className="text-[8px] text-muted-foreground">MFA Adoption</span> | |
| </div> | |
| <div className="h-3 bg-secondary rounded-full overflow-hidden"> | |
| <div className="h-full bg-gradient-to-r from-green-500 to-primary" style={{ width: '87%' }} /> | |
| </div> | |
| <div className="flex justify-between text-[6px] text-muted-foreground"> | |
| <span>87% enrolled</span> | |
| <span className="text-yellow-400">142 pending</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniPrivilegedAccess = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <LockKeyhole className="w-3 h-3 text-yellow-400" /> | |
| <span className="text-yellow-400">PAM</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Active Sessions:</span><span className="text-primary">7</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Priv Users:</span><span className="text-yellow-400">23</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Password Age:</span><span className="text-green-400">12d</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniVPNStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Network className="w-4 h-4 text-green-400" /> | |
| <span className="text-[8px] text-green-400">VPN CONNECTED</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Server:</span><span className="text-primary">NYC-01</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Protocol:</span><span>WireGuard</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Connected:</span><span className="text-primary">247 users</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniEmailSecurity = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Mail className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Email Security</span> | |
| </div> | |
| <div className="grid grid-cols-3 gap-1 text-center text-[6px]"> | |
| <div><span className="text-green-400 font-bold">SPF</span><CheckCircle className="w-2 h-2 mx-auto text-green-400" /></div> | |
| <div><span className="text-green-400 font-bold">DKIM</span><CheckCircle className="w-2 h-2 mx-auto text-green-400" /></div> | |
| <div><span className="text-green-400 font-bold">DMARC</span><CheckCircle className="w-2 h-2 mx-auto text-green-400" /></div> | |
| </div> | |
| <span className="text-[6px] text-green-400 text-center">All protocols active</span> | |
| </div> | |
| ); | |
| export const MiniAssetInventory = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <span className="text-[7px] text-muted-foreground">Asset Inventory</span> | |
| <div className="grid grid-cols-2 gap-1 text-[6px]"> | |
| <div className="flex items-center gap-1"><Database className="w-2 h-2 text-primary" /><span>42 Servers</span></div> | |
| <div className="flex items-center gap-1"><Laptop className="w-2 h-2 text-primary" /><span>847 Endpoints</span></div> | |
| <div className="flex items-center gap-1"><Smartphone className="w-2 h-2 text-primary" /><span>324 Mobile</span></div> | |
| <div className="flex items-center gap-1"><Router className="w-2 h-2 text-primary" /><span>56 Network</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniBackupStatus = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Database className="w-3 h-3 text-green-400" /> | |
| <span className="text-[7px] text-green-400">BACKUP OK</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Last Backup:</span><span className="text-primary">2h ago</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Size:</span><span>247 GB</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Encrypted:</span><span className="text-green-400">Yes</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniGDPRStatus = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-1"> | |
| <div className="relative w-12 h-12"> | |
| <svg viewBox="0 0 36 36" className="w-full h-full -rotate-90"> | |
| <circle cx="18" cy="18" r="15" fill="none" stroke="hsl(var(--secondary))" strokeWidth="3" /> | |
| <circle cx="18" cy="18" r="15" fill="none" stroke="hsl(var(--primary))" strokeWidth="3" strokeDasharray="92 8" /> | |
| </svg> | |
| <div className="absolute inset-0 flex items-center justify-center"> | |
| <span className="text-[10px] font-mono text-primary">92%</span> | |
| </div> | |
| </div> | |
| <span className="text-[7px] text-muted-foreground">GDPR Compliance</span> | |
| </div> | |
| ); | |
| export const MiniSecurityTraining = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Award className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Security Training</span> | |
| </div> | |
| <div className="h-2 bg-secondary rounded-full overflow-hidden"> | |
| <div className="h-full bg-green-500" style={{ width: '78%' }} /> | |
| </div> | |
| <div className="flex justify-between text-[6px]"> | |
| <span className="text-muted-foreground">78% completed</span> | |
| <span className="text-yellow-400">12 overdue</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniIOCFeed = () => ( | |
| <div className="h-full flex flex-col gap-0.5"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Biohazard className="w-3 h-3 text-red-400" /> | |
| <span className="text-muted-foreground">IOC Feed</span> | |
| </div> | |
| {[ | |
| { type: 'IP', value: '203.0.113.45', threat: 'C2' }, | |
| { type: 'Hash', value: 'a1b2c3...', threat: 'Malware' }, | |
| { type: 'Domain', value: 'evil.com', threat: 'Phish' }, | |
| ].map((ioc, i) => ( | |
| <div key={i} className="flex items-center gap-1 text-[5px] bg-secondary/20 rounded px-1"> | |
| <span className="text-primary">{ioc.type}</span> | |
| <span className="flex-1 truncate font-mono text-muted-foreground">{ioc.value}</span> | |
| <span className="text-red-400">{ioc.threat}</span> | |
| </div> | |
| ))} | |
| </div> | |
| ); | |
| export const MiniNetworkTraffic = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Network className="w-3 h-3 text-primary" /> | |
| <span className="text-muted-foreground">Network Traffic</span> | |
| </div> | |
| <svg viewBox="0 0 100 30" className="flex-1"> | |
| <path d="M0,25 Q10,20 20,22 T40,15 T60,18 T80,10 T100,12" fill="none" stroke="hsl(var(--primary))" strokeWidth="1.5" /> | |
| <path d="M0,28 Q10,25 20,26 T40,22 T60,24 T80,20 T100,21" fill="none" stroke="hsl(142 76% 36%)" strokeWidth="1.5" /> | |
| </svg> | |
| <div className="flex justify-between text-[6px]"> | |
| <span className="text-primary">In: 2.4 Gbps</span> | |
| <span className="text-green-400">Out: 1.8 Gbps</span> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniZeroTrust = () => ( | |
| <div className="h-full flex flex-col items-center justify-center gap-1"> | |
| <div className="flex items-center gap-1"> | |
| <ShieldCheck className="w-5 h-5 text-green-400" /> | |
| <span className="text-[8px] text-green-400 font-mono">ZERO TRUST</span> | |
| </div> | |
| <div className="grid grid-cols-3 gap-1 text-[5px] text-center"> | |
| <div><CheckCircle className="w-2 h-2 mx-auto text-green-400" /><span className="text-muted-foreground">Verify</span></div> | |
| <div><CheckCircle className="w-2 h-2 mx-auto text-green-400" /><span className="text-muted-foreground">Least Priv</span></div> | |
| <div><CheckCircle className="w-2 h-2 mx-auto text-green-400" /><span className="text-muted-foreground">Assume Breach</span></div> | |
| </div> | |
| </div> | |
| ); | |
| export const MiniSecurityAlerts = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between"> | |
| <Siren className="w-4 h-4 text-red-400 animate-pulse" /> | |
| <span className="text-[8px] text-red-400">5 ALERTS</span> | |
| </div> | |
| <div className="flex-1 space-y-0.5"> | |
| {[ | |
| { msg: 'Brute force detected', time: '2m' }, | |
| { msg: 'Anomalous login', time: '5m' }, | |
| ].map((a, i) => ( | |
| <div key={i} className="flex items-center gap-1 text-[6px] bg-red-500/10 rounded px-1 py-0.5"> | |
| <span className="flex-1 truncate text-red-300">{a.msg}</span> | |
| <span className="text-muted-foreground">{a.time}</span> | |
| </div> | |
| ))} | |
| </div> | |
| </div> | |
| ); | |
| export const MiniDNSSecurity = () => ( | |
| <div className="h-full flex flex-col gap-1"> | |
| <div className="flex items-center justify-between text-[7px]"> | |
| <Globe className="w-3 h-3 text-primary" /> | |
| <span className="text-green-400">DNS SECURE</span> | |
| </div> | |
| <div className="text-[6px] space-y-0.5"> | |
| <div className="flex justify-between"><span className="text-muted-foreground">DNSSEC:</span><span className="text-green-400">Enabled</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">DoH/DoT:</span><span className="text-green-400">Active</span></div> | |
| <div className="flex justify-between"><span className="text-muted-foreground">Blocked:</span><span className="text-red-400">1,247 domains</span></div> | |
| </div> | |
| </div> | |
| ); | |