"use client"; import { useState, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { Progress } from "@/components/ui/progress"; import { Toggle } from "@/components/ui/toggle"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Card, CardContent } from "@/components/ui/card"; import { Checkbox } from "@/components/ui/checkbox"; import { Plus, Eye, EyeOff, Trash2 } from "lucide-react"; interface Todo { id: number; text: string; completed: boolean; } export default function ColorfulTodoList() { const [todos, setTodos] = useState([]); const [newTodo, setNewTodo] = useState(""); const [showCompleted, setShowCompleted] = useState(true); // Fetch tasks from API useEffect(() => { fetch("/api/tasks") .then((res) => res.json()) .then(setTodos) .catch(() => console.error("Failed to load tasks")); }, []); // Save tasks to API const saveTasks = (updatedTodos: Todo[]) => { setTodos(updatedTodos); fetch("/api/tasks", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(updatedTodos), }).catch(() => console.error("Failed to save tasks")); }; const addTodo = (e: React.FormEvent) => { e.preventDefault(); if (newTodo.trim()) { saveTasks([{ id: Date.now(), text: newTodo, completed: false }, ...todos]); setNewTodo(""); } }; const toggleTodo = (id: number) => { saveTasks( todos.map((todo) => (todo.id === id ? { ...todo, completed: !todo.completed } : todo)) ); }; const deleteTodo = (id: number) => { saveTasks(todos.filter((todo) => todo.id !== id)); }; const completedCount = todos.filter((todo) => todo.completed).length; const progress = todos.length > 0 ? (completedCount / todos.length) * 100 : 0; return (
{/* Header with Progress */}

Tasks

{showCompleted ? : }

{completedCount} of {todos.length} tasks completed

{/* Add Todo Form */}
setNewTodo(e.target.value)} placeholder="Add a new task..." className="flex-1 bg-slate-700 text-slate-100 placeholder-slate-400 border-slate-600 focus:border-sky-400 focus:ring-sky-400" />
{/* Todo List */} {todos .filter((todo) => showCompleted || !todo.completed) .map((todo) => (
toggleTodo(todo.id)} /> {todo.text} {todo.completed && ( )}
))}
); }