'use client'; import type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared'; import { BadgeDisplay, StreakCounter, XpBar, } from '@contractspec/example.learning-journey-ui-shared'; import { Card, CardContent, CardHeader, CardTitle, } from '@contractspec/lib.ui-kit-web/ui/card'; import { EngagementMeter } from '../components/EngagementMeter'; export function ProgressView({ track, progress }: LearningViewProps) { const totalXp = track.totalXp ?? track.steps.reduce((sum, s) => sum + (s.xpReward ?? 0), 0); const completedSteps = progress.completedStepIds.length; const totalSteps = track.steps.length; const pendingSteps = totalSteps - completedSteps; // For demo: split completed into "actioned" and "acknowledged" // In real app, this would come from progress data const actioned = Math.floor(completedSteps * 0.7); const acknowledged = completedSteps - actioned; return (
{/* Engagement Overview */} 📊 Engagement Overview {/* Stats Grid */}
XP Earned
{progress.xpEarned} / {totalXp} XP
Engagement Streak
{progress.streakDays > 0 ? 'Keep going!' : 'Start your streak today!'}
{/* Achievements */} 🏅 Achievements {progress.badges.length === 0 && (

Action tips to unlock achievements!

)}
{/* Tip Breakdown */} 💡 Tip Status
{track.steps.map((step) => { const isCompleted = progress.completedStepIds.includes(step.id); return (
{isCompleted ? '✓' : '○'} {step.title}
{isCompleted ? 'Actioned' : 'Pending'}
); })}
); } export { ProgressView as Progress };