import { RunResult, Scores } from "../types/aegis";
const API = "http://localhost:8000";
function dl(filename: string, content: string) {
const a = document.createElement("a");
a.href = "data:text/plain;charset=utf-8," + encodeURIComponent(content);
a.download = filename; a.click();
}
export function PanelEyebrow({ dot, color, label, meta }: { dot: string; color: string; label: string; meta?: string }) {
return (
{label}
{meta && {meta}}
);
}
export function MetaRow({ k, v, vc = "text-aegis-fg-2" }: { k: string; v: string; vc?: string }) {
return (
{k}
{v}
);
}
export function GateBadge({ v, colorClass, bgClass, borderClass }: { v: string; colorClass: string; bgClass: string; borderClass: string }) {
return {v};
}
export function ScoreBox({ label, val, colorClass }: { label: string; val: string; colorClass: string }) {
return (
);
}
export function ArtifactGrid({ results, technique }: { results: RunResult; technique: string }) {
const tid = technique.split("·")[0].trim();
const cards = [
{ label: "SIGMA YAML", desc: `Detection rule for ${tid}`, top: "border-t-aegis-blue", text: "text-aegis-blue-soft", content: results.artifacts.sigma, filename: `sigma_${tid}.yml` },
{ label: "SPLUNK SPL", desc: "Hunting query · index=wineventlog", top: "border-t-aegis-amber", text: "text-aegis-amber-soft", content: results.artifacts.splunk, filename: `splunk_${tid}.spl` },
{ label: "SOC PLAYBOOK", desc: "Triage · contain · escalate", top: "border-t-aegis-green", text: "text-aegis-green-soft", content: results.outputs.response, filename: `playbook_${tid}.md` },
{ label: "VECTR EXPORT", desc: "Navigator-style coverage JSON", top: "border-t-aegis-purple", text: "text-aegis-purple-soft", content: JSON.stringify({ technique, scores: results.scores, outputs: results.outputs }, null, 2), filename: `vectr_${tid}.json` },
{ label: "VALIDATION", desc: `Coverage ${results.scores.coverage}% · Safety ${results.scores.safety_verdict}`, top: "border-t-aegis-red", text: "text-aegis-red-soft", content: results.outputs.verifier, filename: `validation_${tid}.json` },
{ label: "PDF REPORT", desc: "SOC handoff bundle", top: "border-t-aegis-fg-muted", text: "text-aegis-fg-muted", content: null, filename: `aegisops_${tid}.pdf` },
];
return (
{cards.map((art, i) => (
))}
);
}