Skip to content
API 风格:

Popconfirm (confirmation contextuelle) ​

Confirmation légger en deuxième intention : une bulle de confirmation apparaît à proximité du déclencheur, sans nécessiter d'ouvrir un dialogue. La sémantique est celle d'une confirmation bloquante (role="alertdialog") : à l'ouverture, le focus se place sur le bouton « Confirmer », Tab boucle entre les deux boutons et Escape équivaut à une annulation.

Utilisation de base ​

Confirmation de suppression
vue
<template>
  <LhPopconfirm title="Voulez-vous vraiment supprimer cet enregistrement ?" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">Supprimer</LhButton>
  </LhPopconfirm>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const action = ref('')
function onConfirm() {
  action.value = 'Confirmé'
}
function onCancel() {
  action.value = 'Annulé'
}
const pcVisible = ref(false)
</script>
vue
<script>
export default {
  data() {
    return { action: '', pcVisible: false }
  },
  methods: {
    onConfirm() {
      this.action = 'Confirmé'
    },
    onCancel() {
      this.action = 'Annulé'
    },
  },
}
</script>

<template>
  <LhPopconfirm title="Voulez-vous vraiment supprimer cet enregistrement ?" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">Supprimer</LhButton>
  </LhPopconfirm>
</template>

Trois tons ​

info / warning / danger
vue
<script setup lang="ts">
</script>

<template>
  <!-- Ton information -->
  <LhPopconfirm type="info" title="Consulter le journal d'accès de cet enregistrement ?">
    <LhButton>Information</LhButton>
  </LhPopconfirm>
  <!-- Ton avertissement -->
  <LhPopconfirm type="warning" title="Cette opération notifiera tous les membres.">
    <LhButton type="warning">Avertissement</LhButton>
  </LhPopconfirm>
  <!-- Ton danger -->
  <LhPopconfirm type="danger" title="La suppression est irréversible.">
    <LhButton type="danger">Danger</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Ton information -->
  <LhPopconfirm type="info" title="Consulter le journal d'accès de cet enregistrement ?">
    <LhButton>Information</LhButton>
  </LhPopconfirm>
  <!-- Ton avertissement -->
  <LhPopconfirm type="warning" title="Cette opération notifiera tous les membres.">
    <LhButton type="warning">Avertissement</LhButton>
  </LhPopconfirm>
  <!-- Ton danger -->
  <LhPopconfirm type="danger" title="La suppression est irréversible.">
    <LhButton type="danger">Danger</LhButton>
  </LhPopconfirm>
</template>

Libellés et emplacement personnalisés ​

Libellés / emplacement / déclencheur
vue
<script setup lang="ts">
</script>

<template>
  <!-- Libellés et emplacement personnalisés -->
  <LhPopconfirm
    title="Après archivage, la restauration est possible depuis la corbeille."
    confirm-text="Archiver"
    cancel-text="Réfléchir encore"
    placement="right"
  >
    <LhButton>Libellés personnalisés</LhButton>
  </LhPopconfirm>
  <!-- Déclenchement au survol -->
  <LhPopconfirm title="Survolez pour confirmer." trigger="hover" :show-after="0" placement="bottom">
    <LhButton>Déclenchement au survol</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Libellés et emplacement personnalisés -->
  <LhPopconfirm
    title="Après archivage, la restauration est possible depuis la corbeille."
    confirm-text="Archiver"
    cancel-text="Réfléchir encore"
    placement="right"
  >
    <LhButton>Libellés personnalisés</LhButton>
  </LhPopconfirm>
  <!-- Déclenchement au survol -->
  <LhPopconfirm title="Survolez pour confirmer." trigger="hover" :show-after="0" placement="bottom">
    <LhButton>Déclenchement au survol</LhButton>
  </LhPopconfirm>
</template>

Les libellés des boutons proviennent par défaut du paquet de langue popconfirm.confirm / popconfirm.cancel, surchargeables via confirm-text / cancel-text.

Icône, type du bouton de confirmation et commutateurs de comportement ​

