@robosophy/ui-vue 0.0.3 → 0.0.4

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/README.md CHANGED
@@ -146,6 +146,31 @@ export default defineConfig({
146
146
  });
147
147
  ```
148
148
 
149
+ El plugin escanea usos estaticos de `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
150
+ objetos con `icon: "..."`. En build emite fuentes locales subseteadas por familia,
151
+ preload de esas fuentes y `font-display: block` para evitar que se vea brevemente el
152
+ texto del ligature antes de que cargue el icono.
153
+
154
+ Si un icono se calcula en runtime, declaralo en `include`:
155
+
156
+ ```ts
157
+ robosophyMaterialSymbols({
158
+ include: [
159
+ "home",
160
+ { family: "rounded", name: "settings" },
161
+ ],
162
+ });
163
+ ```
164
+
165
+ Tambien se puede ajustar la estrategia de carga si una app lo necesita:
166
+
167
+ ```ts
168
+ robosophyMaterialSymbols({
169
+ fontDisplay: "optional",
170
+ preload: false,
171
+ });
172
+ ```
173
+
149
174
  Para APIs de PrimeVue que reciben `icon` como string, usa el helper:
150
175
 
151
176
  ```vue
package/components.md CHANGED
@@ -53,7 +53,9 @@ export default defineConfig({
53
53
 
54
54
  ## RsIcon
55
55
 
56
- Use for Material Symbols. The Vite plugin generates local subset fonts for only the detected icons.
56
+ Use for Material Symbols. The Vite plugin generates local subset fonts for only the detected
57
+ icons, preloads those fonts in build HTML, and defaults to `font-display: block` to avoid
58
+ ligature text flashing before the icon font is ready.
57
59
 
58
60
  ```vue
59
61
  <template>
@@ -63,7 +65,9 @@ Use for Material Symbols. The Vite plugin generates local subset fonts for only
63
65
  </template>
