@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.
- package/dist/components/RsAccountSelector/RsAccountSelector.vue.d.ts +11 -11
- package/dist/components/RsAccountSelector/RsAccountSelector.vue.d.ts.map +1 -1
- package/dist/components/RsSidebar/RsSidebar.vue.d.ts.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +391 -4241
- package/dist/index.js.map +1 -1
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +179 -145
- package/dist/vite.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":""}
|
package/dist/vite.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
|
2
|
-
import { readFile as
|
|
3
|
-
import { join as y, extname as
|
|
4
|
-
import { createRequire as
|
|
5
|
-
import { fileURLToPath as
|
|
6
|
-
const
|
|
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
|
-
],
|
|
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
|
-
},
|
|
27
|
-
function
|
|
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(
|
|
32
|
-
e =
|
|
34
|
+
async configResolved(a) {
|
|
35
|
+
e = a;
|
|
33
36
|
},
|
|
34
37
|
async transformIndexHtml() {
|
|
35
|
-
const
|
|
36
|
-
return
|
|
38
|
+
const a = await o();
|
|
39
|
+
return M(a, t);
|
|
37
40
|
},
|
|
38
|
-
configureServer(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
|
46
|
-
|
|
50
|
+
const l = await o(), u = decodeURIComponent(
|
|
51
|
+
r.url.replace("/@robosophy-material-symbols/", "").split("?")[0] ?? ""
|
|
47
52
|
);
|
|
48
|
-
if (
|
|
49
|
-
|
|
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
|
|
53
|
-
if (
|
|
54
|
-
|
|
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
|
-
|
|
58
|
-
} catch (
|
|
59
|
-
|
|
62
|
+
c();
|
|
63
|
+
} catch (l) {
|
|
64
|
+
c(l);
|
|
60
65
|
}
|
|
61
66
|
});
|
|
62
67
|
},
|
|
63
|
-
async generateBundle(
|
|
64
|
-
const
|
|
65
|
-
for (const
|
|
68
|
+
async generateBundle(a, r) {
|
|
69
|
+
const i = await o();
|
|
70
|
+
for (const c of i.fonts)
|
|
66
71
|
this.emitFile({
|
|
67
|
-
fileName: `assets/${
|
|
68
|
-
name:
|
|
69
|
-
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:
|
|
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
|
|
84
|
-
const
|
|
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:
|
|
87
|
-
s,
|
|
89
|
+
css: O(
|
|
88
90
|
n,
|
|
89
91
|
o,
|
|
90
|
-
|
|
92
|
+
s,
|
|
93
|
+
e.fontDisplay ?? j
|
|
91
94
|
),
|
|
92
|
-
cssHref:
|
|
93
|
-
fonts:
|
|
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
|
|
97
|
-
const
|
|
98
|
-
if (
|
|
99
|
-
for (const
|
|
100
|
-
for (const a of o
|
|
101
|
-
|
|
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
|
|
104
|
-
for (const a of
|
|
105
|
-
|
|
106
|
-
for (const
|
|
107
|
-
|
|
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
|
|
110
|
-
for (const a of
|
|
111
|
-
for (const r of await
|
|
112
|
-
const i = await
|
|
113
|
-
|
|
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
|
|
119
|
+
return n;
|
|
117
120
|
}
|
|
118
|
-
function
|
|
119
|
-
const
|
|
121
|
+
function O(t, e, n = !1, s = j) {
|
|
122
|
+
const o = [];
|
|
120
123
|
for (const r of e) {
|
|
121
|
-
const i =
|
|
122
|
-
|
|
124
|
+
const i = n ? `/@robosophy-material-symbols/${r.fileName}` : `./${r.fileName}`;
|
|
125
|
+
o.push(
|
|
123
126
|
"@font-face {",
|
|
124
|
-
` font-family: "${
|
|
125
|
-
` font-display: ${
|
|
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
|
-
|
|
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: "${
|
|
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: "${
|
|
161
|
-
`.rs-icon--sharp { font-family: "${
|
|
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
|
|
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
|
-
|
|
170
|
-
return `${
|
|
172
|
+
o.push(`.rs-icon-${r} { --rs-icon-content: "${r}"; }`);
|
|
173
|
+
return `${o.join(`
|
|
171
174
|
`)}
|
|
172
175
|
`;
|
|
173
176
|
}
|
|
174
|
-
function
|
|
175
|
-
const
|
|
176
|
-
if (e.preload ??
|
|
177
|
-
for (const
|
|
178
|
-
|
|
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:
|
|
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
|
|
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
|
-
}),
|
|
199
|
+
}), n;
|
|
197
200
|
}
|
|
198
|
-
function
|
|
199
|
-
const
|
|
200
|
-
return
|
|
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
|
|
205
|
-
const
|
|
206
|
-
for (const a of
|
|
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 =
|
|
213
|
+
const i = W(a), c = await $(i), l = await s(c, r.join(" "), {
|
|
211
214
|
targetFormat: "woff2"
|
|
212
|
-
}),
|
|
213
|
-
|
|
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:
|
|
216
|
-
href:
|
|
217
|
-
source:
|
|
218
|
+
fileName: m,
|
|
219
|
+
href: q(m, e, n),
|
|
220
|
+
source: l
|
|
218
221
|
});
|
|
219
222
|
}
|
|
220
|
-
return
|
|
223
|
+
return o;
|
|
221
224
|
}
|
|
222
|
-
function
|
|
223
|
-
return
|
|
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
|
|
228
|
-
return e ? `/@robosophy-material-symbols/${t}` :
|
|
230
|
+
function q(t, e, n) {
|
|
231
|
+
return e ? `/@robosophy-material-symbols/${t}` : _(n, `assets/${t}`);
|
|
229
232
|
}
|
|
230
|
-
function
|
|
231
|
-
const e = Object.entries(t.attrs ?? {}).map(([
|
|
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
|
|
237
|
+
function J(t) {
|
|
235
238
|
return t.match(/\bhref="([^"]+)"/)?.[1] ?? "";
|
|
236
239
|
}
|
|
237
|
-
function
|
|
238
|
-
const
|
|
239
|
-
let
|
|
240
|
-
for (;
|
|
241
|
-
const c =
|
|
242
|
-
|
|
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
|
|
252
|
+
const o = /\brsPrimeIcon\(\s*["']([a-z0-9_]+)["'](?:\s*,\s*\{([^)]*)\})?/g;
|
|
245
253
|
let a;
|
|
246
|
-
for (; a =
|
|
254
|
+
for (; a = o.exec(t); ) {
|
|
247
255
|
const c = g(a[2]?.match(/\bfamily\s*:\s*["'](\w+)["']/)?.[1]);
|
|
248
|
-
|
|
249
|
-
family: c ??
|
|
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
|
-
|
|
257
|
-
family:
|
|
264
|
+
d(e, {
|
|
265
|
+
family: p,
|
|
258
266
|
name: i[1] ?? ""
|
|
259
267
|
});
|
|
260
268
|
}
|
|
261
|
-
function
|
|
262
|
-
const e = {},
|
|
263
|
-
let
|
|
264
|
-
for (;
|
|
265
|
-
e[
|
|
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
|
|
276
|
+
function F(t) {
|
|
269
277
|
return t.replace(/^['"](.+)['"]$/, "$1");
|
|
270
278
|
}
|
|
271
|
-
function
|
|
272
|
-
const
|
|
273
|
-
!
|
|
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
|
|
283
|
+
async function X() {
|
|
276
284
|
try {
|
|
277
|
-
const t = y(
|
|
278
|
-
return JSON.parse(
|
|
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 ?
|
|
285
|
-
return
|
|
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
|
|
288
|
-
return new Map(
|
|
321
|
+
function tt() {
|
|
322
|
+
return new Map(f.map((t) => [t, /* @__PURE__ */ new Set()]));
|
|
289
323
|
}
|
|
290
|
-
async function
|
|
324
|
+
async function x(t) {
|
|
291
325
|
try {
|
|
292
|
-
const e = await
|
|
326
|
+
const e = await H(t, { withFileTypes: !0 });
|
|
293
327
|
return (await Promise.all(
|
|
294
|
-
e.map(async (
|
|
295
|
-
const
|
|
296
|
-
return
|
|
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
|
|
304
|
-
return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${
|
|
337
|
+
function _(t, e) {
|
|
338
|
+
return `${t.endsWith("/") ? t : `${t}/`}${e}`.replaceAll(`${k}`, "/");
|
|
305
339
|
}
|
|
306
|
-
function
|
|
307
|
-
return
|
|
340
|
+
function ct(t) {
|
|
341
|
+
return f.map((e) => `${e}: ${[...t.get(e) ?? []].sort().join(", ")}`).join(`
|
|
308
342
|
`);
|
|
309
343
|
}
|
|
310
344
|
export {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
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":";;;;;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;"}
|
|
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":";;;;;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,GACAC,IAAsD,MACtDC,IAAa;AAEjB,iBAAeC,IAAY;AACzB,WAAID,KAAcD,MAClBA,IAAe,MAAMG,EAAsBJ,GAAQD,CAAO,GAC1DG,IAAa,KACND;AAAA,EACT;AAEA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM,eAAeI,GAAgB;AACnC,MAAAL,IAASK;AAAA,IACX;AAAA,IACA,MAAM,qBAAwD;AAC5D,YAAMC,IAAS,MAAMH,EAAA;AAErB,aAAOI,EAA6BD,GAAQP,CAAO;AAAA,IACrD;AAAA,IACA,gBAAgBS,GAAQ;AACtB,MAAAA,EAAO,QAAQ,GAAG,OAAO,CAACC,GAAQC,MAAS;AACzC,QAAItB,EAAiB,IAAIuB,EAAQD,CAAI,CAAC,MACpCR,IAAa;AAAA,MAEjB,CAAC,GACDM,EAAO,YAAY,IAAI,OAAOI,GAASC,GAAUC,MAAS;AACxD,YAAI,CAACF,EAAQ,KAAK,WAAW,+BAA+B,GAAG;AAC7D,UAAAE,EAAA;AACA;AAAA,QACF;AAEA,YAAI;AACF,gBAAMR,IAAS,MAAMH,EAAA,GACfY,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,IAAIP,EAAO,GAAG;AACvB;AAAA,UACF;AAEA,gBAAMU,IAAOV,EAAO,MAAM,KAAK,CAACW,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,YAAMd,IAAS,MAAMH,EAAA;AAErB,iBAAWa,KAAQV,EAAO;AACxB,aAAK,SAAS;AAAA,UACZ,UAAU,UAAUU,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,QAAQV,EAAO;AAAA,QACf,MAAM;AAAA,MAAA,CACP;AAAA,IACH;AAAA,EAAA;AAEJ;AAeA,eAAeF,EACbJ,GACAD,GACA;AACA,QAAMsB,IAAS,MAAMC,EAA4BtB,GAAQD,CAAO,GAC1DwB,IAAUvB,EAAO,YAAY,SAC7BwB,IAAQ,MAAMC,EAAmBJ,GAAQE,GAASvB,EAAO,IAAI;AAQnE,SAAO;AAAA,IACL,KARU0B;AAAA,MACVL;AAAA,MACAG;AAAA,MACAD;AAAA,MACAxB,EAAQ,eAAeL;AAAA,IAAA;AAAA,IAKvB,SAAS6B,IACL,yDACAI,EAAS3B,EAAO,MAAM,gCAAgC;AAAA,IAC1D,OAAAwB;AAAA,EAAA;AAEJ;AAEA,eAAsBF,EACpBtB,GACAD,IAA2C,IAC3C;AACA,QAAMsB,IAASO,GAAA,GAITC,IAAW,MAAMC,EAAA;AAEvB,MAAID;AACF,eAAWE,KAAU9C;AACnB,iBAAW+C,KAAQH,EAASE,CAAM,KAAK,CAAA;AACrC,QAAAE,EAASZ,GAAQ,EAAE,QAAAU,GAAQ,MAAAC,EAAA,CAAM;AAAA;AAIrC,eAAWA,KAAQ1C;AACjB,iBAAWyC,KAAU9C;AACnB,QAAAgD,EAASZ,GAAQ,EAAE,QAAAU,GAAQ,MAAAC,EAAA,CAAM;AAKvC,aAAWE,KAAQnC,EAAQ,WAAW,CAAA;AACpC,IAAAkC,EAASZ,GAAQ,OAAOa,KAAS,WAAW,EAAE,QAAQhD,GAAe,MAAMgD,EAAA,IAASA,CAAI;AAG1F,MAAInC,EAAQ,SAAS,IAAO;AAC1B,UAAMoC,IAAQpC,EAAQ,SAAS,CAACqC,EAAKpC,EAAO,MAAM,KAAK,CAAC;AAExD,eAAWqC,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,IAAiCjD,GACjC;AACA,QAAMkD,IAAkB,CAAA;AAExB,aAAW5B,KAAQQ,GAAO;AACxB,UAAMqB,IAAUtB,IACZ,gCAAgCP,EAAK,QAAQ,KAC7C,KAAKA,EAAK,QAAQ;AAEtB,IAAA4B,EAAM;AAAA,MACJ;AAAA,MACA,mBAAmBrD,EAAgByB,EAAK,MAAM,CAAC;AAAA,MAC/C,mBAAmB2B,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,mBAAmBrD,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,QAAMuD,wBAAY,IAAA;AAElB,aAAWf,KAAU9C;AACnB,eAAW+C,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,SAASrC,EACdD,GACAP,IAA4D,IACvC;AACrB,QAAMgD,IAA4B,CAAA;AAElC,MAAIhD,EAAQ,WAAWJ;AACrB,eAAWqB,KAAQV,EAAO;AACxB,MAAAyC,EAAK,KAAK;AAAA,QACR,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,aAAa;AAAA,UACb,MAAM/B,EAAK;AAAA,UACX,KAAK;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,QAER,KAAK;AAAA,QACL,UAAU;AAAA,MAAA,CACX;AAIL,SAAA+B,EAAK,KAAK;AAAA,IACR,OAAO;AAAA,MACL,MAAMzC,EAAO;AAAA,MACb,KAAK;AAAA,IAAA;AAAA,IAEP,KAAK;AAAA,IACL,UAAU;AAAA,EAAA,CACX,GAEMyC;AACT;AAEO,SAASC,GACdC,GACA3C,GACAP,IAA4D,CAAA,GAC5D;AACA,QAAMmD,IAAQ3C,EAA6BD,GAAQP,CAAO,EACvD,IAAIoD,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,eAAe3B,EACbJ,GACAE,GACA+B,GAC+B;AAC/B,QAAMC,KAAc,MAAM,OAAO,aAAa,GAAG,SAC3C/B,IAA8B,CAAA;AAEpC,aAAWO,KAAU9C,GAAU;AAC7B,UAAM6D,IAAQ,CAAC,GAAIzB,EAAO,IAAIU,CAAM,KAAK,CAAA,CAAG,EAAE,KAAA;AAE9C,QAAIe,EAAM,WAAW;AACnB;AAGF,UAAMU,IAAaC,EAAgB1B,CAAM,GACnCS,IAAS,MAAMC,EAASe,CAAU,GAClCE,IAAS,MAAMH,EAAWf,GAAQM,EAAM,KAAK,GAAG,GAAG;AAAA,MACvD,cAAc;AAAA,IAAA,CACf,GACKa,IAAOC,EAAW,QAAQ,EAAE,OAAOF,CAAM,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC,GACnE3C,IAAW,uBAAuBgB,CAAM,IAAI4B,CAAI;AAEtD,IAAAnC,EAAM,KAAK;AAAA,MACT,QAAAO;AAAA,MACA,UAAAhB;AAAA,MACA,MAAM8C,EAAS9C,GAAUQ,GAAS+B,CAAI;AAAA,MACtC,QAAQI;AAAA,IAAA,CACT;AAAA,EACH;AAEA,SAAOlC;AACT;AAEA,SAASiC,EAAgB1B,GAAsB;AAC7C,SAAOnC,EAAQ;AAAA,IACb,GAAGJ,EAAeuC,CAAM,CAAC,2BAA2BA,CAAM,UAAUtC,EAAmBsC,CAAM,CAAC;AAAA,EAAA;AAElG;AAEA,SAAS8B,EAAS9C,GAAkBQ,GAAkB+B,GAAc;AAClE,SAAO/B,IACH,gCAAgCR,CAAQ,KACxCY,EAAS2B,GAAM,UAAUvC,CAAQ,EAAE;AACzC;AAEA,SAASoC,EAAkBW,GAAwB;AACjD,QAAMC,IAAQ,OAAO,QAAQD,EAAI,SAAS,CAAA,CAAE,EACzC,IAAI,CAAC,CAAC9B,GAAMgC,CAAK,MAAOA,MAAU,KAAKhC,IAAO,GAAGA,CAAI,KAAKgC,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,SAASV,EAAkBF,GAAgBnB,GAAsB;AAC/D,QAAM4C,IAAmB;AACzB,MAAIC;AAEJ,SAAQA,IAAWD,EAAiB,KAAKzB,CAAM,KAAI;AACjD,UAAMuB,IAAQI,EAAsBD,EAAS,CAAC,KAAK,EAAE,GAC/CE,IAAUL,EAAM,QAAQA,EAAM,OAAO,GACrCM,IAAYN,EAAM,UAAUA,EAAM,SAAS,KAAK;AAEtD,QAAIK,GAAS;AACX,YAAME,IAAaC,EAAgBF,CAAS,GACtCvB,IAAQ0B,EAAaJ,CAAO;AAElC,iBAAWrC,KAAUuC;AACnB,mBAAWtC,KAAQc;AACjB,UAAAb,EAASZ,GAAQ,EAAE,QAAAU,GAAQ,MAAAC,EAAA,CAAM;AAAA,IAGvC;AAAA,EACF;AAEA,QAAMyC,IACJ;AACF,MAAIC;AAEJ,SAAQA,IAAcD,EAAmB,KAAKjC,CAAM,KAAI;AACtD,UAAMT,IAAS4C,EAASD,EAAY,CAAC,GAAG,MAAM,8BAA8B,IAAI,CAAC,CAAC;AAClF,IAAAzC,EAASZ,GAAQ;AAAA,MACf,QAAQU,KAAU7C;AAAA,MAClB,MAAMwF,EAAY,CAAC,KAAK;AAAA,IAAA,CACzB;AAAA,EACH;AAEA,QAAME,IAAoB;AAC1B,MAAIC;AAEJ,SAAQA,IAAcD,EAAkB,KAAKpC,CAAM;AACjD,IAAAP,EAASZ,GAAQ;AAAA,MACf,QAAQnC;AAAA,MACR,MAAM2F,EAAY,CAAC,KAAK;AAAA,IAAA,CACzB;AAEL;AAEA,SAASV,EAAsB3B,GAAgB;AAC7C,QAAMuB,IAAgC,CAAA,GAChCe,IAAc;AACpB,MAAIC;AAEJ,SAAQA,IAAQD,EAAY,KAAKtC,CAAM;AACrC,IAAAuB,EAAMgB,EAAM,CAAC,KAAK,EAAE,IAAIA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAK;AAGlD,SAAOhB;AACT;AAEA,SAASiB,EAAkBhB,GAAe;AACxC,SAAOA,EAAM,QAAQ,kBAAkB,IAAI;AAC7C;AAEA,SAAS/B,EAASZ,GAAsBa,GAA+C;AACrF,QAAMH,IAASG,EAAK,UAAUhD,GACxB8C,IAAOE,EAAK,KAAK,KAAA;AAEvB,EAAI,CAACjD,EAAS,SAAS8C,CAAM,KAAK,CAAC5C,EAAgB,KAAK6C,CAAI,KAI5DX,EAAO,IAAIU,CAAM,GAAG,IAAIC,CAAI;AAC9B;AAEA,eAAeF,IAAmE;AAChF,MAAI;AACF,UAAMmD,IAAM7C,EAAK8C,EAAc,YAAY,GAAG,GAAG,IAAI,GAC/CC,IAAe/C,EAAK6C,GAAK,oBAAoB,GAC7CzC,IAAS,MAAMC,EAAS0C,GAAc,MAAM;AAClD,WAAO,KAAK,MAAM3C,CAAM;AAAA,EAC1B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAASmC,EAASX,GAA0C;AAC1D,QAAMoB,IAAapB,IAAQgB,EAAkBhB,CAAK,IAAI;AACtD,SAAO/E,EAAS,SAASmG,CAA0B,IAC9CA,IACD;AACN;AAEA,SAASZ,EAAaJ,GAA2B;AAC/C,QAAMiB,IAAiB;AACvB,MAAIC;AACJ,QAAMxC,IAAkB,CAAA;AAExB,SAAQwC,IAAWD,EAAe,KAAKjB,CAAO,KAAI;AAChD,UAAMmB,IAAYD,EAAS,CAAC,KAAK;AACjC,IAAInG,EAAgB,KAAKoG,CAAS,KAChCzC,EAAM,KAAKyC,CAAS;AAAA,EAExB;AAEA,MAAIzC,EAAM,WAAW,GAAG;AACtB,UAAMd,IAAOgD,EAAkBZ,CAAO;AACtC,IAAIjF,EAAgB,KAAK6C,CAAI,KAC3Bc,EAAM,KAAKd,CAAI;AAAA,EAEnB;AAEA,SAAOc;AACT;AAEA,SAASyB,EAAgBF,GAAmC;AAC1D,QAAMtC,IAAS4C,EAASN,CAAS;AACjC,MAAItC,EAAQ,QAAO,CAACA,CAAM;AAE1B,QAAMsD,IAAiB;AACvB,MAAIC;AACJ,QAAME,wBAAY,IAAA;AAElB,SAAQF,IAAWD,EAAe,KAAKhB,CAAS,KAAI;AAClD,UAAMkB,IAAYD,EAAS,CAAC,KAAK,IAC3BG,IAAId,EAASY,CAAS;AAC5B,IAAIE,KACFD,EAAM,IAAIC,CAAC;AAAA,EAEf;AAEA,SAAID,EAAM,OAAO,IAAU,CAAC,GAAGA,CAAK,IAE7B,CAAC,GAAGvG,CAAQ;AACrB;AAEA,SAAS2C,KAA+B;AACtC,SAAO,IAAI,IAAI3C,EAAS,IAAI,CAAC8C,MAAW,CAACA,GAAQ,oBAAI,IAAA,CAAa,CAAC,CAAC;AACtE;AAEA,eAAeQ,EAAgBF,GAAiC;AAC9D,MAAI;AACF,UAAMqD,IAAU,MAAMC,EAAQtD,GAAM,EAAE,eAAe,IAAM;AAa3D,YAZc,MAAM,QAAQ;AAAA,MAC1BqD,EAAQ,IAAI,OAAOE,MAAU;AAC3B,cAAMC,IAAOzD,EAAKC,GAAMuD,EAAM,IAAI;AAElC,eAAIA,EAAM,gBACDvG,EAAY,IAAIuG,EAAM,IAAI,IAAI,CAAA,IAAKrD,EAAgBsD,CAAI,IAGzDzG,EAAiB,IAAIuB,EAAQiF,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,SAASlE,EAAS2B,GAAcuC,GAAc;AAE5C,SAAO,GADWvC,EAAK,SAAS,GAAG,IAAIA,IAAO,GAAGA,CAAI,GAClC,GAAGuC,CAAI,GAAG,WAAW,GAAGC,CAAG,IAAI,GAAG;AACvD;AAEO,SAASC,GAA8B1E,GAAsB;AAClE,SAAOpC,EACJ,IAAI,CAAC8C,MAAW,GAAGA,CAAM,KAAK,CAAC,GAAIV,EAAO,IAAIU,CAAM,KAAK,CAAA,CAAG,EAAE,KAAA,EAAO,KAAK,IAAI,CAAC,EAAE,EACjF,KAAK;AAAA,CAAI;AACd;"}
|