Documentazione · src/config/blocks
I blocchi
Quarantasette file: la superficie che vede chi scrive contenuto. Un blocco dichiara i propri campi, il proprio viewMode di default, e riceve gratis lo stato e gli stili.
Quattro livelli, e cosa può stare dentro cosa
I blocchi sono divisi per livello — atomi, molecole, organismi, contenitori — e la divisione non è tassonomia: dice cosa è annidabile. Atomi, molecole e organismi si possono mettere dentro un altro blocco; i contenitori e i blocchi di sezione no, perché sono loro a contenere.
Il registro completo è quello che finisce in config.blocks di Payload. Da lì in poi la lista dei tipi disponibili in un campo è una scelta di configurazione, non una modifica al motore.
testo, icona, separatore, rich text, figura, progress, selettore di tema
azione, CTA, navigazione, toggle, gruppo di toggle
riferimento, dialogo, hover card
card, tabs, avatar, collapsible, swiper
il registro completo registrato in config.blocks
I quattro livelli, e chi puo annidarsi
const allNestableBlocks = [...atoms, ...molecules, ...organisms, ...containers] // registro COMPLETO: i nestabili piu i due che vivono solo nel contenuto di una sezione const allBlocks = [...allNestableBlocks, blockForm, blockAccordion]
Cosa comporta
// `accordion` e `form` NON sono annidabili: metterli nel `content` // di un altro blocco non da errore — Payload li scarta e salva un array vuoto
quali si possono annidare
La configurazione comune si inietta in un punto solo
Ogni blocco riceve, senza doverli dichiarare, il campo del viewMode, quello delle classi, il gruppo degli stili e il gruppo uiState — lo stato e i comportamenti dell’istanza. L’iniezione avviene in un punto unico, e il punto unico è la ragione per cui aggiungere un campo trasversale è un cambiamento di una riga invece che di quarantasette.
Il gruppo uiState è costruito PER BLOCCO: sa quali slice quel tipo di blocco espone, e le mostra. È una factory e non una costante proprio perché la risposta dipende dallo slug, e l’unico punto che lo conosce è l’iniezione.
l’iniezione della configurazione comune in ogni blocco
La configurazione comune, iniettata in un punto solo
const MANAGER_NAMES = new Set(['viewMode', 'className', 'slot', 'itemViewMode', 'reactions', 'uiState'])
il campo che nomina la forma
gli stili nominati
stato, trigger e conseguenze dell’istanza, costruiti per blocco
I blocchi, uno per uno
Ognuno dichiara i propri campi e il viewMode di default. Alcuni sono un solo campo (text), altri portano una configurazione ampia (swiper ha un centinaio di righe di opzioni). La lunghezza del file dice quanta configurazione quel blocco espone, non quanto è importante.
testo semplice e Lexical
icona, separatore, barra
immagini: con didascalia e circolare
link, bottone, comando — più la variante CTA
menu e selettore di tema
contenitori generici
i tre modi di mostrare una cosa alla volta
interruttore singolo e gruppo
il carosello, con la sua configurazione estesa
pannello al passaggio e dialogo modale
un documento riferito: menu, form, composizioni, collection del progetto
il form e i suoi controlli
le miniature dei blocchi per l’interfaccia: SVG in data-URI, nessuna richiesta
Le sezioni e i form
Le sezioni sono blocchi strutturali di primo livello: una inline (scritta nella pagina) e una per riferimento (scritta una volta nella collection sections e riusata). Sono le uniche che il layout di una pagina accetta direttamente.
I blocchi form sono a parte perché un controllo dichiara cose che gli altri blocchi non hanno — nome, tipo, validazione — e perché i figli ammessi sono solo quelli che un form può contenere.
la sezione scritta nella pagina
la sezione riusata da sections
il registro delle sezioni
il controllo generico
i controlli con opzioni
il registro e i figli ammessi
I blocchi dell’editor
Tre blocchi che esistono solo per la AdminBar: la sezione modificabile e il suo albero. Stanno in una sottocartella con un registro proprio perché non devono comparire fra i blocchi che si scelgono scrivendo contenuto.
la sezione, in versione editabile
l’albero delle sezioni
il registro dell’editor