Segmented 使用手册
v1.3.0 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
将少量互斥选项并排展示,便于快速切换筛选条件或参数,并支持键盘与表单交互。
使用选择
用于多个互斥参数或过滤条件之间单选,使用 radiogroup 语义。切换不同内容面板或视图时使用 Tab。
使用 bind:value 与稳定选项值;缺失或不匹配时只视觉回退到首项,不自动写回绑定值,表单请显式初始化。
显式子项使用 Button as="item";name 非空时提供隐藏表单字段,表单重置由应用恢复业务值。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
默认内置模式 / 显式组合模式
Tab 宿主组件特化:Segmented 实际渲染真实 Tab,全部兼容 Tab Props 在根级平铺;不提供
parts.Tab。默认内置模式(推荐):
items交给 Tab 生成 Button;parts.Button沿默认生成链路显式转发。显式组合模式:显式书写
<Button as="item">,逐项 Props 直接配置。
与 Tab 的关系
Segmented 是 Tab 的宿主组件特化:真实 Tab 是主要视觉表面、交互节点和根 DOM;Segmented 只固定 radiogroup 语义、方向键直切行为,并增加 name 隐藏表单字段。
Segmented 继承 Tab 的复合控件 hover 规则:item 默认不放大,保留原有颜色与 indicator 反馈;可通过子 Button 或 parts.Button.scaleOnHover=true 显式开启。
宿主 Props 与所有权
类型来源:
ComponentProps<typeof Tab>。受控字段:
value、children、role、itemRole、selectionFollowsFocus、class、parts。Tab 继续拥有 variant、size、布局、indicator、键盘基础逻辑、Frame Props 与原始 DOM。
Segmented 拥有 radiogroup/radio ARIA、直切语义、name hidden input 及顶层 class 合并。
hidden input 是 Tab 根之后的无视觉辅助节点;不复制 Tab 表面。
2.1 Props
2.2 子项约定
同 Tab.md §2.2:子项必须是 <Button as="item" value="...">。
Form 接入
实现:当传入 name 时,Segmented 在 Tab 根节点之后追加 <input type="hidden" name={name} value={value}>,通过原生表单提交机制把当前 value 暴露给 Form。
动效
完全继承 Tab。详见 Tab.md §4。
键盘行为
←/→(row)或↑/↓(column):直接切换并激活(Tab 的selectionFollowsFocus=true模式)。Home/End:跳到首/末项并激活。焦点行为与 Tab 一致(roving tabindex)。
使用示例
Segmented 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
本组件源文件没有直接消费已登记的专属 override。组合子组件的样式通过公开 parts 或显式 child 配置;不要凭名称猜测变量。
Segmented 类型与状态
必填属性:无具名必填属性。
可双向绑定:bind:value。
继承声明:Omit<TabProps, ControlledTabKeys>。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
ComponentPartsOf
来源:components/src/logic/component-parts.svelte.ts
ConfigurableComponentPartProps
来源:components/src/logic/component-parts.svelte.ts
ComponentPartControlledKey
来源:components/src/logic/component-parts.svelte.ts
TabProps
来源:components/src/components/Segmented.svelte
ControlledTabKeys
来源:components/src/components/Segmented.svelte