'use client'; import { CheckCircleIcon, CircleIcon, ClockIcon, EyeIcon, PlayIcon, XCircleIcon, } from 'lucide-react'; import { Badge } from '@kit/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@kit/ui/card'; import { Separator } from '@kit/ui/separator'; import { cn } from '@kit/ui/utils'; interface CustomPhase { id: string; name: string; description: string; color: string; order: number; userStoryIds: string[]; } interface UserStory { id: string; title: string; userStory: string; businessValue: string; acceptanceCriteria: string[]; priority: 'P0' | 'P1' | 'P2' | 'P3'; status: | 'not_started' | 'research' | 'in_progress' | 'review' | 'completed' | 'blocked'; notes?: string; estimatedComplexity?: string; dependencies?: string[]; completedAt?: string; } interface UserStoryDisplayReadOnlyProps { userStories: UserStory[]; customPhases?: CustomPhase[]; } const priorityLabels = { P0: { label: 'Critical', color: 'destructive' as const }, P1: { label: 'High', color: 'default' as const }, P2: { label: 'Medium', color: 'secondary' as const }, P3: { label: 'Low', color: 'outline' as const }, }; const statusIcons = { not_started: CircleIcon, research: EyeIcon, in_progress: PlayIcon, review: ClockIcon, completed: CheckCircleIcon, blocked: XCircleIcon, }; const statusLabels = { not_started: 'Not Started', research: 'Research', in_progress: 'In Progress', review: 'Review', completed: 'Completed', blocked: 'Blocked', }; const statusColors = { not_started: 'text-muted-foreground', research: 'text-blue-600', in_progress: 'text-yellow-600', review: 'text-purple-600', completed: 'text-green-600', blocked: 'text-red-600', }; export function UserStoryDisplay({ userStories, }: UserStoryDisplayReadOnlyProps) { const renderUserStory = (story: UserStory) => { return ( {story.id} - {story.title}
{statusLabels[story.status]}

{story.businessValue}

{story.acceptanceCriteria.length} criteria
{/* Acceptance Criteria */} {story.acceptanceCriteria.length > 0 && (
Acceptance Criteria:
    {story.acceptanceCriteria.map((criterion, index) => (
  • {criterion}
  • ))}
)}
); }; return (
{/* Header */}

User Stories

View user stories and track progress

{userStories.map(renderUserStory)}
{userStories.length === 0 && (

No user stories yet

)}
); }