@iconify/tools 4.2.0 → 5.0.0-beta.2

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 (534) 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 +6 -8
  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 +1 -2
  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 +26 -27
  110. package/lib/import/figma/types/api.js +1 -0
  111. package/lib/import/figma/types/nodes.d.ts +12 -21
  112. package/lib/import/figma/types/nodes.js +1 -0
  113. package/lib/import/figma/types/options.d.ts +23 -32
  114. package/lib/import/figma/types/options.js +1 -0
  115. package/lib/import/figma/types/result.d.ts +16 -24
  116. package/lib/import/figma/types/result.js +1 -0
  117. package/lib/index.d.ts +55 -80
  118. package/lib/index.js +56 -0
  119. package/lib/misc/bump-version.d.ts +1 -2
  120. package/lib/misc/bump-version.js +13 -0
  121. package/lib/misc/compare-dirs.d.ts +4 -5
  122. package/lib/misc/compare-dirs.js +65 -0
  123. package/lib/misc/exec.d.ts +4 -6
  124. package/lib/misc/exec.js +23 -0
  125. package/lib/misc/keyword.d.ts +1 -2
  126. package/lib/misc/keyword.js +12 -0
  127. package/lib/misc/scan.d.ts +2 -4
  128. package/lib/misc/scan.js +87 -0
  129. package/lib/misc/write-json.d.ts +1 -2
  130. package/lib/misc/write-json.js +10 -0
  131. package/lib/optimise/figma.d.ts +2 -7
  132. package/lib/optimise/figma.js +189 -0
  133. package/lib/optimise/flags.d.ts +2 -7
  134. package/lib/optimise/flags.js +231 -0
  135. package/lib/optimise/global-style.d.ts +2 -7
  136. package/lib/optimise/global-style.js +114 -0
  137. package/lib/optimise/mask.d.ts +9 -14
  138. package/lib/optimise/mask.js +83 -0
  139. package/lib/optimise/origin.d.ts +2 -7
  140. package/lib/optimise/origin.js +22 -0
  141. package/lib/optimise/scale.d.ts +2 -7
  142. package/lib/optimise/scale.js +24 -0
  143. package/lib/optimise/svgo.d.ts +10 -15
  144. package/lib/optimise/svgo.js +90 -0
  145. package/lib/optimise/unwrap.d.ts +2 -7
  146. package/lib/optimise/unwrap.js +25 -0
  147. package/lib/svg/analyse/error.d.ts +2 -7
  148. package/lib/svg/analyse/error.js +12 -0
  149. package/lib/svg/analyse/types.d.ts +31 -35
  150. package/lib/svg/analyse/types.js +1 -0
  151. package/lib/svg/analyse.d.ts +3 -10
  152. package/lib/svg/analyse.js +256 -0
  153. package/lib/svg/cleanup/attribs.d.ts +2 -7
  154. package/lib/svg/cleanup/attribs.js +37 -0
  155. package/lib/svg/cleanup/bad-tags.d.ts +3 -8
  156. package/lib/svg/cleanup/bad-tags.js +57 -0
  157. package/lib/svg/cleanup/inline-style.d.ts +2 -7
  158. package/lib/svg/cleanup/inline-style.js +80 -0
  159. package/lib/svg/cleanup/root-style.d.ts +4 -9
  160. package/lib/svg/cleanup/root-style.js +27 -0
  161. package/lib/svg/cleanup/root-svg.d.ts +2 -7
  162. package/lib/svg/cleanup/root-svg.js +73 -0
  163. package/lib/svg/cleanup/svgo-style.d.ts +2 -7
  164. package/lib/svg/cleanup/svgo-style.js +24 -0
  165. package/lib/svg/cleanup.d.ts +3 -8
  166. package/lib/svg/cleanup.js +20 -0
  167. package/lib/svg/data/attributes.d.ts +1 -2
  168. package/lib/svg/data/attributes.js +451 -0
  169. package/lib/svg/data/tags.d.ts +1 -2
  170. package/lib/svg/data/tags.js +182 -0
  171. package/lib/svg/index.d.ts +38 -47
  172. package/lib/svg/index.js +117 -0
  173. package/lib/svg/parse-style.d.ts +21 -28
  174. package/lib/svg/parse-style.js +199 -0
  175. package/lib/svg/parse.d.ts +8 -16
  176. package/lib/svg/parse.js +32 -0
  177. package/package.json +116 -222
  178. package/lib/colors/attribs.cjs +0 -33
  179. package/lib/colors/attribs.d.cts +0 -27
  180. package/lib/colors/attribs.d.mts +0 -27
  181. package/lib/colors/attribs.mjs +0 -26
  182. package/lib/colors/detect.cjs +0 -66
  183. package/lib/colors/detect.d.cts +0 -16
  184. package/lib/colors/detect.d.mts +0 -16
  185. package/lib/colors/detect.mjs +0 -64
  186. package/lib/colors/parse.cjs +0 -300
  187. package/lib/colors/parse.d.cts +0 -61
  188. package/lib/colors/parse.d.mts +0 -61
  189. package/lib/colors/parse.mjs +0 -297
  190. package/lib/colors/validate.cjs +0 -56
  191. package/lib/colors/validate.d.cts +0 -21
  192. package/lib/colors/validate.d.mts +0 -21
  193. package/lib/colors/validate.mjs +0 -54
  194. package/lib/css/parse.cjs +0 -24
  195. package/lib/css/parse.d.cts +0 -6
  196. package/lib/css/parse.d.mts +0 -6
  197. package/lib/css/parse.mjs +0 -22
  198. package/lib/css/parser/error.cjs +0 -23
  199. package/lib/css/parser/error.d.cts +0 -13
  200. package/lib/css/parser/error.d.mts +0 -13
  201. package/lib/css/parser/error.mjs +0 -21
  202. package/lib/css/parser/export.cjs +0 -37
  203. package/lib/css/parser/export.d.cts +0 -8
  204. package/lib/css/parser/export.d.mts +0 -8
  205. package/lib/css/parser/export.mjs +0 -35
  206. package/lib/css/parser/strings.cjs +0 -83
  207. package/lib/css/parser/strings.d.cts +0 -16
  208. package/lib/css/parser/strings.d.mts +0 -16
  209. package/lib/css/parser/strings.mjs +0 -80
  210. package/lib/css/parser/text.cjs +0 -114
  211. package/lib/css/parser/text.d.cts +0 -20
  212. package/lib/css/parser/text.d.mts +0 -20
  213. package/lib/css/parser/text.mjs +0 -109
  214. package/lib/css/parser/tokens.cjs +0 -206
  215. package/lib/css/parser/tokens.d.cts +0 -9
  216. package/lib/css/parser/tokens.d.mts +0 -9
  217. package/lib/css/parser/tokens.mjs +0 -204
  218. package/lib/css/parser/tree.cjs +0 -40
  219. package/lib/css/parser/tree.d.cts +0 -8
  220. package/lib/css/parser/tree.d.mts +0 -8
  221. package/lib/css/parser/tree.mjs +0 -38
  222. package/lib/css/parser/types.cjs +0 -2
  223. package/lib/css/parser/types.d.cts +0 -52
  224. package/lib/css/parser/types.d.mts +0 -52
  225. package/lib/css/parser/types.mjs +0 -1
  226. package/lib/download/api/cache.cjs +0 -91
  227. package/lib/download/api/cache.d.cts +0 -20
  228. package/lib/download/api/cache.d.mts +0 -20
  229. package/lib/download/api/cache.mjs +0 -86
  230. package/lib/download/api/config.cjs +0 -11
  231. package/lib/download/api/config.d.cts +0 -18
  232. package/lib/download/api/config.d.mts +0 -18
  233. package/lib/download/api/config.mjs +0 -8
  234. package/lib/download/api/download.cjs +0 -26
  235. package/lib/download/api/download.d.cts +0 -8
  236. package/lib/download/api/download.d.mts +0 -8
  237. package/lib/download/api/download.mjs +0 -24
  238. package/lib/download/api/fetch.cjs +0 -12
  239. package/lib/download/api/fetch.d.cts +0 -10
  240. package/lib/download/api/fetch.d.mts +0 -10
  241. package/lib/download/api/fetch.mjs +0 -9
  242. package/lib/download/api/index.cjs +0 -57
  243. package/lib/download/api/index.d.cts +0 -8
  244. package/lib/download/api/index.d.mts +0 -8
  245. package/lib/download/api/index.mjs +0 -55
  246. package/lib/download/api/queue.cjs +0 -104
  247. package/lib/download/api/queue.d.cts +0 -32
  248. package/lib/download/api/queue.d.mts +0 -32
  249. package/lib/download/api/queue.mjs +0 -101
  250. package/lib/download/api/types.cjs +0 -2
  251. package/lib/download/api/types.d.cts +0 -17
  252. package/lib/download/api/types.d.mts +0 -17
  253. package/lib/download/api/types.mjs +0 -1
  254. package/lib/download/git/branch.cjs +0 -19
  255. package/lib/download/git/branch.d.cts +0 -8
  256. package/lib/download/git/branch.d.mts +0 -8
  257. package/lib/download/git/branch.mjs +0 -17
  258. package/lib/download/git/hash.cjs +0 -14
  259. package/lib/download/git/hash.d.cts +0 -8
  260. package/lib/download/git/hash.d.mts +0 -8
  261. package/lib/download/git/hash.mjs +0 -12
  262. package/lib/download/git/index.cjs +0 -76
  263. package/lib/download/git/index.d.cts +0 -29
  264. package/lib/download/git/index.d.mts +0 -29
  265. package/lib/download/git/index.mjs +0 -74
  266. package/lib/download/git/reset.cjs +0 -36
  267. package/lib/download/git/reset.d.cts +0 -6
  268. package/lib/download/git/reset.d.mts +0 -6
  269. package/lib/download/git/reset.mjs +0 -34
  270. package/lib/download/github/hash.cjs +0 -31
  271. package/lib/download/github/hash.d.cts +0 -8
  272. package/lib/download/github/hash.d.mts +0 -8
  273. package/lib/download/github/hash.mjs +0 -29
  274. package/lib/download/github/index.cjs +0 -105
  275. package/lib/download/github/index.d.cts +0 -31
  276. package/lib/download/github/index.d.mts +0 -31
  277. package/lib/download/github/index.mjs +0 -103
  278. package/lib/download/github/types.cjs +0 -2
  279. package/lib/download/github/types.d.cts +0 -11
  280. package/lib/download/github/types.d.mts +0 -11
  281. package/lib/download/github/types.mjs +0 -1
  282. package/lib/download/gitlab/hash.cjs +0 -33
  283. package/lib/download/gitlab/hash.d.cts +0 -8
  284. package/lib/download/gitlab/hash.d.mts +0 -8
  285. package/lib/download/gitlab/hash.mjs +0 -31
  286. package/lib/download/gitlab/index.cjs +0 -105
  287. package/lib/download/gitlab/index.d.cts +0 -31
  288. package/lib/download/gitlab/index.d.mts +0 -31
  289. package/lib/download/gitlab/index.mjs +0 -103
  290. package/lib/download/gitlab/types.cjs +0 -5
  291. package/lib/download/gitlab/types.d.cts +0 -15
  292. package/lib/download/gitlab/types.d.mts +0 -15
  293. package/lib/download/gitlab/types.mjs +0 -3
  294. package/lib/download/helpers/untar.cjs +0 -12
  295. package/lib/download/helpers/untar.d.cts +0 -6
  296. package/lib/download/helpers/untar.d.mts +0 -6
  297. package/lib/download/helpers/untar.mjs +0 -10
  298. package/lib/download/helpers/unzip.cjs +0 -17
  299. package/lib/download/helpers/unzip.d.cts +0 -6
  300. package/lib/download/helpers/unzip.d.mts +0 -6
  301. package/lib/download/helpers/unzip.mjs +0 -11
  302. package/lib/download/index.cjs +0 -64
  303. package/lib/download/index.d.cts +0 -48
  304. package/lib/download/index.d.mts +0 -48
  305. package/lib/download/index.mjs +0 -62
  306. package/lib/download/npm/index.cjs +0 -85
  307. package/lib/download/npm/index.d.cts +0 -30
  308. package/lib/download/npm/index.d.mts +0 -30
  309. package/lib/download/npm/index.mjs +0 -83
  310. package/lib/download/npm/types.cjs +0 -2
  311. package/lib/download/npm/types.d.cts +0 -9
  312. package/lib/download/npm/types.d.mts +0 -9
  313. package/lib/download/npm/types.mjs +0 -1
  314. package/lib/download/npm/version.cjs +0 -29
  315. package/lib/download/npm/version.d.cts +0 -16
  316. package/lib/download/npm/version.d.mts +0 -16
  317. package/lib/download/npm/version.mjs +0 -26
  318. package/lib/download/types/modified.cjs +0 -2
  319. package/lib/download/types/modified.d.cts +0 -6
  320. package/lib/download/types/modified.d.mts +0 -6
  321. package/lib/download/types/modified.mjs +0 -1
  322. package/lib/download/types/sources.cjs +0 -2
  323. package/lib/download/types/sources.d.cts +0 -12
  324. package/lib/download/types/sources.d.mts +0 -12
  325. package/lib/download/types/sources.mjs +0 -1
  326. package/lib/export/directory.cjs +0 -43
  327. package/lib/export/directory.d.cts +0 -26
  328. package/lib/export/directory.d.mts +0 -26
  329. package/lib/export/directory.mjs +0 -41
  330. package/lib/export/helpers/custom-files.cjs +0 -26
  331. package/lib/export/helpers/custom-files.d.cts +0 -12
  332. package/lib/export/helpers/custom-files.d.mts +0 -12
  333. package/lib/export/helpers/custom-files.mjs +0 -24
  334. package/lib/export/helpers/prepare.cjs +0 -34
  335. package/lib/export/helpers/prepare.d.cts +0 -19
  336. package/lib/export/helpers/prepare.d.mts +0 -19
  337. package/lib/export/helpers/prepare.mjs +0 -31
  338. package/lib/export/helpers/types-version.cjs +0 -12
  339. package/lib/export/helpers/types-version.d.cts +0 -6
  340. package/lib/export/helpers/types-version.d.mts +0 -6
  341. package/lib/export/helpers/types-version.mjs +0 -10
  342. package/lib/export/icon-package.cjs +0 -56
  343. package/lib/export/icon-package.d.cts +0 -26
  344. package/lib/export/icon-package.d.mts +0 -26
  345. package/lib/export/icon-package.mjs +0 -54
  346. package/lib/export/json-package.cjs +0 -144
  347. package/lib/export/json-package.d.cts +0 -25
  348. package/lib/export/json-package.d.mts +0 -25
  349. package/lib/export/json-package.mjs +0 -142
  350. package/lib/icon-set/index.cjs +0 -720
  351. package/lib/icon-set/index.d.cts +0 -162
  352. package/lib/icon-set/index.d.mts +0 -162
  353. package/lib/icon-set/index.mjs +0 -716
  354. package/lib/icon-set/match.cjs +0 -56
  355. package/lib/icon-set/match.d.cts +0 -15
  356. package/lib/icon-set/match.d.mts +0 -15
  357. package/lib/icon-set/match.mjs +0 -54
  358. package/lib/icon-set/merge.cjs +0 -87
  359. package/lib/icon-set/merge.d.cts +0 -14
  360. package/lib/icon-set/merge.d.mts +0 -14
  361. package/lib/icon-set/merge.mjs +0 -85
  362. package/lib/icon-set/modified.cjs +0 -25
  363. package/lib/icon-set/modified.d.cts +0 -16
  364. package/lib/icon-set/modified.d.mts +0 -16
  365. package/lib/icon-set/modified.mjs +0 -23
  366. package/lib/icon-set/props.cjs +0 -16
  367. package/lib/icon-set/props.d.cts +0 -13
  368. package/lib/icon-set/props.d.mts +0 -13
  369. package/lib/icon-set/props.mjs +0 -13
  370. package/lib/icon-set/tags.cjs +0 -95
  371. package/lib/icon-set/tags.d.cts +0 -25
  372. package/lib/icon-set/tags.d.mts +0 -25
  373. package/lib/icon-set/tags.mjs +0 -91
  374. package/lib/icon-set/types.cjs +0 -2
  375. package/lib/icon-set/types.d.cts +0 -75
  376. package/lib/icon-set/types.d.mts +0 -75
  377. package/lib/icon-set/types.mjs +0 -1
  378. package/lib/import/directory.cjs +0 -169
  379. package/lib/import/directory.d.cts +0 -52
  380. package/lib/import/directory.d.mts +0 -52
  381. package/lib/import/directory.mjs +0 -166
  382. package/lib/import/figma/index.cjs +0 -115
  383. package/lib/import/figma/index.d.cts +0 -20
  384. package/lib/import/figma/index.d.mts +0 -20
  385. package/lib/import/figma/index.mjs +0 -113
  386. package/lib/import/figma/nodes.cjs +0 -90
  387. package/lib/import/figma/nodes.d.cts +0 -18
  388. package/lib/import/figma/nodes.d.mts +0 -18
  389. package/lib/import/figma/nodes.mjs +0 -88
  390. package/lib/import/figma/query.cjs +0 -260
  391. package/lib/import/figma/query.d.cts +0 -42
  392. package/lib/import/figma/query.d.mts +0 -42
  393. package/lib/import/figma/query.mjs +0 -256
  394. package/lib/import/figma/types/api.cjs +0 -2
  395. package/lib/import/figma/types/api.d.cts +0 -53
  396. package/lib/import/figma/types/api.d.mts +0 -53
  397. package/lib/import/figma/types/api.mjs +0 -1
  398. package/lib/import/figma/types/nodes.cjs +0 -2
  399. package/lib/import/figma/types/nodes.d.cts +0 -44
  400. package/lib/import/figma/types/nodes.d.mts +0 -44
  401. package/lib/import/figma/types/nodes.mjs +0 -1
  402. package/lib/import/figma/types/options.cjs +0 -2
  403. package/lib/import/figma/types/options.d.cts +0 -59
  404. package/lib/import/figma/types/options.d.mts +0 -59
  405. package/lib/import/figma/types/options.mjs +0 -1
  406. package/lib/import/figma/types/result.cjs +0 -2
  407. package/lib/import/figma/types/result.d.cts +0 -44
  408. package/lib/import/figma/types/result.d.mts +0 -44
  409. package/lib/import/figma/types/result.mjs +0 -1
  410. package/lib/index.cjs +0 -157
  411. package/lib/index.d.cts +0 -80
  412. package/lib/index.d.mts +0 -80
  413. package/lib/index.mjs +0 -91
  414. package/lib/misc/bump-version.cjs +0 -15
  415. package/lib/misc/bump-version.d.cts +0 -6
  416. package/lib/misc/bump-version.d.mts +0 -6
  417. package/lib/misc/bump-version.mjs +0 -13
  418. package/lib/misc/cheerio.cjs +0 -2
  419. package/lib/misc/cheerio.d.cts +0 -10
  420. package/lib/misc/cheerio.d.mts +0 -10
  421. package/lib/misc/cheerio.d.ts +0 -10
  422. package/lib/misc/cheerio.mjs +0 -1
  423. package/lib/misc/compare-dirs.cjs +0 -75
  424. package/lib/misc/compare-dirs.d.cts +0 -11
  425. package/lib/misc/compare-dirs.d.mts +0 -11
  426. package/lib/misc/compare-dirs.mjs +0 -73
  427. package/lib/misc/exec.cjs +0 -27
  428. package/lib/misc/exec.d.cts +0 -12
  429. package/lib/misc/exec.d.mts +0 -12
  430. package/lib/misc/exec.mjs +0 -25
  431. package/lib/misc/keyword.cjs +0 -20
  432. package/lib/misc/keyword.d.cts +0 -6
  433. package/lib/misc/keyword.d.mts +0 -6
  434. package/lib/misc/keyword.mjs +0 -18
  435. package/lib/misc/scan.cjs +0 -114
  436. package/lib/misc/scan.d.cts +0 -33
  437. package/lib/misc/scan.d.mts +0 -33
  438. package/lib/misc/scan.mjs +0 -111
  439. package/lib/misc/write-json.cjs +0 -9
  440. package/lib/misc/write-json.d.cts +0 -6
  441. package/lib/misc/write-json.d.mts +0 -6
  442. package/lib/misc/write-json.mjs +0 -7
  443. package/lib/optimise/figma.cjs +0 -232
  444. package/lib/optimise/figma.d.cts +0 -14
  445. package/lib/optimise/figma.d.mts +0 -14
  446. package/lib/optimise/figma.mjs +0 -230
  447. package/lib/optimise/flags.cjs +0 -256
  448. package/lib/optimise/flags.d.cts +0 -11
  449. package/lib/optimise/flags.d.mts +0 -11
  450. package/lib/optimise/flags.mjs +0 -254
  451. package/lib/optimise/global-style.cjs +0 -158
  452. package/lib/optimise/global-style.d.cts +0 -11
  453. package/lib/optimise/global-style.d.mts +0 -11
  454. package/lib/optimise/global-style.mjs +0 -156
  455. package/lib/optimise/mask.cjs +0 -110
  456. package/lib/optimise/mask.d.cts +0 -24
  457. package/lib/optimise/mask.d.mts +0 -24
  458. package/lib/optimise/mask.mjs +0 -108
  459. package/lib/optimise/origin.cjs +0 -23
  460. package/lib/optimise/origin.d.cts +0 -11
  461. package/lib/optimise/origin.d.mts +0 -11
  462. package/lib/optimise/origin.mjs +0 -21
  463. package/lib/optimise/scale.cjs +0 -27
  464. package/lib/optimise/scale.d.cts +0 -11
  465. package/lib/optimise/scale.d.mts +0 -11
  466. package/lib/optimise/scale.mjs +0 -25
  467. package/lib/optimise/svgo.cjs +0 -107
  468. package/lib/optimise/svgo.d.cts +0 -37
  469. package/lib/optimise/svgo.d.mts +0 -37
  470. package/lib/optimise/svgo.mjs +0 -104
  471. package/lib/optimise/unwrap.cjs +0 -31
  472. package/lib/optimise/unwrap.d.cts +0 -11
  473. package/lib/optimise/unwrap.d.mts +0 -11
  474. package/lib/optimise/unwrap.mjs +0 -29
  475. package/lib/svg/analyse/error.cjs +0 -16
  476. package/lib/svg/analyse/error.d.cts +0 -11
  477. package/lib/svg/analyse/error.d.mts +0 -11
  478. package/lib/svg/analyse/error.mjs +0 -14
  479. package/lib/svg/analyse/types.cjs +0 -2
  480. package/lib/svg/analyse/types.d.cts +0 -93
  481. package/lib/svg/analyse/types.d.mts +0 -93
  482. package/lib/svg/analyse/types.mjs +0 -1
  483. package/lib/svg/analyse.cjs +0 -303
  484. package/lib/svg/analyse.d.cts +0 -16
  485. package/lib/svg/analyse.d.mts +0 -16
  486. package/lib/svg/analyse.mjs +0 -301
  487. package/lib/svg/cleanup/attribs.cjs +0 -39
  488. package/lib/svg/cleanup/attribs.d.cts +0 -11
  489. package/lib/svg/cleanup/attribs.d.mts +0 -11
  490. package/lib/svg/cleanup/attribs.mjs +0 -37
  491. package/lib/svg/cleanup/bad-tags.cjs +0 -69
  492. package/lib/svg/cleanup/bad-tags.d.cts +0 -17
  493. package/lib/svg/cleanup/bad-tags.d.mts +0 -17
  494. package/lib/svg/cleanup/bad-tags.mjs +0 -67
  495. package/lib/svg/cleanup/inline-style.cjs +0 -97
  496. package/lib/svg/cleanup/inline-style.d.cts +0 -11
  497. package/lib/svg/cleanup/inline-style.d.mts +0 -11
  498. package/lib/svg/cleanup/inline-style.mjs +0 -95
  499. package/lib/svg/cleanup/root-style.cjs +0 -34
  500. package/lib/svg/cleanup/root-style.d.cts +0 -17
  501. package/lib/svg/cleanup/root-style.d.mts +0 -17
  502. package/lib/svg/cleanup/root-style.mjs +0 -32
  503. package/lib/svg/cleanup/root-svg.cjs +0 -84
  504. package/lib/svg/cleanup/root-svg.d.cts +0 -11
  505. package/lib/svg/cleanup/root-svg.d.mts +0 -11
  506. package/lib/svg/cleanup/root-svg.mjs +0 -82
  507. package/lib/svg/cleanup/svgo-style.cjs +0 -43
  508. package/lib/svg/cleanup/svgo-style.d.cts +0 -11
  509. package/lib/svg/cleanup/svgo-style.d.mts +0 -11
  510. package/lib/svg/cleanup/svgo-style.mjs +0 -41
  511. package/lib/svg/cleanup.cjs +0 -33
  512. package/lib/svg/cleanup.d.cts +0 -16
  513. package/lib/svg/cleanup.d.mts +0 -16
  514. package/lib/svg/cleanup.mjs +0 -31
  515. package/lib/svg/data/attributes.cjs +0 -373
  516. package/lib/svg/data/attributes.d.cts +0 -77
  517. package/lib/svg/data/attributes.d.mts +0 -77
  518. package/lib/svg/data/attributes.mjs +0 -346
  519. package/lib/svg/data/tags.cjs +0 -141
  520. package/lib/svg/data/tags.d.cts +0 -95
  521. package/lib/svg/data/tags.d.mts +0 -95
  522. package/lib/svg/data/tags.mjs +0 -117
  523. package/lib/svg/index.cjs +0 -178
  524. package/lib/svg/index.d.cts +0 -52
  525. package/lib/svg/index.d.mts +0 -52
  526. package/lib/svg/index.mjs +0 -162
  527. package/lib/svg/parse-style.cjs +0 -243
  528. package/lib/svg/parse-style.d.cts +0 -59
  529. package/lib/svg/parse-style.d.mts +0 -59
  530. package/lib/svg/parse-style.mjs +0 -241
  531. package/lib/svg/parse.cjs +0 -46
  532. package/lib/svg/parse.d.cts +0 -31
  533. package/lib/svg/parse.d.mts +0 -31
  534. package/lib/svg/parse.mjs +0 -44