64
66
  ```
65
67
 
66
- For dynamic icon names that the scanner cannot see, add them to `robosophyMaterialSymbols({ include: [...] })`.
68
+ For dynamic icon names that the scanner cannot see, add them to
69
+ `robosophyMaterialSymbols({ include: [...] })`. Use `preload: false` or
70
+ `fontDisplay: "optional"` only when an app has a specific loading-policy reason.
67
71
 
68
72
  ## RsSidebar
69
73
 
package/dist/vite.d.ts CHANGED
@@ -1,23 +1,33 @@
1
- import type { Plugin, ResolvedConfig } from "vite";
1
+ import type { HtmlTagDescriptor, Plugin, ResolvedConfig } from "vite";
2
2
  import type { RsIconFamily } from "./components/RsIcon";
3
3
  type IconInput = string | {
4
4
  family?: RsIconFamily;
5
5
  name: string;
6
6
  };
7
+ export type RsIconFontDisplay = "block" | "swap" | "fallback" | "optional";
7
8
  export type RobosophyMaterialSymbolsOptions = {
9
+ fontDisplay?: RsIconFontDisplay;
8
10
  include?: IconInput[];
11
+ preload?: boolean;
9
12
  roots?: string[];
10
13
  scan?: boolean;
11
14
  };
12
15
  type IconUsageMap = Map<RsIconFamily, Set<string>>;
16
+ type MaterialSymbolsLinkAssets = {
17
+ cssHref: string;
18
+ fonts: Pick<GeneratedFontAsset, "href">[];
19
+ };
13
20
  export declare function robosophyMaterialSymbols(options?: RobosophyMaterialSymbolsOptions): Plugin;
14
21
  type GeneratedFontAsset = {
15
22
  family: RsIconFamily;
16
23
  fileName: string;
24
+ href: string;
17
25
  source: Buffer;
18
26
  };
19
27
  export declare function collectMaterialSymbolUsages(config: Pick<ResolvedConfig, "root">, options?: RobosophyMaterialSymbolsOptions): Promise<IconUsageMap>;
20
- export declare function buildMaterialSymbolsCss(usages: IconUsageMap, fonts: Pick<GeneratedFontAsset, "family" | "fileName">[], devMode?: boolean): string;
28
+ export declare function buildMaterialSymbolsCss(usages: IconUsageMap, fonts: Pick<GeneratedFontAsset, "family" | "fileName">[], devMode?: boolean, fontDisplay?: RsIconFontDisplay): string;
29
+ export declare function buildMaterialSymbolsHtmlTags(assets: MaterialSymbolsLinkAssets, options?: Pick<RobosophyMaterialSymbolsOptions, "preload">): HtmlTagDescriptor[];
30
+ export declare function injectMaterialSymbolsHtmlLinks(html: string, assets: MaterialSymbolsLinkAssets, options?: Pick<RobosophyMaterialSymbolsOptions, "preload">): string;
21
31
  export declare function formatDetectedMaterialSymbols(usages: IconUsageMap): string;
22
32
  export {};
23
33
  //# sourceMappingURL=vite.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE7E,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;AAElE,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;IACtB,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;AA+BnD,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,+BAAoC,GAC5C,MAAM,CAoFR;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AA0BF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,yBAwB9C;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,UAAU,CAAC,EAAE,EACxD,OAAO,UAAQ,UA+DhB;AA0ID,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAIA,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,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,CAuER;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;AA+BF,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EACpC,OAAO,GAAE,+BAAoC,yBAwB9C;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,UA+DpD;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;AAiKD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
package/dist/vite.js CHANGED
@@ -1,8 +1,8 @@
1
- import { createHash as S } from "node:crypto";
2
- import { readFile as p, readdir as x } from "node:fs/promises";
3
- import { join as b, extname as F, sep as j } from "node:path";
4
- import { createRequire as M } from "node:module";
5
- const m = ["outlined", "rounded", "sharp"], f = "outlined", N = /^[a-z0-9_]+$/, _ = /* @__PURE__ */ new Set([".js", ".jsx", ".mjs", ".ts", ".tsx", ".vue"]), P = /* @__PURE__ */ new Set([".git", "dist", "node_modules", "storybook-static"]), z = [
1
+ import { createHash as M } from "node:crypto";
2
+ import { readFile as w, readdir as x } from "node:fs/promises";
3
+ import { join as g, extname as _, sep as H } from "node:path";
4
+ import { createRequire as N } from "node:module";
5
+ const m = ["outlined", "rounded", "sharp"], f = "outlined", P = /^[a-z0-9_]+$/, k = /* @__PURE__ */ new Set([".js", ".jsx", ".mjs", ".ts", ".tsx", ".vue"]), z = /* @__PURE__ */ new Set([".git", "dist", "node_modules", "storybook-static"]), I = [
6
6
  "arrow_drop_down",
7
7
  "arrow_drop_up",
8
8
  "arrow_left",
@@ -14,118 +14,115 @@ const m = ["outlined", "rounded", "sharp"], f = "outlined", N = /^[a-z0-9_]+$/,
14
14
  outlined: "Material Symbols Outlined Variable",
15
15
  rounded: "Material Symbols Rounded Variable",
16
16
  sharp: "Material Symbols Sharp Variable"
17
- }, I = {
17
+ }, T = {
18
18
  outlined: "@fontsource-variable/material-symbols-outlined",
19
19
  rounded: "@fontsource-variable/material-symbols-rounded",
20
20
  sharp: "@fontsource-variable/material-symbols-sharp"
21
- }, H = M(import.meta.url);
22
- function G(t = {}) {
23
- let s;
21
+ }, D = {
22
+ outlined: "wght",
23
+ rounded: "full",
24
+ sharp: "full"
25
+ }, $ = "block", R = !0, A = N(import.meta.url);
26
+ function Z(t = {}) {
27
+ let e;
24
28
  return {
25
29
  name: "robosophy-material-symbols",
26
- async configResolved(n) {
27
- s = n;
30
+ async configResolved(o) {
31
+ e = o;
28
32
  },
29
33
  async transformIndexHtml() {
30
- return [
31
- {
32
- attrs: {
33
- href: (await y(s, t)).cssHref,
34
- rel: "stylesheet"
35
- },
36
- tag: "link",
37
- injectTo: "head"
38
- }
39
- ];
34
+ const o = await h(e, t);
35
+ return v(o, t);
40
36
  },
41
- configureServer(n) {
42
- n.middlewares.use(async (e, a, o) => {
43
- if (!e.url?.startsWith("/@robosophy-material-symbols/")) {
44
- o();
37
+ configureServer(o) {
38
+ o.middlewares.use(async (s, n, a) => {
39
+ if (!s.url?.startsWith("/@robosophy-material-symbols/")) {
40
+ a();
45
41
  return;
46
42
  }
47
43
  try {
48
- const r = await y(s, t), i = decodeURIComponent(
49
- e.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
44
+ const r = await h(e, t), i = decodeURIComponent(
45
+ s.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
50
46
  );
51
47
  if (i === "rs-material-symbols.css") {
52
- a.setHeader("Content-Type", "text/css; charset=utf-8"), a.end(r.css);
48
+ n.setHeader("Content-Type", "text/css; charset=utf-8"), n.end(r.css);
53
49
  return;
54
50
  }
55
51
  const c = r.fonts.find((l) => l.fileName === i);
56
52
  if (c) {
57
- a.setHeader("Content-Type", "font/woff2"), a.end(c.source);
53
+ n.setHeader("Content-Type", "font/woff2"), n.end(c.source);
58
54
  return;
59
55
  }
60
- o();
56
+ a();
61
57
  } catch (r) {
62
- o(r);
58
+ a(r);
63
59
  }
64
60
  });
65
61
  },
66
- async generateBundle(n, e) {
67
- const a = await y(s, t);
68
- for (const o of a.fonts)
62
+ async generateBundle(o, s) {
63
+ const n = await h(e, t);
64
+ for (const a of n.fonts)
69
65
  this.emitFile({
70
- fileName: `assets/${o.fileName}`,
71
- name: o.fileName,
72
- source: o.source,
66
+ fileName: `assets/${a.fileName}`,
67
+ name: a.fileName,
68
+ source: a.source,
73
69
  type: "asset"
74
70
  });
75
71
  this.emitFile({
76
72
  fileName: "assets/rs-material-symbols.css",
77
73
  name: "rs-material-symbols.css",
78
- source: a.css,
74
+ source: n.css,
79
75
  type: "asset"
80
76
  });
81
- for (const o of Object.values(e))
82
- if (o.type === "asset" && o.fileName.endsWith(".html")) {
83
- const r = String(o.source), i = $(s.base, "assets/rs-material-symbols.css");
84
- o.source = r.includes(i) ? r : r.replace("</head>", ` <link rel="stylesheet" href="${i}">
85
- </head>`);
86
- }
77
+ for (const a of Object.values(s))
78
+ a.type === "asset" && a.fileName.endsWith(".html") && (a.source = U(String(a.source), n, t));
87
79
  }
88
80
  };
89
81
  }
90
- async function y(t, s) {
91
- const n = await R(t, s), e = await A(n), a = t.command === "serve";
82
+ async function h(t, e) {
83
+ const o = await C(t, e), s = t.command === "serve", n = await V(o, s, t.base);
92
84
  return {
93
- css: k(n, e, a),
94
- cssHref: a ? "/@robosophy-material-symbols/rs-material-symbols.css" : $(t.base, "assets/rs-material-symbols.css"),
95
- fonts: e
85
+ css: L(
86
+ o,
87
+ n,
88
+ s,
89
+ e.fontDisplay ?? $
90
+ ),
91
+ cssHref: s ? "/@robosophy-material-symbols/rs-material-symbols.css" : F(t.base, "assets/rs-material-symbols.css"),
92
+ fonts: n
96
93
  };
97
94
  }
98
- async function R(t, s = {}) {
99
- const n = B();
100
- for (const e of z)
101
- u(n, { family: f, name: e });
102
- for (const e of s.include ?? [])
103
- u(n, typeof e == "string" ? { family: f, name: e } : e);
104
- if (s.scan !== !1) {
105
- const e = s.roots ?? [b(t.root, "src")];
106
- for (const a of e)
107
- for (const o of await g(a)) {
108
- const r = await p(o, "utf8");
109
- T(r, n);
95
+ async function C(t, e = {}) {
96
+ const o = J();
97
+ for (const s of I)
98
+ u(o, { family: f, name: s });
99
+ for (const s of e.include ?? [])
100
+ u(o, typeof s == "string" ? { family: f, name: s } : s);
101
+ if (e.scan !== !1) {
102
+ const s = e.roots ?? [g(t.root, "src")];
103
+ for (const n of s)
104
+ for (const a of await j(n)) {
105
+ const r = await w(a, "utf8");
106
+ q(r, o);
110
107
  }
111
108
  }
112
- return n;
109
+ return o;
113
110
  }
114
- function k(t, s, n = !1) {
115
- const e = [];
116
- for (const o of s) {
117
- const r = n ? `/@robosophy-material-symbols/${o.fileName}` : `./${o.fileName}`;
118
- e.push(
111
+ function L(t, e, o = !1, s = $) {
112
+ const n = [];
113
+ for (const r of e) {
114
+ const i = o ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
115
+ n.push(
119
116
  "@font-face {",
120
- ` font-family: "${d[o.family]}";`,
121
- " font-display: swap;",
117
+ ` font-family: "${d[r.family]}";`,
118
+ ` font-display: ${s};`,
122
119
  " font-style: normal;",
123
120
  " font-weight: 100 700;",
124
- ` src: url("${r}") format("woff2-variations");`,
121
+ ` src: url("${i}") format("woff2-variations");`,
125
122
  "}"
126
123
  );
127
124
  }
128
- e.push(
125
+ n.push(
129
126
  ".rs-icon {",
130
127
  " --rs-icon-color: currentColor;",
131
128
  " --rs-icon-fill: 0;",
@@ -155,106 +152,149 @@ function k(t, s, n = !1) {
155
152
  ".rs-icon--prime::before { content: var(--rs-icon-content); }"
156
153
  );
157
154
  const a = /* @__PURE__ */ new Set();
158
- for (const o of m)
159
- for (const r of t.get(o) ?? [])
160
- a.add(r);
161
- for (const o of [...a].sort())
162
- e.push(`.rs-icon-${o} { --rs-icon-content: "${o}"; }`);
163
- return `${e.join(`
155
+ for (const r of m)
156
+ for (const i of t.get(r) ?? [])
157
+ a.add(i);
158
+ for (const r of [...a].sort())
159
+ n.push(`.rs-icon-${r} { --rs-icon-content: "${r}"; }`);
160
+ return `${n.join(`
164
161
  `)}
165
162
  `;
166
163
  }
167
- async function A(t) {
164
+ function v(t, e = {}) {
165
+ const o = [];
166
+ if (e.preload ?? R)
167
+ for (const s of t.fonts)
168
+ o.push({
169
+ attrs: {
170
+ as: "font",
171
+ crossorigin: "",
172
+ href: s.href,
173
+ rel: "preload",
174
+ type: "font/woff2"
175
+ },
176
+ tag: "link",
177
+ injectTo: "head"
178
+ });
179
+ return o.push({
180
+ attrs: {
181
+ href: t.cssHref,
182
+ rel: "stylesheet"
183
+ },
184
+ tag: "link",
185
+ injectTo: "head"
186
+ }), o;
187
+ }
188
+ function U(t, e, o = {}) {
189
+ const s = v(e, o).map(W).filter((n) => !t.includes(`href="${G(n)}"`));
190
+ return s.length === 0 ? t : t.replace("</head>", `${s.map((n) => ` ${n}`).join(`
191
+ `)}
192
+ </head>`);
193
+ }
194
+ async function V(t, e, o) {
168
195
  const s = (await import("subset-font")).default, n = [];
169
- for (const e of m) {
170
- const a = [...t.get(e) ?? []].sort();
171
- if (a.length === 0)
196
+ for (const a of m) {
197
+ const r = [...t.get(a) ?? []].sort();
198
+ if (r.length === 0)
172
199
  continue;
173
- const o = C(e), r = await p(o), i = await s(r, a.join(" "), {
200
+ const i = B(a), c = await w(i), l = await s(c, r.join(" "), {
174
201
  targetFormat: "woff2"
175
- }), c = S("sha256").update(i).digest("hex").slice(0, 8), l = `rs-material-symbols-${e}-${c}.woff2`;
202
+ }), y = M("sha256").update(l).digest("hex").slice(0, 8), p = `rs-material-symbols-${a}-${y}.woff2`;
176
203
  n.push({
177
- family: e,
178
- fileName: l,
179
- source: i
204
+ family: a,
205
+ fileName: p,
206
+ href: O(p, e, o),
207
+ source: l
180
208
  });
181
209
  }
182
210
  return n;
183
211
  }
184
- function C(t) {
185
- return H.resolve(
186
- `${I[t]}/files/material-symbols-${t}-latin-wght-normal.woff2`
212
+ function B(t) {
213
+ return A.resolve(
214
+ `${T[t]}/files/material-symbols-${t}-latin-${D[t]}-normal.woff2`
187
215
  );
188
216
  }
189
- function T(t, s) {
190
- const n = /<RsIcon\b([^>]*)>/g;
191
- let e;
192
- for (; e = n.exec(t); ) {
193
- const c = U(e[1] ?? ""), l = c.name ?? c[":name"], v = h(c.family ?? c[":family"]);
194
- l && u(s, { family: v ?? f, name: w(l) });
217
+ function O(t, e, o) {
218
+ return e ? `/@robosophy-material-symbols/${t}` : F(o, `assets/${t}`);
219
+ }
220
+ function W(t) {
221
+ const e = Object.entries(t.attrs ?? {}).map(([o, s]) => s === "" ? o : `${o}="${s}"`).join(" ");
222
+ return `<${t.tag}${e ? ` ${e}` : ""}>`;
223
+ }
224
+ function G(t) {
225
+ return t.match(/\bhref="([^"]+)"/)?.[1] ?? "";
226
+ }
227
+ function q(t, e) {
228
+ const o = /<RsIcon\b([^>]*)>/g;
229
+ let s;
230
+ for (; s = o.exec(t); ) {
231
+ const c = E(s[1] ?? ""), l = c.name ?? c[":name"], y = b(c.family ?? c[":family"]);
232
+ l && u(e, { family: y ?? f, name: S(l) });
195
233
  }
196
- const a = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
197
- let o;
198
- for (; o = a.exec(t); ) {
199
- const c = h(o[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
200
- u(s, {
234
+ const n = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
235
+ let a;
236
+ for (; a = n.exec(t); ) {
237
+ const c = b(a[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
238
+ u(e, {
201
239
  family: c ?? f,
202
- name: o[1] ?? ""
240
+ name: a[1] ?? ""
203
241
  });
204
242
  }
205
243
  const r = /\bicon\s*:\s*["']([a-z0-9_]+)["']/g;
206
244
  let i;
207
245
  for (; i = r.exec(t); )
208
- u(s, {
246
+ u(e, {
209
247
  family: f,
210
248
  name: i[1] ?? ""
211
249
  });
212
250
  }
213
- function U(t) {
214
- const s = {}, n = /([:@\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
215
- let e;
216
- for (; e = n.exec(t); )
217
- s[e[1] ?? ""] = e[2] ?? e[3] ?? "";
218
- return s;
251
+ function E(t) {
252
+ const e = {}, o = /([:@\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
253
+ let s;
254
+ for (; s = o.exec(t); )
255
+ e[s[1] ?? ""] = s[2] ?? s[3] ?? "";
256
+ return e;
219
257
  }
220
- function w(t) {
258
+ function S(t) {
221
259
  return t.replace(/^['"](.+)['"]$/, "$1");
222
260
  }
223
- function u(t, s) {
224
- const n = s.family ?? f, e = s.name.trim();
225
- !m.includes(n) || !N.test(e) || t.get(n)?.add(e);
261
+ function u(t, e) {
262
+ const o = e.family ?? f, s = e.name.trim();
263
+ !m.includes(o) || !P.test(s) || t.get(o)?.add(s);
226
264
  }
227
- function h(t) {
228
- const s = t ? w(t) : "";
229
- return m.includes(s) ? s : void 0;
265
+ function b(t) {
266
+ const e = t ? S(t) : "";
267
+ return m.includes(e) ? e : void 0;
230
268
  }
231
- function B() {
269
+ function J() {
232
270
  return new Map(m.map((t) => [t, /* @__PURE__ */ new Set()]));
233
271
  }
234
- async function g(t) {
272
+ async function j(t) {
235
273
  try {
236
- const s = await x(t, { withFileTypes: !0 });
274
+ const e = await x(t, { withFileTypes: !0 });
237
275
  return (await Promise.all(
238
- s.map(async (e) => {
239
- const a = b(t, e.name);
240
- return e.isDirectory() ? P.has(e.name) ? [] : g(a) : _.has(F(e.name)) ? [a] : [];
276
+ e.map(async (s) => {
277
+ const n = g(t, s.name);
278
+ return s.isDirectory() ? z.has(s.name) ? [] : j(n) : k.has(_(s.name)) ? [n] : [];
241
279
  })
242
280
  )).flat();
243
281
  } catch {
244
282
  return [];
245
283
  }
246
284
  }
247
- function $(t, s) {
248
- return `${t.endsWith("/") ? t : `${t}/`}${s}`.replaceAll(`${j}`, "/");
285
+ function F(t, e) {
286
+ return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${H}`, "/");
249
287
  }
