- Layer 4 EntropyScanner: Shannon entropy, Base32/Base64 detection, CVE-2025-55284 ping/nslookup exfil, EchoLeak markdown pattern, DNS tunneling (iodine/dnscat) - Layer 5 UnicodeScanner: ASCII Smuggling (U+E0000 Tags Block), Variant Selectors, Zero-Width steganography, CamoLeak image-ordering (CVE-2025-53773), homoglyphs, BiDi override, high-entropy URL params - 30 DNS covert channel rules (dns-001 to dns-030) - ATLASMapper: 29 techniques (ATLAS v5.4.0 Feb 2026), added AML.T0062 (Agent Tool Invocation), AML.TA0015 (C2 tactic), memory poisoning, multi-agent trust, CamoLeak, Unicode steganography mappings - Rule count: 72 → 102 - Build: tsup 316ms, zero TypeScript errors
31 lines
765 B
TypeScript
31 lines
765 B
TypeScript
'use client'
|
|
|
|
import { theme } from '../theme'
|
|
|
|
export interface EmptyStateProps {
|
|
readonly message?: string
|
|
readonly icon?: string
|
|
readonly className?: string
|
|
}
|
|
|
|
export function EmptyState({ message = 'No data available', icon = '\u26A0', className }: EmptyStateProps) {
|
|
return (
|
|
<div
|
|
className={className}
|
|
style={{
|
|
display: 'flex',
|
|
flexDirection: 'column',
|
|
alignItems: 'center',
|
|
justifyContent: 'center',
|
|
padding: '48px 24px',
|
|
color: theme.colors.textDim,
|
|
fontFamily: theme.font,
|
|
textAlign: 'center',
|
|
}}
|
|
>
|
|
<span style={{ fontSize: 36, marginBottom: 12, opacity: 0.5 }}>{icon}</span>
|
|
<p style={{ fontSize: 14, margin: 0 }}>{message}</p>
|
|
</div>
|
|
)
|
|
}
|