跳转到内容

弹出选择 popselect

数据录入组件。三层同源:无头内核给出解剖与状态机,Vue 组件与自定义元素只是它的两层外壳,行为完全一致。

示例

基础用法

触发器旁弹出一个列表,选完即收起;collection 是条目的事实源,浮层里不写条目也会铺开

当前值:(未选)

多选

multiple 下落值是切换、浮层不收起,可以接着挑;收起交给 Esc 或点浮层外

已选 1 个

受控

选中值与展开态都由外部持有:组件只发意图,写不写回由你决定

展开:否;当前值:normal

形态·语气·尺寸

三个视觉轴只写在根上,触发器与浮层都从这里继承

自定义条目

手写整棵部件树:条目里想放什么都行,行为与 collection 铺开的那一套完全一致

当前指派:u1

产物

自定义元素<xh-popselect>
Vue 组件XhPopselectContent XhPopselectItem XhPopselectItemIndicator XhPopselectItemText XhPopselectPositioner XhPopselectRoot XhPopselectTrigger
组合式函数usePopselect
状态机无,connect 直接由 props 算属性
皮肤@xihan-ui/styles/popselect.css

解剖

部件名即 data-part 属性值,也是皮肤的选择器。加粗的是必备部件,不渲染它组件不工作(Web Components 适配器会在诊断通道上报 wc.missing-part)。

data-scope="popselect"root · trigger · positioner · content · item · item-text · item-indicator

Props

属性类型必填说明
sizeSize尺寸:sm / md / lg,决定触发器高度、内边距与字号档位。
toneTone语气:brand / neutral / success / warning / danger / info,决定聚焦与选中强调用哪族颜色。
variantControlVariant形态:outline / subtle / ghost,决定触发器的描边与底色怎么用。

connect API

usePopselect 产出的对象。getXxxProps() 铺到对应部件的宿主元素上,其余是可读状态与操作入口。

成员类型说明
openboolean
valuestring[]选中集合;单选恒为长度 ≤ 1。
collectionreadonly PopselectNodeMeta[]collection 推出的条目元信息,按数据顺序排列;没给 collection 即空数组。
multipleboolean
focusedValuestring | null焦点锚点;焦点不在列表内时为 null。
disabledboolean
isSelected(value: string) => boolean
setOpen(next: boolean) => void
setValue(next: string[]) => void
select(value: string) => void落值:单选替换并收起浮层,多选切换并保持展开。
getRootProps() => T['element']
getTriggerProps() => T['button']
getPositionerProps() => T['element']
getContentProps() => T['element']
getItemProps(props: PopselectItemProps) => T['element']
getItemTextProps(props: PopselectItemProps) => T['element']
getItemIndicatorProps(props: PopselectItemProps) => T['element']

键盘

规格出处:W3C APG

按键生效条件行为
ArrowDown / ArrowUpfocus on trigger, 收起态展开浮层;焦点随即进入列表,落在选中项上,无选中则落首个可停留条目
ArrowDownfocus in content焦点移到下一个可停留条目(禁用项跳过、尽头按 loop 回绕)
ArrowUpfocus in content焦点移到上一个可停留条目(禁用项跳过、尽头按 loop 回绕)
Homefocus in content焦点移到首个可停留条目
Endfocus in content焦点移到末个可停留条目
Enter / Spacefocus in content, 单选选中焦点条目并收起浮层,焦点归还触发器;条目禁用则不认
Enter / Spacefocus in content, multiple切换焦点条目的选中态,浮层保持展开继续挑
单个可打印字符focus in content, typeahead 未关连打检索把焦点移到首字母匹配的条目,不落值
Tab / Shift+Tabfocus in content收起浮层并放行焦点,按 Tab 序列离开

Released under The MIT License