Skip to content
API 风格:

Popconfirm (تأكيد منبثق) ​

تأكيد ثانوي خفيف: يظهر فقاعة تأكيد بالقرب من المُطلِّق دون الحاجة إلى فتح مربع حوار. دلالته تأكيد اعتراضي (role="alertdialog"): عند الفتح يقع التركيز على زر «التأكيد»، ويدور Tab بين الزرَّين، ويُعتبَر Escape إلغاءً.

الاستخدام الأساسي ​

تأكيد الحذف
vue
<template>
  <LhPopconfirm title="هل أنت متأكد من حذف هذا السجل؟" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">حذف</LhButton>
  </LhPopconfirm>
</template>

<script setup lang="ts">
import { ref } from 'vue'
const action = ref('')
function onConfirm() {
  action.value = 'تم التأكيد'
}
function onCancel() {
  action.value = 'تم الإلغاء'
}
const pcVisible = ref(false)
</script>
vue
<script>
export default {
  data() {
    return { action: '', pcVisible: false }
  },
  methods: {
    onConfirm() {
      this.action = 'تم التأكيد'
    },
    onCancel() {
      this.action = 'تم الإلغاء'
    },
  },
}
</script>

<template>
  <LhPopconfirm title="هل أنت متأكد من حذف هذا السجل؟" @confirm="onConfirm" @cancel="onCancel">
    <LhButton type="danger">حذف</LhButton>
  </LhPopconfirm>
</template>

ثلاث نبرات ​

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

<template>
  <!-- نبرة المعلومات -->
  <LhPopconfirm type="info" title="عرض سجل الوصول لهذا السجل؟">
    <LhButton>معلومات</LhButton>
  </LhPopconfirm>
  <!-- نبرة التحذير -->
  <LhPopconfirm type="warning" title="ستُبلَّغ بهذه العملية جميع الأعضاء.">
    <LhButton type="warning">تحذير</LhButton>
  </LhPopconfirm>
  <!-- نبرة الخطر -->
  <LhPopconfirm type="danger" title="لا يمكن التراجع عن الحذف.">
    <LhButton type="danger">خطر</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- نبرة المعلومات -->
  <LhPopconfirm type="info" title="عرض سجل الوصول لهذا السجل؟">
    <LhButton>معلومات</LhButton>
  </LhPopconfirm>
  <!-- نبرة التحذير -->
  <LhPopconfirm type="warning" title="ستُبلَّغ بهذه العملية جميع الأعضاء.">
    <LhButton type="warning">تحذير</LhButton>
  </LhPopconfirm>
  <!-- نبرة الخطر -->
  <LhPopconfirm type="danger" title="لا يمكن التراجع عن الحذف.">
    <LhButton type="danger">خطر</LhButton>
  </LhPopconfirm>
</template>

نص مخصَّص وموضع ​

النص / الموضع / طريقة الإطلاق
vue
<script setup lang="ts">
</script>

<template>
  <!-- نص مخصَّص وموضع -->
  <LhPopconfirm
    title="يمكن الاستعادة من سلة المهملات بعد الأرشفة."
    confirm-text="أرشفة"
    cancel-text="لأفكّر مجددًا"
    placement="right"
  >
    <LhButton>نص مخصَّص</LhButton>
  </LhPopconfirm>
  <!-- إطلاق بالمرور -->
  <LhPopconfirm title="اكتمل التأكيد بمجرد المرور." trigger="hover" :show-after="0" placement="bottom">
    <LhButton>إطلاق بالمرور</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- نص مخصَّص وموضع -->
  <LhPopconfirm
    title="يمكن الاستعادة من سلة المهملات بعد الأرشفة."
    confirm-text="أرشفة"
    cancel-text="لأفكّر مجددًا"
    placement="right"
  >
    <LhButton>نص مخصَّص</LhButton>
  </LhPopconfirm>
  <!-- إطلاق بالمرور -->
  <LhPopconfirm title="اكتمل التأكيد بمجرد المرور." trigger="hover" :show-after="0" placement="bottom">
    <LhButton>إطلاق بالمرور</LhButton>
  </LhPopconfirm>
</template>

يُؤخَذ نص الزرَّين افتراضيًا من حزمة اللغة popconfirm.confirm / popconfirm.cancel، ويمكن تجاوزهما بـ confirm-text / cancel-text.

الأيقونة ونوع زر التأكيد ومفاتيح السلوك ​

