React
Come aggiungere un blocco shadcn senza rompere il tema
Installa il blocco su un ramo, leggi i token che usa e controlla il diff: un blocco è codice del progetto, non un pacchetto versionato.
In sintesi
- Un blocco è un frammento di pagina copiato nel progetto: non ha versione, changelog o aggiornamento automatico.
- Prima di scrivere file usa `view` e `--dry-run`, poi leggi `git diff`: sono tre controlli che costano un minuto.
- Se il blocco usa colori fissi invece dei token, il tema scuro non lo raggiunge: correggi le classi, non il tema.
Risposta breve: aggiungi il blocco con npx shadcn@latest add su un ramo, dopo aver letto con view e --dry-run quali file e quali token tocca. Il tema si rompe quando il blocco porta classi con colori fissi o sovrascrive una primitiva già personalizzata.
Perché un blocco può rompere il tema
Un blocco non è un componente isolato: è una sezione completa, con layout, spaziature e spesso una palette propria. Se è stato costruito su token con nomi diversi dai tuoi, le classi esistono ma leggono valori che nel tuo CSS non ci sono.
La licenza cambia con il registry di origine: shadcn/ui è MIT, i blocchi di terze parti possono essere commerciali. La pagina /blocks mostra fonte e licenza prima dell'installazione, e questo è il primo filtro da applicare.
Il percorso sicuro, in cinque passi
- Crea un ramo: l'installazione deve essere annullabile con un comando.
- Leggi il contenuto del blocco con
view, senza scrivere nulla. - Prova l'installazione con
--dry-rune conta i file. - Installa davvero, poi guarda
git diffprima di aprire il browser. - Controlla la pagina in tema chiaro e scuro, non solo in quello in cui l'hai aperta.
# guarda i file del blocco prima di scriverli
npx shadcn@latest view ./hero-01.json
# prova l'installazione senza modificare il progetto
npx shadcn@latest add ./hero-01.json --dry-run
Se il blocco arriva da un URL o da un namespace, il comando cambia solo nel primo argomento: npx shadcn@latest add @eneui/hero. Il resto del flusso resta identico, e resta identico anche il rischio.
# installa davvero, su un ramo pulito
npx shadcn@latest add ./hero-01.json
# leggi cosa è cambiato prima di aprire il browser
git diff --stat
git diff --stat risponde a una domanda sola: quanti file ha toccato il comando e quali. Se compare un file in components/ui che non volevi modificare, il blocco dipende da una primitiva diversa dalla tua e va isolato.
Il controllo che conta: i token
{/* segue i token: cambia con il tema */}
{/* colori fissi: resta grigio anche in dark mode */}
La prima sezione segue il tema perché usa ruoli, non colori. La seconda porta una palette scritta a mano: in dark mode resta chiara, e non c'è nessun token da cambiare per correggerla. La correzione è nel blocco, non nel tema.
Cosa guardare nel diff
- Token nuovi o rinominati nel CSS globale.
- Dipendenze aggiunte al
package.json. - File in
components/uisovrascritti. - Classi con colori fissi, che il tema non raggiunge.
Blocchi con CSS proprio
Alcuni registry spediscono il blocco con un foglio di stile e variabili che nel tuo tema non esistono. Installalo, poi mappa quelle variabili in @theme inline: senza la mappatura le utility del blocco non vengono generate e la sezione resta senza colore. La sintassi di view, add e --dry-run è documentata nella pagina CLI di shadcn/ui (licenza MIT).
Limite dichiarato
Un blocco non è un pacchetto versionato: non riceve aggiornamenti e non ha un changelog. Se lo rigeneri con --overwrite sovrascrivi anche le modifiche fatte a mano, quindi la fonte di verità resta il tuo repository, non il registry.
Dove continuare
Il catalogo EneUI elenca 1.556 blocchi con anteprima, per esempio una sezione chart e una hero. Per capire come sono organizzati leggi i blocchi shadcn in catalogo; per il tema, dark mode senza un secondo design system; per i registry, token e namespace. Il confronto tra temi pronti è in gratis o premium.
Domande frequenti
Un blocco si aggiorna da solo?
No. I file vengono copiati nel progetto e non hanno un meccanismo di aggiornamento: per allinearti al registry devi reinstallare il blocco e rivedere il diff a mano.
Perché il blocco resta grigio in dark mode?
Perché usa classi con colori fissi, come bg-zinc-100, invece dei token semantici. Il tema scuro cambia i token, non le palette scritte a mano: la correzione è nel blocco.
Posso installare solo una parte del blocco?
Sì. Dopo l'installazione elimina i file o i sotto-componenti che non usi, purché nessun import del progetto continui a puntarci.
Cosa fa esattamente --dry-run?
Mostra i file che il comando scriverebbe e le dipendenze che aggiungerebbe, senza modificare il progetto. È il modo più rapido per scoprire se il blocco tocca componenti condivisi.
Il blocco può sovrascrivere i miei componenti ui?
Non per impostazione predefinita: il CLI chiede prima di sostituire un file esistente. Con --overwrite o -o la sostituzione avviene senza domande, quindi evitalo su un progetto già personalizzato.