-
Notifications
You must be signed in to change notification settings - Fork 0
/
svgo.config.js
56 lines (48 loc) · 1.22 KB
/
svgo.config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const addClasses = (item, classes) => {
if (item.name !== "g") {
item.addAttr({
name: "class",
value: classes,
});
}
if (Array.isArray(item.children)) {
item.children.forEach((i) => addClasses(i, classes));
}
};
const addSvgClassesHandler = (item) => {
if (item.type === "element" && item.name === "svg") {
const style = item.style.styleValue
.split(";")
.filter(Boolean)
.reduce((obj, st) => {
const [property, value] = st.split(":");
obj[property] = value;
return obj;
}, {});
delete item.style;
style["vector-effect"] = "non-scaling-stroke";
item.attributes = {
...item.attributes,
...style,
};
}
if (Array.isArray(item.children)) {
item.children.forEach(addSvgClassesHandler);
}
if (item.attributes?.id) {
if (item.attributes?.id.startsWith("Light.")) {
item.children.forEach((i) => addClasses(i, "dark:hidden"));
} else if (item.attributes?.id.startsWith("Dark.")) {
item.children.forEach((i) => addClasses(i, "hidden dark:block"));
}
}
};
module.exports = {
plugins: [
{
name: "addSvgClassesPlugin",
type: "perItem",
fn: addSvgClassesHandler,
},
],
};