From 346d51428472d597995a91c2ecf95b0baae2b8e2 Mon Sep 17 00:00:00 2001 From: HIsheR Date: Mon, 26 Oct 2026 23:21:30 +0800 Subject: [PATCH] =?UTF-8?q?iter(g292):=20toast=20=E6=BA=A2=E5=87=BA?= =?UTF-8?q?=E6=94=B9=E8=B5=B0=E9=80=80=E5=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .ua/index.json | 5 +++-- llms-full.txt | 3 ++- packages/skin/ui/src/toast.ts | 3 ++- packages/skin/ui/ua.manifest.json | 3 ++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.ua/index.json b/.ua/index.json index 0daf503..b3575ef 100644 --- a/.ua/index.json +++ b/.ua/index.json @@ -1,6 +1,6 @@ { "$schema": "ui-arch-registry-index/0.1", - "generatedAt": "2026-10-26T15:19:50.061Z", + "generatedAt": "2026-10-26T15:21:15.323Z", "repoRoot": ".", "packages": [ { @@ -1285,7 +1285,8 @@ "多条消息在右上角自动纵向堆叠,互不遮挡", "需要完整入参(含 variant)时用 showToast(props);组件挂载容器由内部懒创建,样式随 ui.css 一起引入", "同屏最多 4 条,超出自动挤掉最早一条;需要用户主动确认的消息用 showToast({ closable: true }) 给个 ×", - "要「撤销」这类操作时给 showToast 传 actionLabel 与 onAction:按钮出现在文案右侧,点完先收起再回调,duration 建议放到 5000 让用户来得及点" + "要「撤销」这类操作时给 showToast 传 actionLabel 与 onAction:按钮出现在文案右侧,点完先收起再回调,duration 建议放到 5000 让用户来得及点", + "同屏最多 4 条:第 5 条进来时最早一条走正常退场(淡出后移除)而不是瞬间消失;要不被挤掉就传 duration: 0 让它常驻,靠 closable 手动关" ] }, { diff --git a/llms-full.txt b/llms-full.txt index 0057326..d9d8bcc 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -1,6 +1,6 @@ # @ui-arch 组件库 Agent 文档(无图形版) -> 自动生成于 2026-10-26T15:19:50.061Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 +> 自动生成于 2026-10-26T15:21:15.323Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。 > 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。 ## 快速上手 @@ -606,6 +606,7 @@ toast.success('保存成功'); toast.error('网络请求失败', 5000) 4. 需要完整入参(含 variant)时用 showToast(props);组件挂载容器由内部懒创建,样式随 ui.css 一起引入 5. 同屏最多 4 条,超出自动挤掉最早一条;需要用户主动确认的消息用 showToast({ closable: true }) 给个 × 6. 要「撤销」这类操作时给 showToast 传 actionLabel 与 onAction:按钮出现在文案右侧,点完先收起再回调,duration 建议放到 5000 让用户来得及点 +7. 同屏最多 4 条:第 5 条进来时最早一条走正常退场(淡出后移除)而不是瞬间消失;要不被挤掉就传 duration: 0 让它常驻,靠 closable 手动关 现场演示:apps/docs/demo.html#sec-toast diff --git a/packages/skin/ui/src/toast.ts b/packages/skin/ui/src/toast.ts index 042d0ed..c1ba3f1 100644 --- a/packages/skin/ui/src/toast.ts +++ b/packages/skin/ui/src/toast.ts @@ -37,7 +37,8 @@ export function showToast(props: ToastProps): HTMLElement { props.closable ? h('button', { type: 'button', class: 'ua-toast-close', 'aria-label': '关闭提示', onClick: () => dismiss(item) }, '×') : null, ); const stack = ensureHost(); - if (stack.childElementCount >= MAX_STACK) stack.firstElementChild?.remove(); // 超过上限直接挤掉最早一条 + const oldest = stack.childElementCount >= MAX_STACK ? stack.firstElementChild : null; + if (oldest) dismiss(oldest as HTMLElement); // 超出上限让最早一条走正常退场:直接 remove 会让它凭空消失,与手动关闭两种手感 stack.appendChild(item); requestAnimationFrame(() => item.classList.add('ua-open')); // 下一帧入场,保证过渡生效 diff --git a/packages/skin/ui/ua.manifest.json b/packages/skin/ui/ua.manifest.json index d3c1796..ce97319 100644 --- a/packages/skin/ui/ua.manifest.json +++ b/packages/skin/ui/ua.manifest.json @@ -1156,7 +1156,8 @@ "多条消息在右上角自动纵向堆叠,互不遮挡", "需要完整入参(含 variant)时用 showToast(props);组件挂载容器由内部懒创建,样式随 ui.css 一起引入", "同屏最多 4 条,超出自动挤掉最早一条;需要用户主动确认的消息用 showToast({ closable: true }) 给个 ×", - "要「撤销」这类操作时给 showToast 传 actionLabel 与 onAction:按钮出现在文案右侧,点完先收起再回调,duration 建议放到 5000 让用户来得及点" + "要「撤销」这类操作时给 showToast 传 actionLabel 与 onAction:按钮出现在文案右侧,点完先收起再回调,duration 建议放到 5000 让用户来得及点", + "同屏最多 4 条:第 5 条进来时最早一条走正常退场(淡出后移除)而不是瞬间消失;要不被挤掉就传 duration: 0 让它常驻,靠 closable 手动关" ] }, {