@cyberalien/svg-utils 1.2.0 → 1.2.1
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/lib/svg-css/icon-set/add.js +10 -2
- package/lib/svg-css/icon-set/create.js +4 -1
- package/lib/svg-css/icon-set/get.js +2 -2
- package/lib/svg-css/icon-set/minify/expand.d.ts +5 -1
- package/lib/svg-css/icon-set/minify/expand.js +16 -1
- package/lib/svg-css/icon-set/minify/minify.js +27 -0
- package/lib/svg-css/icon-set/types.d.ts +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { stringifyCSSAnimationFrames, stringifyCSSRules } from "../../css/stringify.js";
|
|
2
2
|
import { minifyCSS } from "../../css/minify.js";
|
|
3
|
+
import { expandSVGCSSIconSetFallback } from "./minify/expand.js";
|
|
3
4
|
|
|
4
5
|
function minifyRules(value) {
|
|
5
6
|
return (value ? minifyCSS(typeof value === "string" ? value : stringifyCSSRules(value)) : void 0) || void 0;
|
|
@@ -15,12 +16,19 @@ function stringifyObject(data) {
|
|
|
15
16
|
* Add icon to an icon set
|
|
16
17
|
*/
|
|
17
18
|
function addIconToSVGCSSIconSet(iconSet, iconName, icon) {
|
|
18
|
-
|
|
19
|
+
const iconData = {
|
|
19
20
|
content: icon.content,
|
|
20
|
-
fallback: icon.fallback,
|
|
21
21
|
states: icon.states,
|
|
22
22
|
viewBox: icon.viewBox
|
|
23
23
|
};
|
|
24
|
+
let fallback = icon.fallback;
|
|
25
|
+
if (fallback) {
|
|
26
|
+
const fallbackPrefix = iconSet.fallbackPrefix ?? "";
|
|
27
|
+
if (fallbackPrefix) if (fallback.startsWith(fallbackPrefix)) fallback = fallback.slice(fallbackPrefix.length);
|
|
28
|
+
else expandSVGCSSIconSetFallback(iconSet);
|
|
29
|
+
iconData.fallback = fallback;
|
|
30
|
+
}
|
|
31
|
+
iconSet.icons[iconName] = iconData;
|
|
24
32
|
const { classes, animations, statefulClasses, keyframes } = icon;
|
|
25
33
|
const classNames = new Set([...Object.keys(classes || {}), ...Object.keys(statefulClasses || {})]);
|
|
26
34
|
for (const className of classNames) if (!iconSet.classes?.[className]) {
|
|
@@ -6,7 +6,7 @@ function getSVGCSSIconFromIconSet(iconSet, name) {
|
|
|
6
6
|
const fullName = iconSet.aliases?.[name] || name;
|
|
7
7
|
const data = iconSet.icons[fullName];
|
|
8
8
|
if (!data) return;
|
|
9
|
-
const { viewBoxes, css, fallbackPrefix = ""
|
|
9
|
+
const { viewBoxes, css, fallbackPrefix = "" } = iconSet;
|
|
10
10
|
let viewBox = data.viewBox;
|
|
11
11
|
if (typeof viewBox === "number") viewBox = viewBoxes?.[viewBox];
|
|
12
12
|
if (!viewBox) return;
|
|
@@ -67,7 +67,7 @@ function getSVGCSSIconFromIconSet(iconSet, name) {
|
|
|
67
67
|
content,
|
|
68
68
|
viewBox,
|
|
69
69
|
states,
|
|
70
|
-
fallback: typeof data.fallback === "string" ? `${fallbackPrefix}${data.fallback}
|
|
70
|
+
fallback: typeof data.fallback === "string" ? `${fallbackPrefix}${data.fallback}` : void 0
|
|
71
71
|
};
|
|
72
72
|
let _key;
|
|
73
73
|
for (_key in classes) {
|
|
@@ -3,8 +3,12 @@ import { SVGCSSIconSet, SVGCSSIconSetClassData } from "../types.js";
|
|
|
3
3
|
* Expand class content from icon set
|
|
4
4
|
*/
|
|
5
5
|
declare function expandSVGCSSIconSetClass(css: Required<SVGCSSIconSet>['css'], classContent: SVGCSSIconSetClassData): void;
|
|
6
|
+
/**
|
|
7
|
+
* Expand fallback prefix
|
|
8
|
+
*/
|
|
9
|
+
declare function expandSVGCSSIconSetFallback(iconSet: SVGCSSIconSet): void;
|
|
6
10
|
/**
|
|
7
11
|
* Unminify icon set
|
|
8
12
|
*/
|
|
9
13
|
declare function expandSVGCSSIconSet(iconSet: SVGCSSIconSet): void;
|
|
10
|
-
export { expandSVGCSSIconSet, expandSVGCSSIconSetClass };
|
|
14
|
+
export { expandSVGCSSIconSet, expandSVGCSSIconSetClass, expandSVGCSSIconSetFallback };
|
|
@@ -13,10 +13,25 @@ function expandSVGCSSIconSetClass(css, classContent) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
+
* Expand fallback prefix
|
|
17
|
+
*/
|
|
18
|
+
function expandSVGCSSIconSetFallback(iconSet) {
|
|
19
|
+
const fallbackPrefix = iconSet.fallbackPrefix ?? "";
|
|
20
|
+
if (fallbackPrefix) {
|
|
21
|
+
delete iconSet.fallbackPrefix;
|
|
22
|
+
for (const iconName in iconSet.icons) {
|
|
23
|
+
const icon = iconSet.icons[iconName];
|
|
24
|
+
const fallback = icon.fallback;
|
|
25
|
+
if (fallback) icon.fallback = fallbackPrefix + fallback;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
16
30
|
* Unminify icon set
|
|
17
31
|
*/
|
|
18
32
|
function expandSVGCSSIconSet(iconSet) {
|
|
19
33
|
const { viewBoxes, statesList, css } = iconSet;
|
|
34
|
+
expandSVGCSSIconSetFallback(iconSet);
|
|
20
35
|
if (viewBoxes || statesList) {
|
|
21
36
|
for (const iconName in iconSet.icons) {
|
|
22
37
|
const icon = iconSet.icons[iconName];
|
|
@@ -32,4 +47,4 @@ function expandSVGCSSIconSet(iconSet) {
|
|
|
32
47
|
}
|
|
33
48
|
}
|
|
34
49
|
|
|
35
|
-
export { expandSVGCSSIconSet, expandSVGCSSIconSetClass };
|
|
50
|
+
export { expandSVGCSSIconSet, expandSVGCSSIconSetClass, expandSVGCSSIconSetFallback };
|
|
@@ -42,6 +42,33 @@ function minifySVGCSSIconSet(iconSet) {
|
|
|
42
42
|
map.set(value, index);
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
|
+
if (!iconSet.fallbackPrefix) {
|
|
46
|
+
let commonPrefix;
|
|
47
|
+
for (const iconName in iconSet.icons) {
|
|
48
|
+
const fallback = iconSet.icons[iconName].fallback;
|
|
49
|
+
if (fallback) {
|
|
50
|
+
const parts = fallback.split(":");
|
|
51
|
+
if (parts.length !== 2) {
|
|
52
|
+
commonPrefix = null;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
const prefix = parts[0];
|
|
56
|
+
if (commonPrefix === void 0) commonPrefix = prefix;
|
|
57
|
+
else if (commonPrefix !== prefix) {
|
|
58
|
+
commonPrefix = null;
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (commonPrefix) {
|
|
64
|
+
iconSet.fallbackPrefix = `${commonPrefix}:`;
|
|
65
|
+
for (const iconName in iconSet.icons) {
|
|
66
|
+
const icon = iconSet.icons[iconName];
|
|
67
|
+
const fallback = icon.fallback;
|
|
68
|
+
if (fallback) icon.fallback = fallback.slice(commonPrefix.length + 1);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
45
72
|
for (const iconName in iconSet.icons) {
|
|
46
73
|
const icon = iconSet.icons[iconName];
|
|
47
74
|
const viewBoxValue = icon.viewBox;
|
|
@@ -35,8 +35,8 @@ interface SVGCSSIconSetSharedData {
|
|
|
35
35
|
* Does not include metadata
|
|
36
36
|
*/
|
|
37
37
|
interface SVGCSSIconSet extends SVGCSSIconSetSharedData {
|
|
38
|
+
version: 1;
|
|
38
39
|
fallbackPrefix?: string;
|
|
39
|
-
fallbackSuffix?: string;
|
|
40
40
|
icons: Record<string, SVGCSSIconSetIcon>;
|
|
41
41
|
aliases?: Record<string, string>;
|
|
42
42
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"type": "module",
|
|
4
4
|
"description": "Common functions for working with SVG used by various packages.",
|
|
5
5
|
"author": "Vjacheslav Trushkin",
|
|
6
|
-
"version": "1.2.
|
|
6
|
+
"version": "1.2.1",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"bugs": "https://github.com/cyberalien/svg-utils/issues",
|
|
9
9
|
"homepage": "https://cyberalien.dev/",
|