@robosophy/ui-vue 1.1.12 → 1.2.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/vite.js CHANGED
@@ -21,9 +21,21 @@ const CACHE_BASE = join("node_modules", ".cache", "robosophy-svgs");
21
21
  const BASE_OPSZ = 24;
22
22
  const DEFAULT_WEIGHT = 400;
23
23
  const GRADE_VARIANTS = [0, -25, 200];
24
+ function variantKey(grade, fill, weight) {
25
+ return `${clampGrade(grade)}:${fill ? 1 : 0}:${weight}`;
26
+ }
27
+ function parseVariantKey(key) {
28
+ const [grade, fill, weight] = key.split(":").map(Number);
29
+ return { grade, fill: fill === 1, weight };
30
+ }
31
+ function clampGrade(grade) {
32
+ return GRADE_VARIANTS.reduce(
33
+ (nearest, g) => Math.abs(g - grade) < Math.abs(nearest - grade) ? g : nearest
34
+ );
35
+ }
24
36
  function robosophyMaterialSymbols(options = {}) {
25
37
  const raw = (options.outputDir ?? "").trim().replace(/^\/+/, "");
26
- const outputDir = raw.split("/").filter((part) => part && part !== "..").join("/") || "assets";
38
+ raw.split("/").filter((part) => part && part !== "..").join("/") || "assets";
27
39
  let config;
28
40
  let cacheDir;
29
41
  let cachedAssets = null;
@@ -32,9 +44,9 @@ function robosophyMaterialSymbols(options = {}) {
32
44
  function usageMapKey(usages) {
33
45
  const parts = [];
34
46
  for (const family of families) {
35
- const iconWeights = usages.get(family);
36
- if (!iconWeights || iconWeights.size === 0) continue;
37
- const entries = [...iconWeights.entries()].map(([name, weights]) => `${name}[${[...weights].sort().join(",")}]`).sort();
47
+ const iconVariants = usages.get(family);
48
+ if (!iconVariants || iconVariants.size === 0) continue;
49
+ const entries = [...iconVariants.entries()].map(([name, variants]) => `${name}[${[...variants].sort().join(";")}]`).sort();
38
50
  parts.push(`${family}:${entries.join(",")}`);
39
51
  }
40
52
  return parts.join("|") || "(empty)";
@@ -111,37 +123,23 @@ function robosophyMaterialSymbols(options = {}) {
111
123
  }
112
124
  });
113
125
  },
114
- async generateBundle(_outputOptions) {
115
- const assets = await getAssets();
116
- if (assets.fullSprite) {
117
- this.emitFile({
118
- fileName: `${outputDir}/rs-material-symbols.svg`,
119
- name: "rs-material-symbols.svg",
120
- source: assets.fullSprite,
121
- type: "asset"
122
- });
123
- }
126
+ async generateBundle() {
124
127
  }
125
128
  };
126
129
  }
127
- function buildSvgVariants(weight = DEFAULT_WEIGHT) {
128
- const variants = [];
129
- for (const grade of GRADE_VARIANTS) {
130
- const gradeSuffix = grade === 0 ? "" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;
131
- const symbolGradeSuffix = grade === 0 ? "" : `-${gradeSuffix}`;
132
- for (const fill of [false, true]) {
133
- const fillSuffix = fill ? "fill1" : "";
134
- const symbolFillSuffix = fill ? "-fill" : "";
135
- const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : "";
136
- const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : "";
137
- const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);
138
- variants.push({
139
- suffix: parts.length > 0 ? `${parts.join("")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,
140
- symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`
141
- });
142
- }
143
- }
144
- return variants;
130
+ function buildSvgVariant(grade, fill, weight = DEFAULT_WEIGHT) {
131
+ const clampedGrade = clampGrade(grade);
132
+ const gradeSuffix = clampedGrade === 0 ? "" : clampedGrade > 0 ? `grad${clampedGrade}` : `gradN${Math.abs(clampedGrade)}`;
133
+ const symbolGradeSuffix = clampedGrade === 0 ? "" : `-${gradeSuffix}`;
134
+ const fillSuffix = fill ? "fill1" : "";
135
+ const symbolFillSuffix = fill ? "-fill" : "";
136
+ const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : "";
137
+ const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : "";
138
+ const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);
139
+ return {
140
+ suffix: parts.length > 0 ? `${parts.join("")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,
141
+ symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`
142
+ };
145
143
  }
