@@ -18,6 +18,7 @@ interface Props {
1818 src : string
1919 svgClassName ?: string
2020 svgStyle ?: React . CSSProperties
21+ wrapper ?: 'div' | 'span'
2122}
2223
2324interface State {
@@ -28,8 +29,8 @@ interface State {
2829export default class ReactSVG extends React . Component <
2930 Props &
3031 React . DetailedHTMLProps <
31- React . HTMLAttributes < HTMLDivElement > ,
32- HTMLDivElement
32+ React . HTMLAttributes < HTMLSpanElement | HTMLDivElement > ,
33+ HTMLSpanElement | HTMLDivElement
3334 > ,
3435 State
3536> {
@@ -40,7 +41,8 @@ export default class ReactSVG extends React.Component<
4041 onInjected : ( ) => undefined ,
4142 renumerateIRIElements : true ,
4243 svgClassName : null ,
43- svgStyle : { }
44+ svgStyle : { } ,
45+ wrapper : 'div'
4446 }
4547
4648 static propTypes = {
@@ -59,7 +61,8 @@ export default class ReactSVG extends React.Component<
5961 renumerateIRIElements : PropTypes . bool ,
6062 src : PropTypes . string . isRequired ,
6163 svgClassName : PropTypes . string ,
62- svgStyle : PropTypes . object
64+ svgStyle : PropTypes . object ,
65+ wrapper : PropTypes . oneOf ( [ 'div' , 'span' ] )
6366 }
6467
6568 initialState = {
@@ -69,35 +72,36 @@ export default class ReactSVG extends React.Component<
6972
7073 state = this . initialState
7174
72- container : HTMLDivElement | null | undefined
75+ container ?: HTMLSpanElement | HTMLDivElement | null
7376
74- svgWrapper : HTMLDivElement | null | undefined
77+ svgWrapper ?: HTMLSpanElement | HTMLDivElement | null
7578
76- refCallback : React . Ref < HTMLDivElement > = container => {
79+ refCallback : React . Ref < HTMLSpanElement | HTMLDivElement > = container => {
7780 this . container = container
7881 }
7982
8083 renderSVG ( ) {
8184 if ( this . container instanceof Node ) {
8285 const {
8386 evalScripts,
84- onInjected,
8587 renumerateIRIElements,
8688 src,
8789 svgClassName,
8890 svgStyle
8991 } = this . props
90-
91- const div = document . createElement ( 'div' )
92- div . innerHTML = ReactDOMServer . renderToStaticMarkup (
93- < div >
94- < div className = { svgClassName } data-src = { src } style = { svgStyle } />
95- </ div >
92+ const onInjected = this . props . onInjected !
93+ const Wrapper = this . props . wrapper !
94+
95+ const wrapper = document . createElement ( Wrapper )
96+ wrapper . innerHTML = ReactDOMServer . renderToStaticMarkup (
97+ < Wrapper >
98+ < Wrapper className = { svgClassName } data-src = { src } style = { svgStyle } />
99+ </ Wrapper >
96100 )
97101
98- this . svgWrapper = this . container . appendChild (
99- div . firstChild as HTMLDivElement
100- )
102+ this . svgWrapper = this . container . appendChild ( wrapper . firstChild as
103+ | HTMLSpanElement
104+ | HTMLDivElement )
101105
102106 const each : OnInjected = ( error , svg ) => {
103107 if ( error ) {
@@ -110,7 +114,7 @@ export default class ReactSVG extends React.Component<
110114 isLoading : false
111115 } ) ,
112116 ( ) => {
113- onInjected ! ( error , svg )
117+ onInjected ( error , svg )
114118 }
115119 )
116120 }
@@ -160,14 +164,16 @@ export default class ReactSVG extends React.Component<
160164 src,
161165 svgClassName,
162166 svgStyle,
167+ wrapper,
163168 ...rest
164169 } = this . props
170+ const Wrapper = wrapper !
165171
166172 return (
167- < div { ...rest } ref = { this . refCallback } >
173+ < Wrapper { ...rest } ref = { this . refCallback } >
168174 { this . state . isLoading && Loading && < Loading /> }
169175 { this . state . hasError && Fallback && < Fallback /> }
170- </ div >
176+ </ Wrapper >
171177 )
172178 }
173179}
0 commit comments