vectify 2.0.4 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-GY4VNET5.mjs → chunk-5RWOYQAG.mjs} +87 -47
- package/dist/cli.js +87 -47
- package/dist/cli.mjs +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +87 -47
- package/dist/index.mjs +1 -1
- package/dist/templates/angular/component.ts.hbs +11 -2
- package/dist/templates/angular/createIcon.ts.hbs +11 -2
- package/dist/templates/astro/component.astro.hbs +12 -2
- package/dist/templates/astro/createIcon.astro.hbs +12 -2
- package/dist/templates/lit/component.js.hbs +1 -0
- package/dist/templates/lit/component.ts.hbs +1 -0
- package/dist/templates/lit/createIcon.js.hbs +12 -2
- package/dist/templates/lit/createIcon.ts.hbs +12 -2
- package/dist/templates/preact/component.jsx.hbs +1 -1
- package/dist/templates/preact/component.tsx.hbs +1 -1
- package/dist/templates/preact/createIcon.jsx.hbs +12 -3
- package/dist/templates/preact/createIcon.tsx.hbs +13 -3
- package/dist/templates/qwik/component.jsx.hbs +1 -1
- package/dist/templates/qwik/component.tsx.hbs +1 -1
- package/dist/templates/qwik/createIcon.jsx.hbs +12 -3
- package/dist/templates/qwik/createIcon.tsx.hbs +13 -3
- package/dist/templates/react/component.jsx.hbs +1 -1
- package/dist/templates/react/component.tsx.hbs +1 -1
- package/dist/templates/react/createIcon.jsx.hbs +12 -3
- package/dist/templates/react/createIcon.tsx.hbs +13 -3
- package/dist/templates/solid/component.tsx.hbs +1 -1
- package/dist/templates/solid/createIcon.jsx.hbs +13 -3
- package/dist/templates/solid/createIcon.tsx.hbs +14 -3
- package/dist/templates/svelte/component.js.svelte.hbs +4 -1
- package/dist/templates/svelte/component.ts.svelte.hbs +4 -1
- package/dist/templates/svelte/icon.js.svelte.hbs +23 -2
- package/dist/templates/svelte/icon.ts.svelte.hbs +23 -2
- package/dist/templates/vanilla/component.ts.hbs +1 -1
- package/dist/templates/vanilla/createIcon.js.hbs +12 -3
- package/dist/templates/vanilla/createIcon.ts.hbs +13 -3
- package/dist/templates/vue/component.js.vue.hbs +5 -2
- package/dist/templates/vue/component.ts.vue.hbs +5 -2
- package/dist/templates/vue/icon.js.vue.hbs +26 -2
- package/dist/templates/vue/icon.ts.vue.hbs +26 -2
- package/dist/templates/vue2/component.js.vue.hbs +4 -2
- package/dist/templates/vue2/component.ts.vue.hbs +5 -2
- package/dist/templates/vue2/icon.js.vue.hbs +52 -25
- package/dist/templates/vue2/icon.ts.vue.hbs +53 -26
- package/package.json +1 -1
|
@@ -28,6 +28,7 @@ function parseSvg(svgContent) {
|
|
|
28
28
|
if (svgElement.length === 0) {
|
|
29
29
|
throw new Error("Invalid SVG: No <svg> tag found");
|
|
30
30
|
}
|
|
31
|
+
const viewBox = svgElement.attr("viewBox") || "0 0 24 24";
|
|
31
32
|
const iconNodes = [];
|
|
32
33
|
svgElement.children().each((_, element) => {
|
|
33
34
|
const node = parseElement($, element);
|
|
@@ -35,7 +36,29 @@ function parseSvg(svgContent) {
|
|
|
35
36
|
iconNodes.push(node);
|
|
36
37
|
}
|
|
37
38
|
});
|
|
38
|
-
|
|
39
|
+
const isMultiColor = detectMultiColor(iconNodes);
|
|
40
|
+
return { iconNodes, viewBox, isMultiColor };
|
|
41
|
+
}
|
|
42
|
+
function detectMultiColor(nodes) {
|
|
43
|
+
const colors = /* @__PURE__ */ new Set();
|
|
44
|
+
function collectColors(node) {
|
|
45
|
+
const [, attrs, children] = node;
|
|
46
|
+
if (attrs.fill && attrs.fill !== "none" && attrs.fill !== "transparent") {
|
|
47
|
+
colors.add(String(attrs.fill).toLowerCase());
|
|
48
|
+
}
|
|
49
|
+
if (attrs.stroke && attrs.stroke !== "none" && attrs.stroke !== "transparent") {
|
|
50
|
+
colors.add(String(attrs.stroke).toLowerCase());
|
|
51
|
+
}
|
|
52
|
+
if (children && children.length > 0) {
|
|
53
|
+
children.forEach(collectColors);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
nodes.forEach(collectColors);
|
|
57
|
+
const realColors = Array.from(colors).filter((color) => {
|
|
58
|
+
const c = color.toLowerCase();
|
|
59
|
+
return c !== "currentcolor";
|
|
60
|
+
});
|
|
61
|
+
return realColors.length >= 2;
|
|
39
62
|
}
|
|
40
63
|
function parseElement($, element) {
|
|
41
64
|
if (element.type !== "tag") {
|
|
@@ -164,14 +187,15 @@ function getQwikTemplatePath(typescript, type) {
|
|
|
164
187
|
function getAngularTemplatePath(type) {
|
|
165
188
|
return `angular/${type}.ts.hbs`;
|
|
166
189
|
}
|
|
167
|
-
function generateAngularComponent(componentName, iconNode, typescript, keepColors = false) {
|
|
190
|
+
function generateAngularComponent(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
168
191
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
169
192
|
const templatePath = getAngularTemplatePath("component");
|
|
170
193
|
return renderTemplate(templatePath, {
|
|
171
194
|
componentName,
|
|
172
195
|
formattedNodes,
|
|
173
196
|
typescript,
|
|
174
|
-
keepColors
|
|
197
|
+
keepColors,
|
|
198
|
+
viewBox
|
|
175
199
|
});
|
|
176
200
|
}
|
|
177
201
|
function generateAngularBaseComponent(typescript) {
|
|
@@ -186,14 +210,15 @@ function generateAngularBaseComponent(typescript) {
|
|
|
186
210
|
function getAstroTemplatePath(type) {
|
|
187
211
|
return `astro/${type}.astro.hbs`;
|
|
188
212
|
}
|
|
189
|
-
function generateAstroComponent(componentName, iconNode, typescript, keepColors = false) {
|
|
213
|
+
function generateAstroComponent(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
190
214
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
191
215
|
const templatePath = getAstroTemplatePath("component");
|
|
192
216
|
return renderTemplate(templatePath, {
|
|
193
217
|
componentName,
|
|
194
218
|
formattedNodes,
|
|
195
219
|
typescript,
|
|
196
|
-
keepColors
|
|
220
|
+
keepColors,
|
|
221
|
+
viewBox
|
|
197
222
|
});
|
|
198
223
|
}
|
|
199
224
|
function generateAstroBaseComponent(typescript) {
|
|
@@ -209,14 +234,15 @@ function getLitTemplatePath(typescript, type) {
|
|
|
209
234
|
const ext = typescript ? "ts" : "js";
|
|
210
235
|
return `lit/${type}.${ext}.hbs`;
|
|
211
236
|
}
|
|
212
|
-
function generateLitComponent(componentName, iconNode, typescript, keepColors = false) {
|
|
237
|
+
function generateLitComponent(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
213
238
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
214
239
|
const templatePath = getLitTemplatePath(typescript, "component");
|
|
215
240
|
return renderTemplate(templatePath, {
|
|
216
241
|
componentName,
|
|
217
242
|
formattedNodes,
|
|
218
243
|
typescript,
|
|
219
|
-
keepColors
|
|
244
|
+
keepColors,
|
|
245
|
+
viewBox
|
|
220
246
|
});
|
|
221
247
|
}
|
|
222
248
|
function generateLitBaseComponent(typescript) {
|
|
@@ -228,14 +254,15 @@ function generateLitBaseComponent(typescript) {
|
|
|
228
254
|
}
|
|
229
255
|
|
|
230
256
|
// src/generators/react.ts
|
|
231
|
-
function generateReactComponent(componentName, iconNode, typescript, keepColors = false) {
|
|
257
|
+
function generateReactComponent(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
232
258
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
233
259
|
const templatePath = getReactTemplatePath(typescript, "component");
|
|
234
260
|
return renderTemplate(templatePath, {
|
|
235
261
|
typescript,
|
|
236
262
|
componentName,
|
|
237
263
|
formattedNodes,
|
|
238
|
-
keepColors
|
|
264
|
+
keepColors,
|
|
265
|
+
viewBox
|
|
239
266
|
});
|
|
240
267
|
}
|
|
241
268
|
function generateCreateIcon(typescript) {
|
|
@@ -244,7 +271,7 @@ function generateCreateIcon(typescript) {
|
|
|
244
271
|
}
|
|
245
272
|
|
|
246
273
|
// src/generators/react-like.ts
|
|
247
|
-
function generateReactLikeComponent(componentName, iconNode, typescript, keepColors, framework) {
|
|
274
|
+
function generateReactLikeComponent(componentName, iconNode, typescript, keepColors, viewBox, framework) {
|
|
248
275
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
249
276
|
let templatePath;
|
|
250
277
|
if (framework === "solid") {
|
|
@@ -260,7 +287,8 @@ function generateReactLikeComponent(componentName, iconNode, typescript, keepCol
|
|
|
260
287
|
componentName,
|
|
261
288
|
formattedNodes,
|
|
262
289
|
typescript,
|
|
263
|
-
keepColors
|
|
290
|
+
keepColors,
|
|
291
|
+
viewBox
|
|
264
292
|
});
|
|
265
293
|
}
|
|
266
294
|
function generateReactLikeBaseComponent(typescript, framework) {
|
|
@@ -281,12 +309,14 @@ function generateReactLikeBaseComponent(typescript, framework) {
|
|
|
281
309
|
}
|
|
282
310
|
|
|
283
311
|
// src/generators/svelte.ts
|
|
284
|
-
function generateSvelteComponent(_componentName, iconNode, typescript) {
|
|
312
|
+
function generateSvelteComponent(_componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
285
313
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 4)).join(",\n");
|
|
286
314
|
const templatePath = getSvelteTemplatePath(typescript, "component");
|
|
287
315
|
return renderTemplate(templatePath, {
|
|
288
316
|
typescript,
|
|
289
|
-
formattedNodes
|
|
317
|
+
formattedNodes,
|
|
318
|
+
keepColors,
|
|
319
|
+
viewBox
|
|
290
320
|
});
|
|
291
321
|
}
|
|
292
322
|
function generateSvelteIcon(typescript) {
|
|
@@ -295,14 +325,15 @@ function generateSvelteIcon(typescript) {
|
|
|
295
325
|
}
|
|
296
326
|
|
|
297
327
|
// src/generators/vanilla.ts
|
|
298
|
-
function generateVanillaComponent(componentName, iconNode, typescript, keepColors) {
|
|
328
|
+
function generateVanillaComponent(componentName, iconNode, typescript, keepColors, viewBox) {
|
|
299
329
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 2)).join(",\n");
|
|
300
330
|
const templatePath = getVanillaTemplatePath(typescript, "component");
|
|
301
331
|
return renderTemplate(templatePath, {
|
|
302
332
|
componentName,
|
|
303
333
|
formattedNodes,
|
|
304
334
|
typescript,
|
|
305
|
-
keepColors
|
|
335
|
+
keepColors,
|
|
336
|
+
viewBox
|
|
306
337
|
});
|
|
307
338
|
}
|
|
308
339
|
function generateVanillaBaseComponent(typescript) {
|
|
@@ -314,13 +345,15 @@ function generateVanillaBaseComponent(typescript) {
|
|
|
314
345
|
}
|
|
315
346
|
|
|
316
347
|
// src/generators/vue.ts
|
|
317
|
-
function generateVueComponent(componentName, iconNode, typescript) {
|
|
348
|
+
function generateVueComponent(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
318
349
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 4)).join(",\n");
|
|
319
350
|
const templatePath = getVueTemplatePath(typescript, "component");
|
|
320
351
|
return renderTemplate(templatePath, {
|
|
321
352
|
typescript,
|
|
322
353
|
componentName,
|
|
323
|
-
formattedNodes
|
|
354
|
+
formattedNodes,
|
|
355
|
+
keepColors,
|
|
356
|
+
viewBox
|
|
324
357
|
});
|
|
325
358
|
}
|
|
326
359
|
function generateVueIcon(typescript) {
|
|
@@ -329,13 +362,15 @@ function generateVueIcon(typescript) {
|
|
|
329
362
|
}
|
|
330
363
|
|
|
331
364
|
// src/generators/vue2.ts
|
|
332
|
-
function generateVue2Component(componentName, iconNode, typescript) {
|
|
365
|
+
function generateVue2Component(componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") {
|
|
333
366
|
const formattedNodes = iconNode.map((node) => formatIconNode(node, 4)).join(",\n");
|
|
334
367
|
const templatePath = getVue2TemplatePath(typescript, "component");
|
|
335
368
|
return renderTemplate(templatePath, {
|
|
336
369
|
typescript,
|
|
337
370
|
componentName,
|
|
338
|
-
formattedNodes
|
|
371
|
+
formattedNodes,
|
|
372
|
+
keepColors,
|
|
373
|
+
viewBox
|
|
339
374
|
});
|
|
340
375
|
}
|
|
341
376
|
function generateVue2Icon(typescript) {
|
|
@@ -353,8 +388,8 @@ var ReactStrategy = class {
|
|
|
353
388
|
this.getIndexExtension = (typescript) => {
|
|
354
389
|
return typescript ? "ts" : "js";
|
|
355
390
|
};
|
|
356
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors = false) => {
|
|
357
|
-
return generateReactComponent(componentName, iconNode, typescript, keepColors);
|
|
391
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") => {
|
|
392
|
+
return generateReactComponent(componentName, iconNode, typescript, keepColors, viewBox);
|
|
358
393
|
};
|
|
359
394
|
this.generateBaseComponent = (typescript) => {
|
|
360
395
|
return {
|
|
@@ -373,8 +408,8 @@ var VueStrategy = class {
|
|
|
373
408
|
this.getIndexExtension = (typescript) => {
|
|
374
409
|
return typescript ? "ts" : "js";
|
|
375
410
|
};
|
|
376
|
-
this.generateComponent = (componentName, iconNode, typescript) => {
|
|
377
|
-
return generateVueComponent(componentName, iconNode, typescript);
|
|
411
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") => {
|
|
412
|
+
return generateVueComponent(componentName, iconNode, typescript, keepColors, viewBox);
|
|
378
413
|
};
|
|
379
414
|
this.generateBaseComponent = (typescript) => {
|
|
380
415
|
return {
|
|
@@ -393,8 +428,8 @@ var Vue2Strategy = class {
|
|
|
393
428
|
this.getIndexExtension = (typescript) => {
|
|
394
429
|
return typescript ? "ts" : "js";
|
|
395
430
|
};
|
|
396
|
-
this.generateComponent = (componentName, iconNode, typescript) => {
|
|
397
|
-
return generateVue2Component(componentName, iconNode, typescript);
|
|
431
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") => {
|
|
432
|
+
return generateVue2Component(componentName, iconNode, typescript, keepColors, viewBox);
|
|
398
433
|
};
|
|
399
434
|
this.generateBaseComponent = (typescript) => {
|
|
400
435
|
return {
|
|
@@ -413,8 +448,8 @@ var SvelteStrategy = class {
|
|
|
413
448
|
this.getIndexExtension = (typescript) => {
|
|
414
449
|
return typescript ? "ts" : "js";
|
|
415
450
|
};
|
|
416
|
-
this.generateComponent = (componentName, iconNode, typescript) => {
|
|
417
|
-
return generateSvelteComponent(componentName, iconNode, typescript);
|
|
451
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors = false, viewBox = "0 0 24 24") => {
|
|
452
|
+
return generateSvelteComponent(componentName, iconNode, typescript, keepColors, viewBox);
|
|
418
453
|
};
|
|
419
454
|
this.generateBaseComponent = (typescript) => {
|
|
420
455
|
return {
|
|
@@ -433,8 +468,8 @@ var SolidStrategy = class {
|
|
|
433
468
|
this.getIndexExtension = (typescript) => {
|
|
434
469
|
return typescript ? "ts" : "js";
|
|
435
470
|
};
|
|
436
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
437
|
-
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, "solid");
|
|
471
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
472
|
+
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24", "solid");
|
|
438
473
|
};
|
|
439
474
|
this.generateBaseComponent = (typescript) => {
|
|
440
475
|
return generateReactLikeBaseComponent(typescript, "solid");
|
|
@@ -450,8 +485,8 @@ var PreactStrategy = class {
|
|
|
450
485
|
this.getIndexExtension = (typescript) => {
|
|
451
486
|
return typescript ? "ts" : "js";
|
|
452
487
|
};
|
|
453
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
454
|
-
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, "preact");
|
|
488
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
489
|
+
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24", "preact");
|
|
455
490
|
};
|
|
456
491
|
this.generateBaseComponent = (typescript) => {
|
|
457
492
|
return generateReactLikeBaseComponent(typescript, "preact");
|
|
@@ -467,8 +502,8 @@ var VanillaStrategy = class {
|
|
|
467
502
|
this.getIndexExtension = (typescript) => {
|
|
468
503
|
return typescript ? "ts" : "js";
|
|
469
504
|
};
|
|
470
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
471
|
-
return generateVanillaComponent(componentName, iconNode, typescript, keepColors ?? false);
|
|
505
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
506
|
+
return generateVanillaComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24");
|
|
472
507
|
};
|
|
473
508
|
this.generateBaseComponent = (typescript) => {
|
|
474
509
|
return generateVanillaBaseComponent(typescript);
|
|
@@ -484,8 +519,8 @@ var LitStrategy = class {
|
|
|
484
519
|
this.getIndexExtension = (typescript) => {
|
|
485
520
|
return typescript ? "ts" : "js";
|
|
486
521
|
};
|
|
487
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
488
|
-
return generateLitComponent(componentName, iconNode, typescript, keepColors ?? false);
|
|
522
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
523
|
+
return generateLitComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24");
|
|
489
524
|
};
|
|
490
525
|
this.generateBaseComponent = (typescript) => {
|
|
491
526
|
return generateLitBaseComponent(typescript);
|
|
@@ -501,8 +536,8 @@ var QwikStrategy = class {
|
|
|
501
536
|
this.getIndexExtension = (typescript) => {
|
|
502
537
|
return typescript ? "ts" : "js";
|
|
503
538
|
};
|
|
504
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
505
|
-
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, "qwik");
|
|
539
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
540
|
+
return generateReactLikeComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24", "qwik");
|
|
506
541
|
};
|
|
507
542
|
this.generateBaseComponent = (typescript) => {
|
|
508
543
|
return generateReactLikeBaseComponent(typescript, "qwik");
|
|
@@ -518,8 +553,8 @@ var AstroStrategy = class {
|
|
|
518
553
|
this.getIndexExtension = (typescript) => {
|
|
519
554
|
return typescript ? "ts" : "js";
|
|
520
555
|
};
|
|
521
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
522
|
-
return generateAstroComponent(componentName, iconNode, typescript, keepColors ?? false);
|
|
556
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
557
|
+
return generateAstroComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24");
|
|
523
558
|
};
|
|
524
559
|
this.generateBaseComponent = (typescript) => {
|
|
525
560
|
return generateAstroBaseComponent(typescript);
|
|
@@ -535,8 +570,8 @@ var AngularStrategy = class {
|
|
|
535
570
|
this.getIndexExtension = (_typescript) => {
|
|
536
571
|
return "ts";
|
|
537
572
|
};
|
|
538
|
-
this.generateComponent = (componentName, iconNode, typescript, keepColors) => {
|
|
539
|
-
return generateAngularComponent(componentName, iconNode, typescript, keepColors ?? false);
|
|
573
|
+
this.generateComponent = (componentName, iconNode, typescript, keepColors, viewBox) => {
|
|
574
|
+
return generateAngularComponent(componentName, iconNode, typescript, keepColors ?? false, viewBox ?? "0 0 24 24");
|
|
540
575
|
};
|
|
541
576
|
this.generateBaseComponent = (typescript) => {
|
|
542
577
|
return generateAngularBaseComponent(typescript);
|
|
@@ -601,7 +636,6 @@ var DEFAULT_CONFIG = {
|
|
|
601
636
|
output: "./src/icons",
|
|
602
637
|
typescript: true,
|
|
603
638
|
optimize: true,
|
|
604
|
-
keepColors: false,
|
|
605
639
|
prefix: "",
|
|
606
640
|
suffix: "",
|
|
607
641
|
configDir: ".",
|
|
@@ -870,8 +904,9 @@ async function generateIconComponent(svgFile, config, dryRun = false) {
|
|
|
870
904
|
if (config.hooks?.beforeParse) {
|
|
871
905
|
svgContent = await config.hooks.beforeParse(svgContent, fileName);
|
|
872
906
|
}
|
|
907
|
+
const { isMultiColor: isMultiColorBeforeOptimization } = parseSvg(svgContent);
|
|
873
908
|
svgContent = await optimizeSvg(svgContent, config);
|
|
874
|
-
const
|
|
909
|
+
const { iconNodes, viewBox } = parseSvg(svgContent);
|
|
875
910
|
const componentName = getComponentName(
|
|
876
911
|
fileName,
|
|
877
912
|
config.prefix,
|
|
@@ -880,11 +915,13 @@ async function generateIconComponent(svgFile, config, dryRun = false) {
|
|
|
880
915
|
);
|
|
881
916
|
const strategy = getFrameworkStrategy(config.framework);
|
|
882
917
|
const typescript = config.typescript ?? true;
|
|
918
|
+
const keepColors = config.keepColors !== void 0 ? config.keepColors : isMultiColorBeforeOptimization;
|
|
883
919
|
let code = strategy.generateComponent(
|
|
884
920
|
componentName,
|
|
885
|
-
|
|
921
|
+
iconNodes,
|
|
886
922
|
typescript,
|
|
887
|
-
|
|
923
|
+
keepColors,
|
|
924
|
+
viewBox
|
|
888
925
|
);
|
|
889
926
|
if (config.hooks?.afterGenerate) {
|
|
890
927
|
code = await config.hooks.afterGenerate(code, componentName);
|
|
@@ -912,7 +949,9 @@ async function generateIndexFile(svgFiles, config, dryRun = false) {
|
|
|
912
949
|
const typescript = config.typescript ?? true;
|
|
913
950
|
const strategy = getFrameworkStrategy(config.framework);
|
|
914
951
|
const ext = strategy.getIndexExtension(typescript);
|
|
952
|
+
const componentExt = strategy.getComponentExtension(typescript);
|
|
915
953
|
const usesDefaultExport = ["vue", "vue2", "svelte", "react", "preact"].includes(config.framework);
|
|
954
|
+
const needsExtension = ["vue", "vue2", "svelte"].includes(config.framework);
|
|
916
955
|
const exports = svgFiles.map((svgFile) => {
|
|
917
956
|
const fileName = path4.basename(svgFile);
|
|
918
957
|
const componentName = getComponentName(
|
|
@@ -921,10 +960,11 @@ async function generateIndexFile(svgFiles, config, dryRun = false) {
|
|
|
921
960
|
config.suffix,
|
|
922
961
|
config.transform
|
|
923
962
|
);
|
|
963
|
+
const importPath = needsExtension ? `./${componentName}.${componentExt}` : `./${componentName}`;
|
|
924
964
|
if (usesDefaultExport) {
|
|
925
|
-
return `export { default as ${componentName} } from '
|
|
965
|
+
return `export { default as ${componentName} } from '${importPath}'`;
|
|
926
966
|
} else {
|
|
927
|
-
return `export { ${componentName} } from '
|
|
967
|
+
return `export { ${componentName} } from '${importPath}'`;
|
|
928
968
|
}
|
|
929
969
|
}).join("\n");
|
|
930
970
|
const indexPath = path4.join(config.output, `index.${ext}`);
|