show-icon affiche l'icône d'avertissement, confirm-button-type change le type principal du bouton de confirmation ; disabled désactive le déclencheur ; v-model:visible contrôle l'affichage ; hide-after retarde le repli automatique ; popper-class / teleport-target personnalisent la couche flottante.

Icône et type de bouton
vue
<script setup lang="ts">
import { ref } from 'vue'
const pcVisible = ref(false)
</script>

<template>
  <!-- Icône et type du bouton de confirmation -->
  <LhPopconfirm title="Voulez-vous vraiment supprimer cet enregistrement ?" show-icon confirm-button-type="primary">
    <LhButton type="danger">Avec icône</LhButton>
  </LhPopconfirm>
  <!-- Déclencheur désactivé -->
  <LhPopconfirm title="Cette opération n'est pas disponible." disabled>
    <LhButton disabled>Désactivé</LhButton>
  </LhPopconfirm>
  <!-- Affichage contrôlé et repli différé -->
  <LhPopconfirm v-model:visible="pcVisible" title="Bulle contrôlée" :hide-after="1000">
    <LhButton>{{ pcVisible ? 'Replier' : 'Déplier' }}</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {
  data() {
    return { pcVisible: false }
  },
}
</script>

<template>
  <!-- Icône et type du bouton de confirmation -->
  <LhPopconfirm title="Voulez-vous vraiment supprimer cet enregistrement ?" show-icon confirm-button-type="primary">
    <LhButton type="danger">Avec icône</LhButton>
  </LhPopconfirm>
  <!-- Déclencheur désactivé -->
  <LhPopconfirm title="Cette opération n'est pas disponible." disabled>
    <LhButton disabled>Désactivé</LhButton>
  </LhPopconfirm>
  <!-- Affichage contrôlé et repli différé -->
  <LhPopconfirm v-model:visible="pcVisible" title="Bulle contrôlée" :hide-after="1000">
    <LhButton>{{ pcVisible ? 'Replier' : 'Déplier' }}</LhButton>
  </LhPopconfirm>
</template>

API Popconfirm ​

Props ​

