@robosophy/ui-vue 1.0.4 → 1.0.7

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
@@ -156,19 +156,21 @@ import { robosophyMaterialSymbols } from "@robosophy/ui-vue/vite";
156
156
  export default defineConfig({
157
157
  plugins: [
158
158
  vue(),
159
- robosophyMaterialSymbols({
160
- include: ["home"], // agrega iconos dinamicos que el scanner no pueda detectar
161
- }),
159
+ robosophyMaterialSymbols(),
162
160
  ],
163
161
  });
164
162
  ```
165
163
 
166
- El plugin escanea usos estaticos de `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
167
- objetos con `icon: "..."`. En build emite fuentes locales subseteadas por familia,
168
- preload de esas fuentes y `font-display: block` para evitar que se vea brevemente el
169
- texto del ligature antes de que cargue el icono.
164
+ El plugin escanea automaticamente usos de `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
165
+ objetos con `icon: "..."` en el codigo fuente. No hace falta declarar iconos a mano.
166
+ En build emite fuentes locales subseteadas por familia, preload de esas fuentes y
167
+ `font-display: block` para evitar que se vea brevemente el texto del ligature antes
168
+ de que cargue el icono.
170
169
 
171
- Si un icono se calcula en runtime, declaralo en `include`:
170
+ ### Iconos dinamicos (opcional)
171
+
172
+ Si un icono se calcula en runtime (API, permisos, configuracion remota, etc.), declaralo
173
+ en `include` para que el scanner lo incluya:
172
174
 
173
175
  ```ts
