跳转到内容

折叠区域 collapsible

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

示例

基础用法

不传 open 即为非受控,defaultOpen 只给初始值,之后由组件自己维护开合

defaultOpen 只影响初始状态。

受控

传了 open 就由宿主说了算,组件自己不再改状态,只发 open-change 报告意图

禁用

disabled 把触发器整个关停,点击与键盘都不再改开合,已展开的内容维持原样

内容停在展开态,收不上。

尺寸

size 换的是触发按钮的高度、内边距与字号,三档并排对照

按钮最矮,字号也最小。
不写 size 就是这一档。
按钮最高,字号也最大。

自定义展开标记

折叠区域不带指示器部件,标记由作者按 open 自己画,触发器两端对齐排

展开动画

收起时节点不卸载,作者接管内容区的 display,用一条行高过渡就能平滑展开

产物

自定义元素<xh-collapsible>
Vue 组件XhCollapsibleContent XhCollapsibleRoot XhCollapsibleTrigger
组合式函数useCollapsible
状态机collapsibleMachine
皮肤@xihan-ui/styles/collapsible.css

解剖

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

data-scope="collapsible"root · trigger · content

Props

属性类型必填说明
openboolean
defaultOpenboolean
disabledboolean
sizeSize尺寸:sm / md / lg。
onOpenChange(details: CollapsibleOpenChangeDetails) => voidopen 变化意图回调;受控时是唯一出口,非受控随内部转移一并通知。

状态机

状态open · closed

事件OPEN · CLOSE · TOGGLE · CONTROLLED.OPEN · CONTROLLED.CLOSE

判据isOpenControlled

connect API

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

成员类型说明
openboolean
setOpen(next: boolean) => void
getRootProps() => T['element']
getTriggerProps() => T['button']
getContentProps() => T['element']

键盘

规格出处:W3C APG

按键生效条件行为
Space / Enterfocus in trigger, not disabled展开/收起 content

Released under The MIT License