Layout

Accordion

Sistema di pannelli espandibili composto da quattro sub-componenti (Accordion, AccordionPanel, AccordionHeader, AccordionContent). Supporta modalità singola e multipla, lazy loading e icone personalizzabili.

Import

import {
  Accordion,
  AccordionPanel,
  AccordionHeader,
  AccordionContent,
} from '@pzeta/vue-components'

Esempio Base


Accordion (root)

Props

PropTipoDefaultDescrizione
modelValuestring | number | (string | number)[] | nullnullValore del pannello attivo (usare con v-model)
multiplebooleanfalseConsente di aprire più pannelli contemporaneamente
lazybooleanfalseCarica il contenuto dei pannelli solo alla prima apertura
expandIconstring | nullnullIcona personalizzata per il pannello espanso
collapseIconstring | nullnullIcona personalizzata per il pannello collassato

Emits

EventoPayloadDescrizione
update:modelValueAccordionActiveValueAggiornamento del v-model
changeAccordionActiveValueEmesso quando cambia il pannello attivo
tabOpen{ originalEvent: Event; value: AccordionValue }Emesso quando un pannello viene aperto
tabClose{ originalEvent: Event; value: AccordionValue }Emesso quando un pannello viene chiuso

AccordionPanel

Wrapper per ogni pannello. Fornisce il contesto ai figli tramite provide/inject.

Props

PropTipoDefaultDescrizione
valuestring | numberRichiesto. Identificatore univoco del pannello
disabledbooleanfalseDisabilita l'interazione con il pannello

Slot

SlotScopeDescrizione
default{ isActive, disabled, toggle }Contenuto del pannello (AccordionHeader + AccordionContent)

AccordionHeader

Header cliccabile che attiva/disattiva il pannello.

Props

PropTipoDefaultDescrizione
asstring'div'Tag HTML da renderizzare
iconPosition'left' | 'right' | 'none''left'Posizione dell'icona
iconType'plus-minus' | 'chevron' | 'none''plus-minus'Tipo di icona visualizzata

Slot

SlotScopeDescrizione
default{ isActive, disabled, toggle }Contenuto principale dell'header (titolo)
left{ isActive, disabled, toggle }Sovrascrive l'area icona sinistra
right{ isActive, disabled, toggle }Sovrascrive l'area icona/azioni destra

AccordionContent

Contenuto espandibile del pannello, animato con Transition.

Props

PropTipoDefaultDescrizione
asstring'div'Tag HTML da renderizzare

Slot

SlotScopeDescrizione
default{ isActive }Contenuto del pannello

Esempi

Pannelli multipli aperti contemporaneamente

Accordion con v-model

Icona chevron con animazione rotazione

Lazy loading

<template>
  <!-- Il contenuto di ogni pannello viene renderizzato solo alla prima apertura -->
  <Accordion :lazy="true">
    <AccordionPanel value="1">
      <AccordionHeader><span>Caricamento lazy</span></AccordionHeader>
      <AccordionContent>
        <HeavyComponent />
      </AccordionContent>
    </AccordionPanel>
  </Accordion>
</template>

Accessibilità

  • AccordionHeader ha role="button", aria-expanded e supporto tastiera (Enter/Space)
  • La struttura segue il pattern ARIA per i widget accordion
  • Il pannello disabilitato (disabled) non risponde all'interazione

TypeScript

import type {
  AccordionProps,
  AccordionEmits,
  AccordionPanelProps,
  AccordionHeaderProps,
  AccordionContentProps,
  AccordionValue,
  AccordionActiveValue,
  AccordionIconType,
  AccordionIconPosition,
} from '@pzeta/vue-components'