Skip to content

Commit 8b9edc4

Browse files
authoredSep 28, 2022
feat(a11y): add attribute role="img" to the svg element (#750)
1 parent a9d9e98 commit 8b9edc4

File tree

8 files changed

+253
-60
lines changed

8 files changed

+253
-60
lines changed
 

‎packages/babel-preset/src/index.test.ts

+12-12
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('preset', () => {
2828
).toMatchInlineSnapshot(`
2929
"import * as React from \\"react\\";
3030
31-
const SvgComponent = () => <svg foo=\\"bar\\" x={y} />;
31+
const SvgComponent = () => <svg role=\\"img\\" foo=\\"bar\\" x={y} />;
3232
3333
export default SvgComponent;"
3434
`)
@@ -45,7 +45,7 @@ describe('preset', () => {
4545
const SvgComponent = ({
4646
title,
4747
titleId
48-
}) => <svg aria-labelledby={titleId}>{title ? <title id={titleId}>{title}</title> : null}</svg>;
48+
}) => <svg role=\\"img\\" aria-labelledby={titleId}>{title ? <title id={titleId}>{title}</title> : null}</svg>;
4949
5050
export default SvgComponent;"
5151
`)
@@ -62,7 +62,7 @@ describe('preset', () => {
6262
const SvgComponent = ({
6363
title,
6464
titleId
65-
}) => <svg aria-labelledby={titleId}>{title === undefined ? <title id={titleId}>Hello</title> : title ? <title id={titleId}>{title}</title> : null}</svg>;
65+
}) => <svg role=\\"img\\" aria-labelledby={titleId}>{title === undefined ? <title id={titleId}>Hello</title> : title ? <title id={titleId}>{title}</title> : null}</svg>;
6666
6767
export default SvgComponent;"
6868
`)
@@ -77,7 +77,7 @@ describe('preset', () => {
7777
const SvgComponent = ({
7878
title,
7979
titleId
80-
}) => <svg aria-labelledby={titleId}>{title === undefined ? <title id={titleId}>{\\"Hello\\"}</title> : title ? <title id={titleId}>{title}</title> : null}</svg>;
80+
}) => <svg role=\\"img\\" aria-labelledby={titleId}>{title === undefined ? <title id={titleId}>{\\"Hello\\"}</title> : title ? <title id={titleId}>{title}</title> : null}</svg>;
8181
8282
export default SvgComponent;"
8383
`)
@@ -94,7 +94,7 @@ describe('preset', () => {
9494
const SvgComponent = ({
9595
desc,
9696
descId
97-
}) => <svg aria-describedby={descId}>{desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
97+
}) => <svg role=\\"img\\" aria-describedby={descId}>{desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
9898
9999
export default SvgComponent;"
100100
`)
@@ -111,7 +111,7 @@ describe('preset', () => {
111111
const SvgComponent = ({
112112
desc,
113113
descId
114-
}) => <svg aria-describedby={descId}>{desc === undefined ? <desc id={descId}>Hello</desc> : desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
114+
}) => <svg role=\\"img\\" aria-describedby={descId}>{desc === undefined ? <desc id={descId}>Hello</desc> : desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
115115
116116
export default SvgComponent;"
117117
`)
@@ -126,7 +126,7 @@ describe('preset', () => {
126126
const SvgComponent = ({
127127
desc,
128128
descId
129-
}) => <svg aria-describedby={descId}>{desc === undefined ? <desc id={descId}>{\\"Hello\\"}</desc> : desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
129+
}) => <svg role=\\"img\\" aria-describedby={descId}>{desc === undefined ? <desc id={descId}>{\\"Hello\\"}</desc> : desc ? <desc id={descId}>{desc}</desc> : null}</svg>;
130130
131131
export default SvgComponent;"
132132
`)
@@ -146,7 +146,7 @@ describe('preset', () => {
146146
titleId,
147147
desc,
148148
descId
149-
}) => <svg aria-labelledby={titleId} aria-describedby={descId}>{desc ? <desc id={descId}>{desc}</desc> : null}{title ? <title id={titleId}>{title}</title> : null}</svg>;
149+
}) => <svg role=\\"img\\" aria-labelledby={titleId} aria-describedby={descId}>{desc ? <desc id={descId}>{desc}</desc> : null}{title ? <title id={titleId}>{title}</title> : null}</svg>;
150150
151151
export default SvgComponent;"
152152
`)
@@ -163,7 +163,7 @@ describe('preset', () => {
163163
).toMatchInlineSnapshot(`
164164
"import * as React from \\"react\\";
165165
166-
const SvgComponent = () => <svg a=\\"black\\" b={props.white} />;
166+
const SvgComponent = () => <svg a=\\"black\\" b={props.white} role=\\"img\\" />;
167167
168168
export default SvgComponent;"
169169
`)
@@ -179,7 +179,7 @@ describe('preset', () => {
179179
).toMatchInlineSnapshot(`
180180
"import * as React from \\"react\\";
181181
182-
const SvgComponent = props => <svg a=\\"#000\\" b=\\"#fff\\" width=\\"1em\\" height=\\"1em\\" {...props} />;
182+
const SvgComponent = props => <svg a=\\"#000\\" b=\\"#fff\\" width=\\"1em\\" height=\\"1em\\" role=\\"img\\" {...props} />;
183183
184184
export default SvgComponent;"
185185
`)
@@ -195,7 +195,7 @@ describe('preset', () => {
195195
).toMatchInlineSnapshot(`
196196
"import * as React from \\"react\\";
197197
198-
const SvgComponent = props => <svg a=\\"#000\\" b=\\"#fff\\" width={24} height={24} {...props} />;
198+
const SvgComponent = props => <svg a=\\"#000\\" b=\\"#fff\\" width={24} height={24} role=\\"img\\" {...props} />;
199199
200200
export default SvgComponent;"
201201
`)
@@ -213,7 +213,7 @@ describe('preset', () => {
213213
"import * as React from \\"react\\";
214214
import Svg from \\"react-native-svg\\";
215215
216-
const SvgComponent = props => <Svg a=\\"#000\\" b=\\"#fff\\" width={24} height={24} {...props} />;
216+
const SvgComponent = props => <Svg a=\\"#000\\" b=\\"#fff\\" width={24} height={24} role=\\"img\\" {...props} />;
217217
218218
export default SvgComponent;"
219219
`)

‎packages/babel-preset/src/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,12 @@ function replaceMapToValues(replaceMap: { [key: string]: string }): Value[] {
4949

5050
const plugin = (_: ConfigAPI, opts: Options) => {
5151
let toRemoveAttributes = ['version']
52-
let toAddAttributes: Attribute[] = []
52+
let toAddAttributes: Attribute[] = [
53+
{
54+
name: 'role',
55+
value: 'img',
56+
},
57+
]
5358

5459
if (opts.svgProps) {
5560
toAddAttributes = [...toAddAttributes, ...propsToAttributes(opts.svgProps)]

1 commit comments

Comments
 (1)

vercel[bot] commented on Sep 28, 2022

@vercel[bot]

Successfully deployed to the following URLs:

svgr – ./

svgr-gregberge.vercel.app
api.react-svgr.com
svgr-git-main-gregberge.vercel.app

Please sign in to comment.