Contratto del renderer UI dei blocchi
La fase 1 definisce il contratto pubblico di rendering previsto tra i layout, gli slot e i tipi di blocco del CMS e le primitive di WebBlocks UI già distribuite e caricate dal layout pubblico. Questa fase è solo documentale. Non riscrive ancora i renderer.
Primitive verificate di WebBlocks UI
Verificate rispetto agli asset effettivamente distribuiti e utilizzati dal CMS:
- CSS:
https://cdn.jsdelivr.net/gh/fklavyenet/webblocks-ui@v2.7.12/packages/webblocks/dist/webblocks-ui.css - CSS delle icone:
https://cdn.jsdelivr.net/gh/fklavyenet/webblocks-ui@v2.7.12/packages/webblocks/dist/webblocks-icons.css - JS:
https://cdn.jsdelivr.net/gh/fklavyenet/webblocks-ui@v2.7.12/packages/webblocks/dist/webblocks-ui.js
Primitive e pattern confermati:
wb-content-shellwb-content-headerwb-content-bodywb-content-footerwb-promowb-calloutwb-link-listwb-statwb-gallerywb-alertwb-rich-textwb-rich-text-readablewb-rich-text-compactwb-rich-text-loosewb-btnwb-gridwb-grid-2wb-grid-3wb-grid-4wb-stackwb-gap-1wb-gap-2wb-gap-3wb-gap-4wb-gap-6wb-gap-8
Primitive mancanti e lacune dell'interfaccia per ora:
wb-prose— NON TROVATO negli asset distribuiti di WebBlocks UI. Consideratelo una lacuna dell'interfaccia e non fateci affidamento per il layout della fase 2 o per l'allineamento dei renderer.wb-promo-muted— NON TROVATO negli asset distribuiti di WebBlocks UI.wb-promo-accent— NON TROVATO negli asset distribuiti di WebBlocks UI.wb-cluster-3— NON TROVATO negli asset distribuiti di WebBlocks UI.
Hook JS distribuiti e verificati, rilevanti per l'attuale rendering pubblico:
data-wb-toggle="dropdown"data-wb-toggle="modal"data-wb-gallery-target#wb-overlay-root
Modalità di layout della fase 2B
Le pagine pubbliche utilizzano ora modalità esplicite di composizione del layout:
stackè la modalità predefinita.sidebarviene utilizzata quando la pagina ha uno slot di barra laterale popolato.contentè riservata a future pagine di documentazione o editoriali con metadati espliciti e non deve essere dedotta dall'URL o dal titolo.wb-content-shellnon è un wrapper universale e dovrebbe comparire soltanto quando i metadati della pagina supportano esplicitamente una presentazione di tipo content-shell.
Matrice
| Blocco del CMS | Primitiva/pattern di WebBlocks UI | Stato | Priorità | Azione successiva |
|---|---|---|---|---|
| layout pubblico | wb-public-body, wb-public-main, wb-container | accettabile | P0 shell/layout | mantenere stabile la shell e avvicinare il chrome specifico degli slot alle primitive documentate |
| slot dell'intestazione | wb-section, wb-container, primitive di navigazione/elenco | debole | P0 shell/layout | allineare il chrome personalizzato dell'intestazione alle regole documentate della shell |
| slot principale | wb-public-main, wb-container, wb-content-shell | accettabile | P0 shell/layout | aggiungere l'uso di wb-content-shell dove il contenuto si legge come articolo o documentazione |
| slot della barra laterale | wb-grid, wb-stack, facoltativamente un aside con wb-content-shell | debole | P0 shell/layout | smettere di trattare le barre laterali generiche come finte barre laterali applicative |
| slot del piè di pagina | wb-section, wb-container, wb-grid, primitive di elenco di link/navigazione | accettabile | P0 shell/layout | mantenere il piè di pagina sulle primitive di layout distribuite ed evitare classi personalizzate aggiuntive |
| heading | legacy rimosso | ritirato | P0 rimosso | non reintrodurlo; header è il blocco canonico di intestazione/titolo |
| text | testo del corpo nel ritmo di wb-stack | accettabile | P2 qualità dei contenuti | mantenere un output semplice ed evitare wrapper tipografici su misura |
| rich-text | wb-rich-text wb-rich-text-readable | accettabile | P2 qualità dei contenuti | mantenere il testo del corpo sicuro circoscritto alla primitiva di testo ricco distribuita |
| html | HTML grezzo attendibile nel wrapper del blocco pubblico | accettabile | P3 successivo/personalizzato | mantenerlo limitato all'uso editoriale/amministrativo attendibile e spostare qualsiasi contenuto di overlay distribuito nella radice di overlay condivisa della pagina |
| section | wb-section, facoltativamente wb-promo | accettabile | P1 marketing pubblico/docs | mantenere stabile la sezione predefinita e riservare la semantica promo a varianti esplicite |
| columns | wb-grid, wb-grid-2, wb-grid-3, wb-grid-4, wb-link-list | accettabile | P1 marketing pubblico/docs | mantenere esplicite le varianti guidate dal genitore ed evitare di reintrodurre card wrapper forzate |
| column_item | cella semplice, wb-card, wb-stat o voce di elenco di link | accettabile | P1 marketing pubblico/docs | mantenere il rendering della voce guidato dalla mappatura columns.variant del genitore |
| callout | wb-alert, facoltativamente wb-callout | accettabile | P2 qualità dei contenuti | ampliare la mappatura delle varianti se esiste un callout distribuito per barra laterale/aiuto |
| quote | blockquote semantico, facoltativamente una card incorniciata | accettabile | P2 qualità dei contenuti | rendere la cornice condizionale anziché sempre simile a una card |
| faq | semplice card domanda/risposta | accettabile | P3 personalizzato/ripiego | mantenere il trattamento stabile a card singola e lasciare la divulgazione raggruppata ai blocchi accordion |
| tabs | pattern di schede interattive | debole | P2 qualità dei contenuti | rinviare finché non esiste un vero pattern di schede distribuito |
| button | varianti di wb-btn | debole | P1 marketing pubblico/docs | mappare tutte le varianti supportate dal CMS e aggiungere la direzione del gruppo di pulsanti |
| image | figure, img, figcaption semantici | debole | P2 qualità dei contenuti | rispettare il comportamento del link e aggiungere la cornice media solo quando serve |
| gallery | wb-gallery più il modale della radice di overlay | accettabile | P1 marketing pubblico/docs | continuare a usare gli hook di galleria distribuiti e la radice di overlay centrale, mantenendo il testo introduttivo fuori dal blocco Gallery stesso |
| download | wb-btn oppure CTA card con pulsante | accettabile | P2 qualità dei contenuti | aggiungere in seguito varianti esplicite card/download |
| navigation-auto | primitive di navigazione/elenco, facoltativamente wb-link-list | accettabile | P1 marketing pubblico/docs | mantenere semplici i menu semplici e riservare le barre laterali di documentazione a vere shell di documentazione |
| menu | alias legacy di navigation-auto | accettabile | P3 successivo/personalizzato | mantenerlo solo per i dati migrati |
| contact_form | primitive di form, wb-btn, wb-alert | accettabile | P1 marketing pubblico/docs | mantenere i campi strutturati dell'editor ed evitare form in HTML grezzo |
| hero | shell di marketing wb-promo | accettabile | P1 marketing pubblico/docs | mantenere l'hero di primo livello, tradotto e orientato all'azione tramite blocchi pulsante figli |
| card-grid | pattern a griglia di card | debole | P1 marketing pubblico/docs | mantenere stabile l'attuale griglia di card strutturata e rivedere in seguito una modellazione di primo livello |
| showcase-list | pattern vetrina/galleria | debole | P3 successivo/personalizzato | formalizzarlo come blocco vetrina di primo livello oppure mantenerlo personalizzato |
| contact-info | elenco di link / card con dati di contatto | debole | P2 qualità dei contenuti | promuoverlo a primo livello solo se gli editor ne hanno bisogno oltre le pagine precaricate |
| code | pattern di blocco di codice | mancante | P2 qualità dei contenuti | aggiungere un supporto di primo livello nel renderer e nell'amministrazione oppure mantenere deliberatamente il ripiego |
| list | primitiva di elenco | accettabile | P1 marketing pubblico/docs | mantenere l'editor dedicato basato sulle righe e preservare la compatibilità con le impostazioni di stile di ripiego legacy |
| table | pattern wb-table | accettabile | P1 marketing pubblico/docs | mantenere l'editor dedicato basato sulle righe e preservare le righe di impostazioni di stile di ripiego legacy |
| accordion | pattern di divulgazione semantico | accettabile | P1 marketing pubblico/docs | mantenere il renderer semantico di primo livello con blocchi figli come voci |
| feature-grid | pattern delegato columns.variant = cards | accettabile | P1 marketing pubblico/docs | mantenerlo pubblicato come alias di compatibilità, ma preferire columns per i nuovi contenuti strutturati |
| stats / metric-card | pattern delegato columns.variant = stats | debole | P1 marketing pubblico/docs | mantenere onesti gli alias e aggiungere veri contratti specifici per le statistiche solo se diventano di proprietà del prodotto |
| logo-cloud | griglia di loghi / striscia di marchi | debole | P1 marketing pubblico/docs | aggiungere una gestione strutturata dei media se resta parte del prodotto |
| testimonial | pattern di testimonianza delegato alla citazione | debole | P2 qualità dei contenuti | mantenere onesto il comportamento dell'alias, a meno che un contratto autonomo di testimonianza non diventi di proprietà del prodotto |
| timeline | pattern di linea temporale | debole | P2 qualità dei contenuti | promuoverlo solo se i contenuti di linea temporale sono un caso d'uso ricorrente reale |
| pricing | pattern card/griglia di prezzi | debole | P1 marketing pubblico/docs | renderlo di primo livello solo con piani e funzionalità strutturati |
| toc | navigazione dell'indice dei contenuti | accettabile | P1 marketing pubblico/docs | mantenere la raccolta dell'indice della stessa pagina solo sui blocchi header con ancora esplicita |
| breadcrumb | navigazione breadcrumb | mancante | P2 qualità dei contenuti | rinviare finché la shell della pagina pubblica non ne ha davvero bisogno e non è confermato un pattern distribuito |
| cookie-notice | pattern condiviso di banner/modale sulla privacy | mancante | P3 successivo/personalizzato | mantenere l'interfaccia di consenso nel layout pubblico anziché nei renderer dei blocchi |
Layout della pagina e slot
Layout pubblico
- Il layout pubblico possiede la shell dell'intera pagina e dovrebbe mantenere il contratto di base
<body class="wb-public-body">. Page Layoutè il nome rivolto all'editor per la modalità della shell pubblica esterna.- Il campo di compatibilità memorizzato resta
public_shellin questa fase, ma i Page Layout sono ora record gestiti a livello di installazione nell'area di amministrazione. - Page Layout può aggiungere a quella classe di body di base classi validate come
layout-defaultolayout-docs. - Le regioni principali della pagina dovrebbero essere costruite anzitutto con le primitive di layout distribuite di WebBlocks UI:
wb-public-main,wb-container,wb-section,wb-stack,wb-grid. wb-content-shell,wb-content-header,wb-content-bodyewb-content-footerappartengono all'area del contenuto principale quando la pagina si legge come articolo, guida, documentazione o contenuto editoriale. Non sono il chrome di intestazione o di piè di pagina dell'intero sito.#wb-overlay-rootè l'unico punto di montaggio condiviso per gli overlay pubblici, come il visualizzatore della galleria, il modale di ricerca pubblica e il modale delle preferenze sui cookie.- I layout pubblici possiedono quel wrapper; blocchi, partial e HTML attendibile possono contribuire con figli di overlay, ma non devono renderizzare contenitori radice di overlay concorrenti.
- L'HTML importato attendibile che utilizza gli hook di attivazione distribuiti di WebBlocks UI deve preservare il contratto tra trigger e destinazione. Se un trigger all'interno del contenuto principale importato punta a un modale, un drawer, un popover o un visualizzatore di galleria esterno a
<main>, l'estrattore deve spostare la destinazione referenziata nel#wb-overlay-rootcondiviso invece di scartarla. - Quando il CMS pre-renderizza un livello di dialogo condiviso sotto
#wb-overlay-root, quel livello deve restare non nascosto affinché WebBlocks UIv2.7.12possa portare al suo interno le destinazioni attendibili di modali e gallerie senza lasciarle dentro un antenato nascosto.
Card
cardpossiedearticle.wb-cardcome radice del renderer, condata-wb-public-block-type="card".card_headerpossiedediv.wb-card-header, condata-wb-public-block-type="card-header".card_bodypossiedediv.wb-card-body, condata-wb-public-block-type="card-body".card_footerpossiedediv.wb-card-footer, condata-wb-public-block-type="card-footer".- Le regioni della Card dovrebbero renderizzare direttamente le proprie radici e non devono ricevere wrapper pubblici generici aggiuntivi.
- Il normale contratto della Card prevede contenuti figli componibili attraverso quelle tre regioni, non un renderer promo o media integrato.
- Le righe Card salvate in passato possono ancora utilizzare un renderer di ripiego minimale, ma soltanto quando la Card non ha regioni Card figlie.
wb-sidebarè riservato a una vera shell di navigazione per documentazione o applicazioni. Le barre laterali generiche di marketing o editoriali dovrebbero restare normale contenutoaside, composto conwb-grid,wb-stack, card, callout ed elenchi di link.
Wrapper degli slot
- I wrapper di slot sono comportamento deterministico di runtime, non impostazioni editoriali libere a livello di pagina.
- L'handle del layout di pagina si risolve prima su un record gestito Page Layout quando disponibile, e i Page Layout Slots gestiti di quel record vengono poi usati per risolvere elemento, classi, id e frammenti strutturali fidati del wrapper di slot.
- Il confronto in Edit Page e
Add Missing Layout Slotscambiano la struttura della pagina solo creando i Page Slots mancanti; non cambiano la proprietà del wrapper pubblico. - I campi HTML fidati di Page Layout Slot esistono solo per la struttura di layout adiacente al wrapper. Non sono una superficie per script, e i blocchi restano proprietari delle radici di contenuto renderizzate dentro il wrapper di slot.
- Quando uno slot di intestazione pubblico predefinito contiene solo un blocco Navbar, il CMS promuove il wrapper di slot alla radice
nav.wb-navbar, così il comportamento sticky di WebBlocks UI non è vincolato da un riquadro di intestazione padre troppo basso. wb-navbar--staticresta la classe di esclusione per i blocchi Navbar pubblici non sticky.defaultmappaheader,main,sidebarefootersu wrapper semantici e ricade sudivper gli slot sconosciuti.docsmappaheadersul wrapper della navbar dei docs,sidebarsul wrapper della barra laterale dei docs emainsul wrapper principale dei docs, mantenendowb-dashboard-shelldi proprietà della pagina.- I layout integrati
defaultedocsconservano definizioni gestite di ripiego, così il rendering resta stabile prima delle righe di slot relazionali o in loro assenza. - I blocchi vengono renderizzati dentro il wrapper di slot risolto e non possiedono il markup dello shell di pagina.
- Il comportamento sticky della navbar appartiene a
.wb-navbar. Il CMS non dovrebbe aggiungere una seconda classe sticky specifica della navbar al wrapper di slot né all'output del blocco navbar. - Quando uno slot di pagina usa
source_type = shared_slot, lo Shared Slot contribuisce solo l'albero di blocchi interno. Non deve renderizzare un proprio shell di pagina né un proprio wrapper di slot. - La compatibilità dello Shared Slot viene verificata prima del rendering: l'ambito del sito deve corrispondere, l'opzionale
public_shelldeve corrispondere esattamente all'handle del layout della pagina consumatrice e l'opzionaleslot_namedeve corrispondere allo slot della pagina consumatrice. - I wrapper pubblici generici dei blocchi devono restare non semantici e non devono essere usati per blocchi di layout o proprietari della radice.
- Lo shell di pagina possiede lo shell esterno, i wrapper di slot possiedono il wrapper di regione e i blocchi proprietari della radice possiedono il proprio vero elemento radice pubblico.
- I blocchi proprietari della radice devono collocare
data-wb-public-block-typesulla propria radice di renderer invece di ricevere un ulteriore wrapper esternowb-public-block.
Slot header
- Mappatura prevista: regione
headercostruita conwb-sectionewb-container, con all'interno le primitive di navigazione ed elenco fornite. - Usate
wb-stackowb-gridper il ritmo interno, a seconda che l'intestazione si legga come banner impilato o come barra di navigazione orizzontale. - La navigazione principale o legale può essere renderizzata tramite
navigation-autoomenu, ma lo slot non dovrebbe richiedere ai renderer di blocco di emettere HTML specifico dell'intestazione. - L'implementazione attuale è debole perché lo slot di intestazione possiede diverse classi di chrome
wb-public-*personalizzate. La fase 2A mantiene intatto lo shell esistente diwb-sectionewb-containere rimanda a un passaggio successivo qualsiasi riduzione sicura del chrome di intestazione personalizzato.
Slot main
- Mappatura prevista:
<main class="wb-public-main">è la regione di contenuto principale. - Shell predefinito:
wb-public-main > .wb-container > .wb-stackper le normali pile di blocchi. - Shell editoriale/docs:
wb-public-main > .wb-container > .wb-content-shellcon sezioni opzionaliwb-content-header,wb-content-bodyewb-content-footer. - Il layout dei blocchi annidati dovrebbe usare
wb-stack,wb-stack-,wb-gap-,wb-gridewb-grid-*prima di qualsiasi classe wrapper personalizzata. - L'implementazione attuale è accettabile perché dà già allo slot main un wrapper pubblico stabile e un ritmo dei blocchi. La fase 2B aggiunge modalità di layout esplicite, così
wb-content-shellresta riservato invece di essere imposto a ogni pagina.
Slot sidebar
- Mappatura prevista:
asideadiacente al contenuto principale tramitewb-grido un'altra primitiva di layout fornita. - Il contenuto predefinito dovrebbe essere uno
wb-stackdi blocchi di supporto, eventualmente raggruppati in unwb-cardo unwb-calloutse ciò corrisponde al contenuto del blocco. wb-sidebardovrebbe essere usato solo quando la pagina renderizza esplicitamente uno shell di navigazione docs/app, non per generici contenuti di marketing di supporto.- L'implementazione attuale è debole perché usa ancora uno shell
wb-public-sidebarpersonalizzato. La fase 2A rimuove il wrapper esternowb-cardforzato, così i blocchi interni decidono se renderizzarsi come card o come callout.
Slot footer
- Mappatura prevista: regione
footercostruita conwb-section,wb-containerewb-gridowb-stack. - Gli elenchi di navigazione dovrebbero usare semplici primitive di navigazione/elenco oppure
wb-link-listquando il pattern di interfaccia fornito è adatto. - I blocchi di contenuto di supporto possono essere renderizzati normalmente dentro il piè di pagina; non dovrebbero richiedere renderer di blocco specifici del piè di pagina.
- L'implementazione attuale è accettabile perché resta vicina alle primitive di layout fornite, con solo un minimo di chrome di piè di pagina specifico del CMS attorno al controllo delle impostazioni dei cookie.
Blocchi di contenuto principali
`header`
- Slug del blocco nel CMS:
header - Campi di amministrazione:
text,level,anchor - Campi traducibili: testo di
title - Campi condivisi:
variant/level, impostazione di allineamento, anchor - Output previsto in WebBlocks UI:
<h1>-<h6>semantico in base alevel;idopzionale dall'anchor condiviso; nessun wrapper inventato oltre all'elemento di intestazione. - Implementazione attuale: accettabile
- Contratto del TOC: gli anchor condivisi espliciti sono l'unica fonte supportata per il TOC, e il TOC pubblico raccoglie i blocchi
headercon anchor dallo stesso albero di pagina renderizzato, inclusi i discendenti di layout annidati. - Note per successivi miglioramenti di renderer/amministrazione: mantenere esplicito il comportamento degli anchor, conservare l'output privo di wrapper e mantenere la semantica dei titoli in capo a
Headerinvece che a un blocco legacy parallelo.
`text`
- Slug del blocco nel CMS:
text - Campi di amministrazione:
content - Campi traducibili:
content - Campi condivisi: nessuno
- Output previsto in WebBlocks UI: paragrafo o testo corrente ordinario; usate un ritmo
wb-stackfornito solo quando serve per più nodi di testo. - Implementazione attuale: accettabile
- Nota di mappatura import/sync: usate
text/plain_textsolo per testo corrente semplice senza markup di formattazione inline sicuro. - Note per successivi miglioramenti di renderer/amministrazione: mantenere semplice questo blocco ed evitare di trasformarlo in uno pseudo blocco di testo ricco.
`rich-text`
- Slug del blocco nel CMS:
rich-text - Campi di amministrazione:
content - Campi traducibili:
content - Campi condivisi: nessuno
- Output previsto in WebBlocks UI: testo corrente sanificato racchiuso in
wb-rich-text wb-rich-text-readableusando la primitiva di testo ricco fornita da WebBlocks UI. - Implementazione attuale: accettabile
- Modello di archiviazione: Rich Text salva un frammento HTML sicuro e limitato, non marcatori Markdown. I tag consentiti sono
p,strong,em,code,a[href],ul,ol,liebrquando serve. Classi, stili, attributi di evento, titoli, media, tabelle, pulsanti e HTML non supportato vengono rimossi durante la sanificazione. - Comportamento in amministrazione: l'editor di amministrazione è una superficie
contenteditablepriva di dipendenze, sincronizzata con un campo di form nascosto. È volutamente limitato alla formattazione del testo corrente e non sostituisce Header, Button, Media, Table, Layout, HTML o altri tipi di blocco dedicati. - Nota di mappatura import/sync: quando il testo corrente importato contiene formattazione inline sicura, più paragrafi o elenchi semplici, dovrebbe diventare
rich-textanzichétext. - Note per successivi miglioramenti di renderer/amministrazione: mantenere Rich Text limitato al testo editoriale sicuro.
wb-rich-textresta la primitiva tipografica pubblica. Titoli, media, pulsanti, tabelle, layout e composizione di HTML grezzo restano blocchi o funzionalità separati.
`html`
- Slug del blocco nel CMS:
html - Campi di amministrazione:
content - Campi traducibili:
content - Campi condivisi: nessuno
- Output previsto in WebBlocks UI: HTML fidato grezzo dentro il normale wrapper pubblico del blocco.
- Implementazione attuale: accettabile
- Note per successivi miglioramenti di renderer/amministrazione: riservare questo blocco a un uso editoriale/amministrativo fidato, documentare chiaramente il rischio XSS e non far dipendere gli editor ordinari da HTML WebBlocks incollato per i contenuti normali. Quando l'HTML fidato include markup di overlay fornito da WebBlocks UI, lo shell della pagina pubblica dovrebbe sollevare quel contenuto di overlay interno nel
#wb-overlay-rootcondiviso e di proprietà della pagina, invece di renderizzare radici di overlay duplicate inline.
`section`
- Slug del blocco nel CMS:
section - Campi di amministrazione:
title,variant,content - Campi traducibili:
title,content - Campi condivisi:
variant - Output previsto in WebBlocks UI: il wrapper predefinito usa
wb-section; le variantipromoesplicite possono mappare suwb-promoquando il pattern fornito è adatto; le azioni CTA dovrebbero provenire da blocchi figli, non da HTML grezzo. - Implementazione attuale: accettabile
- Regola del wrapper: il blocco
Sectionpossiede la vera radice<section class="wb-section ...">e portadata-wb-public-block-type="section"su quell'elemento. I wrapper pubblici generici dei blocchi non devono avvolgerlo. - Note per successivi miglioramenti di renderer/amministrazione: mantenere stabili le sezioni predefinite, trattare
promocome variante di marketing esplicita e mantenere strutturati i pulsanti e i gruppi di pulsanti figli. - Comportamento della CTA promo: i blocchi
buttonfigli vengono renderizzati inwb-promo-actions; i figli non pulsanti continuano a essere renderizzati fuori dalla riga CTA.
Regola dei wrapper di layout
header,section,container,grid,cluster,cardecontent_headersono blocchi di layout o di shell di contenuto che possiedono la propria radice e non dovrebbero ricevere un wrapper pubblico generico dal loop pubblico dei blocchi.Sectionpossiede la radice semantica<section class="wb-section">quando serve.Container,GrideClusterpossiedono le proprie radici di layout non semantiche, a meno che uno specifico renderer non scelga intenzionalmente diversamente.Cardpossiede la propria radice<article class="wb-card">.Card Header,Card BodyeCard Footerpossiedono le rispettive radici di regione di WebBlocks UI e insieme definiscono la normale struttura pubblica di Card.Headerpossiede la propria radice di titolo semantica, come<h1>o<h2>.Content Headerpossiede la propria radice semantica<header class="wb-content-header">e rende sempre il proprio titolo come<h1 class="wb-content-title">.- La standardizzazione della fase 3 di Layout + Card mantiene allineati questi blocchi proprietari della radice tra i partial del renderer,
Block::ownsPublicRoot(), il registro dei contratti, la modale di contratto in sola lettura dell'amministrazione e il comando di audit dei contratti.
`hero`
- Slug del blocco nel CMS:
hero - Campi di amministrazione:
subtitle,title,content,variant - Campi traducibili:
subtitlecome occhiello,titlecome titolo,contentcome testo di supporto - Campi condivisi:
variant, struttura dei blocchi figli - Output previsto in WebBlocks UI:
wb-promo > .wb-promo-copyconwb-eyebrow,wb-promo-title,wb-promo-textewb-promo-actionsopzionali - Implementazione attuale: accettabile
- Note per successivi miglioramenti di renderer/amministrazione: le azioni CTA dell'hero dovrebbero provenire da blocchi
buttonfigli, l'HTML grezzo non dovrebbe essere usato per il normale contenuto dell'hero e le impostazioni hero importate legacy dovrebbero agire solo come ripiego quando i campi tradotti canonici sono vuoti. - Comportamento della CTA dell'hero: i blocchi
buttonfigli vengono renderizzati inwb-promo-actions; i figli non pulsanti sono ignorati nella riga CTA. - Regola del wrapper:
heroora possiede la propria radice di renderer e vi collocadata-wb-public-block-type="hero", quindi il loop dello slot non deve aggiungere un wrapper pubblico esterno generico.
`columns`
- Slug del blocco nel CMS:
columns - Campi di amministrazione:
title,subtitle,content,variant,column_itemsripetibile - Campi traducibili:
title,subtitle,content, testo deicolumn_itemfigli - Campi condivisi:
variant, ordinamento dei figli, link dei figli, struttura - Output previsto in WebBlocks UI: contenitore di layout per figli ripetibili tramite
wb-grid,wb-grid-2,wb-grid-3,wb-grid-4oppure unwb-gridgenerico quando il numero è dinamico. - Implementazione attuale: accettabile
- Mappatura delle varianti:
cards-> contenitore a griglia con ogni figlio renderizzato comewb-card > .wb-card-bodyplain-> contenitore a griglia con contenuto figlio impilato e senza cornicestats-> contenitore a griglia con gli elementi figli renderizzati comewb-statlinks->wb-link-listcon gli elementi figli renderizzati come righe di elenco di link- Note per successivi miglioramenti di renderer/amministrazione: mantenere nel blocco padre la responsabilità della scelta di presentazione, così il contenuto esistente di
column_itempuò restare semplice e riutilizzabile.
`column_item`
- Slug del blocco nel CMS:
column_item - Campi di amministrazione:
title,url,content - Campi traducibili:
title,content - Campi condivisi:
url - Output previsto in WebBlocks UI: una cella di griglia che può essere renderizzata come contenuto semplice,
wb-card,wb-stat,wb-link-list-itemo altro trattamento di cella fornito, a seconda della variante del padre o dell'elemento. - Implementazione attuale: accettabile
- Note per successivi miglioramenti di renderer/amministrazione:
column_itemresta una semplice unità di contenuto e ora delega la presentazione pubblica al bloccocolumnspadre. L'attuale mappaturastatsè volutamente conservativa perché non esiste ancora un campo di valore numerico dedicato.
`cta`
- Slug del blocco CMS:
cta - Campi di amministrazione:
subtitle,title,content, CTA principale gestita, CTA secondaria gestita,variant - Campi traducibili:
subtitlecome occhiello,titlecome titolo,contentcome testo di supporto, oltre alle etichette deibuttonfigli - Campi condivisi:
variant, gli URL delle CTA figlie, l'ordinamento dei figli - Output previsto di WebBlocks UI: sezione in stile promozionale
wb-card wb-promoconwb-promo-copyewb-promo-actions - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete le etichette delle CTA di proprietà della lingua sui pulsanti figli, mantenete condivisi gli URL delle CTA ed evitate di reintrodurre payload di CTA basati su settings.
- Regola del wrapper:
ctaora possiede la propria radice di rendering e collocadata-wb-public-block-type="cta"su tale radice, quindi il ciclo degli slot non deve aggiungere un wrapper pubblico esterno generico.
`feature-grid`
- Slug del blocco CMS:
feature-grid - Campi di amministrazione:
title,subtitle,content,feature_itemsripetibili - Campi traducibili:
title,subtitle,content, il testo deifeature-itemfigli - Campi condivisi: l'ordinamento dei figli, i link dei figli, la struttura
- Output previsto di WebBlocks UI: la stessa struttura pubblica a griglia di card utilizzata da
columns.variant = cards - Implementazione attuale: accettabile come alias di compatibilità
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete Feature Grid supportato dal codice sorgente e documentato, ma rendete esplicito che attualmente delega al renderer condiviso delle card di Columns invece di possedere un markup feature-grid distinto.
`feature-item`
- Slug del blocco CMS:
feature-item - Campi di amministrazione:
title,url,content - Campi traducibili:
title,content - Campi condivisi:
url - Output previsto di WebBlocks UI: lo stesso guscio di elemento in stile card utilizzato da
column_itemnella presentazione a card di Columns - Implementazione attuale: accettabile come alias di compatibilità
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete Feature Item documentato come contratto di figlio di supporto basato sul codice sorgente finché continua a delegare alla presentazione a card condivisa di Column Item.
`callout`
- Slug del blocco CMS:
callout - Campi di amministrazione:
title,variant,content - Campi traducibili:
title,content - Campi condivisi:
variant - Output previsto di WebBlocks UI: il comportamento di avviso/alert corrisponde a
wb-alert-*; le varianti per barra laterale o aiuto possono corrispondere awb-calloutse quella primitiva esiste in WebBlocks UI. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete esplicita la corrispondenza dei toni e introducete gusci di callout alternativi solo quando la UI rilasciata li prevede.
`quote`
- Slug del blocco CMS:
quote - Campi di amministrazione:
content,title,subtitle - Campi traducibili:
content,title,subtitle - Campi condivisi: nessuno
- Output previsto di WebBlocks UI: un
blockquotesemantico; utilizzate la cornice a card o callout rilasciata solo quando la citazione è presentata intenzionalmente come testimonianza o card incorniciata. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: consentite una variante di citazione semantica senza cornice e utilizzate
testimonialsolo se diventerà un pattern autonomo di primo livello.
`faq`
- Slug del blocco CMS:
faq - Campi di amministrazione:
title,content - Campi traducibili:
title,content - Campi condivisi: nessuno
- Output previsto di WebBlocks UI: semplice contenuto domanda/risposta in un guscio stabile
wb-cardewb-stack. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: FAQ resta semplice e retrocompatibile. Quando è usato come figlio di un blocco della famiglia accordion, il suo
titlee il suocontentfungono da riepilogo e corpo dell'elemento a scomparsa.
`accordion`
- Slug del blocco CMS:
accordion - Campi di amministrazione:
title,content - Campi traducibili:
title,content - Campi condivisi: la struttura e l'ordinamento dei blocchi figli
- Output previsto di WebBlocks UI: elementi a scomparsa raggruppati e semantici tramite
<details>e<summary>, senza JS di accordion personalizzato né classi inventate. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: i blocchi figli forniscono gli elementi a scomparsa. I blocchi privi di un
titlee di uncontentutilizzabili vengono saltati anziché resi come wrapper vuoti.
`faq-list`
- Slug del blocco CMS:
faq-list - Campi di amministrazione: le stesse aspettative editoriali di
accordion - Campi traducibili: ereditati dal blocco padre e dagli elementi figli
- Campi condivisi: la struttura e l'ordinamento dei blocchi figli
- Output previsto di WebBlocks UI: lo stesso di
accordion; questo slug è ora un alias di transizione e non un pattern separato di lungo periodo. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete funzionante il contenuto esistente, ma orientate l'uso futuro degli elementi a scomparsa raggruppati verso
accordion.
`tabs`
- Slug del blocco CMS:
tabs - Campi di amministrazione:
title,subtitle,content - Campi traducibili:
title,subtitle,content - Campi condivisi: nessuno
- Output previsto di WebBlocks UI: un vero set di schede interattivo se tabs resta un blocco di primo livello.
- Implementazione attuale: debole
- Note per futuri miglioramenti del renderer o dell'amministrazione: tabs è esplicitamente rinviato finché WebBlocks UI non rilascia un vero pattern di schede. L'attuale trattamento a card semplice resta solo come fallback di compatibilità e non viene promosso.
`button`
- Slug del blocco CMS:
button - Campi di amministrazione:
title,url,subtitle,variant - Campi traducibili:
title - Campi condivisi:
url,subtitle/target,variant, relazione facoltativa con un media allegato - Output previsto di WebBlocks UI: corrispondenza esplicita delle varianti
wb-btnperprimary,secondary,outline,ghostedanger; i valori sconosciuti devono ricadere suwb-btn wb-btn-primary. - Implementazione attuale: accettabile
- Corrispondenza delle varianti:
primary->wb-btn wb-btn-primarysecondary->wb-btn wb-btn-secondaryoutline->wb-btn wb-btn-outlineghost->wb-btn wb-btn-ghostdanger->wb-btn wb-btn-danger- sconosciuto o vuoto ->
wb-btn wb-btn-primary - Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete isolata la compatibilità con allegati e download, rendete
<button type="button">solo quando non esiste un URL e formalizzate un blocco gruppo di pulsanti di primo livello solo quando gli editor ne avranno bisogno oltre alle righe di pulsanti figli.
Righe di CTA
- I blocchi sezione di tipo hero e promozionale dovrebbero modellare le CTA con blocchi
buttonfigli. - Le righe di CTA promozionali vengono rese in
wb-promo-actions. - Al di fuori dei contesti promozionali, le normali righe di azione possono utilizzare le utility cluster rilasciate, come
wb-cluster wb-cluster-2. - Un blocco
button-groupdi primo livello è per ora rinviato; l'attuale modello a pulsanti figli supporta già righe di CTA strutturate senza aggiungere nuova architettura di blocchi.
`image`
- Slug del blocco CMS:
image - Campi di amministrazione:
media_id,subtitle,url,title - Campi traducibili:
titlecome didascalia,subtitlecome testo alternativo - Campi condivisi:
media_id,url - Output previsto di WebBlocks UI:
figure,imged eventualmentefigcaptionsemantici; utilizzate le classi media/card rilasciate solo quando l'immagine è incorniciata intenzionalmente. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: la Fase 3 ora mantiene didascalia e testo alternativo sul percorso di traduzione dell'immagine, conserva l'URL di collegamento condiviso facoltativo e mantiene un output semantico privo di wrapper quando il media esiste.
`gallery`
- Slug del blocco CMS:
gallery - Campi di amministrazione: righe compatte dell'elenco
Gallery Items, impostazioni di presentazione condivise di Gallery e modali di metadati per singolo elemento - Campi traducibili:
alt_text,caption,overlay_titleeoverlay_textper ciascun elemento della galleria, tramiteblock_gallery_item_translations - Campi condivisi: selezione e ordinamento dei media della galleria, colonne, spaziatura, variante, proporzioni, modalità didascalie, modalità overlay e interruttore lightbox
- Output previsto di WebBlocks UI: il pattern gallery di WebBlocks con il visualizzatore montato sotto
#wb-overlay-root; gli hook gallery rilasciati di WebBlocks UI dovrebbero guidare per primi l'interazione. - Implementazione attuale: accettabile
- Contratto di rendering pubblico: Gallery non emette più un'intestazione o un paragrafo introduttivo pubblici. I valori legacy di titolo e descrizione di Gallery possono restare memorizzati nei record più vecchi, ma vengono ignorati dal renderer pubblico. I media di Gallery con proporzioni fisse conservano l'immagine intera con adattamento contain centrato, così le immagini in stile screenshot non vengono ritagliate all'interno dei riquadri fissi.
- Contratto editoriale: quando servono intestazioni di sezione o testi esplicativi, utilizzate
Content HeaderpiùPlain TextoRich Textprima del blocco Gallery. - Note per futuri miglioramenti del renderer o dell'amministrazione: il renderer attuale scrive i media ordinati canonici della galleria tramite
block_media, risolve i testi di ciascun elemento di proprietà della lingua tramiteblock_gallery_item_translations, conserva gli elementi di fallback legacy per i contenuti salvati in precedenza e mantienedata-wb-gallery-targetabbinato a un unico modale visualizzatore condiviso sotto#wb-overlay-root.
`download`
- Slug del blocco CMS:
download - Campi di amministrazione:
title,subtitle,media_id,variant - Campi traducibili:
title,subtitle - Campi condivisi:
media_id,variant - Output previsto di WebBlocks UI: una CTA di file come
wb-btn, oppure unawb-cardcompatta più unwb-btnquando la variante richiede più contesto. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: la Fase 3 ora mantiene l'etichetta visibile e il testo di supporto nelle traduzioni testuali, conserva la proprietà condivisa del media e della variante del pulsante e sopprime l'output di una CTA non funzionante quando non esiste una sorgente media.
`contact_form`
- Slug del blocco CMS:
contact_form - Campi di amministrazione:
heading,intro_text,submit_label,success_message,recipient_email,send_email_notification,store_submissions - Campi traducibili:
heading,intro_text,submit_label,success_message - Campi condivisi:
recipient_email,send_email_notification,store_submissions - Comportamento previsto: l'invio pubblico memorizza prima il messaggio, poi tenta una notifica email sincrona al destinatario risolto; le viste di amministrazione dovrebbero mostrare uno stato compatto della notifica e un dettaglio sicuro dell'errore quando la consegna fallisce.
- Endpoint pubblico di invio: modulo nativo del browser
POST /contact-messagescon CSRF, campo di controllo antispam nascosto generato dal CMS, validazione obbligatoria diname,emailemessage,subjectfacoltativo e comportamento di successo generico per gli invii con il campo di controllo compilato. - Note: la sovrascrittura del destinatario nel blocco ha la precedenza, poi il
contact_recipient_emaildel sito pubblico corrente, poiCONTACT_RECIPIENT_EMAILe infineMAIL_FROM_ADDRESScome ultimo fallback locale sicuro quando non è configurato alcun destinatario di contatto esplicito.
`video`
- Slug del blocco CMS:
video - Campi di amministrazione:
title,content,url,media_id - Campi traducibili:
title,content - Campi condivisi:
url,media_id - Output previsto di WebBlocks UI:
<video controls>semantico per le sorgenti dirette, oppure un<iframe>di provider sicuro solo per URL YouTube/Vimeo note, all'interno di un semplice gusciowb-card. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: la Fase 3 ora dota Video di un form di amministrazione e di un percorso di salvataggio dedicati, mantiene tradotti i testi visibili, conserva il rendering che privilegia i media ospitati e ricade su un semplice link esterno per gli URL sconosciuti sicuri invece di incorporarli in modo non sicuro.
`audio`
- Slug del blocco CMS:
audio - Campi di amministrazione:
title,content,url,media_id - Campi traducibili:
title,content - Campi condivisi:
url,media_id - Output previsto di WebBlocks UI:
<audio controls>semantico all'interno di un semplice gusciowb-card. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: la Fase 3 ora dota Audio di un form di amministrazione e di un percorso di salvataggio dedicati, mantiene tradotti i testi visibili e sopprime i controlli vuoti quando non esiste una sorgente utilizzabile.
`file`
- Slug del blocco CMS:
file - Campi di amministrazione:
title,content,url,media_id - Campi traducibili:
title,content - Campi condivisi:
url,media_id - Output previsto di WebBlocks UI: una card di file compatta con un'azione di download/apertura
wb-btn wb-btn-secondary. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: la Fase 3 ora dota File di un form di amministrazione e di un percorso di salvataggio dedicati, mantiene tradotti i testi visibili e rende esplicito il contratto condiviso di sorgente media-o-URL senza generare ancore vuote non valide.
`map`
- Slug del blocco CMS:
map - Campi di amministrazione:
title,content,url - Campi traducibili: nessuno
- Campi condivisi:
title,content,url - Output previsto di WebBlocks UI: un semplice riepilogo della posizione con un pulsante esterno
Open map, non un widget mappa personalizzato. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete l'implementazione incentrata sul link finché non sarà disponibile un vero pattern di mappa/embed rilasciato.
`slider`
- Slug del blocco CMS:
slider - Campi di amministrazione: asset di galleria ordinati e testo opzionale
- Campi traducibili: nessuno
- Campi condivisi: gli asset e la struttura
- Output previsto di WebBlocks UI: nessun renderer promosso nella Fase 4; utilizzate
galleryo altri blocchi media strutturati quando possibile. - Implementazione attuale: debole
- Note per futuri miglioramenti del renderer o dell'amministrazione: slider resta rinviato perché non esiste un pattern carousel di WebBlocks UI confermato e rilasciato su cui valga la pena standardizzarsi.
`code`
- Slug del blocco CMS:
code - Campi di amministrazione:
title,content - Campi traducibili:
title,content - Campi condivisi:
settings.languageopzionale - Output previsto di WebBlocks UI: sorgente con escape all'interno di un
<pre><code>semantico, senza HTML iniettato e senza dipendenze per l'evidenziazione della sintassi. - Implementazione attuale: accettabile
- Nota sulla mappatura di importazione/sincronizzazione: gli snippet grezzi o su più righe, come gli esempi
<pre><code>e i blocchi di inclusione dei pacchetti, devono diventarecodee nonrich-text. - Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete il rendering del codice sicuro e privo di dipendenze. I metadati facoltativi sul linguaggio possono essere esposti dalle impostazioni, ma un editor di codice completo o uno stack di syntax highlighting restano intenzionalmente fuori dall'ambito della Fase 3.
`toc`
- Slug del blocco CMS:
toc - Campi di amministrazione:
title - Campi traducibili:
title - Campi condivisi: nessuno
- Output previsto di WebBlocks UI: un
wb-link-listcostruito a partire dai blocchiheadercon ancora già presenti nella stessa pagina. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: l'implementazione della Fase 3 resta intenzionalmente minimale. Viene renderizzata solo quando i blocchi
Headerespongono già ID di ancora espliciti e non tenta un parsing complesso delle intestazioni né la generazione automatica delle ancore.
`navigation-auto`
- Slug del blocco CMS:
navigation-auto - Campi di amministrazione:
navigation_menu_key - Campi traducibili: nessuno
- Campi condivisi:
settings.menu_key - Output previsto di WebBlocks UI: un elenco di navigazione del sito che utilizzi semplici primitive nav/list oppure
wb-link-listquando opportuno; non simulate una sidebar di documentazione a meno che il page shell non sia davvero un docs shell. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete il blocco focalizzato sul rendering degli alberi di navigazione e lasciate che sia lo slot o il page shell a decidere se l'output è navigazione di intestazione, di piè di pagina o di documentazione.
`menu`
- Slug del blocco CMS:
menu - Campi di amministrazione:
navigation_menu_key - Campi traducibili: nessuno
- Campi condivisi:
settings.menu_key - Output previsto di WebBlocks UI: lo stesso di
navigation-auto; questo blocco resta un alias legacy per i dati migrati. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: mantenete il supporto per i contenuti più vecchi, ma preferite
navigation-autonell'esperienza di amministrazione e nei seed futuri.
Nota legacy / transitoria della Fase 3
tabs,slider,menuefaq-listsono ancora slug legacy in fase di bozza nel catalogo del CMS, non contratti core pubblicati.showcase-listecontact-infoesistono tuttora soltanto come blocchi di compatibilità per il rendering pubblico e in questa fase non vengono promossi nel catalogo core pubblicato.- Questa fase documenta onestamente quei percorsi, conserva il rendering di compatibilità dove è già rilasciato e aggiunge una sanificazione sicura dei link pubblici definiti nelle impostazioni, senza introdurre un nuovo sistema JavaScript per tabs o slider.
`contact_form`
- Slug del blocco CMS:
contact_form - Campi di amministrazione:
heading,intro_text,submit_label,success_message,recipient_email,send_email_notification,store_submissions - Campi traducibili:
title/heading,content/intro,submit_label,success_message - Campi condivisi:
recipient_email,send_email_notification,store_submissions - Output previsto di WebBlocks UI: i campi del modulo usano le primitive di form di WebBlocks UI; l'azione di invio usa
wb-btn; il feedback temporaneo di successo viene mostrato una sola volta come toast di WebBlocks UI sotto il#wb-overlay-rootpubblico condiviso, mentre gli errori di validazione e i problemi correggibili dall'utente restano inline vicino al modulo conwb-alert. - Implementazione attuale: accettabile
- Note per futuri miglioramenti del renderer o dell'amministrazione: conservate i campi strutturati del modulo, tenete le impostazioni operative fuori dai testi editoriali, mantenete i destinatari predefiniti a livello di sito sul record del sito anziché in JSON arbitrari del blocco ed evitate di costringere gli editor a incollare markup di form grezzo o a usare
mailto:come surrogato dell'invio.
Blocchi deboli o solo pubblici
| Blocco CMS | Stato attuale | Direzione desiderata | Note |
|---|---|---|---|
| card-grid | solo rendering pubblico | dovrebbe restare transitorio | Il renderer ora riproduce la stessa struttura wb-grid e wb-card di columns.variant = cards, ma dipende ancora da settings.items. Per i nuovi contenuti strutturati preferite Columns. |
| showcase-list | solo rendering pubblico | dovrebbe restare fallback/personalizzato | Attualmente si tratta di contenuto seed specifico per showcase e non dovrebbe diventare core a meno che il pattern non si ripeta su più siti. I trigger pubblici sulle immagini devono continuare a rispettare il contratto gallery rilasciato, emettendo data-wb-gallery-target e registrando un'unica modale viewer condivisa sotto #wb-overlay-root. |
| contact-info | solo rendering pubblico | dovrebbe diventare di prima classe | Se gli editor continuano a usare schede di metadati di contatto, un piccolo blocco strutturato è preferibile a contenuti personalizzati guidati dalle impostazioni. Il rendering di compatibilità attuale ora ignora gli URL non sicuri delle impostazioni invece di emettere ancore non valide o pericolose. |
| code | renderer pubblico di prima classe | accettabile | Il rendering sicuro con è ora disponibile; funzionalità di editing più ricche restano un lavoro futuro facoltativo. |
| list | renderer pubblico di prima classe | accettabile | Esiste ora un rendering dedicato di elenchi basato sulle righe; mantenete la compatibilità con i contenuti legacy guidati dalle impostazioni. |
| table | renderer pubblico di prima classe | accettabile | Esiste ora un rendering dedicato di tabelle basato sulle righe; mantenete la compatibilità con le righe legacy delle impostazioni. |
| accordion | renderer pubblico di prima classe | accettabile | La divulgazione raggruppata usa ora semantico e blocchi figli invece del markup di ripiego basato sulle impostazioni. |
| feature-grid | alias di compatibilità pubblicato | dovrebbe restare transitorio | Il renderer pubblico delega a columns.variant = cards; per i nuovi contenuti preferite Columns, ma mantenete Feature Grid documentato perché è basato su sorgenti reali ed è rilasciato. |
| stats | solo alias | dovrebbe confluire in Columns | Il renderer pubblico delega al percorso esistente columns.variant = stats e dovrebbe restare documentato come comportamento di alias anziché come contratto pubblicato autonomo. |
| metric-card | alias di prima classe | dovrebbe confluire nelle primitive stat | Il renderer pubblico usa ora la stessa impostazione wb-stat della variante stats di Columns. |
| logo-cloud | solo fallback | dovrebbe diventare di prima classe | Promuovetelo solo se esiste un'esigenza ricorrente di righe strutturate di loghi o media. |
| testimonial | solo alias | dovrebbe confluire in Quote | Il renderer pubblico delega alla variante testimonial di quote e dovrebbe restare documentato come comportamento di alias anziché come contratto pubblicato autonomo. |
| timeline | solo fallback | dovrebbe diventare di prima classe | Promuovetelo solo con milestone strutturate e un pattern di interfaccia chiaro e rilasciato. |
| pricing | solo fallback | dovrebbe diventare di prima classe | Perché valga la pena promuoverlo, un blocco di pricing necessita di campi strutturati per piani, funzionalità e CTA. |
| toc | renderer pubblico di prima classe | accettabile | Il rendering minimale dell'indice usa ora le ancore Header esistenti e wb-link-list; il comportamento della sezione attiva resta rinviato. |
| breadcrumb | solo fallback | dovrebbe diventare di prima classe | Aggiungetelo solo quando lo shell pubblico richiede davvero una navigazione breadcrumb. |
| cookie-notice | solo fallback | dovrebbe restare fallback/personalizzato | L'interfaccia pubblica di consenso vive già nello shell del layout, quindi questo blocco non dovrebbe competere con il pattern di privacy condiviso. |
Regole del renderer
- I renderer Blade devono privilegiare le classi
wb-*rilasciate. - Nessuna nuova classe CSS pubblica creata ad hoc, se non documentata come lacuna di WebBlocks UI.
- Nessuno script inline nei renderer dei blocchi.
- I blocchi interattivi devono usare prima di tutto i data hook rilasciati di WebBlocks UI.
- Il JS specifico del CMS appartiene a
public/cms/jssolo quando è necessario. - I contenuti di overlay, dialog e modali devono usare
#wb-overlay-root. - I campi di amministrazione non devono obbligare gli editor a incollare HTML grezzo di WebBlocks UI per i blocchi normali.
- Quando possibile, i blocchi devono esporre campi strutturati e varianti, non HTML grezzo.
README.mddeve essere aggiornato dopo modifiche significative al comportamento del renderer o dell'amministrazione.
Piano delle fasi
Fase 1
- Solo documentazione.
- Definire il contratto del renderer.
- Nessuna riscrittura del renderer per ora.
Fase 2
- Allineare il layout pubblico e i wrapper degli slot.
- Garantire che il contenuto principale possa essere renderizzato con
wb-content-shelldove opportuno. - Aggiungere test per l'output delle classi di shell e slot.
Fase 3
- Rendere card-grid, button-group e qualsiasi futuro pattern autonomo di stats o testimonial di prima classe solo quando diventano contratti reali di proprietà del prodotto anziché semplici alias.
- Aggiungere i moduli di amministrazione e il supporto nel registro delle traduzioni dove serve.
Fase 3 completata: i blocchi pubblici core sono ora allineati con le primitive di WebBlocks UI.
Fase 4
- Migrare i contenuti di documentazione seed o dimostrativi verso blocchi di prima classe.
- Eliminare la dipendenza da HTML grezzo o da
settings.itemsdove esiste già un blocco strutturato.