Overlays

ConfirmDialog

Dialog di conferma modale gestito tramite il composable `useConfirm()`. Si posiziona globalmente nell'app e viene attivato programmaticamente, senza v-model.

Import

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

Pattern service con useConfirm()

ConfirmDialog non si usa con v-model. Il componente va registrato una volta nel layout principale dell'app; le conferme vengono poi richieste da qualsiasi componente figlio tramite il composable useConfirm().

1. Registrazione nel layout

<!-- App.vue o layout principale -->
<template>
  <RouterView />
  <ConfirmDialog />
</template>

2. Utilizzo nei componenti

Props

PropTipoDefaultDescrizione
groupstring'default'Gruppo per distinguere dialogs multipli nella stessa app
widthstring'450px'Larghezza del dialog
draggablebooleanfalseAbilita il trascinamento del dialog
positionConfirmationOptions['position']'center'Posizione del dialog sullo schermo
transitionstring'hs-confirm'Nome della transizione CSS

ConfirmationOptions

Oggetto passato a confirm.require(options):

OpzioneTipoDefaultDescrizione
messagestringMessaggio principale da mostrare
headerstringt('overlay.confirmHeader')Titolo del dialog
iconstringicona da ConfigPluginClasse CSS icona (es. pi pi-exclamation-triangle)
severitySeverity'warn'Severity per lo stile visivo del dialog
groupstringGruppo target (deve corrispondere alla prop group del componente)
acceptLabelstringt('overlay.confirmAccept')Testo pulsante accetta
rejectLabelstringt('overlay.confirmReject')Testo pulsante rifiuta
acceptIconstringClasse CSS icona pulsante accetta
rejectIconstringClasse CSS icona pulsante rifiuta
acceptSeveritySeverity'primary'Severity pulsante accetta
rejectSeveritySeverity'secondary'Severity pulsante rifiuta
acceptClassstringClasse CSS aggiuntiva pulsante accetta
rejectClassstringClasse CSS aggiuntiva pulsante rifiuta
accept() => voidCallback eseguito quando l'utente accetta
reject() => voidCallback eseguito quando l'utente rifiuta
dismissableMaskbooleantrueChiude al click fuori dal dialog
closeOnEscapebooleantrueChiude alla pressione di Escape
blockScrollbooleantrueBlocca lo scroll del body
position'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right''center'Posizione del dialog

Emits

EventoPayloadDescrizione
showDialog reso visibile
hideDialog nascosto
acceptUtente ha accettato
rejectUtente ha rifiutato

Slot

SlotScopeDescrizione
message{ message: ConfirmationOptions }Contenuto messaggio personalizzato
icon{ message: ConfirmationOptions }Icona personalizzata
accepticonIcona pulsante accetta
rejecticonIcona pulsante rifiuta
footer{ message, acceptCallback, rejectCallback }Footer personalizzato con i pulsanti
container{ message, acceptCallback, rejectCallback, closeCallback }Sostituzione completa del contenuto del dialog (headless mode)

Esempi

Dialogs multipli con gruppi

Chiusura programmatica

const confirm = useConfirm()

// Apre il dialog
confirm.require({ message: 'Confermare?' })

// Chiude il dialog senza eseguire i callback
confirm.close()

Accessibilità

  • Renderizzato con role="alertdialog" e aria-modal="true"
  • aria-labelledby e aria-describedby collegati automaticamente agli ID interni
  • Focus sul dialog all'apertura
  • Chiusura con Escape (configurabile per singola richiesta tramite closeOnEscape)
  • Usa <Teleport to="body"> per corretto stacking context

TypeScript

import type {
  ConfirmDialogProps,
  ConfirmDialogEmits,
  ConfirmationOptions,
  ConfirmService,
} from '@pzeta/vue-components'