@robosophy/ui-vue 1.0.14 → 1.0.16

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.
@@ -1,6 +1,6 @@
1
1
  export type RsIconFamily = "outlined" | "rounded" | "sharp";
2
2
  export type RsIconSize = "sm" | "md" | "lg" | number;
3
- export type RsIconColor = "primary" | "secondary" | "success" | "warning" | "error" | "inherit";
3
+ export type RsIconColor = "primary" | "secondary" | "success" | "warning" | "danger" | "inherit";
4
4
  export type RsIconWeight = 100 | 200 | 300 | 400 | 500 | 600 | 700;
5
5
  export type RsIconProps = {
6
6
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"RsIcon.types.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhG,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC"}
1
+ {"version":3,"file":"RsIcon.types.d.ts","sourceRoot":"","sources":["../../../src/components/RsIcon/RsIcon.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAErD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjG,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC"}
@@ -1,16 +1,41 @@
1
1
  {
2
2
  "outlined": [
3
+ "alarm",
3
4
  "arrow_drop_down",
4
5
  "arrow_drop_up",
5
6
  "arrow_left",
7
+ "block",
8
+ "check_circle",
6
9
  "chevron_right",
7
10
  "close",
11
+ "contract",
12
+ "error",
13
+ "favorite",
14
+ "help",
15
+ "home",
8
16
  "icon",
17
+ "info",
18
+ "inventory",
9
19
  "login",
10
- "nest_eco_leaf"
20
+ "logout",
21
+ "manage_accounts",
22
+ "nest_eco_leaf",
23
+ "notifications",
24
+ "package_2",
25
+ "sell",
26
+ "settings",
27
+ "subtitles_gear",
28
+ "swap_vert",
29
+ "table_chart_view",
30
+ "upload",
31
+ "visibility_off",
32
+ "warning"
11
33
  ],
12
34
  "rounded": [
13
- "arrow_drop_down"
35
+ "arrow_drop_down",
36
+ "settings"
14
37
  ],
15
- "sharp": []
38
+ "sharp": [
39
+ "settings"
40
+ ]
16
41
  }
package/dist/index.css CHANGED
@@ -62,8 +62,8 @@
62
62
  --rs-icon-color: var(--rs-color-icon-warning, #FF9001);
63
63
  }
64
64
 
65
- .rs-icon--error {
66
- --rs-icon-color: var(--rs-color-icon-error, #d80115);
65
+ .rs-icon--danger {
66
+ --rs-icon-color: var(--rs-color-icon-danger, #d80115);
67
67
  }
68
68
 
69
69
  .rs-icon--inherit {
@@ -137,8 +137,8 @@
137
137
  .rs-icon--warning {
138
138
  --rs-icon-color: var(--rs-color-icon-warning, #FF9001);
139
139
  }
140
- .rs-icon--error {
141
- --rs-icon-color: var(--rs-color-icon-error, #d80115);
140
+ .rs-icon--danger {
141
+ --rs-icon-color: var(--rs-color-icon-danger, #d80115);
142
142
  }
143
143
  .rs-icon--inherit {
144
144
  --rs-icon-color: currentColor;
@@ -436,7 +436,8 @@
436
436
  gap: 32px;
437
437
  height: 100%;
438
438
  overflow: hidden;
439
- transition: width 180ms ease-in-out;
439
+ transition: width 220ms cubic-bezier(0.4, 0, 0.2, 1);
440
+ will-change: width;
440
441
  width: var(--rs-sidebar-width-collapsed);
441
442
  }
442
443
  .rs-sidebar--pc {
@@ -483,13 +484,14 @@
483
484
  display: flex;
484
485
  color: var(--rs-sidebar-active);
485
486
  flex: 1;
486
- gap: 0;
487
+ gap: 6px;
487
488
  min-width: 0;
488
- transition: gap 180ms ease-in-out;
489
+ padding-left: 24px;
490
+ transition: padding-left 220ms cubic-bezier(0.4, 0, 0.2, 1);
489
491
  }
490
492
  .rs-sidebar--expanded .rs-sidebar__brand,
491
493
  .rs-sidebar--mobile-open .rs-sidebar__brand {
492
- gap: 6px;
494
+ padding-left: 0;
493
495
  }
494
496
  .rs-sidebar__module-trigger {
495
497
  align-items: center;
@@ -500,19 +502,14 @@
500
502
  display: inline-flex;
501
503
  justify-content: flex-start;
502
504
  font: inherit;
503
- gap: 0;
505
+ gap: 6px;
504
506
  min-width: 0;
505
507
  appearance: none;
506
508
  -webkit-appearance: none;
507
509
  padding: 0;
508
510
  text-align: left;
509
- transition: gap 180ms ease-in-out;
510
511
  width: 100%;
511
512
  }
512
- .rs-sidebar--expanded .rs-sidebar__module-trigger,
513
- .rs-sidebar--mobile-open .rs-sidebar__module-trigger {
514
- gap: 6px;
515
- }
516
513
  .rs-sidebar__module-trigger:hover:not(:disabled),
517
514
  .rs-sidebar__module-trigger:active:not(:disabled) {
518
515
  background: transparent;
@@ -527,19 +524,9 @@
527
524
  margin-left: auto;
528
525
  }
529
526
  .rs-sidebar__module-trigger > .rs-icon:first-child {
530
- margin-left: 24px;
531
- transition: margin-left 180ms ease-in-out;
532
- }
533
- .rs-sidebar--expanded .rs-sidebar__module-trigger > .rs-icon:first-child,
534
- .rs-sidebar--mobile-open .rs-sidebar__module-trigger > .rs-icon:first-child {
535
527
  margin-left: 0;
536
528
  }
537
529
  .rs-sidebar__brand > .rs-icon:first-child {
538
- margin-left: 24px;
539
- transition: margin-left 180ms ease-in-out;
540
- }
541
- .rs-sidebar--expanded .rs-sidebar__brand > .rs-icon:first-child,
542
- .rs-sidebar--mobile-open .rs-sidebar__brand > .rs-icon:first-child {
543
530
  margin-left: 0;
544
531
  }
545
532
  .rs-sidebar__title,
@@ -550,8 +537,8 @@
550
537
  opacity: 0;
551
538
  overflow: hidden;
552
539
  transition:
553
- max-width 180ms ease-in-out,
554
- opacity 180ms ease-in-out;
540
+ max-width 220ms cubic-bezier(0.4, 0, 0.2, 1),
541
+ opacity 220ms cubic-bezier(0.4, 0, 0.2, 1);
555
542
  white-space: nowrap;
556
543
  }
557
544
  .rs-sidebar--expanded .rs-sidebar__title,
@@ -676,8 +663,9 @@
676
663
  -webkit-appearance: none;
677
664
  min-height: 27px;
678
665
  padding: 7px 0;
666
+ padding-left: 24px;
679
667
  text-align: left;
680
- transition: gap 180ms ease-in-out;
668
+ transition: padding-left 220ms cubic-bezier(0.4, 0, 0.2, 1);
681
669
  width: 100%;
682
670
  }
683
671
  .rs-sidebar--expanded .rs-sidebar__item,
@@ -717,15 +705,10 @@
717
705
  .rs-sidebar__item-icon {
718
706
  flex: 0 0 auto;
719
707
  color: var(--rs-sidebar-active);
720
- margin-left: 24px;
721
- transition: margin-left 180ms ease-in-out;
708
+ margin-left: 0;
722
709
  width: 24px;
723
710
  height: 24px;
724
711
  }
725
- .rs-sidebar--expanded .rs-sidebar__item-icon,
726
- .rs-sidebar--mobile-open .rs-sidebar__item-icon {
727
- margin-left: 16px;
728
- }
729
712
  .rs-sidebar__brand .rs-icon {
730
713
  width: 24px;
731
714
  height: 24px;
package/dist/vite.d.ts CHANGED
@@ -8,6 +8,7 @@ export type RsIconFontDisplay = "block" | "swap" | "fallback" | "optional";
8
8
  export type RobosophyMaterialSymbolsOptions = {
9
9
  outputDir?: string;
10
10
  fontDisplay?: RsIconFontDisplay;
11
+ fontVariant?: string;
11
12
  include?: IconInput[];
12
13
  preload?: boolean;
13
14
  roots?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,KAAK,yBAAyB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3C,CAAC;AAuCF,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAqFR;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAgCF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,yBAsC9C;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,CAAC,EAAE,EACxD,OAAO,UAAQ,EACf,WAAW,GAAE,iBAAsC,UAkEpD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAM,GAC7D,iBAAiB,EAAE,CA6BrB;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAM,UAS/D;AAkOD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnD,KAAK,yBAAyB,GAAG;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAAE,CAAC;CAC3C,CAAC;AAiCF,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAsFR;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAmDF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,yBAsC9C;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,CAAC,EAAE,EACxD,OAAO,UAAQ,EACf,WAAW,GAAE,iBAAsC,UAuCpD;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAM,GAC7D,iBAAiB,EAAE,CA6BrB;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,IAAI,CAAC,+BAA+B,EAAE,SAAS,CAAM,UAS/D;AAmOD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
package/dist/vite.js CHANGED
@@ -27,23 +27,19 @@ const familyPackages = {
27
27
  rounded: "@fontsource-variable/material-symbols-rounded",
28
28
  sharp: "@fontsource-variable/material-symbols-sharp"
29
29
  };
30
- const familyFontVariants = {
31
- outlined: "wght",
32
- rounded: "wght",
33
- sharp: "wght"
34
- };
35
30
  const defaultFontDisplay = "swap";
36
31
  const defaultPreload = false;
37
32
  const require$1 = createRequire(import.meta.url);
38
33
  function robosophyMaterialSymbols(options = {}) {
39
34
  const raw = (options.outputDir ?? "").trim().replace(/^\/+/, "");
40
35
  const outputDir = raw.split("/").filter((part) => part && part !== "..").join("/") || "assets";
36
+ const fontVariant = options.fontVariant ?? "full";
41
37
  let config;
42
38
  let cachedAssets = null;
43
39
  let cacheValid = false;
44
40
  async function getAssets() {
45
41
  if (cacheValid && cachedAssets) return cachedAssets;
46
- cachedAssets = await ensureGeneratedAssets(config, options, outputDir);
42
+ cachedAssets = await ensureGeneratedAssets(config, options, outputDir, fontVariant);
47
43
  cacheValid = true;
48
44
  return cachedAssets;
49
45
  }
@@ -108,10 +104,28 @@ function robosophyMaterialSymbols(options = {}) {
108
104
  }
109
105
  };
110
106
  }
111
- async function ensureGeneratedAssets(config, options, outputDir) {
107
+ async function ensureGeneratedAssets(config, options, outputDir, fontVariant) {
112
108
  const usages = await collectMaterialSymbolUsages(config, options);
113
109
  const devMode = config.command === "serve";
114
- const fonts = await generateFontAssets(usages, devMode, config.base, outputDir);
110
+ const fonts = await generateFontAssets(usages, devMode, config.base, outputDir, fontVariant);
111
+ if (config.command === "serve" || config.command === "build") {
112
+ const summary = formatDetectedMaterialSymbols(usages);
113
+ const totalIcons = [...usages.values()].reduce((sum, s) => sum + s.size, 0);
114
+ if (totalIcons > 0) {
115
+ config.logger.info(
116
+ `[robosophy-material-symbols] ${totalIcons} icons detected (variant: ${fontVariant})
117
+ ${summary}`
118
+ );
119
+ for (const font of fonts) {
120
+ const kb = (font.source.length / 1024).toFixed(1);
121
+ config.logger.info(` ${font.family} subset: ${kb} KB (${font.fileName})`);
122
+ }
123
+ } else {
124
+ config.logger.warn(
125
+ "[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option."
126
+ );
127
+ }
128
+ }
115
129
  const css = buildMaterialSymbolsCss(
116
130
  usages,
117
131
  fonts,
@@ -169,33 +183,6 @@ function buildMaterialSymbolsCss(usages, fonts, devMode = false, fontDisplay = d
169
183
  );
170
184
  }
171
185
  lines.push(
172
- ".rs-icon {",
173
- " --rs-icon-color: currentColor;",
174
- " --rs-icon-fill: 0;",
175
- " --rs-icon-grade: 0;",
176
- " --rs-icon-optical-size: 24;",
177
- " --rs-icon-size: 24px;",
178
- " --rs-icon-weight: 400;",
179
- " align-items: center;",
180
- " color: var(--rs-icon-color);",
181
- " display: inline-flex;",
182
- " flex: 0 0 auto;",
183
- ` font-family: "${familyFontNames.outlined}";`,
184
- " font-size: var(--rs-icon-size);",
185
- " font-style: normal;",
186
- ' font-feature-settings: "liga";',
187
- ' -webkit-font-feature-settings: "liga";',
188
- ' font-variation-settings: "FILL" var(--rs-icon-fill), "wght" var(--rs-icon-weight), "GRAD" var(--rs-icon-grade), "opsz" var(--rs-icon-optical-size);',
189
- " font-weight: 400;",
190
- " justify-content: center;",
191
- " direction: ltr;",
192
- " letter-spacing: normal;",
193
- " line-height: 1;",
194
- " text-transform: none;",
195
- " user-select: none;",
196
- " white-space: nowrap;",
197
- " word-wrap: normal;",
198
- "}",
199
186
  `.rs-icon--rounded { font-family: "${familyFontNames.rounded}"; }`,
200
187
  `.rs-icon--sharp { font-family: "${familyFontNames.sharp}"; }`,
201
188
  ".rs-icon--prime::before { content: var(--rs-icon-content); }"
@@ -244,7 +231,7 @@ function injectMaterialSymbolsHtmlLinks(html, assets, options = {}) {
244
231
  return links.length === 0 ? html : html.replace("</head>", `${links.map((link) => ` ${link}`).join("\n")}
245
232
  </head>`);
246
233
  }
247
- async function generateFontAssets(usages, devMode, base, outputDir) {
234
+ async function generateFontAssets(usages, devMode, base, outputDir, fontVariant) {
248
235
  const subsetFont = (await import("subset-font")).default;
249
236
  const fonts = [];
250
237
  for (const family of families) {
@@ -252,7 +239,7 @@ async function generateFontAssets(usages, devMode, base, outputDir) {
252
239
  if (names.length === 0) {
253
240
  continue;
254
241
  }
255
- const sourcePath = resolveFontPath(family);
242
+ const sourcePath = resolveFontPath(family, fontVariant);
256
243
  const source = await readFile(sourcePath);
257
244
  const subset = await subsetFont(source, names.join(" "), {
258
245
  targetFormat: "woff2"
@@ -268,9 +255,9 @@ async function generateFontAssets(usages, devMode, base, outputDir) {
268
255
  }
269
256
  return fonts;
270
257
  }
271
- function resolveFontPath(family) {
258
+ function resolveFontPath(family, variant) {
272
259
  return require$1.resolve(
273
- `${familyPackages[family]}/files/material-symbols-${family}-latin-${familyFontVariants[family]}-normal.woff2`
260
+ `${familyPackages[family]}/files/material-symbols-${family}-latin-${variant}-normal.woff2`
274
261
  );
275
262
  }
276
263
  function fontHref(fileName, devMode, base, outputDir) {
package/dist/vite.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { extname, join, sep } from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\n\nimport type { RsIconFamily } from \"./components/RsIcon\";\n\ntype IconInput = string | { family?: RsIconFamily; name: string };\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\n\nexport type RobosophyMaterialSymbolsOptions = {\n outputDir?: string;\n fontDisplay?: RsIconFontDisplay;\n include?: IconInput[];\n preload?: boolean;\n roots?: string[];\n scan?: boolean;\n};\n\ntype IconUsageMap = Map<RsIconFamily, Set<string>>;\ntype MaterialSymbolsLinkAssets = {\n cssHref: string;\n fonts: Pick<GeneratedFontAsset, \"href\">[];\n};\n\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\nconst defaultFamily: RsIconFamily = \"outlined\";\nconst iconNamePattern = /^[a-z0-9_]+$/;\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\nconst internalIconNames = [\n \"arrow_drop_down\",\n \"arrow_drop_up\",\n \"arrow_left\",\n \"chevron_right\",\n \"close\",\n \"login\",\n \"nest_eco_leaf\",\n];\n\nconst familyFontNames: Record<RsIconFamily, string> = {\n outlined: \"Material Symbols Outlined Variable\",\n rounded: \"Material Symbols Rounded Variable\",\n sharp: \"Material Symbols Sharp Variable\",\n};\n\nconst familyPackages: Record<RsIconFamily, string> = {\n outlined: \"@fontsource-variable/material-symbols-outlined\",\n rounded: \"@fontsource-variable/material-symbols-rounded\",\n sharp: \"@fontsource-variable/material-symbols-sharp\",\n};\n\nconst familyFontVariants: Record<RsIconFamily, string> = {\n outlined: \"wght\",\n rounded: \"wght\",\n sharp: \"wght\",\n};\n\nconst defaultFontDisplay: RsIconFontDisplay = \"swap\";\nconst defaultPreload = false;\nconst require = createRequire(import.meta.url);\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\n const outputDir = raw\n .split(\"/\")\n .filter((part) => part && part !== \"..\")\n .join(\"/\") || \"assets\";\n let config: ResolvedConfig;\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\n let cacheValid = false;\n\n async function getAssets() {\n if (cacheValid && cachedAssets) return cachedAssets;\n cachedAssets = await ensureGeneratedAssets(config, options, outputDir);\n cacheValid = true;\n return cachedAssets;\n }\n\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await getAssets();\n\n return buildMaterialSymbolsHtmlTags(assets, options);\n },\n configureServer(server) {\n server.watcher.on(\"all\", (_event, file) => {\n if (sourceExtensions.has(extname(file))) {\n cacheValid = false;\n }\n });\n server.middlewares.use(async (request, response, next) => {\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\n next();\n return;\n }\n\n try {\n const assets = await getAssets();\n const fileName = decodeURIComponent(\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\n );\n\n if (fileName === \"rs-material-symbols.css\") {\n response.setHeader(\"Content-Type\", \"text/css; charset=utf-8\");\n response.end(assets.css);\n return;\n }\n\n const font = assets.fonts.find((asset) => asset.fileName === fileName);\n\n if (font) {\n response.setHeader(\"Content-Type\", \"font/woff2\");\n response.end(font.source);\n return;\n }\n\n next();\n } catch (error) {\n next(error);\n }\n });\n },\n async generateBundle(_outputOptions, bundle) {\n const assets = await getAssets();\n\n for (const font of assets.fonts) {\n this.emitFile({\n fileName: `${outputDir}/${font.fileName}`,\n name: font.fileName,\n source: font.source,\n type: \"asset\",\n });\n }\n\n this.emitFile({\n fileName: `${outputDir}/rs-material-symbols.css`,\n name: \"rs-material-symbols.css\",\n source: assets.css,\n type: \"asset\",\n });\n },\n };\n}\n\ntype GeneratedFontAsset = {\n family: RsIconFamily;\n fileName: string;\n href: string;\n source: Buffer;\n};\n\ntype GeneratedMaterialSymbolsAssets = {\n css: string;\n cssHref: string;\n fonts: GeneratedFontAsset[];\n};\n\nasync function ensureGeneratedAssets(\n config: ResolvedConfig,\n options: RobosophyMaterialSymbolsOptions,\n outputDir: string,\n) {\n const usages = await collectMaterialSymbolUsages(config, options);\n const devMode = config.command === \"serve\";\n const fonts = await generateFontAssets(usages, devMode, config.base, outputDir);\n const css = buildMaterialSymbolsCss(\n usages,\n fonts,\n devMode,\n options.fontDisplay ?? defaultFontDisplay,\n );\n\n return {\n css,\n cssHref: devMode\n ? \"/@robosophy-material-symbols/rs-material-symbols.css\"\n : withBase(config.base, `${outputDir}/rs-material-symbols.css`),\n fonts,\n };\n}\n\nexport async function collectMaterialSymbolUsages(\n config: Pick<ResolvedConfig, \"root\">,\n options: RobosophyMaterialSymbolsOptions = {},\n) {\n const usages = createUsageMap();\n\n // Register icons used by compiled library components.\n // Prefer the auto-generated manifest; fall back to hardcoded list for older library builds.\n const manifest = await loadIconManifest();\n\n if (manifest) {\n for (const family of families) {\n for (const name of manifest[family] ?? []) {\n addUsage(usages, { family, name });\n }\n }\n } else {\n for (const name of internalIconNames) {\n for (const family of families) {\n addUsage(usages, { family, name });\n }\n }\n }\n\n for (const icon of options.include ?? []) {\n addUsage(usages, typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon);\n }\n\n if (options.scan !== false) {\n const roots = options.roots ?? [join(config.root, \"src\")];\n\n for (const root of roots) {\n for (const filePath of await listSourceFiles(root)) {\n const source = await readFile(filePath, \"utf8\");\n collectFromSource(source, usages);\n }\n }\n }\n\n return usages;\n}\n\nexport function buildMaterialSymbolsCss(\n usages: IconUsageMap,\n fonts: Pick<GeneratedFontAsset, \"family\" | \"fileName\">[],\n devMode = false,\n fontDisplay: RsIconFontDisplay = defaultFontDisplay,\n) {\n const lines: string[] = [];\n\n for (const font of fonts) {\n const fontUrl = devMode\n ? `/@robosophy-material-symbols/${font.fileName}`\n : `./${font.fileName}`;\n\n lines.push(\n \"@font-face {\",\n ` font-family: \"${familyFontNames[font.family]}\";`,\n ` font-display: ${fontDisplay};`,\n \" font-style: normal;\",\n \" font-weight: 100 700;\",\n ` src: url(\"${fontUrl}\") format(\"woff2-variations\");`,\n \"}\",\n );\n }\n\n lines.push(\n \".rs-icon {\",\n \" --rs-icon-color: currentColor;\",\n \" --rs-icon-fill: 0;\",\n \" --rs-icon-grade: 0;\",\n \" --rs-icon-optical-size: 24;\",\n \" --rs-icon-size: 24px;\",\n \" --rs-icon-weight: 400;\",\n \" align-items: center;\",\n \" color: var(--rs-icon-color);\",\n \" display: inline-flex;\",\n \" flex: 0 0 auto;\",\n ` font-family: \"${familyFontNames.outlined}\";`,\n \" font-size: var(--rs-icon-size);\",\n \" font-style: normal;\",\n ' font-feature-settings: \"liga\";',\n ' -webkit-font-feature-settings: \"liga\";',\n ' font-variation-settings: \"FILL\" var(--rs-icon-fill), \"wght\" var(--rs-icon-weight), \"GRAD\" var(--rs-icon-grade), \"opsz\" var(--rs-icon-optical-size);',\n \" font-weight: 400;\",\n \" justify-content: center;\",\n \" direction: ltr;\",\n \" letter-spacing: normal;\",\n \" line-height: 1;\",\n \" text-transform: none;\",\n \" user-select: none;\",\n \" white-space: nowrap;\",\n \" word-wrap: normal;\",\n \"}\",\n `.rs-icon--rounded { font-family: \"${familyFontNames.rounded}\"; }`,\n `.rs-icon--sharp { font-family: \"${familyFontNames.sharp}\"; }`,\n \".rs-icon--prime::before { content: var(--rs-icon-content); }\",\n );\n\n const names = new Set<string>();\n\n for (const family of families) {\n for (const name of usages.get(family) ?? []) {\n names.add(name);\n }\n }\n\n for (const name of [...names].sort()) {\n lines.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function buildMaterialSymbolsHtmlTags(\n assets: MaterialSymbolsLinkAssets,\n options: Pick<RobosophyMaterialSymbolsOptions, \"preload\"> = {},\n): HtmlTagDescriptor[] {\n const tags: HtmlTagDescriptor[] = [];\n\n if (options.preload ?? defaultPreload) {\n for (const font of assets.fonts) {\n tags.push({\n attrs: {\n as: \"font\",\n crossorigin: \"\",\n href: font.href,\n rel: \"preload\",\n type: \"font/woff2\",\n },\n tag: \"link\",\n injectTo: \"head\",\n });\n }\n }\n\n tags.push({\n attrs: {\n href: assets.cssHref,\n rel: \"stylesheet\",\n },\n tag: \"link\",\n injectTo: \"head\",\n });\n\n return tags;\n}\n\nexport function injectMaterialSymbolsHtmlLinks(\n html: string,\n assets: MaterialSymbolsLinkAssets,\n options: Pick<RobosophyMaterialSymbolsOptions, \"preload\"> = {},\n) {\n const links = buildMaterialSymbolsHtmlTags(assets, options)\n .map(formatHtmlLinkTag)\n .filter((link) => !html.includes(`href=\"${getLinkHref(link)}\"`));\n\n return links.length === 0\n ? html\n : html.replace(\"</head>\", `${links.map((link) => ` ${link}`).join(\"\\n\")}\\n</head>`);\n}\n\nasync function generateFontAssets(\n usages: IconUsageMap,\n devMode: boolean,\n base: string,\n outputDir: string,\n): Promise<GeneratedFontAsset[]> {\n const subsetFont = (await import(\"subset-font\")).default;\n const fonts: GeneratedFontAsset[] = [];\n\n for (const family of families) {\n const names = [...(usages.get(family) ?? [])].sort();\n\n if (names.length === 0) {\n continue;\n }\n\n const sourcePath = resolveFontPath(family);\n const source = await readFile(sourcePath);\n const subset = await subsetFont(source, names.join(\" \"), {\n targetFormat: \"woff2\",\n });\n const hash = createHash(\"sha256\").update(subset).digest(\"hex\").slice(0, 8);\n const fileName = `rs-material-symbols-${family}-${hash}.woff2`;\n\n fonts.push({\n family,\n fileName,\n href: fontHref(fileName, devMode, base, outputDir),\n source: subset,\n });\n }\n\n return fonts;\n}\n\nfunction resolveFontPath(family: RsIconFamily) {\n return require.resolve(\n `${familyPackages[family]}/files/material-symbols-${family}-latin-${familyFontVariants[family]}-normal.woff2`,\n );\n}\n\nfunction fontHref(fileName: string, devMode: boolean, base: string, outputDir: string) {\n return devMode\n ? `/@robosophy-material-symbols/${fileName}`\n : withBase(base, `${outputDir}/${fileName}`);\n}\n\nfunction formatHtmlLinkTag(tag: HtmlTagDescriptor) {\n const attrs = Object.entries(tag.attrs ?? {})\n .map(([name, value]) => (value === \"\" ? name : `${name}=\"${value}\"`))\n .join(\" \");\n\n return `<${tag.tag}${attrs ? ` ${attrs}` : \"\"}>`;\n}\n\nfunction getLinkHref(link: string) {\n return link.match(/\\bhref=\"([^\"]+)\"/)?.[1] ?? \"\";\n}\n\nfunction collectFromSource(source: string, usages: IconUsageMap) {\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\n let tagMatch: RegExpExecArray | null;\n\n while ((tagMatch = rsIconTagPattern.exec(source))) {\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\n const rawName = attrs.name ?? attrs[\":name\"];\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\n\n if (rawName) {\n const familyList = resolveFamilies(rawFamily, hasFamily);\n const names = resolveNames(rawName);\n\n for (const family of familyList) {\n for (const name of names) {\n addUsage(usages, { family, name });\n }\n }\n }\n }\n\n const primeHelperPattern =\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\n let helperMatch: RegExpExecArray | null;\n\n while ((helperMatch = primeHelperPattern.exec(source))) {\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\n addUsage(usages, {\n family: family ?? defaultFamily,\n name: helperMatch[1] ?? \"\",\n });\n }\n\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\n let objectMatch: RegExpExecArray | null;\n\n while ((objectMatch = objectIconPattern.exec(source))) {\n addUsage(usages, {\n family: defaultFamily,\n name: objectMatch[1] ?? \"\",\n });\n }\n}\n\nfunction parseStaticAttributes(source: string) {\n const attrs: Record<string, string> = {};\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrPattern.exec(source))) {\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\n }\n\n return attrs;\n}\n\nfunction unwrapStaticValue(value: string) {\n return value.replace(/^['\"](.+)['\"]$/, \"$1\");\n}\n\nfunction addUsage(usages: IconUsageMap, icon: { family?: RsIconFamily; name: string }) {\n const family = icon.family ?? defaultFamily;\n const name = icon.name.trim();\n\n if (!families.includes(family) || !iconNamePattern.test(name)) {\n return;\n }\n\n usages.get(family)?.add(name);\n}\n\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\n try {\n const dir = join(fileURLToPath(import.meta.url), \"..\");\n const manifestPath = join(dir, \"icon-manifest.json\");\n const source = await readFile(manifestPath, \"utf8\");\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\n } catch {\n return null;\n }\n}\n\nfunction toFamily(value?: string): RsIconFamily | undefined {\n const normalized = value ? unwrapStaticValue(value) : \"\";\n return families.includes(normalized as RsIconFamily)\n ? (normalized as RsIconFamily)\n : undefined;\n}\n\nfunction resolveNames(rawName: string): string[] {\n const stringLiterals = /[\"']([a-z0-9_]+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const names: string[] = [];\n\n while ((strMatch = stringLiterals.exec(rawName))) {\n const candidate = strMatch[1] ?? \"\";\n if (iconNamePattern.test(candidate)) {\n names.push(candidate);\n }\n }\n\n if (names.length === 0) {\n const name = unwrapStaticValue(rawName);\n if (iconNamePattern.test(name)) {\n names.push(name);\n }\n }\n\n return names;\n}\n\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\n const family = toFamily(rawFamily);\n if (family) return [family];\n\n const stringLiterals = /[\"'](\\w+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const found = new Set<RsIconFamily>();\n\n while ((strMatch = stringLiterals.exec(rawFamily))) {\n const candidate = strMatch[1] ?? \"\";\n const f = toFamily(candidate);\n if (f) {\n found.add(f);\n }\n }\n\n if (found.size > 0) return [...found];\n\n if (!hasFamily) return [defaultFamily];\n\n return [...families];\n}\n\nfunction createUsageMap(): IconUsageMap {\n return new Map(families.map((family) => [family, new Set<string>()]));\n}\n\nasync function listSourceFiles(root: string): Promise<string[]> {\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(root, entry.name);\n\n if (entry.isDirectory()) {\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\n }\n\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\n }),\n );\n\n return files.flat();\n } catch {\n return [];\n }\n}\n\nfunction withBase(base: string, path: string) {\n const cleanBase = base.endsWith(\"/\") ? base : `${base}/`;\n return `${cleanBase}${path}`.replaceAll(`${sep}`, \"/\");\n}\n\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap) {\n return families\n .map((family) => `${family}: ${[...(usages.get(family) ?? [])].sort().join(\", \")}`)\n .join(\"\\n\");\n}\n"],"names":["require"],"mappings":"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"}
1
+ {"version":3,"file":"vite.js","sources":["../src/vite.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { readdir, readFile } from \"node:fs/promises\";\nimport { extname, join, sep } from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\nimport type { HtmlTagDescriptor, IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\n\nimport type { RsIconFamily } from \"./components/RsIcon\";\n\ntype IconInput = string | { family?: RsIconFamily; name: string };\nexport type RsIconFontDisplay = \"block\" | \"swap\" | \"fallback\" | \"optional\";\n\nexport type RobosophyMaterialSymbolsOptions = {\n outputDir?: string;\n fontDisplay?: RsIconFontDisplay;\n fontVariant?: string;\n include?: IconInput[];\n preload?: boolean;\n roots?: string[];\n scan?: boolean;\n};\n\ntype IconUsageMap = Map<RsIconFamily, Set<string>>;\ntype MaterialSymbolsLinkAssets = {\n cssHref: string;\n fonts: Pick<GeneratedFontAsset, \"href\">[];\n};\n\nconst families = [\"outlined\", \"rounded\", \"sharp\"] as const satisfies readonly RsIconFamily[];\nconst defaultFamily: RsIconFamily = \"outlined\";\nconst iconNamePattern = /^[a-z0-9_]+$/;\nconst sourceExtensions = new Set([\".js\", \".jsx\", \".mjs\", \".ts\", \".tsx\", \".vue\"]);\nconst skippedDirs = new Set([\".git\", \"dist\", \"node_modules\", \"storybook-static\"]);\nconst internalIconNames = [\n \"arrow_drop_down\",\n \"arrow_drop_up\",\n \"arrow_left\",\n \"chevron_right\",\n \"close\",\n \"login\",\n \"nest_eco_leaf\",\n];\n\nconst familyFontNames: Record<RsIconFamily, string> = {\n outlined: \"Material Symbols Outlined Variable\",\n rounded: \"Material Symbols Rounded Variable\",\n sharp: \"Material Symbols Sharp Variable\",\n};\n\nconst familyPackages: Record<RsIconFamily, string> = {\n outlined: \"@fontsource-variable/material-symbols-outlined\",\n rounded: \"@fontsource-variable/material-symbols-rounded\",\n sharp: \"@fontsource-variable/material-symbols-sharp\",\n};\n\nconst defaultFontDisplay: RsIconFontDisplay = \"swap\";\nconst defaultPreload = false;\nconst require = createRequire(import.meta.url);\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n const raw = (options.outputDir ?? \"\").trim().replace(/^\\/+/, \"\");\n const outputDir = raw\n .split(\"/\")\n .filter((part) => part && part !== \"..\")\n .join(\"/\") || \"assets\";\n const fontVariant = options.fontVariant ?? \"full\";\n let config: ResolvedConfig;\n let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\n let cacheValid = false;\n\n async function getAssets() {\n if (cacheValid && cachedAssets) return cachedAssets;\n cachedAssets = await ensureGeneratedAssets(config, options, outputDir, fontVariant);\n cacheValid = true;\n return cachedAssets;\n }\n\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await getAssets();\n\n return buildMaterialSymbolsHtmlTags(assets, options);\n },\n configureServer(server) {\n server.watcher.on(\"all\", (_event, file) => {\n if (sourceExtensions.has(extname(file))) {\n cacheValid = false;\n }\n });\n server.middlewares.use(async (request, response, next) => {\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\n next();\n return;\n }\n\n try {\n const assets = await getAssets();\n const fileName = decodeURIComponent(\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\n );\n\n if (fileName === \"rs-material-symbols.css\") {\n response.setHeader(\"Content-Type\", \"text/css; charset=utf-8\");\n response.end(assets.css);\n return;\n }\n\n const font = assets.fonts.find((asset) => asset.fileName === fileName);\n\n if (font) {\n response.setHeader(\"Content-Type\", \"font/woff2\");\n response.end(font.source);\n return;\n }\n\n next();\n } catch (error) {\n next(error);\n }\n });\n },\n async generateBundle(_outputOptions, bundle) {\n const assets = await getAssets();\n\n for (const font of assets.fonts) {\n this.emitFile({\n fileName: `${outputDir}/${font.fileName}`,\n name: font.fileName,\n source: font.source,\n type: \"asset\",\n });\n }\n\n this.emitFile({\n fileName: `${outputDir}/rs-material-symbols.css`,\n name: \"rs-material-symbols.css\",\n source: assets.css,\n type: \"asset\",\n });\n },\n };\n}\n\ntype GeneratedFontAsset = {\n family: RsIconFamily;\n fileName: string;\n href: string;\n source: Buffer;\n};\n\ntype GeneratedMaterialSymbolsAssets = {\n css: string;\n cssHref: string;\n fonts: GeneratedFontAsset[];\n};\n\nasync function ensureGeneratedAssets(\n config: ResolvedConfig,\n options: RobosophyMaterialSymbolsOptions,\n outputDir: string,\n fontVariant: string,\n) {\n const usages = await collectMaterialSymbolUsages(config, options);\n const devMode = config.command === \"serve\";\n const fonts = await generateFontAssets(usages, devMode, config.base, outputDir, fontVariant);\n\n if (config.command === \"serve\" || config.command === \"build\") {\n const summary = formatDetectedMaterialSymbols(usages);\n const totalIcons = [...usages.values()].reduce((sum, s) => sum + s.size, 0);\n if (totalIcons > 0) {\n config.logger.info(\n `[robosophy-material-symbols] ${totalIcons} icons detected (variant: ${fontVariant})\\n${summary}`,\n );\n for (const font of fonts) {\n const kb = (font.source.length / 1024).toFixed(1);\n config.logger.info(` ${font.family} subset: ${kb} KB (${font.fileName})`);\n }\n } else {\n config.logger.warn(\n \"[robosophy-material-symbols] No Material Symbols icons detected in source. Add them via the include option.\",\n );\n }\n }\n const css = buildMaterialSymbolsCss(\n usages,\n fonts,\n devMode,\n options.fontDisplay ?? defaultFontDisplay,\n );\n\n return {\n css,\n cssHref: devMode\n ? \"/@robosophy-material-symbols/rs-material-symbols.css\"\n : withBase(config.base, `${outputDir}/rs-material-symbols.css`),\n fonts,\n };\n}\n\nexport async function collectMaterialSymbolUsages(\n config: Pick<ResolvedConfig, \"root\">,\n options: RobosophyMaterialSymbolsOptions = {},\n) {\n const usages = createUsageMap();\n\n // Register icons used by compiled library components.\n // Prefer the auto-generated manifest; fall back to hardcoded list for older library builds.\n const manifest = await loadIconManifest();\n\n if (manifest) {\n for (const family of families) {\n for (const name of manifest[family] ?? []) {\n addUsage(usages, { family, name });\n }\n }\n } else {\n for (const name of internalIconNames) {\n for (const family of families) {\n addUsage(usages, { family, name });\n }\n }\n }\n\n for (const icon of options.include ?? []) {\n addUsage(usages, typeof icon === \"string\" ? { family: defaultFamily, name: icon } : icon);\n }\n\n if (options.scan !== false) {\n const roots = options.roots ?? [join(config.root, \"src\")];\n\n for (const root of roots) {\n for (const filePath of await listSourceFiles(root)) {\n const source = await readFile(filePath, \"utf8\");\n collectFromSource(source, usages);\n }\n }\n }\n\n return usages;\n}\n\nexport function buildMaterialSymbolsCss(\n usages: IconUsageMap,\n fonts: Pick<GeneratedFontAsset, \"family\" | \"fileName\">[],\n devMode = false,\n fontDisplay: RsIconFontDisplay = defaultFontDisplay,\n) {\n const lines: string[] = [];\n\n for (const font of fonts) {\n const fontUrl = devMode\n ? `/@robosophy-material-symbols/${font.fileName}`\n : `./${font.fileName}`;\n\n lines.push(\n \"@font-face {\",\n ` font-family: \"${familyFontNames[font.family]}\";`,\n ` font-display: ${fontDisplay};`,\n \" font-style: normal;\",\n \" font-weight: 100 700;\",\n ` src: url(\"${fontUrl}\") format(\"woff2-variations\");`,\n \"}\",\n );\n }\n\n lines.push(\n `.rs-icon--rounded { font-family: \"${familyFontNames.rounded}\"; }`,\n `.rs-icon--sharp { font-family: \"${familyFontNames.sharp}\"; }`,\n \".rs-icon--prime::before { content: var(--rs-icon-content); }\",\n );\n\n const names = new Set<string>();\n\n for (const family of families) {\n for (const name of usages.get(family) ?? []) {\n names.add(name);\n }\n }\n\n for (const name of [...names].sort()) {\n lines.push(`.rs-icon-${name} { --rs-icon-content: \"${name}\"; }`);\n }\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function buildMaterialSymbolsHtmlTags(\n assets: MaterialSymbolsLinkAssets,\n options: Pick<RobosophyMaterialSymbolsOptions, \"preload\"> = {},\n): HtmlTagDescriptor[] {\n const tags: HtmlTagDescriptor[] = [];\n\n if (options.preload ?? defaultPreload) {\n for (const font of assets.fonts) {\n tags.push({\n attrs: {\n as: \"font\",\n crossorigin: \"\",\n href: font.href,\n rel: \"preload\",\n type: \"font/woff2\",\n },\n tag: \"link\",\n injectTo: \"head\",\n });\n }\n }\n\n tags.push({\n attrs: {\n href: assets.cssHref,\n rel: \"stylesheet\",\n },\n tag: \"link\",\n injectTo: \"head\",\n });\n\n return tags;\n}\n\nexport function injectMaterialSymbolsHtmlLinks(\n html: string,\n assets: MaterialSymbolsLinkAssets,\n options: Pick<RobosophyMaterialSymbolsOptions, \"preload\"> = {},\n) {\n const links = buildMaterialSymbolsHtmlTags(assets, options)\n .map(formatHtmlLinkTag)\n .filter((link) => !html.includes(`href=\"${getLinkHref(link)}\"`));\n\n return links.length === 0\n ? html\n : html.replace(\"</head>\", `${links.map((link) => ` ${link}`).join(\"\\n\")}\\n</head>`);\n}\n\nasync function generateFontAssets(\n usages: IconUsageMap,\n devMode: boolean,\n base: string,\n outputDir: string,\n fontVariant: string,\n): Promise<GeneratedFontAsset[]> {\n const subsetFont = (await import(\"subset-font\")).default;\n const fonts: GeneratedFontAsset[] = [];\n\n for (const family of families) {\n const names = [...(usages.get(family) ?? [])].sort();\n\n if (names.length === 0) {\n continue;\n }\n\n const sourcePath = resolveFontPath(family, fontVariant);\n const source = await readFile(sourcePath);\n const subset = await subsetFont(source, names.join(\" \"), {\n targetFormat: \"woff2\",\n });\n const hash = createHash(\"sha256\").update(subset).digest(\"hex\").slice(0, 8);\n const fileName = `rs-material-symbols-${family}-${hash}.woff2`;\n\n fonts.push({\n family,\n fileName,\n href: fontHref(fileName, devMode, base, outputDir),\n source: subset,\n });\n }\n\n return fonts;\n}\n\nfunction resolveFontPath(family: RsIconFamily, variant: string) {\n return require.resolve(\n `${familyPackages[family]}/files/material-symbols-${family}-latin-${variant}-normal.woff2`,\n );\n}\n\nfunction fontHref(fileName: string, devMode: boolean, base: string, outputDir: string) {\n return devMode\n ? `/@robosophy-material-symbols/${fileName}`\n : withBase(base, `${outputDir}/${fileName}`);\n}\n\nfunction formatHtmlLinkTag(tag: HtmlTagDescriptor) {\n const attrs = Object.entries(tag.attrs ?? {})\n .map(([name, value]) => (value === \"\" ? name : `${name}=\"${value}\"`))\n .join(\" \");\n\n return `<${tag.tag}${attrs ? ` ${attrs}` : \"\"}>`;\n}\n\nfunction getLinkHref(link: string) {\n return link.match(/\\bhref=\"([^\"]+)\"/)?.[1] ?? \"\";\n}\n\nfunction collectFromSource(source: string, usages: IconUsageMap) {\n const rsIconTagPattern = /<RsIcon\\b([^>]*)>/g;\n let tagMatch: RegExpExecArray | null;\n\n while ((tagMatch = rsIconTagPattern.exec(source))) {\n const attrs = parseStaticAttributes(tagMatch[1] ?? \"\");\n const rawName = attrs.name ?? attrs[\":name\"];\n const hasFamily = \"family\" in attrs || \":family\" in attrs;\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\n\n if (rawName) {\n const familyList = resolveFamilies(rawFamily, hasFamily);\n const names = resolveNames(rawName);\n\n for (const family of familyList) {\n for (const name of names) {\n addUsage(usages, { family, name });\n }\n }\n }\n }\n\n const primeHelperPattern =\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\n let helperMatch: RegExpExecArray | null;\n\n while ((helperMatch = primeHelperPattern.exec(source))) {\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\n addUsage(usages, {\n family: family ?? defaultFamily,\n name: helperMatch[1] ?? \"\",\n });\n }\n\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\n let objectMatch: RegExpExecArray | null;\n\n while ((objectMatch = objectIconPattern.exec(source))) {\n addUsage(usages, {\n family: defaultFamily,\n name: objectMatch[1] ?? \"\",\n });\n }\n}\n\nfunction parseStaticAttributes(source: string) {\n const attrs: Record<string, string> = {};\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrPattern.exec(source))) {\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\n }\n\n return attrs;\n}\n\nfunction unwrapStaticValue(value: string) {\n return value.replace(/^['\"](.+)['\"]$/, \"$1\");\n}\n\nfunction addUsage(usages: IconUsageMap, icon: { family?: RsIconFamily; name: string }) {\n const family = icon.family ?? defaultFamily;\n const name = icon.name.trim();\n\n if (!families.includes(family) || !iconNamePattern.test(name)) {\n return;\n }\n\n usages.get(family)?.add(name);\n}\n\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\n try {\n const dir = join(fileURLToPath(import.meta.url), \"..\");\n const manifestPath = join(dir, \"icon-manifest.json\");\n const source = await readFile(manifestPath, \"utf8\");\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\n } catch {\n return null;\n }\n}\n\nfunction toFamily(value?: string): RsIconFamily | undefined {\n const normalized = value ? unwrapStaticValue(value) : \"\";\n return families.includes(normalized as RsIconFamily)\n ? (normalized as RsIconFamily)\n : undefined;\n}\n\nfunction resolveNames(rawName: string): string[] {\n const stringLiterals = /[\"']([a-z0-9_]+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const names: string[] = [];\n\n while ((strMatch = stringLiterals.exec(rawName))) {\n const candidate = strMatch[1] ?? \"\";\n if (iconNamePattern.test(candidate)) {\n names.push(candidate);\n }\n }\n\n if (names.length === 0) {\n const name = unwrapStaticValue(rawName);\n if (iconNamePattern.test(name)) {\n names.push(name);\n }\n }\n\n return names;\n}\n\nfunction resolveFamilies(rawFamily: string, hasFamily = true): RsIconFamily[] {\n const family = toFamily(rawFamily);\n if (family) return [family];\n\n const stringLiterals = /[\"'](\\w+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const found = new Set<RsIconFamily>();\n\n while ((strMatch = stringLiterals.exec(rawFamily))) {\n const candidate = strMatch[1] ?? \"\";\n const f = toFamily(candidate);\n if (f) {\n found.add(f);\n }\n }\n\n if (found.size > 0) return [...found];\n\n if (!hasFamily) return [defaultFamily];\n\n return [...families];\n}\n\nfunction createUsageMap(): IconUsageMap {\n return new Map(families.map((family) => [family, new Set<string>()]));\n}\n\nasync function listSourceFiles(root: string): Promise<string[]> {\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(root, entry.name);\n\n if (entry.isDirectory()) {\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\n }\n\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\n }),\n );\n\n return files.flat();\n } catch {\n return [];\n }\n}\n\nfunction withBase(base: string, path: string) {\n const cleanBase = base.endsWith(\"/\") ? base : `${base}/`;\n return `${cleanBase}${path}`.replaceAll(`${sep}`, \"/\");\n}\n\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap) {\n return families\n .map((family) => `${family}: ${[...(usages.get(family) ?? [])].sort().join(\", \")}`)\n .join(\"\\n\");\n}\n"],"names":["require"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robosophy/ui-vue",
3
- "version": "1.0.14",
3
+ "version": "1.0.16",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://robosophy.gitlab.io/robosophy-basf/robosophy-library/",