import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { useProject } from '../contexts/ProjectContext' import { projectsApi } from '../api' const COLORS = ['#0073ea', '#00c875', '#e2445c', '#fdab3d', '#a25ddc', '#037f4c', '#ff7575', '#579bfc', '#ff642e', '#00d0b0'] function ColorPicker({ value, onChange }) { return (
{COLORS.map(c => (
) } function ProjectCard({ project, onSelect, onEdit, onDelete }) { return (
e.currentTarget.style.boxShadow = '0 4px 16px rgba(0,0,0,0.12)'} onMouseLeave={e => e.currentTarget.style.boxShadow = ''} >
{project.name}
{project.description && (
{project.description}
)}
Created {new Date(project.created_at).toLocaleDateString()}
) } function ProjectModal({ project, onClose, onSave }) { const [name, setName] = useState(project?.name || '') const [description, setDescription] = useState(project?.description || '') const [color, setColor] = useState(project?.color || COLORS[0]) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const handleSubmit = async (e) => { e.preventDefault() if (!name.trim()) { setError('Name is required'); return } setSaving(true) setError(null) try { const data = { name: name.trim(), description: description.trim() || null, color } const result = project ? await projectsApi.update(project.id, data) : await projectsApi.create(data) onSave(result) } catch (err) { setError(err.message) setSaving(false) } } return (

{project ? 'Edit project' : 'New project'}

{error &&
{error}
}
setName(e.target.value)} placeholder="e.g. Q2 EU Expansion" />