يعرض show-icon أيقونة التحذير، ويغيّر confirm-button-type النوع الأساسي لزر التأكيد؛ ويعطّل disabled المُطلِّق؛ ويتحكّم v-model:visible في الإظهار والإخفاء واردًا؛ ويؤخّر hide-after الطيّ التلقائي؛ ويخصّص popper-class / teleport-target الطبقة المنبثقة.

أيقونة ونوع الزر
vue
<script setup lang="ts">
import { ref } from 'vue'
const pcVisible = ref(false)
</script>

<template>
  <!-- أيقونة ونوع زر التأكيد -->
  <LhPopconfirm title="هل أنت متأكد من حذف هذا السجل؟" show-icon confirm-button-type="primary">
    <LhButton type="danger">بأيقونة</LhButton>
  </LhPopconfirm>
  <!-- تعطيل الإطلاق -->
  <LhPopconfirm title="هذه العملية غير متاحة." disabled>
    <LhButton disabled>معطّل</LhButton>
  </LhPopconfirm>
  <!-- إظهار وإخفاء موجَّهان مع تأخير الطيّ -->
  <LhPopconfirm v-model:visible="pcVisible" title="فقاعة موجَّهة" :hide-after="1000">
    <LhButton>{{ pcVisible ? 'طيّ' : 'عرض' }}</LhButton>
  </LhPopconfirm>
</template>
vue
<script>
export default {
  data() {
    return { pcVisible: false }
  },
}
</script>

<template>
  <!-- أيقونة ونوع زر التأكيد -->
  <LhPopconfirm title="هل أنت متأكد من حذف هذا السجل؟" show-icon confirm-button-type="primary">
    <LhButton type="danger">بأيقونة</LhButton>
  </LhPopconfirm>
  <!-- تعطيل الإطلاق -->
  <LhPopconfirm title="هذه العملية غير متاحة." disabled>
    <LhButton disabled>معطّل</LhButton>
  </LhPopconfirm>
  <!-- إظهار وإخفاء موجَّهان مع تأخير الطيّ -->
  <LhPopconfirm v-model:visible="pcVisible" title="فقاعة موجَّهة" :hide-after="1000">
    <LhButton>{{ pcVisible ? 'طيّ' : 'عرض' }}</LhButton>
  </LhPopconfirm>
</template>

Popconfirm API ​

Props ​

اسم الخاصيةالوصفالنوعالافتراضي
typeنبرة التأكيد"info" | "warning" | "danger"'warning'
placementموضع العرض"top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end"'top'
triggerطريقة الإطلاق"click" | "hover" | "focus" | "manual"'click'
titleمحتوى التأكيد (يمكن أيضًا استخدام فتحة content)string—
confirmTextنص زر التأكيد (عند عدم التمرير يُؤخذ من حزمة اللغة popconfirm.confirm)string—
cancelTextنص زر الإلغاء (عند عدم التمرير يُؤخذ من حزمة اللغة popconfirm.cancel)string—
confirmButtonTypeنوع زر التأكيد"default" | "primary"'primary'
visibleحالة العرض الموجَّهة يدويًا (v-model:visible)boolean—
disabledهل يعطَّلboolean—
showIconهل تُعرض أيقونة النبرةbooleantrue
popperClassصنف CSS مخصَّص للطبقة المنبثقةstring—
teleportTargetهدف Teleport (مُحدِّد أو عنصر، الافتراضي body)string | HTMLElement'body'
showAfterزمن تأخير الإظهار (ms)number—
hideAfterزمن تأخير الإخفاء (ms)number—
themeVarsمتغيّرات السمة على مستوى المكوّن، تتجاوز إعداد ConfigProvider{ [x: string]: string; }—
bgPatternنمط الخلفية على مستوى المكوّن، يتجاوز إعداد ConfigProviderstring—
sxخصائص التخطيط السريع sx (تُطبَّق على العنصر الجذري للمُطلِّق)LhSxProps—

Events ​

اسم الحدثالوصفوسائط الاستدعاء
confirmيُطلق بعد النقر على زر التأكيد—
cancelيُطلق بعد النقر على زر الإلغاء أو الضغط على Escape—
update:visibleتغيّر الإظهار والإخفاء(value: boolean)
showيُطلق بعد الظهور—
hideيُطلق بعد الاختفاء—

Slots ​

اسم الفتحةالوصف
defaultمحتوى المُطلِّق
contentمحتوى تأكيد مخصَّص

Methods ​

اسم الطريقةالوصف
showإظهار برمجي
hideإخفاء برمجي
toggleتبديل برمجي

