Components Workbench (组件工作台) UI 设计规范
自动生成时间: 2026-02-03
页面路径: workbench/NextUI.Workbench/Layout/ComponentsLayout.razor
技术栈: Blazor WebAssembly
1. 页面概述
Components Workbench 是 NextUI 的组件开发和演示工作台,提供完整的组件浏览、交互测试和文档查看功能。页面采用 SxAppShell 布局,包含可折叠的侧边导航、组件预览区和详情面板。
主要功能:
- 组件分类导航与搜索
- 组件效果预览与代码示例
- 交互实验室 (Property Inspector)
- API 文档与源码查看
2. 页面结构
┌────────────────────────────────────────────────────────────────────┐
│ SxAppShell Header │
│ [≡] NextUI 工作台 [⋮] │
├────────────────┬───────────────────────────────────────────────────┤
│ │ │
│ [筛选导航] │ Component Playground │
│ │ │
│ 概览 │ ┌──────────────────────────────────────────────┐ │
│ Home │ │ SxButton (按钮) │ │
│ Tokens │ │ 最基础的交互组件... │ │
│ ... │ │ │ │
│ │ │ [效果展示] [交互实验室] │ │
│ 应用程序 │ │ │ │
│ SxAppShell │ │ 基础使用场景 │ │
│ SxNavBar │ │ ┌────────────────────────────────────────┐ │ │
│ ... │ │ │ [效果] [代码] │ │ │
│ │ │ │ RAZOR │ │ │
│ 身份认证 │ │ │ <SxButton Appearance="Accent">...</SxButton>│ │
│ Login │ │ └────────────────────────────────────────┘ │ │
│ ... │ │ │ │
│ │ ├──────────────────────────────────────────────┤ │
│ 管理平台 │ │ [文档] [API/Schema] │ │
│ 布局与架构 │ │ │ │
│ 表单与输入 │ │ ## SxButton (按钮) │ │
│ 图表 │ │ 基础交互组件。遵循 Fluent UI Blazor... │ │
│ │ │ │ │
│ 通用组件 [↕] │ │ ### Parameters (参数) │ │
│ Actions │ │ | 参数名 | 类型 | 默认值 | 描述 | │ │
│ Data Display│ │ | ... | | | | │ │
│ Navigation │ └──────────────────────────────────────────────┘ │
│ Feedback │ │
│ Advanced │ │
│ │ │
├────────────────┼───────────────────────────────────────────────────┤
│ →) 登录 │ │
└────────────────┴───────────────────────────────────────────────────┘
3. 主要组件
3.1 布局文件
| 文件 |
用途 |
Layout/ComponentsLayout.razor |
主布局,包含 SxAppShell |
Layout/ComponentsSidebar.razor |
侧边导航组件 |
src/NextUI.App/Components/SxComponentPlayground.razor |
组件演示区 |
3.2 核心组件依赖
| NextUI 组件 |
用途 |
SxAppShell |
应用外壳布局 |
SxAppRoot |
应用根容器 |
SxNavMenu |
侧边导航菜单 |
SxNavMenuGroup |
导航分组 |
SxNavMenuLink |
导航链接 |
SxDrawer |
设置抽屉 |
SxIdentityUserBar |
用户信息栏 |
4.1 导航分类
| 分类 |
图标 |
包含内容 |
| 概览 |
house |
Home, Design Tokens, SxThemeProvider, SxTheme, SxErrorBoundary |
| 应用程序 |
window-restore |
SxAppShell, SxNavBar, SxUserBar, SxAppRoot, SxAppRouter, SxAppGlobalMenu, SxSettings |
| 身份认证 |
id-card |
Overview, SxLoginButton, SxUserAvatar, SxIdentityUserBar, SxAuthGuard, SxTenantSwitcher, SharedProfile, Preferences |
| 管理平台 |
shield |
Admin 相关组件 |
| 布局与架构 |
layer-group |
SxArtboard, SxStack, SxGrid, SxCard, SxHeader, SxFooter, SxSection, SxPageBox, SxSpacer, SxSplitter, SxMultiSplitter, SxImage, SxHorizontalScroll, SxOverflow |
| 表单与输入 |
keyboard |
SxInput, SxLabel, SxTextArea, SxAutoComplete, SxSearch, SxCheckbox, SxRadioGroup, SxSelect, SxSwitch, SxSlider, SxNumberInput, SxDatePicker, SxTimePicker, SxColorPicker, SxRating, SxSecurityCode, SxCombobox, SxListbox, SxCalendar |
| 图表 |
chart-line |
27 种图表类型 (SxChart, SxLineChart, SxAreaChart, SxBarChart, SxPieChart, ...) |
| 通用组件 |
cubes |
5 个子分类 (Actions, Data Display, Navigation, Feedback, Advanced) |
4.2 通用组件子分类
| 子分类 |
图标 |
组件数量 |
| Actions |
mouse-pointer |
6 (SxButton, SxToggleButton, SxSplitButton, SxFab, SxAnchor, SxSortableList) |
| Data Display |
chart-simple |
18 (SxBadge, SxTag, SxAvatar, SxPersona, SxTable, SxDataGrid, SxTree, ...) |
| Navigation |
location-arrow |
9 (SxTabs, SxNavMenu, SxMenu, SxMenuButton, SxCommandBar, ...) |
| Feedback |
circle-exclamation |
12 (SxDialog, SxDrawer, SxToast, SxTooltip, SxMessageBar, ...) |
| Advanced |
wand-magic-sparkles |
7 (SxMarkdownViewer, SxMarkdownEditor, SxHtmlEditor, SxCodeSnippet, ...) |
4.3 导航功能
| 功能 |
描述 |
| 筛选 |
输入框过滤组件,支持英文名、中文名、路径匹配 |
| 分组/字母排序切换 |
点击 [↕] 按钮切换分组视图和字母排序视图 |
| 展开/折叠 |
每个分组可独立展开/折叠 |
| 状态持久化 |
展开状态和视图模式保存到 localStorage |
| 草稿标记 |
(Draft) 标记的组件显示为半透明 |
4.4 导航项样式
| 属性 |
值 |
| Level 1 背景 (展开) |
var(--sx-colorNeutralBackground1) |
| Level 1 背景 (折叠) |
var(--sx-colorNeutralBackground3) |
| Level 2 背景 |
var(--sx-colorNeutralBackgroundSubtle) |
| 激活状态背景 |
var(--sx-colorBrandBackground1) |
| 激活状态文字 |
#ffffff |
| Hover 轮廓 |
1px solid var(--sx-colorNeutralStroke1) |
| 草稿组件透明度 |
0.4 |
5. 组件演示区 (SxComponentPlayground)
5.1 布局结构
┌────────────────────────────────────────────────────────────────┐
│ ComponentName (组件名) │
│ 组件描述... │
│ [效果展示] [交互实验室] [Blazor] [HTML] │
├────────────────────────────────────────────────────────────────┤
│ │
│ 基础使用场景 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ [效果] [代码] [📋] │ │
│ │ RAZOR │ │
│ │ <SxButton Appearance="Accent">Accent</SxButton> │ │
│ │ <SxButton Appearance="Neutral">Neutral</SxButton> │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
│ 状态与异常场景 │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ ... │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │
├─────────────────────────────────────────────[_][□][▢]──────────┤
│ [文档] [API / Schema] │
│ │
│ ## SxButton (按钮) │
│ [x] Implemented │
│ 基础交互组件。遵循 Microsoft Fluent UI Blazor (Button) v4.13.2 │
│ │
│ ### Parameters (参数) │
│ | 状态 | 参数名 | 类型 | 默认值 | 描述 | │
│ | [x] | Appearance | ButtonAppearance | Neutral | 视觉风格 | │
│ | ... | ... | ... | ... | ... | │
│ │
└────────────────────────────────────────────────────────────────┘
5.2 主要区域
| 区域 |
比例 |
功能 |
| 顶部演示区 |
65% |
组件效果预览、代码示例 |
| 底部文档区 |
35% |
API 文档、Schema、源码 |
5.3 底部面板控制
| 按钮 |
功能 |
[_] |
最小化 (隐藏底部面板) |
[□] |
恢复默认尺寸 |
[▢] |
最大化 (全屏文档) |
6. 状态管理
6.1 持久化状态 (localStorage)
| Key |
内容 |
sx-components-nav-state |
导航展开状态、视图模式 |
components-shell |
SxAppShell 状态 (侧边栏宽度等) |
6.2 状态结构
// sx-components-nav-state
{
"isGrouped": true,
"expanded": ["Overview", "Application", "Components", ...]
}
7. 公共 API
7.1 ComponentsLayout Parameters
| 参数 |
类型 |
说明 |
| (无自定义参数) |
- |
继承 LayoutComponentBase |
| 状态 |
类型 |
默认值 |
说明 |
_isGroupedView |
bool |
true |
分组视图/字母排序 |
_expandedIds |
HashSet<string> |
所有分组 |
已展开的分组 ID |
_filterCollapsedIds |
HashSet<string> |
空 |
筛选时手动折叠的分组 |
7.3 事件
| 事件 |
触发时机 |
HandleGroupExpandedChanged |
分组展开/折叠时 |
ToggleViewMode |
切换分组/字母排序视图 |
OnLocaleChanged |
语言切换时 |
OnStateChanged |
主题/语言变化时 |
8. 典型使用场景 (Use Cases)
8.1 UC-1: 浏览组件列表
步骤:
- 用户访问
/components
- 看到左侧分类导航,默认展开所有分组
- 点击 "通用组件" 下的 "SxButton"
预期结果: 右侧显示 SxButton 组件的演示和文档
8.2 UC-2: 搜索组件
步骤:
- 用户在筛选输入框输入 "button"
- 导航自动过滤显示匹配项
预期结果:
- 只显示包含 "button" 的组件
- 所有包含匹配项的分组自动展开
8.3 UC-3: 切换视图模式
步骤:
- 用户点击 "通用组件" 旁的切换按钮
[↕]
预期结果:
- 从分组视图切换到字母排序视图
- 视图模式保存到 localStorage
8.4 UC-4: 查看组件 API
步骤:
- 用户打开某个组件页面
- 滚动到底部或点击 "API / Schema" 标签
预期结果: 显示组件的参数表、事件表、方法表
8.5 UC-5: 打开设置
步骤:
- 用户点击底部用户栏
- 选择设置选项
预期结果: 右侧抽屉打开,显示 SxSettingsView
9. 状态不变性测试 (State Invariants)
9.1 导航状态隔离
| 操作 |
不应影响 |
| 展开/折叠任意分组 |
其他分组的展开状态 |
| 切换视图模式 |
当前展开的分组 |
| 筛选输入 |
已展开分组列表 (持久化) |
| 路由切换 |
导航展开状态 |
9.2 状态持久化验证
- 刷新页面后,展开状态应恢复
- 刷新页面后,视图模式应恢复
- 切换主题不应重置导航状态
10. 测试检查点
10.1 必须测试 (E2E)
10.2 功能测试
10.3 响应式测试
11. 规范合规检查
11.1 组件使用
| 检查项 |
结果 |
| 使用 NextUI 组件 |
✅ 使用 SxAppShell, SxNavMenu, SxDrawer 等 |
| 无原生 HTML 元素 |
✅ 无直接使用 button, input 等 |
11.2 样式
| 检查项 |
结果 |
| 使用 Design Token |
✅ 所有颜色使用 --sx-color* 变量 |
| 使用间距 Token |
✅ 使用 --sx-spacing-* 变量 |
| 无硬编码颜色 |
⚠️ #ffffff 用于激活状态文字 |
11.3 例外说明
| 例外 |
原因 |
#ffffff |
激活状态需要纯白色确保可读性 |
opacity: 0.4 |
草稿组件视觉区分 |
12. 已知问题 / TODO
| 优先级 |
问题 |
状态 |
| P2 |
/components 根路由显示 "页面未找到" |
需要添加概览页 |
| P3 |
移动端汉堡菜单未实现 |
未实现 |
| P3 |
草稿组件数量较多 |
持续完善 |
13. 变更历史
| 日期 |
变更内容 |
| 2026-02-03 |
初始版本,随 UI Test 工作流创建 |