Overlays

Sidebar

Barra laterale fissa e collassabile per la navigazione principale dell'applicazione. Progettata per il Portal Shell dei microfrontend, supporta auto-collapse responsive, brand, e slot per header/content/footer.

Nota: Sidebar vs Drawer

Sidebar e Drawer sono componenti distinti con scopi diversi:

SidebarDrawer
ComportamentoFissa nel layout, collassabileOverlay con animazione slide
v-modelv-model:collapsed (stato collapse)v-model (visibile/nascosto)
Uso tipicoNavigazione principale fissaMenu temporanei, pannelli laterali
Portal ShellSi — componente dedicato MFENo

Import

import { Sidebar } from '@pzeta/vue-components'
// oppure con plugin selettivo:
import { OverlaysPlugin } from '@pzeta/vue-components'
app.use(OverlaysPlugin)

Esempio Base

Props

PropTipoDefaultDescrizione
collapsedbooleanfalseStato collapsed della sidebar (v-model:collapsed)
widthstring'w-64'Larghezza in modalità espansa (classe Tailwind)
collapsedWidthstring'w-16'Larghezza in modalità collapsed (classe Tailwind)
brandNamestring'Application'Nome/brand mostrato nell'header espanso
brandIconstring'building'Icona del brand (PrimeIcons senza prefisso pi-)
roundedbooleanfalseArrotonda i bordi e aggiunge margine
autoCollapse'sm' | 'md' | 'lg' | 'xl' | '2xl' | falsefalseBreakpoint per auto-expand: sopra questo breakpoint la sidebar si espande automaticamente
containerClassstringClasse CSS aggiuntiva per il contenitore principale
headerClassstringClasse CSS aggiuntiva per l'header
contentClassstringClasse CSS aggiuntiva per l'area contenuto
beforeContentClassstringClasse CSS aggiuntiva per l'area before-content
footerClassstringClasse CSS aggiuntiva per il footer

Emits

EventoPayloadDescrizione
update:collapsedbooleanAggiornamento stato collapsed per v-model:collapsed

Slot

SlotScopeDescrizione
defaultContenuto principale (navigazione, menu)
headerSostituzione completa dell'area brand/logo
before-contentArea prima del contenuto (es. barra di ricerca, filtri)
footerArea footer della sidebar (es. profilo utente, logout)

Esempi

Auto-collapse responsive

<script setup lang="ts">
import { ref } from 'vue'
import { Sidebar } from '@pzeta/vue-components'

const collapsed = ref(false)
</script>

<template>
  <!-- Si espande automaticamente sopra lg (1024px), si collassa sotto -->
  <Sidebar
    v-model:collapsed="collapsed"
    auto-collapse="lg"
    brand-name="Portal"
  >
    <slot />
  </Sidebar>
</template>

Pulsante toggle esterno

Accessibilità

  • Renderizzato come elemento <aside> (landmark semantico per screen reader)
  • Classi Tailwind gestite dinamicamente per la transizione larghezza
  • In modalità collapsed il testo viene nascosto mentre le icone rimangono visibili
  • Il breakpoint autoCollapse usa window.matchMedia per gestire la transizione responsive senza FOUC

TypeScript

import type { SidebarProps, SidebarSlots } from '@pzeta/vue-components'