@iconify/tools 4.1.5 → 5.0.0-beta.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.
Files changed (526) hide show
  1. package/lib/colors/attribs.d.ts +2 -4
  2. package/lib/colors/attribs.js +33 -0
  3. package/lib/colors/detect.d.ts +2 -10
  4. package/lib/colors/detect.js +36 -0
  5. package/lib/colors/parse.d.ts +12 -19
  6. package/lib/colors/parse.js +241 -0
  7. package/lib/colors/validate.d.ts +3 -13
  8. package/lib/colors/validate.js +31 -0
  9. package/lib/css/parse.d.ts +1 -2
  10. package/lib/css/parse.js +18 -0
  11. package/lib/css/parser/error.d.ts +6 -7
  12. package/lib/css/parser/error.js +24 -0
  13. package/lib/css/parser/export.d.ts +2 -4
  14. package/lib/css/parser/export.js +34 -0
  15. package/lib/css/parser/strings.d.ts +2 -4
  16. package/lib/css/parser/strings.js +66 -0
  17. package/lib/css/parser/text.d.ts +2 -4
  18. package/lib/css/parser/text.js +103 -0
  19. package/lib/css/parser/tokens.d.ts +3 -5
  20. package/lib/css/parser/tokens.js +169 -0
  21. package/lib/css/parser/tree.d.ts +2 -4
  22. package/lib/css/parser/tree.js +35 -0
  23. package/lib/css/parser/types.d.ts +21 -22
  24. package/lib/css/parser/types.js +1 -0
  25. package/lib/download/api/cache.d.ts +2 -4
  26. package/lib/download/api/cache.js +84 -0
  27. package/lib/download/api/config.d.ts +7 -9
  28. package/lib/download/api/config.js +10 -0
  29. package/lib/download/api/download.d.ts +2 -4
  30. package/lib/download/api/download.js +26 -0
  31. package/lib/download/api/fetch.d.ts +9 -0
  32. package/lib/download/api/fetch.js +15 -0
  33. package/lib/download/api/index.d.ts +2 -4
  34. package/lib/download/api/index.js +50 -0
  35. package/lib/download/api/queue.d.ts +9 -10
  36. package/lib/download/api/queue.js +94 -0
  37. package/lib/download/api/types.d.ts +6 -7
  38. package/lib/download/api/types.js +1 -0
  39. package/lib/download/git/branch.d.ts +2 -4
  40. package/lib/download/git/branch.js +15 -0
  41. package/lib/download/git/hash.d.ts +2 -4
  42. package/lib/download/git/hash.js +10 -0
  43. package/lib/download/git/index.d.ts +10 -12
  44. package/lib/download/git/index.js +39 -0
  45. package/lib/download/git/reset.d.ts +1 -2
  46. package/lib/download/git/reset.js +12 -0
  47. package/lib/download/github/hash.d.ts +2 -4
  48. package/lib/download/github/hash.js +20 -0
  49. package/lib/download/github/index.d.ts +12 -14
  50. package/lib/download/github/index.js +66 -0
  51. package/lib/download/github/types.d.ts +5 -6
  52. package/lib/download/github/types.js +1 -0
  53. package/lib/download/gitlab/hash.d.ts +2 -4
  54. package/lib/download/gitlab/hash.js +19 -0
  55. package/lib/download/gitlab/index.d.ts +12 -14
  56. package/lib/download/gitlab/index.js +64 -0
  57. package/lib/download/gitlab/types.d.ts +5 -6
  58. package/lib/download/gitlab/types.js +6 -0
  59. package/lib/download/helpers/untar.d.ts +1 -2
  60. package/lib/download/helpers/untar.js +13 -0
  61. package/lib/download/helpers/unzip.d.ts +1 -2
  62. package/lib/download/helpers/unzip.js +39 -0
  63. package/lib/download/index.d.ts +15 -20
  64. package/lib/download/index.js +19 -0
  65. package/lib/download/npm/index.d.ts +11 -13
  66. package/lib/download/npm/index.js +51 -0
  67. package/lib/download/npm/types.d.ts +3 -4
  68. package/lib/download/npm/types.js +1 -0
  69. package/lib/download/npm/version.d.ts +4 -6
  70. package/lib/download/npm/version.js +23 -0
  71. package/lib/download/types/modified.d.ts +1 -2
  72. package/lib/download/types/modified.js +1 -0
  73. package/lib/download/types/sources.d.ts +2 -3
  74. package/lib/download/types/sources.js +1 -0
  75. package/lib/export/directory.d.ts +7 -15
  76. package/lib/export/directory.js +37 -0
  77. package/lib/export/helpers/custom-files.d.ts +2 -3
  78. package/lib/export/helpers/custom-files.js +23 -0
  79. package/lib/export/helpers/prepare.d.ts +3 -4
  80. package/lib/export/helpers/prepare.js +31 -0
  81. package/lib/export/helpers/types-version.d.ts +1 -2
  82. package/lib/export/helpers/types-version.js +19 -0
  83. package/lib/export/icon-package.d.ts +8 -15
  84. package/lib/export/icon-package.js +55 -0
  85. package/lib/export/json-package.d.ts +7 -14
  86. package/lib/export/json-package.js +129 -0
  87. package/lib/icon-set/index.d.ts +144 -147
  88. package/lib/icon-set/index.js +595 -0
  89. package/lib/icon-set/match.d.ts +3 -11
  90. package/lib/icon-set/match.js +45 -0
  91. package/lib/icon-set/merge.d.ts +2 -10
  92. package/lib/icon-set/merge.js +68 -0
  93. package/lib/icon-set/modified.d.ts +2 -10
  94. package/lib/icon-set/modified.js +20 -0
  95. package/lib/icon-set/props.d.ts +2 -5
  96. package/lib/icon-set/props.js +19 -0
  97. package/lib/icon-set/tags.d.ts +7 -15
  98. package/lib/icon-set/tags.js +53 -0
  99. package/lib/icon-set/types.d.ts +16 -21
  100. package/lib/icon-set/types.js +1 -0
  101. package/lib/import/directory.d.ts +11 -20
  102. package/lib/import/directory.js +101 -0
  103. package/lib/import/figma/index.d.ts +4 -15
  104. package/lib/import/figma/index.js +61 -0
  105. package/lib/import/figma/nodes.d.ts +4 -14
  106. package/lib/import/figma/nodes.js +80 -0
  107. package/lib/import/figma/query.d.ts +9 -19
  108. package/lib/import/figma/query.js +183 -0
  109. package/lib/import/figma/types/api.d.ts +23 -35
  110. package/lib/import/figma/types/nodes.d.ts +12 -21
  111. package/lib/import/figma/types/options.d.ts +23 -32
  112. package/lib/import/figma/types/result.d.ts +16 -24
  113. package/lib/index.d.ts +55 -79
  114. package/lib/index.js +56 -0
  115. package/lib/misc/bump-version.d.ts +1 -2
  116. package/lib/misc/bump-version.js +13 -0
  117. package/lib/misc/compare-dirs.d.ts +4 -5
  118. package/lib/misc/compare-dirs.js +65 -0
  119. package/lib/misc/exec.d.ts +4 -6
  120. package/lib/misc/exec.js +23 -0
  121. package/lib/misc/keyword.d.ts +1 -2
  122. package/lib/misc/keyword.js +12 -0
  123. package/lib/misc/scan.d.ts +4 -6
  124. package/lib/misc/scan.js +87 -0
  125. package/lib/misc/write-json.d.ts +1 -2
  126. package/lib/misc/write-json.js +10 -0
  127. package/lib/optimise/figma.d.ts +2 -7
  128. package/lib/optimise/figma.js +189 -0
  129. package/lib/optimise/flags.d.ts +2 -7
  130. package/lib/optimise/flags.js +231 -0
  131. package/lib/optimise/global-style.d.ts +2 -7
  132. package/lib/optimise/global-style.js +114 -0
  133. package/lib/optimise/mask.d.ts +9 -14
  134. package/lib/optimise/mask.js +83 -0
  135. package/lib/optimise/origin.d.ts +2 -7
  136. package/lib/optimise/origin.js +22 -0
  137. package/lib/optimise/scale.d.ts +2 -7
  138. package/lib/optimise/scale.js +24 -0
  139. package/lib/optimise/svgo.d.ts +10 -15
  140. package/lib/optimise/svgo.js +90 -0
  141. package/lib/optimise/unwrap.d.ts +2 -7
  142. package/lib/optimise/unwrap.js +25 -0
  143. package/lib/svg/analyse/error.d.ts +2 -7
  144. package/lib/svg/analyse/error.js +12 -0
  145. package/lib/svg/analyse/types.d.ts +31 -35
  146. package/lib/svg/analyse/types.js +1 -0
  147. package/lib/svg/analyse.d.ts +3 -10
  148. package/lib/svg/analyse.js +256 -0
  149. package/lib/svg/cleanup/attribs.d.ts +2 -7
  150. package/lib/svg/cleanup/attribs.js +37 -0
  151. package/lib/svg/cleanup/bad-tags.d.ts +3 -8
  152. package/lib/svg/cleanup/bad-tags.js +57 -0
  153. package/lib/svg/cleanup/inline-style.d.ts +2 -7
  154. package/lib/svg/cleanup/inline-style.js +80 -0
  155. package/lib/svg/cleanup/root-style.d.ts +4 -9
  156. package/lib/svg/cleanup/root-style.js +27 -0
  157. package/lib/svg/cleanup/root-svg.d.ts +2 -7
  158. package/lib/svg/cleanup/root-svg.js +73 -0
  159. package/lib/svg/cleanup/svgo-style.d.ts +2 -7
  160. package/lib/svg/cleanup/svgo-style.js +24 -0
  161. package/lib/svg/cleanup.d.ts +3 -8
  162. package/lib/svg/cleanup.js +20 -0
  163. package/lib/svg/data/attributes.d.ts +1 -2
  164. package/lib/svg/data/attributes.js +451 -0
  165. package/lib/svg/data/tags.d.ts +1 -2
  166. package/lib/svg/data/tags.js +182 -0
  167. package/lib/svg/index.d.ts +38 -47
  168. package/lib/svg/index.js +117 -0
  169. package/lib/svg/parse-style.d.ts +21 -28
  170. package/lib/svg/parse-style.js +199 -0
  171. package/lib/svg/parse.d.ts +8 -16
  172. package/lib/svg/parse.js +32 -0
  173. package/package.json +126 -227
  174. package/lib/colors/attribs.cjs +0 -33
  175. package/lib/colors/attribs.d.cts +0 -27
  176. package/lib/colors/attribs.d.mts +0 -27
  177. package/lib/colors/attribs.mjs +0 -26
  178. package/lib/colors/detect.cjs +0 -66
  179. package/lib/colors/detect.d.cts +0 -16
  180. package/lib/colors/detect.d.mts +0 -16
  181. package/lib/colors/detect.mjs +0 -64
  182. package/lib/colors/parse.cjs +0 -300
  183. package/lib/colors/parse.d.cts +0 -61
  184. package/lib/colors/parse.d.mts +0 -61
  185. package/lib/colors/parse.mjs +0 -297
  186. package/lib/colors/validate.cjs +0 -56
  187. package/lib/colors/validate.d.cts +0 -21
  188. package/lib/colors/validate.d.mts +0 -21
  189. package/lib/colors/validate.mjs +0 -54
  190. package/lib/css/parse.cjs +0 -24
  191. package/lib/css/parse.d.cts +0 -6
  192. package/lib/css/parse.d.mts +0 -6
  193. package/lib/css/parse.mjs +0 -22
  194. package/lib/css/parser/error.cjs +0 -23
  195. package/lib/css/parser/error.d.cts +0 -13
  196. package/lib/css/parser/error.d.mts +0 -13
  197. package/lib/css/parser/error.mjs +0 -21
  198. package/lib/css/parser/export.cjs +0 -37
  199. package/lib/css/parser/export.d.cts +0 -8
  200. package/lib/css/parser/export.d.mts +0 -8
  201. package/lib/css/parser/export.mjs +0 -35
  202. package/lib/css/parser/strings.cjs +0 -83
  203. package/lib/css/parser/strings.d.cts +0 -16
  204. package/lib/css/parser/strings.d.mts +0 -16
  205. package/lib/css/parser/strings.mjs +0 -80
  206. package/lib/css/parser/text.cjs +0 -114
  207. package/lib/css/parser/text.d.cts +0 -20
  208. package/lib/css/parser/text.d.mts +0 -20
  209. package/lib/css/parser/text.mjs +0 -109
  210. package/lib/css/parser/tokens.cjs +0 -206
  211. package/lib/css/parser/tokens.d.cts +0 -9
  212. package/lib/css/parser/tokens.d.mts +0 -9
  213. package/lib/css/parser/tokens.mjs +0 -204
  214. package/lib/css/parser/tree.cjs +0 -40
  215. package/lib/css/parser/tree.d.cts +0 -8
  216. package/lib/css/parser/tree.d.mts +0 -8
  217. package/lib/css/parser/tree.mjs +0 -38
  218. package/lib/css/parser/types.cjs +0 -2
  219. package/lib/css/parser/types.d.cts +0 -52
  220. package/lib/css/parser/types.d.mts +0 -52
  221. package/lib/css/parser/types.mjs +0 -1
  222. package/lib/download/api/cache.cjs +0 -91
  223. package/lib/download/api/cache.d.cts +0 -20
  224. package/lib/download/api/cache.d.mts +0 -20
  225. package/lib/download/api/cache.mjs +0 -86
  226. package/lib/download/api/config.cjs +0 -11
  227. package/lib/download/api/config.d.cts +0 -18
  228. package/lib/download/api/config.d.mts +0 -18
  229. package/lib/download/api/config.mjs +0 -8
  230. package/lib/download/api/download.cjs +0 -30
  231. package/lib/download/api/download.d.cts +0 -8
  232. package/lib/download/api/download.d.mts +0 -8
  233. package/lib/download/api/download.mjs +0 -24
  234. package/lib/download/api/index.cjs +0 -60
  235. package/lib/download/api/index.d.cts +0 -8
  236. package/lib/download/api/index.d.mts +0 -8
  237. package/lib/download/api/index.mjs +0 -54
  238. package/lib/download/api/queue.cjs +0 -104
  239. package/lib/download/api/queue.d.cts +0 -32
  240. package/lib/download/api/queue.d.mts +0 -32
  241. package/lib/download/api/queue.mjs +0 -101
  242. package/lib/download/api/types.cjs +0 -2
  243. package/lib/download/api/types.d.cts +0 -17
  244. package/lib/download/api/types.d.mts +0 -17
  245. package/lib/download/api/types.mjs +0 -1
  246. package/lib/download/git/branch.cjs +0 -19
  247. package/lib/download/git/branch.d.cts +0 -8
  248. package/lib/download/git/branch.d.mts +0 -8
  249. package/lib/download/git/branch.mjs +0 -17
  250. package/lib/download/git/hash.cjs +0 -14
  251. package/lib/download/git/hash.d.cts +0 -8
  252. package/lib/download/git/hash.d.mts +0 -8
  253. package/lib/download/git/hash.mjs +0 -12
  254. package/lib/download/git/index.cjs +0 -77
  255. package/lib/download/git/index.d.cts +0 -29
  256. package/lib/download/git/index.d.mts +0 -29
  257. package/lib/download/git/index.mjs +0 -75
  258. package/lib/download/git/reset.cjs +0 -37
  259. package/lib/download/git/reset.d.cts +0 -6
  260. package/lib/download/git/reset.d.mts +0 -6
  261. package/lib/download/git/reset.mjs +0 -35
  262. package/lib/download/github/hash.cjs +0 -31
  263. package/lib/download/github/hash.d.cts +0 -8
  264. package/lib/download/github/hash.d.mts +0 -8
  265. package/lib/download/github/hash.mjs +0 -29
  266. package/lib/download/github/index.cjs +0 -105
  267. package/lib/download/github/index.d.cts +0 -31
  268. package/lib/download/github/index.d.mts +0 -31
  269. package/lib/download/github/index.mjs +0 -103
  270. package/lib/download/github/types.cjs +0 -2
  271. package/lib/download/github/types.d.cts +0 -11
  272. package/lib/download/github/types.d.mts +0 -11
  273. package/lib/download/github/types.mjs +0 -1
  274. package/lib/download/gitlab/hash.cjs +0 -33
  275. package/lib/download/gitlab/hash.d.cts +0 -8
  276. package/lib/download/gitlab/hash.d.mts +0 -8
  277. package/lib/download/gitlab/hash.mjs +0 -31
  278. package/lib/download/gitlab/index.cjs +0 -105
  279. package/lib/download/gitlab/index.d.cts +0 -31
  280. package/lib/download/gitlab/index.d.mts +0 -31
  281. package/lib/download/gitlab/index.mjs +0 -103
  282. package/lib/download/gitlab/types.cjs +0 -5
  283. package/lib/download/gitlab/types.d.cts +0 -15
  284. package/lib/download/gitlab/types.d.mts +0 -15
  285. package/lib/download/gitlab/types.mjs +0 -3
  286. package/lib/download/helpers/untar.cjs +0 -12
  287. package/lib/download/helpers/untar.d.cts +0 -6
  288. package/lib/download/helpers/untar.d.mts +0 -6
  289. package/lib/download/helpers/untar.mjs +0 -10
  290. package/lib/download/helpers/unzip.cjs +0 -17
  291. package/lib/download/helpers/unzip.d.cts +0 -6
  292. package/lib/download/helpers/unzip.d.mts +0 -6
  293. package/lib/download/helpers/unzip.mjs +0 -11
  294. package/lib/download/index.cjs +0 -64
  295. package/lib/download/index.d.cts +0 -48
  296. package/lib/download/index.d.mts +0 -48
  297. package/lib/download/index.mjs +0 -62
  298. package/lib/download/npm/index.cjs +0 -85
  299. package/lib/download/npm/index.d.cts +0 -30
  300. package/lib/download/npm/index.d.mts +0 -30
  301. package/lib/download/npm/index.mjs +0 -83
  302. package/lib/download/npm/types.cjs +0 -2
  303. package/lib/download/npm/types.d.cts +0 -9
  304. package/lib/download/npm/types.d.mts +0 -9
  305. package/lib/download/npm/types.mjs +0 -1
  306. package/lib/download/npm/version.cjs +0 -29
  307. package/lib/download/npm/version.d.cts +0 -16
  308. package/lib/download/npm/version.d.mts +0 -16
  309. package/lib/download/npm/version.mjs +0 -26
  310. package/lib/download/types/modified.cjs +0 -2
  311. package/lib/download/types/modified.d.cts +0 -6
  312. package/lib/download/types/modified.d.mts +0 -6
  313. package/lib/download/types/modified.mjs +0 -1
  314. package/lib/download/types/sources.cjs +0 -2
  315. package/lib/download/types/sources.d.cts +0 -12
  316. package/lib/download/types/sources.d.mts +0 -12
  317. package/lib/download/types/sources.mjs +0 -1
  318. package/lib/export/directory.cjs +0 -43
  319. package/lib/export/directory.d.cts +0 -26
  320. package/lib/export/directory.d.mts +0 -26
  321. package/lib/export/directory.mjs +0 -41
  322. package/lib/export/helpers/custom-files.cjs +0 -26
  323. package/lib/export/helpers/custom-files.d.cts +0 -12
  324. package/lib/export/helpers/custom-files.d.mts +0 -12
  325. package/lib/export/helpers/custom-files.mjs +0 -24
  326. package/lib/export/helpers/prepare.cjs +0 -34
  327. package/lib/export/helpers/prepare.d.cts +0 -19
  328. package/lib/export/helpers/prepare.d.mts +0 -19
  329. package/lib/export/helpers/prepare.mjs +0 -31
  330. package/lib/export/helpers/types-version.cjs +0 -12
  331. package/lib/export/helpers/types-version.d.cts +0 -6
  332. package/lib/export/helpers/types-version.d.mts +0 -6
  333. package/lib/export/helpers/types-version.mjs +0 -10
  334. package/lib/export/icon-package.cjs +0 -56
  335. package/lib/export/icon-package.d.cts +0 -26
  336. package/lib/export/icon-package.d.mts +0 -26
  337. package/lib/export/icon-package.mjs +0 -54
  338. package/lib/export/json-package.cjs +0 -144
  339. package/lib/export/json-package.d.cts +0 -25
  340. package/lib/export/json-package.d.mts +0 -25
  341. package/lib/export/json-package.mjs +0 -142
  342. package/lib/icon-set/index.cjs +0 -720
  343. package/lib/icon-set/index.d.cts +0 -162
  344. package/lib/icon-set/index.d.mts +0 -162
  345. package/lib/icon-set/index.mjs +0 -716
  346. package/lib/icon-set/match.cjs +0 -56
  347. package/lib/icon-set/match.d.cts +0 -15
  348. package/lib/icon-set/match.d.mts +0 -15
  349. package/lib/icon-set/match.mjs +0 -54
  350. package/lib/icon-set/merge.cjs +0 -87
  351. package/lib/icon-set/merge.d.cts +0 -14
  352. package/lib/icon-set/merge.d.mts +0 -14
  353. package/lib/icon-set/merge.mjs +0 -85
  354. package/lib/icon-set/modified.cjs +0 -25
  355. package/lib/icon-set/modified.d.cts +0 -16
  356. package/lib/icon-set/modified.d.mts +0 -16
  357. package/lib/icon-set/modified.mjs +0 -23
  358. package/lib/icon-set/props.cjs +0 -16
  359. package/lib/icon-set/props.d.cts +0 -13
  360. package/lib/icon-set/props.d.mts +0 -13
  361. package/lib/icon-set/props.mjs +0 -13
  362. package/lib/icon-set/tags.cjs +0 -95
  363. package/lib/icon-set/tags.d.cts +0 -25
  364. package/lib/icon-set/tags.d.mts +0 -25
  365. package/lib/icon-set/tags.mjs +0 -91
  366. package/lib/icon-set/types.cjs +0 -2
  367. package/lib/icon-set/types.d.cts +0 -75
  368. package/lib/icon-set/types.d.mts +0 -75
  369. package/lib/icon-set/types.mjs +0 -1
  370. package/lib/import/directory.cjs +0 -169
  371. package/lib/import/directory.d.cts +0 -52
  372. package/lib/import/directory.d.mts +0 -52
  373. package/lib/import/directory.mjs +0 -166
  374. package/lib/import/figma/index.cjs +0 -115
  375. package/lib/import/figma/index.d.cts +0 -20
  376. package/lib/import/figma/index.d.mts +0 -20
  377. package/lib/import/figma/index.mjs +0 -113
  378. package/lib/import/figma/nodes.cjs +0 -90
  379. package/lib/import/figma/nodes.d.cts +0 -18
  380. package/lib/import/figma/nodes.d.mts +0 -18
  381. package/lib/import/figma/nodes.mjs +0 -88
  382. package/lib/import/figma/query.cjs +0 -260
  383. package/lib/import/figma/query.d.cts +0 -42
  384. package/lib/import/figma/query.d.mts +0 -42
  385. package/lib/import/figma/query.mjs +0 -256
  386. package/lib/import/figma/types/api.cjs +0 -2
  387. package/lib/import/figma/types/api.d.cts +0 -53
  388. package/lib/import/figma/types/api.d.mts +0 -53
  389. package/lib/import/figma/types/api.mjs +0 -1
  390. package/lib/import/figma/types/nodes.cjs +0 -2
  391. package/lib/import/figma/types/nodes.d.cts +0 -44
  392. package/lib/import/figma/types/nodes.d.mts +0 -44
  393. package/lib/import/figma/types/nodes.mjs +0 -1
  394. package/lib/import/figma/types/options.cjs +0 -2
  395. package/lib/import/figma/types/options.d.cts +0 -59
  396. package/lib/import/figma/types/options.d.mts +0 -59
  397. package/lib/import/figma/types/options.mjs +0 -1
  398. package/lib/import/figma/types/result.cjs +0 -2
  399. package/lib/import/figma/types/result.d.cts +0 -44
  400. package/lib/import/figma/types/result.d.mts +0 -44
  401. package/lib/import/figma/types/result.mjs +0 -1
  402. package/lib/index.cjs +0 -156
  403. package/lib/index.d.cts +0 -79
  404. package/lib/index.d.mts +0 -79
  405. package/lib/index.mjs +0 -91
  406. package/lib/misc/bump-version.cjs +0 -15
  407. package/lib/misc/bump-version.d.cts +0 -6
  408. package/lib/misc/bump-version.d.mts +0 -6
  409. package/lib/misc/bump-version.mjs +0 -13
  410. package/lib/misc/cheerio.cjs +0 -2
  411. package/lib/misc/cheerio.d.cts +0 -10
  412. package/lib/misc/cheerio.d.mts +0 -10
  413. package/lib/misc/cheerio.d.ts +0 -10
  414. package/lib/misc/cheerio.mjs +0 -1
  415. package/lib/misc/compare-dirs.cjs +0 -75
  416. package/lib/misc/compare-dirs.d.cts +0 -11
  417. package/lib/misc/compare-dirs.d.mts +0 -11
  418. package/lib/misc/compare-dirs.mjs +0 -73
  419. package/lib/misc/exec.cjs +0 -27
  420. package/lib/misc/exec.d.cts +0 -12
  421. package/lib/misc/exec.d.mts +0 -12
  422. package/lib/misc/exec.mjs +0 -25
  423. package/lib/misc/keyword.cjs +0 -20
  424. package/lib/misc/keyword.d.cts +0 -6
  425. package/lib/misc/keyword.d.mts +0 -6
  426. package/lib/misc/keyword.mjs +0 -18
  427. package/lib/misc/scan.cjs +0 -114
  428. package/lib/misc/scan.d.cts +0 -33
  429. package/lib/misc/scan.d.mts +0 -33
  430. package/lib/misc/scan.mjs +0 -111
  431. package/lib/misc/write-json.cjs +0 -9
  432. package/lib/misc/write-json.d.cts +0 -6
  433. package/lib/misc/write-json.d.mts +0 -6
  434. package/lib/misc/write-json.mjs +0 -7
  435. package/lib/optimise/figma.cjs +0 -232
  436. package/lib/optimise/figma.d.cts +0 -14
  437. package/lib/optimise/figma.d.mts +0 -14
  438. package/lib/optimise/figma.mjs +0 -230
  439. package/lib/optimise/flags.cjs +0 -256
  440. package/lib/optimise/flags.d.cts +0 -11
  441. package/lib/optimise/flags.d.mts +0 -11
  442. package/lib/optimise/flags.mjs +0 -254
  443. package/lib/optimise/global-style.cjs +0 -158
  444. package/lib/optimise/global-style.d.cts +0 -11
  445. package/lib/optimise/global-style.d.mts +0 -11
  446. package/lib/optimise/global-style.mjs +0 -156
  447. package/lib/optimise/mask.cjs +0 -110
  448. package/lib/optimise/mask.d.cts +0 -24
  449. package/lib/optimise/mask.d.mts +0 -24
  450. package/lib/optimise/mask.mjs +0 -108
  451. package/lib/optimise/origin.cjs +0 -23
  452. package/lib/optimise/origin.d.cts +0 -11
  453. package/lib/optimise/origin.d.mts +0 -11
  454. package/lib/optimise/origin.mjs +0 -21
  455. package/lib/optimise/scale.cjs +0 -27
  456. package/lib/optimise/scale.d.cts +0 -11
  457. package/lib/optimise/scale.d.mts +0 -11
  458. package/lib/optimise/scale.mjs +0 -25
  459. package/lib/optimise/svgo.cjs +0 -107
  460. package/lib/optimise/svgo.d.cts +0 -37
  461. package/lib/optimise/svgo.d.mts +0 -37
  462. package/lib/optimise/svgo.mjs +0 -104
  463. package/lib/optimise/unwrap.cjs +0 -31
  464. package/lib/optimise/unwrap.d.cts +0 -11
  465. package/lib/optimise/unwrap.d.mts +0 -11
  466. package/lib/optimise/unwrap.mjs +0 -29
  467. package/lib/svg/analyse/error.cjs +0 -16
  468. package/lib/svg/analyse/error.d.cts +0 -11
  469. package/lib/svg/analyse/error.d.mts +0 -11
  470. package/lib/svg/analyse/error.mjs +0 -14
  471. package/lib/svg/analyse/types.cjs +0 -2
  472. package/lib/svg/analyse/types.d.cts +0 -93
  473. package/lib/svg/analyse/types.d.mts +0 -93
  474. package/lib/svg/analyse/types.mjs +0 -1
  475. package/lib/svg/analyse.cjs +0 -303
  476. package/lib/svg/analyse.d.cts +0 -16
  477. package/lib/svg/analyse.d.mts +0 -16
  478. package/lib/svg/analyse.mjs +0 -301
  479. package/lib/svg/cleanup/attribs.cjs +0 -39
  480. package/lib/svg/cleanup/attribs.d.cts +0 -11
  481. package/lib/svg/cleanup/attribs.d.mts +0 -11
  482. package/lib/svg/cleanup/attribs.mjs +0 -37
  483. package/lib/svg/cleanup/bad-tags.cjs +0 -69
  484. package/lib/svg/cleanup/bad-tags.d.cts +0 -17
  485. package/lib/svg/cleanup/bad-tags.d.mts +0 -17
  486. package/lib/svg/cleanup/bad-tags.mjs +0 -67
  487. package/lib/svg/cleanup/inline-style.cjs +0 -97
  488. package/lib/svg/cleanup/inline-style.d.cts +0 -11
  489. package/lib/svg/cleanup/inline-style.d.mts +0 -11
  490. package/lib/svg/cleanup/inline-style.mjs +0 -95
  491. package/lib/svg/cleanup/root-style.cjs +0 -34
  492. package/lib/svg/cleanup/root-style.d.cts +0 -17
  493. package/lib/svg/cleanup/root-style.d.mts +0 -17
  494. package/lib/svg/cleanup/root-style.mjs +0 -32
  495. package/lib/svg/cleanup/root-svg.cjs +0 -84
  496. package/lib/svg/cleanup/root-svg.d.cts +0 -11
  497. package/lib/svg/cleanup/root-svg.d.mts +0 -11
  498. package/lib/svg/cleanup/root-svg.mjs +0 -82
  499. package/lib/svg/cleanup/svgo-style.cjs +0 -43
  500. package/lib/svg/cleanup/svgo-style.d.cts +0 -11
  501. package/lib/svg/cleanup/svgo-style.d.mts +0 -11
  502. package/lib/svg/cleanup/svgo-style.mjs +0 -41
  503. package/lib/svg/cleanup.cjs +0 -33
  504. package/lib/svg/cleanup.d.cts +0 -16
  505. package/lib/svg/cleanup.d.mts +0 -16
  506. package/lib/svg/cleanup.mjs +0 -31
  507. package/lib/svg/data/attributes.cjs +0 -373
  508. package/lib/svg/data/attributes.d.cts +0 -77
  509. package/lib/svg/data/attributes.d.mts +0 -77
  510. package/lib/svg/data/attributes.mjs +0 -346
  511. package/lib/svg/data/tags.cjs +0 -141
  512. package/lib/svg/data/tags.d.cts +0 -95
  513. package/lib/svg/data/tags.d.mts +0 -95
  514. package/lib/svg/data/tags.mjs +0 -117
  515. package/lib/svg/index.cjs +0 -178
  516. package/lib/svg/index.d.cts +0 -52
  517. package/lib/svg/index.d.mts +0 -52
  518. package/lib/svg/index.mjs +0 -162
  519. package/lib/svg/parse-style.cjs +0 -243
  520. package/lib/svg/parse-style.d.cts +0 -59
  521. package/lib/svg/parse-style.d.mts +0 -59
  522. package/lib/svg/parse-style.mjs +0 -241
  523. package/lib/svg/parse.cjs +0 -46
  524. package/lib/svg/parse.d.cts +0 -31
  525. package/lib/svg/parse.d.mts +0 -31
  526. package/lib/svg/parse.mjs +0 -44
