Accordion
手风琴把相关内容组织成可展开收起的垂直分组,同一时间只展开一项。下方预览由 pingo 引擎实时渲染——可以点击标题切换,或用方向键移动焦点、Enter/空格展开。
用法
import { createElement } from "@dopejs/pingo";
import { Accordion, AccordionItem } from "@dopejs/pingo-ui";
root.render(
createElement(Accordion, {
defaultOpenValue: "intro",
children: [
createElement(AccordionItem, {
value: "intro",
title: "什么是 pingo-ui?",
children: createElement("text", { value: "渲染在 pingo canvas 上的组件库。" }),
}),
createElement(AccordionItem, {
value: "theme",
title: "支持暗色主题吗?",
children: createElement("text", { value: "支持,跟随主题自动切换。" }),
}),
],
}),
);
Accordion 既支持非受控(defaultOpenValue)也支持受控(openValue + onValueChange)两种用法。
Props
Accordion
| Prop | 类型 | 默认值 | 说明 |
|---|---|---|---|
openValue |
string |
— | 受控:当前展开项的 value |
defaultOpenValue |
string |
— | 非受控:初始展开项的 value |
onValueChange |
(value: string | undefined) => void |
— | 展开项变化回调;全部收起时为 undefined |
children |
PingoNode |
— | AccordionItem 列表(必填) |
className |
string |
— | 追加在组件类名之后 |
AccordionItem
| Prop | 类型 | 默认值 | 说明 |
|---|---|---|---|
value |
string |
— | 项的唯一标识(必填) |
title |
string |
— | 触发器标题(必填) |
children |
PingoNode |
— | 展开后显示的内容(必填) |
className |
string |
— | 追加在组件类名之后 |
无障碍
方向键(上/下)在标题之间移动焦点但不改变展开状态,Home/End 跳到首尾;Enter 或空格切换展开——符合 WAI-ARIA 对焦点与选中分离的要求。内容区域收起时以 display: none 隐藏而非卸载,展开状态得以保留。