react-native-nano-icons 0.1.1 → 0.1.3

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 (99) hide show
  1. package/README.md +20 -164
  2. package/android/build.gradle +28 -0
  3. package/android/src/main/java/com/nanoicons/NanoIconView.kt +78 -0
  4. package/android/src/main/java/com/nanoicons/NanoIconViewManager.kt +84 -0
  5. package/android/src/main/java/com/nanoicons/NanoIconsPackage.kt +22 -0
  6. package/ios/NanoIconView.h +4 -0
  7. package/ios/NanoIconView.mm +246 -0
  8. package/lib/commonjs/cli/build.js +1 -1
  9. package/lib/commonjs/cli/config.d.ts +2 -2
  10. package/lib/commonjs/cli/config.js +7 -6
  11. package/lib/commonjs/plugin/src/buildFonts.d.ts +1 -0
  12. package/lib/commonjs/plugin/src/buildFonts.js +9 -0
  13. package/lib/commonjs/plugin/src/index.js +1 -34
  14. package/lib/commonjs/plugin/src/withNanoIconsFontLinking.d.ts +6 -6
  15. package/lib/commonjs/plugin/src/withNanoIconsFontLinking.js +11 -15
  16. package/lib/commonjs/scripts/cli.js +15 -5
  17. package/lib/commonjs/src/core/font/compile.d.ts +13 -2
  18. package/lib/commonjs/src/core/font/compile.js +49 -46
  19. package/lib/commonjs/src/core/pipeline/managers.js +19 -3
  20. package/lib/commonjs/src/core/pipeline/run.js +121 -32
  21. package/lib/commonjs/src/core/svg/layers.d.ts +16 -0
  22. package/lib/commonjs/src/core/svg/layers.js +27 -0
  23. package/lib/commonjs/src/core/svg/svg_dom.d.ts +29 -1
  24. package/lib/commonjs/src/core/svg/svg_dom.js +78 -2
  25. package/lib/commonjs/src/core/svg/svg_pathops.d.ts +11 -0
  26. package/lib/commonjs/src/core/svg/svg_pathops.js +209 -19
  27. package/lib/commonjs/src/core/types.d.ts +30 -15
  28. package/lib/module/core/font/compile.js +52 -41
  29. package/lib/module/core/font/compile.js.map +1 -1
  30. package/lib/module/core/pipeline/managers.js +17 -3
  31. package/lib/module/core/pipeline/managers.js.map +1 -1
  32. package/lib/module/core/pipeline/run.js +131 -44
  33. package/lib/module/core/pipeline/run.js.map +1 -1
  34. package/lib/module/core/shims/picosvg-0.22.3-py3-none-any.whl +0 -0
  35. package/lib/module/core/svg/layers.js +34 -0
  36. package/lib/module/core/svg/layers.js.map +1 -1
  37. package/lib/module/core/svg/svg_dom.js +91 -4
  38. package/lib/module/core/svg/svg_dom.js.map +1 -1
  39. package/lib/module/core/svg/svg_pathops.js +203 -19
  40. package/lib/module/core/svg/svg_pathops.js.map +1 -1
  41. package/lib/module/createNanoIconsSet.js +3 -79
  42. package/lib/module/createNanoIconsSet.js.map +1 -1
  43. package/lib/module/createNanoIconsSet.native.js +68 -0
  44. package/lib/module/createNanoIconsSet.native.js.map +1 -0
  45. package/lib/module/createNanoIconsSet.shared.js +91 -0
  46. package/lib/module/createNanoIconsSet.shared.js.map +1 -0
  47. package/lib/module/index.js +1 -2
  48. package/lib/module/index.js.map +1 -1
  49. package/lib/module/specs/NanoIconViewNativeComponent.ts +15 -0
  50. package/lib/module/types.js +4 -0
  51. package/lib/module/types.js.map +1 -0
  52. package/lib/module/utils/shallowEqualColor.js +15 -0
  53. package/lib/module/utils/shallowEqualColor.js.map +1 -0
  54. package/lib/typescript/src/core/font/compile.d.ts +13 -2
  55. package/lib/typescript/src/core/font/compile.d.ts.map +1 -1
  56. package/lib/typescript/src/core/pipeline/managers.d.ts.map +1 -1
  57. package/lib/typescript/src/core/pipeline/run.d.ts.map +1 -1
  58. package/lib/typescript/src/core/svg/layers.d.ts +16 -0
  59. package/lib/typescript/src/core/svg/layers.d.ts.map +1 -1
  60. package/lib/typescript/src/core/svg/svg_dom.d.ts +29 -1
  61. package/lib/typescript/src/core/svg/svg_dom.d.ts.map +1 -1
  62. package/lib/typescript/src/core/svg/svg_pathops.d.ts +11 -0
  63. package/lib/typescript/src/core/svg/svg_pathops.d.ts.map +1 -1
  64. package/lib/typescript/src/core/types.d.ts +30 -15
  65. package/lib/typescript/src/core/types.d.ts.map +1 -1
  66. package/lib/typescript/src/createNanoIconsSet.d.ts +5 -18
  67. package/lib/typescript/src/createNanoIconsSet.d.ts.map +1 -1
  68. package/lib/typescript/src/createNanoIconsSet.native.d.ts +7 -0
  69. package/lib/typescript/src/createNanoIconsSet.native.d.ts.map +1 -0
  70. package/lib/typescript/src/createNanoIconsSet.shared.d.ts +11 -0
  71. package/lib/typescript/src/createNanoIconsSet.shared.d.ts.map +1 -0
  72. package/lib/typescript/src/index.d.ts.map +1 -1
  73. package/lib/typescript/src/specs/NanoIconViewNativeComponent.d.ts +14 -0
  74. package/lib/typescript/src/specs/NanoIconViewNativeComponent.d.ts.map +1 -0
  75. package/lib/typescript/src/types.d.ts +19 -0
  76. package/lib/typescript/src/types.d.ts.map +1 -0
  77. package/lib/typescript/src/utils/shallowEqualColor.d.ts +4 -0
  78. package/lib/typescript/src/utils/shallowEqualColor.d.ts.map +1 -0
  79. package/package.json +22 -5
  80. package/plugin/src/buildFonts.ts +13 -0
  81. package/plugin/src/index.ts +3 -50
  82. package/plugin/src/withNanoIconsFontLinking.ts +22 -24
  83. package/react-native-nano-icons.podspec +18 -0
  84. package/scripts/cli.ts +14 -5
  85. package/src/core/font/compile.ts +65 -61
  86. package/src/core/pipeline/managers.ts +26 -3
  87. package/src/core/pipeline/run.ts +156 -38
  88. package/src/core/shims/picosvg-0.22.3-py3-none-any.whl +0 -0
  89. package/src/core/svg/layers.ts +44 -0
  90. package/src/core/svg/svg_dom.ts +96 -4
  91. package/src/core/svg/svg_pathops.ts +245 -27
  92. package/src/core/types.ts +21 -10
  93. package/src/createNanoIconsSet.native.tsx +108 -0
  94. package/src/createNanoIconsSet.shared.tsx +121 -0
  95. package/src/createNanoIconsSet.tsx +7 -126
  96. package/src/index.ts +1 -2
  97. package/src/specs/NanoIconViewNativeComponent.ts +15 -0
  98. package/src/types.ts +27 -0
  99. package/src/utils/shallowEqualColor.ts +17 -0