package/lib/index.js ADDED
@@ -0,0 +1,56 @@
1
+ import { SVG } from "./svg/index.js";
2
+ import { parseSVG } from "./svg/parse.js";
3
+ import { parseSVGStyle } from "./svg/parse-style.js";
4
+ import { analyseSVGStructure } from "./svg/analyse.js";
5
+ import { removeBadAttributes } from "./svg/cleanup/attribs.js";
6
+ import { checkBadTags } from "./svg/cleanup/bad-tags.js";
7
+ import { cleanupInlineStyle } from "./svg/cleanup/inline-style.js";
8
+ import { cleanupRootStyle } from "./svg/cleanup/root-style.js";
9
+ import { cleanupSVGRoot } from "./svg/cleanup/root-svg.js";
10
+ import { runSVGO } from "./optimise/svgo.js";
11
+ import { convertStyleToAttrs } from "./svg/cleanup/svgo-style.js";
12
+ import { cleanupSVG } from "./svg/cleanup.js";
13
+ import { IconSet, blankIconSet } from "./icon-set/index.js";
14
+ import { mergeIconSets } from "./icon-set/merge.js";
15
+ import { isEmptyColor, parseColors } from "./colors/parse.js";
16
+ import { detectIconSetPalette } from "./colors/detect.js";
17
+ import { addTagsToIconSet } from "./icon-set/tags.js";
18
+ import { scanDirectory, scanDirectorySync } from "./misc/scan.js";
19
+ import { axiosConfig, fetchCallbacks } from "./download/api/config.js";
20
+ import { setFetch } from "./download/api/fetch.js";
21
+ import { sendAPIQuery } from "./download/api/index.js";
22
+ import { defaultQueueParams, runConcurrentQueries } from "./download/api/queue.js";
23
+ import { importFromFigma } from "./import/figma/index.js";
24
+ import { cleanupIconKeyword } from "./misc/keyword.js";
25
+ import { importDirectory, importDirectorySync } from "./import/directory.js";
26
+ import { prepareDirectoryForExport } from "./export/helpers/prepare.js";
27
+ import { execAsync } from "./misc/exec.js";
28
+ import { getGitRepoBranch } from "./download/git/branch.js";
29
+ import { getGitRepoHash } from "./download/git/hash.js";
30
+ import { resetGitRepoContents } from "./download/git/reset.js";
31
+ import { downloadGitRepo } from "./download/git/index.js";
32
+ import { getGitHubRepoHash } from "./download/github/hash.js";
33
+ import { downloadFile } from "./download/api/download.js";
34
+ import { unzip } from "./download/helpers/unzip.js";
35
+ import { downloadGitHubRepo } from "./download/github/index.js";
36
+ import { getGitLabRepoHash } from "./download/gitlab/hash.js";
37
+ import { downloadGitLabRepo } from "./download/gitlab/index.js";
38
+ import { untar } from "./download/helpers/untar.js";
39
+ import { getNPMVersion, getPackageVersion } from "./download/npm/version.js";
40
+ import { downloadNPMPackage } from "./download/npm/index.js";
41
+ import { downloadPackage } from "./download/index.js";
42
+ import { validateColors } from "./colors/validate.js";
43
+ import { removeFigmaClipPathFromSVG } from "./optimise/figma.js";
44
+ import { deOptimisePaths } from "./optimise/flags.js";
45
+ import { resetSVGOrigin } from "./optimise/origin.js";
46
+ import { convertSVGToMask } from "./optimise/mask.js";
47
+ import { scaleSVG } from "./optimise/scale.js";
48
+ import { cleanupGlobalStyle } from "./optimise/global-style.js";
49
+ import { exportToDirectory } from "./export/directory.js";
50
+ import { writeJSONFile } from "./misc/write-json.js";
51
+ import { exportJSONPackage } from "./export/json-package.js";
52
+ import { exportIconPackage } from "./export/icon-package.js";
53
+ import { compareDirectories } from "./misc/compare-dirs.js";
54
+ import { bumpVersion } from "./misc/bump-version.js";
55
+
56
+ export { IconSet, SVG, addTagsToIconSet, analyseSVGStructure, axiosConfig, blankIconSet, bumpVersion, checkBadTags, cleanupGlobalStyle, cleanupIconKeyword, cleanupInlineStyle, cleanupRootStyle, cleanupSVG, cleanupSVGRoot, compareDirectories, convertSVGToMask, convertStyleToAttrs, deOptimisePaths, defaultQueueParams, detectIconSetPalette, downloadFile, downloadGitHubRepo, downloadGitLabRepo, downloadGitRepo, downloadNPMPackage, downloadPackage, execAsync, exportIconPackage, exportJSONPackage, exportToDirectory, fetchCallbacks, getGitHubRepoHash, getGitLabRepoHash, getGitRepoBranch, getGitRepoHash, getNPMVersion, getPackageVersion, importDirectory, importDirectorySync, importFromFigma, isEmptyColor, mergeIconSets, parseColors, parseSVG, parseSVGStyle, prepareDirectoryForExport, removeBadAttributes, removeFigmaClipPathFromSVG, resetGitRepoContents, resetSVGOrigin, runConcurrentQueries, runSVGO, scaleSVG, scanDirectory, scanDirectorySync, sendAPIQuery, setFetch, untar, unzip, validateColors, writeJSONFile };
@@ -2,5 +2,4 @@
2
2
  * Bump version number
