'use client'; import type { LearningViewProps } from '@contractspec/example.learning-journey-ui-shared'; import { StreakCounter, XpBar, } from '@contractspec/example.learning-journey-ui-shared'; import { Button } from '@contractspec/lib.design-system'; import { Card, CardContent, CardHeader, CardTitle, } from '@contractspec/lib.ui-kit-web/ui/card'; import { TipCard } from '../components/TipCard'; interface CoachingOverviewProps extends LearningViewProps { onStart?: () => void; } export function Overview({ track, progress, onStepComplete, onStart, }: CoachingOverviewProps) { 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; // Get active tips (incomplete ones) const activeTips = track.steps .filter((s) => !progress.completedStepIds.includes(s.id)) .slice(0, 3); return (
{/* Header Card */}
💡

{track.name}

{track.description}

{/* Quick Stats */}
Active Tips
{pendingSteps}

tips for you today

Tips Actioned
{completedSteps}

out of {totalSteps} total

XP Earned
{progress.xpEarned}
{/* Active Tips Preview */} {activeTips.length > 0 && ( 💡 Tips for You {activeTips.length < pendingSteps && ( )} {activeTips.map((step) => ( onStepComplete?.(step.id)} /> ))} )} {/* All Complete */} {pendingSteps === 0 && (
🎉

All Tips Actioned!

Great job! You've addressed all {totalSteps} coaching tips.

)}
); }