diff --git a/src/components/crapp/BarraSottosezioni.tsx b/src/components/crapp/BarraSottosezioni.tsx index 72c35e6..137bd65 100644 --- a/src/components/crapp/BarraSottosezioni.tsx +++ b/src/components/crapp/BarraSottosezioni.tsx @@ -7,6 +7,8 @@ export type VoceSottosezione = { id: string; label: string; contenuto: ReactNode; + /** Se true, non ripete il titolo della tab sopra il contenuto (es. Classifica giĆ nella barra). */ + nascondiTitolo?: boolean; }; /** Tween breve: evita molle + exit che tengono due pannelli in DOM insieme. */ @@ -17,15 +19,18 @@ const transizioneTab = { type: "tween" as const, duration: 0.16, ease: [0.25, 0. * pannello che mostra una sola sezione alla volta, cambiabile anche con * swipe sul contenuto. * - * Il pannello precedente si smonta subito (niente AnimatePresence/exit): - * al cambio tab resta un solo albero da animare in ingresso. + * `variante="sottolineatura"`: tab a testo con sottolineatura rossa e senza titolo + * ripetuto sotto la barra (Squadra e Classifica CSI). Default `pillole`: restano le + * pill e i titoli usati dal Profilo. */ export function BarraSottosezioni({ voci, defaultId, + variante = "pillole", }: { voci: VoceSottosezione[]; defaultId?: string; + variante?: "pillole" | "sottolineatura"; }) { const [attiva, setAttiva] = useState(defaultId ?? voci[0]?.id ?? ""); const direzione = useRef(0); @@ -36,6 +41,7 @@ export function BarraSottosezioni({ voci.findIndex((v) => v.id === attiva), ); const voce = voci[indice] ?? voci[0]; + const sottolineatura = variante === "sottolineatura"; useEffect(() => { // `auto`: lo smooth competerebbe col tween del pannello sul main thread. @@ -58,11 +64,19 @@ export function BarraSottosezioni({ return (