Workbench 组件页标准(参考模板)
本文档用于统一 Workbench 组件页的结构与内容规范。以 ButtonPage 为参考样板,后续新增/改造组件页请按此标准执行。
目标
- 统一结构:让所有组件页保持一致的信息层级与布局。
- 可复用:为后续新组件页提供可直接复制的模板。
- 可审阅:保证 Demo、Playground、代码片段、参数面板都可被快速核对。
页面结构(强制顺序)
- 页面路由
@page "/components/组件名",与组件名称一致(大小写一致)。
- 页面头部说明区
- 使用
SxSection+SxPageBox+SxTypography。 - 包含:标题(H3)+ 一句说明(Body)。
- 使用
- Playground 区
- 使用
SxComponentPlayground渲染标准 Demo、参数面板、代码片段。 - 必须支持:Blazor 代码预览、HTML 预览、Config 预览。
- 使用
- 组件使用原则(强制)
- 页面实现优先使用现有的
Sx*组件完成布局与内容。 - 仅在找不到合适
Sx*组件时,才使用原生元素或最小化自定义结构。
- 页面实现优先使用现有的
标准页面模板(参考结构)
@page "/components/SxButton"
@using NextUI.Workbench.Models
<SxSection Background="var(--sx-colorNeutralBackground2)" GutterSize="ControlSize.None">
<SxPageBox PaddingSize="ControlSize.Medium">
<SxTypography Variant="TypographyVariant.H3">SxButton (按钮)</SxTypography>
<SxTypography Variant="TypographyVariant.Body">最基础的交互组件,遵循 Fluent UI Blazor API 规范。</SxTypography>
</SxPageBox>
</SxSection>
<SxSection GutterSize="ControlSize.None" Fill="true">
<SxPageBox Fill="true" PaddingSize="ControlSize.None" EnableSafeArea="false">
<SxComponentPlayground ComponentName="SxButton"
Showcase="@RenderShowcase"
BlazorPreview="@RenderBlazor"
HtmlPreview="@_htmlSnippet"
ConfigPreview="@_configSnippet"
CurrentCode="@_currentCode"
CodeLanguage="@_codeLang"
InspectorGroups="@_inspectorGroups"
OnPropertyUpdate="HandleUpdate" />
</SxPageBox>
</SxSection>
SxComponentPlayground 标准项(必须)
ComponentName:组件名(如SxButton)。Showcase:展示多个典型场景。BlazorPreview:单一可控的示例实例(用于反映 Inspector 调整)。HtmlPreview/ConfigPreview:对应的静态片段。InspectorGroups:参数面板分组配置。OnPropertyUpdate:面板交互与预览同步。
Inspector 规范
分组建议(至少 2 组)
- 外观配置:Appearance / Size / Shape / 颜色 / 图标等。
- 状态与布局:Disabled / Loading / Fluid / 必填等。
分组仅作建议,具体分组需结合组件使用场景自行组织。
字段规范
Id:camelCase,语义清晰。Label:中文 + 英文补充(如尺寸 (Size))。Type:匹配组件实际参数类型(Text / Boolean / Enum / Number 等)。Options:枚举类参数必须提供。
完整性要求(强制)
- 列出全部参数:Inspector 必须覆盖组件的所有公开参数。
- 可编辑并生效:所有参数应可在 Inspector 中调整,且修改应即时反映在展示效果中。
- 类型未支持的处理:
- 仍需列出该参数;
- 以“不可编辑”的形式展示,并标注原因(例如
Inspector 不支持该类型/功能待实现); - 保留后续完善计划的入口,避免参数遗漏。
- 异常情况:若参数已可编辑但不生效,必须记录为组件缺陷,优先修复组件而非隐藏参数。
Showcase 规范(必须)
至少包含 2~3 个场景,按 使用场景 分组,建议:
- 基础使用场景(默认/主流程)
- 状态与异常场景(禁用、加载、空态、错误)
- 组合与高级场景(图标、前后缀、复合布局)
每个场景分组中必须包含:
- 效果展示区:集中展示该场景下的视觉与交互。
- 对应代码区:展示可直接复制的真实代码(Blazor 或 HTML)。
并且:
- Blazor 组与 HTML 组必须保持相同的分组结构与布局,只在语法上不同。
Playground 底部区样式(补充)
- Documentation / API / Source Code 的标签栏需有浅色背景,与内容区区分。
- 标签栏下方需有分割线(细线),保持视觉稳定对齐。
Showcase 布局实现(推荐做法)
为保证页面一致性与可复用性,优先使用 Workbench 统一组件 来承载场景分组:
- 使用
WorkbenchScenarioGroup(位于workbench/NextUI.Workbench/Components/WorkbenchScenarioGroup.razor)- 内部已封装:场景标题 + Tabs(效果/代码) + 全宽卡片
- 支持默认的上下内边距与最小高度
- 代码区域自动滚动、效果区域可撑开
推荐结构示例
<SxTabPanel Id="blazor-group" Label="Blazor" ContentPadding="var(--sx-spacing-md) 0">
<SxStack Orientation="StackOrientation.Vertical"
Gap="ControlSize.Large"
HorizontalAlignment="HorizontalAlignment.Stretch">
<WorkbenchScenarioGroup Title="基础使用场景"
Effect="@RenderBasicEffect"
Code="@_basicCode"
Language="razor" />
<WorkbenchScenarioGroup Title="状态与异常场景"
Effect="@RenderStateEffect"
Code="@_stateCode"
Language="razor" />
<WorkbenchScenarioGroup Title="组合与高级场景"
Effect="@RenderAdvancedEffect"
Code="@_advancedCode"
Language="razor" />
</SxStack>
</SxTabPanel>
关键布局约定
- 场景卡片:
WorkbenchScenarioGroup内部使用SxCard,默认全宽。 - Tabs 内容区内边距:通过
SxTabPanel.ContentPadding控制(推荐var(--sx-spacing-md) 0)。 - 内容区最小高度:通过
SxTabPanel.MinContentHeight或WorkbenchScenarioGroup.MinContentHeight控制(推荐6rem)。 - 效果区:内容超出时允许撑开(不设 max-height)。
- 代码区:内容超出时滚动(通过
SxCodeSnippet的MaxHeight/Scrollable控制)。
代码片段规范
_htmlSnippet:可读 HTML 或sx-*标签示例。_currentCode:完整 Blazor 示例,能直接复制使用。_configSnippet:若无可省略,但必须明确说明空值行为。
样式与布局约束
- 禁止内联样式:除非已获批准(与
.cursorrules2.3 对齐)。 - 优先使用
SxStack/SxGrid/SxSpacer等布局组件,避免手写布局。 - 若确需样式补充,请落在
.razor.css并使用 Design Tokens。
改造指引(现有页面)
- 对齐页面头部结构(标题 + 描述)。
- 补齐
SxComponentPlayground所有标准字段。 - 明确 Inspector 分组与字段类型。
- Showcase 至少 2~3 个典型场景。
- 同步更新
_htmlSnippet/_currentCode内容。
审核清单(提交前自查)
- 路由名称与组件名一致。
- 标题与说明清晰、简短。
- Playground 可交互,Inspector 同步渲染。
- Showcase 展示 2~3 个典型场景。
- 代码片段可直接复制使用。
- 无内联样式或已获批准。