@@ -46,7 +46,6 @@ export const generateComponent = (data: XmlData) => {
4646 : iconId ;
4747 const componentName = upperFirst ( camelCase ( iconId ) ) ;
4848
49-
5049 names . push ( iconIdAfterTrim ) ;
5150
5251 for ( const domName of Object . keys ( item ) ) {
@@ -71,7 +70,7 @@ export const generateComponent = (data: XmlData) => {
7170 }
7271
7372 imports . push ( componentName ) ;
74- cases += `${ whitespace ( 6 ) } return <${ componentName } size={size} />;\n` ;
73+ cases += `${ whitespace ( 6 ) } return <${ componentName } size={size} color={color} />;\n` ;
7574
7675 singleFile = getTemplate ( 'SingleIcon' + extension ) ;
7776 singleFile = replaceSize ( singleFile , config . default_font_size ) ;
@@ -87,6 +86,13 @@ export const generateComponent = (data: XmlData) => {
8786
8887 fs . writeFileSync ( path . join ( saveDir , componentName + extension ) , singleFile ) ;
8988
89+ if ( ! config . use_typescript ) {
90+ let typeDefinitionFile = getTemplate ( 'SingleIcon.d.ts' ) ;
91+
92+ typeDefinitionFile = replaceComponentName ( typeDefinitionFile , componentName ) ;
93+ fs . writeFileSync ( path . join ( saveDir , componentName + '.d.ts' ) , typeDefinitionFile ) ;
94+ }
95+
9096 console . log ( `${ colors . green ( '√' ) } Generated icon "${ colors . yellow ( iconId ) } "` ) ;
9197 } ) ;
9298
@@ -101,6 +107,11 @@ export const generateComponent = (data: XmlData) => {
101107 iconFile = replaceNames ( iconFile , names ) ;
102108 } else {
103109 iconFile = replaceNamesArray ( iconFile , names ) ;
110+
111+ let typeDefinitionFile = getTemplate ( 'Icon.d.ts' ) ;
112+
113+ typeDefinitionFile = replaceNames ( typeDefinitionFile , names ) ;
114+ fs . writeFileSync ( path . join ( saveDir , 'Icon.d.ts' ) , typeDefinitionFile ) ;
104115 }
105116
106117 if ( config . generate_mode === GENERATE_MODE . allInOne ) {
@@ -120,15 +131,24 @@ const generateCase = (data: XmlData['svg']['symbol'][number], baseIdent: number)
120131 for ( const domName of Object . keys ( data ) ) {
121132 let realDomName = DOM_MAP [ domName ] ;
122133
123- if ( ! realDomName ) {
134+ if ( domName === '$' ) {
124135 continue ;
125136 }
126137
138+ if ( ! realDomName ) {
139+ console . error ( colors . red ( `Unable to transform dom "${ domName } "` ) ) ;
140+ process . exit ( 1 ) ;
141+ }
142+
143+ const counter = {
144+ colorIndex : 0 ,
145+ } ;
146+
127147 if ( data [ domName ] . $ ) {
128- template += `${ whitespace ( baseIdent + 2 ) } <${ realDomName } ${ addAttribute ( data [ domName ] ) } />\n` ;
148+ template += `${ whitespace ( baseIdent + 2 ) } <${ realDomName } ${ addAttribute ( data [ domName ] , counter ) } />\n` ;
129149 } else if ( Array . isArray ( data [ domName ] ) ) {
130150 data [ domName ] . forEach ( ( sub ) => {
131- template += `${ whitespace ( baseIdent + 2 ) } <${ realDomName } ${ addAttribute ( sub ) } />\n` ;
151+ template += `${ whitespace ( baseIdent + 2 ) } <${ realDomName } ${ addAttribute ( sub , counter ) } />\n` ;
132152 } ) ;
133153 }
134154 }
@@ -138,12 +158,17 @@ const generateCase = (data: XmlData['svg']['symbol'][number], baseIdent: number)
138158 return template ;
139159} ;
140160
141- const addAttribute = ( sub : XmlData [ 'svg' ] [ 'symbol' ] [ number ] [ 'path' ] [ number ] ) => {
161+ const addAttribute = ( sub : XmlData [ 'svg' ] [ 'symbol' ] [ number ] [ 'path' ] [ number ] , counter : { colorIndex : number } ) => {
142162 let template = '' ;
143163
144164 if ( sub && sub . $ ) {
145165 for ( const attributeName of Object . keys ( sub . $ ) ) {
146- template += ` ${ attributeName } ="${ sub . $ [ attributeName ] } "` ;
166+ if ( attributeName === 'fill' ) {
167+ template += ` ${ attributeName } ={color ? typeof color === 'string' && color || color[${ counter . colorIndex } ] || '${ sub . $ [ attributeName ] } ' : '${ sub . $ [ attributeName ] } '}` ;
168+ counter . colorIndex += 1 ;
169+ } else {
170+ template += ` ${ attributeName } ="${ sub . $ [ attributeName ] } "` ;
171+ }
147172 }
148173 }
149174
0 commit comments