@@ -1 +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":[]}
1
+ {"version":3,"names":["fs","path","forceTtfMetrics","svg2ttf","escapeXml","s","replace","buildSvgFontXml","opts","fontName","glyphs","upm","ascent","descent","glyphLines","map","g","hex","codepoint","toString","name","padStart","advanceWidth","d","Math","abs","join","parseCompileTtfFromGlyphsError","err","codepointToIcon","msg","Error","message","String","cpMatch","match","cp","parseInt","iconName","get","detail","compileTtfFromGlyphs","outTtfPath","lineGap","length","svgFontString","ttfRaw","rawBuf","Buffer","from","buffer","fixedBuf","mkdirSync","dirname","recursive","writeFileSync"],"sourceRoot":"../../../../src","sources":["core/font/compile.ts"],"mappings":";;AAAA,OAAOA,EAAE,MAAM,SAAS;AACxB,OAAOC,IAAI,MAAM,WAAW;AAE5B,SAASC,eAAe,QAAQ,cAAc;AAC9C,OAAOC,OAAO,MAAM,SAAS;AAS7B,SAASC,SAASA,CAACC,CAAS,EAAU;EACpC,OAAOA,CAAC,CAACC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AACzD;;AAEA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,IAMxB,EAAU;EACT,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,GAAG;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGL,IAAI;EAEvD,MAAMM,UAAU,GAAGJ,MAAM,CAACK,GAAG,CAAEC,CAAC,IAAK;IACnC,MAAMC,GAAG,GAAGD,CAAC,CAACE,SAAS,CAACC,QAAQ,CAAC,EAAE,CAAC;IACpC,MAAMC,IAAI,GAAG,IAAIH,GAAG,CAACI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;IACvC,OAAO,sBAAsBD,IAAI,iBAAiBH,GAAG,mBAAmBD,CAAC,CAACM,YAAY,QAAQlB,SAAS,CAACY,CAAC,CAACO,CAAC,CAAC,KAAK;EACnH,CAAC,CAAC;EAEF,OAAO;AACT;AACA;AACA;AACA,YAAYnB,SAAS,CAACK,QAAQ,CAAC,kBAAkBE,GAAG;AACpD,0BAA0BP,SAAS,CAACK,QAAQ,CAAC,mBAAmBE,GAAG,aAAaC,MAAM,cAAc,CAACY,IAAI,CAACC,GAAG,CAACZ,OAAO,CAAC;AACtH;AACA,EAAEC,UAAU,CAACY,IAAI,CAAC,IAAI,CAAC;AACvB;AACA;AACA,OAAO;AACP;AAEA,OAAO,SAASC,8BAA8BA,CAC5CC,GAAY,EACZC,eAAoC,EACpC;EACA,MAAMC,GAAG,GAAGF,GAAG,YAAYG,KAAK,GAAGH,GAAG,CAACI,OAAO,GAAGC,MAAM,CAACL,GAAG,CAAC;EAC5D,MAAMM,OAAO,GAAGJ,GAAG,CAACK,KAAK,CAAC,2BAA2B,CAAC;EACtD,IAAID,OAAO,EAAE;IACX,MAAME,EAAE,GAAGC,QAAQ,CAACH,OAAO,CAAC,CAAC,CAAC,EAAG,EAAE,CAAC;IACpC,MAAMI,QAAQ,GAAGT,eAAe,CAACU,GAAG,CAACH,EAAE,CAAC;IACxC,MAAMI,MAAM,GAAGF,QAAQ,GACnB,SAASA,QAAQ,iBAAiBJ,OAAO,CAAC,CAAC,CAAC,GAAG,GAC/C,cAAcA,OAAO,CAAC,CAAC,CAAC,EAAE;IAC9B,MAAM,IAAIH,KAAK,CAAC,+BAA+BS,MAAM,KAAKV,GAAG,EAAE,CAAC;EAClE;EACA,MAAMF,GAAG;AACX;;AAEA;AACA;AACA;AACA;AACA,OAAO,eAAea,oBAAoBA,CAACjC,IAQ1C,EAAiB;EAChB,MAAM;IAAEE,MAAM;IAAEgC,UAAU;IAAEjC,QAAQ;IAAEE,GAAG;IAAEC,MAAM;IAAEC;EAAQ,CAAC,GAAGL,IAAI;EACnE,MAAMmC,OAAO,GAAGnC,IAAI,CAACmC,OAAO,IAAI,CAAC;EAEjC,IAAIjC,MAAM,CAACkC,MAAM,KAAK,CAAC,EACrB,MAAM,IAAIb,KAAK,CAAC,sBAAsB,CAAC;EAEzC,MAAMc,aAAa,GAAGtC,eAAe,CAAC;IACpCE,QAAQ;IACRC,MAAM;IACNC,GAAG;IACHC,MAAM;IACNC;EACF,CAAC,CAAC;EAEF,MAAMiC,MAAM,GAAG3C,OAAO,CAAC0C,aAAa,CAAC;EACrC,MAAME,MAAM,GAAGC,MAAM,CAACC,IAAI,CAACH,MAAM,CAACI,MAAM,CAAC;EAEzC,MAAMC,QAAQ,GAAGjD,eAAe,CAAC6C,MAAM,EAAEpC,GAAG,EAAEC,MAAM,EAAEC,OAAO,EAAE8B,OAAO,CAAC;EAEvE3C,EAAE,CAACoD,SAAS,CAACnD,IAAI,CAACoD,OAAO,CAACX,UAAU,CAAC,EAAE;IAAEY,SAAS,EAAE;EAAK,CAAC,CAAC;EAC3DtD,EAAE,CAACuD,aAAa,CAACb,UAAU,EAAES,QAAQ,CAAC;AACxC","ignoreList":[]}
@@ -47,14 +47,28 @@ export class PyodideManager {
47
47
  await py.loadPackage(['micropip', 'lxml'], {
48
48
  messageCallback: () => {}
49
49
  });
50
+
51
+ // Resolve local picosvg wheel path for offline-first installation.
52
+ const picosvgWhlDir = path.join(getPackageRoot(), 'src', 'core', 'shims');
53
+ const picosvgWhl = (await fs.readdir(picosvgWhlDir)).find(f => f.startsWith('picosvg-') && f.endsWith('.whl'));
54
+ const localWhlUrl = picosvgWhl ? `file://${path.join(picosvgWhlDir, picosvgWhl)}` : null;
55
+ py.globals.set('_picosvg_local_whl', localWhlUrl);
50
56
  await py.runPythonAsync(`
51
57
  import sys
52
58
  if "/" not in sys.path:
53
59
  sys.path.insert(0, "/")
54
-
60
+
55
61
  import micropip
56
- await micropip.install("picosvg", deps=False)
57
-
62
+
63
+ _whl = _picosvg_local_whl
64
+ if _whl:
65
+ try:
66
+ await micropip.install(_whl, deps=False)
67
+ except Exception:
68
+ await micropip.install("picosvg", deps=False)
69
+ else:
70
+ await micropip.install("picosvg", deps=False)
71
+
58
72
  import pathops
59
73
  import picosvg
60
74
  `);
@@ -1 +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":[]}
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","picosvgWhlDir","picosvgWhl","readdir","find","f","startsWith","endsWith","localWhlUrl","globals","set","runPythonAsync","picoFromFile","hostFilePath","content","svgContent","out","runPython"],"sourceRoot":"../../../../src","sources":["core/pipeline/managers.ts"],"mappings":";;AAAA,SAASA,WAAW,QAAQ,SAAS;AACrC,OAAOC,IAAI,MAAM,WAAW;AAC5B,OAAOC,EAAE,MAAM,kBAAkB;AAEjC,SAASC,mBAAmB,QAAQ,uBAAuB;;AAE3D;AACA,SAASC,cAAcA,CAAA,EAAW;EAChC;EACA;EACA,OAAOC,SAAS,CAACC,QAAQ,CAAC,GAAGL,IAAI,CAACM,GAAG,MAAMN,IAAI,CAACM,GAAG,EAAE,CAAC,GAClDN,IAAI,CAACO,OAAO,CAACH,SAAS,EAAE,gBAAgB,CAAC,GACzCJ,IAAI,CAACO,OAAO,CAACH,SAAS,EAAE,UAAU,CAAC;AACzC;AAEA,OAAO,MAAMI,cAAc,CAAC;EAC1B,OAAeC,QAAQ,GAAyB,IAAI;EAEpD,aAAaC,WAAWA,CAAA,EAA2B;IACjD,IAAI,IAAI,CAACD,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;IAEvC,MAAME,WAAW,GAAGC,OAAO,CAAC,6BAA6B,CAEjD;IACR,MAAMC,aAAa,GAAGD,OAAO,CAACL,OAAO,CACnC,6BACF,CAAW;IACX,MAAMO,aAAa,GAAGd,IAAI,CAACe,OAAO,CAACF,aAAa,CAAC;IACjD,MAAMG,eAAe,GAAGhB,IAAI,CAACiB,IAAI,CAACH,aAAa,EAAE,cAAc,CAAC;IAEhE,MAAMI,UAAU,GAAG,MAAMjB,EAAE,CAACkB,QAAQ,CAACH,eAAe,CAAC;IAErD,MAAMI,MAAM,GAAGT,WAAW,CAAC;MACzBO,UAAU;MACVG,UAAU,EAAGC,IAAY,IAAKtB,IAAI,CAACiB,IAAI,CAACH,aAAa,EAAEQ,IAAI;IAC7D,CAAC,CAAC;IAEF,MAAMC,OAAsB,GAAG,OAAO,OAAOH,MAAM,EAAEI,KAAK,KAAK,UAAU,GACrEJ,MAAM,CAACI,KAAK,CAAC,CAAC,GACdJ,MAAM,CAAC;IACX,IAAI,CAACX,QAAQ,GAAGc,OAAO;IACvB,OAAOA,OAAO;EAChB;AACF;AAEA,OAAO,MAAME,cAAc,CAAC;EAC1B,OAAehB,QAAQ,GAAyB,IAAI;EAEpD,aAAaC,WAAWA,CAAA,EAA2B;IACjD,IAAI,IAAI,CAACD,QAAQ,EAAE,OAAO,IAAI,CAACA,QAAQ;IAEvC,MAAMiB,cAAc,GAAGd,OAAO,CAACL,OAAO,CAAC,wBAAwB,CAAW;IAC1E,MAAMoB,UAAU,GAAG3B,IAAI,CAACe,OAAO,CAACW,cAAc,CAAC,GAAG1B,IAAI,CAACM,GAAG;IAE1D,MAAMsB,EAAE,GAAI,MAAM7B,WAAW,CAAC;MAC5B8B,QAAQ,EAAEF;IACZ,CAAC,CAA8B;IAC/BC,EAAE,CAACE,WAAW,CAAC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAAC,CAAC,CAAC;IAErC,MAAMT,OAAO,GAAG,MAAMf,cAAc,CAACE,WAAW,CAAC,CAAC;IAClDkB,EAAE,CAACK,gBAAgB,CAAC,aAAa,EAAE/B,mBAAmB,CAACqB,OAAO,CAAC,CAAC;IAEhE,MAAMW,aAAa,GAAGlC,IAAI,CAACiB,IAAI,CAC7Bd,cAAc,CAAC,CAAC,EAChB,KAAK,EACL,MAAM,EACN,OAAO,EACP,YACF,CAAC;IAED,MAAMgC,SAAS,GAAG,MAAMlC,EAAE,CAACkB,QAAQ,CAACe,aAAa,EAAE,MAAM,CAAC;IAC1DN,EAAE,CAACQ,EAAE,CAACC,SAAS,CAAC,aAAa,EAAEF,SAAS,CAAC;IAEzC,MAAMP,EAAE,CAACU,WAAW,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE;MAAEC,eAAe,EAAEA,CAAA,KAAM,CAAC;IAAE,CAAC,CAAC;;IAEzE;IACA,MAAMC,aAAa,GAAGxC,IAAI,CAACiB,IAAI,CAC7Bd,cAAc,CAAC,CAAC,EAChB,KAAK,EACL,MAAM,EACN,OACF,CAAC;IACD,MAAMsC,UAAU,GAAG,CAAC,MAAMxC,EAAE,CAACyC,OAAO,CAACF,aAAa,CAAC,EAChDG,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,CAAC,UAAU,CAAC,IAAID,CAAC,CAACE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAMC,WAAW,GAAGN,UAAU,GAC1B,UAAUzC,IAAI,CAACiB,IAAI,CAACuB,aAAa,EAAEC,UAAU,CAAC,EAAE,GAChD,IAAI;IAERb,EAAE,CAACoB,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEF,WAAW,CAAC;IAEjD,MAAMnB,EAAE,CAACsB,cAAc,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,CAAC;IAEF,IAAI,CAACzC,QAAQ,GAAGmB,EAAE;IAClB,OAAOA,EAAE;EACX;EAEA,aAAauB,YAAYA,CACvBC,YAAoB,EACpBC,OAAgB,EACC;IACjB,MAAMzB,EAAE,GAAG,MAAM,IAAI,CAAClB,WAAW,CAAC,CAAC;IACnC,MAAM4C,UAAU,GAAGD,OAAO,KAAK,MAAMpD,EAAE,CAACkB,QAAQ,CAACiC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxExB,EAAE,CAACoB,OAAO,CAACC,GAAG,CAAC,cAAc,EAAEK,UAAU,CAAC;IAC1C,MAAMC,GAAG,GAAG3B,EAAE,CAAC4B,SAAS,CAAC;AAC7B;AACA;AACA;AACA;AACA,KAAK,CAAC;IACF,OAAOD,GAAG;EACZ;AACF;AAEA,OAAO,eAAeJ,YAAYA,CAChCC,YAAoB,EACpBC,OAAgB,EACC;EACjB,OAAO5B,cAAc,CAAC0B,YAAY,CAACC,YAAY,EAAEC,OAAO,CAAC;AAC3D","ignoreList":[]}
@@ -1,13 +1,75 @@
1
1
  "use strict";
2
2
 
3
- import fs from 'node:fs';
4
3
  import fsp from 'node:fs/promises';
5
4
  import path from 'node:path';
6
- import { compileTtfFromGlyphSVGs } from '../font/compile.js';
7
- import { picoFromFile } from './managers.js';
8
- import { ensureDir, ensureEmptyDir } from './config.js';
9
- import { parseFlattenedSvg, preprocessSvg, shouldSkipPath, validateSvg } from '../svg/svg_dom.js';
10
- import { computePlacement, writeLayerSvg } from '../svg/layers.js';
5
+ import { compileTtfFromGlyphs, parseCompileTtfFromGlyphsError } from '../font/compile.js';
6
+ import { picoFromFile, PathKitManager } from './managers.js';
7
+ import { ensureDir } from './config.js';
8
+ import { parseFlattenedSvg, preprocessSvg, shouldSkipPath, validateSvg, extractOriginalEvenoddDs, restoreOriginalEvenoddDs } from '../svg/svg_dom.js';
9
+ import { computePlacement, transformPathForFont } from '../svg/layers.js';
10
+ import { convertEvenoddToWinding } from '../svg/svg_pathops.js';
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // Same-color path merging
14
+ // ---------------------------------------------------------------------------
15
+
16
+ /**
17
+ * Concatenate multiple SVG path `d` strings into a single compound path.
18
+ * This preserves the exact geometry of each path (no boolean operations)
19
+ * while combining them into one glyph. Under nonzero winding, this renders
20
+ * identically to drawing each path separately with the same color.
21
+ */
22
+ function concatPathDs(ds) {
23
+ if (ds.length === 0) return null;
24
+ if (ds.length === 1) return ds[0];
25
+ return ds.join(' ');
26
+ }
27
+
28
+ /**
29
+ * Merge consecutive same-color paths into single compound paths via boolean UNION.
30
+ * Preserves z-order: only merges runs of adjacent paths with identical fill color.
31
+ */
32
+ function mergeSameColorPaths(paths, logger) {
33
+ if (paths.length <= 1) return paths;
34
+ const result = [];
35
+ let i = 0;
36
+ while (i < paths.length) {
37
+ const fill = paths[i].fill;
38
+
39
+ // Find consecutive run of same fill that are all mergeable.
40
+ // Paths converted from evenodd have compound hole structure and must not
41
+ // be merged — their CW hole contours would cancel CCW contours from
42
+ // adjacent paths, producing incorrect fill.
43
+ let j = i + 1;
44
+ if (!paths[i].noMerge) {
45
+ while (j < paths.length && paths[j].fill === fill && !paths[j].noMerge) {
46
+ j++;
47
+ }
48
+ }
49
+ if (j - i === 1) {
50
+ result.push(paths[i]);
51
+ } else {
52
+ const group = paths.slice(i, j);
53
+ const merged = concatPathDs(group.map(p => p.d));
54
+ if (merged) {
55
+ logger?.info(` ⊕ Merged ${group.length} same-color paths (fill=${fill})`);
56
+ result.push({
57
+ d: merged,
58
+ fill
59
+ });
60
+ } else {
61
+ result.push(...group);
62
+ }
63
+ }
64
+ i = j;
65
+ }
66
+ return result;
67
+ }
68
+
69
+ // ---------------------------------------------------------------------------
70
+ // Pipeline
71
+ // ---------------------------------------------------------------------------
72
+
11
73
  /**
12
74
  * Run the font pipeline with given config and paths.
13
75
  * Uses the singleton Pyodide/PathKit instance (initialized on first call).
@@ -16,19 +78,21 @@ export async function runPipeline(config, paths, options) {
16
78
  const startTime = Date.now();
17
79
  const logger = options?.logger;
18
80
  logger?.update(`Building "${config.fontFamily}"…`);
19
- ensureEmptyDir(paths.tempDir);
20
81
  ensureDir(paths.outputDir);
21
82
  const files = (await fsp.readdir(paths.inputDir)).filter(f => f.toLowerCase().endsWith('.svg'));
22
83
  const glyphMap = {
23
- meta: {
24
- fontFamily: config.fontFamily,
25
- upm: config.upm,
26
- safeZone: config.safeZone,
27
- startUnicode: config.startUnicode
84
+ m: {
85
+ f: config.fontFamily,
86
+ u: config.upm,
87
+ z: config.safeZone,
88
+ s: config.startUnicode
28
89
  },
29
- icons: {}
90
+ i: {}
30
91
  };
31
92
  let currentUnicode = config.startUnicode;
93
+ const codepointToIcon = new Map();
94
+ const allGlyphs = [];
95
+ const PathKit = await PathKitManager.getInstance();
32
96
  for (const file of files) {
33
97
  const iconName = path.parse(file).name;
34
98
  const filePath = path.join(paths.inputDir, file);
@@ -40,8 +104,37 @@ export async function runPipeline(config, paths, options) {
40
104
  continue;
41
105
  }
42
106
  const preprocessed = preprocessSvg(rawContent);
107
+
108
+ // Preserve original evenodd `d` strings BEFORE picosvg processes them.
109
+ // Picosvg's simplify (via our PathKit shim) can drop contours from
110
+ // multi-subpath evenodd paths — we restore the originals after.
111
+ const originalEvenoddDs = extractOriginalEvenoddDs(preprocessed);
43
112
  const flattenedSvg = await picoFromFile(filePath, preprocessed);
44
- const parsed = parseFlattenedSvg(flattenedSvg);
113
+ const parsed = parseFlattenedSvg(flattenedSvg, {
114
+ onSanitize: original => {
115
+ logger?.info(` ⚠ Sanitized path in "${file}": path was missing initial moveto (prepended M from endpoint)`);
116
+ logger?.info(` Original: ${original.slice(0, 80)}…`);
117
+ }
118
+ });
119
+
120
+ // Restore original evenodd path data (undamaged by picosvg's simplify),
121
+ // then convert to nonzero winding with our containment-based algorithm.
122
+ // Mark as noMerge — compound paths with holes must stay separate so their
123
+ // CW hole contours don't cancel adjacent paths' CCW contours.
124
+ if (originalEvenoddDs.length > 0) {
125
+ restoreOriginalEvenoddDs(parsed.paths, originalEvenoddDs);
126
+ }
127
+ for (const p of parsed.paths) {
128
+ if (p.fillRule === 'evenodd') {
129
+ logger?.info(` ↻ Converting evenodd path to nonzero winding in "${file}"`);
130
+ p.d = convertEvenoddToWinding(PathKit, p.d);
131
+ delete p.fillRule;
132
+ p.noMerge = true;
133
+ }
134
+ }
135
+
136
+ // Merge consecutive same-color paths into single compound glyphs
137
+ const mergedPaths = mergeSameColorPaths(parsed.paths, logger);
45
138
  const {
46
139
  vx,
47
140
  vy,
@@ -54,56 +147,50 @@ export async function runPipeline(config, paths, options) {
54
147
  safeZone: config.safeZone,
55
148
  viewBox: parsed.viewBox
56
149
  });
57
- const entry = {
58
- adv,
59
- layers: []
60
- };
61
- for (const p of parsed.paths) {
150
+ const layers = [];
151
+ for (const p of mergedPaths) {
62
152
  if (shouldSkipPath(p.d, p.fill)) continue;
63
153
  const cp = currentUnicode++;
64
- await writeLayerSvg({
65
- tempDir: paths.tempDir,
66
- upm: config.upm,
67
- adv,
154
+ codepointToIcon.set(cp, iconName);
155
+ const fontD = transformPathForFont(PathKit, p.d, {
68
156
  vx,
69
157
  vy,
70
158
  scale,
71
159
  xOff,
72
160
  yOff,
73
- d: p.d,
74
- codepoint: cp
161
+ upm: config.upm
75
162
  });
76
- entry.layers.push({
163
+ allGlyphs.push({
77
164
  codepoint: cp,
78
- color: p.fill || 'black'
165
+ advanceWidth: adv,
166
+ d: fontD
79
167
  });
168
+ layers.push([cp, p.fill || 'black']);
80
169
  }
81
- if (entry.layers.length > 0) {
82
- glyphMap.icons[iconName] = entry;
170
+ if (layers.length > 0) {
171
+ glyphMap.i[iconName] = [adv, layers];
83
172
  }
84
173
  }
85
174
  const glyphmapPath = path.join(paths.outputDir, `${config.fontFamily}.glyphmap.json`);
86
175
  if (options?.inputHash) {
87
- glyphMap.meta.hash = options.inputHash;
176
+ glyphMap.m.h = options.inputHash;
88
177
  }
89
- await fsp.writeFile(glyphmapPath, JSON.stringify(glyphMap, null, 2), 'utf8');
178
+ await fsp.writeFile(glyphmapPath, JSON.stringify(glyphMap), 'utf8');
90
179
  logger?.info(`Compiling TTF…`);
91
180
  const ttfPath = path.join(paths.outputDir, `${config.fontFamily}.ttf`);
92
- await compileTtfFromGlyphSVGs({
93
- glyphDir: paths.tempDir,
94
- outTtfPath: ttfPath,
95
- fontName: config.fontFamily,
96
- upm: config.upm,
97
- ascent: config.upm,
98
- descent: 0
99
- });
100
- if (fs.existsSync(paths.tempDir)) {
101
- fs.rmSync(paths.tempDir, {
102
- recursive: true,
103
- force: true
181
+ try {
182
+ await compileTtfFromGlyphs({
183
+ glyphs: allGlyphs,
184
+ outTtfPath: ttfPath,
185
+ fontName: config.fontFamily,
186
+ upm: config.upm,
187
+ ascent: config.upm,
188
+ descent: 0
104
189
  });
190
+ } catch (err) {
191
+ parseCompileTtfFromGlyphsError(err, codepointToIcon);
105
192
  }
106
- const iconCount = Object.keys(glyphMap.icons).length;
193
+ const iconCount = Object.keys(glyphMap.i).length;
107
194
  const elapsed = Date.now() - startTime;
108
195
  logger?.succeed(`Built ${config.fontFamily}.ttf [${iconCount} icon${iconCount === 1 ? '' : 's'} in ${elapsed}ms]`);
109
196
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["fs","fsp","path","compileTtfFromGlyphSVGs","picoFromFile","ensureDir","ensureEmptyDir","parseFlattenedSvg","preprocessSvg","shouldSkipPath","validateSvg","computePlacement","writeLayerSvg","runPipeline","config","paths","options","startTime","Date","now","logger","update","fontFamily","tempDir","outputDir","files","readdir","inputDir","filter","f","toLowerCase","endsWith","glyphMap","meta","upm","safeZone","startUnicode","icons","currentUnicode","file","iconName","parse","name","filePath","join","info","rawContent","readFile","validation","valid","warn","reason","preprocessed","flattenedSvg","parsed","vx","vy","scale","xOff","yOff","adv","viewBox","entry","layers","p","d","fill","cp","codepoint","push","color","length","glyphmapPath","inputHash","hash","writeFile","JSON","stringify","ttfPath","glyphDir","outTtfPath","fontName","ascent","descent","existsSync","rmSync","recursive","force","iconCount","Object","keys","elapsed","succeed"],"sourceRoot":"../../../../src","sources":["core/pipeline/run.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["fsp","path","compileTtfFromGlyphs","parseCompileTtfFromGlyphsError","picoFromFile","PathKitManager","ensureDir","parseFlattenedSvg","preprocessSvg","shouldSkipPath","validateSvg","extractOriginalEvenoddDs","restoreOriginalEvenoddDs","computePlacement","transformPathForFont","convertEvenoddToWinding","concatPathDs","ds","length","join","mergeSameColorPaths","paths","logger","result","i","fill","j","noMerge","push","group","slice","merged","map","p","d","info","runPipeline","config","options","startTime","Date","now","update","fontFamily","outputDir","files","readdir","inputDir","filter","f","toLowerCase","endsWith","glyphMap","m","u","upm","z","safeZone","s","startUnicode","currentUnicode","codepointToIcon","Map","allGlyphs","PathKit","getInstance","file","iconName","parse","name","filePath","rawContent","readFile","validation","valid","warn","reason","preprocessed","originalEvenoddDs","flattenedSvg","parsed","onSanitize","original","fillRule","mergedPaths","vx","vy","scale","xOff","yOff","adv","viewBox","layers","cp","set","fontD","codepoint","advanceWidth","glyphmapPath","inputHash","h","writeFile","JSON","stringify","ttfPath","glyphs","outTtfPath","fontName","ascent","descent","err","iconCount","Object","keys","elapsed","succeed"],"sourceRoot":"../../../../src","sources":["core/pipeline/run.ts"],"mappings":"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","ignoreList":[]}
@@ -48,4 +48,38 @@ export async function writeLayerSvg(opts) {
48
48
  </svg>`.trim();
49
49
  await fsp.writeFile(path.join(opts.tempDir, `u${hex}.svg`), layerSvg, 'utf8');
50
50
  }
51
+
52
+ /**
53
+ * Transform an SVG path `d` string from source SVG coordinates into font
54
+ * glyph coordinates (Y-up, with placement scaling and centering applied).
55
+ *
56
+ * Combines placement transform (translate + scale + translate) with the
57
+ * SVG→font Y-axis flip into a single affine transform applied via PathKit.
58
+ */
59
+ export function transformPathForFont(PathKit, d, opts) {
60
+ const {
61
+ vx,
62
+ vy,
63
+ scale,
64
+ xOff,
65
+ yOff,
66
+ upm
67
+ } = opts;
68
+ const p = PathKit.FromSVGString(d);
69
+ if (!p) return d;
70
+
71
+ // Combined affine: placement + Y-flip for font coordinates.
72
+ // x' = scale * (x - vx) + xOff
73
+ // y' = upm - (scale * (y - vy) + yOff)
74
+ //
75
+ // SkMatrix row-major: [scaleX, skewX, transX, skewY, scaleY, transY, 0,0,1]
76
+ const scaleX = scale;
77
+ const scaleY = -scale;
78
+ const transX = xOff - vx * scale;
79
+ const transY = upm - yOff + vy * scale;
80
+ p.transform(scaleX, 0, transX, 0, scaleY, transY, 0, 0, 1);
81
+ const result = p.toSVGString();
82
+ p.delete?.();
83
+ return result;
84
+ }
51
85
  //# sourceMappingURL=layers.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["fsp","path","roundInt","n","Math","round","computePlacement","opts","vx","vy","vw","vh","viewBox","safeVh","scale","safeZone","totalPadding","upm","scaledW","scaledH","adv","max","xOff","yOff","writeLayerSvg","hex","codepoint","toString","padStart","layerSvg","d","trim","writeFile","join","tempDir"],"sourceRoot":"../../../../src","sources":["core/svg/layers.ts"],"mappings":";;AAAA,OAAOA,GAAG,MAAM,kBAAkB;AAClC,OAAOC,IAAI,MAAM,WAAW;AAE5B,SAASC,QAAQA,CAACC,CAAS,EAAU;EACnC,OAAOC,IAAI,CAACC,KAAK,CAACF,CAAC,CAAC;AACtB;AAEA,OAAO,SAASG,gBAAgBA,CAACC,IAIhC,EAAE;EACD,MAAM,CAACC,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAGJ,IAAI,CAACK,OAAO;;EAErC;EACA,MAAMC,MAAM,GAAGF,EAAE,KAAK,CAAC,GAAG,CAAC,GAAGA,EAAE;;EAEhC;EACA,MAAMG,KAAK,GAAGP,IAAI,CAACQ,QAAQ,GAAGF,MAAM;EAEpC,MAAMG,YAAY,GAAG,CAACT,IAAI,CAACU,GAAG,GAAGV,IAAI,CAACQ,QAAQ,IAAI,CAAC;;EAEnD;EACA,MAAMG,OAAO,GAAGR,EAAE,GAAGI,KAAK;EAC1B,MAAMK,OAAO,GAAGR,EAAE,GAAGG,KAAK,CAAC,CAAC;;EAE5B;EACA;EACA,MAAMM,GAAG,GAAGhB,IAAI,CAACiB,GAAG,CAAC,CAAC,EAAEnB,QAAQ,CAACgB,OAAO,GAAGF,YAAY,GAAG,CAAC,CAAC,CAAC;;EAE7D;EACA;EACA,MAAMM,IAAI,GAAG,CAACF,GAAG,GAAGF,OAAO,IAAI,CAAC;EAChC,MAAMK,IAAI,GAAG,CAAChB,IAAI,CAACU,GAAG,GAAGE,OAAO,IAAI,CAAC,CAAC,CAAC;;EAEvC,OAAO;IAAEX,EAAE;IAAEC,EAAE;IAAEK,KAAK;IAAEQ,IAAI;IAAEC,IAAI;IAAEH;EAAI,CAAC;AAC3C;AAEA,OAAO,eAAeI,aAAaA,CAACjB,IAWnC,EAAiB;EAChB,MAAMkB,GAAG,GAAGlB,IAAI,CAACmB,SAAS,CAACC,QAAQ,CAAC,EAAE,CAAC,CAACC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;EAExD,MAAMC,QAAQ,GAAG;AACnB,wBAAwBtB,IAAI,CAACa,GAAG,IAC5Bb,IAAI,CAACU,GAAG;AACZ,qBACqBV,IAAI,CAACa,GAAG,aAAab,IAAI,CAACU,GAAG;AAClD,gCAAgCV,IAAI,CAACe,IAAI,KAAKf,IAAI,CAACgB,IAAI,WACnDhB,IAAI,CAACO,KAAK,eACG,CAACP,IAAI,CAACC,EAAE,KAAK,CAACD,IAAI,CAACE,EAAE;AACtC,mBAAmBF,IAAI,CAACuB,CAAC;AACzB;AACA,WAAW,CAACC,IAAI,CAAC,CAAC;EAEhB,MAAM/B,GAAG,CAACgC,SAAS,CAAC/B,IAAI,CAACgC,IAAI,CAAC1B,IAAI,CAAC2B,OAAO,EAAE,IAAIT,GAAG,MAAM,CAAC,EAAEI,QAAQ,EAAE,MAAM,CAAC;AAC/E","ignoreList":[]}
1
+ {"version":3,"names":["fsp","path","roundInt","n","Math","round","computePlacement","opts","vx","vy","vw","vh","viewBox","safeVh","scale","safeZone","totalPadding","upm","scaledW","scaledH","adv","max","xOff","yOff","writeLayerSvg","hex","codepoint","toString","padStart","layerSvg","d","trim","writeFile","join","tempDir","transformPathForFont","PathKit","p","FromSVGString","scaleX","scaleY","transX","transY","transform","result","toSVGString","delete"],"sourceRoot":"../../../../src","sources":["core/svg/layers.ts"],"mappings":"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","ignoreList":[]}
@@ -20,33 +20,80 @@ export function calculateOpColor(fill, opacity, el) {
20
20
  const finalAlpha = +(a * opacity).toFixed(4);
21
21
  return `rgba(${r},${g},${b},${finalAlpha})`;
22
22
  }
23
+
24
+ /**
25
+ * If a flattened path lost its initial moveto (e.g. picosvg dropped an empty
26
+ * `Mx y z` subpath), prepend `M` using the path's last coordinate pair.
27
+ * For closed icon shapes the endpoint equals the start point.
28
+ */
29
+ export function sanitizePathData(d) {
30
+ const trimmed = d.trim();
31
+ if (!trimmed || /^[Mm]/.test(trimmed)) {
32
+ return {
33
+ d: trimmed,
34
+ sanitized: false
35
+ };
36
+ }
37
+
38
+ // Strip trailing close commands, then grab the last two numbers as x,y
39
+ const withoutClose = trimmed.replace(/[Zz]\s*$/, '');
40
+ const nums = withoutClose.match(/-?\d+(?:\.\d+)?/g);
41
+ if (!nums || nums.length < 2) {
42
+ return {
43
+ d: trimmed,
44
+ sanitized: false
45
+ };
46
+ }
47
+ const x = nums[nums.length - 2];
48
+ const y = nums[nums.length - 1];
49
+ return {
50
+ d: `M${x},${y} ${trimmed}`,
51
+ sanitized: true
52
+ };
53
+ }
23
54
  export const parsePath = p => {
24
55
  const d = p.getAttribute('d') ?? '';
25
56
  const op = p.getAttribute('opacity');
26
57
  const fillOp = p.getAttribute('fill-opacity');
27
58
  const fill = p.getAttribute('fill');
59
+ // picosvg may drop fill-rule but preserve clip-rule; treat either as evenodd
60
+ const fillRule = p.getAttribute('fill-rule') === 'evenodd' || p.getAttribute('clip-rule') === 'evenodd' ? 'evenodd' : undefined;
28
61
  if (op !== null || fillOp !== null) {
29
62
  const opVal = op !== null ? parseFloat(op) : 1;
30
63
  const fillOpVal = fillOp !== null ? parseFloat(fillOp) : 1;
31
64
  const combinedOpacity = opVal * fillOpVal;
32
65
  return {
33
66
  d,
34
- fill: calculateOpColor(fill, combinedOpacity, p)
67
+ fill: calculateOpColor(fill, combinedOpacity, p),
68
+ fillRule
35
69
  };
36
70
  }
37
71
  return {
38
72
  d,
39
- fill
73
+ fill,
74
+ fillRule
40
75
  };
41
76
  };
42
- export function parseFlattenedSvg(flattenedSvg) {
77
+ export function parseFlattenedSvg(flattenedSvg, options) {
43
78
  const dom = new JSDOM(flattenedSvg);
44
79
  const doc = dom.window.document;
45
80
  const svgEl = doc.querySelector('svg');
46
81
  const viewBoxRaw = svgEl?.getAttribute('viewBox')?.split(/\s+/).map(Number) ?? [0, 0, 100, 100];
47
82
  const viewBox = viewBoxRaw.length === 4 && viewBoxRaw.every(n => Number.isFinite(n)) ? [viewBoxRaw[0], viewBoxRaw[1], viewBoxRaw[2], viewBoxRaw[3]] : [0, 0, 100, 100];
48
83
  const pathEls = Array.from(doc.querySelectorAll('path'));
49
- const paths = pathEls.map(parsePath).filter(p => p.d.trim() !== '');
84
+ const paths = pathEls.map(parsePath).filter(p => p.d.trim() !== '').map(p => {
85
+ const {
86
+ d,
87
+ sanitized
88
+ } = sanitizePathData(p.d);
89
+ if (sanitized) {
90
+ options?.onSanitize?.(p.d);
91
+ }
92
+ return {
93
+ ...p,
94
+ d
95
+ };
96
+ });
50
97
  return {
51
98
  viewBox,
52
99
  paths
@@ -75,6 +122,46 @@ export function validateSvg(content) {
75
122
  };
76
123
  }
77
124
 
125
+ /**
126
+ * Extract the original `d` strings of evenodd paths from the raw SVG
127
+ * BEFORE picosvg processes it. Picosvg's simplify (via our PathKit shim)
128
+ * can drop contours from multi-subpath evenodd paths, so we preserve
129
+ * the originals and apply our own winding conversion later.
130
+ *
131
+ * Returns one `d` string per evenodd path, in document order.
132
+ */
133
+ export function extractOriginalEvenoddDs(svgContent) {
134
+ if (!/<[^>]*fill-rule\s*=\s*["']evenodd/i.test(svgContent)) {
135
+ return [];
136
+ }
137
+ const dom = new JSDOM(svgContent, {
138
+ contentType: 'image/svg+xml'
139
+ });
140
+ const doc = dom.window.document;
141
+ const results = [];
142
+ const pathEls = doc.querySelectorAll('path[fill-rule="evenodd"], path[clip-rule="evenodd"]');
143
+ for (const el of pathEls) {
144
+ const d = el.getAttribute('d');
145
+ if (d) results.push(d);
146
+ }
147
+ return results;
148
+ }
149
+
150
+ /**
151
+ * Replace picosvg's (potentially damaged) evenodd path data with the
152
+ * preserved originals. Matches by position: the Nth evenodd path in
153
+ * the parsed output gets the Nth original `d` string.
154
+ */
155
+ export function restoreOriginalEvenoddDs(paths, originalDs) {
156
+ let oi = 0;
157
+ for (const p of paths) {
158
+ if (p.fillRule === 'evenodd' && oi < originalDs.length) {
159
+ p.d = originalDs[oi];
160
+ oi++;
161
+ }
162
+ }
163
+ }
164
+
78
165
  // ensure the svg has a xmlns attribute
79
166
  export function preprocessSvg(content) {
80
167
  if (/xmlns\s*=/.test(content)) return content;
@@ -1 +1 @@
1
- {"version":3,"names":["JSDOM","parseColor","resolveInheritedFill","el","current","parentElement","fill","getAttribute","calculateOpColor","opacity","resolvedFill","r","g","b","a","finalAlpha","toFixed","parsePath","p","d","op","fillOp","opVal","parseFloat","fillOpVal","combinedOpacity","parseFlattenedSvg","flattenedSvg","dom","doc","window","document","svgEl","querySelector","viewBoxRaw","split","map","Number","viewBox","length","every","n","isFinite","pathEls","Array","from","querySelectorAll","paths","filter","trim","shouldSkipPath","f","toLowerCase","validateSvg","content","test","valid","reason","preprocessSvg","replace"],"sourceRoot":"../../../../src","sources":["core/svg/svg_dom.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["JSDOM","parseColor","resolveInheritedFill","el","current","parentElement","fill","getAttribute","calculateOpColor","opacity","resolvedFill","r","g","b","a","finalAlpha","toFixed","sanitizePathData","d","trimmed","trim","test","sanitized","withoutClose","replace","nums","match","length","x","y","parsePath","p","op","fillOp","fillRule","undefined","opVal","parseFloat","fillOpVal","combinedOpacity","parseFlattenedSvg","flattenedSvg","options","dom","doc","window","document","svgEl","querySelector","viewBoxRaw","split","map","Number","viewBox","every","n","isFinite","pathEls","Array","from","querySelectorAll","paths","filter","onSanitize","shouldSkipPath","f","toLowerCase","validateSvg","content","valid","reason","extractOriginalEvenoddDs","svgContent","contentType","results","push","restoreOriginalEvenoddDs","originalDs","oi","preprocessSvg"],"sourceRoot":"../../../../src","sources":["core/svg/svg_dom.ts"],"mappings":"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","ignoreList":[]}