@cordis-tavern/ct-ui-tools
浏览器 Cordis 服务 uiTool:非模态 toast(五态)+ 模态 modal(normal / risk)。
原生 DOM,零运行期依赖;颜色只消费 --ct-color-*,缺主题时用兜底色。
服务面
const loading = uiTool.toast('info', '正在保存…')
loading.done(true, '保存成功')
const ok = await uiTool.modal('risk', {
title: '删除数据表?',
message: '此操作将永久删除 users_backup。',
detail: '删除后无法恢复。',
confirmText: '永久删除',
cancelText: '取消',
})
其他客户端插件经 cordis inject: ['uiTool'] 使用。
toast
uiTool.toast(type?, context)
| type | 自动消失 | 点击 | 返回 | 视觉 |
|---|---|---|---|---|
success | 2000ms | 可 | undefined | --ct-color-success + ✓ |
error | 不 | 可,带守卫 | undefined | --ct-color-error + ! |
warning | 5000ms | 可 | undefined | --ct-color-warning + ! |
info | 不 | 不可 | ToastHandle | --ct-color-info + 转圈 |
| 省略 | 2000ms | 可 | undefined | --ct-color-info,无图标 |
info 是 loading:
const handle = uiTool.toast('info', '正在保存…')
handle.done(true, '保存成功') // 同一节点转 success,2s 后消失
handle.done(false, '保存失败') // 同一节点转 error,常驻
done只生效一次。context省略时保留 loading 原文案。- loading 期间点击无效。
error 防误关
按住 ≥ 500ms、指针位移 > 10px、或 toast 内有非折叠选区时,点击不会关闭;
普通短按才关闭。长文本会换行,error 文本可选中复制。
堆叠
顶部居中,同屏最多 4 条,超出先关最旧的一条。
modal
uiTool.modal(type, context?): Promise<boolean>
| type | 说明 |
|---|---|
normal | 普通确认,蓝色语义 |
risk | 风险确认,红色语义 + detail 红框 |
context:
| 字段 | 默认 | 说明 |
|---|---|---|
title | 提示 | 标题 |
message | '' | 正文 |
detail | '' | 额外说明;空串不渲染,risk 下为红色提示框,normal 下为中性提示框 |
confirmText | 确定 | 确认按钮 |
cancelText | 取消 | 取消按钮 |
closeOnOverlay | true | 点遮罩是否关闭 |
- 确认
true;取消 / Esc / 点遮罩false。 - 初始焦点:normal 在确认,risk 在取消;Tab 焦点陷阱,关闭后焦点回到触发元素。
- 同一时刻只有一个 modal;开第二个时前一个以
false收尾,旧 modal 不抢焦点、不解锁滚动。 - 打开时锁 body 滚动。
视觉
- z-index:toast
30000,modal20000(高于 layout overlay 的10000)。 - 颜色只引用 token 且带兜底:success
#47A76E、error#EA6B58、warning#C97A1A、info#5B8DEF、surface#1F1F1F、surface-2#262626、border#333333、text#D6D6D6。 - 类名前缀
ct-ui-toast/ct-ui-modal/ct-ui-tools;样式一次性注入<style id="ct-ui-tools-style">。 prefers-reduced-motion下只保留透明度过渡。
包形态
| 项 | 值 |
|---|---|
| Node 入口 | 空 apply,只进发现链 |
| 浏览器入口 | exports["./client"] IIFE,provide('uiTool') |
| 声明 | insert id: uiTool;ct.client.inject: ["@cordis-tavern/ct-client-cordis"] |
| 依赖 | 运行期零依赖;peer 与兄弟包一致 |
安装:
ct plugin add -p <环境名> @cordis-tavern/ct-ui-tools
开发
pnpm install
pnpm build
pnpm test
pnpm typecheck
pnpm test 读取 dist/,先 pnpm build。
License
MIT