1
- import { StoryObj } from "@storybook/react" ;
1
+ import { Meta , StoryObj } from "@storybook/react" ;
2
2
import React , { useState } from "react" ;
3
3
import { Accordion , AccordionProps } from "." ;
4
- import AccordionContent from "./AccordionContent" ;
5
- import AccordionHeader from "./AccordionHeader" ;
6
- import AccordionItem from "./AccordionItem" ;
7
4
8
5
export default {
9
6
title : "ds-react/Accordion" ,
10
7
component : Accordion ,
11
- subcomponents : {
12
- AccordionItem,
13
- AccordionContent,
14
- AccordionHeader,
15
- } ,
16
8
parameters : {
17
9
chromatic : { disable : true } ,
18
10
} ,
19
11
decorators : [
20
12
( Story ) => (
21
- < div
22
- style = { {
23
- width : "600px" ,
24
- minHeight : "100vh" ,
25
- display : "flex" ,
26
- flexDirection : "column" ,
27
- gap : "1rem" ,
28
- } }
29
- >
13
+ < div style = { { width : "500px" , minHeight : "100vh" } } >
30
14
< Story />
31
15
</ div >
32
16
) ,
33
17
] ,
34
- } ;
18
+ } satisfies Meta < typeof Accordion > ;
35
19
36
20
type Story = StoryObj < typeof Accordion > ;
37
21
@@ -60,46 +44,21 @@ const SmallContent = () => (
60
44
</ Accordion . Content >
61
45
) ;
62
46
63
- const Item = ( props ) => {
64
- const [ open , setOpen ] = useState ( false ) ;
65
-
66
- if ( props . defaultOpen ) {
67
- return (
68
- < Accordion . Item
69
- defaultOpen = { props . defaultOpen }
70
- onOpenChange = { console . log }
71
- >
72
- < Accordion . Header > Accordion header text</ Accordion . Header >
73
- < SmallContent />
74
- </ Accordion . Item >
75
- ) ;
76
- }
77
-
78
- return props . controlled ? (
79
- < Accordion . Item open = { open } onOpenChange = { console . log } >
80
- < Accordion . Header onClick = { ( ) => setOpen ( ! open ) } >
81
- Accordion header text
82
- </ Accordion . Header >
83
- < Content />
84
- </ Accordion . Item >
85
- ) : (
86
- < Accordion . Item onOpenChange = { console . log } >
87
- < Accordion . Header > Accordion header text</ Accordion . Header >
88
- < Content />
89
- </ Accordion . Item >
90
- ) ;
91
- } ;
47
+ const Item = ( { defaultOpen = false } ) => (
48
+ < Accordion . Item defaultOpen = { defaultOpen } onOpenChange = { console . log } >
49
+ < Accordion . Header > Accordion header text</ Accordion . Header >
50
+ { defaultOpen ? < SmallContent /> : < Content /> }
51
+ </ Accordion . Item >
52
+ ) ;
92
53
93
54
export const Controls : Story = {
94
- render : ( { ... props } ) => {
55
+ render : ( props ) => {
95
56
return (
96
- < div style = { { width : 500 } } >
97
- < Accordion { ...props } >
98
- { [ ...Array ( 4 ) ] . map ( ( _ , y ) => (
99
- < Item key = { y } { ...props } />
100
- ) ) }
101
- </ Accordion >
102
- </ div >
57
+ < Accordion { ...props } >
58
+ { [ ...Array ( 4 ) ] . map ( ( _ , y ) => (
59
+ < Item key = { y } />
60
+ ) ) }
61
+ </ Accordion >
103
62
) ;
104
63
} ,
105
64
argTypes : {
@@ -128,21 +87,19 @@ export const Controls: Story = {
128
87
export const DefaultOpen : Story = {
129
88
render : ( ) => {
130
89
return (
131
- < div style = { { width : 500 } } >
132
- < Accordion >
133
- { [ ...Array ( 4 ) ] . map ( ( _ , y ) => (
134
- < Item key = { y } defaultOpen = { y === 2 } />
135
- ) ) }
136
- </ Accordion >
137
- </ div >
90
+ < Accordion >
91
+ { [ ...Array ( 4 ) ] . map ( ( _ , y ) => (
92
+ < Item key = { y } defaultOpen = { y === 2 } />
93
+ ) ) }
94
+ </ Accordion >
138
95
) ;
139
96
} ,
140
97
} ;
141
98
142
99
export const Variants : Story = {
143
100
render : ( ) => {
144
101
return (
145
- < div style = { { width : 500 } } className = "colgap" >
102
+ < div className = "colgap" >
146
103
< h3 > Default</ h3 >
147
104
< Accordion >
148
105
{ [ ...Array ( 2 ) ] . map ( ( _ , y ) => (
@@ -166,22 +123,20 @@ export const ControlledState: Story = {
166
123
const [ open2 , setOpen2 ] = useState ( false ) ;
167
124
168
125
return (
169
- < div style = { { width : 500 } } >
170
- < Accordion >
171
- < Accordion . Item open = { open } >
172
- < Accordion . Header onClick = { ( ) => setOpen ( ! open ) } >
173
- Accordion header text
174
- </ Accordion . Header >
175
- < Content />
176
- </ Accordion . Item >
177
- < Accordion . Item open = { open2 } >
178
- < Accordion . Header onClick = { ( ) => setOpen2 ( ! open2 ) } >
179
- Accordion header text
180
- </ Accordion . Header >
181
- < Content />
182
- </ Accordion . Item >
183
- </ Accordion >
184
- </ div >
126
+ < Accordion >
127
+ < Accordion . Item open = { open } >
128
+ < Accordion . Header onClick = { ( ) => setOpen ( ! open ) } >
129
+ Accordion header text
130
+ </ Accordion . Header >
131
+ < Content />
132
+ </ Accordion . Item >
133
+ < Accordion . Item open = { open2 } >
134
+ < Accordion . Header onClick = { ( ) => setOpen2 ( ! open2 ) } >
135
+ Accordion header text
136
+ </ Accordion . Header >
137
+ < Content />
138
+ </ Accordion . Item >
139
+ </ Accordion >
185
140
) ;
186
141
} ,
187
142
} ;
@@ -216,7 +171,7 @@ const headingSizes: AccordionProps["headingSize"][] = [
216
171
217
172
export const Size : Story = {
218
173
render : ( ) => (
219
- < div style = { { width : 500 } } className = "colgap" >
174
+ < div className = "colgap" >
220
175
{ sizes . map ( ( size ) => (
221
176
< SingleHeaderAccordion key = { size } size = { size } />
222
177
) ) }
@@ -226,7 +181,7 @@ export const Size: Story = {
226
181
227
182
export const HeadingSize : Story = {
228
183
render : ( ) => (
229
- < div style = { { width : 500 } } className = "colgap" >
184
+ < div className = "colgap" >
230
185
{ headingSizes . map ( ( size ) => (
231
186
< SingleHeaderAccordion key = { size } headingSize = { size } />
232
187
) ) }
@@ -237,14 +192,14 @@ export const HeadingSize: Story = {
237
192
export const Indent : Story = {
238
193
render : ( ) => {
239
194
return (
240
- < div style = { { width : 500 } } className = "colgap" >
241
- < h3 > No indent </ h3 >
195
+ < div className = "colgap" >
196
+ < h3 > Indent </ h3 >
242
197
< Accordion indent >
243
198
{ [ ...Array ( 2 ) ] . map ( ( _ , y ) => (
244
199
< Item key = { y } defaultOpen />
245
200
) ) }
246
201
</ Accordion >
247
- < h3 > Indent </ h3 >
202
+ < h3 > No indent </ h3 >
248
203
< Accordion indent = { false } >
249
204
{ [ ...Array ( 2 ) ] . map ( ( _ , y ) => (
250
205
< Item key = { y } defaultOpen />
0 commit comments