@@ -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 };
@@ -0,0 +1,231 @@
1
+ import { parseSVG } from "../svg/parse.js";
2
+
3
+ /**
4
+ * Command constants
5
+ */
6
+ const CLOSE_PATH = 1;
7
+ const MOVE_TO = 2;
8
+ const HORIZ_LINE_TO = 4;
9
+ const VERT_LINE_TO = 8;
10
+ const LINE_TO = 16;
11
+ const CURVE_TO = 32;
12
+ const SMOOTH_CURVE_TO = 64;
13
+ const QUAD_TO = 128;
14
+ const SMOOTH_QUAD_TO = 256;
15
+ const ARC = 512;
16
+ /**
17
+ * Number of arguments for each command
18
+ */
19
+ const argCount = {
20
+ [MOVE_TO]: 2,
21
+ [LINE_TO]: 2,
22
+ [HORIZ_LINE_TO]: 1,
23
+ [VERT_LINE_TO]: 1,
24
+ [CLOSE_PATH]: 0,
25
+ [QUAD_TO]: 4,
26
+ [SMOOTH_QUAD_TO]: 2,
27
+ [CURVE_TO]: 6,
28
+ [SMOOTH_CURVE_TO]: 4,
29
+ [ARC]: 7
30
+ };
31
+ /**
32
+ * Check if character is a digit
33
+ */
34
+ const isDigit = (num) => num >= 48 && num <= 57;
35
+ /**
36
+ * Check if character is white space
37
+ */
38
+ const isWhiteSpace = (num) => num === 32 || num === 9 || num === 13 || num === 10;
39
+ /**
40
+ * Clean up path
41
+ *
42
+ * @param {string} path
43
+ * @return {string}
44
+ */
45
+ function cleanPath(path) {
46
+ const commands = [];
47
+ const length = path.length;
48
+ let currentNumber = "";
49
+ let currentNumberHasExp = false;
50
+ let currentNumberHasExpDigits = false;
51
+ let currentNumberHasDecimal = false;
52
+ let canParseCommandOrComma = true;
53
+ let currentCommand = null;
54
+ let currentCommandType = null;
55
+ let currentArgs = [];
56
+ let i = 0;
57
+ const finishCommand = () => {
58
+ if (currentCommand !== null) {
59
+ commands.push({
60
+ command: currentCommand,
61
+ params: currentArgs.slice(0)
62
+ });
63
+ currentArgs = [];
64
+ canParseCommandOrComma = true;
65
+ switch (currentCommand) {
66
+ case "M":
67
+ currentCommand = "L";
68
+ break;
69
+ case "m":
70
+ currentCommand = "l";
71
+ break;
72
+ }
73
+ }
74
+ };
75
+ const parseNumber = () => {
76
+ if (currentNumber !== "" && currentCommandType) {
77
+ let value = Number(currentNumber);
78
+ if (isNaN(value)) throw new Error(`Invalid number "${currentNumber}" at ${i}`);
79
+ if (currentCommandType === ARC) {
80
+ if (currentArgs.length < 2 && value <= 0) throw new Error(`Expected positive number, got "${value}" at ${i}`);
81
+ while (true) {
82
+ if (currentArgs.length < 3 || currentArgs.length > 4) break;
83
+ if (currentNumber === "0" || currentNumber === "1") break;
84
+ const slice = currentNumber.slice(0, 1);
85
+ const newNumber = currentNumber.slice(1);
86
+ const newValue = Number(newNumber);
87
+ if (slice === "0" || slice === "1") {
88
+ if (isNaN(newValue)) throw new Error(`Invalid number "${currentNumber}" at ${i}`);
89
+ currentArgs.push(slice);
90
+ currentNumber = newNumber;
91
+ value = newValue;
92
+ continue;
93
+ }
94
+ throw new Error(`Expected a flag, got "${currentNumber}" at ${i}`);
95
+ }
96
+ }
97
+ currentArgs.push(currentNumber);
98
+ if (currentArgs.length === argCount[currentCommandType]) finishCommand();
99
+ currentNumber = "";
100
+ currentNumberHasExpDigits = false;
101
+ currentNumberHasExp = false;
102
+ currentNumberHasDecimal = false;
103
+ canParseCommandOrComma = true;
104
+ }
105
+ };
106
+ for (i = 0; i < length; i++) {
107
+ const char = path[i];
108
+ const num = char.charCodeAt(0);
109
+ if (isDigit(num)) {
110
+ currentNumber += char;
111
+ currentNumberHasExpDigits = currentNumberHasExp;
112
+ continue;
113
+ }
114
+ if (char === "e" || char === "E") {
115
+ currentNumber += char;
116
+ currentNumberHasExp = true;
117
+ continue;
118
+ }
119
+ if ((char === "-" || char === "+") && currentNumberHasExp && !currentNumberHasExpDigits) {
120
+ currentNumber += char;
121
+ continue;
122
+ }
123
+ if (char === "." && !currentNumberHasExp && !currentNumberHasDecimal) {
124
+ currentNumber += char;
125
+ currentNumberHasDecimal = true;
126
+ continue;
127
+ }
128
+ parseNumber();
129
+ if (isWhiteSpace(num)) continue;
130
+ if (canParseCommandOrComma && char === ",") {
131
+ canParseCommandOrComma = false;
132
+ continue;
133
+ }
134
+ if (char === "+" || char === "-" || char === ".") {
135
+ currentNumber = char;
136
+ currentNumberHasDecimal = char === ".";
137
+ continue;
138
+ }
139
+ if (currentArgs.length > 0) throw new Error(`Unexpected command at ${i}`);
140
+ if (!canParseCommandOrComma) throw new Error(`Command cannot follow comma at ${i}`);
141
+ canParseCommandOrComma = false;
142
+ currentCommand = char;
143
+ switch (char) {
144
+ case "z":
145
+ case "Z":
146
+ commands.push({
147
+ command: char,
148
+ params: []
149
+ });
150
+ canParseCommandOrComma = true;
151
+ currentCommandType = null;
152
+ currentCommand = null;
153
+ break;
154
+ case "h":
155
+ case "H":
156
+ currentCommandType = HORIZ_LINE_TO;
157
+ break;
158
+ case "v":
159
+ case "V":
160
+ currentCommandType = VERT_LINE_TO;
161
+ break;
162
+ case "m":
163
+ case "M":
164
+ currentCommandType = MOVE_TO;
165
+ break;
166
+ case "l":
167
+ case "L":
168
+ currentCommandType = LINE_TO;
169
+ break;
170
+ case "c":
171
+ case "C":
172
+ currentCommandType = CURVE_TO;
173
+ break;
174
+ case "s":
175
+ case "S":
176
+ currentCommandType = SMOOTH_CURVE_TO;
177
+ break;
178
+ case "q":
179
+ case "Q":
180
+ currentCommandType = QUAD_TO;
181
+ break;
182
+ case "t":
183
+ case "T":
184
+ currentCommandType = SMOOTH_QUAD_TO;
185
+ break;
186
+ case "a":
187
+ case "A":
188
+ currentCommandType = ARC;
189
+ break;
190
+ default: throw new Error(`Unexpected character "${char}" at ${i}`);
191
+ }
192
+ }
193
+ parseNumber();
194
+ if (currentArgs.length) {
195
+ if (!currentCommandType) throw new Error("Empty path");
196
+ if (currentArgs.length !== argCount[currentCommandType]) throw new Error(`Unexpected end of path at ${i}`);
197
+ finishCommand();
198
+ }
199
+ let output = "";
200
+ commands.forEach((item) => {
201
+ output += item.command;
202
+ item.params.forEach((value, index) => {
203
+ if (index > 0) switch (value[0]) {
204
+ case "-":
205
+ case "+": break;
206
+ case ".":
207
+ if (index < 1) break;
208
+ if (item.params[index - 1].includes(".")) break;
209
+ default: output += " ";
210
+ }
211
+ output += value;
212
+ });
213
+ });
214
+ return output;
215
+ }
216
+ /**
217
+ * De-optimise paths. Compressed paths are still not supported by some software.
218
+ */
219
+ function deOptimisePaths(svg) {
220
+ parseSVG(svg, (item) => {
221
+ const node = item.node;
222
+ if (node.tag !== "path") return;
223
+ const d = node.attribs.d;
224
+ if (typeof d === "string") try {
225
+ const optimised = cleanPath(d);
226
+ if (optimised !== d) node.attribs.d = optimised;
227
+ } catch {}
228
+ });
229
+ }
230
+
231
+ export { deOptimisePaths };
@@ -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
  * Expand global style
