Primitives
Primitives 不是另一套 UI 组件清单,而是 Varo 的运行时契约:它们定义状态、触发器、遮罩、定位与关闭行为,让 H5 与小程序封装共享同一套交互语义。展示类组件继续留在组件文档;这里只保留会影响行为组合的底层能力。
运行时契约
Root 负责状态与上下文,Trigger 负责入口,Content/Overlay 负责可见层,Close 负责退出动作。平台可以换渲染细节,但不能改变契约。
组合顺序
先放 Root,再放 Trigger,然后放 Overlay 与 Content。组合顺序稳定后,业务 blocks 才能在 H5 和小程序间保持一致。
受控与非受控
简单场景使用内部状态;需要埋点、路由同步或表单联动时,切换到受控写法。
目录
当前 17 个公开 primitives 按能力分组。每个页面都包含 H5 实时预览、小程序运行时契约、可复制代码与 API。
基础控件
2选择与切换
6Number Field打开文档
数值边界、步进、精度与组合式加减控件。
Parts NumberFieldRoot / Decrement / Input / IncrementCheckbox打开文档
选中态、禁用态与 indicator 渲染契约。
Parts CheckboxRoot / CheckboxIndicatorRadio Group打开文档
单选组 value 与选项级 disabled 语义。
Parts RadioGroup / RadioItem / RadioIndicatorSwitch打开文档
开关态、loading 与 disabled 契约。
Parts SwitchRoot / SwitchThumbTabs打开文档
当前 tab value、orientation 与 panel 关联。
Parts TabsRoot / TabsList / TabsTrigger / TabsContentSelect打开文档
选择器状态、open 契约与选项组合。
Parts SelectRoot / Trigger / Value / Content / Item内容与布局
3展开与轻浮层
3遮罩与弹层
3下一批基础候选
基础能力不是越多越好:只有当状态、键盘/触摸行为或 dismiss 逻辑会被多个组件重复使用时,才下沉为 primitive。
| 候选 | 可支撑的上层组件 | 下沉价值 |
|---|---|---|
Tooltip | Tooltip、图表提示、截断说明 | 延迟打开、悬停/聚焦与关闭策略 |
Menu / DropdownMenu | 下拉菜单、右键菜单、操作菜单 | roving focus、方向键与选项激活 |
ToggleGroup | 分段控制、格式工具栏、筛选器 | 单选/多选集合与 roving focus |
Slider | 音量、范围、参数调节 | 边界、步进、键盘和拖动状态 |
Combobox / Listbox | 搜索选择、远程选择、命令面板 | 输入、过滤、active option 与选择状态 |
Toast | 全局反馈、异步结果、撤销提示 | 队列、生命周期、暂停与关闭 |
优先级应是 Menu、Tooltip、ToggleGroup、Slider,再评估 Combobox 与 Toast;它们的跨端输入模型更复杂,需要先锁定 H5 与小程序行为边界。
产品边界
- primitive 管行为契约:受控/非受控状态、disabled、ARIA、
data-*与 dismiss 事件。 - UI wrapper 管视觉与定位:token、动画、图标、浮层位置与平台渲染细节。
- 业务 wrapper 管数据与场景:远程搜索、权限、分页、领域模型与业务文案。
这个分层让 Base Kit 源码保持可读可改;团队可以基于相同 primitives 创建自己的 UI 包和业务组件,而不需要复制状态机。
开发约定
- H5 与小程序使用同一套 part 名称与状态模型。
- 同一
TabsRoot/AccordionRoot内的 value 必须唯一。 - 小程序页不把浏览器渲染伪装成真实小程序预览;文档用「运行时契约」说明差异。
- 自定义业务 UI 请从 primitives 向上封装,或参考 组件文档 与后续 Blocks 作者指南。