Affina Profilo e Squadra: logo home, tab Docs uguali, separatore classifica.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -21,8 +21,9 @@ const transizioneTab = { type: "tween" as const, duration: 0.16, ease: [0.25, 0.
|
|||||||
*
|
*
|
||||||
* `variante="sottolineatura"`: pillola piena sulla tab attiva (Squadra e Classifica CSI);
|
* `variante="sottolineatura"`: pillola piena sulla tab attiva (Squadra e Classifica CSI);
|
||||||
* su mobile la sola barra tab scorre in orizzontale senza allargare la pagina.
|
* su mobile la sola barra tab scorre in orizzontale senza allargare la pagina.
|
||||||
* Default `pillole`: tab a larghezza naturale (Profilo). Il titolo ripetuto sotto la
|
* Default `pillole`: tab a larghezza uguale (basata sulla etichetta più lunga); se non
|
||||||
* barra non viene mai mostrato: l’etichetta è già nella tab.
|
* entrano nella viewport la barra scorre in orizzontale (Profilo). Il titolo ripetuto sotto
|
||||||
|
* la barra non viene mai mostrato: l’etichetta è già nella tab.
|
||||||
*/
|
*/
|
||||||
export function BarraSottosezioni({
|
export function BarraSottosezioni({
|
||||||
voci,
|
voci,
|
||||||
@@ -33,7 +34,7 @@ export function BarraSottosezioni({
|
|||||||
voci: VoceSottosezione[];
|
voci: VoceSottosezione[];
|
||||||
defaultId?: string;
|
defaultId?: string;
|
||||||
variante?: "pillole" | "sottolineatura";
|
variante?: "pillole" | "sottolineatura";
|
||||||
/** Tab a larghezza uguale che riempiono la barra (es. Campionato). */
|
/** Tab a larghezza uguale che riempiono la barra (es. Campionato, Squadra). */
|
||||||
riempiLarghezza?: boolean;
|
riempiLarghezza?: boolean;
|
||||||
}) {
|
}) {
|
||||||
const [attiva, setAttiva] = useState(defaultId ?? voci[0]?.id ?? "");
|
const [attiva, setAttiva] = useState(defaultId ?? voci[0]?.id ?? "");
|
||||||
@@ -89,9 +90,13 @@ export function BarraSottosezioni({
|
|||||||
role="tablist"
|
role="tablist"
|
||||||
aria-label="Sottosezioni"
|
aria-label="Sottosezioni"
|
||||||
className={cn(
|
className={cn(
|
||||||
"flex flex-nowrap",
|
riempiLarghezza
|
||||||
riempiLarghezza ? "w-full" : "w-max min-w-full",
|
? "flex w-full flex-nowrap"
|
||||||
sottolineatura ? "gap-1 px-2 py-1.5" : "snap-x snap-mandatory gap-1.5 px-5",
|
: sottolineatura
|
||||||
|
? "flex w-max min-w-full flex-nowrap"
|
||||||
|
: // Pillole: colonne uguali alla voce più lunga; overflow → scroll sul wrapper.
|
||||||
|
"grid w-max min-w-full grid-flow-col auto-cols-[1fr]",
|
||||||
|
sottolineatura ? "gap-1 px-2 py-1.5" : "gap-1.5 px-5",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{voci.map((v) => {
|
{voci.map((v) => {
|
||||||
@@ -111,7 +116,11 @@ export function BarraSottosezioni({
|
|||||||
}}
|
}}
|
||||||
className={cn(
|
className={cn(
|
||||||
"min-h-11 touch-manipulation whitespace-nowrap text-sm font-bold uppercase tracking-wide transition-colors",
|
"min-h-11 touch-manipulation whitespace-nowrap text-sm font-bold uppercase tracking-wide transition-colors",
|
||||||
riempiLarghezza ? "min-w-0 flex-1" : "shrink-0",
|
riempiLarghezza
|
||||||
|
? "min-w-0 flex-1"
|
||||||
|
: sottolineatura
|
||||||
|
? "shrink-0"
|
||||||
|
: "w-full",
|
||||||
sottolineatura
|
sottolineatura
|
||||||
? cn(
|
? cn(
|
||||||
"rounded-xl px-1 py-2.5 text-center",
|
"rounded-xl px-1 py-2.5 text-center",
|
||||||
@@ -120,7 +129,7 @@ export function BarraSottosezioni({
|
|||||||
: "text-muted-foreground",
|
: "text-muted-foreground",
|
||||||
)
|
)
|
||||||
: cn(
|
: cn(
|
||||||
"snap-center rounded-full px-3.5 py-2",
|
"rounded-full px-3.5 py-2 text-center",
|
||||||
selezionata
|
selezionata
|
||||||
? "bg-accent text-accent-foreground shadow-pop"
|
? "bg-accent text-accent-foreground shadow-pop"
|
||||||
: "bg-secondary text-muted-foreground",
|
: "bg-secondary text-muted-foreground",
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export function Card({
|
|||||||
/**
|
/**
|
||||||
* Accesso al profilo in alto a destra: la BottomNav ha quattro voci e questa è
|
* Accesso al profilo in alto a destra: la BottomNav ha quattro voci e questa è
|
||||||
* l'unica porta verso `/profilo`. Sulla pagina del profilo si passa `azione` a
|
* l'unica porta verso `/profilo`. Sulla pagina del profilo si passa `azione` a
|
||||||
* `PageHeader` per rimetterci il logo — sarebbe un link a sé stessa.
|
* `PageHeader` con il logo che porta alla home.
|
||||||
*
|
*
|
||||||
* Usa `useGiocatoreBase` (sola anagrafica) e non `useIo`: qui serve solo id e
|
* Usa `useGiocatoreBase` (sola anagrafica) e non `useIo`: qui serve solo id e
|
||||||
* iniziali, mentre `useIo` calcola l'intera rosa con statistiche (MVP, pagelle,
|
* iniziali, mentre `useIo` calcola l'intera rosa con statistiche (MVP, pagelle,
|
||||||
|
|||||||
@@ -130,11 +130,15 @@ function Profilo() {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* Qui il link al profilo sarebbe un link a sé stessa: torna il logo. */}
|
{/* Sul profilo il logo torna in home al posto del link al profilo. */}
|
||||||
<PageHeader
|
<PageHeader
|
||||||
titolo={g.nome}
|
titolo={g.nome}
|
||||||
sottotitolo={`#${g.numero} · ${g.ruolo}`}
|
sottotitolo={`#${g.numero} · ${g.ruolo}`}
|
||||||
azione={<TeamLogo src="/logo-nerorosso.svg" className="h-14 w-14" />}
|
azione={
|
||||||
|
<Link to="/" aria-label="Vai alla home" className="premi shrink-0 rounded-2xl">
|
||||||
|
<TeamLogo src="/logo-nerorosso.svg" className="h-14 w-14" />
|
||||||
|
</Link>
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Reveal className="-mt-6 px-5">
|
<Reveal className="-mt-6 px-5">
|
||||||
@@ -225,7 +229,7 @@ function Profilo() {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: "documenti",
|
id: "documenti",
|
||||||
label: "Documenti",
|
label: "Docs",
|
||||||
contenuto: <ProfiloAmministrativo giocatoreId={g.id} conTendina={false} />,
|
contenuto: <ProfiloAmministrativo giocatoreId={g.id} conTendina={false} />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ function Squadra() {
|
|||||||
<StatTile valore={team.muri} label="Muri squadra" />
|
<StatTile valore={team.muri} label="Muri squadra" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div className="border-t border-border pt-4">
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
onClick={() => setFiltroAperto(true)}
|
onClick={() => setFiltroAperto(true)}
|
||||||
@@ -287,7 +287,7 @@ function Squadra() {
|
|||||||
<div key={g.id} className="rounded-2xl bg-card p-3 shadow-card">
|
<div key={g.id} className="rounded-2xl bg-card p-3 shadow-card">
|
||||||
<div className="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3">
|
<div className="grid grid-cols-[minmax(0,1fr)_auto] items-center gap-3">
|
||||||
<div className="flex min-w-0 items-center gap-3">
|
<div className="flex min-w-0 items-center gap-3">
|
||||||
<span className="grid h-9 w-9 shrink-0 place-items-center rounded-full bg-secondary font-display text-base">
|
<span className="grid h-10 w-10 shrink-0 place-items-center rounded-full bg-secondary font-display text-lg">
|
||||||
{i + 1}
|
{i + 1}
|
||||||
</span>
|
</span>
|
||||||
<div className="min-w-0">
|
<div className="min-w-0">
|
||||||
|
|||||||
Reference in New Issue
Block a user