import { Link } from 'react-router-dom'; import NeonCard from '../NeonCard/NeonCard'; import { FORGE_VS_CALIBRATE, PIPELINE_STEPS, ROADMAP_FEATURES, } from '../../help/cheatSheetContent'; import './VisualComponents.css'; interface PipelineFlowProps { activeStep?: string; compact?: boolean; } export function PipelineFlow({ activeStep, compact }: PipelineFlowProps) { return (
{PIPELINE_STEPS.map((step, i) => (
{step.icon}
{step.title} {step.subtitle}
{i < PIPELINE_STEPS.length - 1 &&
}
))}
); } interface FleetPipelineStatusProps { hasBuilds: boolean; agentCount: number; onlineCount: number; hasHashrate: boolean; hasShares: boolean; } export function FleetPipelineStatus({ hasBuilds, agentCount, onlineCount, hasHashrate, hasShares, }: FleetPipelineStatusProps) { const steps = [ { id: 'forge', label: 'Forged', ok: hasBuilds, hint: 'At least one build exists' }, { id: 'deploy', label: 'Deployed', ok: agentCount > 0, hint: 'Agent registered on dashboard' }, { id: 'connect', label: 'Online', ok: onlineCount > 0, hint: `${onlineCount} node(s) live` }, { id: 'mine', label: 'Hashing', ok: hasHashrate, hint: 'Fleet hashrate > 0' }, { id: 'shares', label: 'Shares', ok: hasShares, hint: 'Shares submitted to pool' }, ]; return (
{steps.map((s, i) => (
{s.label}
{i < steps.length - 1 &&
}
))}
); } interface ActivityPulseProps { items: { id: string; label: string; ok: boolean; time?: string }[]; } export function ActivityPulse({ items }: ActivityPulseProps) { if (items.length === 0) { return

Awaiting fleet activity…

; } return (
{items.slice(0, 12).map((item) => (
{item.label}
))}
); } interface ForgeCalibrateCompareProps { compact?: boolean; } export function ForgeCalibrateCompare({ compact }: ForgeCalibrateCompareProps) { return (

{FORGE_VS_CALIBRATE.forge.title}

    {FORGE_VS_CALIBRATE.forge.items.map((item) => (
  • {item}
  • ))}
{!compact && ( Go to Forge )}

{FORGE_VS_CALIBRATE.calibrate.title}

    {FORGE_VS_CALIBRATE.calibrate.items.map((item) => (
  • {item}
  • ))}
{!compact && ( Go to Calibrate )}
); } export function RoadmapGrid() { return (
{ROADMAP_FEATURES.map((f) => (
{f.priority}

{f.title}

{f.desc}

))}
); }