MenuItem 使用手册
v1.3.0 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
在选项列表或快捷操作面板中呈现一项内容,支持图标、选中状态与禁用反馈。
使用选择
作为 Listbox 中的选项使用。普通导航使用 Link 或 SidebarItem;不要把内容列表每行都变成可选择选项。
接入 Listbox 时使用 as="item",同一列表的 value 必须唯一。
disabled 禁止操作;leading / trailing 放置附件,closeOnSelect 决定选中后是否关闭所属面板。
自定义选项的内置删除名称随 LocaleProvider 切换;查询、选项名称和值保持原样,删除仍由所属 Listbox 管理。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
关键字 (Props)
继承 FrameProps(排除 children / tag)。
场景行为
点击未禁用的 MenuItem 后会派发 snowui-menu-item-select 选择意图事件,事件携带 value 与可选 closeOnSelect。MenuItem 本身不决定父级浮层是否关闭;Popover 等浮层容器按自身默认策略处理,单个 MenuItem closeOnSelect={...} 可覆盖容器默认值。Listbox 仍由自身选择协议管理关闭行为。
布局模型
主布局模型:槽位宿主布局。定义见 ../../../specs/maintainers/LayoutProtocol.md §12.3(源码参考:specs/maintainers/LayoutProtocol.md)。
MenuItem 的根布局固定按 Leading / Label / Trailing 三段组织:
根节点是
Frame row singleLine,并在组件内部固定启用enableAutoLayout;外部传入enableAutoLayout={false}不关闭 MenuItem 的内部槽位协议。普通文本或
.snowui-menu-item-label是 Content / Fill 槽,负责截断,必须保持min-width: 0。直系
as="leading"/as="trailing"支持复杂结构,Leading 与 Trailing 为 Hug。showCheck开启时,默认 check / delete 按 Trailing / Hug 处理;关闭时不渲染勾选槽位,也不保留 gap。存在自定义直系 trailing 时默认 check 隐藏。Listbox 状态注册、过滤隐藏和 Popover 独立状态是 MenuItem 行为协议,不改变根三槽位布局。
在 Popover 中(独立 Props 控制)
复合 leading / trailing
在 Listbox 中(context 自动接管)
连续 Hover 宿主
MenuItem 在支持连续 hover 的 Listbox / Popover 中由宿主的唯一背景层表达 hover。 独立使用或宿主 continuousHover={false} 时仍使用自身即时背景。独立 active 背景保持持久,hover 到 active 项时与宿主背景叠加并加深。
MenuItem 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
MenuItem 类型与状态
必填属性:无具名必填属性。
可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。
继承声明:Omit<FrameProps, "children" | "tag">。继承能力以基类公开文档为准;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