Overlays

ConfirmPopup

Popup di conferma posizionato vicino all'elemento trigger. Gestito tramite il composable `useConfirmPopup()`, si ancora dinamicamente all'elemento HTML target e si riposiziona automaticamente rispetto ai bordi del viewport.

Import

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

Pattern service con useConfirmPopup()

ConfirmPopup non si usa con v-model. Il componente va registrato una volta nel layout o nella pagina; il popup viene poi aperto programmaticamente tramite useConfirmPopup(), passando l'elemento HTML target come punto di ancoraggio.

1. Registrazione nel template

<!-- App.vue o nel componente che contiene i trigger -->
<template>
  <ConfirmPopup />
  <!-- resto del contenuto -->
</template>

2. Utilizzo nei componenti

Props

PropTipoDefaultDescrizione
groupstring | nullnullGruppo per distinguere popup multipli. Deve corrispondere al campo group nelle opzioni

ConfirmPopupOptions

Oggetto passato a require(options):

OpzioneTipoDefaultDescrizione
targetHTMLElement | nullElemento HTML a cui ancorare il popup (obbligatorio per il posizionamento)
messagestring | nullMessaggio di conferma da mostrare
headerstring | nullTitolo del popup
iconstring | nullicona da ConfigPluginClasse CSS icona (es. pi pi-exclamation-triangle)
groupstring | nullGruppo target (deve corrispondere alla prop group del componente)
positionConfirmPopupPosition'bottom'Posizione preferita del popup rispetto al target
acceptLabelstring | nullt('overlay.confirmAccept')Testo pulsante conferma
rejectLabelstring | nullt('overlay.confirmReject')Testo pulsante rifiuto
acceptIconstring | nullClasse CSS icona pulsante conferma
rejectIconstring | nullClasse CSS icona pulsante rifiuto
acceptClassstring | nullClasse CSS aggiuntiva pulsante conferma
rejectClassstring | nullClasse CSS aggiuntiva pulsante rifiuto
defaultFocus'accept' | 'reject''accept'Elemento che riceve il focus all'apertura
blockScrollbooleanfalseBlocca lo scroll del body quando aperto
accept() => voidCallback eseguito quando l'utente conferma
reject() => voidCallback eseguito quando l'utente rifiuta
onShow() => voidCallback eseguito all'apertura del popup
onHide() => voidCallback eseguito alla chiusura del popup

ConfirmPopupPosition

type ConfirmPopupPosition =
  | 'left' | 'right' | 'top' | 'bottom' | 'center'
  | 'topleft' | 'topright' | 'bottomleft' | 'bottomright'

Il componente aggiusta automaticamente la posizione se il popup uscirebbe dai bordi del viewport.

Emits

EventoPayloadDescrizione
showPopup reso visibile
hidePopup nascosto

Slot

SlotScopeDescrizione
message{ message: ConfirmPopupOptions }Contenuto messaggio personalizzato
icon{ class: string }Icona personalizzata
accepticonIcona pulsante conferma
rejecticonIcona pulsante rifiuto
container{ message, acceptCallback, rejectCallback }Sostituzione completa del contenuto (headless mode)

Esempi

Chiusura programmatica

const { require, close } = useConfirmPopup()

// Chiude il popup aperto senza eseguire i callback
close()

Differenza con ConfirmDialog

ConfirmDialogConfirmPopup
PosizioneCentrato / overlay modaleAncorato all'elemento trigger
ComportamentoBlocca l'intera UI con overlayNon-bloccante, più contestuale
Uso consigliatoAzioni critiche irreversibiliConferme rapide in-context

Accessibilità

  • Renderizzato con role="alertdialog" e aria-modal="true"
  • Il focus viene spostato automaticamente al pulsante accept o reject in base a defaultFocus
  • Chiusura con Escape (esegue il callback reject)
  • Click fuori dal popup chiude e chiama reject
  • Usa <Teleport to="body"> con posizionamento assoluto calcolato via getBoundingClientRect()

TypeScript

import type {
  ConfirmPopupProps,
  ConfirmPopupEmits,
  ConfirmPopupOptions,
  ConfirmPopupPosition,
  UseConfirmPopup,
} from '@pzeta/vue-components'