异步示例首次模拟失败,重试后成功。
<div class="demo-row"> <button class="icen-btn" id="toast-demo-ok">成功提示</button> <button class="icen-btn" id="toast-demo-err">错误提示</button> <button class="icen-btn" id="toast-demo-warn">警告提示</button> <button class="icen-btn" id="toast-demo-close">可关闭提示</button> <button class="icen-btn" id="toast-demo-async">撤销与重试</button></div><p class="demo-label"><bdi>异步示例首次模拟失败,重试后成功。</bdi></p>
特性
- 四态:
toast.success/toast.error/toast.warn/toast.info语义色 - 动作:
toast.action支持撤销钮与失败重试;closable可关闭、progress倒计时条、ms驻留时长 - 职责:
toast.css提供容器与滑入动画;触发、排队与生命周期在behaviors/toast
反馈族边界:瞬时反应用 toast;需要持久、进度与多按钮的用通知中心;内嵌页面警示用 alert。
接口
- 导出
-
toast - 类型
dist/behaviors/toast.d.mts(随 npm 包发布,含全部 JSDoc 约束)
安装
bun add @icen.ai/ui pnpm add @icen.ai/ui npm install @icen.ai/ui yarn add @icen.ai/ui 一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):
import '@icen.ai/ui/kit/toast';
也可以用脚手架直接打印引入行:
bunx --bun @icen.ai/ui add toast
Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/toast.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。
用法
import { toast } from '@icen.ai/ui/behaviors/toast';toast.success('已保存');toast.error('保存失败');toast.warn('配额将尽');toast.success('内容已更新', { closable: true, ms: 10000 });const h = toast.action('文档已删除', '撤销', async (signal) => { await restoreDocument({ signal }); // 等待完成再关闭;reject 后保留重试}, { closable: true, progress: true, iconName: 'trash' });h.pause(); h.resume(); h.dismiss(); // hover / focus 的暂停彼此独立