8
4
  */
9
5
  declare function cleanupGlobalStyle(svg: SVG): void;
10
-
11
- export { cleanupGlobalStyle };
6
+ export { cleanupGlobalStyle };
@@ -0,0 +1,114 @@
1
+ import { parseSVG } from "../svg/parse.js";
2
+ import { parseSVGStyle } from "../svg/parse-style.js";
3
+ import { allValidTags, animateTags } from "../svg/data/tags.js";
4
+ import { splitClassName } from "@cyberalien/svg-utils";
5
+
6
+ const tempDataAttrbiute = "data-gstyle-temp";
7
+ /**
8
+ * Expand global style
9
+ */
10
+ function cleanupGlobalStyle(svg) {
11
+ const backup = svg.toString();
12
+ let containsTempAttr = false;
13
+ const animatedClasses = /* @__PURE__ */ new Set();
14
+ parseSVG(svg, (item) => {
15
+ const node = item.node;
16
+ const attribs = node.attribs;
17
+ const tagName = node.tag;
18
+ if (!animateTags.has(tagName)) return;
19
+ if (attribs["attributeName"] !== "class") return;
20
+ [
21
+ "from",
22
+ "to",
23
+ "values"
24
+ ].forEach((attr) => {
25
+ const value = attribs[attr];
26
+ if (typeof value !== "string") return;
27
+ value.split(";").forEach((item$1) => {
28
+ splitClassName(item$1).forEach((className) => {
29
+ animatedClasses.add(className);
30
+ });
31
+ });
32
+ });
33
+ });
34
+ const removeClasses = /* @__PURE__ */ new Set();
35
+ try {
36
+ parseSVGStyle(svg, (styleItem) => {
37
+ const returnValue = styleItem.value;
38
+ if (styleItem.type !== "global") return returnValue;
39
+ const selectorTokens = styleItem.selectorTokens;
40
+ for (let i = 0; i < selectorTokens.length; i++) if (selectorTokens[i].type !== "selector") return returnValue;
41
+ const selectors = styleItem.selectors;
42
+ const matches = [];
43
+ for (let i = 0; i < selectors.length; i++) {
44
+ const selector = styleItem.selectors[i];
45
+ const firstChar = selector.charAt(0);
46
+ let matchType;
47
+ if (firstChar === ".") matchType = "class";
48
+ else if (firstChar === "#") matchType = "id";
49
+ else if (allValidTags.has(selector)) matchType = "tag";
50
+ else return returnValue;
51
+ const valueMatch = matchType === "tag" ? selector : selector.slice(1);
52
+ if (matchType === "class" && animatedClasses.has(valueMatch)) return returnValue;
53
+ matches.push({
54
+ type: matchType,
55
+ value: valueMatch
56
+ });
57
+ }
58
+ const isMatch = (tagName, node) => {
59
+ const attribs = node.attribs;
60
+ for (let i = 0; i < matches.length; i++) {
61
+ const { type, value } = matches[i];
62
+ switch (type) {
63
+ case "id":
64
+ if (attribs.id === value) return true;
65
+ break;
66
+ case "tag":
67
+ if (tagName === value) return true;
68
+ break;
69
+ case "class": {
70
+ const className = attribs["class"];
71
+ if (typeof className === "string" && splitClassName(className).includes(value)) return true;
72
+ }
73
+ }
74
+ }
75
+ return false;
76
+ };
77
+ parseSVG(svg, (svgItem) => {
78
+ const node = svgItem.node;
79
+ const tagName = node.tag;
80
+ if (!isMatch(tagName, node)) return;
81
+ const attribs = node.attribs;
82
+ const tempDataValue = attribs[tempDataAttrbiute];
83
+ const addedAttributes = new Set(typeof tempDataValue === "string" ? splitClassName(tempDataValue) : []);
84
+ const prop = styleItem.prop;
85
+ if (attribs[prop] !== void 0) {
86
+ if (addedAttributes.has(prop)) throw new Error("Duplicate attribute");
87
+ }
88
+ attribs[prop] = styleItem.value;
89
+ addedAttributes.add(prop);
90
+ attribs[tempDataAttrbiute] = Array.from(addedAttributes).join(" ");
91
+ containsTempAttr = true;
92
+ });
93
+ matches.forEach((match) => {
94
+ if (match.type === "class") removeClasses.add(match.value);
95
+ });
96
+ });
97
+ parseSVG(svg, (svgItem) => {
98
+ const attribs = svgItem.node.attribs;
99
+ const className = attribs["class"];
100
+ const classList = typeof className === "string" ? splitClassName(className) : void 0;
101
+ if (!classList) return;
102
+ const filtered = classList.filter((item) => !removeClasses.has(item));
103
+ if (!filtered.length) delete attribs["class"];
104
+ else attribs["class"] = filtered.join(" ");
105
+ });
106
+ if (containsTempAttr) parseSVG(svg, (item) => {
107
+ delete item.node.attribs[tempDataAttrbiute];
108
+ });
109
+ } catch {
110
+ svg.load(backup);
111
+ }
112
+ }
113
+
114
+ export { cleanupGlobalStyle };
@@ -1,18 +1,14 @@
1
- import { Color } from '@iconify/utils/lib/colors/types';
2
- import { SVG } from '../svg/index.js';
3
- import 'cheerio';
4
- import '@iconify/types';
5
- import '@iconify/utils/lib/customisations/defaults';
6
-
1
+ import { SVG } from "../svg/index.js";
2
+ import { Color } from "@iconify/utils/lib/colors/types";
7
3
  type ColorCallback = (value: string, color: Color | null) => boolean;
