@robosophy/ui-vue 1.0.9 → 1.0.10

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,iBAAiB,EAA4B,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,KAAK,SAAS,GAAG,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,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"}
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,CAgFR;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;AA8ND,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,UAIjE"}
package/dist/vite.js CHANGED
@@ -1,9 +1,9 @@
1
- import { createHash as M } from "node:crypto";
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 = [
1
+ import { createHash as z } from "node:crypto";
2
+ import { readFile as $, readdir as H } from "node:fs/promises";
3
+ import { join as y, extname as v, sep as k } from "node:path";
4
+ import { createRequire as I } from "node:module";
5
+ import { fileURLToPath as L } from "node:url";
6
+ const f = ["outlined", "rounded", "sharp"], p = "outlined", b = /^[a-z0-9_]+$/, S = /* @__PURE__ */ new Set([".js", ".jsx", ".mjs", ".ts", ".tsx", ".vue"]), T = /* @__PURE__ */ new Set([".git", "dist", "node_modules", "storybook-static"]), A = [
7
7
  "arrow_drop_down",
8
8
  "arrow_drop_up",
9
9
  "arrow_left",
@@ -11,7 +11,7 @@ const l = ["outlined", "rounded", "sharp"], u = "outlined", k = /^[a-z0-9_]+$/,
11
11
  "close",
12
12
  "login",
13
13
  "nest_eco_leaf"
14
- ], d = {
14
+ ], h = {
15
15
  outlined: "Material Symbols Outlined Variable",
16
16
  rounded: "Material Symbols Rounded Variable",
17
17
  sharp: "Material Symbols Sharp Variable"
@@ -23,113 +23,116 @@ const l = ["outlined", "rounded", "sharp"], u = "outlined", k = /^[a-z0-9_]+$/,
23
23
  outlined: "wght",
24
24
  rounded: "wght",
25
25
  sharp: "wght"
26
- }, $ = "swap", L = !1, U = _(import.meta.url);
27
- function st(t = {}) {
28
- let e;
26
+ }, j = "swap", U = !1, V = I(import.meta.url);
27
+ function rt(t = {}) {
28
+ let e, n = null, s = !1;
29
+ async function o() {
30
+ return s && n || (n = await C(e, t), s = !0), n;
31
+ }
29
32
  return {
30
33
  name: "robosophy-material-symbols",
31
- async configResolved(s) {
32
- e = s;
34
+ async configResolved(a) {
35
+ e = a;
33
36
  },
34
37
  async transformIndexHtml() {
35
- const s = await p(e, t);
36
- return S(s, t);
38
+ const a = await o();
39
+ return M(a, t);
37
40
  },
38
- configureServer(s) {
39
- s.middlewares.use(async (o, n, a) => {
40
- if (!o.url?.startsWith("/@robosophy-material-symbols/")) {
41
- a();
41
+ configureServer(a) {
42
+ a.watcher.on("all", (r, i) => {
43
+ S.has(v(i)) && (s = !1);
44
+ }), a.middlewares.use(async (r, i, c) => {
45
+ if (!r.url?.startsWith("/@robosophy-material-symbols/")) {
46
+ c();
42
47
  return;
43
48
  }
44
49
  try {
45
- const r = await p(e, t), i = decodeURIComponent(
46
- o.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
50
+ const l = await o(), u = decodeURIComponent(
51
+ r.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
47
52
  );
48
- if (i === "rs-material-symbols.css") {
49
- n.setHeader("Content-Type", "text/css; charset=utf-8"), n.end(r.css);
53
+ if (u === "rs-material-symbols.css") {
54
+ i.setHeader("Content-Type", "text/css; charset=utf-8"), i.end(l.css);
50
55
  return;
51
56
  }
52
- const c = r.fonts.find((f) => f.fileName === i);
53
- if (c) {
54
- n.setHeader("Content-Type", "font/woff2"), n.end(c.source);
57
+ const m = l.fonts.find((w) => w.fileName === u);
58
+ if (m) {
59
+ i.setHeader("Content-Type", "font/woff2"), i.end(m.source);
55
60
  return;
56
61
  }
57
- a();
58
- } catch (r) {
59
- a(r);
62
+ c();
63
+ } catch (l) {
64
+ c(l);
60
65
  }
61
66
  });
62
67
  },
63
- async generateBundle(s, o) {
64
- const n = await p(e, t);
65
- for (const a of n.fonts)
68
+ async generateBundle(a, r) {
69
+ const i = await o();
70
+ for (const c of i.fonts)
66
71
  this.emitFile({
67
- fileName: `assets/${a.fileName}`,
68
- name: a.fileName,
69
- source: a.source,
72
+ fileName: `assets/${c.fileName}`,
73
+ name: c.fileName,
74
+ source: c.source,
70
75
  type: "asset"
71
76
  });
72
77
  this.emitFile({
73
78
  fileName: "assets/rs-material-symbols.css",
74
79
  name: "rs-material-symbols.css",
75
- source: n.css,
80
+ source: i.css,
76
81
  type: "asset"
77
82
  });
78
- for (const a of Object.values(o))
79
- a.type === "asset" && a.fileName.endsWith(".html") && (a.source = O(String(a.source), n, t));
80
83
  }
81
84
  };
82
85
  }
83
- async function p(t, e) {
84
- const s = await A(t, e), o = t.command === "serve", n = await V(s, o, t.base);
86
+ async function C(t, e) {
87
+ const n = await B(t, e), s = t.command === "serve", o = await G(n, s, t.base);
85
88
  return {
86
- css: C(
87
- s,
89
+ css: O(
88
90
  n,
89
91
  o,
90
- e.fontDisplay ?? $
92
+ s,
93
+ e.fontDisplay ?? j
91
94
  ),
92
- cssHref: o ? "/@robosophy-material-symbols/rs-material-symbols.css" : F(t.base, "assets/rs-material-symbols.css"),
93
- fonts: n
95
+ cssHref: s ? "/@robosophy-material-symbols/rs-material-symbols.css" : _(t.base, "assets/rs-material-symbols.css"),
96
+ fonts: o
94
97
  };
95
98
  }
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 });
99
+ async function B(t, e = {}) {
100
+ const n = tt(), s = await X();
101
+ if (s)
102
+ for (const o of f)
103
+ for (const a of s[o] ?? [])
104
+ d(n, { family: o, name: a });
102
105
  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);
106
+ for (const o of A)
107
+ for (const a of f)
108
+ d(n, { family: a, name: o });
109
+ for (const o of e.include ?? [])
110
+ d(n, typeof o == "string" ? { family: p, name: o } : o);
108
111
  if (e.scan !== !1) {
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);
112
+ const o = e.roots ?? [y(t.root, "src")];
113
+ for (const a of o)
114
+ for (const r of await x(a)) {
115
+ const i = await $(r, "utf8");
116
+ K(i, n);
114
117
  }
115
118
  }
116
- return s;
119
+ return n;
117
120
  }
118
- function C(t, e, s = !1, o = $) {
119
- const n = [];
121
+ function O(t, e, n = !1, s = j) {
122
+ const o = [];
120
123
  for (const r of e) {
121
- const i = s ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
122
- n.push(
124
+ const i = n ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
125
+ o.push(
123
126
  "@font-face {",
124
- ` font-family: "${d[r.family]}";`,
125
- ` font-display: ${o};`,
127
+ ` font-family: "${h[r.family]}";`,
128
+ ` font-display: ${s};`,
126
129
  " font-style: normal;",
127
130
  " font-weight: 100 700;",
128
131
  ` src: url("${i}") format("woff2-variations");`,
129
132
  "}"
130
133
  );
131
134
  }
132
- n.push(
135
+ o.push(
133
136
  ".rs-icon {",
134
137
  " --rs-icon-color: currentColor;",
135
138
  " --rs-icon-fill: 0;",
@@ -141,7 +144,7 @@ function C(t, e, s = !1, o = $) {
141
144
  " color: var(--rs-icon-color);",
142
145
  " display: inline-flex;",
143
146
  " flex: 0 0 auto;",
144
- ` font-family: "${d.outlined}";`,
147
+ ` font-family: "${h.outlined}";`,
145
148
  " font-size: var(--rs-icon-size);",
146
149
  " font-style: normal;",
147
150
  ' font-feature-settings: "liga";',
@@ -157,162 +160,193 @@ function C(t, e, s = !1, o = $) {
157
160
  " white-space: nowrap;",
158
161
  " word-wrap: normal;",
159
162
  "}",
160
- `.rs-icon--rounded { font-family: "${d.rounded}"; }`,
161
- `.rs-icon--sharp { font-family: "${d.sharp}"; }`,
163
+ `.rs-icon--rounded { font-family: "${h.rounded}"; }`,
164
+ `.rs-icon--sharp { font-family: "${h.sharp}"; }`,
162
165
  ".rs-icon--prime::before { content: var(--rs-icon-content); }"
163
166
  );
164
167
  const a = /* @__PURE__ */ new Set();
165
- for (const r of l)
168
+ for (const r of f)
166
169
  for (const i of t.get(r) ?? [])
167
170
  a.add(i);
168
171
  for (const r of [...a].sort())
169
- n.push(`.rs-icon-${r} { --rs-icon-content: "${r}"; }`);
170
- return `${n.join(`
172
+ o.push(`.rs-icon-${r} { --rs-icon-content: "${r}"; }`);
173
+ return `${o.join(`
171
174
  `)}
172
175
  `;
173
176
  }
174
- function S(t, e = {}) {
175
- const s = [];
176
- if (e.preload ?? L)
177
- for (const o of t.fonts)
178
- s.push({
177
+ function M(t, e = {}) {
178
+ const n = [];
179
+ if (e.preload ?? U)
180
+ for (const s of t.fonts)
181
+ n.push({
179
182
  attrs: {
180
183
  as: "font",
181
184
  crossorigin: "",
182
- href: o.href,
185
+ href: s.href,
183
186
  rel: "preload",
184
187
  type: "font/woff2"
185
188
  },
186
189
  tag: "link",
187
190
  injectTo: "head"
188
191
  });
189
- return s.push({
192
+ return n.push({
190
193
  attrs: {
191
194
  href: t.cssHref,
192
195
  rel: "stylesheet"
193
196
  },
194
197
  tag: "link",
195
198
  injectTo: "head"
196
- }), s;
199
+ }), n;
197
200
  }
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(`
201
+ function it(t, e, n = {}) {
202
+ const s = M(e, n).map(E).filter((o) => !t.includes(`href="${J(o)}"`));
203
+ return s.length === 0 ? t : t.replace("</head>", `${s.map((o) => ` ${o}`).join(`
201
204
  `)}
202
205
  </head>`);
203
206
  }
204
- async function V(t, e, s) {
205
- const o = (await import("subset-font")).default, n = [];
206
- for (const a of l) {
207
+ async function G(t, e, n) {
208
+ const s = (await import("subset-font")).default, o = [];
209
+ for (const a of f) {
207
210
  const r = [...t.get(a) ?? []].sort();
208
211
  if (r.length === 0)
209
212
  continue;
210
- const i = B(a), c = await b(i), f = await o(c, r.join(" "), {
213
+ const i = W(a), c = await $(i), l = await s(c, r.join(" "), {
211
214
  targetFormat: "woff2"
212
- }), h = M("sha256").update(f).digest("hex").slice(0, 8), w = `rs-material-symbols-${a}-${h}.woff2`;
213
- n.push({
215
+ }), u = z("sha256").update(l).digest("hex").slice(0, 8), m = `rs-material-symbols-${a}-${u}.woff2`;
216
+ o.push({
214
217
  family: a,
215
- fileName: w,
216
- href: W(w, e, s),
217
- source: f
218
+ fileName: m,
219
+ href: q(m, e, n),
220
+ source: l
218
221
  });
219
222
  }
220
- return n;
223
+ return o;
221
224
  }
222
- function B(t) {
223
- return U.resolve(
225
+ function W(t) {
226
+ return V.resolve(
224
227
  `${R[t]}/files/material-symbols-${t}-latin-${D[t]}-normal.woff2`
225
228
  );
226
229
  }
227
- function W(t, e, s) {
228
- return e ? `/@robosophy-material-symbols/${t}` : F(s, `assets/${t}`);
230
+ function q(t, e, n) {
231
+ return e ? `/@robosophy-material-symbols/${t}` : _(n, `assets/${t}`);
229
232
  }
230
- function G(t) {
231
- const e = Object.entries(t.attrs ?? {}).map(([s, o]) => o === "" ? s : `${s}="${o}"`).join(" ");
233
+ function E(t) {
234
+ const e = Object.entries(t.attrs ?? {}).map(([n, s]) => s === "" ? n : `${n}="${s}"`).join(" ");
232
235
  return `<${t.tag}${e ? ` ${e}` : ""}>`;
233
236
  }
234
- function q(t) {
237
+ function J(t) {
235
238
  return t.match(/\bhref="([^"]+)"/)?.[1] ?? "";
236
239
  }
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) });
240
+ function K(t, e) {
241
+ const n = /<RsIcon\b([^>]*)>/g;
242
+ let s;
243
+ for (; s = n.exec(t); ) {
244
+ const c = Q(s[1] ?? ""), l = c.name ?? c[":name"], u = c.family ?? c[":family"] ?? "";
245
+ if (l) {
246
+ const m = Z(u), w = Y(l);
247
+ for (const P of m)
248
+ for (const N of w)
249
+ d(e, { family: P, name: N });
250
+ }
243
251
  }
244
- const n = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
252
+ const o = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
245
253
  let a;
246
- for (; a = n.exec(t); ) {
254
+ for (; a = o.exec(t); ) {
247
255
  const c = g(a[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
248
- m(e, {
249
- family: c ?? u,
256
+ d(e, {
257
+ family: c ?? p,
250
258
  name: a[1] ?? ""
251
259
  });
252
260
  }
253
261
  const r = /\bicon\s*:\s*["']([a-z0-9_]+)["']/g;
254
262
  let i;
255
263
  for (; i = r.exec(t); )
256
- m(e, {
257
- family: u,
264
+ d(e, {
265
+ family: p,
258
266
  name: i[1] ?? ""
259
267
  });
260
268
  }
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] ?? "";
269
+ function Q(t) {
270
+ const e = {}, n = /([:@\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)')/g;
271
+ let s;
272
+ for (; s = n.exec(t); )
273
+ e[s[1] ?? ""] = s[2] ?? s[3] ?? "";
266
274
  return e;
267
275
  }
268
- function v(t) {
276
+ function F(t) {
269
277
  return t.replace(/^['"](.+)['"]$/, "$1");
270
278
  }
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);
279
+ function d(t, e) {
280
+ const n = e.family ?? p, s = e.name.trim();
281
+ !f.includes(n) || !b.test(s) || t.get(n)?.add(s);
274
282
  }
275
- async function K() {
283
+ async function X() {
276
284
  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);
285
+ const t = y(L(import.meta.url), ".."), e = y(t, "icon-manifest.json"), n = await $(e, "utf8");
286
+ return JSON.parse(n);
279
287
  } catch {
280
288
  return null;
281
289
  }
282
290
  }
283
291
  function g(t) {
284
- const e = t ? v(t) : "";
285
- return l.includes(e) ? e : void 0;
292
+ const e = t ? F(t) : "";
293
+ return f.includes(e) ? e : void 0;
294
+ }
295
+ function Y(t) {
296
+ const e = /["']([a-z0-9_]+)["']/g;
297
+ let n;
298
+ const s = [];
299
+ for (; n = e.exec(t); ) {
300
+ const o = n[1] ?? "";
301
+ b.test(o) && s.push(o);
302
+ }
303
+ if (s.length === 0) {
304
+ const o = F(t);
305
+ b.test(o) && s.push(o);
306
+ }
307
+ return s;
308
+ }
309
+ function Z(t) {
310
+ const e = g(t);
311
+ if (e) return [e];
312
+ const n = /["'](\w+)["']/g;
313
+ let s;
314
+ const o = /* @__PURE__ */ new Set();
315
+ for (; s = n.exec(t); ) {
316
+ const a = s[1] ?? "", r = g(a);
317
+ r && o.add(r);
318
+ }
319
+ return o.size > 0 ? [...o] : [...f];
286
320
  }
287
- function Q() {
288
- return new Map(l.map((t) => [t, /* @__PURE__ */ new Set()]));
321
+ function tt() {
322
+ return new Map(f.map((t) => [t, /* @__PURE__ */ new Set()]));
289
323
  }
290
- async function j(t) {
324
+ async function x(t) {
291
325
  try {
292
- const e = await x(t, { withFileTypes: !0 });
326
+ const e = await H(t, { withFileTypes: !0 });
293
327
  return (await Promise.all(
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] : [];
328
+ e.map(async (s) => {
329
+ const o = y(t, s.name);
330
+ return s.isDirectory() ? T.has(s.name) ? [] : x(o) : S.has(v(s.name)) ? [o] : [];
297
331
  })
298
332
  )).flat();
299
333
  } catch {
300
334
  return [];
301
335
  }
302
336
  }
303
- function F(t, e) {
304
- return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${N}`, "/");
337
+ function _(t, e) {
338
+ return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${k}`, "/");
305
339
  }
306
- function ot(t) {
307
- return l.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
340
+ function ct(t) {
341
+ return f.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
308
342
  `);
309
343
  }
310
344
  export {
311
- C as buildMaterialSymbolsCss,
312
- S as buildMaterialSymbolsHtmlTags,
313
- A as collectMaterialSymbolUsages,
314
- ot as formatDetectedMaterialSymbols,
315
- O as injectMaterialSymbolsHtmlLinks,
316
- st as robosophyMaterialSymbols
345
+ O as buildMaterialSymbolsCss,
346
+ M as buildMaterialSymbolsHtmlTags,
347
+ B as collectMaterialSymbolUsages,
348
+ ct as formatDetectedMaterialSymbols,
349
+ it as injectMaterialSymbolsHtmlLinks,
350
+ rt as robosophyMaterialSymbols
317
351
  };
318
352
  //# 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 { 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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"}
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 let cachedAssets: GeneratedMaterialSymbolsAssets | null = null;\n let cacheValid = false;\n\n async function getAssets() {\n if (cacheValid && cachedAssets) return cachedAssets;\n cachedAssets = await ensureGeneratedAssets(config, options);\n cacheValid = true;\n return cachedAssets;\n }\n\n return {\n name: \"robosophy-material-symbols\",\n async configResolved(resolvedConfig) {\n config = resolvedConfig;\n },\n async transformIndexHtml(): Promise<IndexHtmlTransformResult> {\n const assets = await getAssets();\n\n return buildMaterialSymbolsHtmlTags(assets, options);\n },\n configureServer(server) {\n server.watcher.on(\"all\", (_event, file) => {\n if (sourceExtensions.has(extname(file))) {\n cacheValid = false;\n }\n });\n server.middlewares.use(async (request, response, next) => {\n if (!request.url?.startsWith(\"/@robosophy-material-symbols/\")) {\n next();\n return;\n }\n\n try {\n const assets = await getAssets();\n const fileName = decodeURIComponent(\n request.url.replace(\"/@robosophy-material-symbols/\", \"\").split(\"?\")[0] ?? \"\",\n );\n\n if (fileName === \"rs-material-symbols.css\") {\n response.setHeader(\"Content-Type\", \"text/css; charset=utf-8\");\n response.end(assets.css);\n return;\n }\n\n const font = assets.fonts.find((asset) => asset.fileName === fileName);\n\n if (font) {\n response.setHeader(\"Content-Type\", \"font/woff2\");\n response.end(font.source);\n return;\n }\n\n next();\n } catch (error) {\n next(error);\n }\n });\n },\n async generateBundle(_outputOptions, bundle) {\n const assets = await getAssets();\n\n for (const font of assets.fonts) {\n this.emitFile({\n fileName: `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 };\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 rawName = attrs.name ?? attrs[\":name\"];\n const rawFamily = attrs.family ?? attrs[\":family\"] ?? \"\";\n\n if (rawName) {\n const familyList = resolveFamilies(rawFamily);\n const names = resolveNames(rawName);\n\n for (const family of familyList) {\n for (const name of names) {\n addUsage(usages, { family, name });\n }\n }\n }\n }\n\n const primeHelperPattern =\n /\\brsPrimeIcon\\(\\s*[\"']([a-z0-9_]+)[\"'](?:\\s*,\\s*\\{([^)]*)\\})?/g;\n let helperMatch: RegExpExecArray | null;\n\n while ((helperMatch = primeHelperPattern.exec(source))) {\n const family = toFamily(helperMatch[2]?.match(/\\bfamily\\s*:\\s*[\"'](\\w+)[\"']/)?.[1]);\n addUsage(usages, {\n family: family ?? defaultFamily,\n name: helperMatch[1] ?? \"\",\n });\n }\n\n const objectIconPattern = /\\bicon\\s*:\\s*[\"']([a-z0-9_]+)[\"']/g;\n let objectMatch: RegExpExecArray | null;\n\n while ((objectMatch = objectIconPattern.exec(source))) {\n addUsage(usages, {\n family: defaultFamily,\n name: objectMatch[1] ?? \"\",\n });\n }\n}\n\nfunction parseStaticAttributes(source: string) {\n const attrs: Record<string, string> = {};\n const attrPattern = /([:@\\w-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n let match: RegExpExecArray | null;\n\n while ((match = attrPattern.exec(source))) {\n attrs[match[1] ?? \"\"] = match[2] ?? match[3] ?? \"\";\n }\n\n return attrs;\n}\n\nfunction unwrapStaticValue(value: string) {\n return value.replace(/^['\"](.+)['\"]$/, \"$1\");\n}\n\nfunction addUsage(usages: IconUsageMap, icon: { family?: RsIconFamily; name: string }) {\n const family = icon.family ?? defaultFamily;\n const name = icon.name.trim();\n\n if (!families.includes(family) || !iconNamePattern.test(name)) {\n return;\n }\n\n usages.get(family)?.add(name);\n}\n\nasync function loadIconManifest(): Promise<Record<RsIconFamily, string[]> | null> {\n try {\n const dir = join(fileURLToPath(import.meta.url), \"..\");\n const manifestPath = join(dir, \"icon-manifest.json\");\n const source = await readFile(manifestPath, \"utf8\");\n return JSON.parse(source) as Record<RsIconFamily, string[]>;\n } catch {\n return null;\n }\n}\n\nfunction toFamily(value?: string): RsIconFamily | undefined {\n const normalized = value ? unwrapStaticValue(value) : \"\";\n return families.includes(normalized as RsIconFamily)\n ? (normalized as RsIconFamily)\n : undefined;\n}\n\nfunction resolveNames(rawName: string): string[] {\n const stringLiterals = /[\"']([a-z0-9_]+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const names: string[] = [];\n\n while ((strMatch = stringLiterals.exec(rawName))) {\n const candidate = strMatch[1] ?? \"\";\n if (iconNamePattern.test(candidate)) {\n names.push(candidate);\n }\n }\n\n if (names.length === 0) {\n const name = unwrapStaticValue(rawName);\n if (iconNamePattern.test(name)) {\n names.push(name);\n }\n }\n\n return names;\n}\n\nfunction resolveFamilies(rawFamily: string): RsIconFamily[] {\n const family = toFamily(rawFamily);\n if (family) return [family];\n\n const stringLiterals = /[\"'](\\w+)[\"']/g;\n let strMatch: RegExpExecArray | null;\n const found = new Set<RsIconFamily>();\n\n while ((strMatch = stringLiterals.exec(rawFamily))) {\n const candidate = strMatch[1] ?? \"\";\n const f = toFamily(candidate);\n if (f) {\n found.add(f);\n }\n }\n\n if (found.size > 0) return [...found];\n\n return [...families];\n}\n\nfunction createUsageMap(): IconUsageMap {\n return new Map(families.map((family) => [family, new Set<string>()]));\n}\n\nasync function listSourceFiles(root: string): Promise<string[]> {\n try {\n const entries = await readdir(root, { withFileTypes: true });\n const files = await Promise.all(\n entries.map(async (entry) => {\n const path = join(root, entry.name);\n\n if (entry.isDirectory()) {\n return skippedDirs.has(entry.name) ? [] : listSourceFiles(path);\n }\n\n return sourceExtensions.has(extname(entry.name)) ? [path] : [];\n }),\n );\n\n return files.flat();\n } catch {\n return [];\n }\n}\n\nfunction withBase(base: string, path: string) {\n const cleanBase = base.endsWith(\"/\") ? base : `${base}/`;\n return `${cleanBase}${path}`.replaceAll(`${sep}`, \"/\");\n}\n\nexport function formatDetectedMaterialSymbols(usages: IconUsageMap) {\n return families\n .map((family) => `${family}: ${[...(usages.get(family) ?? [])].sort().join(\", \")}`)\n .join(\"\\n\");\n}\n"],"names":["families","defaultFamily","iconNamePattern","sourceExtensions","skippedDirs","internalIconNames","familyFontNames","familyPackages","familyFontVariants","defaultFontDisplay","defaultPreload","require","createRequire","robosophyMaterialSymbols","options","config","cachedAssets","cacheValid","getAssets","ensureGeneratedAssets","resolvedConfig","assets","buildMaterialSymbolsHtmlTags","server","_event","file","extname","request","response","next","fileName","font","asset","error","_outputOptions","bundle","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","injectMaterialSymbolsHtmlLinks","html","links","formatHtmlLinkTag","link","getLinkHref","base","subsetFont","sourcePath","resolveFontPath","subset","hash","createHash","fontHref","tag","attrs","value","rsIconTagPattern","tagMatch","parseStaticAttributes","rawName","rawFamily","familyList","resolveFamilies","resolveNames","primeHelperPattern","helperMatch","toFamily","objectIconPattern","objectMatch","attrPattern","match","unwrapStaticValue","dir","fileURLToPath","manifestPath","normalized","stringLiterals","strMatch","candidate","found","f","entries","readdir","entry","path","sep","formatDetectedMaterialSymbols"],"mappings":"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"}