File tree 5 files changed +62
-6
lines changed
5 files changed +62
-6
lines changed Original file line number Diff line number Diff line change @@ -155,6 +155,10 @@ Class(es) to apply to the 'button' element.
155
155
156
156
Class(es) to apply to element.
157
157
158
+ #### region: ` boolean`
159
+
160
+ Make the element have a region role.
161
+
158
162
---
159
163
160
164
### AccordionItemState
Original file line number Diff line number Diff line change @@ -15,7 +15,7 @@ ReactDOM.render(
15
15
< AccordionItemHeading >
16
16
< AccordionItemButton > Heading One</ AccordionItemButton >
17
17
</ AccordionItemHeading >
18
- < AccordionItemPanel >
18
+ < AccordionItemPanel region >
19
19
Sunt in reprehenderit cillum ex proident qui culpa fugiat
20
20
pariatur aliqua nostrud consequat consequat enim quis sit
21
21
consectetur ad aute ea ex eiusmod id esse culpa et pariatur
@@ -26,7 +26,7 @@ ReactDOM.render(
26
26
< AccordionItemHeading >
27
27
< AccordionItemButton > Heading Two</ AccordionItemButton >
28
28
</ AccordionItemHeading >
29
- < AccordionItemPanel >
29
+ < AccordionItemPanel region >
30
30
Velit tempor dolore commodo voluptate id do nulla do ut
31
31
proident cillum ad cillum voluptate deserunt fugiat ut sed
32
32
cupidatat ut consectetur consequat incididunt sed in culpa
@@ -37,7 +37,7 @@ ReactDOM.render(
37
37
< AccordionItemHeading >
38
38
< AccordionItemButton > Heading Three</ AccordionItemButton >
39
39
</ AccordionItemHeading >
40
- < AccordionItemPanel >
40
+ < AccordionItemPanel region >
41
41
Lorem ipsum esse occaecat voluptate duis incididunt amet
42
42
eiusmod sunt commodo sunt enim anim ea culpa ut tempor
43
43
dolore fugiat exercitation aliquip commodo dolore elit esse
Original file line number Diff line number Diff line change 1
1
{
2
2
"name" : " react-accessible-accordion" ,
3
- "version" : " 3.3.4 " ,
3
+ "version" : " 4.0.0 " ,
4
4
"description" : " Accessible Accordion component for React" ,
5
5
"main" : " dist/umd/index.js" ,
6
6
"module" : " dist/es/index.js" ,
Original file line number Diff line number Diff line change @@ -66,4 +66,49 @@ describe('AccordionItem', () => {
66
66
expect ( getByText ( 'Hello World' ) ) . toBeTruthy ( ) ;
67
67
} ) ;
68
68
} ) ;
69
+
70
+ describe ( 'role region' , ( ) => {
71
+ it ( 'enables aria-labelledby' , ( ) => {
72
+ const { getByRole } = render (
73
+ < Accordion >
74
+ < AccordionItem >
75
+ < AccordionItemPanel region >
76
+ Hello World
77
+ </ AccordionItemPanel >
78
+ </ AccordionItem >
79
+ </ Accordion > ,
80
+ ) ;
81
+ expect (
82
+ getByRole ( 'region' ) . getAttribute ( 'aria-labelledby' ) ,
83
+ ) . toBeTruthy ( ) ;
84
+ } ) ;
85
+
86
+ it ( 'disables aria-labelledby when absent' , ( ) => {
87
+ const { getByText, queryByRole } = render (
88
+ < Accordion >
89
+ < AccordionItem >
90
+ < AccordionItemPanel > Hello World</ AccordionItemPanel >
91
+ </ AccordionItem >
92
+ </ Accordion > ,
93
+ ) ;
94
+ expect ( queryByRole ( 'region' ) ) . toBeNull ( ) ;
95
+ expect (
96
+ getByText ( 'Hello World' ) . getAttribute ( 'aria-labelledby' ) ,
97
+ ) . toBeFalsy ( ) ;
98
+ } ) ;
99
+
100
+ it ( 'disables aria-labelledby when false' , ( ) => {
101
+ const { getByText, queryByRole } = render (
102
+ < Accordion >
103
+ < AccordionItem >
104
+ < AccordionItemPanel region = { false } > Hello World</ AccordionItemPanel >
105
+ </ AccordionItem >
106
+ </ Accordion > ,
107
+ ) ;
108
+ expect ( queryByRole ( 'region' ) ) . toBeNull ( ) ;
109
+ expect (
110
+ getByText ( 'Hello World' ) . getAttribute ( 'aria-labelledby' ) ,
111
+ ) . toBeFalsy ( ) ;
112
+ } ) ;
113
+ } ) ;
69
114
} ) ;
Original file line number Diff line number Diff line change @@ -3,10 +3,11 @@ import { DivAttributes } from '../helpers/types';
3
3
import { assertValidHtmlId } from '../helpers/uuid' ;
4
4
import { Consumer as ItemConsumer , ItemContext } from './ItemContext' ;
5
5
6
- type Props = DivAttributes & { className ?: string } ;
6
+ type Props = DivAttributes & { region ?: boolean ; className ?: string } ;
7
7
8
8
const AccordionItemPanel = ( {
9
9
className = 'accordion__panel' ,
10
+ region,
10
11
id,
11
12
...rest
12
13
} : Props ) : JSX . Element => {
@@ -15,12 +16,18 @@ const AccordionItemPanel = ({
15
16
assertValidHtmlId ( id ) ;
16
17
}
17
18
19
+ const attrs = {
20
+ ...panelAttributes ,
21
+ 'aria-labelledby' : region ? panelAttributes [ 'aria-labelledby' ] : undefined ,
22
+ } ;
23
+
18
24
return (
19
25
< div
20
26
data-accordion-component = "AccordionItemPanel"
21
27
className = { className }
22
28
{ ...rest }
23
- { ...panelAttributes }
29
+ { ...attrs }
30
+ role = { region ? 'region' : undefined }
24
31
/>
25
32
) ;
26
33
} ;
You can’t perform that action at this time.
0 commit comments