3
3
  */
4
4
  declare function bumpVersion(version: string): string;
5
-
6
- export { bumpVersion };
5
+ export { bumpVersion };
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Bump version number
3
+ */
4
+ function bumpVersion(version) {
5
+ const versionParts = version.split(".");
6
+ const lastPart = versionParts.pop();
7
+ const num = parseInt(lastPart);
8
+ if (isNaN(num) || num.toString() !== lastPart) versionParts.push(lastPart + ".1");
9
+ else versionParts.push((num + 1).toString());
10
+ return versionParts.join(".");
11
+ }
12
+
13
+ export { bumpVersion };
@@ -1,11 +1,10 @@
1
1
  interface CompareDirectoriesOptions {
2
- ignoreNewLine?: boolean;
3
- ignoreVersions?: boolean;
4
- textExtensions?: string[];
2
+ ignoreNewLine?: boolean;
3
+ ignoreVersions?: boolean;
4
+ textExtensions?: string[];
5
5
  }
6
6
  /**
7
7
  * Compare directories. Returns true if files are identical, false if different
8
8
  */
9
9
  declare function compareDirectories(dir1: string, dir2: string, options?: CompareDirectoriesOptions): Promise<boolean>;
10
-
11
- export { type CompareDirectoriesOptions, compareDirectories };
10
+ export { CompareDirectoriesOptions, compareDirectories };
@@ -0,0 +1,65 @@
1
+ import { scanDirectory } from "./scan.js";
2
+ import { normalizeDir } from "../export/helpers/prepare.js";
3
+ import { promises } from "fs";
4
+
5
+ /**
6
+ * Extensions that are treated as text
7
+ */
8
+ const textFileExtensions = [
9
+ "json",
10
+ "ts",
11
+ "js",
12
+ "mjs",
13
+ "cjs",
14
+ "jsx",
15
+ "tsx",
16
+ "vue",
17
+ "svelte",
18
+ "svg",
19
+ "txt",
20
+ "md"
21
+ ];
22
+ /**
23
+ * Compare directories. Returns true if files are identical, false if different
24
+ */
25
+ async function compareDirectories(dir1, dir2, options) {
26
+ dir1 = normalizeDir(dir1);
27
+ dir2 = normalizeDir(dir2);
28
+ const files1 = await scanDirectory(dir1);
29
+ const files2 = await scanDirectory(dir2);
30
+ if (files1.length !== files2.length) return false;
31
+ options = options || {};
32
+ const ignoreNewLine = options.ignoreNewLine !== false;
33
+ const ignoreVersions = options.ignoreVersions !== false;
34
+ const textExtensions = new Set((options.textExtensions || []).concat(textFileExtensions));
35
+ for (let i = 0; i < files1.length; i++) {
36
+ const file = files1[i];
37
+ if (!files2.includes(file)) return false;
38
+ const ext = file.split(".").pop().toLowerCase();
39
+ if (!textExtensions.has(ext)) {
40
+ const content1$1 = await promises.readFile(dir1 + "/" + file);
41
+ const content2$1 = await promises.readFile(dir2 + "/" + file);
42
+ if (Buffer.compare(content1$1, content2$1) !== 0) return false;
43
+ continue;
44
+ }
45
+ let content1 = await promises.readFile(dir1 + "/" + file, "utf8");
46
+ let content2 = await promises.readFile(dir2 + "/" + file, "utf8");
47
+ if (content1 === content2) continue;
48
+ if (ignoreNewLine) {
49
+ content1 = content1.replace(/\s+\n/g, "\n").trimEnd();
50
+ content2 = content2.replace(/\s+\n/g, "\n").trimEnd();
51
+ }
52
+ if (ignoreVersions && file.split("/").pop() === "package.json") {
53
+ const data1 = JSON.parse(content1);
54
+ const data2 = JSON.parse(content2);
55
+ delete data1.version;
56
+ delete data2.version;
57
+ content1 = JSON.stringify(data1);
58
+ content2 = JSON.stringify(data2);
59
+ }
60
+ if (content1 !== content2) return false;
61
+ }
62
+ return true;
63
+ }
64
+
65
+ export { compareDirectories };
@@ -1,12 +1,10 @@
1
- import { ExecOptions } from 'child_process';
2
-
1
+ import { ExecOptions } from "child_process";
3
2
  interface ExecResult {
4
- stdout: string;
5
- stderr: string;
3
+ stdout: string;
4
+ stderr: string;
6
5
  }
