<section class=" rtds-pb-8 md:rtds-pb-12">
<div class="rtds-container rtds-space-y-4 md:rtds-space-y-6">
<div class="rtds-grid rtds-grid-cols-1 lg:rtds-grid-cols-12 rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 xl:rtds-gap-16">
<div class="rtds-space-y-4 md:rtds-space-y-6 rtds-col-span-12 lg:rtds-col-span-5">
<h2 class="rtds-heading-2">Lorem ipsum dolor sit amet</h2>
<div class="rtds-body">
<p>Nella programmazione 2021-2027 la Toscana ha a disposizione con il programma del Fondo europeo di sviluppo regionale 1,2 miliardi e con il programma del Fondo sociale europeo plus 1,1 miliardi, un totale di 2,3 miliardi di euro. Per la pesca e l'acquacoltura il programma Feampa 2021-2027 Toscana ha una dotazione complessiva (quota UE, quota dello Stato, quota della Regione), di 22.684.066 milioni. Per l'agricoltura e lo sviluppo rurale, il Complemento per lo sviluppo rurale 2023-2027 mette a disposizione della Toscana 748.813.503 milioni di euro.</p>
</div>
</div>
<div class="rtds-col-span-12 lg:rtds-col-span-7">
<div class="rtds-space-y-4">
<div class="rtds-px-2 rtds-py-4 rtds-border-b rtds-border-gray-02">
<h2 class="rtds-heading-4 rtds-content-primary">I servizi per { questo argomento }</h2>
</div>
<div class="rtds-flex rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 rtds-flex-wrap">
<ul role="list" class="rtds-flex rtds-flex-wrap rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8">
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
<svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#outline--cog-6-tooth" />
</svg>
3 servizi disponibili
</li>
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
<svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#outline--computer-desktop" />
</svg>
3 servizi disponibili
</li>
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
<svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#outline--hands-shaking" />
</svg>
3 servizi disponibili
</li>
</ul>
<div class="lg:rtds-ml-auto">
<div class="rtds-input-field rtds-select-field rtds-field-inline rtds-select-field--sm">
<label for="selectId" class="rtds-input-field__label">
Rivolto a:
</label>
<div class="rtds-select rtds-select--light">
<select id="selectId" class="">
<option value="1">Text</option>
<option value="2">Option 1</option>
<option value="3">Option 2</option>
<option value="4">Option 3</option>
<option value="5">Option 4</option>
<option value="6">Option 5</option>
</select>
</div>
</div>
</div>
</div>
<div class="rtds-servizi-list">
<div class="rtds-grid rtds-gap-4 md:rtds-gap-5 rtds-grid-cols-1 md:rtds-grid-cols-3 lg:rtds-grid-cols-3">
<!-- Grid item wrapper -->
<div class="rtds-col">
<article class="rtds-card rtds-card--information rtds-bg-gradient-04
is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<ul class="rtds-card__tags" aria-label="Categorie">
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
</ul>
</div>
</article>
</div>
<!-- Grid item wrapper -->
<div class="rtds-col">
<article class="rtds-card rtds-card--information rtds-bg-gradient-04
is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<ul class="rtds-card__tags" aria-label="Categorie">
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
</ul>
</div>
</article>
</div>
<!-- Grid item wrapper -->
<div class="rtds-col">
<article class="rtds-card rtds-card--information rtds-bg-gradient-04
is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<ul class="rtds-card__tags" aria-label="Categorie">
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
<li><span class="rtds-chip rtds-chip--category rtds-chip--sm">
label</span></li>
</ul>
</div>
</article>
</div>
</div>
<div class="rtds-flex rtds-justify-center rtds-py-8">
<a href="#" class="rtds-btn
rtds-btn--icon-right rtds-group/button rtds-btn--secondary rtds-btn--s">
vedi tutti i servizi
<svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 rtds-transition-all rtds-duration-200 rtds-ease-out rtds-transform group-hover/button:rtds-translate-x-1" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#mini--chevron-right" />
</svg>
</a>
</div>
</div>
</div>
</div>
</div>
<div>
<h2 class="rtds-sr-only">Contenuti utili</h2>
<ul role="list" class="rtds-grid rtds-grid-cols-1 md:rtds-grid-cols-2 lg:rtds-grid-cols-3 rtds-gap-4">
<li class="rtds-col">
<article class="rtds-card rtds-card--news rtds-card--news-small rtds-card--news-no-thumb is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
<div class="rtds-card__metadata">
</div>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<div class="rtds-card__categories">
<a href="#" class="rtds-category rtds-category--sm">
Categoria
</a>
</div>
</div>
</article>
</li>
<li class="rtds-col">
<article class="rtds-card rtds-card--news rtds-card--news-small rtds-card--news-no-thumb is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
<div class="rtds-card__metadata">
</div>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<div class="rtds-card__categories">
<a href="#" class="rtds-category rtds-category--sm">
Categoria
</a>
</div>
</div>
</article>
</li>
<li class="rtds-col">
<article class="rtds-card rtds-card--news rtds-card--news-small rtds-card--news-no-thumb is-card-fullclickable rtds-group/card">
<div class="rtds-card__content">
<div class="rtds-card__heading">
<h3 class="rtds-card__title">
<a class="group-hover/card:rtds-underline" href="">
Nunc aliquam phasellus molestie blandit. Nisi, amet, id maecenas diam
</a>
</h3>
<div class="rtds-card__metadata">
</div>
</div>
<div class="rtds-card__description ">
<p>
Neque blandit pellentesque nunc sed amet. Nisl, semper sed aliquam amet proin purus augue et.
</p>
</div>
<div class="rtds-card__categories">
<a href="#" class="rtds-category rtds-category--sm">
Categoria
</a>
</div>
</div>
</article>
</li>
</ul>
</div>
</div>
</section>
{% extends '@text-with-cards' %}
{% block rightColumn %}
<div class="{{ rightColumnWidth }}">
<div class="rtds-space-y-4">
<div class="rtds-px-2 rtds-py-4 rtds-border-b rtds-border-gray-02">
<h2 class="rtds-heading-4 rtds-content-primary">I servizi per { questo argomento }</h2>
</div>
<div class="rtds-flex rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 rtds-flex-wrap">
<ul role="list" class="rtds-flex rtds-flex-wrap rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8">
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
{% render '@icon', { id: 'outline--cog-6-tooth', size: 'rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6' }, true %}
3 servizi disponibili
</li>
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
{% render '@icon', { id: 'outline--computer-desktop', size: 'rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6' }, true %}
3 servizi disponibili
</li>
<li class="rtds-content-02 rtds-font-bold rtds-flex rtds-items-center rtds-gap-2 rtds-text-sm lg:rtds-text-base">
{% render '@icon', { id: 'outline--hands-shaking', size: 'rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5 lg:rtds-w-6 lg:rtds-h-6' }, true %}
3 servizi disponibili
</li>
</ul>
<div class="lg:rtds-ml-auto">
{% render '@select-field--sm',{label: 'Rivolto a:', inline: 'true', variant: '--light' }, true %}
</div>
</div>
<div class="rtds-servizi-list">
<div class="rtds-grid rtds-gap-4 md:rtds-gap-5 rtds-grid-cols-1 md:rtds-grid-cols-3 lg:rtds-grid-cols-3">
{% for i in range(0,3) %}
<!-- Grid item wrapper -->
<div class="rtds-col">
{% render '@card--information-with-gradient' %}
</div>
{% endfor %}
</div>
<div class="rtds-flex rtds-justify-center rtds-py-8">
{% render '@button--icon-right-s',{ href: '#', classes: 'rtds-btn--secondary', label: 'vedi tutti i servizi', hasIcon: 'true' }, true %}
</div>
</div>
</div>
</div>
{% endblock rightColumn %}
{
"sectionPadding": "rtds-pb-8 md:rtds-pb-12",
"heading": "Lorem ipsum dolor sit amet",
"text": "Nella programmazione 2021-2027 la Toscana ha a disposizione con il programma del Fondo europeo di sviluppo regionale 1,2 miliardi e con il programma del Fondo sociale europeo plus 1,1 miliardi, un totale di 2,3 miliardi di euro. Per la pesca e l'acquacoltura il programma Feampa 2021-2027 Toscana ha una dotazione complessiva (quota UE, quota dello Stato, quota della Regione), di 22.684.066 milioni. Per l'agricoltura e lo sviluppo rurale, il Complemento per lo sviluppo rurale 2023-2027 mette a disposizione della Toscana 748.813.503 milioni di euro.",
"cardNumber": 3,
"leftColumnGap": "rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 xl:rtds-gap-16",
"leftColumnWidth": "rtds-col-span-12 lg:rtds-col-span-5",
"rightColumnWidth": "rtds-col-span-12 lg:rtds-col-span-7",
"listHeading": "Contenuti utili",
"card": {
"handle": "card--news-small-no-thumb",
"context": {
"date": ""
}
}
}
Sezione di pagina con heading, testo descrittivo e griglia di card. Usata per presentare una raccolta di contenuti (notizie, programmi, finanziamenti) preceduta da un blocco testuale introduttivo. La variante argomento aggiunge una colonna destra con filtri e lista servizi correlati.
Il componente è renderizzato come <section> e contiene:
<h2> e paragrafo descrittivo.rightColumn opzionale a destra (vuoto nel template base; popolato nella variante argomento).cardNumber volte sul componente specificato in card.handle.Il numero di colonne della griglia card è fisso: 1 colonna su mobile, 2 su tablet, 3 su desktop.
default: Layout a colonna singola per il blocco testo + testo (occupa 6 colonne su 12 su desktop), senza colonna destra. Griglia card a 3 colonne.argomento: Layout a due colonne — testo a sinistra (5 colonne) e colonna destra (7 colonne) con heading di sezione, statistiche servizi, filtro “Rivolto a:” e lista di card card--information-with-gradient. La colonna destra viene iniettata tramite il blocco rightColumn nel template text-with-cards--argomento.njk.Contesto di sviluppo Fractal/Nunjucks — Questa sezione riguarda esclusivamente i parametri del context
.config.ymlusati durante lo sviluppo nella libreria. Non descrive attributi HTML o proprietà da usare nei temi, CMS o ambienti di implementazione.
sectionPadding (stringa, opzionale): Classi CSS per il padding verticale della <section> (es. rtds-py-8 md:rtds-py-12).leftColumnGap (stringa, opzionale): Classi CSS per il gap tra le colonne della griglia principale (es. rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 xl:rtds-gap-16).leftColumnWidth (stringa, opzionale): Classi CSS per la larghezza della colonna sinistra (es. rtds-col-span-12 md:rtds-col-span-9 lg:rtds-col-span-6).rightColumnWidth (stringa, opzionale): Classi CSS per la larghezza della colonna destra — usato nella variante argomento (es. rtds-col-span-12 lg:rtds-col-span-7).heading (stringa, obbligatorio): Testo dell’<h2> della sezione.text (stringa, obbligatorio): Testo del paragrafo descrittivo.listHeading (stringa, opzionale): Se presente, viene reso come <h2 class="rtds-sr-only"> sopra la griglia card — etichetta la lista per gli screen reader senza impatto visivo.cardNumber (numero, obbligatorio): Numero di card da renderizzare nella griglia (iterate con range(0, cardNumber)).card (oggetto, obbligatorio): Configurazione della card da renderizzare. Chiavi:handle (stringa, obbligatorio): Handle Fractal del componente card (es. card--news-small, card--news-small-no-thumb).context (oggetto, opzionale): Context da passare al componente card renderizzato.Livello AA — criteri pertinenti:
<section>, <h2> come heading della sezione, <ul role="list"> per la griglia card<h2> descrive l’area tematica; listHeading (se presente) etichetta la griglia di card<section> — identifica la sezione come regione della pagina; è consigliabile che l’<h2> presente nel markup la renda un landmark region riconoscibile dagli screen reader<h2 class="rtds-heading-2"> — heading principale della sezione; si colloca nella gerarchia sotto l’<h1> della pagina<ul role="list"> — griglia delle card; role="list" ripristina la semantica di lista rimossa da reset CSS di Tailwind<li class="rtds-col"> — ogni card è avvolta in un <li> per garantire la corretta struttura della lista<h2 class="rtds-sr-only"> — heading visivamente nascosto per la griglia card, reso solo quando listHeading è definito; consente la navigazione per heading agli screen reader| Attributo | Valori | Condizione |
|---|---|---|
role="list" |
list |
Sulla <ul> della griglia card — ripristina semantica lista |
<section> con <h2> visibile è riconoscibile come landmark region dagli screen reader compatibili (es. NVDA, JAWS con ARIA regions abilitati)listHeading genera un <h2 class="rtds-sr-only"> che etichetta la griglia card senza essere visibile — gli screen reader possono navigare direttamente alla lista tramite headingcard.handle gestiscono autonomamente la propria accessibilità internaIl componente non ha un file CSS dedicato; usa esclusivamente classi utility Tailwind con prefisso rtds- e il container di layout.
.rtds-container: Contenitore centrato con max-width e padding orizzontale.rtds-space-y-4 / .rtds-space-y-6: Spaziatura verticale tra blocchi interni (mobile/desktop).rtds-grid rtds-grid-cols-1 md:rtds-grid-cols-2 lg:rtds-grid-cols-3: Griglia responsive delle card.rtds-gap-4: Gap tra le card.rtds-heading-2: Tipografia heading sezione.rtds-body: Tipografia corpo testo.rtds-sr-only: Nasconde il listHeading visivamente<!-- Variante default: testo + griglia di card notizie -->
<section class="rtds-py-8 md:rtds-py-12">
<div class="rtds-container rtds-space-y-4 md:rtds-space-y-6">
<div class="rtds-grid rtds-grid-cols-1 lg:rtds-grid-cols-12">
<div class="rtds-space-y-4 md:rtds-space-y-6 rtds-col-span-12 md:rtds-col-span-9 lg:rtds-col-span-6">
<h2 class="rtds-heading-2">Finanziamenti europei</h2>
<div class="rtds-body">
<p>Nella programmazione 2021-2027 la Toscana ha a disposizione 2,3 miliardi di euro.</p>
</div>
</div>
</div>
<div>
<ul role="list" class="rtds-grid rtds-grid-cols-1 md:rtds-grid-cols-2 lg:rtds-grid-cols-3 rtds-gap-4">
<li class="rtds-col"><!-- card --></li>
<li class="rtds-col"><!-- card --></li>
<li class="rtds-col"><!-- card --></li>
</ul>
</div>
</div>
</section>
<!-- Variante argomento: usa text-with-cards--argomento.njk che aggiunge la colonna destra -->
<!-- Nel config.yml passare:
sectionPadding: "rtds-pb-8 md:rtds-pb-12"
leftColumnGap: "rtds-gap-4 md:rtds-gap-6 lg:rtds-gap-8 xl:rtds-gap-16"
leftColumnWidth: "rtds-col-span-12 lg:rtds-col-span-5"
rightColumnWidth: "rtds-col-span-12 lg:rtds-col-span-7"
listHeading: "Contenuti utili"
cardNumber: 3
card:
handle: card--news-small-no-thumb
-->range(0, cardNumber) per iterare: tutte le card avranno il medesimo context definito in card.context. Se si necessita di card con contenuti diversi, il componente va esteso o sostituito con un loop su un array di dati.argomento è implementata in text-with-cards--argomento.njk tramite estensione Nunjucks ({% extends '@text-with-cards' %}) e sovrascrittura del blocco rightColumn. La colonna destra è attualmente parzialmente hardcodata (statistiche e filtro).@card--* specificato in card.handle.