iter(g68): alert 增加语义图标与通栏形态
This commit is contained in:
+20
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "ui-arch-registry-index/0.1",
|
"$schema": "ui-arch-registry-index/0.1",
|
||||||
"generatedAt": "2026-10-26T04:35:37.103Z",
|
"generatedAt": "2026-10-26T04:36:57.291Z",
|
||||||
"repoRoot": ".",
|
"repoRoot": ".",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
@@ -1028,6 +1028,23 @@
|
|||||||
"t": "() => void",
|
"t": "() => void",
|
||||||
"k": 1,
|
"k": 1,
|
||||||
"d": "关闭回调,供调用方同步业务状态"
|
"d": "关闭回调,供调用方同步业务状态"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "banner",
|
||||||
|
"t": "boolean",
|
||||||
|
"df": "false",
|
||||||
|
"d": "通栏形态:去圆角、只保留下边框、左右撑满,适合页面顶部通知"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "showIcon",
|
||||||
|
"t": "boolean",
|
||||||
|
"df": "false",
|
||||||
|
"d": "显示语义图标(info ℹ / success ✓ / warning ! / danger ✕),纯装饰不进读屏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "icon",
|
||||||
|
"t": "string | HTMLElement",
|
||||||
|
"d": "自定义图标节点,传了即覆盖语义图标"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
|
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
|
||||||
@@ -1036,7 +1053,8 @@
|
|||||||
"传入 message 即可,入场自带下滑动画",
|
"传入 message 即可,入场自带下滑动画",
|
||||||
"需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色",
|
"需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色",
|
||||||
"需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态",
|
"需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态",
|
||||||
"有标题与正文两层信息时传 title(加粗首行),正文仍走 message"
|
"有标题与正文两层信息时传 title(加粗首行),正文仍走 message",
|
||||||
|
"banner: true 出通栏形态(圆角与左右边框归零),页面顶部通知直接铺满容器即可,不需要额外包裹层"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -370,6 +370,8 @@ const content = h(
|
|||||||
'alert:四档语义色 + 可选标题与关闭按钮,role=alert 由读屏播报。',
|
'alert:四档语义色 + 可选标题与关闭按钮,role=alert 由读屏播报。',
|
||||||
alert({ message: '这是一条中性提示(无标题)', variant: 'info' }),
|
alert({ message: '这是一条中性提示(无标题)', variant: 'info' }),
|
||||||
alert({ title: '保存失败', message: '网络波动,请稍后重试;本次修改已保留在本地草稿。', variant: 'danger', closable: true, onClose: () => toast.warning('提示已关闭') }),
|
alert({ title: '保存失败', message: '网络波动,请稍后重试;本次修改已保留在本地草稿。', variant: 'danger', closable: true, onClose: () => toast.warning('提示已关闭') }),
|
||||||
|
alert({ title: '发布成功', message: '构建产物已上传,5 分钟后全网生效。', variant: 'success', showIcon: true }),
|
||||||
|
alert({ message: '配额即将用尽:本月剩余 8%,超出后新请求会被限流。', variant: 'warning', showIcon: true, banner: true }),
|
||||||
),
|
),
|
||||||
section(
|
section(
|
||||||
'sec-tooltip',
|
'sec-tooltip',
|
||||||
|
|||||||
+5
-1
@@ -1,6 +1,6 @@
|
|||||||
# @ui-arch 组件库 Agent 文档(无图形版)
|
# @ui-arch 组件库 Agent 文档(无图形版)
|
||||||
|
|
||||||
> 自动生成于 2026-10-26T04:35:37.103Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
> 自动生成于 2026-10-26T04:36:57.291Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
|
||||||
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
|
||||||
|
|
||||||
## 快速上手
|
## 快速上手
|
||||||
@@ -496,6 +496,9 @@ avatar({ name: '张三' }); avatar({ name: 'Alice', size: 40, variant: 'success'
|
|||||||
- variant(默认 info):'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info
|
- variant(默认 info):'info' | 'success' | 'warning' | 'danger' —— 语义色;缺省 info
|
||||||
- closable(默认 false):boolean —— 显示 × 关闭按钮,退场后从 DOM 移除;缺省 false
|
- closable(默认 false):boolean —— 显示 × 关闭按钮,退场后从 DOM 移除;缺省 false
|
||||||
- onClose(回调):() => void —— 关闭回调,供调用方同步业务状态
|
- onClose(回调):() => void —— 关闭回调,供调用方同步业务状态
|
||||||
|
- banner(默认 false):boolean —— 通栏形态:去圆角、只保留下边框、左右撑满,适合页面顶部通知
|
||||||
|
- showIcon(默认 false):boolean —— 显示语义图标(info ℹ / success ✓ / warning ! / danger ✕),纯装饰不进读屏
|
||||||
|
- icon:string | HTMLElement —— 自定义图标节点,传了即覆盖语义图标
|
||||||
|
|
||||||
示例:
|
示例:
|
||||||
|
|
||||||
@@ -510,6 +513,7 @@ alert({ message: '操作可能存在风险', variant: 'warning' })
|
|||||||
3. 需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色
|
3. 需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色
|
||||||
4. 需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态
|
4. 需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态
|
||||||
5. 有标题与正文两层信息时传 title(加粗首行),正文仍走 message
|
5. 有标题与正文两层信息时传 title(加粗首行),正文仍走 message
|
||||||
|
6. banner: true 出通栏形态(圆角与左右边框归零),页面顶部通知直接铺满容器即可,不需要额外包裹层
|
||||||
|
|
||||||
现场演示:apps/docs/demo.html#sec-feedback
|
现场演示:apps/docs/demo.html#sec-feedback
|
||||||
|
|
||||||
|
|||||||
@@ -1,15 +1,24 @@
|
|||||||
import { h } from '@ui-arch/frame';
|
import { h } from '@ui-arch/frame';
|
||||||
import type { AlertProps } from './types.js';
|
import type { AlertProps } from './types.js';
|
||||||
|
|
||||||
/*** 提示条:variant 决定语义色,可选标题与关闭按钮;关闭即退场并从 DOM 移除(内容由调用方持有) ***/
|
const DEFAULT_ICON: Record<string, string> = { info: 'ℹ', success: '✓', warning: '!', danger: '✕' }; // 语义缺省图标
|
||||||
|
|
||||||
|
/*** 提示条:variant 决定语义色,可选标题/语义图标/关闭按钮;banner 为通栏形态,关闭即退场并从 DOM 移除 ***/
|
||||||
export function alert(props: AlertProps): HTMLElement {
|
export function alert(props: AlertProps): HTMLElement {
|
||||||
|
const variant = props.variant ?? 'info'; // 语义档位
|
||||||
const body = h(
|
const body = h(
|
||||||
'div',
|
'div',
|
||||||
{ class: 'ua-alert-body' },
|
{ class: 'ua-alert-body' },
|
||||||
props.title ? h('div', { class: 'ua-alert-title' }, props.title) : null,
|
props.title ? h('div', { class: 'ua-alert-title' }, props.title) : null,
|
||||||
h('div', { class: 'ua-alert-message' }, props.message),
|
h('div', { class: 'ua-alert-message' }, props.message),
|
||||||
);
|
);
|
||||||
const el = h('div', { class: `ua-alert ua-alert-${props.variant ?? 'info'}`, role: 'alert' }, body);
|
const glyph = props.icon ?? (props.showIcon ? DEFAULT_ICON[variant] : null); // 自定义图标优先
|
||||||
|
const el = h(
|
||||||
|
'div',
|
||||||
|
{ class: `ua-alert ua-alert-${variant}${props.banner ? ' is-banner' : ''}`, role: 'alert' },
|
||||||
|
glyph ? h('span', { class: 'ua-alert-icon', 'aria-hidden': 'true' }, glyph) : null, // 图标纯装饰,读屏靠正文
|
||||||
|
body,
|
||||||
|
);
|
||||||
|
|
||||||
if (!props.closable) return el; // 纯展示形态
|
if (!props.closable) return el; // 纯展示形态
|
||||||
el.append(
|
el.append(
|
||||||
|
|||||||
@@ -274,6 +274,9 @@ export interface AlertProps {
|
|||||||
variant?: 'info' | 'success' | 'warning' | 'danger'; // 语义色;缺省 info
|
variant?: 'info' | 'success' | 'warning' | 'danger'; // 语义色;缺省 info
|
||||||
closable?: boolean; // 显示 × 关闭按钮(退场后从 DOM 移除);缺省 false
|
closable?: boolean; // 显示 × 关闭按钮(退场后从 DOM 移除);缺省 false
|
||||||
onClose?: () => void; // 关闭回调,供调用方同步业务状态
|
onClose?: () => void; // 关闭回调,供调用方同步业务状态
|
||||||
|
banner?: boolean; // 通栏形态:去圆角、只留下边框、左右撑满;适合页面顶部通知
|
||||||
|
showIcon?: boolean; // 显示语义图标(info ℹ / success ✓ / warning ! / danger ✕);缺省 false
|
||||||
|
icon?: string | HTMLElement; // 自定义图标节点,传了即覆盖语义图标
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** 骨架屏入参 ***/
|
/*** 骨架屏入参 ***/
|
||||||
|
|||||||
@@ -899,6 +899,23 @@
|
|||||||
"t": "() => void",
|
"t": "() => void",
|
||||||
"k": 1,
|
"k": 1,
|
||||||
"d": "关闭回调,供调用方同步业务状态"
|
"d": "关闭回调,供调用方同步业务状态"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "banner",
|
||||||
|
"t": "boolean",
|
||||||
|
"df": "false",
|
||||||
|
"d": "通栏形态:去圆角、只保留下边框、左右撑满,适合页面顶部通知"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "showIcon",
|
||||||
|
"t": "boolean",
|
||||||
|
"df": "false",
|
||||||
|
"d": "显示语义图标(info ℹ / success ✓ / warning ! / danger ✕),纯装饰不进读屏"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"n": "icon",
|
||||||
|
"t": "string | HTMLElement",
|
||||||
|
"d": "自定义图标节点,传了即覆盖语义图标"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
|
"example": "alert({ message: '操作可能存在风险', variant: 'warning' })",
|
||||||
@@ -907,7 +924,8 @@
|
|||||||
"传入 message 即可,入场自带下滑动画",
|
"传入 message 即可,入场自带下滑动画",
|
||||||
"需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色",
|
"需要可关闭或带操作按钮时,外层用 h() 组合 button 自行拼装,alert 只负责语义底色",
|
||||||
"需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态",
|
"需要用户可自行消除的提示传 closable: true:点 × 淡出并从 DOM 移除,配合 onClose 同步业务状态",
|
||||||
"有标题与正文两层信息时传 title(加粗首行),正文仍走 message"
|
"有标题与正文两层信息时传 title(加粗首行),正文仍走 message",
|
||||||
|
"banner: true 出通栏形态(圆角与左右边框归零),页面顶部通知直接铺满容器即可,不需要额外包裹层"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1037,6 +1037,26 @@ button.ua-step-dot:hover {
|
|||||||
transform: translateY(-6px);
|
transform: translateY(-6px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.ua-alert-icon {
|
||||||
|
flex: none;
|
||||||
|
display: inline-flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
margin-top: 1px;
|
||||||
|
border: 1px solid currentColor;
|
||||||
|
border-radius: 50%;
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 1;
|
||||||
|
opacity: 0.85;
|
||||||
|
}
|
||||||
|
.ua-alert.is-banner {
|
||||||
|
padding: 10px 16px;
|
||||||
|
border-width: 0 0 1px;
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.ua-alert-body {
|
.ua-alert-body {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user