<div class="rtds-top-bar rtds-py-1 md:rtds-py-2 rtds-px-4 rtds-hidden lg:rtds-flex">
<div class="rtds-top-bar__container rtds-container">
<div class="rtds-top-bar__navigation rtds-grid lg:rtds-flex rtds-items-center rtds-gap-2 lg:rtds-gap-8">
<!-- Secondary nav/menu component -->
<nav class="rtds-secondary-navigation" aria-label="Secondaria">
<ul class="rtds-secondary-navigation__list rtds-gap-2">
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
Uffici
</a>
</li>
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
URP
</a>
</li>
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
PEC
</a>
</li>
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
Mappa del sito
</a>
</li>
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
Amministrazione trasparente
</a>
</li>
<li class="">
<a href="" class="rtds-link rtds-p-2 rtds-text-xs xl:rtds-text-sm rtds-content-01">
Intranet
</a>
</li>
</ul>
</nav>
</div>
<div class="rtds-top-bar__utilities-area rtds-flex lg:rtds-gap-4 xl:rtds-gap-6 rtds-ml-auto">
<!-- Social links component -->
<div class="rtds-social-links rtds-grid rtds-gap-1 md:rtds-flex md:rtds-gap-6 ">
<ul id="headerSocial" class="rtds-flex rtds-items-center rtds-gap-4 lg:rtds-gap-2 xl:rtds-gap-4 rtds-flex-wrap rtds-p-2 lg:rtds-p-0">
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al profilo Facebook di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--facebook" />
</svg>
</a>
</li>
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al profilo X di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--x" />
</svg>
</a>
</li>
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al canale Telegram di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--telegram" />
</svg>
</a>
</li>
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al canale Youtube di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--youtube" />
</svg>
</a>
</li>
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al canale Instagram di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--instagram" />
</svg>
</a>
</li>
<li class="rtds-flex rtds-items-center">
<a href="" class="rtds-link rtds-text-2xl rtds-content-05 rtds-p-2 xl:rtds-p-1 undefined rtds-link--lg">
<span class="rtds-sr-only">Vai al profilo Flickr di Regione Toscana</span>
<svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#solid--flickr" />
</svg>
</a>
</li>
</ul>
</div>
<div class="rtds-vertical-divider rtds-w-1e rtds-flex">
<img class="rtds-w-full rtds-h-auto" src="../../images/vertical-divider.svg" alt="">
</div>
<!-- Search Modal Desktop -->
<!-- Desktop Search Modal -->
<div class="rtds-search-modal-desktop__wrapper rtds-hidden lg:rtds-block">
<button type="button" aria-haspopup="dialog" aria-controls="searchModal" aria-expanded="false" id="searchModalTrigger" class="rtds-btn rtds-btn--outline rtds-btn--icon rtds-w-6 rtds-h-6 md:rtds-w-10 md:rtds-h-10 rtds-border-gray-03 hover:rtds-button-primary-hover focus:rtds-button-primary-hover active:rtds-button-primary-hover hover:rtds-text-white focus:rtds-text-white active:rtds-text-white">
<span class="rtds-sr-only">Cerca nel sito - apri la modale</span>
<svg class="rtds-icon rtds-fill-current rtds-w-4 rtds-h-4 md:rtds-w-5 md:rtds-h-5" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#mini--magnifying-glass" />
</svg>
</button>
<!-- Search Modal -->
<div id="searchModal" class="rtds-search-modal-desktop rtds-fixed rtds-items-center rtds-content-center rtds-inset-0 rtds-bg-black rtds-bg-opacity-50 rtds-overflow-y-auto rtds-h-full rtds-w-full" style="display:none;" aria-hidden="true" role="dialog" aria-modal="true" aria-labelledby="modalTitle" data-trigger-id="searchModalTrigger" data-close-button-id="closeModal">
<div class="rtds-relative rtds-h-full lg:rtds-h-full lg:rtds-w-full rtds-mx-auto rtds-p-6 lg:rtds-p-16 rtds-shadow-lg rtds-bg-white">
<div class="rtds-modal-content rtds-container rtds-px-16 rtds-grid rtds-gap-14">
<div class="rtds-flex rtds-justify-between rtds-items-center">
<h2 id="modalTitle" class="rtds-text-3xl md:rtds-text-5xl lg:rtds-text-6xl">Cerca nel sito</h2>
<button type="button" class="rtds-btn
rtds-btn--icon rtds-btn--icon-square rtds-btn--icon rtds-border-0 hover:rtds-background-primary hover:rtds-text-white" id="closeModal"><svg class="rtds-icon rtds-fill-current rtds-w-8 rtds-h-8" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#mini--x-mark" />
</svg>
<span class="rtds-sr-only">
Chiudi
</span>
</button>
</div>
<form role="search" class="rtds-flex rtds-gap-2">
<div class="rtds-input-field rtds-gap-1 rtds-flex-1 rtds-search-modal-desktop__input ">
<label for="inputSearch" class="rtds-input-field__label">
Cerca servizi, informazioni, aiuti...
</label>
<div class="rtds-input has-icon">
<svg class="rtds-icon rtds-fill-current rtds-input__icon" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#mini--magnifying-glass" />
</svg>
<input id="inputSearch" class="rtds-text-sm rtds-input-placeholder" type="search" placeholder="Cerca">
</div>
</div>
<button type="button" class="rtds-btn
rtds-btn--icon-right rtds-group/button rtds-btn--primary rtds-self-end">
Cerca nel sito
<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 group-hover/button:rtds-translate-x-1" aria-hidden="true" focusable="false" role="img">
<use href="../../icons.svg#mini--chevron-right" />
</svg>
</button>
</form>
</div><!-- /END MODAL CONTENT -->
</div>
</div>
</div>
</div>
<!--/ END TOP BAR UTILITIES -->
</div>
</div><!-- /END TOPBAR -->
<div class="rtds-top-bar{% if classes %} {{ classes }}{% endif %}{% if bgColor %} {{ bgColor }}{% endif %}{% if spacing %} {{ spacing }}{% endif %}{% if mobileHidden %} rtds-hidden lg:rtds-flex{% endif %}">
<div class="rtds-top-bar__container rtds-container">
{% block leftArea %}
<div class="rtds-top-bar__navigation rtds-grid lg:rtds-flex rtds-items-center rtds-gap-2 lg:rtds-gap-8">
{% block TopBarLinkLeft %}
{# {% if hasTopBarLinkLeft === 'true' %} #}
{% if topBarLinkLeft.length > 0 %}
<div class="rtds-flex rtds-gap-4 rtds-items-center">
{% for item in topBarLinkLeft %}
<a href="{% if item.link %}{{ item.link }}{% else %}#{% endif %}" class="rtds-link">
<img src="{{ item.image | path }}" alt="{{ item.alt }}" width="{{ item.width }}" height="{{ item.height }}"{% if item.image2x %} srcset="{{ item.image | path }} 1x, {{ item.image2x | path }} 2x"{% endif %}>
</a>
{% endfor %}
</div>
{% endif %}
{% endblock TopBarLinkLeft %}
{% block secondaryNav %}
{% if hasSecondaryNav %}
<!-- Secondary nav/menu component -->
{% render '@secondary-navigation', {label: 'Secondaria', items: [{label : 'Uffici'},{label : 'URP'},{label : 'PEC'},{label : 'Mappa del sito'},{label : 'Amministrazione trasparente'},{label : 'Intranet'}]}, true %}
{% endif %}
{% endblock secondaryNav %}
</div>
{% endblock leftArea %}
{% block rightArea %}
<div class="rtds-top-bar__utilities-area rtds-flex lg:rtds-gap-4 xl:rtds-gap-6 rtds-ml-auto">
{% if hasTopBarSocial %}
<!-- Social links component -->
{% render '@social-links', {id: 'headerSocial',listGap: 'rtds-gap-4 lg:rtds-gap-2 xl:rtds-gap-4 rtds-flex-wrap', classes: 'rtds-p-2 lg:rtds-p-0',linkIconSize: 'rtds-w-8 rtds-h-8 lg:rtds-w-5 lg:rtds-h-5 xl:rtds-w-6 xl:rtds-h-6',
items: [{label : 'Vai al profilo Facebook di Regione Toscana',
icon: 'solid--facebook',
classes : 'rtds-flex rtds-items-center'},
{label : 'Vai al profilo X di Regione Toscana',
icon: 'solid--x',
classes : 'rtds-flex rtds-items-center'},
{label : 'Vai al canale Telegram di Regione Toscana',
icon: 'solid--telegram',
classes : 'rtds-flex rtds-items-center'},
{label : 'Vai al canale Youtube di Regione Toscana',
icon: 'solid--youtube',
classes : 'rtds-flex rtds-items-center'},
{label : 'Vai al canale Instagram di Regione Toscana',
icon: 'solid--instagram',
classes : 'rtds-flex rtds-items-center'},
{label : 'Vai al profilo Flickr di Regione Toscana',
icon: 'solid--flickr',
classes : 'rtds-flex rtds-items-center'}]}, true %}
{% endif %}
{% block userDropdown %}
{% if hasUserDropdown %}
{% render '@user-dropdown', userDropdown , true %}
{% endif %}
{% endblock userDropdown %}
{% if hasVerticalDivider %}
{% render '@vertical-divider', { width: 'rtds-w-1e', classes: 'rtds-flex' }, true %}
{% endif %}
{% block TopBarLinkRight %}
{# {% if hasTopBarLinkRight === 'true' %} #}
{% if topBarLinkRight.length > 0 %}
<div class="rtds-flex rtds-gap-4 rtds-items-center">
{% for item in topBarLinkRight %}
<a href="{% if item.link %}{{ item.link }}{% else %}#{% endif %}" class="rtds-link">
<img src="{{ item.image | path }}" alt="{{ item.alt }}" width="{{ item.width }}" height="{{ item.height }}"{% if item.image2x %} srcset="{{ item.image | path }} 1x, {{ item.image2x | path }} 2x"{% endif %}>
</a>
{% endfor %}
</div>
{% endif %}
{% endblock TopBarLinkRight %}
{% if hasLanguageSelector %}
<!-- Language Selctor component -->
<div class="rtds-px-4">Lingua</div>
{% endif %}
{% if hasSearchButton %}
<!-- Search Modal Desktop -->
{% if searchModalVariant == 'with-search-bar' %}
{% render '@search-modal-desktop--with-search-bar', {
modalId: 'searchModal',
modalTitleId: 'modalTitle',
modalTitle: 'Cerca nel sito',
triggerId: 'searchModalTrigger',
triggerLabel: 'Cerca nel sito - apri la modale',
closeButtonId: 'closeModal',
closeButtonLabel: 'Chiudi',
searchId: searchId|default('desktopSearchBar'),
label: searchLabel|default('Cerca'),
submitLabel: searchSubmitLabel|default('Cerca'),
showClearButton: showClearButton|default(true),
placeholder: searchPlaceholder|default('Search'),
formAction: searchFormAction|default('/search'),
formMethod: searchFormMethod|default('get'),
allResultsHref: allResultsHref|default('/search?q='),
allResultsLabel: allResultsLabel|default('Tutti i risultati'),
searchOptions: searchOptions,
searchBarClasses: searchBarClasses,
searchButtonBorderColor: searchButtonBorderColor,
searchButtonTextColor: searchButtonTextColor
}, true %}
{% else %}
{% render '@search-modal-desktop', {
modalId: 'searchModal',
modalTitleId: 'modalTitle',
modalTitle: 'Cerca nel sito',
triggerId: 'searchModalTrigger',
triggerLabel: 'Cerca nel sito - apri la modale',
closeButtonId: 'closeModal',
closeButtonLabel: 'Chiudi',
inputLabel: 'Cerca servizi, informazioni, aiuti...',
inputId: 'inputSearch',
inputPlaceholder: 'Cerca',
submitLabel: 'Cerca nel sito',
searchButtonBorderColor: searchButtonBorderColor,
searchButtonTextColor: searchButtonTextColor
}, true %}
{% endif %}
{% endif %}
</div>
<!--/ END TOP BAR UTILITIES -->
{% endblock rightArea %}
</div>
</div><!-- /END TOPBAR -->
{
"hasSecondaryNav": true,
"hasTopBarSocial": true,
"hasSearchButton": true,
"mobileHidden": true,
"spacing": "rtds-py-1 md:rtds-py-2 rtds-px-4",
"hasVerticalDivider": true,
"searchButtonBorderColor": "rtds-border-gray-03",
"searchModalVariant": null
}
/**
* SIDE NAVIGATION
*
*/
.rtds-top-bar {
background-color: var(--color-background-01);
display: flex;
align-items: center;
}
.rtds-top-bar__container {
display: flex;
align-items: center;
}
@media (min-width: 1024px) {
.rtds-top-bar__container {
flex: 1 1 0%;
}
}
/*.rtds-top-bar__navigation {
}*/
/*.rtds-top-bar__utilities-area {
@apply rtds-flex rtds-ml-auto;
}*/
/**
* SIDE NAVIGATION
*
*/
@layer components {
.rtds-top-bar {
@apply rtds-flex rtds-items-center rtds-background-01;
}
.rtds-top-bar__container {
@apply rtds-flex rtds-items-center lg:rtds-flex-1;
}
/*.rtds-top-bar__navigation {
}*/
/*.rtds-top-bar__utilities-area {
@apply rtds-flex rtds-ml-auto;
}*/
}
Barra superiore del sito — contiene navigazione secondaria, social link, link con logo, selezione lingua, user dropdown e pulsante di ricerca. Non è un landmark autonomo: viene incluso all’interno del componente @header.
Il componente viene renderizzato come <div class="rtds-top-bar">, non come elemento semantico <header> — il landmark è gestito dal componente padre @header.
La visibilità su mobile è controllata dal parametro mobileHidden: se true, aggiunge rtds-hidden lg:rtds-flex per nascondere la top bar sugli schermi piccoli.
Il template espone blocchi Nunjucks (leftArea, TopBarLinkLeft, secondaryNav, rightArea, TopBarLinkRight, userDropdown) per la personalizzazione nelle varianti.
La variante with-nav sostituisce il contenuto dell’area sinistra con un componente @primary-navigation tramite override del blocco leftArea.
default: Top bar completa con navigazione secondaria, social link, divisore verticale e pulsante di ricerca (modale semplice)with-nav: Area sinistra sostituita dalla navigazione primaria (@primary-navigation); visibile anche su mobile (mobileHidden: false)has-image-link-left: Senza navigazione secondaria; area sinistra con uno o più loghi/immagini linkatihas-image-link-right: Area destra con uno o più loghi/immagini linkatiuser-dropdown / Utente loggato: Area destra con componente @user-dropdown in stato loggato (mostra menu a tendina profilo)utente-non-loggato: Area destra con componente @user-dropdown in stato non loggato (mostra pulsante “Login”)with-search-bar-modal: Modale di ricerca desktop con componente @search-bar completo (autocomplete, pulsante clear, link “Tutti i risultati”)Contesto di sviluppo Fractal/Nunjucks — Questa sezione riguarda esclusivamente i parametri del context
.config.ymlusati durante lo sviluppo nella libreria.
classes (stringa, opzionale): Classi CSS aggiuntive sull’elemento radice .rtds-top-barbgColor (stringa, opzionale): Classe Tailwind per il colore di sfondo (sovrascrive il default rtds-background-01)spacing (stringa, opzionale): Classi Tailwind per il padding (es. rtds-py-1 md:rtds-py-2 rtds-px-4)mobileHidden (booleano, opzionale): Se true, nasconde la top bar su mobile aggiungendo rtds-hidden lg:rtds-flextopBarLinkLeft (array, opzionale): Elenco di loghi/immagini linkati nell’area sinistra. Ogni elemento accetta:alt (stringa): Testo alternativo dell’immaginelink (stringa): URL del linkimage (stringa): Percorso dell’immaginewidth (numero): Attributo width dell’immagineheight (numero): Attributo height dell’immagineimageSrcset (stringa, opzionale): Attributo srcset per immagini retinatopBarLinkRight (array, opzionale): Elenco di loghi/immagini linkati nell’area destra. Accetta le stesse proprietà di topBarLinkLefthasSecondaryNav (booleano, opzionale): Se true, renderizza il componente @secondary-navigation nell’area sinistrahasTopBarSocial (booleano, opzionale): Se true, renderizza il componente @social-links nell’area destrahasUserDropdown (booleano, opzionale): Se true, renderizza il componente @user-dropdown nell’area destrauserDropdown (oggetto, opzionale): Contesto passato al componente @user-dropdown. Chiavi supportate:isUserLoggedIn (booleano): Se true, mostra il menu a tendina del profilo; se false, mostra il pulsante “Login”userDropdownId (stringa, opzionale): ID per l’elemento <ul> del menu a tendina (default: "userDropdown")buttonClasses (stringa, opzionale): Classi CSS aggiuntive sul trigger button (default: "rtds-btn--only-text")hasVerticalDivider (booleano, opzionale): Se true, renderizza il componente @vertical-divider tra i controlli dell’area destrahasLanguageSelector (booleano, opzionale): Se true, mostra un segnaposto per il selettore di linguahasSearchButton (booleano, opzionale): Se true, mostra il pulsante/trigger per la modale di ricerca desktopsearchModalVariant (stringa, opzionale): Variante della modale di ricerca desktop:null o non specificato: modale semplice con @input-field--search e @button--icon-right"with-search-bar": modale con componente @search-bar completo (autocomplete, pulsante clear, dropdown risultati)searchButtonBorderColor (stringa, opzionale): Classe CSS per il colore del bordo del trigger button (default: "rtds-border-gray-03")searchButtonTextColor (stringa, opzionale): Classe CSS per il colore del testo del trigger buttonsearchModalVariant: "with-search-bar"searchId (stringa, opzionale): ID del campo di ricerca (default: "desktopSearchBar")searchLabel (stringa, opzionale): Label del campo di ricerca (default: "Cerca")searchSubmitLabel (stringa, opzionale): Testo del pulsante submit (default: "Cerca")showClearButton (booleano, opzionale): Mostra il pulsante per cancellare il testo (default: true)searchPlaceholder (stringa, opzionale): Placeholder del campo di ricerca (default: "Search")searchFormAction (stringa, opzionale): Attributo action del form di ricerca (default: "/search")searchFormMethod (stringa, opzionale): Attributo method del form di ricerca (default: "get")allResultsHref (stringa, opzionale): URL del link “Tutti i risultati” nel dropdown (default: "/search?q=")allResultsLabel (stringa, opzionale): Testo del link “Tutti i risultati” (default: "Tutti i risultati")Livello AA — criteri pertinenti:
<nav> e social links con label descrittivearia-haspopup, aria-controls e aria-expanded<header> tramite il componente @header<div class="rtds-top-bar"> — non è un landmark autonomo; è parte del <header> del componente padre@secondary-navigation con il proprio <nav aria-label="..."> interno@social-links con label descrittive per ogni link<a href="..."><img alt="..."></a> — il testo alternativo dell’immagine fornisce il nome accessibile del link| Attributo | Valori | Condizione |
|---|---|---|
aria-haspopup |
"dialog" |
sul trigger ricerca, quando hasSearchButton è abilitato |
aria-controls |
"searchModal" |
sul trigger ricerca, quando hasSearchButton è abilitato |
aria-expanded |
"false" / "true" |
sul trigger ricerca; gestito da JavaScript — valore iniziale false |
| Tasto | Azione |
|---|---|
Tab / Shift+Tab |
Sposta il focus tra i controlli della top bar |
Enter / Space |
Apre la modale di ricerca (sul trigger) |
Escape |
Chiude la modale di ricerca (gestito da search-modal-desktop.js) |
:focus-visible è sempre visibile e non viene rimosso via CSSaria-haspopup="dialog" (annuncia l’apertura di una finestra modale), aria-controls="searchModal" e aria-expanded aggiornato dinamicamente da JavaScriptalt descrittivo (es. “Regione Toscana”, “Toscana Notizie”) per identificare la destinazione del linkaria-expanded sul trigger di ricerca è implementata in search-modal-desktop.js.rtds-top-bar: Elemento radice del componente; flex, items-center, sfondo rtds-background-01.rtds-top-bar__container: Contenitore interno con larghezza controllata da .rtds-container; flex, items-center, lg:flex-1.rtds-top-bar__navigation: Area sinistra; grid su mobile, flex da lg; allinea logo e navigazione secondaria.rtds-top-bar__utilities-area: Area destra; flex, ml-auto; contiene social, user dropdown, link destra, selettore lingua, ricerca<!-- Top bar base con navigazione secondaria e ricerca -->
<div class="rtds-top-bar rtds-py-1 md:rtds-py-2 rtds-px-4 rtds-hidden lg:rtds-flex">
<div class="rtds-top-bar__container rtds-container">
<div class="rtds-top-bar__navigation rtds-grid lg:rtds-flex rtds-items-center rtds-gap-2 lg:rtds-gap-8">
<!-- @secondary-navigation -->
</div>
<div class="rtds-top-bar__utilities-area rtds-flex lg:rtds-gap-4 rtds-ml-auto">
<!-- @social-links -->
<!-- @search-modal-desktop -->
</div>
</div>
</div>
<!-- Top bar con loghi a sinistra -->
<div class="rtds-top-bar">
<div class="rtds-top-bar__container rtds-container">
<div class="rtds-top-bar__navigation rtds-grid lg:rtds-flex rtds-items-center">
<div class="rtds-flex rtds-gap-4 rtds-items-center">
<a href="#" class="rtds-link">
<img src="/images/regione-toscana-min.png" alt="Regione Toscana" width="34" height="34">
</a>
<a href="#" class="rtds-link">
<img src="/images/toscana-notizie.png" alt="Toscana Notizie" width="147" height="28"
srcset="/images/toscana-notizie.png 1x, /images/toscana-notizie@2x.png 2x">
</a>
</div>
</div>
<div class="rtds-top-bar__utilities-area rtds-flex rtds-ml-auto">
<!-- @search-modal-desktop -->
</div>
</div>
</div>Imposta hasUserDropdown: true e userDropdown.isUserLoggedIn: true. Il componente @user-dropdown renderizza il menu a tendina con le voci di navigazione del profilo. Abbina hasTopBarSocial: false per eliminare i social link quando è presente l’area utente.
Imposta hasUserDropdown: true e userDropdown.isUserLoggedIn: false. Il componente @user-dropdown renderizza un pulsante “Login” con icona. Abbina hasTopBarSocial: false per coerenza visiva con il caso loggato.
Imposta hasUserDropdown: false (o ometti il parametro). La top bar non renderizza nessuna area utente — utile per siti istituzionali senza autenticazione.
<header> (gestito dal componente @header)with-nav sovrascrive il blocco leftArea tramite Nunjucks {% extends '@top-bar' %} — non usa i parametri topBarLinkLeft o hasSecondaryNavleftArea, TopBarLinkLeft, secondaryNav, rightArea, TopBarLinkRight, userDropdownwith-search-bar-modal richiede il componente @search-modal-desktop--with-search-bar e i relativi script JavaScript per l’autocompletewith-nav (@primary-navigation con voce “Dropdown”) può mostrare scrollbar orizzontale/verticale all’interno del riquadro di anteprima. Causa: il pannello di preview del tema Fractal (@frctl/mandelbrot) ha altezza fissa e ricalcola le dimensioni dell’iframe solo al load/resize, non quando un’interazione JS interna (apertura dropdown) fa crescere il contenuto. Non si verifica in una pagina reale, dove non c’è alcun wrapper ad altezza fissa attorno all’header (issue GitLab #29)