Modal

模态对话框,严格镜像 Semi Design。DOM:.cd-modal-fixed > .cd-modal-mask + .cd-modal-wrap(role=none 滚动/遮罩点击) > .cd-modal(尺寸壳) > .cd-modal-content(role=dialog aria-modal)。API 对齐 Semi 名:visible/closeOnEsc/getPopupContainer/afterClose/motion/okType(5 种)/size(small|medium|large|full-width)/header(Snippet)/footerFill 等。关闭按钮用 IconButton + IconClose(@chenzy-design/icons),标题用 Typography.Title heading=5。受控 visible 不回写,仅 onVisibleChange/onCancel 通知。命令式工厂 Modal.confirm/info/success/warning/error(异步 onOk 自动 loading)+ Modal.destroyAll + Modal.useModal(配合 ModalContextHolder 继承 context)。可拖拽经 modalRender + DragMove(对齐 Semi)。堆叠 z-index 由模块级计数器分配(声明式与命令式共享)。

设计文档

如何引入

import { Modal } from '@chenzy-design/svelte';

基本

通过 visible 控制显隐,onOk / onCancel 处理确认与取消,afterClose 在完全关闭后回调。

底部撑满

设置 footerFill 为 true 可使 Modal footer 底部按钮撑满排列。

点击遮罩层不可关闭

修改 maskClosable 为 false 则不可通过点击遮罩层来关闭对话框。

自定义按钮文字

通过 okText 与 cancelText 属性可自定义按钮显示的文字。

自定义按钮属性

通过 okButtonProps 与 cancelButtonProps 属性可自定义按钮的属性(size / type / disabled 等)。

自定义对话框头部和页脚

通过 header 自定义头部(设为 null 不展示),footer 自定义页脚按钮(设为 null 不展示)。

自定义对话框的样式

通过 style 自定义位置(如 top),centered 居中显示,maskStyle 自定义遮罩,bodyStyle 自定义内容样式。

自定义的对话框

灵活使用 header / footer 等属性实现完全自定义的对话框。

全屏 Modal

使用 fullScreen 可以开启全屏对话框(会覆盖 width / height)。

命令式调用

使用 Modal.confirm / info / success / warning / error 命令式弹出,支持自定义 icon 及所有 Modal props。

Hooks 用法

通过 Modal.useModal 创建 [modal, holder],配合 <ModalContextHolder> 让命令式弹窗继承 context(如 LocaleProvider)。

可拖拽 Modal

通过 modalRender 自定义渲染 Modal 内容,用 DragMove 组件包裹实现可拖拽。

API 参考

Modal

Props

属性说明类型默认值
visible对话框是否可见(受控;受控时不回写)booleanundefined
title标题文案stringundefined
header自定义头部,null 不展示头部Snippet | nullundefined
width宽度number | string448
height高度number | stringundefined
size预设宽度:small(448) / medium(684) / large(920) / full-width(100vw-64px)'small' | 'medium' | 'large' | 'full-width'undefined
centered垂直居中booleanfalse
closable右上角关闭按钮booleantrue
closeIcon自定义关闭图标Snippetundefined
maskClosable点遮罩关闭booleantrue
closeOnEscEsc 关闭booleantrue
confirmLoading确认按钮 loadingbooleanfalse
okText确认按钮文字stringundefined
cancelText取消按钮文字stringundefined
okType确认按钮类型'primary'|'secondary'|'tertiary'|'warning'|'danger''primary'
okButtonProps确认按钮额外 propsRecord<string, unknown>undefined
cancelButtonProps取消按钮额外 propsRecord<string, unknown>undefined
hasCancel是否显示取消按钮booleantrue
footernull 隐藏默认按钮;snippet 自定义尾部(接收 { ok, cancel })Snippet<[{ ok; cancel }]> | nullundefined
footerFill底部按钮撑满booleanfalse
mask是否显示遮罩booleantrue
maskStyle遮罩内联样式stringundefined
bodyStyle内容区内联样式stringundefined
style根节点内联样式(如 top)stringundefined
class根节点类名stringundefined
modalContentClass内容区类名stringundefined
fullScreen全屏(覆盖 width/height)booleanfalse
motion动画开关booleantrue
getPopupContainer指定父级 DOM,缺省 document.body() => HTMLElement | nullundefined
zIndex遮罩/面板的 z-index(缺省由堆叠计数分配)numberundefined
keepDOM关闭时保留内部组件不销毁booleanfalse
lazyRender配合 keepDOM,为 true 时挂载时不渲染booleantrue
icon命令式类型图标Snippetundefined
modalRender自定义渲染 Modal content;接收默认 content Snippet,返回包裹结构(可拖拽经此 + DragMove)Snippet<[Snippet]>undefined
children内容主体Snippetundefined
ariaLabel无 title 时的 aria-labelstringundefined
onOk点击确认() => voidundefined
onCancel取消/关闭() => voidundefined
afterClose对话框完全关闭后回调() => voidundefined
onVisibleChange显隐变化通知(visible: boolean) => voidundefined
maskFixed遮罩是否 position:fixed;false 时 absolute,配合 getPopupContainer 局部弹层booleantrue

Events

事件载荷说明
onOk确认按钮点击(非受控自动关闭)
onCancel取消/关闭按钮/遮罩/Esc 关闭
onVisibleChange显隐变化通知
afterClose完全关闭后

Slots

名称说明
children内容主体
header自定义头部(null 不展示)
footer自定义尾部(接收 { ok, cancel })
closeIcon自定义关闭图标
icon命令式类型图标
modalRender自定义渲染 content(可拖拽)

Methods

属性类型说明
Modal.info / success / error / warning / confirm(config) => { destroy, update }命令式弹出,异步 onOk 自动 loading
Modal.destroyAll() => void销毁所有命令式弹窗
Modal.useModal() => [modal, holder]返回命令式 api + holder,配合 <ModalContextHolder> 继承 context

Accessibility

  • role=dialog + aria-modal=true;有 title 用 aria-labelledby 指向 Typography.Title,无则 aria-label;aria-describedby 指向 body;useFocusTrap 捕获 Tab 并在关闭时归还触发元素;closeOnEsc 控制 Esc;useScrollLock 锁背景滚动;背景 inert;关闭按钮 IconButton 有 aria-label;motion 关闭过渡受 prefers-reduced-motion 抑制。

设计变量

变量默认值用法
--cd-color-modal-bg var(--cd-color-bg-2)模态框背景颜色
--cd-color-modal-content-border var(--cd-color-border)模态框描边颜色
--cd-color-modal-danger-icon var(--cd-color-danger)模态框危险图标颜色
--cd-color-modal-footer-bg transparent模态框 footer 背景填充色
--cd-color-modal-footer-border transparent模态框 footer 顶部描边颜色
--cd-color-modal-header-bg transparent模态框 header 背景填充色
--cd-color-modal-header-border transparent模态框 header 底部描边颜色
--cd-color-modal-info-icon var(--cd-color-info)模态框信息图标颜色
--cd-color-modal-main-text var(--cd-color-text-0)模态框文字颜色
--cd-color-modal-mask-bg var(--cd-color-overlay-bg)模态框蒙层颜色