import { cn } from '@/lib/utils'; import { ChevronLeft, ChevronRight, Plus } from 'lucide-react'; import { useState } from 'react'; interface Milestone { target: number; label: string; color: string; } interface MilestoneProgressBarProps { currentShares: number; className?: string; onStatsToggle?: () => void; showStats?: boolean; isVisible?: boolean; onAddPurchase?: () => void; onHover?: (isHovered: boolean) => void; } const milestones: Milestone[] = [ { target: 1500, label: '1.5K', color: 'bg-blue-500' }, { target: 3000, label: '3K', color: 'bg-green-500' }, { target: 4500, label: '4.5K', color: 'bg-yellow-500' }, { target: 6000, label: '6K', color: 'bg-red-500' }, ]; export default function MilestoneProgressBar({ currentShares, className, onStatsToggle, showStats = false, isVisible = false, onAddPurchase, onHover }: MilestoneProgressBarProps) { const [currentMilestoneIndex, setCurrentMilestoneIndex] = useState(0); const currentMilestone = milestones[currentMilestoneIndex]; const progress = Math.min((currentShares / currentMilestone.target) * 100, 100); const isCompleted = currentShares >= currentMilestone.target; const nextMilestone = () => { setCurrentMilestoneIndex((prev) => prev < milestones.length - 1 ? prev + 1 : 0 ); }; const prevMilestone = () => { setCurrentMilestoneIndex((prev) => prev > 0 ? prev - 1 : milestones.length - 1 ); }; const handleBarClick = () => { if (onStatsToggle) { onStatsToggle(); } }; return (
onHover?.(true)} onMouseLeave={() => onHover?.(false)} >
{/* Progress Bar */}
{/* Background pulse for completed milestones */} {isCompleted && (
)} {/* Progress fill */}
{/* Glow effect */}
{/* Milestone Info */}
{/* Left: Previous milestone button */} {/* Center: Milestone info */}
{currentShares.toFixed(2)} / {currentMilestone.target}
{currentMilestone.label}
{isCompleted ? 'COMPLETED' : `${(100 - progress).toFixed(1)}% TO GO`}
{/* Right: Add Purchase, Next milestone button and stats toggle */}
{/* Add Purchase Button */} {onAddPurchase && ( )} {/* Stats indicator */}
{showStats ? '▲' : '▼'}
); }