@@ -7,85 +7,74 @@ const AccordionContext = createContext()
7
7
* Accordion
8
8
*/
9
9
10
- export const Accordion = React . forwardRef (
11
- ( { children, onChange, defaultIndex = 0 , id, ...props } , forwardedRef ) => {
12
- const [ selectedIndex , setSelectedIndex ] = useState ( defaultIndex )
13
- const accordionId = useId ( id )
14
-
15
- // We're mapping over the children (AccordionItem) to get their index. Then we're
16
- // creating a context for each one.
17
- children = React . Children . map ( children , ( child , index ) => {
18
- const panelId = `accordion-${ accordionId } -panel-${ index } `
19
- const buttonId = `accordion-${ accordionId } -button-${ index } `
20
-
21
- const context = {
22
- buttonId,
23
- panelId,
24
- selected : selectedIndex === index ,
25
- selectPanel : ( ) => {
26
- onChange && onChange ( index )
27
- setSelectedIndex ( index )
28
- } ,
29
- }
30
- return < AccordionContext value = { context } children = { child } />
31
- } )
32
-
33
- function onKeyDown ( event ) {
34
- event . preventDefault ( )
35
- const i = selectedIndex
36
-
37
- switch ( event . key ) {
38
- case 'ArrowUp' :
39
- if ( i !== 0 ) {
40
- setSelectedIndex ( i - 1 )
41
- }
42
- break
43
- case 'ArrowDown' :
44
- if ( i < React . Children . count ( children ) - 1 ) {
45
- setSelectedIndex ( i + 1 )
46
- }
47
- break
48
- default :
49
- break
50
- }
10
+ export const Accordion = ( { children, onChange, defaultIndex = 0 , id, ...props } ) => {
11
+ const [ selectedIndex , setSelectedIndex ] = useState ( defaultIndex )
12
+ const accordionId = useId ( id )
13
+
14
+ // We're mapping over the children (AccordionItem) to get their index. Then we're
15
+ // creating a context for each one.
16
+ children = React . Children . map ( children , ( child , index ) => {
17
+ const panelId = `accordion-${ accordionId } -panel-${ index } `
18
+ const buttonId = `accordion-${ accordionId } -button-${ index } `
19
+
20
+ const context = {
21
+ buttonId,
22
+ panelId,
23
+ selected : selectedIndex === index ,
24
+ selectPanel : ( ) => {
25
+ onChange && onChange ( index )
26
+ setSelectedIndex ( index )
27
+ } ,
28
+ }
29
+ return < AccordionContext value = { context } children = { child } />
30
+ } )
31
+
32
+ function onKeyDown ( event ) {
33
+ event . preventDefault ( )
34
+ const i = selectedIndex
35
+
36
+ switch ( event . key ) {
37
+ case 'ArrowUp' :
38
+ if ( i !== 0 ) {
39
+ setSelectedIndex ( i - 1 )
40
+ }
41
+ break
42
+ case 'ArrowDown' :
43
+ if ( i < React . Children . count ( children ) - 1 ) {
44
+ setSelectedIndex ( i + 1 )
45
+ }
46
+ break
47
+ default :
48
+ break
51
49
}
52
-
53
- return (
54
- < div data-accordion = "" onKeyDown = { onKeyDown } ref = { forwardedRef } { ...props } >
55
- { children }
56
- </ div >
57
- )
58
50
}
59
- )
60
51
61
- Accordion . displayName = 'Accordion'
52
+ return (
53
+ < div data-accordion = "" onKeyDown = { onKeyDown } { ...props } >
54
+ { children }
55
+ </ div >
56
+ )
57
+ }
62
58
63
59
/**
64
60
* Accordion Item
65
61
*/
66
62
67
- export const AccordionItem = React . forwardRef ( ( { children, ...props } , forwardedRef ) => {
63
+ export const AccordionItem = ( { children, ...props } ) => {
68
64
const { selected } = use ( AccordionContext )
69
65
70
66
return (
71
- < div
72
- { ...props }
73
- data-accordion-item = ""
74
- data-state = { selected ? 'open' : 'collapsed' }
75
- ref = { forwardedRef }
76
- >
67
+ < div { ...props } data-accordion-item = "" data-state = { selected ? 'open' : 'collapsed' } >
77
68
{ children }
78
69
</ div >
79
70
)
80
- } )
81
-
82
- AccordionItem . displayName = 'AccordionItem'
71
+ }
83
72
84
73
/**
85
74
* Accordion Button
86
75
*/
87
76
88
- export const AccordionButton = React . forwardRef ( ( { children, onClick, ...props } , forwardedRef ) => {
77
+ export const AccordionButton = ( { children, onClick, ...props } ) => {
89
78
const { buttonId, panelId, selected, selectPanel } = use ( AccordionContext )
90
79
91
80
return (
@@ -97,20 +86,17 @@ export const AccordionButton = React.forwardRef(({ children, onClick, ...props }
97
86
aria-expanded = { selected }
98
87
id = { buttonId }
99
88
aria-controls = { panelId }
100
- ref = { forwardedRef }
101
89
>
102
90
{ children }
103
91
</ button >
104
92
)
105
- } )
106
-
107
- AccordionButton . displayName = 'AccordionButton'
93
+ }
108
94
109
95
/**
110
96
* Accordion Panel
111
97
*/
112
98
113
- export const AccordionPanel = React . forwardRef ( ( { children, ...props } , forwardedRef ) => {
99
+ export const AccordionPanel = ( { children, ...props } ) => {
114
100
const { buttonId, panelId, selected } = use ( AccordionContext )
115
101
116
102
return (
@@ -122,11 +108,8 @@ export const AccordionPanel = React.forwardRef(({ children, ...props }, forwarde
122
108
hidden = { ! selected }
123
109
data-accordion-panel = ""
124
110
data-state = { selected ? 'open' : 'collapsed' }
125
- ref = { forwardedRef }
126
111
>
127
112
{ children }
128
113
</ div >
129
114
)
130
- } )
131
-
132
- AccordionPanel . displayName = 'AccordionPanel'
115
+ }
0 commit comments