Navigation

Menubar

Barra menu orizzontale responsive con dropdown e submenu. Include slot start/end per contenuto aggiuntivo, gestione automatica del breakpoint mobile e hamburger menu integrato.

Import

import { Menubar } from '@pzeta/vue-components'
import type { MenuItem } from '@pzeta/vue-components'

Esempio Base

Props

PropTipoDefaultDescrizione
modelMenuItem[][]Array di elementi del menu
breakpointstring'640px'Larghezza sotto la quale attivare la modalità mobile con hamburger
appendTo'body' | 'self' | string | HTMLElement'body'Elemento a cui appendere i dropdown
autoZIndexbooleantrueGestione automatica dello z-index
baseZIndexnumber0Valore base z-index
tabindexnumber | string0Indice di tabulazione
ariaLabelstringundefinedLabel ARIA del componente
ariaLabelledbystringundefinedID dell'elemento che fornisce il label ARIA

Emits

EventoPayloadDescrizione
focusFocusEventEmesso quando il menubar riceve il focus
blurFocusEventEmesso quando il menubar perde il focus

Slot

SlotScopeDescrizione
startContenuto prima delle voci menu (es. logo, titolo applicazione)
endContenuto dopo le voci menu (es. pulsanti azione, avatar utente)
item{ item: MenuItem; label: string; props: Record<string, unknown>; hasSubmenu: boolean; root: boolean }Template personalizzato per ogni voce
itemicon{ item: MenuItem; class: string }Template personalizzato per l'icona della voce
submenuicon{ root: boolean; active: boolean }Template personalizzato per l'icona del dropdown
button{ toggle: () => void }Template personalizzato per il pulsante hamburger mobile
popupiconTemplate personalizzato per l'icona del popup mobile
menuicon{ active: boolean }Template personalizzato per l'icona del menu mobile

Esempi

Con slot start e end

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

const items: MenuItem[] = [
  { label: 'Home', icon: 'pi pi-home', to: '/' },
  {
    label: 'Prodotti',
    items: [
      { label: 'Catalogo', to: '/prodotti/catalogo' },
      { label: 'Offerte', to: '/prodotti/offerte' },
      { separator: true },
      { label: 'Nuovo prodotto', icon: 'pi pi-plus', to: '/prodotti/nuovo' },
    ],
  },
  { label: 'Contatti', to: '/contatti' },
]
</script>

Template voce personalizzato

Metodi esposti (ref)

MetodoFirmaDescrizione
toggle() => voidAlterna la visibilità del menu mobile

Comportamento

  • Sotto il breakpoint, la barra si trasforma in un pulsante hamburger che apre/chiude il menu.
  • I dropdown dei submenu si aprono al click sulla voce root e si chiudono al click fuori.
  • Il posizionamento dei dropdown usa rilevamento automatico dei bordi dello schermo.

Accessibilità

  • Il pulsante hamburger ha aria-label gestito tramite @pzeta/vue-i18n.
  • I dropdown hanno aria-haspopup e aria-expanded.

TypeScript

import type { MenubarProps, MenubarEmits, MenubarSlots, MenubarExpose } from '@pzeta/vue-components'