@xwink/ui

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

名称类型默认值说明
pressedboolean | undefinedfalse主区是不是按下态(工具条里的「当前工具」):整块画按下底,主区带 `aria-pressed`
disabledboolean | undefinedfalse—
iconOnlyboolean | undefinedfalse主区只放图标:主区是控件高度的正方形、不留左右内边距
menuLabel 必填 string—箭头区的无障碍名称(没有可见文字,读屏与名字型悬停提示都读它)
menuIconstring | undefined"ph:caret-down"箭头图标,浮层往上开时传 `ph:caret-up`
itemsMenuItem[] | undefinedundefined箭头区展开的命令列表(`#menu` 插槽覆写时不用)
hoverboolean | undefinedfalse指针移上箭头区也展开
triggerAttrsRecord<string, unknown> | undefinedundefined落到箭头区按钮上的属性(`data-tip` 这类)
popoverProps(Pick<PopoverProps, "side" | "align" | "sideOffset"> & { class?: string | undefined; }) | undefinedundefined浮层往哪边开、怎么对齐(缺省往下、左边与整块齐),`class` 落到浮层内容上
openboolean | undefinedfalse—

Emits

事件载荷说明
update:open[value: boolean]—

Slots

插槽说明
default—
menu—