@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 +13 -9
- package/ai-context.md +1 -1
- package/components.md +5 -1
- package/dist/icon-manifest.json +16 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +123 -108
- package/dist/vite.js.map +1 -1
- package/package.json +2 -2
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
|
|
167
|
-
objetos con `icon: "..."
|
|
168
|
-
|
|
169
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"
|
|
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
|
|
3
|
-
import { join as
|
|
4
|
-
import { createRequire as
|
|
5
|
-
|
|
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
|
-
},
|
|
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: "
|
|
24
|
-
sharp: "
|
|
25
|
-
}, $ = "
|
|
26
|
-
function
|
|
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(
|
|
31
|
-
e =
|
|
31
|
+
async configResolved(s) {
|
|
32
|
+
e = s;
|
|
32
33
|
},
|
|
33
34
|
async transformIndexHtml() {
|
|
34
|
-
const
|
|
35
|
-
return
|
|
35
|
+
const s = await p(e, t);
|
|
36
|
+
return S(s, t);
|
|
36
37
|
},
|
|
37
|
-
configureServer(
|
|
38
|
-
|
|
39
|
-
if (!
|
|
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
|
|
45
|
-
|
|
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((
|
|
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(
|
|
63
|
-
const n = await
|
|
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(
|
|
78
|
-
a.type === "asset" && a.fileName.endsWith(".html") && (a.source =
|
|
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
|
|
83
|
-
const
|
|
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:
|
|
86
|
-
o,
|
|
87
|
-
n,
|
|
86
|
+
css: C(
|
|
88
87
|
s,
|
|
88
|
+
n,
|
|
89
|
+
o,
|
|
89
90
|
e.fontDisplay ?? $
|
|
90
91
|
),
|
|
91
|
-
cssHref:
|
|
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
|
|
96
|
-
const o =
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
103
|
-
for (const
|
|
104
|
-
for (const
|
|
105
|
-
const
|
|
106
|
-
|
|
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
|
|
116
|
+
return s;
|
|
110
117
|
}
|
|
111
|
-
function
|
|
118
|
+
function C(t, e, s = !1, o = $) {
|
|
112
119
|
const n = [];
|
|
113
120
|
for (const r of e) {
|
|
114
|
-
const i =
|
|
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: ${
|
|
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
|
|
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
|
|
168
|
-
const
|
|
169
|
-
if (e.preload ??
|
|
170
|
-
for (const
|
|
171
|
-
|
|
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:
|
|
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
|
|
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
|
-
}),
|
|
196
|
+
}), s;
|
|
190
197
|
}
|
|
191
|
-
function
|
|
192
|
-
const
|
|
193
|
-
return
|
|
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,
|
|
198
|
-
const
|
|
199
|
-
for (const a of
|
|
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
|
|
210
|
+
const i = B(a), c = await b(i), f = await o(c, r.join(" "), {
|
|
204
211
|
targetFormat: "woff2"
|
|
205
|
-
}),
|
|
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:
|
|
209
|
-
href:
|
|
210
|
-
source:
|
|
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
|
|
217
|
-
`${
|
|
223
|
+
return U.resolve(
|
|
224
|
+
`${R[t]}/files/material-symbols-${t}-latin-${D[t]}-normal.woff2`
|
|
218
225
|
);
|
|
219
226
|
}
|
|
220
|
-
function
|
|
221
|
-
return e ? `/@robosophy-material-symbols/${t}` : F(
|
|
227
|
+
function W(t, e, s) {
|
|
228
|
+
return e ? `/@robosophy-material-symbols/${t}` : F(s, `assets/${t}`);
|
|
222
229
|
}
|
|
223
|
-
function
|
|
224
|
-
const e = Object.entries(t.attrs ?? {}).map(([
|
|
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
|
|
234
|
+
function q(t) {
|
|
228
235
|
return t.match(/\bhref="([^"]+)"/)?.[1] ?? "";
|
|
229
236
|
}
|
|
230
|
-
function
|
|
231
|
-
const
|
|
232
|
-
let
|
|
233
|
-
for (;
|
|
234
|
-
const c =
|
|
235
|
-
|
|
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 =
|
|
241
|
-
|
|
242
|
-
family: c ??
|
|
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
|
-
|
|
250
|
-
family:
|
|
256
|
+
m(e, {
|
|
257
|
+
family: u,
|
|
251
258
|
name: i[1] ?? ""
|
|
252
259
|
});
|
|
253
260
|
}
|
|
254
|
-
function
|
|
255
|
-
const e = {},
|
|
256
|
-
let
|
|
257
|
-
for (;
|
|
258
|
-
e[
|
|
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
|
|
268
|
+
function v(t) {
|
|
262
269
|
return t.replace(/^['"](.+)['"]$/, "$1");
|
|
263
270
|
}
|
|
264
|
-
function
|
|
265
|
-
const
|
|
266
|
-
!
|
|
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
|
|
269
|
-
const e = t ?
|
|
270
|
-
return
|
|
283
|
+
function g(t) {
|
|
284
|
+
const e = t ? v(t) : "";
|
|
285
|
+
return l.includes(e) ? e : void 0;
|
|
271
286
|
}
|
|
272
|
-
function
|
|
273
|
-
return new Map(
|
|
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 (
|
|
280
|
-
const n =
|
|
281
|
-
return
|
|
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(`${
|
|
304
|
+
return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${N}`, "/");
|
|
290
305
|
}
|
|
291
|
-
function
|
|
292
|
-
return
|
|
306
|
+
function ot(t) {
|
|
307
|
+
return l.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
|
|
293
308
|
`);
|
|
294
309
|
}
|
|
295
310
|
export {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
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":";;;;;AA0BA,MAAMA,IAAW,CAAC,YAAY,WAAW,OAAO,GAC1CC,IAA8B,YAC9BC,IAAkB,gBAClBC,IAAmB,oBAAI,IAAI,CAAC,OAAO,QAAQ,QAAQ,OAAO,QAAQ,MAAM,CAAC,GACzEC,wBAAkB,IAAI,CAAC,QAAQ,QAAQ,gBAAgB,kBAAkB,CAAC,GAC1EC,IAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,IAAgD;AAAA,EACpD,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AACT,GAEMC,IAA+C;AAAA,EACnD,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AACT,GAEMC,IAAmD;AAAA,EACvD,UAAU;AAAA,EACV,SAAS;AAAA,EACT,OAAO;AACT,GAEMC,IAAwC,QACxCC,IAAiB,IACjBC,IAAUC,EAAc,YAAY,GAAG;AAEtC,SAASC,GACdC,IAA2C,IACnC;AACR,MAAIC;AACJ,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,eAAeC,GAAgB;AACnC,MAAAD,IAASC;AAAA,IACX;AAAA,IACA,MAAM,qBAAwD;AAC5D,YAAMC,IAAS,MAAMC,EAAsBH,GAAQD,CAAO;AAE1D,aAAOK,EAA6BF,GAAQH,CAAO;AAAA,IACrD;AAAA,IACA,gBAAgBM,GAAQ;AACtB,MAAAA,EAAO,YAAY,IAAI,OAAOC,GAASC,GAAUC,MAAS;AACxD,YAAI,CAACF,EAAQ,KAAK,WAAW,+BAA+B,GAAG;AAC7D,UAAAE,EAAA;AACA;AAAA,QACF;AAEA,YAAI;AACF,gBAAMN,IAAS,MAAMC,EAAsBH,GAAQD,CAAO,GACpDU,IAAW;AAAA,YACfH,EAAQ,IAAI,QAAQ,iCAAiC,EAAE,EAAE,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,UAAA;AAG5E,cAAIG,MAAa,2BAA2B;AAC1C,YAAAF,EAAS,UAAU,gBAAgB,yBAAyB,GAC5DA,EAAS,IAAIL,EAAO,GAAG;AACvB;AAAA,UACF;AAEA,gBAAMQ,IAAOR,EAAO,MAAM,KAAK,CAACS,MAAUA,EAAM,aAAaF,CAAQ;AAErE,cAAIC,GAAM;AACR,YAAAH,EAAS,UAAU,gBAAgB,YAAY,GAC/CA,EAAS,IAAIG,EAAK,MAAM;AACxB;AAAA,UACF;AAEA,UAAAF,EAAA;AAAA,QACF,SAASI,GAAO;AACd,UAAAJ,EAAKI,CAAK;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,MAAM,eAAeC,GAAgBC,GAAQ;AAC3C,YAAMZ,IAAS,MAAMC,EAAsBH,GAAQD,CAAO;AAE1D,iBAAWW,KAAQR,EAAO;AACxB,aAAK,SAAS;AAAA,UACZ,UAAU,UAAUQ,EAAK,QAAQ;AAAA,UACjC,MAAMA,EAAK;AAAA,UACX,QAAQA,EAAK;AAAA,UACb,MAAM;AAAA,QAAA,CACP;AAGH,WAAK,SAAS;AAAA,QACZ,UAAU;AAAA,QACV,MAAM;AAAA,QACN,QAAQR,EAAO;AAAA,QACf,MAAM;AAAA,MAAA,CACP;AAED,iBAAWS,KAAS,OAAO,OAAOG,CAAM;AACtC,QAAIH,EAAM,SAAS,WAAWA,EAAM,SAAS,SAAS,OAAO,MAC3DA,EAAM,SAASI,EAA+B,OAAOJ,EAAM,MAAM,GAAGT,GAAQH,CAAO;AAAA,IAGzF;AAAA,EAAA;AAEJ;AAeA,eAAeI,EACbH,GACAD,GACA;AACA,QAAMiB,IAAS,MAAMC,EAA4BjB,GAAQD,CAAO,GAC1DmB,IAAUlB,EAAO,YAAY,SAC7BmB,IAAQ,MAAMC,EAAmBJ,GAAQE,GAASlB,EAAO,IAAI;AAQnE,SAAO;AAAA,IACL,KARUqB;AAAA,MACVL;AAAA,MACAG;AAAA,MACAD;AAAA,MACAnB,EAAQ,eAAeL;AAAA,IAAA;AAAA,IAKvB,SAASwB,IACL,yDACAI,EAAStB,EAAO,MAAM,gCAAgC;AAAA,IAC1D,OAAAmB;AAAA,EAAA;AAEJ;AAEA,eAAsBF,EACpBjB,GACAD,IAA2C,IAC3C;AACA,QAAMiB,IAASO,EAAA,GAITC,IAAW,MAAMC,EAAA;AAEvB,MAAID;AACF,eAAWE,KAAUzC;AACnB,iBAAW0C,KAAQH,EAASE,CAAM,KAAK,CAAA;AACrC,QAAAE,EAASZ,GAAQ,EAAE,QAAAU,GAAQ,MAAAC,EAAA,CAAM;AAAA;AAIrC,eAAWA,KAAQrC;AACjB,iBAAWoC,KAAUzC;AACnB,QAAA2C,EAASZ,GAAQ,EAAE,QAAAU,GAAQ,MAAAC,EAAA,CAAM;AAKvC,aAAWE,KAAQ9B,EAAQ,WAAW,CAAA;AACpC,IAAA6B,EAASZ,GAAQ,OAAOa,KAAS,WAAW,EAAE,QAAQ3C,GAAe,MAAM2C,EAAA,IAASA,CAAI;AAG1F,MAAI9B,EAAQ,SAAS,IAAO;AAC1B,UAAM+B,IAAQ/B,EAAQ,SAAS,CAACgC,EAAK/B,EAAO,MAAM,KAAK,CAAC;AAExD,eAAWgC,KAAQF;AACjB,iBAAWG,KAAY,MAAMC,EAAgBF,CAAI,GAAG;AAClD,cAAMG,IAAS,MAAMC,EAASH,GAAU,MAAM;AAC9C,QAAAI,EAAkBF,GAAQnB,CAAM;AAAA,MAClC;AAAA,EAEJ;AAEA,SAAOA;AACT;AAEO,SAASK,EACdL,GACAG,GACAD,IAAU,IACVoB,IAAiC5C,GACjC;AACA,QAAM6C,IAAkB,CAAA;AAExB,aAAW7B,KAAQS,GAAO;AACxB,UAAMqB,IAAUtB,IACZ,gCAAgCR,EAAK,QAAQ,KAC7C,KAAKA,EAAK,QAAQ;AAEtB,IAAA6B,EAAM;AAAA,MACJ;AAAA,MACA,mBAAmBhD,EAAgBmB,EAAK,MAAM,CAAC;AAAA,MAC/C,mBAAmB4B,CAAW;AAAA,MAC9B;AAAA,MACA;AAAA,MACA,eAAeE,CAAO;AAAA,MACtB;AAAA,IAAA;AAAA,EAEJ;AAEA,EAAAD,EAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmBhD,EAAgB,QAAQ;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,qCAAqCA,EAAgB,OAAO;AAAA,IAC5D,mCAAmCA,EAAgB,KAAK;AAAA,IACxD;AAAA,EAAA;AAGF,QAAMkD,wBAAY,IAAA;AAElB,aAAWf,KAAUzC;AACnB,eAAW0C,KAAQX,EAAO,IAAIU,CAAM,KAAK,CAAA;AACvC,MAAAe,EAAM,IAAId,CAAI;AAIlB,aAAWA,KAAQ,CAAC,GAAGc,CAAK,EAAE;AAC5B,IAAAF,EAAM,KAAK,YAAYZ,CAAI,0BAA0BA,CAAI,MAAM;AAGjE,SAAO,GAAGY,EAAM,KAAK;AAAA,CAAI,CAAC;AAAA;AAC5B;AAEO,SAASnC,EACdF,GACAH,IAA4D,IACvC;AACrB,QAAM2C,IAA4B,CAAA;AAElC,MAAI3C,EAAQ,WAAWJ;AACrB,eAAWe,KAAQR,EAAO;AACxB,MAAAwC,EAAK,KAAK;AAAA,QACR,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,MAAMhC,EAAK;AAAA,UACX,KAAK;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,QAER,KAAK;AAAA,QACL,UAAU;AAAA,MAAA,CACX;AAIL,SAAAgC,EAAK,KAAK;AAAA,IACR,OAAO;AAAA,MACL,MAAMxC,EAAO;AAAA,MACb,KAAK;AAAA,IAAA;AAAA,IAEP,KAAK;AAAA,IACL,UAAU;AAAA,EAAA,CACX,GAEMwC;AACT;AAEO,SAAS3B,EACd4B,GACAzC,GACAH,IAA4D,CAAA,GAC5D;AACA,QAAM6C,IAAQxC,EAA6BF,GAAQH,CAAO,EACvD,IAAI8C,CAAiB,EACrB,OAAO,CAACC,MAAS,CAACH,EAAK,SAAS,SAASI,EAAYD,CAAI,CAAC,GAAG,CAAC;AAEjE,SAAOF,EAAM,WAAW,IACpBD,IACAA,EAAK,QAAQ,WAAW,GAAGC,EAAM,IAAI,CAACE,MAAS,KAAKA,CAAI,EAAE,EAAE,KAAK;AAAA,CAAI,CAAC;AAAA,QAAW;AACvF;AAEA,eAAe1B,EACbJ,GACAE,GACA8B,GAC+B;AAC/B,QAAMC,KAAc,MAAM,OAAO,aAAa,GAAG,SAC3C9B,IAA8B,CAAA;AAEpC,aAAWO,KAAUzC,GAAU;AAC7B,UAAMwD,IAAQ,CAAC,GAAIzB,EAAO,IAAIU,CAAM,KAAK,CAAA,CAAG,EAAE,KAAA;AAE9C,QAAIe,EAAM,WAAW;AACnB;AAGF,UAAMS,IAAaC,EAAgBzB,CAAM,GACnCS,IAAS,MAAMC,EAASc,CAAU,GAClCE,IAAS,MAAMH,EAAWd,GAAQM,EAAM,KAAK,GAAG,GAAG;AAAA,MACvD,cAAc;AAAA,IAAA,CACf,GACKY,IAAOC,EAAW,QAAQ,EAAE,OAAOF,CAAM,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,GACnE3C,IAAW,uBAAuBiB,CAAM,IAAI2B,CAAI;AAEtD,IAAAlC,EAAM,KAAK;AAAA,MACT,QAAAO;AAAA,MACA,UAAAjB;AAAA,MACA,MAAM8C,EAAS9C,GAAUS,GAAS8B,CAAI;AAAA,MACtC,QAAQI;AAAA,IAAA,CACT;AAAA,EACH;AAEA,SAAOjC;AACT;AAEA,SAASgC,EAAgBzB,GAAsB;AAC7C,SAAO9B,EAAQ;AAAA,IACb,GAAGJ,EAAekC,CAAM,CAAC,2BAA2BA,CAAM,UAAUjC,EAAmBiC,CAAM,CAAC;AAAA,EAAA;AAElG;AAEA,SAAS6B,EAAS9C,GAAkBS,GAAkB8B,GAAc;AAClE,SAAO9B,IACH,gCAAgCT,CAAQ,KACxCa,EAAS0B,GAAM,UAAUvC,CAAQ,EAAE;AACzC;AAEA,SAASoC,EAAkBW,GAAwB;AACjD,QAAMC,IAAQ,OAAO,QAAQD,EAAI,SAAS,CAAA,CAAE,EACzC,IAAI,CAAC,CAAC7B,GAAM+B,CAAK,MAAOA,MAAU,KAAK/B,IAAO,GAAGA,CAAI,KAAK+B,CAAK,GAAI,EACnE,KAAK,GAAG;AAEX,SAAO,IAAIF,EAAI,GAAG,GAAGC,IAAQ,IAAIA,CAAK,KAAK,EAAE;AAC/C;AAEA,SAASV,EAAYD,GAAc;AACjC,SAAOA,EAAK,MAAM,kBAAkB,IAAI,CAAC,KAAK;AAChD;AAEA,SAAST,EAAkBF,GAAgBnB,GAAsB;AAC/D,QAAM2C,IAAmB;AACzB,MAAIC;AAEJ,SAAQA,IAAWD,EAAiB,KAAKxB,CAAM,KAAI;AACjD,UAAMsB,IAAQI,EAAsBD,EAAS,CAAC,KAAK,EAAE,GAC/CjC,IAAO8B,EAAM,QAAQA,EAAM,OAAO,GAClC/B,IAASoC,EAASL,EAAM,UAAUA,EAAM,SAAS,CAAC;AAExD,IAAI9B,KACFC,EAASZ,GAAQ,EAAE,QAAQU,KAAUxC,GAAe,MAAM6E,EAAkBpC,CAAI,GAAG;AAAA,EAEvF;AAEA,QAAMqC,IACJ;AACF,MAAIC;AAEJ,SAAQA,IAAcD,EAAmB,KAAK7B,CAAM,KAAI;AACtD,UAAMT,IAASoC,EAASG,EAAY,CAAC,GAAG,MAAM,8BAA8B,IAAI,CAAC,CAAC;AAClF,IAAArC,EAASZ,GAAQ;AAAA,MACf,QAAQU,KAAUxC;AAAA,MAClB,MAAM+E,EAAY,CAAC,KAAK;AAAA,IAAA,CACzB;AAAA,EACH;AAEA,QAAMC,IAAoB;AAC1B,MAAIC;AAEJ,SAAQA,IAAcD,EAAkB,KAAK/B,CAAM;AACjD,IAAAP,EAASZ,GAAQ;AAAA,MACf,QAAQ9B;AAAA,MACR,MAAMiF,EAAY,CAAC,KAAK;AAAA,IAAA,CACzB;AAEL;AAEA,SAASN,EAAsB1B,GAAgB;AAC7C,QAAMsB,IAAgC,CAAA,GAChCW,IAAc;AACpB,MAAIC;AAEJ,SAAQA,IAAQD,EAAY,KAAKjC,CAAM;AACrC,IAAAsB,EAAMY,EAAM,CAAC,KAAK,EAAE,IAAIA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK;AAGlD,SAAOZ;AACT;AAEA,SAASM,EAAkBL,GAAe;AACxC,SAAOA,EAAM,QAAQ,kBAAkB,IAAI;AAC7C;AAEA,SAAS9B,EAASZ,GAAsBa,GAA+C;AACrF,QAAMH,IAASG,EAAK,UAAU3C,GACxByC,IAAOE,EAAK,KAAK,KAAA;AAEvB,EAAI,CAAC5C,EAAS,SAASyC,CAAM,KAAK,CAACvC,EAAgB,KAAKwC,CAAI,KAI5DX,EAAO,IAAIU,CAAM,GAAG,IAAIC,CAAI;AAC9B;AAEA,eAAeF,IAAmE;AAChF,MAAI;AACF,UAAM6C,IAAMvC,EAAKwC,EAAc,YAAY,GAAG,GAAG,IAAI,GAC/CC,IAAezC,EAAKuC,GAAK,oBAAoB,GAC7CnC,IAAS,MAAMC,EAASoC,GAAc,MAAM;AAClD,WAAO,KAAK,MAAMrC,CAAM;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS2B,EAASJ,GAA0C;AAC1D,QAAMe,IAAaf,IAAQK,EAAkBL,CAAK,IAAI;AACtD,SAAOzE,EAAS,SAASwF,CAA0B,IAC9CA,IACD;AACN;AAEA,SAASlD,IAA+B;AACtC,SAAO,IAAI,IAAItC,EAAS,IAAI,CAACyC,MAAW,CAACA,GAAQ,oBAAI,IAAA,CAAa,CAAC,CAAC;AACtE;AAEA,eAAeQ,EAAgBF,GAAiC;AAC9D,MAAI;AACF,UAAM0C,IAAU,MAAMC,EAAQ3C,GAAM,EAAE,eAAe,IAAM;AAa3D,YAZc,MAAM,QAAQ;AAAA,MAC1B0C,EAAQ,IAAI,OAAOE,MAAU;AAC3B,cAAMC,IAAO9C,EAAKC,GAAM4C,EAAM,IAAI;AAElC,eAAIA,EAAM,gBACDvF,EAAY,IAAIuF,EAAM,IAAI,IAAI,CAAA,IAAK1C,EAAgB2C,CAAI,IAGzDzF,EAAiB,IAAI0F,EAAQF,EAAM,IAAI,CAAC,IAAI,CAACC,CAAI,IAAI,CAAA;AAAA,MAC9D,CAAC;AAAA,IAAA,GAGU,KAAA;AAAA,EACf,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF;AAEA,SAASvD,EAAS0B,GAAc6B,GAAc;AAE5C,SAAO,GADW7B,EAAK,SAAS,GAAG,IAAIA,IAAO,GAAGA,CAAI,GAClC,GAAG6B,CAAI,GAAG,WAAW,GAAGE,CAAG,IAAI,GAAG;AACvD;AAEO,SAASC,GAA8BhE,GAAsB;AAClE,SAAO/B,EACJ,IAAI,CAACyC,MAAW,GAAGA,CAAM,KAAK,CAAC,GAAIV,EAAO,IAAIU,CAAM,KAAK,CAAA,CAAG,EAAE,KAAA,EAAO,KAAK,IAAI,CAAC,EAAE,EACjF,KAAK;AAAA,CAAI;AACd;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robosophy/ui-vue",
|
|
3
|
-
"version": "1.0.
|
|
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"
|