react-native-nano-icons 0.0.0 → 0.1.0

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.
Files changed (159) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/app.plugin.js +1 -0
  4. package/lib/commonjs/cli/build.d.ts +28 -0
  5. package/lib/commonjs/cli/build.js +83 -0
  6. package/lib/commonjs/cli/config.d.ts +9 -0
  7. package/lib/commonjs/cli/config.js +25 -0
  8. package/lib/commonjs/cli/index.d.ts +4 -0
  9. package/lib/commonjs/cli/index.js +13 -0
  10. package/lib/commonjs/cli/link.d.ts +11 -0
  11. package/lib/commonjs/cli/link.js +135 -0
  12. package/lib/commonjs/cli/logger.d.ts +27 -0
  13. package/lib/commonjs/cli/logger.js +83 -0
  14. package/lib/commonjs/index.node.js +8 -0
  15. package/lib/commonjs/plugin/src/buildFonts.d.ts +7 -0
  16. package/lib/commonjs/plugin/src/buildFonts.js +23 -0
  17. package/lib/commonjs/plugin/src/index.d.ts +5 -0
  18. package/lib/commonjs/plugin/src/index.js +43 -0
  19. package/lib/commonjs/plugin/src/types.d.ts +31 -0
  20. package/lib/commonjs/plugin/src/types.js +2 -0
  21. package/lib/commonjs/plugin/src/withNanoIconsFontLinking.d.ts +14 -0
  22. package/lib/commonjs/plugin/src/withNanoIconsFontLinking.js +92 -0
  23. package/lib/commonjs/scripts/cli.js +28 -0
  24. package/lib/commonjs/src/const/colors.d.ts +1 -0
  25. package/lib/commonjs/src/const/colors.js +153 -0
  26. package/lib/commonjs/src/core/font/compile.d.ts +9 -0
  27. package/lib/commonjs/src/core/font/compile.js +68 -0
  28. package/lib/commonjs/src/core/font/metrics.d.ts +1 -0
  29. package/lib/commonjs/src/core/font/metrics.js +33 -0
  30. package/lib/commonjs/src/core/pipeline/config.d.ts +14 -0
  31. package/lib/commonjs/src/core/pipeline/config.js +17 -0
  32. package/lib/commonjs/src/core/pipeline/index.d.ts +3 -0
  33. package/lib/commonjs/src/core/pipeline/index.js +7 -0
  34. package/lib/commonjs/src/core/pipeline/managers.d.ts +11 -0
  35. package/lib/commonjs/src/core/pipeline/managers.js +89 -0
  36. package/lib/commonjs/src/core/pipeline/run.d.ts +14 -0
  37. package/lib/commonjs/src/core/pipeline/run.js +99 -0
  38. package/lib/commonjs/src/core/svg/layers.d.ts +24 -0
  39. package/lib/commonjs/src/core/svg/layers.js +42 -0
  40. package/lib/commonjs/src/core/svg/svg_dom.d.ts +22 -0
  41. package/lib/commonjs/src/core/svg/svg_dom.js +84 -0
  42. package/lib/commonjs/src/core/svg/svg_pathops.d.ts +21 -0
  43. package/lib/commonjs/src/core/svg/svg_pathops.js +611 -0
  44. package/lib/commonjs/src/core/types.d.ts +120 -0
  45. package/lib/commonjs/src/core/types.js +2 -0
  46. package/lib/commonjs/src/utils/fingerPrint.d.ts +1 -0
  47. package/lib/commonjs/src/utils/fingerPrint.js +20 -0
  48. package/lib/commonjs/src/utils/parse.d.ts +2 -0
  49. package/lib/commonjs/src/utils/parse.js +64 -0
  50. package/lib/module/const/colors.js +153 -0
  51. package/lib/module/const/colors.js.map +1 -0
  52. package/lib/module/core/font/compile.js +70 -0
  53. package/lib/module/core/font/compile.js.map +1 -0
  54. package/lib/module/core/font/metrics.js +37 -0
  55. package/lib/module/core/font/metrics.js.map +1 -0
  56. package/lib/module/core/pipeline/config.js +20 -0
  57. package/lib/module/core/pipeline/config.js.map +1 -0
  58. package/lib/module/core/pipeline/index.js +5 -0
  59. package/lib/module/core/pipeline/index.js.map +1 -0
  60. package/lib/module/core/pipeline/managers.js +80 -0
  61. package/lib/module/core/pipeline/managers.js.map +1 -0
  62. package/lib/module/core/pipeline/run.js +114 -0
  63. package/lib/module/core/pipeline/run.js.map +1 -0
  64. package/lib/module/core/shims/pathops.py +181 -0
  65. package/lib/module/core/svg/layers.js +51 -0
  66. package/lib/module/core/svg/layers.js.map +1 -0
  67. package/lib/module/core/svg/svg_dom.js +83 -0
  68. package/lib/module/core/svg/svg_dom.js.map +1 -0
  69. package/lib/module/core/svg/svg_pathops.js +566 -0
  70. package/lib/module/core/svg/svg_pathops.js.map +1 -0
  71. package/lib/module/core/tsconfig.json +32 -0
  72. package/lib/module/core/types.js +2 -0
  73. package/lib/module/core/types.js.map +1 -0
  74. package/lib/module/createNanoIconsSet.js +84 -0
  75. package/lib/module/createNanoIconsSet.js.map +1 -0
  76. package/lib/module/index.js +5 -0
  77. package/lib/module/index.js.map +1 -0
  78. package/lib/module/index.node.js +13 -0
  79. package/lib/module/index.node.js.map +1 -0
  80. package/lib/module/package.json +1 -0
  81. package/lib/module/utils/fingerPrint.js +17 -0
  82. package/lib/module/utils/fingerPrint.js.map +1 -0
  83. package/lib/module/utils/parse.js +53 -0
  84. package/lib/module/utils/parse.js.map +1 -0
  85. package/lib/typescript/__tests__/build.unit.test.d.ts +3 -0
  86. package/lib/typescript/__tests__/build.unit.test.d.ts.map +1 -0
  87. package/lib/typescript/__tests__/clippath.e2e.test.d.ts +3 -0
  88. package/lib/typescript/__tests__/clippath.e2e.test.d.ts.map +1 -0
  89. package/lib/typescript/__tests__/fingerprint.unit.test.d.ts +3 -0
  90. package/lib/typescript/__tests__/fingerprint.unit.test.d.ts.map +1 -0
  91. package/lib/typescript/__tests__/pipeline.e2e.test.d.ts +3 -0
  92. package/lib/typescript/__tests__/pipeline.e2e.test.d.ts.map +1 -0
  93. package/lib/typescript/__tests__/placement.unit.test.d.ts +3 -0
  94. package/lib/typescript/__tests__/placement.unit.test.d.ts.map +1 -0
  95. package/lib/typescript/__tests__/svg_dom.unit.test.d.ts +3 -0
  96. package/lib/typescript/__tests__/svg_dom.unit.test.d.ts.map +1 -0
  97. package/lib/typescript/cli/build.d.ts +29 -0
  98. package/lib/typescript/cli/build.d.ts.map +1 -0
  99. package/lib/typescript/cli/logger.d.ts +28 -0
  100. package/lib/typescript/cli/logger.d.ts.map +1 -0
  101. package/lib/typescript/package.json +1 -0
  102. package/lib/typescript/src/const/colors.d.ts +2 -0
  103. package/lib/typescript/src/const/colors.d.ts.map +1 -0
  104. package/lib/typescript/src/core/font/compile.d.ts +10 -0
  105. package/lib/typescript/src/core/font/compile.d.ts.map +1 -0
  106. package/lib/typescript/src/core/font/metrics.d.ts +2 -0
  107. package/lib/typescript/src/core/font/metrics.d.ts.map +1 -0
  108. package/lib/typescript/src/core/pipeline/config.d.ts +15 -0
  109. package/lib/typescript/src/core/pipeline/config.d.ts.map +1 -0
  110. package/lib/typescript/src/core/pipeline/index.d.ts +4 -0
  111. package/lib/typescript/src/core/pipeline/index.d.ts.map +1 -0
  112. package/lib/typescript/src/core/pipeline/managers.d.ts +12 -0
  113. package/lib/typescript/src/core/pipeline/managers.d.ts.map +1 -0
  114. package/lib/typescript/src/core/pipeline/run.d.ts +15 -0
  115. package/lib/typescript/src/core/pipeline/run.d.ts.map +1 -0
  116. package/lib/typescript/src/core/svg/layers.d.ts +25 -0
  117. package/lib/typescript/src/core/svg/layers.d.ts.map +1 -0
  118. package/lib/typescript/src/core/svg/svg_dom.d.ts +23 -0
  119. package/lib/typescript/src/core/svg/svg_dom.d.ts.map +1 -0
  120. package/lib/typescript/src/core/svg/svg_pathops.d.ts +22 -0
  121. package/lib/typescript/src/core/svg/svg_pathops.d.ts.map +1 -0
  122. package/lib/typescript/src/core/types.d.ts +121 -0
  123. package/lib/typescript/src/core/types.d.ts.map +1 -0
  124. package/lib/typescript/src/createNanoIconsSet.d.ts +19 -0
  125. package/lib/typescript/src/createNanoIconsSet.d.ts.map +1 -0
  126. package/lib/typescript/src/index.d.ts +3 -0
  127. package/lib/typescript/src/index.d.ts.map +1 -0
  128. package/lib/typescript/src/index.node.d.ts +2 -0
  129. package/lib/typescript/src/index.node.d.ts.map +1 -0
  130. package/lib/typescript/src/utils/fingerPrint.d.ts +2 -0
  131. package/lib/typescript/src/utils/fingerPrint.d.ts.map +1 -0
  132. package/lib/typescript/src/utils/parse.d.ts +3 -0
  133. package/lib/typescript/src/utils/parse.d.ts.map +1 -0
  134. package/package.json +160 -1
  135. package/plugin/src/buildFonts.ts +29 -0
  136. package/plugin/src/index.ts +68 -0
  137. package/plugin/src/types.ts +33 -0
  138. package/plugin/src/withNanoIconsFontLinking.ts +119 -0
  139. package/plugin/tsconfig.json +9 -0
  140. package/scripts/cli.ts +34 -0
  141. package/scripts/tsconfig.json +25 -0
  142. package/src/const/colors.ts +150 -0
  143. package/src/core/font/compile.ts +96 -0
  144. package/src/core/font/metrics.ts +44 -0
  145. package/src/core/pipeline/config.ts +24 -0
  146. package/src/core/pipeline/index.ts +3 -0
  147. package/src/core/pipeline/managers.ts +114 -0
  148. package/src/core/pipeline/run.ts +151 -0
  149. package/src/core/shims/pathops.py +181 -0
  150. package/src/core/svg/layers.ts +66 -0
  151. package/src/core/svg/svg_dom.ts +99 -0
  152. package/src/core/svg/svg_pathops.ts +796 -0
  153. package/src/core/tsconfig.json +32 -0
  154. package/src/core/types.ts +138 -0
  155. package/src/createNanoIconsSet.tsx +131 -0
  156. package/src/index.node.ts +14 -0
  157. package/src/index.ts +7 -0
  158. package/src/utils/fingerPrint.ts +20 -0
  159. package/src/utils/parse.ts +67 -0
