Popconfirm
气泡确认框:目标元素操作需二次确认时使用。封装 Popover,内置确认/取消双按钮 + 可选右上角关闭按钮,比 Modal 更轻量。支持 title/content(content 可为函数注入 initialFocusRef)、icon(缺省 IconAlertTriangle)、okType/cancelType、okButtonProps/cancelButtonProps(含 autoFocus)、onConfirm/onCancel 返回 Promise 时对应按钮 loading(resolve 关闭 / reject 保持)、12 方位 position(默认 bottomLeft)。role=dialog non-modal。
如何引入
import { Popconfirm } from '@chenzy-design/svelte';基础使用
点击触发元素弹出确认气泡,内置确认/取消按钮,比 Modal 更轻量。
类型搭配
气泡确认框本身无 type 分级 prop,通过 icon 颜色与 okType 搭配出不同风格。
确定是否要保存此修改?
此修改将不可逆
延时关闭
onConfirm/onCancel 返回 Promise 时对应按钮自动 loading,resolve 后关闭、reject 保持打开。
初始化弹出层焦点
okButtonProps/cancelButtonProps 传 autoFocus,或 content 函数用 initialFocusRef 绑定,打开时自动聚焦。
关闭按钮
showCloseIcon 默认 true 展示右上角关闭按钮,设为 false 可隐藏。
箭头
showArrow 显示指向触发元素的小三角,arrowPointAtCenter 令三角指向元素中心。
API 参考
Popconfirm
Props
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
visible | 受控显隐(配合 trigger=custom);不回写,仅 onVisibleChange | boolean | undefined |
defaultVisible | 非受控初始显隐 | boolean | false |
title | 标题(文本或富文本 Snippet) | string | Snippet | undefined |
content | 正文;函数 Snippet 入参含 initialFocusRef,绑定后打开时聚焦(对齐 Semi) | string | Snippet<[{ initialFocusRef }]> | undefined |
icon | 自定义图标;false 隐藏;缺省 IconAlertTriangle(警示色) | Snippet | false | <IconAlertTriangle size="extra-large"/> |
okText | 确认按钮文字 | string | '确认'(locale) |
cancelText | 取消按钮文字 | string | '取消'(locale) |
okType | 确认按钮类型(对齐 Semi) | 'primary'|'secondary'|'tertiary'|'warning'|'danger' | 'primary' |
cancelType | 取消按钮类型(对齐 Semi) | ButtonType | 'tertiary' |
okButtonProps | 透传确认按钮额外属性(含 autoFocus;onclick/loading/theme 组件托管) | ExtraButtonProps | undefined |
cancelButtonProps | 透传取消按钮额外属性(含 autoFocus;onclick/loading/disabled 组件托管) | ExtraButtonProps | undefined |
showCloseIcon | 是否显示右上角关闭按钮(对齐 Semi) | boolean | true |
position | 弹出方位(对齐 Semi 默认 bottomLeft) | 'top'|'topLeft'|...|'bottomRight' 等 12 方位 | 'bottomLeft' |
trigger | 触发方式(对齐 Semi) | 'click'|'hover'|'focus'|'custom' | 'click' |
disabled | 点击子元素是否弹出,false 不弹(对齐 Semi) | boolean | false |
closeOnEsc | Esc 关闭,受控时不生效(对齐 Semi) | boolean | true |
arrowPointAtCenter | 箭头指向触发元素中心(需 showArrow,对齐 Semi) | boolean | false |
showArrow | 是否显示箭头三角(对齐 Semi) | boolean | false |
motion | 入场动效(reduced-motion 退化) | boolean | true |
mouseEnterDelay | hover 进入延迟(ms) | number | 50 |
mouseLeaveDelay | hover 离开延迟(ms) | number | 50 |
getPopupContainer | 自定义浮层容器(对齐 Semi) | () => HTMLElement | undefined |
zIndex | 浮层层级(对齐 Semi) | number | 1030 |
guardFocus | Tab 焦点在浮层内循环(对齐 Semi) | boolean | true |
returnFocusOnClose | Esc 后焦点回到 trigger(仅 click,对齐 Semi) | boolean | true |
stopPropagation | 阻止浮层内事件冒泡(对齐 Semi) | boolean | true |
rePosKey | 手动触发重新定位 | string | number | undefined |
class | 卡片自定义类名(对齐 Semi className) | string | '' |
style | 卡片自定义内联样式(对齐 Semi) | string | '' |
children | 触发元素(必填) | Snippet | undefined |
onVisibleChange | 显隐切换回调(对齐 Semi) | (visible: boolean) => void | undefined |
onClickOutSide | 点击浮层外部回调(对齐 Semi) | (e: MouseEvent) => void | undefined |
onEscKeyDown | trigger/浮层按 Esc 回调(对齐 Semi) | (e: KeyboardEvent) => void | undefined |
onConfirm | 确认回调;返回 Promise 时按钮 loading,resolve 关闭 / reject 保持 | (e: MouseEvent) => void | Promise<unknown> | undefined |
onCancel | 取消回调;返回 Promise 时按钮 loading,resolve 关闭 / reject 保持 | (e: MouseEvent) => void | Promise<unknown> | undefined |
Accessibility
| ARIA role | dialog |
| 键盘交互 | EscapeTabShift+TabEnterSpace |
- 浮层 role=dialog(aria-modal=false,复用 Popover),aria-labelledby 指向 Popconfirm 标题
- 触发元素承载 role=button + aria-haspopup=dialog + aria-expanded/controls(复用 Popover dialog 语义)
- guardFocus(默认 true)用 useFocusTrap 陷入焦点,关闭后 returnFocusOnClose 归还触发器
- okButtonProps/cancelButtonProps.autoFocus 或 content 函数 initialFocusRef 控制打开时初始焦点(对齐 Semi)
- closeOnEsc 与外部点击关闭复用 Popover→Tooltip 的 useDismiss
设计变量
| 变量 | 默认值 | 用法 |
|---|---|---|
--cd-color-popconfirm-body-text | var(--cd-color-text-2) | 正文文字颜色 |
--cd-color-popconfirm-header-alert-icon | var(--cd-color-warning) | 警示图标颜色 |
--cd-color-popconfirm-header-text | var(--cd-color-text-0) | 标题文字颜色 |