174
176
  robosophyMaterialSymbols({
@@ -179,7 +181,9 @@ robosophyMaterialSymbols({
179
181
  });
180
182
  ```
181
183
 
182
- Tambien se puede ajustar la estrategia de carga si una app lo necesita:
184
+ ### Estrategia de carga
185
+
186
+ Se puede ajustar la estrategia de carga si una app lo necesita:
183
187
 
184
188
  ```ts
185
189
  robosophyMaterialSymbols({
package/ai-context.md CHANGED
@@ -26,7 +26,7 @@ Use this package for shared Vue 3 UI components.
26
26
  - Use `@robosophy/tokens` CSS variables for colors, typography, strokes, and component surfaces.
27
27
  - Use PrimeVue only when it provides real behavior for that component; actions should use PrimeVue `Button` in PrimeVue apps.
28
28
  - `RsSidebar` and `RsAccountSelector` use native PrimeVue controls for interactive UI; PrimeVue apps should register the Robosophy PrimeVue preset and load `@robosophy/prime-theme/prime.css` so Button/Menu states receive Robosophy styling.
29
- - `RsIcon` needs `robosophyMaterialSymbols()` from `@robosophy/ui-vue/vite` in consuming Vite apps so builds ship local subset fonts. Use `rsPrimeIcon()` for PrimeVue APIs that accept icon class strings.
29
+ - `RsIcon` needs `robosophyMaterialSymbols()` from `@robosophy/ui-vue/vite` in consuming Vite apps so builds ship local subset fonts. The plugin auto-detects icon usage from source — no manual declaration needed for static patterns. Use `rsPrimeIcon()` for PrimeVue APIs that accept icon class strings. Add dynamic icons via `include`.
30
30
  - Use `RsSidebar` for reusable module navigation. `item-click` stays in the consuming app; the optional `modules` dropdown can redirect with the provided `link` when `navigateOnModuleSelect` is `true`.
31
31
  - Keep props focused on stable component API. Use slots for flexible content.
32
32
  - Export every public component and public type from `src/index.ts`.
package/components.md CHANGED
@@ -55,10 +55,14 @@ Enable Material Symbols subsetting in Vite apps:
55
55
  import { robosophyMaterialSymbols } from "@robosophy/ui-vue/vite";
56
56
 
57
57
  export default defineConfig({
58
- plugins: [vue(), robosophyMaterialSymbols({ include: ["home"] })],
58
+ plugins: [vue(), robosophyMaterialSymbols()],
59
59
  });
60
60
  ```
61
61
 
62
+ El plugin escanea automaticamente `<RsIcon name="..." />`, `rsPrimeIcon("...")` y
63
+ `icon: "..."` en el codigo fuente. No hace falta declarar iconos a mano. Para iconos
64
+ dinamicos que el scanner no pueda detectar, agregalos en `include`.
65
+
62
66
  ## RsIcon
63
67
 
64
68
  Use for Material Symbols. The Vite plugin generates local subset fonts for only the detected
@@ -0,0 +1,16 @@
1
+ {
2
+ "outlined": [
3
+ "arrow_drop_down",
4
+ "arrow_drop_up",
5
+ "arrow_left",
6
+ "chevron_right",
7
+ "close",
8
+ "icon",
9
+ "login",
10
+ "nest_eco_leaf"
11
+ ],
12
+ "rounded": [
13
+ "arrow_drop_down"
14
+ ],
15
+ "sharp": []
16
+ }
@@ -1 +1 @@
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,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;AAiKD,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,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,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;AA4KD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
package/dist/vite.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { createHash as M } from "node:crypto";
2
- import { readFile as g, readdir as x } from "node:fs/promises";
3
- import { join as w, 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 = [
2
+ import { readFile as b, readdir as x } from "node:fs/promises";
3
+ import { join as y, extname as P, sep as N } from "node:path";
4
+ import { createRequire as _ } from "node:module";
5
+ import { fileURLToPath as H } from "node:url";
6
+ const l = ["outlined", "rounded", "sharp"], u = "outlined", k = /^[a-z0-9_]+$/, z = /* @__PURE__ */ new Set([".js", ".jsx", ".mjs", ".ts", ".tsx", ".vue"]), I = /* @__PURE__ */ new Set([".git", "dist", "node_modules", "storybook-static"]), T = [
6
7
  "arrow_drop_down",
7
8
  "arrow_drop_up",
8
9
  "arrow_left",
@@ -14,41 +15,41 @@ const m = ["outlined", "rounded", "sharp"], f = "outlined", P = /^[a-z0-9_]+$/,
14
15
  outlined: "Material Symbols Outlined Variable",
15
16
  rounded: "Material Symbols Rounded Variable",
16
17
  sharp: "Material Symbols Sharp Variable"
17
- }, T = {
18
+ }, R = {
18
19
  outlined: "@fontsource-variable/material-symbols-outlined",
19
20
  rounded: "@fontsource-variable/material-symbols-rounded",
20
21
  sharp: "@fontsource-variable/material-symbols-sharp"
21
22
  }, D = {
22
23
  outlined: "wght",
23
- rounded: "full",
24
- sharp: "full"
25
- }, $ = "block", R = !0, A = N(import.meta.url);
26
- function Z(t = {}) {
24
+ rounded: "wght",
25
+ sharp: "wght"
26
+ }, $ = "swap", L = !1, U = _(import.meta.url);
27
+ function st(t = {}) {
27
28
  let e;
28
29
  return {
29
30
  name: "robosophy-material-symbols",
30
- async configResolved(o) {
31
- e = o;
31
+ async configResolved(s) {
32
+ e = s;
32
33
  },
33
34
  async transformIndexHtml() {
34
- const o = await h(e, t);
35
- return v(o, t);
35
+ const s = await p(e, t);
36
+ return S(s, t);
36
37
  },
37
- configureServer(o) {
38
- o.middlewares.use(async (s, n, a) => {
39
- if (!s.url?.startsWith("/@robosophy-material-symbols/")) {
38
+ configureServer(s) {
39
+ s.middlewares.use(async (o, n, a) => {
40
+ if (!o.url?.startsWith("/@robosophy-material-symbols/")) {
40
41
  a();
41
42
  return;
42
43
  }
43
44
  try {
44
- const r = await h(e, t), i = decodeURIComponent(
45
- s.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
45
+ const r = await p(e, t), i = decodeURIComponent(
46
+ o.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
46
47
  );
47
48
  if (i === "rs-material-symbols.css") {
48
49
  n.setHeader("Content-Type", "text/css; charset=utf-8"), n.end(r.css);
49
50
  return;
50
51
  }
51
- const c = r.fonts.find((l) => l.fileName === i);
52
+ const c = r.fonts.find((f) => f.fileName === i);
52
53
  if (c) {
53
54
  n.setHeader("Content-Type", "font/woff2"), n.end(c.source);
54
55
  return;
@@ -59,8 +60,8 @@ function Z(t = {}) {
59
60
  }
60
61
  });
61
62
  },
62
- async generateBundle(o, s) {
63
- const n = await h(e, t);
63
+ async generateBundle(s, o) {
64
+ const n = await p(e, t);
64
65
  for (const a of n.fonts)
65
66
  this.emitFile({
66
67
  fileName: `assets/${a.fileName}`,
@@ -74,48 +75,54 @@ function Z(t = {}) {
74
75
  source: n.css,
75
76
  type: "asset"
76
77
  });
77
- for (const a of Object.values(s))
78
- a.type === "asset" && a.fileName.endsWith(".html") && (a.source = U(String(a.source), n, t));
78
+ for (const a of Object.values(o))
79
+ a.type === "asset" && a.fileName.endsWith(".html") && (a.source = O(String(a.source), n, t));
79
80
  }
80
81
  };
81
82
  }
82
- async function h(t, e) {
83
- const o = await C(t, e), s = t.command === "serve", n = await V(o, s, t.base);
83
+ async function p(t, e) {
84
+ const s = await A(t, e), o = t.command === "serve", n = await V(s, o, t.base);
84
85
  return {
85
- css: L(
86
- o,
87
- n,
86
+ css: C(
88
87
  s,
88
+ n,
89
+ o,
89
90
  e.fontDisplay ?? $
90
91
  ),
91
- cssHref: s ? "/@robosophy-material-symbols/rs-material-symbols.css" : F(t.base, "assets/rs-material-symbols.css"),
92
+ cssHref: o ? "/@robosophy-material-symbols/rs-material-symbols.css" : F(t.base, "assets/rs-material-symbols.css"),
92
93
  fonts: n
93
94
  };
94
95
  }
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);
96
+ async function A(t, e = {}) {
97
+ const s = Q(), o = await K();
98
+ if (o)
99
+ for (const n of l)
100
+ for (const a of o[n] ?? [])
101
+ m(s, { family: n, name: a });
102
+ else
103
+ for (const n of T)
104
+ for (const a of l)
105
+ m(s, { family: a, name: n });
106
+ for (const n of e.include ?? [])
107
+ m(s, typeof n == "string" ? { family: u, name: n } : n);
101
108
  if (e.scan !== !1) {
102
- const s = e.roots ?? [w(t.root, "src")];
103
- for (const n of s)
104
- for (const a of await j(n)) {
105
- const r = await g(a, "utf8");
106
- q(r, o);
109
+ const n = e.roots ?? [y(t.root, "src")];
110
+ for (const a of n)
111
+ for (const r of await j(a)) {
112
+ const i = await b(r, "utf8");
113
+ E(i, s);
107
114
  }
108
115
  }
109
- return o;
116
+ return s;
110
117
  }
111
- function L(t, e, o = !1, s = $) {
118
+ function C(t, e, s = !1, o = $) {
112
119
  const n = [];
113
120
  for (const r of e) {
114
- const i = o ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
121
+ const i = s ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
115
122
  n.push(
116
123
  "@font-face {",
117
124
  ` font-family: "${d[r.family]}";`,
118
- ` font-display: ${s};`,
125
+ ` font-display: ${o};`,
119
126
  " font-style: normal;",
120
127
  " font-weight: 100 700;",
121
128
  ` src: url("${i}") format("woff2-variations");`,
@@ -155,7 +162,7 @@ function L(t, e, o = !1, s = $) {
155
162
  ".rs-icon--prime::before { content: var(--rs-icon-content); }"
156
163
  );
157
164
  const a = /* @__PURE__ */ new Set();
158
- for (const r of m)
165
+ for (const r of l)
159
166
  for (const i of t.get(r) ?? [])
160
167
  a.add(i);
161
168
  for (const r of [...a].sort())
@@ -164,121 +171,129 @@ function L(t, e, o = !1, s = $) {
164
171
  `)}
165
172
  `;
166
173
  }
167
- function v(t, e = {}) {
168
- const o = [];
169
- if (e.preload ?? R)
170
- for (const s of t.fonts)
171
- o.push({
174
+ function S(t, e = {}) {
175
+ const s = [];
176
+ if (e.preload ?? L)
177
+ for (const o of t.fonts)
178
+ s.push({
172
179
  attrs: {
173
180
  as: "font",
174
181
  crossorigin: "",
175
- href: s.href,
182
+ href: o.href,
176
183
  rel: "preload",
177
184
  type: "font/woff2"
178
185
  },
179
186
  tag: "link",
180
187
  injectTo: "head"
181
188
  });
182
- return o.push({
189
+ return s.push({
183
190
  attrs: {
184
191
  href: t.cssHref,
185
192
  rel: "stylesheet"
186
193
  },
187
194
  tag: "link",
188
195
  injectTo: "head"
189
- }), o;
196
+ }), s;
190
197
  }
191
- function U(t, e, o = {}) {
192
- const s = v(e, o).map(W).filter((n) => !t.includes(`href="${G(n)}"`));
193
- return s.length === 0 ? t : t.replace("</head>", `${s.map((n) => ` ${n}`).join(`
198
+ function O(t, e, s = {}) {
199
+ const o = S(e, s).map(G).filter((n) => !t.includes(`href="${q(n)}"`));
200
+ return o.length === 0 ? t : t.replace("</head>", `${o.map((n) => ` ${n}`).join(`
194
201
  `)}
195
202
  </head>`);
196
203
  }
197
- async function V(t, e, o) {
198
- const s = (await import("subset-font")).default, n = [];
199
- for (const a of m) {
204
+ async function V(t, e, s) {
205
+ const o = (await import("subset-font")).default, n = [];
206
+ for (const a of l) {
200
207
  const r = [...t.get(a) ?? []].sort();
201
208
  if (r.length === 0)
202
209
  continue;
203
- const i = B(a), c = await g(i), l = await s(c, r.join(" "), {
210
+ const i = B(a), c = await b(i), f = await o(c, r.join(" "), {
204
211
  targetFormat: "woff2"
205
- }), y = M("sha256").update(l).digest("hex").slice(0, 8), p = `rs-material-symbols-${a}-${y}.woff2`;
212
+ }), h = M("sha256").update(f).digest("hex").slice(0, 8), w = `rs-material-symbols-${a}-${h}.woff2`;
206
213
  n.push({
207
214
  family: a,
208
- fileName: p,
209
- href: O(p, e, o),
210
- source: l
215
+ fileName: w,
216
+ href: W(w, e, s),
217
+ source: f
211
218
  });
212
219
  }
213
220
  return n;
214
221
  }
215
222
  function B(t) {
216
- return A.resolve(
217
- `${T[t]}/files/material-symbols-${t}-latin-${D[t]}-normal.woff2`
223
+ return U.resolve(
224
+ `${R[t]}/files/material-symbols-${t}-latin-${D[t]}-normal.woff2`
218
225
  );
219
226
  }
220
- function O(t, e, o) {
221
- return e ? `/@robosophy-material-symbols/${t}` : F(o, `assets/${t}`);
227
+ function W(t, e, s) {
228
+ return e ? `/@robosophy-material-symbols/${t}` : F(s, `assets/${t}`);
222
229
  }
223
- function W(t) {
224
- const e = Object.entries(t.attrs ?? {}).map(([o, s]) => s === "" ? o : `${o}="${s}"`).join(" ");
230
+ function G(t) {
231
+ const e = Object.entries(t.attrs ?? {}).map(([s, o]) => o === "" ? s : `${s}="${o}"`).join(" ");
225
232
  return `<${t.tag}${e ? ` ${e}` : ""}>`;
226
233
  }
227
- function G(t) {
234
+ function q(t) {
228
235
  return t.match(/\bhref="([^"]+)"/)?.[1] ?? "";
229
236
  }
230
- function q(t, e) {
231
- const o = /<RsIcon\b([^>]*)>/g;
232
- let s;
233
- for (; s = o.exec(t); ) {
234
- const c = E(s[1] ?? ""), l = c.name ?? c[":name"], y = b(c.family ?? c[":family"]);
235
- l && u(e, { family: y ?? f, name: S(l) });
237
+ function E(t, e) {
238
+ const s = /<RsIcon\b([^>]*)>/g;
239
+ let o;
240
+ for (; o = s.exec(t); ) {
241
+ const c = J(o[1] ?? ""), f = c.name ?? c[":name"], h = g(c.family ?? c[":family"]);
242
+ f && m(e, { family: h ?? u, name: v(f) });
236
243
  }
237
244
  const n = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
238
245
  let a;
239
246
  for (; a = n.exec(t); ) {
240
- const c = b(a[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
241
- u(e, {
242
- family: c ?? f,
247
+ const c = g(a[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
248
+ m(e, {
249
+ family: c ?? u,
243
250
  name: a[1] ?? ""
244
251
  });
245
252
  }
246
253
  const r = /\bicon\s*:\s*["']([a-z0-9_]+)["']/g;
247
254
  let i;
248
255
  for (; i = r.exec(t); )
249
- u(e, {
250
- family: f,
256
+ m(e, {
257
+ family: u,
251
258
  name: i[1] ?? ""
252
259
  });
253
260
  }
254
- function E(t) {
255
- const e = {}, o = /([:@\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
256
- let s;
257
- for (; s = o.exec(t); )
258
- e[s[1] ?? ""] = s[2] ?? s[3] ?? "";
261
+ function J(t) {
262
+ const e = {}, s = /([:@\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
263
+ let o;
264
+ for (; o = s.exec(t); )
265
+ e[o[1] ?? ""] = o[2] ?? o[3] ?? "";
259
266
  return e;
260
267
  }
261
- function S(t) {
268
+ function v(t) {
262
269
  return t.replace(/^['"](.+)['"]$/, "$1");
263
270
  }
264
- function u(t, e) {
265
- const o = e.family ?? f, s = e.name.trim();
266
- !m.includes(o) || !P.test(s) || t.get(o)?.add(s);
271
+ function m(t, e) {
272
+ const s = e.family ?? u, o = e.name.trim();
273
+ !l.includes(s) || !k.test(o) || t.get(s)?.add(o);
274
+ }
275
+ async function K() {
276
+ try {
277
+ const t = y(H(import.meta.url), ".."), e = y(t, "icon-manifest.json"), s = await b(e, "utf8");
278
+ return JSON.parse(s);
279
+ } catch {
280
+ return null;
281
+ }
267
282
  }
268
- function b(t) {
269
- const e = t ? S(t) : "";
270
- return m.includes(e) ? e : void 0;
283
+ function g(t) {
284
+ const e = t ? v(t) : "";
285
+ return l.includes(e) ? e : void 0;
271
286
  }
272
- function J() {
273
- return new Map(m.map((t) => [t, /* @__PURE__ */ new Set()]));
287
+ function Q() {
288
+ return new Map(l.map((t) => [t, /* @__PURE__ */ new Set()]));
274
289
  }
275
290
  async function j(t) {
276
291
  try {
277
292
  const e = await x(t, { withFileTypes: !0 });
278
293
  return (await Promise.all(
279
- e.map(async (s) => {
280
- const n = w(t, s.name);
281
- return s.isDirectory() ? z.has(s.name) ? [] : j(n) : k.has(_(s.name)) ? [n] : [];
294
+ e.map(async (o) => {
295
+ const n = y(t, o.name);
296
+ return o.isDirectory() ? I.has(o.name) ? [] : j(n) : z.has(P(o.name)) ? [n] : [];
282
297
  })
283
298
  )).flat();
284
299
  } catch {
@@ -286,18 +301,18 @@ async function j(t) {
286
301
  }
287
302
  }
288
303
  function F(t, e) {
289
- return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${H}`, "/");
304
+ return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${N}`, "/");
290
305
  }
291
- function tt(t) {
292
- return m.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
306
+ function ot(t) {
307
+ return l.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
293
308
  `);
294
309
  }
295
310
  export {
296
- L as buildMaterialSymbolsCss,
297
- v as buildMaterialSymbolsHtmlTags,
298
- C as collectMaterialSymbolUsages,
299
- tt as formatDetectedMaterialSymbols,
300
- U as injectMaterialSymbolsHtmlLinks,
301
- Z as robosophyMaterialSymbols
311
+ C as buildMaterialSymbolsCss,
312
+ S as buildMaterialSymbolsHtmlTags,
313
+ A as collectMaterialSymbolUsages,
314
+ ot as formatDetectedMaterialSymbols,
315
+ O as injectMaterialSymbolsHtmlLinks,
316
+ st as robosophyMaterialSymbols
302
317
  };
303
318
  //# 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 { 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-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): 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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"}
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 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 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 // 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): 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\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 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","manifest","loadIconManifest","family","name","addUsage","icon","roots","join","root","filePath","listSourceFiles","source","readFile","collectFromSource","fontDisplay","lines","fontUrl","names","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","dir","fileURLToPath","manifestPath","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": "1.0.4",
3
+ "version": "1.0.7",
4
4
  "private": false,
5
5
  "license": "UNLICENSED",
6
6
  "homepage": "https://robosophy.gitlab.io/robosophy-basf/robosophy-library/",
@@ -39,7 +39,7 @@
39
39
  "**/*.css"
40
40
  ],
41
41
  "scripts": {
42
- "build": "vite build && node scripts/add-style-import.mjs && vue-tsc --emitDeclarationOnly && node ../../scripts/add-generated-notice.mjs dist/index.js dist/index.d.ts",
42
+ "build": "vite build && node scripts/generate-icon-manifest.mjs && node scripts/add-style-import.mjs && vue-tsc --emitDeclarationOnly && node ../../scripts/add-generated-notice.mjs dist/index.js dist/index.d.ts",
43
43
  "storybook": "storybook dev -p 6006",
44
44
  "build:storybook": "storybook build",
45
45
  "test": "vitest run"