SelectButton 使用手册
v1.0.2 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
以按钮形式提供单项下拉选择,适合工具栏、筛选入口和需要紧凑展示的选项切换。
使用选择
用于按钮触发的选择或命令菜单。表单字段式单选用 Select;多项操作随宽度收纳用 OverflowActions。
options 提供唯一字符串 value;label 定制触发按钮文字,children 用来替换列表。
action 模式不更新 value 或触发 onchange;根级 Props 配置按钮,parts 不提供 Button 入口。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
使用
Button 的兼容 Props 在根级平铺;Button 是宿主,不提供 parts.Button。Select 只提供无视觉 wrapper,不额外绘制字段边框、背景或圆角,因此 SelectButton 的最终视觉始终由真实 Button 宿主及其公开 Props 决定。默认辅助子树为 Listbox → Input + MenuItem,通过 parts.Listbox/Input/MenuItem 配置。存在显式 children 时替换默认 Listbox。
默认 label 显示当前选项或 placeholder;label snippet 只替换 label。默认 indicator 使用 arrow-line-down,可用 showIndicator={false} 隐藏或用 indicator snippet 替换。
selectionMode="persistent" 是默认持续选择模式:trigger 显示当前选中项。selectionMode="action" 是命令执行模式:trigger 始终显示 placeholder,点击选项只触发 onAction(value),不保存选中值。因此无需另设 MenuButton。
SelectButton 默认不显示搜索框,使用 search 开启。其 Listbox 默认以最长选项决定固定宽度,其他选项全部 fill,并且不显示选中 check。搜索 placeholder、搜索时 160px 最小宽度和打开后锁宽由 Listbox 统一提供。bare 与 emphasis 直接传给宿主 Button;因此 bare 默认 100%,需要次级触发器时显式使用 emphasis="muted"。
数据与 Snippet 参数
SelectValue = string | number | undefined。SelectOption 为 { value: string; label: string; disabled?: boolean };选项 value 应稳定且唯一。
SelectButtonLabelContext 为 { value: SelectValue; option: SelectOption | undefined; label: string; placeholder: string | undefined };label 已按选项文字 → placeholder → 空字符串解析。SelectButtonIndicatorContext 为 { open: boolean; disabled: boolean }。
表单提交和选择行为复用 Select,按钮视觉 Props 参见 Button。required 与 invalid 的当前限制见各自属性说明,不能据字段名推断已实现原生校验。
此区域的内容受保护。AI 在修改此区域前必须请求用户审查。
SelectButton 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
本组件源文件没有直接消费已登记的专属 override。组合子组件的样式通过公开 parts 或显式 child 配置;不要凭名称猜测变量。
SelectButton 类型与状态
必填属性:无具名必填属性。
可双向绑定:bind:value。
继承声明:Omit<ButtonProps, ControlledButtonKeys>。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
SelectValue
来源:components/src/components/Select.svelte
SelectOption
来源:components/src/components/Select.svelte
ListboxItem
来源:components/src/components/Listbox.svelte
SelectButtonLabelContext
来源:components/src/components/SelectButton.svelte
SelectButtonIndicatorContext
来源:components/src/components/SelectButton.svelte
ComponentPartsOf
来源:components/src/logic/component-parts.svelte.ts
ConfigurableComponentPartProps
来源:components/src/logic/component-parts.svelte.ts
ComponentPartControlledKey
来源:components/src/logic/component-parts.svelte.ts
ButtonProps
来源:components/src/components/SelectButton.svelte
ControlledButtonKeys
来源:components/src/components/SelectButton.svelte