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}
))}
);
}