-
-
Notifications
You must be signed in to change notification settings - Fork 198
/
Copy pathaccordion.tsx
49 lines (45 loc) · 1.22 KB
/
accordion.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import * as accordion from "@zag-js/accordion"
import { normalizeProps, useMachine } from "@zag-js/react"
import { useId } from "react"
const items = [
{
title: "Watercraft",
desc: "Yacht, Boats and Dinghies",
content: "Sample accordion content",
},
{
title: "Automobiles",
desc: "Cars, Trucks and Vans",
content: "Sample accordion content",
},
{
title: "Aircraft",
desc: "Airplanes, Helicopters and Rockets",
content: "Sample accordion content",
},
]
export function Accordion(props: Omit<accordion.Props, "id">) {
const service = useMachine(accordion.machine, {
id: useId(),
defaultValue: ["Aircraft"],
...props,
})
const api = accordion.connect(service, normalizeProps)
return (
<div {...api.getRootProps()}>
{items.map((item) => (
<div key={item.title} {...api.getItemProps({ value: item.title })}>
<h3>
<button {...api.getItemTriggerProps({ value: item.title })}>
<div>{item.title}</div>
<div>{item.desc}</div>
</button>
</h3>
<div {...api.getItemContentProps({ value: item.title })}>
{item.content}
</div>
</div>
))}
</div>
)
}