import React, { useState } from "react"; import { FileText, Folder, Search, CheckCircle2, RefreshCw, Youtube, ExternalLink, Code, Eye, Tag, AlertTriangle, ShieldCheck, Layers, Image as ImageIcon, } from "lucide-react"; import { ContentItem, MediaAsset } from "../types"; interface ContentTabProps { contentItems: ContentItem[]; mediaAssets: MediaAsset[]; onTriggerDiscovery: () => Promise; } export const ContentTab: React.FC = ({ contentItems, mediaAssets, onTriggerDiscovery, }) => { const [selectedItemId, setSelectedItemId] = useState( contentItems[0]?.id || "", ); const [activeSubTab, setActiveSubTab] = useState<"markdown" | "media">( "markdown", ); const [searchTerm, setSearchTerm] = useState(""); const [isScanning, setIsScanning] = useState(false); const [previewContent, setPreviewContent] = useState( null, ); const selectedItem = contentItems.find((i) => i.id === selectedItemId) || contentItems[0]; const filteredItems = contentItems.filter( (item) => item.title.toLowerCase().includes(searchTerm.toLowerCase()) || item.sourceRepo.toLowerCase().includes(searchTerm.toLowerCase()) || item.path.toLowerCase().includes(searchTerm.toLowerCase()) || item.tags.some((t) => t.toLowerCase().includes(searchTerm.toLowerCase())), ); const handleScan = async () => { setIsScanning(true); await onTriggerDiscovery(); setIsScanning(false); }; return (
{/* HEADER BAR */}

Artifacts

PRD AC-05, AC-06, AC-07, AC-08 & AC-09

Discovers artifacts across repositories, parses front matter, validates YouTube directives, Wikipedia links, raw HTML policy, and media mappings under{" "} /media.

{/* SUB-TABS: MARKDOWN VS MEDIA */}
{activeSubTab === "markdown" ? (
{/* LEFT LIST: DISCOVERED CONTENT ITEMS (5 COLS) */}
setSearchTerm(e.target.value)} className="w-full pl-9 pr-3 py-2 bg-[#141414] border border-[#222222] rounded-sm text-xs text-white focus:outline-none focus:border-[#C5A059] shadow-xs" />
{filteredItems.map((item) => { const isSelected = item.id === selectedItemId; return (
setSelectedItemId(item.id)} className={`p-4 rounded-sm border cursor-pointer transition-all ${ isSelected ? "bg-[#181818] border-[#C5A059] shadow-xs" : "bg-[#111111] border-[#1F1F1F] hover:border-[#2A2A2A]" }`} >
{item.sourceRepo} {item.published}

{item.title}

{item.summary}

{item.route} Valid
); })}
{/* RIGHT COLUMN: CONTENT INSPECTOR & DIRECTIVES (7 COLS) */}
{selectedItem ? ( <> {/* ITEM HEADER */}
{selectedItem.sourceRepo} {selectedItem.path}

{selectedItem.title}

{/* EXPLAIN WHY / OMITTED STATUS */} {selectedItem.explainWhy && (

Artifact Omitted

Reason:

{selectedItem.explainWhy}

)} {/* METADATA & FRONT MATTER INSPECTOR */}
Final Generated Route {selectedItem.route}

Resolved via{" "} {selectedItem.styleInstanceId} {" "} pattern.

Repository Entry Defaults
Project:{" "} {selectedItem.metadata?.projectName}
Project ID:{" "} {selectedItem.metadata?.projectId}
{/* SPECIAL DIRECTIVES DETECTED */}
Parsed Markdown Extensions & Embeds
{/* YouTube Directive */}
YouTube Directives (AC-06)
{selectedItem.youtubeDirectives.length > 0 ? ( selectedItem.youtubeDirectives.map((yt, idx) => (
Title: "{yt.title}" (ID: {yt.videoId})
)) ) : (

No YouTube directives in item.

)}
{/* Wikipedia Links */}
Wikipedia Links (AC-07)
{selectedItem.wikipediaLinks.length > 0 ? ( selectedItem.wikipediaLinks.map((wiki, idx) => (
{wiki.text} -> {wiki.url}
)) ) : (

No Wikipedia links in item.

)}
{/* RAW HTML POLICY SAFETY STATUS */}
Raw HTML Security Policy (AC-08) Policy: Disabled / Sanitized

Raw HTML blocks and arbitrary script tags are stripped/escaped automatically during build time to prevent XSS vulnerabilities.

) : (
Select an artifact to inspect details.
)}
) : ( /* PUBLIC MEDIA ASSETS INVENTORY (AC-09) */

Public Media Assets Namespace Mappings (/media)

Maps source media directories into isolated public media namespaces to prevent path collisions.

AC-09 Verified
{mediaAssets.map((asset) => (
{asset.filename} {(asset.sizeBytes / 1024).toFixed(1)} KB
Source Repo:{" "} {asset.sourceRepo}
Original Path:{" "} {asset.originalPath}
Public Namespace Route: {asset.publicNamespacePath}
))}
)} {/* RENDERED CONTENT PREVIEW MODAL */} {previewContent && (
{previewContent.sourceRepo} • {previewContent.published}

{previewContent.title}

Summary: {previewContent.summary}
                {previewContent.contentMarkdown}
              
)}
); };