7
6
  /**
8
7
  * Exec as Promise
9
8
  */
10
9
  declare function execAsync(cmd: string, options?: ExecOptions): Promise<ExecResult>;
11
-
12
- export { type ExecResult, execAsync };
10
+ export { ExecResult, execAsync };
@@ -0,0 +1,23 @@
1
+ import { resolve } from "pathe";
2
+ import { exec } from "child_process";
3
+
4
+ /**
5
+ * Exec as Promise
6
+ */
7
+ function execAsync(cmd, options) {
8
+ return new Promise((fulfill, reject) => {
9
+ if (typeof options?.cwd === "string") options = {
10
+ ...options,
11
+ cwd: resolve(options.cwd)
12
+ };
13
+ exec(cmd, options, (error, stdout, stderr) => {
14
+ if (error) reject(error);
15
+ else fulfill({
16
+ stdout,
17
+ stderr
18
+ });
19
+ });
20
+ });
21
+ }
22
+
23
+ export { execAsync };
@@ -2,5 +2,4 @@
2
2
  * Clean up keyword
3
3
  */
4
4
  declare function cleanupIconKeyword(keyword: string, convertCamelCase?: boolean): string;
5
-
6
- export { cleanupIconKeyword };
5
+ export { cleanupIconKeyword };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Clean up keyword
3
+ */
4
+ function cleanupIconKeyword(keyword, convertCamelCase = false) {
5
+ if (convertCamelCase) keyword = keyword.replace(/[A-Z]+/g, (chars) => "_" + chars.toLowerCase());
6
+ keyword = keyword.toLowerCase().trim().replace(/[\s_.:/\\]/g, "-").replace(/[^a-z0-9-]/g, "").replace(/[-]+/g, "-");
7
+ if (keyword.slice(0, 1) === "-") keyword = keyword.slice(1);
8
+ if (keyword.slice(-1) === "-") keyword = keyword.slice(0, -1);
9
+ return keyword;
10
+ }
11
+
12
+ export { cleanupIconKeyword };
@@ -1,5 +1,4 @@
1
- import { Stats } from 'fs';
2
-
1
+ import { Stats } from "fs";
3
2
  /**
4
3
  * Callback
5
4
  *
@@ -17,8 +16,8 @@ type ScanDirectoryCallbackFalseResult = boolean | null | undefined;
17
16
  type ScanDirectoryCallbackStringResult = ScanDirectoryCallbackFalseResult | string;
18
17
  type Callback<T> = (ext: string, file: string, subdir: string, path: string, stat: Stats) => T;
19
18
  type AsyncCallback<T> = Callback<T | Promise<T>>;
20
- type ScanDirectoryCallback = AsyncCallback<ScanDirectoryCallbackStringResult | undefined>;
21
- type ScanDirectorySyncCallback = Callback<ScanDirectoryCallbackStringResult | undefined>;
19
+ type ScanDirectoryCallback = AsyncCallback<ScanDirectoryCallbackStringResult>;
20
+ type ScanDirectorySyncCallback = Callback<ScanDirectoryCallbackStringResult>;
22
21
  /**
23
22
  * Find all files in directory
24
23
  */
