iter(g54): 新增 watermark 水印组件

This commit is contained in:
HIsheR
2026-10-26 12:18:24 +08:00
parent 30f5a4558d
commit 818e20eb95
12 changed files with 229 additions and 10 deletions
+29 -1
View File
@@ -1,6 +1,6 @@
# @ui-arch 组件库 Agent 文档(无图形版)
> 自动生成于 2026-10-26T04:17:05.094Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 自动生成于 2026-10-26T04:18:05.467Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
## 快速上手
@@ -1385,6 +1385,33 @@ const t = tour({ steps: [{ target: '#sec-tour', title: '引导漫游', descripti
现场演示:apps/docs/demo.html#sec-tour
### watermark — 水印 Watermark
参数:
- text(必填):string —— 水印文字,支持 \n 多行
- opacity:number —— 透明度;缺省 0.12
- rotate:number —— 旋转角度(度);缺省 -20
- gap:number —— 平铺间距像素;缺省 140
- fontSize:number —— 字号像素;缺省 14
- color:string —— 颜色(CSS 串或 var(--ua-*) 令牌);缺省取 --ua-color-text-muted 的实色
- children:...unknown[] —— 被水印覆盖的内容,作为第二个及之后的实参传入
示例:
```
watermark({ text: '内部资料\n仅限内网', gap: 160 }, card({ title: '受保护内容' }, h('p', null, '正文')))
```
手把手:
1. 第一个参数是配置,其后所有实参都被当作内容渲染在水印层下方
2. 组件用一块 gap 见方的 canvas 画单个旋转单元,再 background-repeat 铺满,因此不需要监听尺寸变化
3. color 传 var(--ua-*) 时会先解析成计算值(canvas 不认 CSS 变量),所以暗色主题下颜色会自动跟随
4. 覆盖层为 pointer-events:none,下方按钮/输入框照常可点;watermark 根节点自带圆角与裁剪
现场演示:apps/docs/demo.html#sec-watermark
API 速览:
- button(props):按钮,variant = primary | ghost | danger,disabled 支持布尔或信号禁用;type 缺省 button(表单内不隐式提交)
@@ -1441,6 +1468,7 @@ API 速览:
- backTop(props):返回顶部悬浮按钮,越过阈值才浮现,外环 conic-gradient 显示已滚比例,点击平滑回顶
- colorPicker(props):颜色选择,预设色板(缺省语义令牌色)+ 原生取色器 + 手输 CSS 颜色串,value 为颜色串信号
- tour(props):引导漫游,返回 { el, start, close } 句柄;聚光框按 target 选择器定位,卡片自动选方位,Esc / 跳过走 onClose
- watermark(props, ...children):内容容器 + 平铺水印覆盖层,canvas 生成单元、颜色取自令牌,覆盖层不挡交互
一行用法: