Toast 使用手册
v2.3.3 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
用短暂通知反馈操作结果或状态变化,支持图标、操作和富内容,适合保存成功、错误与提醒。
使用选择
用于短暂的操作结果反馈,配合 Toaster 管理展示。通知历史、活动记录使用常驻内容列表,不使用 Toast。
调用 toast 发送短暂反馈,由 Toaster 管理队列;独立渲染时页面负责关闭后的移除。
as="toast" 可接入宿主点击触发;leading / trailing 组合附属内容,parts 只配置默认关闭按钮。短标签使用继承的 singleLine 与 Text lines={1};内部有效间距至少4 CSS px,rich 多行正文保持原布局。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
Toaster 内置组件双模式
Toaster.parts.Toast:统一配置 Toaster 直接生成的 Toast;Toaster.parts.Text只配置 text 字符串生成的标签,不接管自定义 children。Toast 队列状态、position 与关闭事件由 Toaster 控制;外置显式 Props 高于 part。
Toast 是 SnowUI 的全局通知组件。整套能力由三件交付物组成:
独立 Panel 模式的 Toast 根显式使用 GENERIC_SCALE_APPEAR_MOTION,保持原 Frame generic appear 的 opacity + scale 视觉与标准时序,不再通过 whileAppear={true} 隐式跟随 Frame fallback。Toaster 队列仍使用位置相关的显式 slide + opacity + scale 组合,两层既有视觉均保持不变。
功能概览
6 个固定位置:
top/top-left/top-right/bottom/bottom-left/bottom-right,距视口边缘 16px,默认top三槽位布局(Leading / Content / Trailing);内置图标支持外置 Icon 替换
默认变体(
default):深色 pill,并使用blur(var(--size-10))背景模糊;rich 变体:Background/3玻璃卡片,复用.snowui-quick-action-panel的背景模糊自动消失:默认 4 秒;
duration: 0表示常驻自动消失计时在最上层 Toast hover 时暂停,离开 hover 后按剩余时间恢复
多个同位置 Toast 自动堆叠(HeroUI 风格):默认
gap=8、maxVisible=3、scaleStep=0.05、stackOpacityStep=0.2、宽度内容自适应(均可配置)出现、退出、堆叠前移与最后一层被挤出动效均在 Toast 根元素组合:生命周期使用
transform + opacity,堆叠使用独立translate + scale,堆叠透明度直接合并进 Frame fade 数值;关闭时先进入Disappear,动画完成后再从队列移除
布局模型
主布局模型:复合管理布局。
Toaster 是页面级 Portal,挂载到
<body>上,使用 6 个绝对定位区域承载 Toast 栈;每个栈槽位是绝对定位的Frame,由currentState="Appear" | "Disappear"驱动默认动效栈槽位按 HeroUI 的 index 规则写入
translate/z-index:frontmost index = 0,后层向内侧偏移非 frontmost Toast 禁止交互,但仍保留真实 Toast 内容;叠层差异由位移、缩放、透明度三种动效组合给出
单条 Toast 内部为槽位宿主布局(
Frame row+ 三槽位),Leading / Content / Trailing 标准结构关闭 X 按钮属于 rich 变体的内置 trailing 装饰;通过绝对定位浮在 Toast 右上角,不参与三槽位
toast(input) — 命令式入口
辅助函数:
dismissToast(id: string): void— 关闭指定 ToastdismissAllToasts(position?: ToastPosition): void— 关闭全部或指定位置的 ToastshowToast(id: string, overrides?: ToastOptions): string | undefined— 通过<Toast template id="...">注册的模板触发通知;overrides可覆盖位置、时长等运行时参数
<Toaster />
动效要点
结论:
Toast 动效采用单根元素组合结构。
whileAppear / whileDisappear输出生命周期transform与--su-motion-opacity;堆叠位移和缩放分别使用 CSS 独立属性translate/scale,不会覆盖生命周期 transform。堆叠透明度直接乘入生命周期 fade 数值;默认第 2 层为
0.8、第 3 层为0.6,退场时再降低当前透明度的20%。退出额外越界距离直接合并进
--snowui-toast-stack-translate-y,与生命周期的百分比位移共同作用,确保深层 Toast 也能越过可视区域边缘。背景、阴影和
backdrop-filter始终属于同一个 Toast 根元素,不创建独立 blur plate。maxVisible只限制可见层数,不限制toast()入队数量。超过可见层后,当前最后一层进入pushed-out,不是丢弃新 Toast。自动消失计时在同位置任一可见层 hover 时暂停,离开后恢复;只有
idle层 hover 显示关闭 X,后层不显示 X。
动效参数表
<Toast />(视觉单元)
继承 FrameProps(排除 children),并新增:
v2.0.0 起:移除
title/description/icon三个 prop。文字内容统一通过 children 外置;内置图标由positive判定(undefined 时不显示)。
全局挂载 + 命令式触发
静态使用(不通过 toast())
内嵌模式 (v1.1.0,as="toast")
Toast 作为宿主子节点,点击宿主即触发,无需 id、无需手动 showToast。遵循 ComponentGuidelines.md §5 浮层组件三激活模式规范(源码参考:specs/maintainers/ComponentGuidelines.md)。
声明式模板 + 按钮触发
替换内置图标
此区域由用户维护;AI 修改前请先取得许可。
Toast 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
Toast 类型与状态
必填属性:无具名必填属性。
可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。
继承声明:Omit<FrameProps, "children">。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
ComponentPartsOf
来源:components/src/logic/component-parts.svelte.ts
ConfigurableComponentPartProps
来源:components/src/logic/component-parts.svelte.ts
ComponentPartControlledKey
来源:components/src/logic/component-parts.svelte.ts
ToastVariant
来源:components/src/logic/toast.svelte.ts
ToastSize
来源:components/src/logic/toast.svelte.ts
ToastPosition
来源:components/src/logic/toast.svelte.ts