250
- function L(t) {
251
- return m.map((s) => `${s}: ${[...t.get(s) ?? []].sort().join(", ")}`).join(`
288
+ function tt(t) {
289
+ return m.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
252
290
  `);
253
291
  }
254
292
  export {
255
- k as buildMaterialSymbolsCss,
256
- R as collectMaterialSymbolUsages,
257
- L as formatDetectedMaterialSymbols,
258
- G as robosophyMaterialSymbols
293
+ L as buildMaterialSymbolsCss,
294
+ v as buildMaterialSymbolsHtmlTags,
295
+ C as collectMaterialSymbolUsages,
296
+ tt as formatDetectedMaterialSymbols,
297
+ U as injectMaterialSymbolsHtmlLinks,
298
+ Z as robosophyMaterialSymbols
259
299
  };
260
300
  //# sourceMappingURL=vite.js.map
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 type { IndexHtmlTransformResult, Plugin, ResolvedConfig } from \"vite\";\n\nimport type { RsIconFamily } from \"./components/RsIcon\";\n\ntype IconInput = string | { family?: RsIconFamily; name: string };\n\nexport type RobosophyMaterialSymbolsOptions = {\n include?: IconInput[];\n roots?: string[];\n scan?: boolean;\n};\n\ntype IconUsageMap = Map<RsIconFamily, Set<string>>;\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 require = createRequire(import.meta.url);\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n let config: ResolvedConfig;\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await ensureGeneratedAssets(config, options);\n\n return [\n {\n attrs: {\n href: assets.cssHref,\n rel: \"stylesheet\",\n },\n tag: \"link\",\n injectTo: \"head\",\n },\n ];\n },\n configureServer(server) {\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 ensureGeneratedAssets(config, options);\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 ensureGeneratedAssets(config, options);\n\n for (const font of assets.fonts) {\n this.emitFile({\n fileName: `assets/${font.fileName}`,\n name: font.fileName,\n source: font.source,\n type: \"asset\",\n });\n }\n\n this.emitFile({\n fileName: \"assets/rs-material-symbols.css\",\n name: \"rs-material-symbols.css\",\n source: assets.css,\n type: \"asset\",\n });\n\n for (const asset of Object.values(bundle)) {\n if (asset.type === \"asset\" && asset.fileName.endsWith(\".html\")) {\n const html = String(asset.source);\n const href = withBase(config.base, \"assets/rs-material-symbols.css\");\n asset.source = html.includes(href)\n ? html\n : html.replace(\"</head>\", ` <link rel=\"stylesheet\" href=\"${href}\">\\n</head>`);\n }\n }\n },\n };\n}\n\ntype GeneratedFontAsset = {\n family: RsIconFamily;\n fileName: 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) {\n const usages = await collectMaterialSymbolUsages(config, options);\n const fonts = await generateFontAssets(usages);\n const devMode = config.command === \"serve\";\n const css = buildMaterialSymbolsCss(usages, fonts, devMode);\n\n return {\n css,\n cssHref: devMode\n ? \"/@robosophy-material-symbols/rs-material-symbols.css\"\n : withBase(config.base, \"assets/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 for (const name of internalIconNames) {\n addUsage(usages, { family: defaultFamily, name });\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) {\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: swap;\",\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-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 \" 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\nasync function generateFontAssets(usages: IconUsageMap): 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 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-wght-normal.woff2`,\n );\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 name = attrs.name ?? attrs[\":name\"];\n const family = toFamily(attrs.family ?? attrs[\":family\"]);\n\n if (name) {\n addUsage(usages, { family: family ?? defaultFamily, name: unwrapStaticValue(name) });\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\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 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":["families","defaultFamily","iconNamePattern","sourceExtensions","skippedDirs","internalIconNames","familyFontNames","familyPackages","require","createRequire","robosophyMaterialSymbols","options","config","resolvedConfig","ensureGeneratedAssets","server","request","response","next","assets","fileName","font","asset","error","_outputOptions","bundle","html","href","withBase","usages","collectMaterialSymbolUsages","fonts","generateFontAssets","devMode","buildMaterialSymbolsCss","createUsageMap","name","addUsage","icon","roots","join","root","filePath","listSourceFiles","source","readFile","collectFromSource","lines","fontUrl","names","family","subsetFont","sourcePath","resolveFontPath","subset","hash","createHash","rsIconTagPattern","tagMatch","attrs","parseStaticAttributes","toFamily","unwrapStaticValue","primeHelperPattern","helperMatch","objectIconPattern","objectMatch","attrPattern","match","value","normalized","entries","readdir","entry","path","extname","base","sep","formatDetectedMaterialSymbols"],"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 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 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: \"full\",\n sharp: \"full\",\n};\n\nconst defaultFontDisplay: RsIconFontDisplay = \"block\";\nconst defaultPreload = true;\nconst require = createRequire(import.meta.url);\n\nexport function robosophyMaterialSymbols(\n options: RobosophyMaterialSymbolsOptions = {},\n): Plugin {\n let config: ResolvedConfig;\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await ensureGeneratedAssets(config, options);\n\n return buildMaterialSymbolsHtmlTags(assets, options);\n },\n configureServer(server) {\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 ensureGeneratedAssets(config, options);\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 ensureGeneratedAssets(config, options);\n\n for (const font of assets.fonts) {\n this.emitFile({\n fileName: `assets/${font.fileName}`,\n name: font.fileName,\n source: font.source,\n type: \"asset\",\n });\n }\n\n this.emitFile({\n fileName: \"assets/rs-material-symbols.css\",\n name: \"rs-material-symbols.css\",\n source: assets.css,\n type: \"asset\",\n });\n\n for (const asset of Object.values(bundle)) {\n if (asset.type === \"asset\" && asset.fileName.endsWith(\".html\")) {\n asset.source = injectMaterialSymbolsHtmlLinks(String(asset.source), assets, options);\n }\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) {\n const usages = await collectMaterialSymbolUsages(config, options);\n const devMode = config.command === \"serve\";\n const fonts = await generateFontAssets(usages, devMode, config.base);\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, \"assets/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 for (const name of internalIconNames) {\n addUsage(usages, { family: defaultFamily, name });\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-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 \" 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): 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),\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) {\n return devMode\n ? `/@robosophy-material-symbols/${fileName}`\n : withBase(base, `assets/${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 name = attrs.name ?? attrs[\":name\"];\n const family = toFamily(attrs.family ?? attrs[\":family\"]);\n\n if (name) {\n addUsage(usages, { family: family ?? defaultFamily, name: unwrapStaticValue(name) });\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\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 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":["families","defaultFamily","iconNamePattern","sourceExtensions","skippedDirs","internalIconNames","familyFontNames","familyPackages","familyFontVariants","defaultFontDisplay","defaultPreload","require","createRequire","robosophyMaterialSymbols","options","config","resolvedConfig","assets","ensureGeneratedAssets","buildMaterialSymbolsHtmlTags","server","request","response","next","fileName","font","asset","error","_outputOptions","bundle","injectMaterialSymbolsHtmlLinks","usages","collectMaterialSymbolUsages","devMode","fonts","generateFontAssets","buildMaterialSymbolsCss","withBase","createUsageMap","name","addUsage","icon","roots","join","root","filePath","listSourceFiles","source","readFile","collectFromSource","fontDisplay","lines","fontUrl","names","family","tags","html","links","formatHtmlLinkTag","link","getLinkHref","base","subsetFont","sourcePath","resolveFontPath","subset","hash","createHash","fontHref","tag","attrs","value","rsIconTagPattern","tagMatch","parseStaticAttributes","toFamily","unwrapStaticValue","primeHelperPattern","helperMatch","objectIconPattern","objectMatch","attrPattern","match","normalized","entries","readdir","entry","path","extname","sep","formatDetectedMaterialSymbols"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robosophy/ui-vue",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://robosophy.gitlab.io/robosophy-basf/robosophy-library/",