iter(g179): 弹层阴影语义化归档

This commit is contained in:
HIsheR
2026-10-26 17:17:26 +08:00
parent a9a084ca97
commit 7b4adb01a0
7 changed files with 134 additions and 39 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
{
"$schema": "ui-arch-registry-index/0.1",
"generatedAt": "2026-10-26T09:07:20.198Z",
"generatedAt": "2026-10-26T09:17:08.488Z",
"repoRoot": ".",
"packages": [
{
@@ -265,7 +265,7 @@
"无障碍基线:装饰性占位(skeleton)aria-hidden、加载指示(spinner)role=status、关闭按钮必须 aria-label、弹层弹窗 aria-haspopup/expanded、读屏可见的状态一律同步 aria-*"
],
"docs": {
"intro": "28 个 DOM 组件,统一用法:组件是普通函数,传入 props 返回 DOM 节点;需要状态时先创建 signal 再双向绑定。引入 CSS:import '@ui-arch/ui/ui.css'(内部已消费 tokens)。",
"intro": "28 个 DOM 组件,统一用法:组件是普通函数,传入 props 返回 DOM 节点;需要状态时先创建 signal 再双向绑定。引入 CSS:import '@ui-arch/ui/ui.css'(内部已消费 tokens)。\n\n阴影对照表:下拉弹层=shadow-2 / 浮层与悬浮按钮=shadow-3 / 模态弹窗与抽屉及通知=shadow-4 / 卡片与输入组轻浮起=shadow-1;主按钮与强调件的主题色投影=shadow-accent / shadow-accent-strong,组件内不得再手写 box-shadow 字面值。",
"steps": [
"安装依赖:pnpm add @ui-arch/ui @ui-arch/frame(workspace 内自动链接)",
"引入样式:在应用入口 import '@ui-arch/ui/ui.css',暗色主题在根元素设 data-theme='dark'",
+5 -5
View File
@@ -1,14 +1,14 @@
{
"$schema": "视觉漂移基线:五类硬编码视觉字面量的允许上限,任一类超出即 ua audit:visual 退出码 1;迁移后用 --baseline 重写",
"file": "packages/skin/ui/ui.css",
"commit": "f125369",
"generatedAt": "2026-10-26T08:49:44.301Z",
"lines": 4726,
"total": 35,
"commit": "a9a084c",
"generatedAt": "2026-10-26T09:17:07.493Z",
"lines": 4758,
"total": 27,
"counts": {
"font-size-literal": 5,
"duration-literal": 9,
"shadow-literal": 17,
"shadow-literal": 9,
"radius-literal": 0,
"focus-ring-variant": 4
}
+5 -1
View File
@@ -1,6 +1,6 @@
# @ui-arch 组件库 Agent 文档(无图形版)
> 自动生成于 2026-10-26T09:07:20.198Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 自动生成于 2026-10-26T09:17:08.488Z,数据源:各包 ua.manifest.json,勿手改。人类版文档站:apps/docs/index.html。
> 组件 = 普通函数,传 props 返回 DOM;状态用 signal 双向绑定:读 signal() 写 signal(v)。
## 快速上手
@@ -52,6 +52,8 @@
28 个 DOM 组件,统一用法:组件是普通函数,传入 props 返回 DOM 节点;需要状态时先创建 signal 再双向绑定。引入 CSS:import '@ui-arch/ui/ui.css'(内部已消费 tokens)。
阴影对照表:下拉弹层=shadow-2 / 浮层与悬浮按钮=shadow-3 / 模态弹窗与抽屉及通知=shadow-4 / 卡片与输入组轻浮起=shadow-1;主按钮与强调件的主题色投影=shadow-accent / shadow-accent-strong,组件内不得再手写 box-shadow 字面值。
### image — 图片 Image
参数:
@@ -2169,6 +2171,8 @@ node packages/tools/cli/bin/ua.js <index|list|info <包名|组件id>|docs|tokens
- --ua-shadow-2: 0 4px 12px rgba(0, 0, 0, 0.1)(暗色 0 4px 12px rgba(0, 0, 0, 0.4))
- --ua-shadow-3: 0 10px 28px rgba(0, 0, 0, 0.12)(暗色 0 10px 28px rgba(0, 0, 0, 0.45))
- --ua-shadow-4: 0 18px 44px rgba(0, 0, 0, 0.14)(暗色 0 18px 44px rgba(0, 0, 0, 0.5))
- --ua-shadow-accent: 0 3px 10px color-mix(in srgb, var(--ua-color-accent) 25%, transparent)(暗色 0 3px 10px color-mix(in srgb, var(--ua-color-accent) 30%, transparent))
- --ua-shadow-accent-strong: 0 8px 20px color-mix(in srgb, var(--ua-color-accent) 35%, transparent)(暗色 0 8px 20px color-mix(in srgb, var(--ua-color-accent) 40%, transparent))
- --ua-duration-fast: 0.15s
- --ua-duration-base: 0.2s
- --ua-duration-slow: 0.25s
+4
View File
@@ -50,6 +50,8 @@
--ua-shadow-2: 0 4px 12px rgba(0, 0, 0, 0.1); /* 2 档:下拉菜单 / 选择面板 / 气泡提示 */
--ua-shadow-3: 0 10px 28px rgba(0, 0, 0, 0.12); /* 3 档:浮层 / 悬浮面板 / 拖拽中的卡片 */
--ua-shadow-4: 0 18px 44px rgba(0, 0, 0, 0.14); /* 4 档:模态弹窗 / 抽屉 / 通知中心等最高层 */
--ua-shadow-accent: 0 3px 10px color-mix(in srgb, var(--ua-color-accent) 25%, transparent); /* 主题色投影:主按钮 / 强调控件悬停浮起 */
--ua-shadow-accent-strong: 0 8px 20px color-mix(in srgb, var(--ua-color-accent) 35%, transparent); /* 主题色强投影:返回顶部等悬浮强调件 */
/* ---- 动效:三档时长 + 两条主缓动曲线 ---- */
--ua-duration-fast: 0.15s; /* 快:hover / 聚焦 / 颜色与边框变化(既有样式的主流时长) */
@@ -92,4 +94,6 @@
--ua-shadow-2: 0 4px 12px rgba(0, 0, 0, 0.4); /* 暗色 2 档:下拉 / 气泡 */
--ua-shadow-3: 0 10px 28px rgba(0, 0, 0, 0.45); /* 暗色 3 档:浮层 / 悬浮面板 */
--ua-shadow-4: 0 18px 44px rgba(0, 0, 0, 0.5); /* 暗色 4 档:模态 / 抽屉 / 通知 */
--ua-shadow-accent: 0 3px 10px color-mix(in srgb, var(--ua-color-accent) 30%, transparent); /* 暗色主题色投影:透明度略升补可见性 */
--ua-shadow-accent-strong: 0 8px 20px color-mix(in srgb, var(--ua-color-accent) 40%, transparent); /* 暗色主题色强投影 */
}
+109 -22
View File
@@ -1,33 +1,110 @@
{
"$schema": "https://design-tokens.github.io/community-group/format/",
"color": {
"bg": { "light": "#ffffff", "dark": "#101216" },
"surface": { "light": "#f6f7f9", "dark": "#1a1c22" },
"text": { "light": "#1c1e21", "dark": "#e7e9ec" },
"textMuted": { "light": "#6b7280", "dark": "#888780" },
"border": { "light": "rgba(0, 0, 0, 0.15)", "dark": "rgba(255, 255, 255, 0.15)" },
"accent": { "light": "#185fa5", "dark": "#378add" },
"accentContrast": { "light": "#ffffff", "dark": "#042c53" },
"danger": { "light": "#a32d2d", "dark": "#d96a6a" },
"success": { "light": "#0f6e56", "dark": "#4fc39e" },
"warning": { "light": "#9a6b1f", "dark": "#d9a94f" }
"bg": {
"light": "#ffffff",
"dark": "#101216"
},
"surface": {
"light": "#f6f7f9",
"dark": "#1a1c22"
},
"text": {
"light": "#1c1e21",
"dark": "#e7e9ec"
},
"textMuted": {
"light": "#6b7280",
"dark": "#888780"
},
"border": {
"light": "rgba(0, 0, 0, 0.15)",
"dark": "rgba(255, 255, 255, 0.15)"
},
"accent": {
"light": "#185fa5",
"dark": "#378add"
},
"accentContrast": {
"light": "#ffffff",
"dark": "#042c53"
},
"danger": {
"light": "#a32d2d",
"dark": "#d96a6a"
},
"success": {
"light": "#0f6e56",
"dark": "#4fc39e"
},
"warning": {
"light": "#9a6b1f",
"dark": "#d9a94f"
}
},
"radius": {
"sm": "4px",
"md": "8px",
"lg": "12px"
},
"space": {
"1": "4px",
"2": "8px",
"3": "12px",
"4": "16px"
},
"fontSize": {
"xs": "11px",
"sm": "12px",
"md": "13px",
"lg": "14px",
"xl": "16px",
"2xl": "18px"
},
"weight": {
"normal": 400,
"medium": 500,
"semibold": 600
},
"leading": {
"tight": 1.35,
"normal": 1.55
},
"radius": { "sm": "4px", "md": "8px", "lg": "12px" },
"space": { "1": "4px", "2": "8px", "3": "12px", "4": "16px" },
"fontSize": { "xs": "11px", "sm": "12px", "md": "13px", "lg": "14px", "xl": "16px", "2xl": "18px" },
"weight": { "normal": 400, "medium": 500, "semibold": 600 },
"leading": { "tight": 1.35, "normal": 1.55 },
"border": {
"subtle": "color-mix(in srgb, var(--ua-color-border) 60%, transparent)"
},
"shadow": {
"1": { "light": "0 1px 2px rgba(0, 0, 0, 0.06)", "dark": "0 1px 2px rgba(0, 0, 0, 0.3)" },
"2": { "light": "0 4px 12px rgba(0, 0, 0, 0.1)", "dark": "0 4px 12px rgba(0, 0, 0, 0.4)" },
"3": { "light": "0 10px 28px rgba(0, 0, 0, 0.12)", "dark": "0 10px 28px rgba(0, 0, 0, 0.45)" },
"4": { "light": "0 18px 44px rgba(0, 0, 0, 0.14)", "dark": "0 18px 44px rgba(0, 0, 0, 0.5)" }
"1": {
"light": "0 1px 2px rgba(0, 0, 0, 0.06)",
"dark": "0 1px 2px rgba(0, 0, 0, 0.3)"
},
"2": {
"light": "0 4px 12px rgba(0, 0, 0, 0.1)",
"dark": "0 4px 12px rgba(0, 0, 0, 0.4)"
},
"3": {
"light": "0 10px 28px rgba(0, 0, 0, 0.12)",
"dark": "0 10px 28px rgba(0, 0, 0, 0.45)"
},
"4": {
"light": "0 18px 44px rgba(0, 0, 0, 0.14)",
"dark": "0 18px 44px rgba(0, 0, 0, 0.5)"
},
"accent": {
"light": "0 3px 10px color-mix(in srgb, var(--ua-color-accent) 25%, transparent)",
"dark": "0 3px 10px color-mix(in srgb, var(--ua-color-accent) 30%, transparent)"
},
"accentStrong": {
"light": "0 8px 20px color-mix(in srgb, var(--ua-color-accent) 35%, transparent)",
"dark": "0 8px 20px color-mix(in srgb, var(--ua-color-accent) 40%, transparent)"
}
},
"motion": {
"duration": { "fast": "0.15s", "base": "0.2s", "slow": "0.25s" },
"duration": {
"fast": "0.15s",
"base": "0.2s",
"slow": "0.25s"
},
"ease": "cubic-bezier(0.2, 0.8, 0.2, 1)",
"easeOut": "cubic-bezier(0.16, 1, 0.3, 1)"
},
@@ -36,7 +113,17 @@
"ringInset": "inset 0 0 0 2px color-mix(in srgb, var(--ua-color-accent) 40%, transparent)"
},
"control": {
"height": { "sm": "28px", "md": "34px", "lg": "40px" }
"height": {
"sm": "28px",
"md": "34px",
"lg": "40px"
}
},
"layer": { "dropdown": 100, "sticky": 200, "overlay": 300, "modal": 400, "toast": 500 }
"layer": {
"dropdown": 100,
"sticky": 200,
"overlay": 300,
"modal": 400,
"toast": 500
}
}
+1 -1
View File
@@ -136,7 +136,7 @@
"无障碍基线:装饰性占位(skeleton)aria-hidden、加载指示(spinner)role=status、关闭按钮必须 aria-label、弹层弹窗 aria-haspopup/expanded、读屏可见的状态一律同步 aria-*"
],
"docs": {
"intro": "28 个 DOM 组件,统一用法:组件是普通函数,传入 props 返回 DOM 节点;需要状态时先创建 signal 再双向绑定。引入 CSS:import '@ui-arch/ui/ui.css'(内部已消费 tokens)。",
"intro": "28 个 DOM 组件,统一用法:组件是普通函数,传入 props 返回 DOM 节点;需要状态时先创建 signal 再双向绑定。引入 CSS:import '@ui-arch/ui/ui.css'(内部已消费 tokens)。\n\n阴影对照表:下拉弹层=shadow-2 / 浮层与悬浮按钮=shadow-3 / 模态弹窗与抽屉及通知=shadow-4 / 卡片与输入组轻浮起=shadow-1;主按钮与强调件的主题色投影=shadow-accent / shadow-accent-strong,组件内不得再手写 box-shadow 字面值。",
"steps": [
"安装依赖:pnpm add @ui-arch/ui @ui-arch/frame(workspace 内自动链接)",
"引入样式:在应用入口 import '@ui-arch/ui/ui.css',暗色主题在根元素设 data-theme='dark'",
+8 -8
View File
@@ -19,7 +19,7 @@
.ua-btn:hover {
filter: brightness(1.08);
transform: translateY(-1px);
box-shadow: 0 3px 10px color-mix(in srgb, var(--ua-color-accent) 25%, transparent);
box-shadow: var(--ua-shadow-accent); /* 主题色投影:主按钮悬停浮起 */
}
.ua-btn:active {
transform: translateY(0) scale(0.97);
@@ -91,7 +91,7 @@
}
.ua-card-hoverable:hover {
transform: translateY(-2px);
box-shadow: 0 10px 24px color-mix(in srgb, var(--ua-color-text) 14%, transparent);
box-shadow: var(--ua-shadow-2); /* 卡片悬停浮起 = 下拉档 */
}
.ua-table table {
width: 100%;
@@ -2279,7 +2279,7 @@ button.ua-step-dot:hover {
height: 100%;
border-radius: 999px;
background: var(--ua-color-bg);
box-shadow: 0 1px 4px color-mix(in srgb, var(--ua-color-text) 12%, transparent);
box-shadow: var(--ua-shadow-1); /* 滑块拇指轻浮起 = 贴地档 */
transition: transform var(--ua-duration-base) ease, width var(--ua-duration-base) ease;
pointer-events: none;
}
@@ -3462,7 +3462,7 @@ button.ua-step-dot:hover {
transform: translateY(8px) scale(0.9);
pointer-events: none;
transition: opacity var(--ua-duration-base) ease, transform var(--ua-duration-base) ease;
box-shadow: 0 8px 20px color-mix(in srgb, var(--ua-color-accent) 35%, transparent);
box-shadow: var(--ua-shadow-accent-strong); /* 悬浮强调件主题色投影 */
}
.ua-backtop.is-visible {
opacity: 1;
@@ -4327,7 +4327,7 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
font: inherit;
font-size: var(--ua-font-size-md);
cursor: pointer;
box-shadow: 0 6px 20px color-mix(in srgb, var(--ua-color-text) 16%, transparent);
box-shadow: var(--ua-shadow-3); /* 悬浮按钮 = 浮层档 */
transition: transform var(--ua-duration-fast) ease, box-shadow var(--ua-duration-fast) ease, color var(--ua-duration-fast) ease, border-color var(--ua-duration-fast) ease;
}
.ua-fab.has-label {
@@ -4338,7 +4338,7 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
color: var(--ua-color-accent);
border-color: var(--ua-color-accent);
transform: translateY(-2px);
box-shadow: 0 10px 26px color-mix(in srgb, var(--ua-color-text) 22%, transparent);
box-shadow: var(--ua-shadow-4); /* 悬停抬升 = 最高层档 */
}
.ua-fab:active {
transform: translateY(0) scale(0.97);
@@ -4419,7 +4419,7 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
border: 1px solid var(--ua-color-border);
border-radius: var(--ua-radius-md);
background: var(--ua-color-surface);
box-shadow: 0 12px 28px color-mix(in srgb, var(--ua-color-text) 16%, transparent);
box-shadow: var(--ua-shadow-2); /* 下拉弹层 = 下拉档 */
}
.ua-mentions.is-open .ua-mentions-pop {
display: block;
@@ -4518,7 +4518,7 @@ h5.ua-type-title { font-size: var(--ua-font-size-md); }
border: 1px solid var(--ua-color-border);
border-radius: var(--ua-radius-md);
background: var(--ua-color-surface);
box-shadow: 0 14px 30px color-mix(in srgb, var(--ua-color-text) 16%, transparent);
box-shadow: var(--ua-shadow-2); /* 下拉弹层 = 下拉档 */
}
.ua-treeselect.is-open .ua-treeselect-pop {
display: block;