本组件库为纯 UI 组件库。组件可以包含 hover、展开、选中、输入等局部交互状态,但不得包含接口请求、路由跳转、Store、埋点、协议解析等业务逻辑。业务数据、内容和操作均通过 Props、Slots 与事件注入。

组件分为三级,核心划分依据是组件对外提供的能力,而不是源码体积、DOM 数量或是否 import 了其他组件。

[ L1 原子组件 ] --组合--> [ L2 通用模式 ] --组合与布局--> [ L3 业务区块 ]
  单一交互能力              可跨区块复用              独立展示单元

L1:原子组件(Atom)—— 单一交互能力

定义

完成一个明确的用户意图,或实现一个完整的 WAI-ARIA 交互协议。

判定标准

  • 单一意图: 对外只表达一种主要交互能力,例如点击、输入、选择、切换、弹出或提示。
  • 独立使用: 可以脱离具体业务区块独立使用。
  • 高度复用: 可用于不同页面、模式和业务区块。
  • 实现无关: 可以封装 Base UI,也可以在内部复用其他基础组件;内部依赖不直接决定层级。
  • 协议完整: 对于复合交互组件,应完整封装对应的键盘操作、焦点管理和 ARIA 语义。

典型示例

  • ButtonInputSwitchCheckboxAvatar
  • SelectTabsDropdownMenuDialogSheet
  • ToastTooltipToggleGroup

L2:通用模式(Pattern)—— 可跨区块复用的组合能力

定义

组合多个相互独立的 L1 原子组件,完成一种可被多个 L3 业务区块复用的通用任务或交互模式。

判定标准

  • 多能力协作: 包含两个或多个具有独立职责的 L1 组件,并对它们进行状态或操作编排。
  • 任务完整: 对外完成一个比单一控件更完整的通用任务,例如搜索、分页、附件操作或表单字段组织。
  • 跨区块复用: 不绑定某个业务名词、数据协议或页面布局,可以被多个不同的 L3 区块使用。
  • 稳定接口: 通过 Props、Slots 和事件暴露变化点,业务侧不需要了解内部组合方式。

仅仅因为组件内部引用了另一个组件,不代表它一定属于 L2。层级应由组件对外承担的职责决定。

典型示例

  • SearchBar:组合 InputButton,完成搜索任务。
  • Pagination:组合页码、翻页操作与分页信息。
  • FormField:组合标签、输入控件、说明和错误提示。

L3:业务区块(Block)—— 独立的纯 UI 展示单元

定义

由 L1 原子组件和 L2 通用模式组合而成,规定内部区域的布局与展示关系,通常对应设计稿中一个可以独立预览、交付和复用的业务区块。

判定标准

  • 独立区块: 作为完整单元被页面或业务容器引用,而不是某个控件的内部零件。
  • 结构明确: 规定标题、内容、状态、操作区等元素的相对位置与视觉关系。
  • 允许展示语义: 可以带有卡片、对话、诊断结果等业务展示语义,但不得包含业务执行逻辑。
  • 数据外部注入: 只接收适合展示的 Props 或 ViewModel,不直接接收后端 DTO,也不自行请求或转换业务数据。
  • 操作向外通知: 用户行为通过 onActiononSelectonRetry 等事件交给外部业务处理。

典型示例

  • Conversation:固定消息区、输入区和操作区的布局。
  • Sidebar:固定导航、内容和折叠区域的结构。
  • StandardCard:固定标题、描述、状态和操作区的卡片结构。
  • 诊断卡片、数据摘要卡片、任务卡片等独立业务展示块。

边界判定决策树

新增或调整组件时,依次回答以下问题:

1. 它是否只完成一个用户意图或一个 ARIA 交互协议?

  • 是: 归为 L1。即使内部复用了其他组件,也不因此自动升级到 L2。
  • 否: 进入下一步。

2. 它是否组合多个 L1,完成可跨业务区块复用的通用任务?

  • 是: 归为 L2
  • 否: 进入下一步。

3. 它是否规定了一个独立业务展示块的内容结构与布局?

  • 是: 归为 L3
  • 否: 说明组件职责仍不清晰,应继续拆分或重新定义,而不是勉强归层。

4. 它是否包含接口、路由、Store、埋点或业务协议处理?

  • 是: 不应进入本组件库。应拆为纯 UI 组件与库外的业务 Container/Adapter。

Agent 复用规则

Agent 生成组件时必须遵循以下顺序:

  1. 查找现有 Token 和组件,优先通过已有 Props、Slots 或 Variant 满足需求。
  2. 现有单个组件无法满足时,优先组合已有 L1/L2。
  3. 只有出现新的、可复用的交互能力或区块结构时,才新增组件。
  4. 视觉差异优先扩展语义 Token 或稳定 Variant,不复制组件并硬编码样式。
  5. 新增组件必须按上述决策树归层,并保持纯 UI 边界。