PropDescriptionTypeValeur par défaut
typeTon de la confirmation"info" | "warning" | "danger"'warning'
placementPosition d'affichage"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end"'top'
triggerMode de déclenchement"click" | "hover" | "focus" | "manual"'click'
titleContenu de la confirmation (le slot content fonctionne aussi)string—
confirmTextLibellé du bouton de confirmation (par défaut, lit popconfirm.confirm du paquet de langue)string—
cancelTextLibellé du bouton d'annulation (par défaut, lit popconfirm.cancel du paquet de langue)string—
confirmButtonTypeType du bouton de confirmation"default" | "primary"'primary'
visibleÉtat d'affichage contrôlé manuellement (v-model:visible)boolean—
disabledDésactivéboolean—
showIconAfficher l'icône de tonbooleantrue
popperClassNom de classe personnalisé de la couche flottantestring—
teleportTargetCible du Teleport (sélecteur ou élément, body par défaut)string | HTMLElement'body'
showAfterDélai d'affichage (ms)number—
hideAfterDélai de masquage (ms)number—
themeVarsVariables de thème au niveau du composant, prime sur la configuration de ConfigProvider{ [x: string]: string; }—
bgPatternMotif d'arrière-plan au niveau du composant, prime sur la configuration de ConfigProviderstring—
sxProps de mise en page sx (appliquées à l'élément racine du déclencheur)LhSxProps—

Events ​

ÉvénementDescriptionParamètre
confirmÉmis après un clic sur le bouton de confirmation—
cancelÉmis après un clic sur le bouton d'annulation ou sur Escape—
update:visibleChangement d'affichage(value: boolean)
showÉmis après l'affichage—
hideÉmis après le masquage—

Slots ​

SlotDescription
defaultContenu du déclencheur
contentContenu de confirmation personnalisé

Methods ​

MéthodeDescription
showAffichage programmatique
hideMasquage programmatique
toggleBasculement programmatique

Accessibilité ​

  • La couche flottante a role="alertdialog" + aria-modal="true" ; le déclencheur porte aria-haspopup / aria-expanded
  • À l'ouverture, le focus se place sur le bouton « Confirmer », Tab boucle entre les deux boutons d'action et, à la fermeture, le focus est rendu au déclencheur
  • Escape équivaut à une annulation (conforme à alertdialog WAI-ARIA : Escape ferme et vaut réponse négative)
  • Le contenu de la confirmation est lié via aria-labelledby ; l'icône de ton est décorative (aria-hidden)

Définitions de types ​

Ce composant exporte les structures de types TypeScript suivantes (extraites automatiquement de packages/components/popconfirm/src/types.ts et des sources @lh-ui/share/core/* ; cliquez sur chaque entrée pour déplier la définition complète ; la description des props se trouve dans le tableau Props ci-dessus) :

LhPopconfirmProps
ts
/**
 * Props du composant Popconfirm
 */
export interface LhPopconfirmProps {
  /** Ton de la confirmation */
  type?: LhPopconfirmType
  /** Position d'affichage */
  placement?: LhPlacement
  /** Mode de déclenchement */
  trigger?: LhPopconfirmTrigger
  /** Contenu de la confirmation (le slot content fonctionne aussi) */
  title?: string
  /** Libellé du bouton de confirmation (par défaut, lit popconfirm.confirm du paquet de langue) */
  confirmText?: string
  /** Libellé du bouton d'annulation (par défaut, lit popconfirm.cancel du paquet de langue) */
  cancelText?: string
  /** Type du bouton de confirmation */
  confirmButtonType?: 'default' | 'primary'
  /** État d'affichage contrôlé manuellement (v-model:visible) */
  visible?: boolean
  /** Désactivé */
  disabled?: boolean
  /** Afficher l'icône de ton */
  showIcon?: boolean
  /** Nom de classe personnalisé de la couche flottante */
  popperClass?: string
  /** Cible du Teleport (sélecteur ou élément, body par défaut) */
  teleportTarget?: string | HTMLElement
  /** Délai d'affichage (ms) */
  showAfter?: number
  /** Délai de masquage (ms) */
  hideAfter?: number
  /** Variables de thème au niveau du composant, prime sur la configuration de ConfigProvider */
  themeVars?: Record<string, string>
  /** Motif d'arrière-plan au niveau du composant, prime sur la configuration de ConfigProvider */
  bgPattern?: string
  /** Props de mise en page sx (appliquées à l'élément racine du déclencheur) */
  sx?: LhSxProps
}
LhPopconfirmPlacement (provenant de @lh-ui/share/core/shared/popper)
ts
/**
 * Moteur de positionnement Popper (fonctions pures, sans dépendance framework)
 *
 * Calculs géométriques partagés par les couches flottantes
 * (Tooltip / Popover / Popconfirm / Dropdown, etc.) :
 * positionnement selon 12 placements, retournement sur l'axe principal en cas de
 * débordement (flip), recentrage sur l'axe secondaire (shift).
 * Tous les paramètres sont des littéraux rect, sans toucher au DOM,
 * directement testables par tests unitaires.
 */

/** Orientation de la couche flottante (direction + alignement) */
export type LhPlacement =
  | 'top'
  | 'top-start'
  | 'top-end'
  | 'bottom'
  | 'bottom-start'
  | 'bottom-end'
  | 'left'
  | 'left-start'
  | 'left-end'
  | 'right'
  | 'right-start'
  | 'right-end'
LhPopconfirmTrigger (provenant de @lh-ui/share/core/popconfirm (logic.ts))
ts
/** Mode de déclenchement */
export type LhPopconfirmTrigger = 'click' | 'hover' | 'focus' | 'manual'
LhPopconfirmType (provenant de @lh-ui/share/core/popconfirm (logic.ts))
ts
/** Ton de la confirmation */
export type LhPopconfirmType = 'info' | 'warning' | 'danger'

La beauté de la tradition, la fondation du code