feat(frontend): render markdown in description and summary fields

- New shared MarkdownText component (react-markdown + remark-gfm)
  that renders links, bold, italic, lists, code, blockquotes.
  External links open in a new tab with rel=noopener.
- Applied to: technique description, threat actor description,
  test description, campaign description, detection rule descriptions,
  D3FEND defense descriptions, red/blue summaries and validation notes.
- procedure_text (code/commands) stays in <pre> — not processed as MD.
This commit is contained in:
kitos
2026-05-29 08:38:53 +02:00
parent 366fc2170c
commit 1c27e31101
7 changed files with 132 additions and 18 deletions
+2 -1
View File
@@ -1,5 +1,6 @@
import { useState } from "react";
import { useParams, useNavigate } from "react-router-dom";
import MarkdownText from "../components/MarkdownText";
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import {
Loader2,
@@ -236,7 +237,7 @@ export default function CampaignDetailPage() {
</span>
</div>
{campaign.description && (
<p className="mt-1 text-sm text-gray-400">{campaign.description}</p>
<MarkdownText content={campaign.description} className="mt-1 text-sm text-gray-400" />
)}
<div className="mt-2 flex flex-wrap items-center gap-3 text-xs text-gray-500">
{campaign.threat_actor_name && (