إمكانية الوصول ​

  • الطبقة المنبثقة هي role="alertdialog" + aria-modal="true"، ويحمل المُطلِّق aria-haspopup / aria-expanded
  • عند الفتح يقع التركيز على زر «التأكيد»، ويدور Tab بين زرَّي العملية، ويُعاد التركيز إلى المُطلِّق بعد الإغلاق
  • يُعتبَر Escape إلغاءً (موائمًا لـ WAI-ARIA alertdialog: يُغلق Escape ويُعتبَر ردًا سلبيًا)
  • يُربَط محتوى التأكيد عبر aria-labelledby؛ وأيقونة النبرة زخرفية (aria-hidden)

تعريفات الأنواع ​

بنى TypeScript التي يصدّرها هذا المكوّن للخارج (مستخرجة تلقائيًا من packages/components/popconfirm/src/types.ts و@lh-ui/share/core/*؛ انقر كل عنصر لتوسيع تعريفه الكامل؛ لأوصاف الخصائص انظر جدول Props أعلاه):

LhPopconfirmProps
ts
/**
 * Props مكوّن Popconfirm
 */
export interface LhPopconfirmProps {
  /** نبرة التأكيد */
  type?: LhPopconfirmType
  /** موضع العرض */
  placement?: LhPlacement
  /** طريقة الإطلاق */
  trigger?: LhPopconfirmTrigger
  /** محتوى التأكيد (يمكن أيضًا استخدام فتحة content) */
  title?: string
  /** نص زر التأكيد (عند عدم التمرير يُؤخذ من حزمة اللغة popconfirm.confirm) */
  confirmText?: string
  /** نص زر الإلغاء (عند عدم التمرير يُؤخذ من حزمة اللغة popconfirm.cancel) */
  cancelText?: string
  /** نوع زر التأكيد */
  confirmButtonType?: 'default' | 'primary'
  /** حالة العرض الموجَّهة يدويًا (v-model:visible) */
  visible?: boolean
  /** هل يعطَّل */
  disabled?: boolean
  /** هل تُعرض أيقونة النبرة */
  showIcon?: boolean
  /** صنف CSS مخصَّص للطبقة المنبثقة */
  popperClass?: string
  /** هدف Teleport (مُحدِّد أو عنصر، الافتراضي body) */
  teleportTarget?: string | HTMLElement
  /** زمن تأخير الإظهار (ms) */
  showAfter?: number
  /** زمن تأخير الإخفاء (ms) */
  hideAfter?: number
  /** متغيّرات السمة على مستوى المكوّن، تتجاوز إعداد ConfigProvider */
  themeVars?: Record<string, string>
  /** نمط الخلفية على مستوى المكوّن، يتجاوز إعداد ConfigProvider */
  bgPattern?: string
  /** خصائص التخطيط السريع sx (تُطبَّق على العنصر الجذري للمُطلِّق) */
  sx?: LhSxProps
}
LhPopconfirmPlacement (مأخوذ من @lh-ui/share/core/shared/popper)
ts
/**
 * محرّك تحديد موضع Popper (دوال نقية، بلا اعتماد على إطار عمل)
 *
 * حسابات هندسية مشتركة بين الطبقات المنبثقة
 * (Tooltip / Popover / Popconfirm / Dropdown وغيرها):
 * وضع 12 موضعًا، الانقلاب عند تجاوز المحور الرئيسي (flip)،
 * والحبس على المحور المتقاطع (shift).
 * جميع المُدخلات قيم rect حرفية، لا تُلامس DOM، ويمكن اختبارها مباشرة.
 */

/** جهة الطبقة المنبثقة (اتجاه + محاذاة) */
export type LhPlacement =
  | 'top'
  | 'top-start'
  | 'top-end'
  | 'bottom'
  | 'bottom-start'
  | 'bottom-end'
  | 'left'
  | 'left-start'
  | 'left-end'
  | 'right'
  | 'right-start'
  | 'right-end'
LhPopconfirmTrigger (مأخوذ من @lh-ui/share/core/popconfirm (logic.ts))
ts
/** طريقة الإطلاق */
export type LhPopconfirmTrigger = 'click' | 'hover' | 'focus' | 'manual'
LhPopconfirmType (مأخوذ من @lh-ui/share/core/popconfirm (logic.ts))
ts
/** نبرة التأكيد */
export type LhPopconfirmType = 'info' | 'warning' | 'danger'

جمال التقاليد، أساس الكود