146
144
  function buildSvgUrl(name, family, suffix) {
147
145
  const style = family === "outlined" ? "materialsymbolsoutlined" : family === "rounded" ? "materialsymbolsrounded" : "materialsymbolssharp";
@@ -193,42 +191,48 @@ function parseSvgPaths(svgContent) {
193
191
  async function generateSpriteAssets(usages, cacheDir, config) {
194
192
  const symbols = [];
195
193
  const iconClasses = [];
194
+ const skipped = /* @__PURE__ */ new Map();
196
195
  let totalFetched = 0;
197
196
  let totalBytes = 0;
198
197
  for (const family of families) {
199
- const iconWeights = usages.get(family);
200
- if (!iconWeights || iconWeights.size === 0) continue;
201
- for (const [name, weights] of [...iconWeights.entries()].sort()) {
202
- for (const weight of [...weights].sort()) {
203
- const variants = buildSvgVariants(weight);
204
- for (const variant of variants) {
205
- const symbolId = buildSymbolId(name, family, variant.symbolSuffix);
206
- const url = buildSvgUrl(name, family, variant.suffix);
207
- const cacheKey = createHash("sha256").update(url).digest("hex").slice(0, 12);
208
- let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;
198
+ const iconVariants = usages.get(family);
199
+ if (!iconVariants || iconVariants.size === 0) continue;
200
+ for (const [name, variants] of [...iconVariants.entries()].sort()) {
201
+ for (const key of [...variants].sort()) {
202
+ const { grade, fill, weight } = parseVariantKey(key);
203
+ const variant = buildSvgVariant(grade, fill, weight);
204
+ const symbolId = buildSymbolId(name, family, variant.symbolSuffix);
205
+ const url = buildSvgUrl(name, family, variant.suffix);
206
+ const cacheKey = createHash("sha256").update(url).digest("hex").slice(0, 12);
207
+ let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;
208
+ if (!svgContent) {
209
+ svgContent = await fetchSvg(url);
209
210
  if (!svgContent) {
210
- svgContent = await fetchSvg(url);
211
- if (!svgContent) continue;
212
- if (cacheDir) {
213
- await saveSvgToCache(cacheDir, cacheKey, svgContent);
214
- }
211
+ skipped.set(`${family}/${name}`, "fetch falló");
212
+ continue;
215
213
  }
216
- const pathContent = parseSvgPaths(svgContent);
217
- if (!pathContent) continue;
218
- symbols.push(
219
- `<symbol id="${symbolId}" viewBox="0 -960 960 960" fill="currentColor">${pathContent}</symbol>`
220
- );
221
- totalFetched++;
222
- totalBytes += svgContent.length;
214
+ if (cacheDir) {
215
+ await saveSvgToCache(cacheDir, cacheKey, svgContent);
216
+ }
217
+ }
218
+ const pathContent = parseSvgPaths(svgContent);
219
+ if (!pathContent) {
220
+ skipped.set(`${family}/${name}`, "sin viewBox / formato viejo");
221
+ continue;
223
222
  }
223
+ symbols.push(
224
+ `<symbol id="${symbolId}" viewBox="0 -960 960 960" fill="currentColor">${pathContent}</symbol>`
225
+ );
226
+ totalFetched++;
227
+ totalBytes += svgContent.length;
224
228
  }
225
229
  }
226
230
  }
227
231
  const iconNames = /* @__PURE__ */ new Set();
228
232
  for (const family of families) {
229
- const iconWeights = usages.get(family);
230
- if (iconWeights) {
231
- for (const name of iconWeights.keys()) {
233
+ const iconVariants = usages.get(family);
234
+ if (iconVariants) {
235
+ for (const name of iconVariants.keys()) {
232
236
  iconNames.add(name);
233
237
  }
234
238
  }
@@ -240,6 +244,13 @@ async function generateSpriteAssets(usages, cacheDir, config) {
240
244
  const fullSprite = `<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">${spriteContent}</svg>`;
241
245
  const css = iconClasses.join("\n");
242
246
  const totalIcons = [...usages.values()].reduce((sum, m) => sum + m.size, 0);
247
+ if (skipped.size > 0) {
248
+ const lines = [...skipped.entries()].map(([key, reason]) => `${key} (${reason})`);
249
+ config.logger.warn(
250
+ `[robosophy-material-symbols] ${skipped.size} íconos omitidos, van a renderizar vacíos:
251
+ ${lines.join("\n ")}`
252
+ );
253
+ }
243
254
  if (totalIcons > 0) {
244
255
  const summary = formatDetectedMaterialSymbols(usages);
245
256
  config.logger.info(
@@ -275,13 +286,7 @@ async function collectMaterialSymbolUsages(config, options = {}) {
275
286
  }
276
287
  for (const icon of options.include ?? []) {
277
288
  const resolved = typeof icon === "string" ? { family: defaultFamily, name: icon } : icon;
278
- if (resolved.weight !== void 0) {
279
- addUsage(usages, resolved);
280
- } else {
281
- for (const w of VALID_WEIGHTS) {
282
- addUsage(usages, { ...resolved, weight: w });
283
- }
284
- }
289
+ addUsage(usages, resolved);
285
290
  }
286
291
  if (options.scan !== false) {
287
292
  const roots = options.roots ?? [join(config.root, "src")];
@@ -291,6 +296,15 @@ async function collectMaterialSymbolUsages(config, options = {}) {
291
296
  collectFromSource(source, usages);
292
297
  }
293
298
  }
299
+ const proxyComponents = await findIconProxyComponents(roots);
300
+ if (proxyComponents.size > 0) {
301
+ for (const root of roots) {
302
+ for (const filePath of await listSourceFiles(root)) {
303
+ const source = await readFile(filePath, "utf8");
304
+ collectProxyIconUsages(source, proxyComponents, usages);
305
+ }
306
+ }
307
+ }
294
308
  }
295
309
  return usages;
296
310
  }
@@ -419,29 +433,46 @@ function findEnclosingObject(source, fromIndex) {
419
433
  }
420
434
  return null;
421
435
  }
436
+ function isDynamicNonLiteral(attrs, name) {
437
+ const bound = attrs[`:${name}`];
438
+ if (bound === void 0) return false;
439
+ if (bound === "true" || bound === "false" || /^-?\d+$/.test(bound.trim())) return false;
440
+ return true;
441
+ }
422
442
  function collectFromSource(source, usages) {
423
- const rsIconTagPattern = /<RsIcon\b([^>]*)>/g;
443
+ const rsIconTagPattern = /<RsIcon\b([\s\S]*?)>/g;
424
444
  let tagMatch;
425
445
  while (tagMatch = rsIconTagPattern.exec(source)) {
426
- const attrs = parseStaticAttributes(tagMatch[1] ?? "");
446
+ const attrsSource = tagMatch[1] ?? "";
447
+ const attrs = parseStaticAttributes(attrsSource);
427
448
  const rawName = attrs.name ?? attrs[":name"];
428
449
  const hasFamily = "family" in attrs || ":family" in attrs;
429
450
  const rawFamily = attrs.family ?? attrs[":family"] ?? "";
430
- const rawWeight = attrs.weight ?? attrs[":weight"] ?? "";
431
- const weight = rawWeight ? parseInt(rawWeight, 10) : DEFAULT_WEIGHT;
432
- const resolvedWeight = !isNaN(weight) && weight > 0 ? weight : DEFAULT_WEIGHT;
451
+ const weight = parseNumberAttr(attrs, "weight", DEFAULT_WEIGHT);
452
+ const resolvedWeight = weight > 0 ? weight : DEFAULT_WEIGHT;
453
+ const fill = parseBooleanAttr(attrs, attrsSource, "fill");
454
+ const grade = parseNumberAttr(attrs, "grade", 0);
433
455
  if (rawName) {
434
456
  const isNameDynamic = ":name" in attrs;
435
457
  const familyList = resolveFamilies(rawFamily, hasFamily);
436
458
  const names = resolveNames(rawName, isNameDynamic);
459
+ const fills = isDynamicNonLiteral(attrs, "fill") ? [false, true] : [fill];
460
+ const grades = isDynamicNonLiteral(attrs, "grade") ? [...GRADE_VARIANTS] : [grade];
461
+ const weights = isDynamicNonLiteral(attrs, "weight") ? [...VALID_WEIGHTS] : [resolvedWeight];
437
462
  for (const family of familyList) {
438
463
  for (const name of names) {
439
- addUsage(usages, { family, name, weight: resolvedWeight });
464
+ for (const g of grades) {
465
+ for (const f of fills) {
466
+ for (const w of weights) {
467
+ addUsage(usages, { family, name, grade: g, fill: f, weight: w });
468
+ }
469
+ }
470
+ }
440
471
  }
441
472
  }
442
473
  }
443
474
  }
444
- const primeHelperPattern = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
475
+ const primeHelperPattern = /\brsPrimeIcon\(\s*["'`]([a-z0-9_]+)["'`](?:\s*,\s*\{([^)]*)\})?/g;
445
476
  let helperMatch;
446
477
  while (helperMatch = primeHelperPattern.exec(source)) {
447
478
  const family = toFamily(helperMatch[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
@@ -450,7 +481,7 @@ function collectFromSource(source, usages) {
450
481
  name: helperMatch[1] ?? ""
451
482
  });
452
483
  }
453
- const objectIconPattern = /\bicon\s*:\s*["']([a-z0-9_]+)["']/g;
484
+ const objectIconPattern = /\bicon\s*:\s*["'`]([a-z0-9_]+)["'`]/g;
454
485
  let objectMatch;
455
486
  while (objectMatch = objectIconPattern.exec(source)) {
456
487
  const name = objectMatch[1] ?? "";
@@ -459,16 +490,20 @@ function collectFromSource(source, usages) {
459
490
  const cleanBody = obj.body.replace(/\/\/.*/g, "").replace(/\/\*[\s\S]*?\*\//g, "");
460
491
  const weightMatch = cleanBody.match(/\bweight\s*:\s*(\d+)/);
461
492
  const familyMatch = cleanBody.match(/\bfamily\s*:\s*["'](\w+)["']/);
493
+ const fillMatch = cleanBody.match(/\bfill\s*:\s*(true|false)/);
494
+ const gradeMatch = cleanBody.match(/\bgrade\s*:\s*(-?\d+)/);
462
495
  addUsage(usages, {
463
496
  family: familyMatch ? familyMatch[1] : defaultFamily,
464
497
  name,
465
- weight: weightMatch ? parseInt(weightMatch[1], 10) : void 0
498
+ weight: weightMatch ? parseInt(weightMatch[1], 10) : void 0,
499
+ fill: fillMatch ? fillMatch[1] === "true" : void 0,
500
+ grade: gradeMatch ? parseInt(gradeMatch[1], 10) : void 0
466
501
  });
467
502
  } else {
468
503
  addUsage(usages, { family: defaultFamily, name });
469
504
  }
470
505
  }
471
- const magicCommentPattern = /\/\/\s*@robosophy-icon:\s*([a-z0-9_]+)/g;
506
+ const magicCommentPattern = /(?:\/\/|\/\*)\s*@robosophy-icon:\s*([a-z0-9_]+)/g;
472
507
  let magicMatch;
473
508
  while (magicMatch = magicCommentPattern.exec(source)) {
474
509
  const name = magicMatch[1] ?? "";
@@ -476,10 +511,14 @@ function collectFromSource(source, usages) {
476
511
  const line = lineEnd === -1 ? source.slice(magicMatch.index) : source.slice(magicMatch.index, lineEnd);
477
512
  const familyMatch = line.match(/\bfamily\s*=\s*["']?(\w+)["']?/);
478
513
  const weightMatch = line.match(/\bweight\s*=\s*(\d+)/);
514
+ const fillMatch = line.match(/\bfill\s*=\s*(true|false)/);
515
+ const gradeMatch = line.match(/\bgrade\s*=\s*(-?\d+)/);
479
516
  addUsage(usages, {
480
517
  family: familyMatch ? familyMatch[1] : defaultFamily,
481
518
  name,
482
- weight: weightMatch ? parseInt(weightMatch[1], 10) : void 0
519
+ weight: weightMatch ? parseInt(weightMatch[1], 10) : void 0,
520
+ fill: fillMatch ? fillMatch[1] === "true" : void 0,
521
+ grade: gradeMatch ? parseInt(gradeMatch[1], 10) : void 0
483
522
  });
484
523
  }
485
524
  const iconArrayPattern = /(?:const|let|var)\s+(\w*[Ii]con\w*)\s*=\s*\[/g;
@@ -554,6 +593,140 @@ function collectFromSource(source, usages) {
554
593
  }
555
594
  }
556
595
  }
596
+ const iconObjectPattern = /(?:const|let|var)\s+(\w*[Ii]con\w*)[^=]*=\s*\{/g;
597
+ let objMatch;
598
+ while (objMatch = iconObjectPattern.exec(source)) {
599
+ const braceStart = objMatch.index + objMatch[0].length - 1;
600
+ let depth = 1;
601
+ let j = braceStart + 1;
602
+ while (j < source.length) {
603
+ const c = source[j];
604
+ if (c === '"' || c === "'" || c === "`") {
605
+ j = skipStringForward(source, j, c);
606
+ continue;
607
+ }
608
+ if (c === "/") {
609
+ if (j + 1 < source.length && source[j + 1] === "/") {
610
+ j += 2;
611
+ while (j < source.length && source[j] !== "\n") j++;
612
+ continue;
613
+ }
614
+ if (j + 1 < source.length && source[j + 1] === "*") {
615
+ j += 2;
616
+ while (j + 1 < source.length) {
617
+ if (source[j] === "*" && source[j + 1] === "/") {
618
+ j += 2;
619
+ break;
620
+ }
621
+ j++;
622
+ }
623
+ continue;
624
+ }
625
+ }
626
+ if (c === "{") depth++;
627
+ else if (c === "}") {
628
+ depth--;
629
+ if (depth === 0) break;
630
+ }
631
+ j++;
632
+ }
633
+ if (depth === 0) {
634
+ const bodyContent = source.slice(braceStart + 1, j);
635
+ let braceDepth = 0;
636
+ let k = 0;
637
+ while (k < bodyContent.length) {
638
+ const c = bodyContent[k];
639
+ if (c === '"' || c === "'" || c === "`") {
640
+ if (braceDepth === 0) {
641
+ const quote = c;
642
+ let strEnd = k + 1;
643
+ while (strEnd < bodyContent.length) {
644
+ if (bodyContent[strEnd] === "\\") {
645
+ strEnd += 2;
646
+ continue;
647
+ }
648
+ if (bodyContent[strEnd] === quote) break;
649
+ strEnd++;
650
+ }
651
+ const iconName = bodyContent.slice(k + 1, strEnd);
652
+ if (iconNamePattern.test(iconName)) {
653
+ addUsage(usages, { family: defaultFamily, name: iconName });
654
+ }
655
+ k = strEnd + 1;
656
+ continue;
657
+ } else {
658
+ k = skipStringForward(bodyContent, k, c);
659
+ continue;
660
+ }
661
+ }
662
+ if (c === "{") braceDepth++;
663
+ else if (c === "}") braceDepth--;
664
+ k++;
665
+ }
666
+ }
667
+ }
668
+ const componentIconPattern = /<([A-Z][a-zA-Z0-9_]*)\b([\s\S]*?)>/g;
669
+ let compMatch;
670
+ while (compMatch = componentIconPattern.exec(source)) {
671
+ const tagName = compMatch[1];
672
+ if (tagName === "RsIcon") continue;
673
+ const attrs = parseStaticAttributes(compMatch[2] ?? "");
674
+ const iconValue = attrs.icon ?? attrs.iconName ?? attrs["icon-name"];
675
+ if (iconValue && iconNamePattern.test(iconValue)) {
676
+ addUsage(usages, { family: defaultFamily, name: iconValue });
677
+ }
678
+ }
679
+ }
680
+ async function findIconProxyComponents(roots) {
681
+ const proxyComponents = /* @__PURE__ */ new Map();
682
+ for (const root of roots) {
683
+ for (const filePath of await listSourceFiles(root)) {
684
+ const source = await readFile(filePath, "utf8");
685
+ if (!/defineProps\s*[<(]/.test(source)) continue;
686
+ const rsIconPattern = /<RsIcon[\s\S]*?:name="([a-zA-Z_][a-zA-Z0-9_]*)"/g;
687
+ let match;
688
+ while (match = rsIconPattern.exec(source)) {
689
+ const propName = match[1];
690
+ const propRef = new RegExp(`["'\`]${propName}["'\`]\\s*[?:]`);
691
+ if (!propRef.test(source)) continue;
692
+ const optsMatch = source.match(/defineOptions\s*\(\s*\{\s*[^}]*?\bname:\s*["'](\w+)["']/);
693
+ if (optsMatch) {
694
+ proxyComponents.set(optsMatch[1], propName);
695
+ }
696
+ }
697
+ }
698
+ }
699
+ return proxyComponents;
700
+ }
701
+ function collectProxyIconUsages(source, proxyComponents, usages) {
702
+ for (const [compName, propName] of proxyComponents) {
703
+ const pattern = new RegExp(
704
+ `<${compName}\\b([\\s\\S]*?)>`,
705
+ "g"
706
+ );
707
+ let tagMatch;
708
+ while (tagMatch = pattern.exec(source)) {
709
+ const attrs = parseStaticAttributes(tagMatch[1] ?? "");
710
+ const value = attrs[propName];
711
+ if (value && iconNamePattern.test(value)) {
712
+ addUsage(usages, { family: defaultFamily, name: value });
713
+ }
714
+ }
715
+ }
716
+ }
717
+ function parseBooleanAttr(attrs, raw, name) {
718
+ const bound = attrs[`:${name}`];
719
+ if (bound === "false") return false;
720
+ if (bound === "true" || bound === "") return true;
721
+ const staticVal = attrs[name];
722
+ if (staticVal === "false") return false;
723
+ if (staticVal === "true" || staticVal === "") return true;
724
+ return new RegExp(`(?:^|\\s)${name}(?:\\s|$|(?==))`).test(raw);
725
+ }
726
+ function parseNumberAttr(attrs, name, fallback) {
727
+ const raw = attrs[name] ?? attrs[`:${name}`] ?? "";
728
+ const parsed = parseInt(raw, 10);
729
+ return !isNaN(parsed) ? parsed : fallback;
557
730
  }
558
731
  function parseStaticAttributes(source) {
559
732
  const attrs = {};
@@ -572,17 +745,20 @@ function addUsage(usages, icon) {
572
745
  const family = icon.family ?? defaultFamily;
573
746
  const name = icon.name.trim();
574
747
  const weight = icon.weight ?? DEFAULT_WEIGHT;
748
+ const fill = icon.fill ?? false;
749
+ const grade = icon.grade ?? 0;
575
750
  if (!families.includes(family) || !iconNamePattern.test(name)) {
576
751
  return;
577
752
  }
578
753
  if (!VALID_WEIGHTS.includes(weight)) return;
579
754
  const iconMap = usages.get(family);
580
755
  if (!iconMap) return;
756
+ const key = variantKey(grade, fill, weight);
581
757
  const existing = iconMap.get(name);
582
758
  if (existing) {
583
- existing.add(weight);
759
+ existing.add(key);
584
760
  } else {
585
- iconMap.set(name, /* @__PURE__ */ new Set([weight]));
761
+ iconMap.set(name, /* @__PURE__ */ new Set([key]));
586
762
  }
587
763
  }
588
764
  async function loadIconManifest() {
@@ -657,9 +833,9 @@ async function listSourceFiles(root) {
657
833
  }
658
834
  function formatDetectedMaterialSymbols(usages) {
659
835
  return families.map((family) => {
660
- const iconWeights = usages.get(family);
661
- if (!iconWeights || iconWeights.size === 0) return `${family}: (none)`;
662
- const entries = [...iconWeights.entries()].map(([name, weights]) => `${name}[${[...weights].sort().join(",")}]`).sort().join(", ");
836
+ const iconVariants = usages.get(family);
837
+ if (!iconVariants || iconVariants.size === 0) return `${family}: (none)`;
838
+ const entries = [...iconVariants.entries()].map(([name, variants]) => `${name}[${[...variants].sort().join(";")}]`).sort().join(", ");
663
839
  return `${family}: ${entries}`;
664
840
  }).join("\n");
665
841
  }
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\r\nimport { mkdir, readFile, readdir, writeFile } from \"node:fs/promises\";\r\nimport { extname, join, sep } from \"node:path\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\r\n\r\nimport type { RsIconFamily } from \"./components/RsIcon\";\r\n\r\ntype IconInput = string | { family?: RsIconFamily; name: string; weight?: number };\r\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\r\n\r\nexport type RobosophyMaterialSymbolsOptions = {\r\n outputDir?: string;\r\n fontDisplay?: RsIconFontDisplay;\r\n fontVariant?: string;\r\n include?: IconInput[];\r\n preload?: boolean;\r\n roots?: string[];\r\n scan?: boolean;\r\n};\r\n\r\ntype IconUsageMap = Map<RsIconFamily, Map<string, Set<number>>>;\r\n\r\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\r\nconst defaultFamily: RsIconFamily = \"outlined\";\r\nconst iconNamePattern = /^[a-z0-9_]+$/;\r\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\r\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\r\nconst internalIconNames = [\r\n \"arrow_drop_down\",\r\n \"arrow_drop_up\",\r\n \"arrow_left\",\r\n \"chevron_right\",\r\n \"close\",\r\n \"login\",\r\n \"nest_eco_leaf\",\r\n];\r\n\r\nconst GITHUB_RAW =\r\n \"https://raw.githubusercontent.com/google/material-design-icons/master/symbols/web\";\r\nconst CACHE_BASE = join(\"node_modules\", \".cache\", \"robosophy-svgs\");\r\nconst BASE_OPSZ = 24;\r\nconst DEFAULT_WEIGHT = 400;\r\n\r\nconst GRADE_VARIANTS = [0, -25, 200] as const;\r\n\r\nexport function robosophyMaterialSymbols(\r\n options: RobosophyMaterialSymbolsOptions = {},\r\n): Plugin {\r\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\r\n const outputDir = raw\r\n .split(\"/\")\r\n .filter((part) => part && part !== \"..\")\r\n .join(\"/\") || \"assets\";\r\n let config: ResolvedConfig;\r\n let cacheDir: string;\r\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\r\n let cachedUsagesKey = \"\";\r\n let needsRegeneration = true;\r\n\r\n function usageMapKey(usages: IconUsageMap): string {\r\n const parts: string[] = [];\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) continue;\r\n const entries = [...iconWeights.entries()]\r\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\r\n .sort();\r\n parts.push(`${family}:${entries.join(\",\")}`);\r\n }\r\n return parts.join(\"|\") || \"(empty)\";\r\n }\r\n\r\n async function getAssets(): Promise<GeneratedMaterialSymbolsAssets> {\r\n if (!needsRegeneration && cachedAssets) return cachedAssets;\r\n\r\n const usages = await collectMaterialSymbolUsages(config, options);\r\n const newKey = usageMapKey(usages);\r\n\r\n if (newKey === cachedUsagesKey && cachedAssets) {\r\n needsRegeneration = false;\r\n return cachedAssets;\r\n }\r\n\r\n if (config.command !== \"build\" && cachedUsagesKey !== \"\") {\r\n config.logger.info(\r\n \"[robosophy-material-symbols] icon usage changed, regenerating SVG sprite\",\r\n );\r\n }\r\n\r\n cachedUsagesKey = newKey;\r\n cachedAssets = await ensureGeneratedAssets(config, options, cacheDir);\r\n needsRegeneration = false;\r\n return cachedAssets;\r\n }\r\n\r\n return {\r\n name: \"robosophy-material-symbols\",\r\n async configResolved(resolvedConfig) {\r\n config = resolvedConfig;\r\n cacheDir = join(config.root, CACHE_BASE);\r\n await mkdir(cacheDir, { recursive: true });\r\n },\r\n async buildStart() {\r\n if (config.command === \"serve\" || config.command === \"build\") {\r\n await getAssets();\r\n }\r\n },\r\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\r\n const assets = await getAssets();\r\n\r\n const tag: HtmlTagDescriptor = {\r\n tag: \"svg\",\r\n attrs: {\r\n xmlns: \"http://www.w3.org/2000/svg\",\r\n style: \"display:none;\",\r\n \"aria-hidden\": \"true\",\r\n },\r\n children: assets.spriteContent,\r\n injectTo: \"body-prepend\",\r\n };\r\n\r\n return [tag, ...buildMaterialSymbolsCss(assets.css)];\r\n },\r\n configureServer(server) {\r\n server.watcher.on(\"all\", (_event, file) => {\r\n if (sourceExtensions.has(extname(file))) {\r\n needsRegeneration = true;\r\n }\r\n });\r\n server.middlewares.use(async (request, response, next) => {\r\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\r\n next();\r\n return;\r\n }\r\n\r\n try {\r\n const assets = await getAssets();\r\n const fileName = decodeURIComponent(\r\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\r\n );\r\n\r\n if (fileName === \"rs-material-symbols.svg\") {\r\n response.setHeader(\"Content-Type\", \"image/svg+xml; charset=utf-8\");\r\n response.setHeader(\"Cache-Control\", \"no-cache\");\r\n response.end(assets.fullSprite);\r\n return;\r\n }\r\n\r\n next();\r\n } catch (error) {\r\n next(error);\r\n }\r\n });\r\n },\r\n async generateBundle(_outputOptions) {\r\n const assets = await getAssets();\r\n\r\n if (assets.fullSprite) {\r\n this.emitFile({\r\n fileName: `${outputDir}/rs-material-symbols.svg`,\r\n name: \"rs-material-symbols.svg\",\r\n source: assets.fullSprite,\r\n type: \"asset\",\r\n });\r\n }\r\n },\r\n };\r\n}\r\n\r\ntype GeneratedMaterialSymbolsAssets = {\r\n fullSprite: string;\r\n spriteContent: string;\r\n css: string;\r\n};\r\n\r\ntype SvgVariant = {\r\n suffix: string;\r\n symbolSuffix: string;\r\n};\r\n\r\nfunction buildSvgVariants(weight: number = DEFAULT_WEIGHT): SvgVariant[] {\r\n const variants: SvgVariant[] = [];\r\n for (const grade of GRADE_VARIANTS) {\r\n const gradeSuffix = grade === 0 ? \"\" : grade > 0 ? `grad${grade}` : `gradN${Math.abs(grade)}`;\r\n const symbolGradeSuffix = grade === 0 ? \"\" : `-${gradeSuffix}`;\r\n\r\n for (const fill of [false, true]) {\r\n const fillSuffix = fill ? \"fill1\" : \"\";\r\n const symbolFillSuffix = fill ? \"-fill\" : \"\";\r\n const weightSuffix = weight !== DEFAULT_WEIGHT ? `wght${weight}` : \"\";\r\n const weightSymbolSuffix = weight !== DEFAULT_WEIGHT ? `-wght${weight}` : \"\";\r\n const parts = [gradeSuffix, fillSuffix, weightSuffix].filter(Boolean);\r\n\r\n variants.push({\r\n suffix: parts.length > 0 ? `${parts.join(\"\")}_${BASE_OPSZ}px` : `${BASE_OPSZ}px`,\r\n symbolSuffix: `${symbolGradeSuffix}${symbolFillSuffix}${weightSymbolSuffix}`,\r\n });\r\n }\r\n }\r\n return variants;\r\n}\r\n\r\nfunction buildSvgUrl(name: string, family: RsIconFamily, suffix: string): string {\r\n const style = family === \"outlined\" ? \"materialsymbolsoutlined\"\r\n : family === \"rounded\" ? \"materialsymbolsrounded\"\r\n : \"materialsymbolssharp\";\r\n return `${GITHUB_RAW}/${name.toLowerCase()}/${style}/${name.toLowerCase()}_${suffix}.svg`;\r\n}\r\n\r\nfunction buildSymbolId(name: string, family: RsIconFamily, symbolSuffix: string): string {\r\n return `rs-icon-${family}-${name}${symbolSuffix}`;\r\n}\r\n\r\nasync function fetchSvg(url: string): Promise<string | null> {\r\n try {\r\n const response = await fetch(url);\r\n if (!response.ok) return null;\r\n return await response.text();\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nasync function loadSvgFromCache(cacheDir: string, cacheKey: string): Promise<string | null> {\r\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\r\n try {\r\n return await readFile(cachePath, \"utf8\");\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nasync function saveSvgToCache(cacheDir: string, cacheKey: string, content: string): Promise<void> {\r\n const cachePath = join(cacheDir, `${cacheKey}.svg`);\r\n try {\r\n await writeFile(cachePath, content, \"utf8\");\r\n } catch {\r\n // Ignore cache write errors\r\n }\r\n}\r\n\r\nfunction parseSvgPaths(svgContent: string): string | null {\r\n const viewBoxMatch = svgContent.match(/viewBox=\"([^\"]+)\"/i);\r\n if (!viewBoxMatch) return null;\r\n\r\n const paths: string[] = [];\r\n const pathRegex = /<path\\s+([^>]*)>/g;\r\n let pathMatch: RegExpExecArray | null;\r\n\r\n while ((pathMatch = pathRegex.exec(svgContent))) {\r\n const attrs = pathMatch[1] ?? \"\";\r\n const dMatch = attrs.match(/d=\"([^\"]*)\"/);\r\n if (dMatch) {\r\n paths.push(dMatch[1] ?? \"\");\r\n }\r\n }\r\n\r\n if (paths.length === 0) return null;\r\n\r\n return paths\r\n .map((d) => `<path fill=\"currentColor\" d=\"${d}\"/>`)\r\n .join(\"\");\r\n}\r\n\r\nasync function generateSpriteAssets(\r\n usages: IconUsageMap,\r\n cacheDir: string,\r\n config: ResolvedConfig,\r\n): Promise<GeneratedMaterialSymbolsAssets> {\r\n const symbols: string[] = [];\r\n const iconClasses: string[] = [];\r\n let totalFetched = 0;\r\n let totalBytes = 0;\r\n\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) continue;\r\n\r\n for (const [name, weights] of [...iconWeights.entries()].sort()) {\r\n for (const weight of [...weights].sort()) {\r\n const variants = buildSvgVariants(weight);\r\n for (const variant of variants) {\r\n const symbolId = buildSymbolId(name, family, variant.symbolSuffix);\r\n const url = buildSvgUrl(name, family, variant.suffix);\r\n const cacheKey = createHash(\"sha256\")\r\n .update(url)\r\n .digest(\"hex\")\r\n .slice(0, 12);\r\n\r\n let svgContent = cacheDir ? await loadSvgFromCache(cacheDir, cacheKey) : null;\r\n\r\n if (!svgContent) {\r\n svgContent = await fetchSvg(url);\r\n if (!svgContent) continue;\r\n\r\n if (cacheDir) {\r\n await saveSvgToCache(cacheDir, cacheKey, svgContent);\r\n }\r\n }\r\n\r\n const pathContent = parseSvgPaths(svgContent);\r\n if (!pathContent) continue;\r\n\r\n symbols.push(\r\n `<symbol id=\"${symbolId}\" viewBox=\"0 -960 960 960\" fill=\"currentColor\">${pathContent}</symbol>`,\r\n );\r\n\r\n totalFetched++;\r\n totalBytes += svgContent.length;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const iconNames = new Set<string>();\r\n for (const family of families) {\r\n const iconWeights = usages.get(family);\r\n if (iconWeights) {\r\n for (const name of iconWeights.keys()) {\r\n iconNames.add(name);\r\n }\r\n }\r\n }\r\n for (const name of [...iconNames].sort()) {\r\n iconClasses.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\r\n }\r\n\r\n const spriteContent = `<defs>${symbols.join(\"\")}</defs>`;\r\n const fullSprite = `<svg xmlns=\"http://www.w3.org/2000/svg\" style=\"display:none\" aria-hidden=\"true\">${spriteContent}</svg>`;\r\n const css = iconClasses.join(\"\\n\");\r\n\r\n const totalIcons = [...usages.values()].reduce((sum, m) => sum + m.size, 0);\r\n if (totalIcons > 0) {\r\n const summary = formatDetectedMaterialSymbols(usages);\r\n config.logger.info(\r\n `[robosophy-material-symbols] ${totalIcons} icons detected, ${totalFetched} SVG variants (${(totalBytes / 1024).toFixed(1)} KB)\\n${summary}`,\r\n );\r\n } else {\r\n config.logger.warn(\r\n \"[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option.\",\r\n );\r\n }\r\n\r\n return { fullSprite, spriteContent, css };\r\n}\r\n\r\nasync function ensureGeneratedAssets(\r\n config: ResolvedConfig,\r\n options: RobosophyMaterialSymbolsOptions,\r\n cacheDir: string,\r\n): Promise<GeneratedMaterialSymbolsAssets> {\r\n const usages = await collectMaterialSymbolUsages(config, options);\r\n return generateSpriteAssets(usages, cacheDir, config);\r\n}\r\n\r\nexport async function collectMaterialSymbolUsages(\r\n config: Pick<ResolvedConfig, \"root\">,\r\n options: RobosophyMaterialSymbolsOptions = {},\r\n): Promise<IconUsageMap> {\r\n const usages = createUsageMap();\r\n\r\n const manifest = await loadIconManifest();\r\n\r\n if (manifest) {\r\n for (const family of families) {\r\n for (const name of manifest[family] ?? []) {\r\n addUsage(usages, { family, name });\r\n }\r\n }\r\n } else {\r\n for (const name of internalIconNames) {\r\n for (const family of families) {\r\n addUsage(usages, { family, name });\r\n }\r\n }\r\n }\r\n\r\n for (const icon of options.include ?? []) {\r\n const resolved = typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon;\r\n if (resolved.weight !== undefined) {\r\n addUsage(usages, resolved);\r\n } else {\r\n for (const w of VALID_WEIGHTS) {\r\n addUsage(usages, { ...resolved, weight: w });\r\n }\r\n }\r\n }\r\n\r\n if (options.scan !== false) {\r\n const roots = options.roots ?? [join(config.root, \"src\")];\r\n\r\n for (const root of roots) {\r\n for (const filePath of await listSourceFiles(root)) {\r\n const source = await readFile(filePath, \"utf8\");\r\n collectFromSource(source, usages);\r\n }\r\n }\r\n }\r\n\r\n return usages;\r\n}\r\n\r\nexport function buildMaterialSymbolsCss(\r\n iconClasses: string,\r\n): HtmlTagDescriptor[] {\r\n if (!iconClasses) return [];\r\n\r\n return [\r\n {\r\n tag: \"style\",\r\n children: iconClasses,\r\n injectTo: \"head\",\r\n },\r\n ];\r\n}\r\n\r\nfunction skipStringBackward(source: string, pos: number, quote: string): number {\r\n pos--;\r\n while (pos >= 0) {\r\n if (source[pos] === \"\\\\\") {\r\n pos -= 2;\r\n continue;\r\n }\r\n if (source[pos] === quote) {\r\n let backslashCount = 0;\r\n let k = pos - 1;\r\n while (k >= 0 && source[k] === \"\\\\\") {\r\n backslashCount++;\r\n k--;\r\n }\r\n if (backslashCount % 2 === 1) {\r\n pos = pos - backslashCount - 1;\r\n continue;\r\n }\r\n return pos - 1;\r\n }\r\n pos--;\r\n }\r\n return -1;\r\n}\r\n\r\nfunction skipStringForward(source: string, pos: number, quote: string): number {\r\n pos++;\r\n while (pos < source.length) {\r\n if (source[pos] === \"\\\\\") {\r\n pos += 2;\r\n continue;\r\n }\r\n if (source[pos] === quote) {\r\n return pos + 1;\r\n }\r\n pos++;\r\n }\r\n return source.length;\r\n}\r\n\r\nfunction findEnclosingObject(\r\n source: string,\r\n fromIndex: number,\r\n): { start: number; end: number; body: string } | null {\r\n let depth = 0;\r\n let i = fromIndex;\r\n\r\n while (i >= 0) {\r\n const char = source[i];\r\n\r\n if (char === '\"' || char === \"'\" || char === \"`\") {\r\n i = skipStringBackward(source, i, char);\r\n continue;\r\n }\r\n\r\n // Line comment //\r\n if (char === \"/\" && i > 0 && source[i - 1] === \"/\") {\r\n i -= 2;\r\n while (i >= 0 && source[i] !== \"\\n\") i--;\r\n continue;\r\n }\r\n\r\n // Block comment */\r\n if (char === \"/\" && i > 0 && source[i - 1] === \"*\") {\r\n i -= 2;\r\n while (i >= 0) {\r\n if (source[i] === \"/\" && i + 1 < source.length && source[i + 1] === \"*\") {\r\n i--;\r\n break;\r\n }\r\n i--;\r\n }\r\n continue;\r\n }\r\n\r\n if (char === \"}\") {\r\n depth++;\r\n } else if (char === \"{\") {\r\n if (depth === 0) {\r\n const start = i;\r\n let j = i + 1;\r\n let innerDepth = 1;\r\n\r\n while (j < source.length) {\r\n const c = source[j];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n j = skipStringForward(source, j, c);\r\n continue;\r\n }\r\n\r\n if (c === \"/\") {\r\n // Line comment //\r\n if (j + 1 < source.length && source[j + 1] === \"/\") {\r\n j += 2;\r\n while (j < source.length && source[j] !== \"\\n\") j++;\r\n continue;\r\n }\r\n // Block comment /*\r\n if (j + 1 < source.length && source[j + 1] === \"*\") {\r\n j += 2;\r\n while (j + 1 < source.length) {\r\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\r\n j += 2;\r\n break;\r\n }\r\n j++;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"{\") innerDepth++;\r\n else if (c === \"}\") {\r\n innerDepth--;\r\n if (innerDepth === 0) {\r\n return {\r\n start,\r\n end: j,\r\n body: source.slice(start + 1, j),\r\n };\r\n }\r\n }\r\n\r\n j++;\r\n }\r\n\r\n return null;\r\n }\r\n depth--;\r\n }\r\n\r\n i--;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction collectFromSource(source: string, usages: IconUsageMap): void {\r\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\r\n let tagMatch: RegExpExecArray | null;\r\n\r\n while ((tagMatch = rsIconTagPattern.exec(source))) {\r\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\r\n const rawName = attrs.name ?? attrs[\":name\"];\r\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\r\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\r\n const rawWeight = attrs.weight ?? attrs[\":weight\"] ?? \"\";\r\n const weight = rawWeight ? parseInt(rawWeight, 10) : DEFAULT_WEIGHT;\r\n const resolvedWeight = !isNaN(weight) && weight > 0 ? weight : DEFAULT_WEIGHT;\r\n\r\n if (rawName) {\r\n const isNameDynamic = \":name\" in attrs;\r\n const familyList = resolveFamilies(rawFamily, hasFamily);\r\n const names = resolveNames(rawName, isNameDynamic);\r\n\r\n for (const family of familyList) {\r\n for (const name of names) {\r\n addUsage(usages, { family, name, weight: resolvedWeight });\r\n }\r\n }\r\n }\r\n }\r\n\r\n const primeHelperPattern =\r\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\r\n let helperMatch: RegExpExecArray | null;\r\n\r\n while ((helperMatch = primeHelperPattern.exec(source))) {\r\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\r\n addUsage(usages, {\r\n family: family ?? defaultFamily,\r\n name: helperMatch[1] ?? \"\",\r\n });\r\n }\r\n\r\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\r\n let objectMatch: RegExpExecArray | null;\r\n\r\n while ((objectMatch = objectIconPattern.exec(source))) {\r\n const name = objectMatch[1] ?? \"\";\r\n const obj = findEnclosingObject(source, objectMatch.index);\r\n if (obj) {\r\n const cleanBody = obj.body.replace(/\\/\\/.*/g, \"\").replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\");\r\n const weightMatch = cleanBody.match(/\\bweight\\s*:\\s*(\\d+)/);\r\n const familyMatch = cleanBody.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/);\r\n addUsage(usages, {\r\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\r\n name,\r\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\r\n });\r\n } else {\r\n addUsage(usages, { family: defaultFamily, name });\r\n }\r\n }\r\n\r\n // Pattern 4: magic comments @robosophy-icon\r\n // Use for icons that cannot be detected statically (props, variables, API, etc.)\r\n const magicCommentPattern = /\\/\\/\\s*@robosophy-icon:\\s*([a-z0-9_]+)/g;\r\n let magicMatch: RegExpExecArray | null;\r\n\r\n while ((magicMatch = magicCommentPattern.exec(source))) {\r\n const name = magicMatch[1] ?? \"\";\r\n const lineEnd = source.indexOf(\"\\n\", magicMatch.index);\r\n const line = lineEnd === -1 ? source.slice(magicMatch.index) : source.slice(magicMatch.index, lineEnd);\r\n const familyMatch = line.match(/\\bfamily\\s*=\\s*[\"']?(\\w+)[\"']?/);\r\n const weightMatch = line.match(/\\bweight\\s*=\\s*(\\d+)/);\r\n addUsage(usages, {\r\n family: familyMatch ? (familyMatch[1] as RsIconFamily) : defaultFamily,\r\n name,\r\n weight: weightMatch ? parseInt(weightMatch[1], 10) : undefined,\r\n });\r\n }\r\n\r\n // Pattern 5: icon arrays — detect arrays assigned to variables with \"icon\" in the name\r\n // e.g. const iconNames = [\"home\", \"search\"]\r\n const iconArrayPattern = /(?:const|let|var)\\s+(\\w*[Ii]con\\w*)\\s*=\\s*\\[/g;\r\n let arrayMatch: RegExpExecArray | null;\r\n\r\n while ((arrayMatch = iconArrayPattern.exec(source))) {\r\n const bracketStart = arrayMatch.index + arrayMatch[0].length - 1;\r\n let depth = 1;\r\n let j = bracketStart + 1;\r\n\r\n while (j < source.length) {\r\n const c = source[j];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n j = skipStringForward(source, j, c);\r\n continue;\r\n }\r\n\r\n if (c === \"/\") {\r\n if (j + 1 < source.length && source[j + 1] === \"/\") {\r\n j += 2;\r\n while (j < source.length && source[j] !== \"\\n\") j++;\r\n continue;\r\n }\r\n if (j + 1 < source.length && source[j + 1] === \"*\") {\r\n j += 2;\r\n while (j + 1 < source.length) {\r\n if (source[j] === \"*\" && source[j + 1] === \"/\") {\r\n j += 2;\r\n break;\r\n }\r\n j++;\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"[\") depth++;\r\n else if (c === \"]\") {\r\n depth--;\r\n if (depth === 0) break;\r\n }\r\n\r\n j++;\r\n }\r\n\r\n if (depth === 0) {\r\n const arrayContent = source.slice(bracketStart + 1, j);\r\n let braceDepth = 0;\r\n let k = 0;\r\n\r\n while (k < arrayContent.length) {\r\n const c = arrayContent[k];\r\n\r\n if (c === '\"' || c === \"'\" || c === \"`\") {\r\n if (braceDepth === 0) {\r\n const quote = c;\r\n let strEnd = k + 1;\r\n while (strEnd < arrayContent.length) {\r\n if (arrayContent[strEnd] === \"\\\\\") {\r\n strEnd += 2;\r\n continue;\r\n }\r\n if (arrayContent[strEnd] === quote) break;\r\n strEnd++;\r\n }\r\n const iconName = arrayContent.slice(k + 1, strEnd);\r\n if (iconNamePattern.test(iconName)) {\r\n addUsage(usages, { family: defaultFamily, name: iconName });\r\n }\r\n k = strEnd + 1;\r\n continue;\r\n } else {\r\n k = skipStringForward(arrayContent, k, c);\r\n continue;\r\n }\r\n }\r\n\r\n if (c === \"{\") braceDepth++;\r\n else if (c === \"}\") braceDepth--;\r\n\r\n k++;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction parseStaticAttributes(source: string): Record<string, string> {\r\n const attrs: Record<string, string> = {};\r\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\r\n let match: RegExpExecArray | null;\r\n\r\n while ((match = attrPattern.exec(source))) {\r\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\r\n }\r\n\r\n return attrs;\r\n}\r\n\r\nfunction unwrapStaticValue(value: string): string {\r\n return value.replace(/^['\"`](.+)['\"`]$/, \"$1\");\r\n}\r\n\r\nconst VALID_WEIGHTS = [100, 200, 300, 400, 500, 600, 700] as const;\r\n\r\nfunction addUsage(\r\n usages: IconUsageMap,\r\n icon: { family?: RsIconFamily; name: string; weight?: number },\r\n): void {\r\n const family = icon.family ?? defaultFamily;\r\n const name = icon.name.trim();\r\n const weight = icon.weight ?? DEFAULT_WEIGHT;\r\n\r\n if (!families.includes(family) || !iconNamePattern.test(name)) {\r\n return;\r\n }\r\n\r\n if (!VALID_WEIGHTS.includes(weight as never)) return;\r\n\r\n const iconMap = usages.get(family);\r\n if (!iconMap) return;\r\n\r\n const existing = iconMap.get(name);\r\n if (existing) {\r\n existing.add(weight);\r\n } else {\r\n iconMap.set(name, new Set([weight]));\r\n }\r\n}\r\n\r\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\r\n try {\r\n const dir = join(fileURLToPath(import.meta.url), \"..\");\r\n const manifestPath = join(dir, \"icon-manifest.json\");\r\n const source = await readFile(manifestPath, \"utf8\");\r\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction toFamily(value?: string): RsIconFamily | undefined {\r\n const normalized = value ? unwrapStaticValue(value) : \"\";\r\n return families.includes(normalized as RsIconFamily)\r\n ? (normalized as RsIconFamily)\r\n : undefined;\r\n}\r\n\r\nfunction resolveNames(rawName: string, isDynamic = false): string[] {\r\n const stringLiterals = /[\"'`]([a-z0-9_]+)[\"'`]/g;\r\n let strMatch: RegExpExecArray | null;\r\n const names: string[] = [];\r\n\r\n while ((strMatch = stringLiterals.exec(rawName))) {\r\n const candidate = strMatch[1] ?? \"\";\r\n if (iconNamePattern.test(candidate)) {\r\n names.push(candidate);\r\n }\r\n }\r\n\r\n if (names.length === 0) {\r\n if (isDynamic) return names;\r\n const name = unwrapStaticValue(rawName);\r\n if (iconNamePattern.test(name)) {\r\n names.push(name);\r\n }\r\n }\r\n\r\n return names;\r\n}\r\n\r\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\r\n const family = toFamily(rawFamily);\r\n if (family) return [family];\r\n\r\n const stringLiterals = /[\"'`](\\w+)[\"'`]/g;\r\n let strMatch: RegExpExecArray | null;\r\n const found = new Set<RsIconFamily>();\r\n\r\n while ((strMatch = stringLiterals.exec(rawFamily))) {\r\n const candidate = strMatch[1] ?? \"\";\r\n const f = toFamily(candidate);\r\n if (f) {\r\n found.add(f);\r\n }\r\n }\r\n\r\n if (found.size > 0) return [...found];\r\n\r\n if (!hasFamily) return [defaultFamily];\r\n\r\n return [...families];\r\n}\r\n\r\nfunction createUsageMap(): IconUsageMap {\r\n return new Map(families.map((family) => [family, new Map<string, Set<number>>()]));\r\n}\r\n\r\nasync function listSourceFiles(root: string): Promise<string[]> {\r\n try {\r\n const entries = await readdir(root, { withFileTypes: true });\r\n const files = await Promise.all(\r\n entries.map(async (entry) => {\r\n const path = join(root, entry.name);\r\n\r\n if (entry.isDirectory()) {\r\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\r\n }\r\n\r\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\r\n }),\r\n );\r\n\r\n return files.flat();\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap): string {\r\n return families\r\n .map((family) => {\r\n const iconWeights = usages.get(family);\r\n if (!iconWeights || iconWeights.size === 0) return `${family}: (none)`;\r\n const entries = [...iconWeights.entries()]\r\n .map(([name, weights]) => `${name}[${[...weights].sort().join(\",\")}]`)\r\n .sort()\r\n .join(\", \");\r\n return `${family}: ${entries}`;\r\n })\r\n .join(\"\\n\");\r\n}\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"names":[],"mappings":"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"}