import { useState, type ReactNode } from "react"; import { cn } from "@/lib/utils"; import { formatData } from "@/lib/crapp-data"; import { microcopyObiettivo, progressoObiettivo, type ObiettivoSquadra } from "@/lib/obiettivi"; import { Barra } from "@/components/motion/Barra"; import { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@/components/ui/drawer"; function Elenco({ titolo, voci, segno }: { titolo: string; voci: string[]; segno: string }) { return (

{titolo}

); } function Blocco({ titolo, testo }: { titolo: string; testo: string }) { return (

{titolo}

{testo}

); } /** Corpo della card di dettaglio; esportato per i test, va usato dentro un Drawer. */ export function SchedaObiettivo({ o }: { o: ObiettivoSquadra }) { const pct = progressoObiettivo(o); const fatto = pct >= 100; const d = o.dettaglio; return (
{o.emoji}
{o.titolo} {o.descrizione}

Stato attuale

{fatto ? "Completato" : "In corso"}

{o.valore} su {o.target}{" "} {o.unita}

{pct}%{o.scadenza ? ` · entro il ${formatData(o.scadenza)}` : ""}

{microcopyObiettivo(o)}

{d.perse ? : null}

{o.impatto}

); } /** Drawer cliccabile che spiega nel dettaglio un obiettivo di squadra. */ export function ObiettivoDrawer({ obiettivo, children, }: { obiettivo: ObiettivoSquadra; children: ReactNode; }) { const [open, setOpen] = useState(false); return ( {children} {obiettivo.titolo} {obiettivo.descrizione} ); }