Overlays

Drawer

Pannello laterale overlay con animazione slide configurabile. Supporta apertura da tutti e quattro i lati, tre dimensioni, variante floating e slot header/footer/container.

Import

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

Esempio Base

Props

PropTipoDefaultDescrizione
modelValuebooleanfalseVisibilità del drawer (v-model)
positionDrawerPosition'left'Lato da cui il drawer si apre
sizeDrawerSize'medium'Dimensione del drawer
variantDrawerVariant'default'Variante visiva
headerstring | nullnullTesto del titolo nell'header
iconstring | nullnullClasse CSS dell'icona nell'header
closablebooleantrueMostra il pulsante di chiusura
closeIconstringClasse CSS icona di chiusura (default dal ConfigPlugin)
showHeaderbooleantrueMostra la sezione header
dismissableMaskbooleantrueChiude al click sull'overlay
closeOnEscapebooleantrueChiude alla pressione di Escape
blockScrollbooleantrueBlocca lo scroll del body quando aperto

DrawerPosition

type DrawerPosition = 'left' | 'right' | 'top' | 'bottom'

DrawerSize

type DrawerSize = 'small' | 'medium' | 'large' | 'full'
// small: ~280px | medium: ~380px (default) | large: ~500px | full: schermo intero

DrawerVariant

type DrawerVariant =
  | 'default'   // Ancorato al bordo dello schermo
  | 'floating'  // Staccato dal bordo con margini e ombra

Emits

EventoPayloadDescrizione
update:modelValuebooleanAggiornamento visibilità per v-model
showDrawer reso visibile
hideDrawer nascosto
closeEventDrawer chiuso tramite pulsante o ESC

Slot

SlotScopeDescrizione
defaultContenuto principale del drawer
header{ close: (e: Event) => void }Sostituzione del contenuto dell'header
footerArea footer (visibile solo se lo slot è fornito)
closeiconIcona personalizzata per il pulsante di chiusura
container{ close: (e: Event) => void }Sostituzione completa del contenuto (headless mode)

Esempi

Drawer da destra con notifiche

Variante floating

Headless mode (slot container)

Accessibilità

  • Renderizzato con role="dialog" e aria-modal="true"
  • aria-labelledby collegato automaticamente all'ID del titolo nell'header
  • Chiusura tramite tasto Escape (disabilitabile con :close-on-escape="false")
  • Overlay esterno separato dal pannello (gestione indipendente click fuori)
  • Usa <Teleport to="body"> con due <Transition> separate: fade per l'overlay, slide per il pannello

TypeScript

import type { DrawerProps, DrawerEmits, DrawerPosition, DrawerSize, DrawerVariant } from '@pzeta/vue-components'