@@ -29,5 +28,4 @@ declare function scanDirectory<T>(path: string, callback: AsyncCallback<T | Scan
29
28
  */
30
29
  declare function scanDirectorySync(path: string, callback?: Callback<ScanDirectoryCallbackStringResult>, subdirs?: boolean): string[];
31
30
  declare function scanDirectorySync<T>(path: string, callback: Callback<T | ScanDirectoryCallbackFalseResult>, subdirs?: boolean): T[];
32
-
33
- export { type ScanDirectoryCallback, type ScanDirectorySyncCallback, scanDirectory, scanDirectorySync };
31
+ export { ScanDirectoryCallback, ScanDirectorySyncCallback, scanDirectory, scanDirectorySync };
@@ -0,0 +1,87 @@
1
+ import { promises, readdirSync, statSync } from "fs";
2
+
3
+ /**
4
+ * Reusable functions
5
+ */
6
+ function cleanPath(path) {
7
+ if (path.length && path.slice(-1) !== "/") return path + "/";
8
+ return path;
9
+ }
10
+ function isHidden(filename) {
11
+ return filename.slice(0, 1) === ".";
12
+ }
13
+ function split(filename) {
14
+ const parts = filename.split(".");
15
+ return {
16
+ ext: parts.length > 1 ? "." + parts.pop() : "",
17
+ file: parts.join(".")
18
+ };
19
+ }
20
+ function isIgnoredResult(result) {
21
+ return result === void 0 || result === false || result === null;
22
+ }
23
+ async function scanDirectory(path, callback, subdirs = true) {
24
+ const results = [];
25
+ path = cleanPath(path);
26
+ async function scan(subdir) {
27
+ const files = await promises.readdir(path + subdir);
28
+ for (let i = 0; i < files.length; i++) {
29
+ const filename = files[i];
30
+ if (isHidden(filename)) continue;
31
+ let stat;
32
+ try {
33
+ stat = await promises.stat(path + subdir + filename);
34
+ } catch {
35
+ continue;
36
+ }
37
+ if (stat.isDirectory()) {
38
+ if (subdirs) await scan(subdir + filename + "/");
39
+ continue;
40
+ }
41
+ if (!stat.isFile()) continue;
42
+ const { ext, file } = split(filename);
43
+ let callbackResult;
44
+ if (callback) {
45
+ callbackResult = callback(ext, file, subdir, path, stat);
46
+ if (callbackResult instanceof Promise) callbackResult = await callbackResult;
47
+ if (isIgnoredResult(callbackResult)) continue;
48
+ } else callbackResult = true;
49
+ results.push(callbackResult === true ? subdir + filename : callbackResult);
50
+ }
51
+ }
52
+ await scan("");
53
+ return results;
54
+ }
55
+ function scanDirectorySync(path, callback, subdirs = true) {
56
+ const results = [];
57
+ path = cleanPath(path);
58
+ function scan(subdir) {
59
+ const files = readdirSync(path + subdir);
60
+ for (let i = 0; i < files.length; i++) {
61
+ const filename = files[i];
62
+ if (isHidden(filename)) continue;
63
+ let stat;
64
+ try {
65
+ stat = statSync(path + subdir + filename);
66
+ } catch {
67
+ continue;
68
+ }
69
+ if (stat.isDirectory()) {
70
+ if (subdirs) scan(subdir + filename + "/");
71
+ continue;
72
+ }
73
+ if (!stat.isFile()) continue;
74
+ const { ext, file } = split(filename);
75
+ let callbackResult;
76
+ if (callback) {
77
+ callbackResult = callback(ext, file, subdir, path, stat);
78
+ if (isIgnoredResult(callbackResult)) continue;
79
+ } else callbackResult = true;
80
+ results.push(callbackResult === true ? subdir + filename : callbackResult);
81
+ }
82
+ }
83
+ scan("");
84
+ return results;
85
+ }
86
+
87
+ export { scanDirectory, scanDirectorySync };
@@ -2,5 +2,4 @@
2
2
  * Write JSON file
3
3
  */
4
4
  declare function writeJSONFile(filename: string, data: unknown): Promise<void>;
5
-
6
- export { writeJSONFile };
5
+ export { writeJSONFile };
@@ -0,0 +1,10 @@
1
+ import { promises } from "fs";
2
+
3
+ /**
4
+ * Write JSON file
5
+ */
6
+ async function writeJSONFile(filename, data) {
7
+ return promises.writeFile(filename, JSON.stringify(data, null, " ") + "\n");
8
+ }
9
+
10
+ export { writeJSONFile };
@@ -1,8 +1,4 @@
1
- import { SVG } from '../svg/index.js';
2
- import 'cheerio';
3
- import '@iconify/types';
4
- import '@iconify/utils/lib/customisations/defaults';
5
-
1
+ import { SVG } from "../svg/index.js";
6
2
  /**
7
3
  * Removes clip path from SVG, which Figma and Penpot add to icons that might have overflowing elements.
8
4
  * Also removes mess generated by Penpot
@@ -10,5 +6,4 @@ import '@iconify/utils/lib/customisations/defaults';
10
6
  * Function was originally designed for Figma only, but later added support for Penpot
11
7
  */
12
8
  declare function removeFigmaClipPathFromSVG(svg: SVG): boolean;
13
-
14
- export { removeFigmaClipPathFromSVG };
9
+ export { removeFigmaClipPathFromSVG };
@@ -0,0 +1,189 @@
1
+ import { parseSVG } from "../svg/parse.js";
2
+ import { defsTag, maskTags, symbolTag } from "../svg/data/tags.js";
3
+ import { cleanupInlineStyle } from "../svg/cleanup/inline-style.js";
4
+ import { unwrapEmptyGroup } from "./unwrap.js";
5
+ import { colorToString, stringToColor } from "@iconify/utils";
6
+
7
+ /**
8
+ * Checks if number is tiny, used to remove bad Figma transformations
9
+ */
10
+ function isTinyNumber(value, limit) {
11
+ const num = parseInt(value);
12
+ return !isNaN(num) && Math.abs(num) < limit;
13
+ }
14
+ /**
15
+ * Check node
16
+ *
17
+ * Returns CheckClipPathResult on success, false on error
18
+ */
19
+ function checkClipPathNode(clipNode, expectedWidth, expectedHeight) {
20
+ for (const attr in clipNode.attribs) if (attr !== "id") return false;
21
+ const children = clipNode.children.filter((node) => node.type !== "text");
22
+ if (children.length !== 1) return false;
23
+ const childNode = children[0];
24
+ if (childNode.type !== "tag" || childNode.children.length) return false;
25
+ const attribs = { ...childNode.attribs };
26
+ delete attribs["fill"];
27
+ const fill = childNode.attribs["fill"];
28
+ const colorValue = typeof fill === "string" ? stringToColor(fill) : null;
29
+ const colorString = colorValue ? colorToString(colorValue) : null;
30
+ if (fill && colorString !== "#fff") {
31
+ console.warn("Unxepected fill on clip path:", childNode.attribs["fill"]);
32
+ return false;
33
+ }
34
+ switch (childNode.tag) {
35
+ case "rect": {
36
+ const widthValue = attribs["width"];
37
+ const heightValue = attribs["height"];
38
+ if ((typeof widthValue === "string" ? parseInt(widthValue) : widthValue) !== expectedWidth || (typeof heightValue === "string" ? parseInt(heightValue) : heightValue) !== expectedHeight) {
39
+ console.warn("Invalid size of clip path");
40
+ return false;
41
+ }
42
+ delete attribs["width"];
43
+ delete attribs["height"];
44
+ break;
45
+ }
46
+ default:
47
+ console.warn("Unexpected tag in Figma clip path:", childNode.tag);
48
+ return false;
49
+ }
50
+ Object.keys(attribs).forEach((attr) => {
51
+ const value = attribs[attr];
52
+ if (typeof value !== "string") return;
53
+ switch (attr) {
54
+ case "transform": if (value.startsWith("translate(") && value.endsWith(")")) {
55
+ const translateParts = value.slice(10, -1).split(/\s+/);
56
+ const limit = Math.min(expectedWidth, expectedHeight) / 1e3;
57
+ if (translateParts.length === 2 && isTinyNumber(translateParts[0], limit) && isTinyNumber(translateParts[1], limit)) delete attribs[attr];
58
+ }
59
+ }
60
+ });
61
+ return {
62
+ node: clipNode,
63
+ attribs
64
+ };
65
+ }
66
+ const urlStart = "url(#";
67
+ const urlEnd = ")";
68
+ /**
69
+ * Does the job
70
+ *
71
+ * Can mess with SVG because on failure backup will be restored
72
+ */
73
+ function remove(svg) {
74
+ unwrapEmptyGroup(svg);
75
+ let content = svg.toString();
76
+ const backup = content;
77
+ if (content.includes("frame-clip-def")) {
78
+ cleanupInlineStyle(svg);
79
+ parseSVG(svg, (item) => {
80
+ const node = item.node;
81
+ const tagName = node.tag;
82
+ const attribs$1 = node.attribs;
83
+ Object.keys(attribs$1).forEach((attr) => {
84
+ const value = attribs$1[attr];
85
+ if (typeof value !== "string") return;
86
+ switch (attr) {
87
+ case "id":
88
+ if (!maskTags.has(tagName) && !symbolTag.has(tagName)) delete attribs$1[attr];
89
+ break;
90
+ case "class":
91
+ case "xmlns:xlink":
92
+ case "version":
93
+ delete attribs$1[attr];
94
+ break;
95
+ case "transform": {
96
+ const trimmed = value.replace(/\s+/g, "").replace(/\.0+/g, "");
97
+ if (!trimmed || trimmed === "matrix(1,0,0,1,0,0)") delete attribs$1[attr];
98
+ break;
99
+ }
100
+ case "rx":
101
+ case "ry":
102
+ case "x":
103
+ case "y":
104
+ if (value === "0") delete attribs$1[attr];
105
+ break;
106
+ case "fill-opacity":
107
+ case "stroke-opacity":
108
+ case "opacity":
109
+ if (value === "1") delete attribs$1[attr];
110
+ break;
111
+ case "fill":
112
+ case "stroke": {
113
+ const colorValue = stringToColor(value);
114
+ if (colorValue?.type === "rgb") attribs$1[attr] = colorToString(colorValue);
115
+ }
116
+ }
117
+ });
118
+ });
119
+ content = svg.toString();
120
+ }
121
+ const clipPathBlocks = content.match(/<clipPath[^>]*>[\s\S]+?<\/clipPath>/g);
122
+ if (clipPathBlocks?.length === 2 && clipPathBlocks[0] === clipPathBlocks[1]) {
123
+ const split = clipPathBlocks[0];
124
+ const lines = content.split(split);
125
+ content = lines.shift() + split + lines.join("");
126
+ }
127
+ if (content.includes("<defs>")) content = content.replace(/<\/?defs>/g, "");
128
+ if (content !== backup) svg.load(content);
129
+ const rootNode = svg.$svg;
130
+ const children = rootNode.children.slice(0);
131
+ const shapesToClip = [];
132
+ let clipID;
133
+ for (let i = 0; i < children.length; i++) {
134
+ const node = children[i];
135
+ if (node.type === "tag") {
136
+ const tagName = node.tag;
137
+ if (!defsTag.has(tagName) && !maskTags.has(tagName) && !symbolTag.has(tagName)) {
138
+ const clipPath$1 = node.attribs["clip-path"];
139
+ if (typeof clipPath$1 !== "string" || !clipPath$1.startsWith(urlStart) || !clipPath$1.endsWith(urlEnd)) return false;
140
+ const id = clipPath$1.slice(5, -1);
141
+ if (typeof clipID === "string" && clipID !== id) return false;
142
+ clipID = id;
143
+ shapesToClip.push(node);
144
+ }
145
+ }
146
+ }
147
+ if (typeof clipID !== "string") return false;
148
+ const findClipPath = () => {
149
+ for (let i = 0; i < children.length; i++) {
150
+ const node = children[i];
151
+ if (node.type === "tag" && node.tag === "clipPath") {
152
+ if (node.attribs["id"] === clipID) {
153
+ const result = checkClipPathNode(node, svg.viewBox.width, svg.viewBox.height);
154
+ rootNode.children = rootNode.children.filter((n) => n !== node);
155
+ return result;
156
+ }
157
+ return;
158
+ }
159
+ }
160
+ };
161
+ const clipPath = findClipPath();
162
+ if (!clipPath) return false;
163
+ const attribs = clipPath.attribs;
164
+ for (let i = 0; i < shapesToClip.length; i++) {
165
+ const node = shapesToClip[i];
166
+ delete node.attribs["clip-path"];
167
+ for (const attr in attribs) {
168
+ if (node.attribs[attr] !== void 0) return false;
169
+ node.attribs[attr] = attribs[attr];
170
+ }
171
+ }
172
+ return true;
173
+ }
174
+ /**
175
+ * Removes clip path from SVG, which Figma and Penpot add to icons that might have overflowing elements.
176
+ * Also removes mess generated by Penpot
177
+ *
178
+ * Function was originally designed for Figma only, but later added support for Penpot
179
+ */
180
+ function removeFigmaClipPathFromSVG(svg) {
181
+ const backup = svg.toString();
182
+ try {
183
+ if (remove(svg)) return true;
184
+ } catch {}
185
+ svg.load(backup);
186
+ return false;
187
+ }
188
+
189
+ export { removeFigmaClipPathFromSVG };
@@ -1,11 +1,6 @@
1
- import { SVG } from '../svg/index.js';
2
- import 'cheerio';
3
- import '@iconify/types';
4
- import '@iconify/utils/lib/customisations/defaults';
5
-
1
+ import { SVG } from "../svg/index.js";
6
2
  /**
7
3
  * De-optimise paths. Compressed paths are still not supported by some software.
8
4
  */
9
5
  declare function deOptimisePaths(svg: SVG): void;
10
-
11
- export { deOptimisePaths };
6
+ export { deOptimisePaths };