@@ -0,0 +1,120 @@
1
+ export type NanoLogger = {
2
+ start: (msg: string) => void;
3
+ update: (msg: string) => void;
4
+ succeed: (msg: string) => void;
5
+ fail: (msg: string) => void;
6
+ /** Only printed when level is 'verbose'. */
7
+ info: (msg: string) => void;
8
+ warn: (msg: string) => void;
9
+ };
10
+ export type Point = readonly [number, number];
11
+ export type Cmd = readonly number[];
12
+ export type VerbMap = {
13
+ MOVE: number;
14
+ LINE: number;
15
+ QUAD: number;
16
+ CONIC: number;
17
+ CUBIC: number;
18
+ CLOSE: number;
19
+ };
20
+ export type WrappedPath = {
21
+ p: PathKitPath;
22
+ meta: {
23
+ moves: Point[];
24
+ };
25
+ };
26
+ export interface PathKitPath {
27
+ delete?: () => void;
28
+ moveTo: (x: number, y: number) => void;
29
+ lineTo: (x: number, y: number) => void;
30
+ quadTo: (x1: number, y1: number, x2: number, y2: number) => void;
31
+ cubicTo: (x1: number, y1: number, x2: number, y2: number, x3: number, y3: number) => void;
32
+ close: () => void;
33
+ simplify: () => void;
34
+ toSVGString: () => string;
35
+ toCmds: () => Cmd[];
36
+ getBounds: () => {
37
+ fLeft: number;
38
+ fTop: number;
39
+ fRight: number;
40
+ fBottom: number;
41
+ };
42
+ getFillType?: () => number;
43
+ setFillType: (t: number) => void;
44
+ dash?: (on: number, off: number, phase: number) => void;
45
+ stroke: (opts: {
46
+ width: number;
47
+ cap: number;
48
+ join: number;
49
+ miter_limit: number;
50
+ }) => PathKitPath | null;
51
+ transform: (a: number, c: number, e: number, b: number, d: number, f: number, g: number, h: number, i: number) => void;
52
+ }
53
+ export interface PathKitModule {
54
+ MOVE_VERB?: number;
55
+ LINE_VERB?: number;
56
+ QUAD_VERB?: number;
57
+ CONIC_VERB?: number;
58
+ CUBIC_VERB?: number;
59
+ CLOSE_VERB?: number;
60
+ FillType?: {
61
+ EVENODD?: number;
62
+ EVEN_ODD?: number;
63
+ WINDING?: number;
64
+ NONZERO?: number;
65
+ };
66
+ StrokeCap?: {
67
+ BUTT?: number;
68
+ ROUND?: number;
69
+ SQUARE?: number;
70
+ };
71
+ StrokeJoin?: {
72
+ MITER?: number;
73
+ ROUND?: number;
74
+ BEVEL?: number;
75
+ };
76
+ PathOp?: {
77
+ UNION?: number;
78
+ INTERSECT?: number;
79
+ DIFFERENCE?: number;
80
+ };
81
+ NewPath: (src?: PathKitPath) => PathKitPath;
82
+ FromSVGString: (svg: string) => PathKitPath | null;
83
+ MakeFromOp: (a: PathKitPath, b: PathKitPath, op: number) => PathKitPath | null;
84
+ }
85
+ export type PyodideModule = {
86
+ mountNodeFS: (mountpoint: string, hostPath: string) => void;
87
+ registerJsModule: (name: string, mod: unknown) => void;
88
+ loadPackage: (pkgs: string[], options?: {
89
+ messageCallback?: (msg: string) => void;
90
+ errorCallback?: (msg: string) => void;
91
+ }) => Promise<void>;
92
+ runPythonAsync: (code: string) => Promise<unknown>;
93
+ runPython: (code: string) => string;
94
+ FS: {
95
+ writeFile: (path: string, data: string) => void;
96
+ };
97
+ globals: {
98
+ set: (key: string, value: unknown) => void;
99
+ get: (key: string) => unknown;
100
+ };
101
+ };
102
+ export type GlyphLayer = {
103
+ codepoint: number;
104
+ color: string;
105
+ };
106
+ export type GlyphEntry = {
107
+ adv: number;
108
+ layers: GlyphLayer[];
109
+ };
110
+ export type IconsMap = Record<string, GlyphEntry>;
111
+ export type NanoGlyphMap = {
112
+ meta: {
113
+ fontFamily: string;
114
+ upm: number;
115
+ safeZone: number;
116
+ startUnicode: number;
117
+ hash?: string;
118
+ };
119
+ icons: IconsMap;
120
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1 @@
1
+ export declare function getFingerprintSync(dir: string): string;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getFingerprintSync = getFingerprintSync;
4
+ const crypto = require('crypto');
5
+ const fs = require('fs');
6
+ const path = require('path');
7
+ function getFingerprintSync(dir) {
8
+ const files = fs
9
+ .readdirSync(dir)
10
+ .filter((f) => f.endsWith('.svg'))
11
+ .sort();
12
+ const hash = crypto.createHash('sha256');
13
+ for (const file of files) {
14
+ const filePath = path.join(dir, file);
15
+ // Hash both path and content
16
+ hash.update(file);
17
+ hash.update(fs.readFileSync(filePath));
18
+ }
19
+ return hash.digest('hex');
20
+ }
@@ -0,0 +1,2 @@
1
+ export declare function parseCodepointFromFilename(filename: string): number;
2
+ export declare function parseColor(color: string): [r: number, g: number, b: number, a: number];
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseCodepointFromFilename = parseCodepointFromFilename;
4
+ exports.parseColor = parseColor;
5
+ const colors_1 = require("../const/colors");
6
+ // e.g. u0041.svg -> 65
7
+ function parseCodepointFromFilename(filename) {
8
+ const m = /^u([0-9a-fA-F]+)\.svg$/.exec(filename);
9
+ if (!m)
10
+ throw new Error(`Unexpected glyph filename: ${filename}`);
11
+ return parseInt(m[1], 16);
12
+ }
13
+ // e.g. #ff0000 -> [255, 0, 0, 1], rgba(255, 0, 0, 0.5) -> [255, 0, 0, 0.5], rgb(255, 0, 0) -> [255, 0, 0, 1], blue -> [0, 0, 255, 1] etc.
14
+ function parseColor(color) {
15
+ const c = color.trim();
16
+ // rgba(r,g,b,a)
17
+ if (c.indexOf('rgba(') === 0) {
18
+ const inner = c.slice(5, c.indexOf(')'));
19
+ const p = inner.split(',');
20
+ return [+(p[0] ?? '0'), +(p[1] ?? '0'), +(p[2] ?? '0'), +(p[3] ?? '1')];
21
+ }
22
+ // rgb(r,g,b)
23
+ if (c.indexOf('rgb(') === 0) {
24
+ const inner = c.slice(4, c.indexOf(')'));
25
+ const p = inner.split(',');
26
+ return [+(p[0] ?? '0'), +(p[1] ?? '0'), +(p[2] ?? '0'), 1];
27
+ }
28
+ // hex — first char is '#' (charCode 35)
29
+ if (c.charCodeAt(0) === 35) {
30
+ if (c.length === 9) {
31
+ // #rrggbbaa
32
+ return [
33
+ parseInt(c.slice(1, 3), 16),
34
+ parseInt(c.slice(3, 5), 16),
35
+ parseInt(c.slice(5, 7), 16),
36
+ parseInt(c.slice(7, 9), 16) / 255,
37
+ ];
38
+ }
39
+ if (c.length === 7) {
40
+ // #rrggbb
41
+ return [
42
+ parseInt(c.slice(1, 3), 16),
43
+ parseInt(c.slice(3, 5), 16),
44
+ parseInt(c.slice(5, 7), 16),
45
+ 1,
46
+ ];
47
+ }
48
+ if (c.length === 4) {
49
+ // #rgb — expand each nibble × 17
50
+ return [
51
+ parseInt(c.slice(1, 2), 16) * 17,
52
+ parseInt(c.slice(2, 3), 16) * 17,
53
+ parseInt(c.slice(3, 4), 16) * 17,
54
+ 1,
55
+ ];
56
+ }
57
+ }
58
+ // named color lookup (O(1))
59
+ const named = colors_1.CSS_NAMED_COLORS[c.toLowerCase()];
60
+ if (named !== undefined)
61
+ return [named[0], named[1], named[2], 1];
62
+ // unknown — SVG default is opaque black
63
+ return [0, 0, 0, 1];
64
+ }
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+
3
+ export const CSS_NAMED_COLORS = {
4
+ aliceblue: [240, 248, 255],
5
+ antiquewhite: [250, 235, 215],
6
+ aqua: [0, 255, 255],
7
+ aquamarine: [127, 255, 212],
8
+ azure: [240, 255, 255],
9
+ beige: [245, 245, 220],
10
+ bisque: [255, 228, 196],
11
+ black: [0, 0, 0],
12
+ blanchedalmond: [255, 235, 205],
13
+ blue: [0, 0, 255],
14
+ blueviolet: [138, 43, 226],
15
+ brown: [165, 42, 42],
16
+ burlywood: [222, 184, 135],
17
+ cadetblue: [95, 158, 160],
18
+ chartreuse: [127, 255, 0],
19
+ chocolate: [210, 105, 30],
20
+ coral: [255, 127, 80],
21
+ cornflowerblue: [100, 149, 237],
22
+ cornsilk: [255, 248, 220],
23
+ crimson: [220, 20, 60],
24
+ cyan: [0, 255, 255],
25
+ darkblue: [0, 0, 139],
26
+ darkcyan: [0, 139, 139],
27
+ darkgoldenrod: [184, 134, 11],
28
+ darkgray: [169, 169, 169],
29
+ darkgreen: [0, 100, 0],
30
+ darkgrey: [169, 169, 169],
31
+ darkkhaki: [189, 183, 107],
32
+ darkmagenta: [139, 0, 139],
33
+ darkolivegreen: [85, 107, 47],
34
+ darkorange: [255, 140, 0],
35
+ darkorchid: [153, 50, 204],
36
+ darkred: [139, 0, 0],
37
+ darksalmon: [233, 150, 122],
38
+ darkseagreen: [143, 188, 143],
39
+ darkslateblue: [72, 61, 139],
40
+ darkslategray: [47, 79, 79],
41
+ darkslategrey: [47, 79, 79],
42
+ darkturquoise: [0, 206, 209],
43
+ darkviolet: [148, 0, 211],
44
+ deeppink: [255, 20, 147],
45
+ deepskyblue: [0, 191, 255],
46
+ dimgray: [105, 105, 105],
47
+ dimgrey: [105, 105, 105],
48
+ dodgerblue: [30, 144, 255],
49
+ firebrick: [178, 34, 34],
50
+ floralwhite: [255, 250, 240],
51
+ forestgreen: [34, 139, 34],
52
+ fuchsia: [255, 0, 255],
53
+ gainsboro: [220, 220, 220],
54
+ ghostwhite: [248, 248, 255],
55
+ gold: [255, 215, 0],
56
+ goldenrod: [218, 165, 32],
57
+ gray: [128, 128, 128],
58
+ green: [0, 128, 0],
59
+ greenyellow: [173, 255, 47],
60
+ grey: [128, 128, 128],
61
+ honeydew: [240, 255, 240],
62
+ hotpink: [255, 105, 180],
63
+ indianred: [205, 92, 92],
64
+ indigo: [75, 0, 130],
65
+ ivory: [255, 255, 240],
66
+ khaki: [240, 230, 140],
67
+ lavender: [230, 230, 250],
68
+ lavenderblush: [255, 240, 245],
69
+ lawngreen: [124, 252, 0],
70
+ lemonchiffon: [255, 250, 205],
71
+ lightblue: [173, 216, 230],
72
+ lightcoral: [240, 128, 128],
73
+ lightcyan: [224, 255, 255],
74
+ lightgoldenrodyellow: [250, 250, 210],
75
+ lightgray: [211, 211, 211],
76
+ lightgreen: [144, 238, 144],
77
+ lightgrey: [211, 211, 211],
78
+ lightpink: [255, 182, 193],
79
+ lightsalmon: [255, 160, 122],
80
+ lightseagreen: [32, 178, 170],
81
+ lightskyblue: [135, 206, 250],
82
+ lightslategray: [119, 136, 153],
83
+ lightslategrey: [119, 136, 153],
84
+ lightsteelblue: [176, 196, 222],
85
+ lightyellow: [255, 255, 224],
86
+ lime: [0, 255, 0],
87
+ limegreen: [50, 205, 50],
88
+ linen: [250, 240, 230],
89
+ magenta: [255, 0, 255],
90
+ maroon: [128, 0, 0],
91
+ mediumaquamarine: [102, 205, 170],
92
+ mediumblue: [0, 0, 205],
93
+ mediumorchid: [186, 85, 211],
94
+ mediumpurple: [147, 112, 219],
95
+ mediumseagreen: [60, 179, 113],
96
+ mediumslateblue: [123, 104, 238],
97
+ mediumspringgreen: [0, 250, 154],
98
+ mediumturquoise: [72, 209, 204],
99
+ mediumvioletred: [199, 21, 133],
100
+ midnightblue: [25, 25, 112],
101
+ mintcream: [245, 255, 250],
102
+ mistyrose: [255, 228, 225],
103
+ moccasin: [255, 228, 181],
104
+ navajowhite: [255, 222, 173],
105
+ navy: [0, 0, 128],
106
+ oldlace: [253, 245, 230],
107
+ olive: [128, 128, 0],
108
+ olivedrab: [107, 142, 35],
109
+ orange: [255, 165, 0],
110
+ orangered: [255, 69, 0],
111
+ orchid: [218, 112, 214],
112
+ palegoldenrod: [238, 232, 170],
113
+ palegreen: [152, 251, 152],
114
+ paleturquoise: [175, 238, 238],
115
+ palevioletred: [219, 112, 147],
116
+ papayawhip: [255, 239, 213],
117
+ peachpuff: [255, 218, 185],
118
+ peru: [205, 133, 63],
119
+ pink: [255, 192, 203],
120
+ plum: [221, 160, 221],
121
+ powderblue: [176, 224, 230],
122
+ purple: [128, 0, 128],
123
+ rebeccapurple: [102, 51, 153],
124
+ red: [255, 0, 0],
125
+ rosybrown: [188, 143, 143],
126
+ royalblue: [65, 105, 225],
127
+ saddlebrown: [139, 69, 19],
128
+ salmon: [250, 128, 114],
129
+ sandybrown: [244, 164, 96],
130
+ seagreen: [46, 139, 87],
131
+ seashell: [255, 245, 238],
132
+ sienna: [160, 82, 45],
133
+ silver: [192, 192, 192],
134
+ skyblue: [135, 206, 235],
135
+ slateblue: [106, 90, 205],
136
+ slategray: [112, 128, 144],
137
+ slategrey: [112, 128, 144],
138
+ snow: [255, 250, 250],
139
+ springgreen: [0, 255, 127],
140
+ steelblue: [70, 130, 180],
141
+ tan: [210, 180, 140],
142
+ teal: [0, 128, 128],
143
+ thistle: [216, 191, 216],
144
+ tomato: [255, 99, 71],
145
+ turquoise: [64, 224, 208],
146
+ violet: [238, 130, 238],
147
+ wheat: [245, 222, 179],
148
+ white: [255, 255, 255],
149
+ whitesmoke: [245, 245, 245],
150
+ yellow: [255, 255, 0],
151
+ yellowgreen: [154, 205, 50]
152
+ };
153
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CSS_NAMED_COLORS","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],"sourceRoot":"../../../src","sources":["const/colors.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { once } from 'node:events';
6
+ import { forceTtfMetrics } from './metrics.js';
7
+ import svg2ttf from 'svg2ttf';
8
+ import { parseCodepointFromFilename } from '../../utils/parse.js';
9
+ async function writeGlyphStreamToFont(fontStream, svgPath, filename) {
10
+ const codepoint = parseCodepointFromFilename(filename);
11
+ const name = path.basename(filename, '.svg');
12
+ return new Promise((resolve, reject) => {
13
+ const glyphStream = fs.createReadStream(svgPath);
14
+ glyphStream.metadata = {
15
+ name,
16
+ unicode: [String.fromCodePoint(codepoint)]
17
+ };
18
+ glyphStream.on('error', reject);
19
+ // Do not add fontStream.on("error", reject) here — one per glyph would exceed
20
+ // Node's default MaxListeners (10). Font stream errors are handled once below.
21
+ fontStream.write(glyphStream);
22
+ glyphStream.on('end', resolve);
23
+ });
24
+ }
25
+ export async function compileTtfFromGlyphSVGs(opts) {
26
+ const {
27
+ SVGIcons2SVGFontStream
28
+ } = await import('svgicons2svgfont');
29
+ const {
30
+ glyphDir,
31
+ outTtfPath,
32
+ fontName,
33
+ upm,
34
+ ascent,
35
+ descent
36
+ } = opts;
37
+ const lineGap = opts.lineGap ?? 0;
38
+ const files = fs.readdirSync(glyphDir).filter(f => /^u[0-9a-fA-F]+\.svg$/.test(f)).sort((a, b) => parseCodepointFromFilename(a) - parseCodepointFromFilename(b));
39
+ if (files.length === 0) throw new Error(`No glyph SVGs found in: ${glyphDir}`);
40
+ const fontStream = new SVGIcons2SVGFontStream({
41
+ fontName,
42
+ fontHeight: upm,
43
+ normalize: false,
44
+ ascent,
45
+ descent
46
+ });
47
+ const svgFontChunks = [];
48
+ fontStream.on('data', c => svgFontChunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c)));
49
+
50
+ // Single error listener for the font stream; per-glyph errors are handled in writeGlyphStreamToFont.
51
+ let fontStreamReject;
52
+ const fontStreamErrorPromise = new Promise((_, rej) => {
53
+ fontStreamReject = rej;
54
+ });
55
+ fontStream.on('error', err => fontStreamReject(err));
56
+ for (const f of files) {
57
+ await Promise.race([writeGlyphStreamToFont(fontStream, path.join(glyphDir, f), f), fontStreamErrorPromise]);
58
+ }
59
+ fontStream.end();
60
+ await once(fontStream, 'end');
61
+ const svgFontString = Buffer.concat(svgFontChunks).toString('utf8');
62
+ const ttfRaw = svg2ttf(svgFontString);
63
+ const rawBuf = Buffer.from(ttfRaw.buffer);
64
+ const fixedBuf = forceTtfMetrics(rawBuf, upm, ascent, descent, lineGap);
65
+ fs.mkdirSync(path.dirname(outTtfPath), {
66
+ recursive: true
67
+ });
68
+ fs.writeFileSync(outTtfPath, fixedBuf);
69
+ }
70
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fs","path","once","forceTtfMetrics","svg2ttf","parseCodepointFromFilename","writeGlyphStreamToFont","fontStream","svgPath","filename","codepoint","name","basename","Promise","resolve","reject","glyphStream","createReadStream","metadata","unicode","String","fromCodePoint","on","write","compileTtfFromGlyphSVGs","opts","SVGIcons2SVGFontStream","glyphDir","outTtfPath","fontName","upm","ascent","descent","lineGap","files","readdirSync","filter","f","test","sort","a","b","length","Error","fontHeight","normalize","svgFontChunks","c","push","Buffer","isBuffer","from","fontStreamReject","fontStreamErrorPromise","_","rej","err","race","join","end","svgFontString","concat","toString","ttfRaw","rawBuf","buffer","fixedBuf","mkdirSync","dirname","recursive","writeFileSync"],"sourceRoot":"../../../../src","sources":["core/font/compile.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ import { Font } from 'fonteditor-core';
4
+ export function forceTtfMetrics(ttfBuffer, upm, ascent, descent, lineGap) {
5
+ const font = Font.create(ttfBuffer, {
6
+ type: 'ttf',
7
+ hinting: false,
8
+ compound2simple: false,
9
+ combinePath: false
10
+ });
11
+ const data = font.get();
12
+ data.head.unitsPerEm = upm;
13
+ data.hhea.ascent = ascent;
14
+ data.hhea.descent = -Math.abs(descent);
15
+ data.hhea.lineGap = lineGap;
16
+ data['OS/2'].usWinAscent = ascent;
17
+ data['OS/2'].usWinDescent = Math.abs(descent);
18
+ data['OS/2'].sTypoAscender = ascent;
19
+ data['OS/2'].sTypoDescender = -Math.abs(descent);
20
+ data['OS/2'].sTypoLineGap = lineGap;
21
+
22
+ // Set USE_TYPO_METRICS flag (bit 7) in fsSelection.
23
+ // This tells renderers to use sTypoAscender/sTypoDescender/sTypoLineGap for
24
+ // line height calculations instead of the Win metrics (usWinAscent/usWinDescent).
25
+ // Without this flag, Windows and some Android renderers ignore the Typo values
26
+ // set above and fall back to Win metrics, causing icons to appear clipped or
27
+ // misaligned vertically. The bitwise OR preserves all other existing style flags
28
+ // (italic, bold, etc.) while ensuring this bit is always on.
29
+ data['OS/2'].fsSelection = (data['OS/2'].fsSelection || 0) | 1 << 7;
30
+ font.set(data);
31
+ const out = font.write({
32
+ type: 'ttf',
33
+ hinting: false
34
+ });
35
+ return Buffer.from(out);
36
+ }
37
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Font","forceTtfMetrics","ttfBuffer","upm","ascent","descent","lineGap","font","create","type","hinting","compound2simple","combinePath","data","get","head","unitsPerEm","hhea","Math","abs","usWinAscent","usWinDescent","sTypoAscender","sTypoDescender","sTypoLineGap","fsSelection","set","out","write","Buffer","from"],"sourceRoot":"../../../../src","sources":["core/font/metrics.ts"],"mappings":";;AAAA,SAASA,IAAI,QAAQ,iBAAiB;AAEtC,OAAO,SAASC,eAAeA,CAC7BC,SAAiB,EACjBC,GAAW,EACXC,MAAc,EACdC,OAAe,EACfC,OAAe,EACP;EACR,MAAMC,IAAI,GAAGP,IAAI,CAACQ,MAAM,CAACN,SAAS,EAAE;IAClCO,IAAI,EAAE,KAAK;IACXC,OAAO,EAAE,KAAK;IACdC,eAAe,EAAE,KAAK;IACtBC,WAAW,EAAE;EACf,CAAC,CAAC;EAEF,MAAMC,IAAI,GAAGN,IAAI,CAACO,GAAG,CAAC,CAAC;EAEvBD,IAAI,CAACE,IAAI,CAACC,UAAU,GAAGb,GAAG;EAE1BU,IAAI,CAACI,IAAI,CAACb,MAAM,GAAGA,MAAM;EACzBS,IAAI,CAACI,IAAI,CAACZ,OAAO,GAAG,CAACa,IAAI,CAACC,GAAG,CAACd,OAAO,CAAC;EACtCQ,IAAI,CAACI,IAAI,CAACX,OAAO,GAAGA,OAAO;EAE3BO,IAAI,CAAC,MAAM,CAAC,CAACO,WAAW,GAAGhB,MAAM;EACjCS,IAAI,CAAC,MAAM,CAAC,CAACQ,YAAY,GAAGH,IAAI,CAACC,GAAG,CAACd,OAAO,CAAC;EAC7CQ,IAAI,CAAC,MAAM,CAAC,CAACS,aAAa,GAAGlB,MAAM;EACnCS,IAAI,CAAC,MAAM,CAAC,CAACU,cAAc,GAAG,CAACL,IAAI,CAACC,GAAG,CAACd,OAAO,CAAC;EAChDQ,IAAI,CAAC,MAAM,CAAC,CAACW,YAAY,GAAGlB,OAAO;;EAEnC;EACA;EACA;EACA;EACA;EACA;EACA;EACAO,IAAI,CAAC,MAAM,CAAC,CAACY,WAAW,GAAG,CAACZ,IAAI,CAAC,MAAM,CAAC,CAACY,WAAW,IAAI,CAAC,IAAK,CAAC,IAAI,CAAE;EAErElB,IAAI,CAACmB,GAAG,CAACb,IAAI,CAAC;EAEd,MAAMc,GAAG,GAAGpB,IAAI,CAACqB,KAAK,CAAC;IAAEnB,IAAI,EAAE,KAAK;IAAEC,OAAO,EAAE;EAAM,CAAC,CAAgB;EACtE,OAAOmB,MAAM,CAACC,IAAI,CAACH,GAAG,CAAC;AACzB","ignoreList":[]}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ import fs from 'node:fs';
4
+ export function ensureEmptyDir(dir) {
5
+ if (fs.existsSync(dir)) fs.rmSync(dir, {
6
+ recursive: true,
7
+ force: true
8
+ });
9
+ fs.mkdirSync(dir, {
10
+ recursive: true
11
+ });
12
+ }
13
+
14
+ /** Create directory if it does not exist; do not remove existing contents (for shared output dirs). */
15
+ export function ensureDir(dir) {
16
+ fs.mkdirSync(dir, {
17
+ recursive: true
18
+ });
19
+ }
20
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["fs","ensureEmptyDir","dir","existsSync","rmSync","recursive","force","mkdirSync","ensureDir"],"sourceRoot":"../../../../src","sources":["core/pipeline/config.ts"],"mappings":";;AAAA,OAAOA,EAAE,MAAM,SAAS;AAexB,OAAO,SAASC,cAAcA,CAACC,GAAW,EAAQ;EAChD,IAAIF,EAAE,CAACG,UAAU,CAACD,GAAG,CAAC,EAAEF,EAAE,CAACI,MAAM,CAACF,GAAG,EAAE;IAAEG,SAAS,EAAE,IAAI;IAAEC,KAAK,EAAE;EAAK,CAAC,CAAC;EACxEN,EAAE,CAACO,SAAS,CAACL,GAAG,EAAE;IAAEG,SAAS,EAAE;EAAK,CAAC,CAAC;AACxC;;AAEA;AACA,OAAO,SAASG,SAASA,CAACN,GAAW,EAAQ;EAC3CF,EAAE,CAACO,SAAS,CAACL,GAAG,EAAE;IAAEG,SAAS,EAAE;EAAK,CAAC,CAAC;AACxC","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { runPipeline } from './run.js';
4
+ export { ensureEmptyDir } from './config.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["runPipeline","ensureEmptyDir"],"sourceRoot":"../../../../src","sources":["core/pipeline/index.ts"],"mappings":";;AAAA,SAASA,WAAW,QAA6B,UAAU;AAE3D,SAASC,cAAc,QAAQ,aAAa","ignoreList":[]}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+
3
+ import { loadPyodide } from 'pyodide';
4
+ import path from 'node:path';
5
+ import fs from 'node:fs/promises';
6
+ import { buildPathopsBackend } from '../svg/svg_pathops.js';
7
+
8
+ /** Package root (where package.json lives). */
9
+ function getPackageRoot() {
10
+ // Compiled to lib/commonjs/src/core/pipeline/ — 5 dirs up is package root.
11
+ // Running from source (Jest/ts-node) in src/core/pipeline/ — 3 dirs up is package root.
12
+ return __dirname.includes(`${path.sep}lib${path.sep}`) ? path.resolve(__dirname, '../../../../..') : path.resolve(__dirname, '../../..');
13
+ }
14
+ export class PathKitManager {
15
+ static instance = null;
16
+ static async getInstance() {
17
+ if (this.instance) return this.instance;
18
+ const PathKitInit = require('pathkit-wasm/bin/pathkit.js');
19
+ const pathkitJsPath = require.resolve('pathkit-wasm/bin/pathkit.js');
20
+ const pathkitBinDir = path.dirname(pathkitJsPath);
21
+ const pathkitWasmPath = path.join(pathkitBinDir, 'pathkit.wasm');
22
+ const wasmBinary = await fs.readFile(pathkitWasmPath);
23
+ const pkInit = PathKitInit({
24
+ wasmBinary,
25
+ locateFile: file => path.join(pathkitBinDir, file)
26
+ });
27
+ const PathKit = await (typeof pkInit?.ready === 'function' ? pkInit.ready() : pkInit);
28
+ this.instance = PathKit;
29
+ return PathKit;
30
+ }
31
+ }
32
+ export class PyodideManager {
33
+ static instance = null;
34
+ static async getInstance() {
35
+ if (this.instance) return this.instance;
36
+ const pyodideAsmPath = require.resolve('pyodide/pyodide.asm.js');
37
+ const pyodideDir = path.dirname(pyodideAsmPath) + path.sep;
38
+ const py = await loadPyodide({
39
+ indexURL: pyodideDir
40
+ });
41
+ py.mountNodeFS('/app', process.cwd());
42
+ const PathKit = await PathKitManager.getInstance();
43
+ py.registerJsModule('_pathops_js', buildPathopsBackend(PathKit));
44
+ const pathopsPyPath = path.join(getPackageRoot(), 'src', 'core', 'shims', 'pathops.py');
45
+ const pathopsPy = await fs.readFile(pathopsPyPath, 'utf8');
46
+ py.FS.writeFile('/pathops.py', pathopsPy);
47
+ await py.loadPackage(['micropip', 'lxml'], {
48
+ messageCallback: () => {}
49
+ });
50
+ await py.runPythonAsync(`
51
+ import sys
52
+ if "/" not in sys.path:
53
+ sys.path.insert(0, "/")
54
+
55
+ import micropip
56
+ await micropip.install("picosvg", deps=False)
57
+
58
+ import pathops
59
+ import picosvg
60
+ `);
61
+ this.instance = py;
62
+ return py;
63
+ }
64
+ static async picoFromFile(hostFilePath, content) {
65
+ const py = await this.getInstance();
66
+ const svgContent = content ?? (await fs.readFile(hostFilePath, 'utf-8'));
67
+ py.globals.set('_svg_content', svgContent);
68
+ const out = py.runPython(`
69
+ from picosvg.svg import SVG
70
+ svg = SVG.fromstring(_svg_content)
71
+ pico = svg.topicosvg()
72
+ pico.tostring(pretty_print=True)
73
+ `);
74
+ return out;
75
+ }
76
+ }
77
+ export async function picoFromFile(hostFilePath, content) {
78
+ return PyodideManager.picoFromFile(hostFilePath, content);
79
+ }
80
+ //# sourceMappingURL=managers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["loadPyodide","path","fs","buildPathopsBackend","getPackageRoot","__dirname","includes","sep","resolve","PathKitManager","instance","getInstance","PathKitInit","require","pathkitJsPath","pathkitBinDir","dirname","pathkitWasmPath","join","wasmBinary","readFile","pkInit","locateFile","file","PathKit","ready","PyodideManager","pyodideAsmPath","pyodideDir","py","indexURL","mountNodeFS","process","cwd","registerJsModule","pathopsPyPath","pathopsPy","FS","writeFile","loadPackage","messageCallback","runPythonAsync","picoFromFile","hostFilePath","content","svgContent","globals","set","out","runPython"],"sourceRoot":"../../../../src","sources":["core/pipeline/managers.ts"],"mappings":"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","ignoreList":[]}