8
4
  type ColorCheck = string | string[] | ColorCallback;
9
5
  interface SVGToMaskOptions {
10
- color?: string;
11
- solid?: ColorCheck;
12
- transparent?: ColorCheck;
13
- custom?: (value: string, color: Color | null) => string | number | undefined;
14
- force?: boolean;
15
- id?: string;
6
+ color?: string;
7
+ solid?: ColorCheck;
8
+ transparent?: ColorCheck;
9
+ custom?: (value: string, color: Color | null) => string | number | undefined;
10
+ force?: boolean;
11
+ id?: string;
16
12
  }
17
13
  /**
18
14
  * Converts SVG to mask
@@ -20,5 +16,4 @@ interface SVGToMaskOptions {
20
16
  * Fixes badly designed icons, which use white shape where icon supposed to be transparent
21
17
  */
22
18
  declare function convertSVGToMask(svg: SVG, options?: SVGToMaskOptions): boolean;
23
-
24
- export { convertSVGToMask };
19
+ export { convertSVGToMask };
@@ -0,0 +1,83 @@
1
+ import { isEmptyColor, parseColors } from "../colors/parse.js";
2
+ import { iconToHTML, parseSVGContent, splitSVGDefs } from "@iconify/utils";
3
+
4
+ const defaultBlackColors = [
5
+ "black",
6
+ "#000",
7
+ "#000000"
8
+ ];
9
+ const defaultWhiteColors = [
10
+ "white",
11
+ "#fff",
12
+ "#ffffff"
13
+ ];
14
+ const defaultOptions = {
15
+ color: "currentColor",
16
+ solid: [...defaultBlackColors, "currentcolor"],
17
+ transparent: defaultWhiteColors,
18
+ force: false,
19
+ id: "mask"
20
+ };
21
+ /**
22
+ * Converts SVG to mask
23
+ *
24
+ * Fixes badly designed icons, which use white shape where icon supposed to be transparent
25
+ */
26
+ function convertSVGToMask(svg, options = {}) {
27
+ const props = {
28
+ ...defaultOptions,
29
+ ...options
30
+ };
31
+ const check = (test, value, color) => {
32
+ if (typeof test === "string") return value.toLowerCase() === test;
33
+ if (test instanceof Array) return test.includes(value.toLowerCase());
34
+ return test(value, color);
35
+ };
36
+ let foundSolid = false;
37
+ let foundTransparent = false;
38
+ let failed = false;
39
+ let hasCustomValue = false;
40
+ const backup = svg.toString();
41
+ parseColors(svg, { callback: (attr, colorStr, color) => {
42
+ if (!color || isEmptyColor(color)) return colorStr;
43
+ if (props.custom) {
44
+ let customValue = props.custom(colorStr.toLowerCase(), color);
45
+ if (typeof customValue === "number") {
46
+ let str = Math.max(Math.min(Math.round(customValue * 255), 255), 0).toString(16);
47
+ if (str.length < 2) str = "0" + str;
48
+ if (str[0] === str[1]) str = str[0];
49
+ customValue = "#" + str + str + str;
50
+ }
51
+ if (typeof customValue === "string") {
52
+ if (defaultBlackColors.includes(customValue)) foundSolid = true;
53
+ else if (defaultWhiteColors.includes(customValue)) foundTransparent = true;
54
+ else hasCustomValue = true;
55
+ return customValue;
56
+ }
57
+ }
58
+ if (check(props.solid, colorStr, color)) {
59
+ foundSolid = true;
60
+ return "#fff";
61
+ }
62
+ if (check(props.transparent, colorStr, color)) {
63
+ foundTransparent = true;
64
+ return "#000";
65
+ }
66
+ failed = true;
67
+ console.warn("Unexpected color:", colorStr);
68
+ return color;
69
+ } });
70
+ if (failed || !(hasCustomValue || foundSolid && foundTransparent) && !props.force) {
71
+ svg.load(backup);
72
+ return false;
73
+ }
74
+ const parsed = parseSVGContent(svg.toString());
75
+ if (!parsed) return false;
76
+ const { defs, content } = splitSVGDefs(parsed.body);
77
+ const viewBox = svg.viewBox;
78
+ const newContent = iconToHTML(`<defs>${defs}<mask id="${props.id}">${content}</mask></defs><rect mask="url(#${props.id})" ${viewBox.left ? `x="${viewBox.left}" ` : ""}${viewBox.top ? `y="${viewBox.top}" ` : ""}width="${viewBox.width}" height="${viewBox.height}" fill="${props.color}" />`, parsed.attribs);
79
+ svg.load(newContent);
80
+ return true;
81
+ }
82
+
83
+ export { convertSVGToMask };
@@ -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
  * Reset origin to 0 0
8
4
  */
9
5
  declare function resetSVGOrigin(svg: SVG): void;
10
-
11
- export { resetSVGOrigin };
6
+ export { resetSVGOrigin };