SplitButton
分体按钮(Figma UI3 工具条的形状按钮,Fluent SplitButton 同类):一块按钮里两个响应区,主区点了执行默认动作,窄的箭头区展开浮层。
外观是一整块:悬停底、按下态底与圆角画在根上,中间不画分隔线,指到的那一半在整块悬停底上再深一档,看得出点下去是哪个。两段刻意不复用 XButton(同 Segmented):各自带圆角与底色的按钮拼在一块里,悬停底会断成两截。
命令列表与工具条
浮层缺省是 items 的命令列表(ContextMenu 的下拉菜单,菜单项字段同那一页)。浮层的触发区域是箭头、定位目标是整块——浮层左边与按钮左边对齐。pressed 画整块按下态(工具条里的「当前工具」),主区带 aria-pressed;icon-only 时主区是控件高度的正方形。
放进 XToolbar 时两段自动各自登记方向键漫游,不用再包 XToolbarItem;浮层在两段外面,不会把浮层里的按钮拉进工具条。
工具条里的形状按钮 / 带文字的导出按钮
当前工具:select · 形状:矩形
上次导出:还没导出
自定义面板
#menu 插槽整个换成自定义面板(Popover),缩略图网格、色板这类。hover 让指针移上箭头区也展开;方位经 popover-props(side / align / side-offset,class 落到浮层内容上)。往上开的浮层别同时配悬停展开与悬停提示:提示条弹在上方正好盖住浮层。
#menu 插槽:悬停展开的色板
填充了 0 次 · 当前 #d9a06c
属性透传同 XInput:class / style 落在根(整块)上,其余属性与 @click 落在主区按钮上;箭头区没有可见文字,读屏名是必填的 menu-label,其余属性(data-tip 这类)经 trigger-attrs 给。
API
Props
| 名称 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pressed | boolean | undefined | false | 主区是不是按下态(工具条里的「当前工具」):整块画按下底,主区带 `aria-pressed` |
disabled | boolean | undefined | false | — |
iconOnly | boolean | undefined | false | 主区只放图标:主区是控件高度的正方形、不留左右内边距 |
menuLabel 必填 | string | — | 箭头区的无障碍名称(没有可见文字,读屏与名字型悬停提示都读它) |
menuIcon | string | undefined | "ph:caret-down" | 箭头图标,浮层往上开时传 `ph:caret-up` |
items | MenuItem[] | undefined | undefined | 箭头区展开的命令列表(`#menu` 插槽覆写时不用) |
hover | boolean | undefined | false | 指针移上箭头区也展开 |
triggerAttrs | Record<string, unknown> | undefined | undefined | 落到箭头区按钮上的属性(`data-tip` 这类) |
popoverProps | (Pick<PopoverProps, "side" | "align" | "sideOffset"> & { class?: string | undefined; }) | undefined | undefined | 浮层往哪边开、怎么对齐(缺省往下、左边与整块齐),`class` 落到浮层内容上 |
open | boolean | undefined | false | — |
Emits
| 事件 | 载荷 | 说明 |
|---|---|---|
update:open | [value: boolean] | — |
Slots
| 插槽 | 说明 |
|---|---|
default | — |
menu | — |