Navigation

Menu

Componente menu versatile in modalità statica o popup. Supporta submenu, separatori, badge, router-link, link esterni e slot per personalizzazione completa del rendering.

Import

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

Struttura MenuItem

L'interfaccia MenuItem è il blocco fondamentale di tutti i componenti navigation.

CampoTipoDescrizione
labelstringTesto dell'elemento
iconstringClasse CSS dell'icona (es. 'pi pi-home')
tostring | RouteLocationDestinazione router-link (Vue Router)
urlstringURL link esterno
itemsMenuItem[]Sotto-elementi per menu annidati
command(event: MenuItemCommandEvent) => voidCallback eseguita al click
disabledbooleanDisabilita l'elemento
visiblebooleanNasconde l'elemento se false
targetstringAttributo target del link (es. '_blank')
itemKeystringChiave univoca per Vue (alternativa a key riservato)
classstringClasse CSS personalizzata
styleRecord<string, string | number>Stili inline
separatorbooleanRende l'elemento un separatore visivo
badgestring | (() => string | number)Badge statico o dinamico (funzione per valore reattivo)
badgeClassstringClasse CSS del badge
tooltipstringTesto tooltip
tooltipOptionsRecord<string, unknown>Opzioni tooltip
descriptionstringTesto descrittivo secondario
ordernumberOrdinamento dell'elemento

Esempio Base

Props

PropTipoDefaultDescrizione
modelMenuItem[][]Array di elementi del menu
popupbooleanfalseModalità popup: il menu è nascosto e si apre tramite toggle()
sizeSize'medium'Dimensione degli elementi (small, medium, large)
appendTo'body' | 'self' | string | HTMLElement'body'Elemento a cui appendere il popup
autoZIndexbooleantrueGestione automatica dello z-index
baseZIndexnumber0Valore base z-index
exactbooleantrueMatch esatto per router-link-active
tabindexnumber | string0Indice di tabulazione
ariaLabelstringundefinedLabel ARIA del menu
ariaLabelledbystringundefinedID dell'elemento che fornisce il label ARIA

Emits

EventoPayloadDescrizione
showEmesso quando il popup diventa visibile
hideEmesso quando il popup viene nascosto
focusEventEmesso quando il menu riceve il focus
blurEventEmesso quando il menu perde il focus

Slot

SlotScopeDescrizione
startContenuto aggiuntivo prima degli elementi del menu
endContenuto aggiuntivo dopo gli elementi del menu
item{ item: MenuItem; label: string; props: Record<string, unknown> }Template personalizzato per ogni elemento
itemicon{ item: MenuItem; class: string }Template personalizzato per l'icona dell'elemento
submenuicon{ active: boolean }Template personalizzato per l'icona del submenu

Esempi

Modalità Popup

Con slot start/end (profilo utente)

Template item personalizzato

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

const items: MenuItem[] = [
  { label: 'Documentazione', icon: 'pi pi-book', url: 'https://docs.example.com', target: '_blank' },
  { label: 'GitHub', icon: 'pi pi-github', url: 'https://github.com', target: '_blank' },
]
</script>

Metodi esposti (ref)

MetodoFirmaDescrizione
toggle(event: Event) => voidAlterna visibilità del popup
show(event?: Event) => voidMostra il popup ancorato all'elemento trigger
hide() => voidNasconde il popup

Accessibilità

  • Usa role="menu" con aria-label configurabile.
  • La chiusura del popup avviene al click fuori dall'area del menu.
  • Gli elementi con url e target="_blank" ricevono automaticamente rel="noopener noreferrer".

TypeScript

import type { MenuProps, MenuEmits, MenuSlots, MenuItem, MenuItemCommandEvent } from '@pzeta/vue-components'