svger-cli 3.1.1 → 4.0.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 (728) hide show
  1. package/CHANGELOG.md +369 -0
  2. package/README.md +432 -25
  3. package/SECURITY.md +3 -3
  4. package/assets/svges/500px.svg +3 -0
  5. package/assets/svges/adobe.svg +3 -0
  6. package/assets/svges/adonis.svg +3 -0
  7. package/assets/svges/aeroplane-1.svg +3 -0
  8. package/assets/svges/agenda.svg +3 -0
  9. package/assets/svges/airbnb.svg +3 -0
  10. package/assets/svges/airtable.svg +3 -0
  11. package/assets/svges/alarm-1.svg +7 -0
  12. package/assets/svges/align-text-center.svg +6 -0
  13. package/assets/svges/align-text-left.svg +6 -0
  14. package/assets/svges/align-text-right.svg +6 -0
  15. package/assets/svges/alpinejs.svg +4 -0
  16. package/assets/svges/amazon-original.svg +5 -0
  17. package/assets/svges/amazon-pay.svg +7 -0
  18. package/assets/svges/amazon.svg +10 -0
  19. package/assets/svges/ambulance-1.svg +4 -0
  20. package/assets/svges/amd.svg +3 -0
  21. package/assets/svges/amex.svg +4 -0
  22. package/assets/svges/anchor.svg +3 -0
  23. package/assets/svges/android-old.svg +3 -0
  24. package/assets/svges/android.svg +3 -0
  25. package/assets/svges/angellist.svg +3 -0
  26. package/assets/svges/angle-double-down.svg +4 -0
  27. package/assets/svges/angle-double-left.svg +4 -0
  28. package/assets/svges/angle-double-right.svg +4 -0
  29. package/assets/svges/angle-double-up.svg +4 -0
  30. package/assets/svges/angular.svg +3 -0
  31. package/assets/svges/app-store.svg +3 -0
  32. package/assets/svges/apple-brand.svg +3 -0
  33. package/assets/svges/apple-music-alt.svg +3 -0
  34. package/assets/svges/apple-music.svg +3 -0
  35. package/assets/svges/apple-pay.svg +3 -0
  36. package/assets/svges/arc-browser.svg +6 -0
  37. package/assets/svges/arrow-all-direction.svg +6 -0
  38. package/assets/svges/arrow-angular-top-left.svg +3 -0
  39. package/assets/svges/arrow-angular-top-right.svg +3 -0
  40. package/assets/svges/arrow-both-direction-horizontal-1.svg +3 -0
  41. package/assets/svges/arrow-both-direction-vertical-1.svg +3 -0
  42. package/assets/svges/arrow-downward.svg +3 -0
  43. package/assets/svges/arrow-left-circle.svg +4 -0
  44. package/assets/svges/arrow-left.svg +3 -0
  45. package/assets/svges/arrow-right-circle.svg +4 -0
  46. package/assets/svges/arrow-right.svg +3 -0
  47. package/assets/svges/arrow-upward.svg +3 -0
  48. package/assets/svges/asana.svg +3 -0
  49. package/assets/svges/astro.svg +4 -0
  50. package/assets/svges/atlassian.svg +3 -0
  51. package/assets/svges/audi-alt.svg +3 -0
  52. package/assets/svges/audi.svg +3 -0
  53. package/assets/svges/aws.svg +3 -0
  54. package/assets/svges/azure.svg +3 -0
  55. package/assets/svges/badge-decagram-percent.svg +6 -0
  56. package/assets/svges/balloons.svg +3 -0
  57. package/assets/svges/ban-2.svg +3 -0
  58. package/assets/svges/bar-chart-4.svg +6 -0
  59. package/assets/svges/bar-chart-dollar.svg +6 -0
  60. package/assets/svges/basket-shopping-3.svg +5 -0
  61. package/assets/svges/beat.svg +3 -0
  62. package/assets/svges/behance.svg +5 -0
  63. package/assets/svges/bell-1.svg +3 -0
  64. package/assets/svges/bike.svg +6 -0
  65. package/assets/svges/bing.svg +5 -0
  66. package/assets/svges/bitbucket.svg +5 -0
  67. package/assets/svges/bitcoin.svg +5 -0
  68. package/assets/svges/bittorrent.svg +6 -0
  69. package/assets/svges/blogger-alt.svg +3 -0
  70. package/assets/svges/blogger.svg +3 -0
  71. package/assets/svges/bluetooth-logo.svg +3 -0
  72. package/assets/svges/bluetooth.svg +3 -0
  73. package/assets/svges/bmw.svg +7 -0
  74. package/assets/svges/board-writing-3.svg +3 -0
  75. package/assets/svges/bold.svg +3 -0
  76. package/assets/svges/bolt-2.svg +3 -0
  77. package/assets/svges/bolt-3.svg +3 -0
  78. package/assets/svges/book-1.svg +4 -0
  79. package/assets/svges/bookmark-1.svg +3 -0
  80. package/assets/svges/bookmark-circle.svg +4 -0
  81. package/assets/svges/books-2.svg +3 -0
  82. package/assets/svges/bootstrap-5-square.svg +3 -0
  83. package/assets/svges/bootstrap-5.svg +3 -0
  84. package/assets/svges/box-archive-1.svg +4 -0
  85. package/assets/svges/box-closed.svg +3 -0
  86. package/assets/svges/box-gift-1.svg +3 -0
  87. package/assets/svges/brave.svg +3 -0
  88. package/assets/svges/bricks.svg +3 -0
  89. package/assets/svges/bridge-3.svg +3 -0
  90. package/assets/svges/briefcase-1.svg +3 -0
  91. package/assets/svges/briefcase-2.svg +3 -0
  92. package/assets/svges/briefcase-plus-1.svg +4 -0
  93. package/assets/svges/brush-1-rotated.svg +3 -0
  94. package/assets/svges/brush-2.svg +3 -0
  95. package/assets/svges/btc.svg +3 -0
  96. package/assets/svges/bug-1.svg +3 -0
  97. package/assets/svges/buildings-1.svg +5 -0
  98. package/assets/svges/bulb-2.svg +3 -0
  99. package/assets/svges/bulb-4.svg +9 -0
  100. package/assets/svges/burger-1.svg +3 -0
  101. package/assets/svges/burger-drink.svg +4 -0
  102. package/assets/svges/bus-1.svg +5 -0
  103. package/assets/svges/busket-ball.svg +3 -0
  104. package/assets/svges/cake-1.svg +3 -0
  105. package/assets/svges/calculator-1.svg +8 -0
  106. package/assets/svges/calculator-2.svg +13 -0
  107. package/assets/svges/calendar-days.svg +9 -0
  108. package/assets/svges/camera-1.svg +4 -0
  109. package/assets/svges/camera-movie-1.svg +3 -0
  110. package/assets/svges/candy-cane-2.svg +3 -0
  111. package/assets/svges/candy-round-1.svg +3 -0
  112. package/assets/svges/canva.svg +3 -0
  113. package/assets/svges/capsule-1.svg +3 -0
  114. package/assets/svges/car-2.svg +5 -0
  115. package/assets/svges/car-4.svg +3 -0
  116. package/assets/svges/car-6.svg +5 -0
  117. package/assets/svges/caravan-1.svg +3 -0
  118. package/assets/svges/cart-1.svg +5 -0
  119. package/assets/svges/cart-2.svg +5 -0
  120. package/assets/svges/cash-app.svg +3 -0
  121. package/assets/svges/certificate-badge-1.svg +6 -0
  122. package/assets/svges/chat-bubble-2.svg +5 -0
  123. package/assets/svges/check-circle-1.svg +4 -0
  124. package/assets/svges/check-square-2.svg +4 -0
  125. package/assets/svges/check.svg +3 -0
  126. package/assets/svges/chevron-down-circle.svg +4 -0
  127. package/assets/svges/chevron-down.svg +3 -0
  128. package/assets/svges/chevron-left-circle.svg +4 -0
  129. package/assets/svges/chevron-left.svg +3 -0
  130. package/assets/svges/chevron-right-circle.svg +4 -0
  131. package/assets/svges/chevron-up-circle.svg +4 -0
  132. package/assets/svges/chevron-up.svg +3 -0
  133. package/assets/svges/chrome.svg +6 -0
  134. package/assets/svges/chromecast.svg +3 -0
  135. package/assets/svges/cisco.svg +3 -0
  136. package/assets/svges/claude.svg +3 -0
  137. package/assets/svges/clickup.svg +4 -0
  138. package/assets/svges/clipboard.svg +3 -0
  139. package/assets/svges/cloud-2.svg +3 -0
  140. package/assets/svges/cloud-bolt-1.svg +4 -0
  141. package/assets/svges/cloud-bolt-2.svg +4 -0
  142. package/assets/svges/cloud-check-circle.svg +5 -0
  143. package/assets/svges/cloud-download.svg +5 -0
  144. package/assets/svges/cloud-iot-2.svg +3 -0
  145. package/assets/svges/cloud-rain.svg +6 -0
  146. package/assets/svges/cloud-refresh-clockwise.svg +5 -0
  147. package/assets/svges/cloud-sun.svg +9 -0
  148. package/assets/svges/cloud-upload.svg +5 -0
  149. package/assets/svges/cloudflare.svg +3 -0
  150. package/assets/svges/code-1.svg +5 -0
  151. package/assets/svges/code-s.svg +5 -0
  152. package/assets/svges/codepen.svg +3 -0
  153. package/assets/svges/coffee-cup-2.svg +6 -0
  154. package/assets/svges/coinbase.svg +10 -0
  155. package/assets/svges/colour-palette-3.svg +7 -0
  156. package/assets/svges/comment-1-share.svg +4 -0
  157. package/assets/svges/comment-1-text.svg +5 -0
  158. package/assets/svges/comment-1.svg +3 -0
  159. package/assets/svges/compass-drafting-2.svg +3 -0
  160. package/assets/svges/connectdevelop.svg +3 -0
  161. package/assets/svges/copilot.svg +8 -0
  162. package/assets/svges/coral.svg +3 -0
  163. package/assets/svges/cpanel.svg +3 -0
  164. package/assets/svges/crane-4.svg +3 -0
  165. package/assets/svges/creative-commons.svg +4 -0
  166. package/assets/svges/credit-card-multiple.svg +3 -0
  167. package/assets/svges/crop-2.svg +3 -0
  168. package/assets/svges/crown-3.svg +3 -0
  169. package/assets/svges/css3.svg +3 -0
  170. package/assets/svges/dashboard-square-1.svg +6 -0
  171. package/assets/svges/database-2.svg +3 -0
  172. package/assets/svges/deno.svg +4 -0
  173. package/assets/svges/dev.svg +3 -0
  174. package/assets/svges/dialogflow.svg +4 -0
  175. package/assets/svges/diamonds-1.svg +3 -0
  176. package/assets/svges/diamonds-2.svg +3 -0
  177. package/assets/svges/digitalocean.svg +3 -0
  178. package/assets/svges/diners-club.svg +38 -0
  179. package/assets/svges/direction-ltr.svg +4 -0
  180. package/assets/svges/direction-rtl.svg +4 -0
  181. package/assets/svges/discord-chat.svg +5 -0
  182. package/assets/svges/discord.svg +3 -0
  183. package/assets/svges/discover.svg +3 -0
  184. package/assets/svges/docker.svg +3 -0
  185. package/assets/svges/dollar-circle.svg +4 -0
  186. package/assets/svges/dollar.svg +3 -0
  187. package/assets/svges/double-quotes-end-1.svg +4 -0
  188. package/assets/svges/download-1.svg +4 -0
  189. package/assets/svges/download-circle-1.svg +4 -0
  190. package/assets/svges/dribbble-symbol.svg +3 -0
  191. package/assets/svges/dribbble.svg +3 -0
  192. package/assets/svges/drizzle.svg +6 -0
  193. package/assets/svges/dropbox.svg +7 -0
  194. package/assets/svges/drupal.svg +3 -0
  195. package/assets/svges/dumbbell-1.svg +3 -0
  196. package/assets/svges/edge.svg +3 -0
  197. package/assets/svges/emoji-expressionless-flat-eyes.svg +6 -0
  198. package/assets/svges/emoji-expressionless.svg +6 -0
  199. package/assets/svges/emoji-grin.svg +6 -0
  200. package/assets/svges/emoji-sad.svg +6 -0
  201. package/assets/svges/emoji-smile-side.svg +6 -0
  202. package/assets/svges/emoji-smile-sunglass.svg +5 -0
  203. package/assets/svges/emoji-smile-tongue.svg +3 -0
  204. package/assets/svges/emoji-smile.svg +6 -0
  205. package/assets/svges/enter-down.svg +4 -0
  206. package/assets/svges/enter.svg +4 -0
  207. package/assets/svges/envato.svg +4 -0
  208. package/assets/svges/envelope-1.svg +3 -0
  209. package/assets/svges/eraser-1.svg +4 -0
  210. package/assets/svges/ethereum-logo.svg +4 -0
  211. package/assets/svges/euro.svg +3 -0
  212. package/assets/svges/exit-up.svg +4 -0
  213. package/assets/svges/exit.svg +4 -0
  214. package/assets/svges/expand-arrow-1.svg +3 -0
  215. package/assets/svges/expand-square-4.svg +6 -0
  216. package/assets/svges/expressjs.svg +4 -0
  217. package/assets/svges/eye.svg +4 -0
  218. package/assets/svges/facebook-messenger.svg +3 -0
  219. package/assets/svges/facebook-rounded.svg +4 -0
  220. package/assets/svges/facebook-square.svg +3 -0
  221. package/assets/svges/facebook.svg +3 -0
  222. package/assets/svges/facetime.svg +3 -0
  223. package/assets/svges/figma.svg +3 -0
  224. package/assets/svges/file-format-zip.svg +4 -0
  225. package/assets/svges/file-multiple.svg +4 -0
  226. package/assets/svges/file-pencil.svg +4 -0
  227. package/assets/svges/file-plus-circle.svg +5 -0
  228. package/assets/svges/file-question.svg +5 -0
  229. package/assets/svges/file-xmark.svg +4 -0
  230. package/assets/svges/firebase.svg +3 -0
  231. package/assets/svges/firefox.svg +3 -0
  232. package/assets/svges/firework-rocket-4.svg +3 -0
  233. package/assets/svges/fitbit.svg +3 -0
  234. package/assets/svges/flag-1.svg +3 -0
  235. package/assets/svges/flag-2.svg +3 -0
  236. package/assets/svges/flickr.svg +4 -0
  237. package/assets/svges/floppy-disk-1.svg +3 -0
  238. package/assets/svges/flower-2.svg +3 -0
  239. package/assets/svges/flutter.svg +3 -0
  240. package/assets/svges/folder-1.svg +3 -0
  241. package/assets/svges/ford.svg +3 -0
  242. package/assets/svges/framer.svg +3 -0
  243. package/assets/svges/funnel-1.svg +3 -0
  244. package/assets/svges/gallery.svg +4 -0
  245. package/assets/svges/game-pad-modern-1.svg +6 -0
  246. package/assets/svges/gatsby.svg +3 -0
  247. package/assets/svges/gauge-1.svg +5 -0
  248. package/assets/svges/gear-1.svg +4 -0
  249. package/assets/svges/gears-3.svg +6 -0
  250. package/assets/svges/gemini.svg +3 -0
  251. package/assets/svges/git.svg +3 -0
  252. package/assets/svges/github.svg +3 -0
  253. package/assets/svges/glass-juice-1.svg +3 -0
  254. package/assets/svges/globe-1.svg +3 -0
  255. package/assets/svges/globe-stand.svg +4 -0
  256. package/assets/svges/go.svg +7 -0
  257. package/assets/svges/goodreads.svg +3 -0
  258. package/assets/svges/google-cloud.svg +3 -0
  259. package/assets/svges/google-drive.svg +3 -0
  260. package/assets/svges/google-meet.svg +3 -0
  261. package/assets/svges/google-pay.svg +3 -0
  262. package/assets/svges/google-wallet.svg +3 -0
  263. package/assets/svges/google.svg +3 -0
  264. package/assets/svges/graduation-cap-1.svg +3 -0
  265. package/assets/svges/grammarly.svg +3 -0
  266. package/assets/svges/hacker-news.svg +3 -0
  267. package/assets/svges/hammer-1.svg +3 -0
  268. package/assets/svges/hammer-2.svg +3 -0
  269. package/assets/svges/hand-mic.svg +3 -0
  270. package/assets/svges/hand-shake.svg +3 -0
  271. package/assets/svges/hand-stop.svg +3 -0
  272. package/assets/svges/hand-taking-dollar.svg +4 -0
  273. package/assets/svges/hand-taking-leaf-1.svg +5 -0
  274. package/assets/svges/hand-taking-user.svg +5 -0
  275. package/assets/svges/hashnode.svg +3 -0
  276. package/assets/svges/hat-chef-3.svg +3 -0
  277. package/assets/svges/headphone-1.svg +3 -0
  278. package/assets/svges/heart.svg +3 -0
  279. package/assets/svges/helicopter-2.svg +4 -0
  280. package/assets/svges/helmet-safety-1.svg +3 -0
  281. package/assets/svges/hierarchy-1.svg +9 -0
  282. package/assets/svges/highlighter-1.svg +3 -0
  283. package/assets/svges/highlighter-2.svg +3 -0
  284. package/assets/svges/home-2.svg +3 -0
  285. package/assets/svges/hospital-2.svg +4 -0
  286. package/assets/svges/hourglass.svg +3 -0
  287. package/assets/svges/html5.svg +4 -0
  288. package/assets/svges/ibm.svg +3 -0
  289. package/assets/svges/id-card.svg +7 -0
  290. package/assets/svges/imdb.svg +7 -0
  291. package/assets/svges/indent.svg +8 -0
  292. package/assets/svges/info.svg +4 -0
  293. package/assets/svges/injection-1.svg +3 -0
  294. package/assets/svges/instagram-logotype.svg +3 -0
  295. package/assets/svges/instagram.svg +4 -0
  296. package/assets/svges/intel.svg +4 -0
  297. package/assets/svges/ios.svg +3 -0
  298. package/assets/svges/island-2.svg +4 -0
  299. package/assets/svges/jaguar.svg +3 -0
  300. package/assets/svges/jamstack.svg +3 -0
  301. package/assets/svges/java.svg +3 -0
  302. package/assets/svges/javascript.svg +3 -0
  303. package/assets/svges/jcb.svg +3 -0
  304. package/assets/svges/joomla.svg +6 -0
  305. package/assets/svges/jsfiddle.svg +4 -0
  306. package/assets/svges/key-1.svg +3 -0
  307. package/assets/svges/keyboard.svg +12 -0
  308. package/assets/svges/knife-fork-1.svg +5 -0
  309. package/assets/svges/kubernetes.svg +11 -0
  310. package/assets/svges/label-dollar-2.svg +4 -0
  311. package/assets/svges/laptop-2.svg +3 -0
  312. package/assets/svges/laptop-phone.svg +5 -0
  313. package/assets/svges/laravel.svg +3 -0
  314. package/assets/svges/layers-1.svg +4 -0
  315. package/assets/svges/layout-26.svg +3 -0
  316. package/assets/svges/layout-9.svg +3 -0
  317. package/assets/svges/leaf-1.svg +3 -0
  318. package/assets/svges/leaf-6.svg +4 -0
  319. package/assets/svges/lemon-squeezy.svg +6 -0
  320. package/assets/svges/life-guard-tube-1.svg +3 -0
  321. package/assets/svges/line-dashed.svg +5 -0
  322. package/assets/svges/line-dotted.svg +8 -0
  323. package/assets/svges/line-height.svg +7 -0
  324. package/assets/svges/line.svg +3 -0
  325. package/assets/svges/lineicons.svg +6 -0
  326. package/assets/svges/link-2-angular-right.svg +3 -0
  327. package/assets/svges/linkedin.svg +3 -0
  328. package/assets/svges/location-arrow-right.svg +3 -0
  329. package/assets/svges/locked-1.svg +4 -0
  330. package/assets/svges/locked-2.svg +4 -0
  331. package/assets/svges/loom.svg +3 -0
  332. package/assets/svges/magento.svg +4 -0
  333. package/assets/svges/magnet.svg +3 -0
  334. package/assets/svges/mailchimp.svg +3 -0
  335. package/assets/svges/map-marker-1.svg +6 -0
  336. package/assets/svges/map-marker-5.svg +4 -0
  337. package/assets/svges/map-pin-5.svg +3 -0
  338. package/assets/svges/markdown.svg +5 -0
  339. package/assets/svges/mastercard.svg +7 -0
  340. package/assets/svges/medium-alt.svg +3 -0
  341. package/assets/svges/medium.svg +3 -0
  342. package/assets/svges/megaphone-1.svg +3 -0
  343. package/assets/svges/menu-cheesburger.svg +8 -0
  344. package/assets/svges/menu-hamburger-1.svg +5 -0
  345. package/assets/svges/menu-meatballs-1.svg +5 -0
  346. package/assets/svges/menu-meatballs-2.svg +5 -0
  347. package/assets/svges/mercedes.svg +3 -0
  348. package/assets/svges/message-2-question.svg +5 -0
  349. package/assets/svges/message-2.svg +3 -0
  350. package/assets/svges/message-3-text.svg +5 -0
  351. package/assets/svges/meta-alt.svg +3 -0
  352. package/assets/svges/meta.svg +7 -0
  353. package/assets/svges/microphone-1.svg +4 -0
  354. package/assets/svges/microscope.svg +3 -0
  355. package/assets/svges/microsoft-edge.svg +5 -0
  356. package/assets/svges/microsoft-teams.svg +6 -0
  357. package/assets/svges/microsoft.svg +6 -0
  358. package/assets/svges/minus-circle.svg +4 -0
  359. package/assets/svges/minus.svg +3 -0
  360. package/assets/svges/mongodb.svg +3 -0
  361. package/assets/svges/monitor-code.svg +5 -0
  362. package/assets/svges/monitor-mac.svg +3 -0
  363. package/assets/svges/monitor.svg +3 -0
  364. package/assets/svges/moon-half-right-5.svg +3 -0
  365. package/assets/svges/mountains-2.svg +3 -0
  366. package/assets/svges/mouse-2.svg +3 -0
  367. package/assets/svges/mushroom-1.svg +3 -0
  368. package/assets/svges/mushroom-5.svg +6 -0
  369. package/assets/svges/music.svg +3 -0
  370. package/assets/svges/mysql.svg +3 -0
  371. package/assets/svges/nasa.svg +3 -0
  372. package/assets/svges/netflix.svg +3 -0
  373. package/assets/svges/netlify.svg +3 -0
  374. package/assets/svges/next-step-2.svg +3 -0
  375. package/assets/svges/nextjs.svg +3 -0
  376. package/assets/svges/nike.svg +3 -0
  377. package/assets/svges/nissan.svg +3 -0
  378. package/assets/svges/nodejs-alt.svg +3 -0
  379. package/assets/svges/nodejs.svg +3 -0
  380. package/assets/svges/notebook-1.svg +3 -0
  381. package/assets/svges/notion.svg +3 -0
  382. package/assets/svges/npm.svg +3 -0
  383. package/assets/svges/nuxt.svg +3 -0
  384. package/assets/svges/nvidia.svg +3 -0
  385. package/assets/svges/oculus.svg +4 -0
  386. package/assets/svges/open-ai.svg +3 -0
  387. package/assets/svges/opera-mini.svg +3 -0
  388. package/assets/svges/oracle.svg +3 -0
  389. package/assets/svges/outdent.svg +8 -0
  390. package/assets/svges/paddle.svg +3 -0
  391. package/assets/svges/page-break-1.svg +7 -0
  392. package/assets/svges/pagination.svg +7 -0
  393. package/assets/svges/paint-bucket.svg +3 -0
  394. package/assets/svges/paint-roller-1.svg +3 -0
  395. package/assets/svges/paperclip-1.svg +3 -0
  396. package/assets/svges/party-flags.svg +3 -0
  397. package/assets/svges/party-spray.svg +3 -0
  398. package/assets/svges/patreon.svg +3 -0
  399. package/assets/svges/pause.svg +4 -0
  400. package/assets/svges/payoneer.svg +4 -0
  401. package/assets/svges/paypal.svg +4 -0
  402. package/assets/svges/pen-to-square.svg +4 -0
  403. package/assets/svges/pencil-1.svg +3 -0
  404. package/assets/svges/pepsi.svg +4 -0
  405. package/assets/svges/phone.svg +4 -0
  406. package/assets/svges/photos.svg +4 -0
  407. package/assets/svges/php.svg +3 -0
  408. package/assets/svges/pie-chart-2.svg +3 -0
  409. package/assets/svges/pilcrow.svg +3 -0
  410. package/assets/svges/pimjo-logo.svg +9 -0
  411. package/assets/svges/pimjo-symbol.svg +3 -0
  412. package/assets/svges/pinterest.svg +3 -0
  413. package/assets/svges/pizza-2.svg +6 -0
  414. package/assets/svges/placeholder-dollar.svg +4 -0
  415. package/assets/svges/plantscale.svg +3 -0
  416. package/assets/svges/play-store.svg +3 -0
  417. package/assets/svges/play.svg +3 -0
  418. package/assets/svges/playstation.svg +5 -0
  419. package/assets/svges/plug-1.svg +3 -0
  420. package/assets/svges/plus-circle.svg +4 -0
  421. package/assets/svges/plus.svg +3 -0
  422. package/assets/svges/pnpm.svg +10 -0
  423. package/assets/svges/postgresql.svg +3 -0
  424. package/assets/svges/postman.svg +3 -0
  425. package/assets/svges/pound.svg +3 -0
  426. package/assets/svges/power-button.svg +4 -0
  427. package/assets/svges/previous-step-2.svg +3 -0
  428. package/assets/svges/printer.svg +3 -0
  429. package/assets/svges/prisma.svg +3 -0
  430. package/assets/svges/producthunt.svg +4 -0
  431. package/assets/svges/proton-mail-logo.svg +3 -0
  432. package/assets/svges/proton-mail-symbol.svg +3 -0
  433. package/assets/svges/python.svg +3 -0
  434. package/assets/svges/question-mark-circle.svg +5 -0
  435. package/assets/svges/question-mark.svg +4 -0
  436. package/assets/svges/quora.svg +4 -0
  437. package/assets/svges/radis.svg +3 -0
  438. package/assets/svges/react.svg +3 -0
  439. package/assets/svges/reddit.svg +6 -0
  440. package/assets/svges/refresh-circle-1-clockwise.svg +4 -0
  441. package/assets/svges/refresh-dollar-1.svg +5 -0
  442. package/assets/svges/refresh-user-1.svg +6 -0
  443. package/assets/svges/remix-js.svg +4 -0
  444. package/assets/svges/road-1.svg +6 -0
  445. package/assets/svges/rocket-5.svg +5 -0
  446. package/assets/svges/route-1.svg +7 -0
  447. package/assets/svges/rss-right.svg +6 -0
  448. package/assets/svges/ruler-1.svg +3 -0
  449. package/assets/svges/ruler-pen.svg +4 -0
  450. package/assets/svges/rupee.svg +3 -0
  451. package/assets/svges/safari.svg +35 -0
  452. package/assets/svges/sanity.svg +20 -0
  453. package/assets/svges/school-bench-1.svg +4 -0
  454. package/assets/svges/school-bench-2.svg +4 -0
  455. package/assets/svges/scissors-1-vertical.svg +4 -0
  456. package/assets/svges/scoter.svg +8 -0
  457. package/assets/svges/scroll-down-2.svg +6 -0
  458. package/assets/svges/search-1.svg +3 -0
  459. package/assets/svges/search-2.svg +4 -0
  460. package/assets/svges/search-minus.svg +4 -0
  461. package/assets/svges/search-plus.svg +4 -0
  462. package/assets/svges/search-text.svg +5 -0
  463. package/assets/svges/select-cursor-1.svg +10 -0
  464. package/assets/svges/seo-monitor.svg +6 -0
  465. package/assets/svges/service-bell-1.svg +3 -0
  466. package/assets/svges/share-1-circle.svg +4 -0
  467. package/assets/svges/share-1.svg +3 -0
  468. package/assets/svges/share-2.svg +4 -0
  469. package/assets/svges/shield-2-check.svg +4 -0
  470. package/assets/svges/shield-2.svg +3 -0
  471. package/assets/svges/shield-dollar.svg +4 -0
  472. package/assets/svges/shift-left.svg +4 -0
  473. package/assets/svges/shift-right.svg +4 -0
  474. package/assets/svges/ship-1.svg +5 -0
  475. package/assets/svges/shirt-1.svg +3 -0
  476. package/assets/svges/shopify.svg +3 -0
  477. package/assets/svges/shovel.svg +3 -0
  478. package/assets/svges/shuffle.svg +3 -0
  479. package/assets/svges/sign-post-left.svg +3 -0
  480. package/assets/svges/signal-app.svg +3 -0
  481. package/assets/svges/signs-post-2.svg +3 -0
  482. package/assets/svges/sketch.svg +3 -0
  483. package/assets/svges/skype.svg +3 -0
  484. package/assets/svges/slack.svg +10 -0
  485. package/assets/svges/slice-2.svg +3 -0
  486. package/assets/svges/sliders-horizontal-square-2.svg +7 -0
  487. package/assets/svges/slideshare.svg +5 -0
  488. package/assets/svges/snapchat.svg +3 -0
  489. package/assets/svges/sort-alphabetical.svg +5 -0
  490. package/assets/svges/sort-high-to-low.svg +7 -0
  491. package/assets/svges/soundcloud.svg +3 -0
  492. package/assets/svges/spacex.svg +4 -0
  493. package/assets/svges/spellcheck.svg +4 -0
  494. package/assets/svges/spinner-2-sacle.svg +10 -0
  495. package/assets/svges/spinner-3.svg +3 -0
  496. package/assets/svges/sports.svg +3 -0
  497. package/assets/svges/spotify-alt.svg +6 -0
  498. package/assets/svges/spotify.svg +3 -0
  499. package/assets/svges/squarespace.svg +3 -0
  500. package/assets/svges/stackoverflow.svg +8 -0
  501. package/assets/svges/stamp.svg +3 -0
  502. package/assets/svges/star-fat-half-2.svg +4 -0
  503. package/assets/svges/star-fat.svg +3 -0
  504. package/assets/svges/star-sharp-disabled.svg +4 -0
  505. package/assets/svges/statista.svg +3 -0
  506. package/assets/svges/steam.svg +5 -0
  507. package/assets/svges/stethoscope-1.svg +3 -0
  508. package/assets/svges/stopwatch.svg +5 -0
  509. package/assets/svges/storage-hdd-2.svg +4 -0
  510. package/assets/svges/strikethrough-1.svg +5 -0
  511. package/assets/svges/stripe.svg +9 -0
  512. package/assets/svges/stumbleupon.svg +3 -0
  513. package/assets/svges/sun-1.svg +11 -0
  514. package/assets/svges/supabase.svg +5 -0
  515. package/assets/svges/surfboard-2.svg +3 -0
  516. package/assets/svges/svelte.svg +3 -0
  517. package/assets/svges/swift.svg +3 -0
  518. package/assets/svges/tab.svg +4 -0
  519. package/assets/svges/tailwindcss.svg +3 -0
  520. package/assets/svges/target-user.svg +5 -0
  521. package/assets/svges/telegram.svg +3 -0
  522. package/assets/svges/telephone-1.svg +4 -0
  523. package/assets/svges/telephone-3.svg +5 -0
  524. package/assets/svges/tesla.svg +3 -0
  525. package/assets/svges/text-format-remove.svg +5 -0
  526. package/assets/svges/text-format.svg +5 -0
  527. package/assets/svges/text-paragraph.svg +6 -0
  528. package/assets/svges/thumbs-down-3.svg +3 -0
  529. package/assets/svges/thumbs-up-3.svg +3 -0
  530. package/assets/svges/ticket-1.svg +3 -0
  531. package/assets/svges/tickets-3.svg +7 -0
  532. package/assets/svges/tiktok-alt.svg +3 -0
  533. package/assets/svges/tiktok.svg +3 -0
  534. package/assets/svges/tower-broadcast-1.svg +7 -0
  535. package/assets/svges/toyota.svg +4 -0
  536. package/assets/svges/train-1.svg +4 -0
  537. package/assets/svges/train-3.svg +5 -0
  538. package/assets/svges/trash-3.svg +5 -0
  539. package/assets/svges/tree-2.svg +3 -0
  540. package/assets/svges/trees-3.svg +3 -0
  541. package/assets/svges/trello.svg +3 -0
  542. package/assets/svges/trend-down-1.svg +3 -0
  543. package/assets/svges/trend-up-1.svg +3 -0
  544. package/assets/svges/trophy-1.svg +3 -0
  545. package/assets/svges/trowel-1.svg +3 -0
  546. package/assets/svges/truck-delivery-1.svg +3 -0
  547. package/assets/svges/tumblr.svg +3 -0
  548. package/assets/svges/turborepo.svg +4 -0
  549. package/assets/svges/twitch.svg +3 -0
  550. package/assets/svges/twitter-old.svg +3 -0
  551. package/assets/svges/typescript.svg +3 -0
  552. package/assets/svges/uber-symbol.svg +3 -0
  553. package/assets/svges/uber.svg +3 -0
  554. package/assets/svges/ubuntu.svg +3 -0
  555. package/assets/svges/underline.svg +4 -0
  556. package/assets/svges/unlink-2-angular-eft.svg +8 -0
  557. package/assets/svges/unlocked-2.svg +4 -0
  558. package/assets/svges/unsplash.svg +4 -0
  559. package/assets/svges/upload-1.svg +4 -0
  560. package/assets/svges/upload-circle-1.svg +4 -0
  561. package/assets/svges/user-4.svg +4 -0
  562. package/assets/svges/user-multiple-4.svg +6 -0
  563. package/assets/svges/vector-nodes-6.svg +3 -0
  564. package/assets/svges/vector-nodes-7.svg +3 -0
  565. package/assets/svges/vercel.svg +3 -0
  566. package/assets/svges/vimeo.svg +3 -0
  567. package/assets/svges/visa.svg +3 -0
  568. package/assets/svges/vite.svg +6 -0
  569. package/assets/svges/vk.svg +3 -0
  570. package/assets/svges/vmware.svg +4 -0
  571. package/assets/svges/volkswagen.svg +8 -0
  572. package/assets/svges/volume-1.svg +5 -0
  573. package/assets/svges/volume-high.svg +6 -0
  574. package/assets/svges/volume-low.svg +4 -0
  575. package/assets/svges/volume-mute.svg +6 -0
  576. package/assets/svges/volume-off.svg +3 -0
  577. package/assets/svges/vs-code.svg +3 -0
  578. package/assets/svges/vuejs.svg +3 -0
  579. package/assets/svges/wallet-1.svg +3 -0
  580. package/assets/svges/watch-beat-1.svg +4 -0
  581. package/assets/svges/water-drop-1.svg +4 -0
  582. package/assets/svges/webflow.svg +3 -0
  583. package/assets/svges/webhooks.svg +3 -0
  584. package/assets/svges/wechat.svg +4 -0
  585. package/assets/svges/weight-machine-1.svg +4 -0
  586. package/assets/svges/whatsapp.svg +3 -0
  587. package/assets/svges/wheelbarrow-empty.svg +3 -0
  588. package/assets/svges/wheelchair-1.svg +3 -0
  589. package/assets/svges/windows.svg +6 -0
  590. package/assets/svges/wise.svg +3 -0
  591. package/assets/svges/wordpress.svg +3 -0
  592. package/assets/svges/www-cursor.svg +5 -0
  593. package/assets/svges/www.svg +4 -0
  594. package/assets/svges/x.svg +3 -0
  595. package/assets/svges/xampp.svg +5 -0
  596. package/assets/svges/xbox.svg +6 -0
  597. package/assets/svges/xmark-circle.svg +4 -0
  598. package/assets/svges/xmark.svg +3 -0
  599. package/assets/svges/xrp.svg +3 -0
  600. package/assets/svges/yahoo.svg +3 -0
  601. package/assets/svges/yarn.svg +4 -0
  602. package/assets/svges/ycombinator.svg +3 -0
  603. package/assets/svges/yen.svg +3 -0
  604. package/assets/svges/youtube-kids.svg +3 -0
  605. package/assets/svges/youtube-music.svg +4 -0
  606. package/assets/svges/youtube.svg +3 -0
  607. package/assets/svges/zapier.svg +3 -0
  608. package/assets/svges/zero-size.svg +6 -0
  609. package/assets/svges/zoom.svg +4 -0
  610. package/bin/test-svger.js +163 -0
  611. package/dist/__tests__/__mocks__/visual-diff.d.ts +7 -0
  612. package/dist/__tests__/__mocks__/visual-diff.js +13 -0
  613. package/dist/__tests__/fixtures.js +18 -18
  614. package/dist/cli.js +148 -2
  615. package/dist/config.js +4 -1
  616. package/dist/core/enhanced-plugin-manager.d.ts +107 -0
  617. package/dist/core/enhanced-plugin-manager.js +315 -0
  618. package/dist/core/error-handler.d.ts +1 -1
  619. package/dist/core/error-handler.js +14 -17
  620. package/dist/core/framework-templates.js +37 -47
  621. package/dist/core/logger.js +0 -1
  622. package/dist/core/performance-engine.js +10 -15
  623. package/dist/core/plugin-manager.js +4 -4
  624. package/dist/core/style-compiler.d.ts +0 -1
  625. package/dist/core/style-compiler.js +3 -6
  626. package/dist/core/template-manager.js +2 -2
  627. package/dist/index.d.ts +4 -0
  628. package/dist/index.js +4 -0
  629. package/dist/integrations/babel.d.ts +1 -1
  630. package/dist/integrations/babel.js +1 -1
  631. package/dist/integrations/jest-preset.js +1 -1
  632. package/dist/optimizers/advanced-stages.d.ts +40 -0
  633. package/dist/optimizers/advanced-stages.js +297 -0
  634. package/dist/optimizers/basic-cleaner.d.ts +72 -0
  635. package/dist/optimizers/basic-cleaner.js +240 -0
  636. package/dist/optimizers/collapse-useless-groups.d.ts +26 -0
  637. package/dist/optimizers/collapse-useless-groups.js +104 -0
  638. package/dist/optimizers/command-optimizer.d.ts +48 -0
  639. package/dist/optimizers/command-optimizer.js +299 -0
  640. package/dist/optimizers/index.d.ts +14 -0
  641. package/dist/optimizers/index.js +15 -0
  642. package/dist/optimizers/move-attrs-to-parent.d.ts +31 -0
  643. package/dist/optimizers/move-attrs-to-parent.js +115 -0
  644. package/dist/optimizers/numeric-optimizer.d.ts +43 -0
  645. package/dist/optimizers/numeric-optimizer.js +383 -0
  646. package/dist/optimizers/optimizer-pipeline.d.ts +39 -0
  647. package/dist/optimizers/optimizer-pipeline.js +81 -0
  648. package/dist/optimizers/path-deduplicator.d.ts +37 -0
  649. package/dist/optimizers/path-deduplicator.js +406 -0
  650. package/dist/optimizers/path-parser.d.ts +60 -0
  651. package/dist/optimizers/path-parser.js +428 -0
  652. package/dist/optimizers/path-shortener.d.ts +41 -0
  653. package/dist/optimizers/path-shortener.js +274 -0
  654. package/dist/optimizers/path-simplifier.d.ts +30 -0
  655. package/dist/optimizers/path-simplifier.js +326 -0
  656. package/dist/optimizers/remove-hidden-empty.d.ts +29 -0
  657. package/dist/optimizers/remove-hidden-empty.js +130 -0
  658. package/dist/optimizers/remove-unused-defs.d.ts +24 -0
  659. package/dist/optimizers/remove-unused-defs.js +132 -0
  660. package/dist/optimizers/shape-conversion.d.ts +74 -0
  661. package/dist/optimizers/shape-conversion.js +277 -0
  662. package/dist/optimizers/style-optimizer.d.ts +30 -0
  663. package/dist/optimizers/style-optimizer.js +324 -0
  664. package/dist/optimizers/svg-tree-parser.d.ts +55 -0
  665. package/dist/optimizers/svg-tree-parser.js +352 -0
  666. package/dist/optimizers/transform-collapsing.d.ts +38 -0
  667. package/dist/optimizers/transform-collapsing.js +444 -0
  668. package/dist/optimizers/transform-optimizer.d.ts +65 -0
  669. package/dist/optimizers/transform-optimizer.js +320 -0
  670. package/dist/optimizers/tree-serializer.d.ts +46 -0
  671. package/dist/optimizers/tree-serializer.js +190 -0
  672. package/dist/optimizers/tree-stages.d.ts +27 -0
  673. package/dist/optimizers/tree-stages.js +141 -0
  674. package/dist/optimizers/types.d.ts +207 -0
  675. package/dist/optimizers/types.js +122 -0
  676. package/dist/plugins/color-replacer.d.ts +39 -0
  677. package/dist/plugins/color-replacer.js +126 -0
  678. package/dist/plugins/gradient-optimizer.d.ts +33 -0
  679. package/dist/plugins/gradient-optimizer.js +197 -0
  680. package/dist/plugins/stroke-normalizer.d.ts +33 -0
  681. package/dist/plugins/stroke-normalizer.js +166 -0
  682. package/dist/plugins/watermark-remover.d.ts +32 -0
  683. package/dist/plugins/watermark-remover.js +133 -0
  684. package/dist/processors/svg-processor.d.ts +22 -2
  685. package/dist/processors/svg-processor.js +145 -35
  686. package/dist/services/config.d.ts +4 -0
  687. package/dist/services/config.js +62 -1
  688. package/dist/services/file-watcher.d.ts +1 -1
  689. package/dist/services/file-watcher.js +1 -1
  690. package/dist/services/svg-service.d.ts +4 -0
  691. package/dist/services/svg-service.js +41 -7
  692. package/dist/types/index.d.ts +1 -0
  693. package/dist/types/plugin-system.d.ts +153 -0
  694. package/dist/types/plugin-system.js +5 -0
  695. package/dist/utils/visual-diff.d.ts +154 -0
  696. package/dist/utils/visual-diff.js +278 -0
  697. package/dist/watch.js +0 -2
  698. package/docs/BUG-FIX-REACT-JSX.md +210 -0
  699. package/docs/COMPLETE-ACHIEVEMENT-SUMMARY.md +401 -0
  700. package/docs/MIGRATION-4.0.0.md +271 -0
  701. package/docs/OPTIONAL-DEPENDENCIES.md +161 -0
  702. package/docs/OPTIONAL-DEPS-FIX-V4.0.1.md +309 -0
  703. package/docs/PIPELINE-INTEGRATION.md +406 -0
  704. package/docs/PLUGIN-DEVELOPMENT-GUIDE.md +807 -0
  705. package/docs/QUICK-REFERENCE.md +176 -0
  706. package/docs/SAMPLE-SVGS-TESTING.md +276 -0
  707. package/docs/archive/PHASE-1-ARCHITECTURE.md +345 -0
  708. package/docs/archive/PHASE-1-IMPLEMENTATION.md +307 -0
  709. package/docs/archive/PHASE-1-SUMMARY.md +298 -0
  710. package/docs/archive/PHASE-2-COMPLETE.md +207 -0
  711. package/docs/archive/PHASE-3-SUMMARY.md +149 -0
  712. package/docs/archive/PHASE-4.3-COMMAND-OPTIMIZER.md +323 -0
  713. package/docs/archive/PHASE-4.4-PATH-SIMPLIFICATION.md +81 -0
  714. package/docs/archive/PHASE-4.5-PATH-DEDUPLICATION.md +449 -0
  715. package/docs/archive/PHASE-5.1-SUCCESS-REPORT.md +207 -0
  716. package/docs/archive/PHASE-5.1-TRANSFORM-COLLAPSING.md +362 -0
  717. package/docs/archive/PHASE-6.1-SHAPE-CONVERSION-DESIGN.md +518 -0
  718. package/docs/archive/PHASE-6.2-PLUGIN-SYSTEM-STATUS.md +403 -0
  719. package/docs/archive/PHASE-6.3-FINAL-STATUS.md +193 -0
  720. package/docs/archive/PHASE-6.3-VALIDATION-PROGRESS.md +345 -0
  721. package/docs/archive/PHASE-6.3-VISUAL-DIFF-DESIGN.md +553 -0
  722. package/docs/archive/PHASE-6.3-VISUAL-DIFF-SUMMARY.md +367 -0
  723. package/docs/archive/PHASE-6.3-XML-SERIALIZATION-FIX.md +210 -0
  724. package/docs/archive/RELEASE-NOTES-3.2.0.md +344 -0
  725. package/docs/archive/RELEASE-PREP-3.2.0.md +376 -0
  726. package/docs/performance/PERFORMANCE-RESULTS.md +31 -0
  727. package/docs/performance/REAL-WORLD-BENCHMARKS.md +159 -0
  728. package/package.json +18 -6
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Basic SVG Cleaner
3
+ * Extracts basic cleaning logic from svg-processor for use in optimizer pipeline
4
+ */
5
+ /**
6
+ * Remove XML declarations from SVG content
7
+ */
8
+ export function removeXMLDeclaration(svg, config) {
9
+ if (!config.removeXMLProcInst)
10
+ return svg;
11
+ return svg.replace(/<\?xml.*?\?>/g, '');
12
+ }
13
+ /**
14
+ * Remove px units from width and height attributes for React compatibility
15
+ */
16
+ export function removePxUnits(svg) {
17
+ // Convert width="24px" to width={24} for React
18
+ return svg.replace(/\s(width|height)=["'](\d+)px["']/g, ' $1={$2}');
19
+ }
20
+ /**
21
+ * Remove DOCTYPE declarations from SVG content
22
+ */
23
+ export function removeDoctype(svg, config) {
24
+ if (!config.removeDoctype)
25
+ return svg;
26
+ return svg.replace(/<!DOCTYPE.*?>/g, '');
27
+ }
28
+ /**
29
+ * Remove comments from SVG content
30
+ */
31
+ export function removeComments(svg, config) {
32
+ if (!config.removeComments)
33
+ return svg;
34
+ return svg.replace(/<!--[\s\S]*?-->/g, '');
35
+ }
36
+ /**
37
+ * Normalize whitespace in SVG content
38
+ */
39
+ export function normalizeWhitespace(svg, config) {
40
+ if (!config.normalizeWhitespace)
41
+ return svg;
42
+ return svg
43
+ .replace(/\r?\n|\r/g, '') // Remove line breaks
44
+ .replace(/\s{2,}/g, ' ') // Collapse multiple spaces
45
+ .trim();
46
+ }
47
+ /**
48
+ * Remove metadata elements from SVG content
49
+ */
50
+ export function removeMetadata(svg, config) {
51
+ if (!config.removeMetadata)
52
+ return svg;
53
+ return svg
54
+ .replace(/<metadata[\s\S]*?<\/metadata>/gi, '')
55
+ .replace(/<title[\s\S]*?<\/title>/gi, '')
56
+ .replace(/<desc[\s\S]*?<\/desc>/gi, '');
57
+ }
58
+ /**
59
+ * Convert kebab-case attributes to camelCase for React compatibility
60
+ */
61
+ export function convertToCamelCase(svg, config) {
62
+ if (!config.reactCompatibility)
63
+ return svg;
64
+ const attributeMap = {
65
+ 'fill-rule': 'fillRule',
66
+ 'clip-rule': 'clipRule',
67
+ 'stroke-width': 'strokeWidth',
68
+ 'stroke-linecap': 'strokeLinecap',
69
+ 'stroke-linejoin': 'strokeLinejoin',
70
+ 'stroke-miterlimit': 'strokeMiterlimit',
71
+ 'stroke-dasharray': 'strokeDasharray',
72
+ 'stroke-dashoffset': 'strokeDashoffset',
73
+ 'font-family': 'fontFamily',
74
+ 'font-size': 'fontSize',
75
+ 'font-weight': 'fontWeight',
76
+ 'text-anchor': 'textAnchor',
77
+ 'stop-color': 'stopColor',
78
+ 'stop-opacity': 'stopOpacity',
79
+ 'fill-opacity': 'fillOpacity',
80
+ 'stroke-opacity': 'strokeOpacity',
81
+ };
82
+ let result = svg;
83
+ for (const [kebab, camel] of Object.entries(attributeMap)) {
84
+ const regex = new RegExp(kebab, 'g');
85
+ result = result.replace(regex, camel);
86
+ }
87
+ return result;
88
+ }
89
+ /**
90
+ * Remove unnecessary XML namespace attributes
91
+ */
92
+ export function removeXMLNamespaces(svg, config) {
93
+ if (!config.removeUnnecessaryAttrs)
94
+ return svg;
95
+ // Remove xmlns and xmlns:xlink (React handles these automatically)
96
+ return svg.replace(/\s+xmlns(:xlink)?="[^"]*"/g, '');
97
+ }
98
+ /**
99
+ * Remove inline style attributes
100
+ * Note: This can be aggressive - use with caution
101
+ */
102
+ export function removeInlineStyles(svg, config) {
103
+ // When inlineStyles is true, remove them completely
104
+ // When false (default), convert to React style objects for React compatibility
105
+ if (config.inlineStyles) {
106
+ // Remove style attributes completely
107
+ return svg.replace(/\s+style="[^"]*"/g, '');
108
+ }
109
+ // Convert inline CSS styles to React style objects for React compatibility
110
+ return svg.replace(/\s+style="([^"]*)"/g, (_match, styleString) => {
111
+ // Handle empty style attributes
112
+ if (!styleString.trim()) {
113
+ return '';
114
+ }
115
+ const styles = {};
116
+ // Parse CSS declarations
117
+ const declarations = styleString
118
+ .split(';')
119
+ .map((s) => s.trim())
120
+ .filter((s) => s.length > 0);
121
+ declarations.forEach((declaration) => {
122
+ const [property, value] = declaration
123
+ .split(':')
124
+ .map((s) => s.trim());
125
+ if (property && value) {
126
+ // Convert CSS property names to camelCase (stroke-width → strokeWidth)
127
+ const camelProperty = property.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
128
+ styles[camelProperty] = value;
129
+ }
130
+ });
131
+ // If no valid styles, remove the attribute
132
+ if (Object.keys(styles).length === 0) {
133
+ return '';
134
+ }
135
+ // Generate React inline style object syntax
136
+ const styleEntries = Object.entries(styles)
137
+ .map(([key, value]) => `${key}: '${value}'`)
138
+ .join(', ');
139
+ return ` style={{${styleEntries}}}`;
140
+ });
141
+ }
142
+ /**
143
+ * Shorten hex colors (#ffffff → #fff)
144
+ */
145
+ export function shortenColors(svg, config) {
146
+ if (!config.shortenColors)
147
+ return svg;
148
+ // Match 6-digit hex colors that can be shortened
149
+ return svg.replace(/#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3/gi, '#$1$2$3');
150
+ }
151
+ /**
152
+ * Remove empty containers (g, defs without children or with only whitespace)
153
+ */
154
+ export function removeEmptyContainers(svg, config) {
155
+ if (!config.removeEmptyContainers)
156
+ return svg;
157
+ let result = svg;
158
+ let previousResult = '';
159
+ // Iteratively remove empty containers until no more are found
160
+ while (result !== previousResult) {
161
+ previousResult = result;
162
+ result = result
163
+ .replace(/<g\s*><\/g>/gi, '') // Empty g tags
164
+ .replace(/<g\s*>\s*<\/g>/gi, '') // g tags with only whitespace
165
+ .replace(/<defs\s*><\/defs>/gi, '') // Empty defs tags
166
+ .replace(/<defs\s*>\s*<\/defs>/gi, ''); // defs with only whitespace
167
+ }
168
+ return result;
169
+ }
170
+ /**
171
+ * Remove hidden elements (display:none, opacity:0, visibility:hidden)
172
+ */
173
+ /**
174
+ * Remove hidden elements (display:none, opacity:0, visibility:hidden)
175
+ * NOTE: Disabled because it's too aggressive with regex and breaks complex SVGs.
176
+ * Use tree-based optimization (remove-hidden-empty.ts) instead for safe removal.
177
+ */
178
+ export function removeHiddenElements(svg) {
179
+ // DISABLED: Regex-based removal is too aggressive
180
+ // Tree-based optimizer handles this correctly
181
+ return svg;
182
+ }
183
+ /**
184
+ * Round float numbers to specified precision
185
+ */
186
+ export function roundFloats(svg, config) {
187
+ const precision = config.floatPrecision;
188
+ // Match floating point numbers
189
+ return svg.replace(/(\d+\.\d+)/g, match => {
190
+ const num = parseFloat(match);
191
+ return num.toFixed(precision).replace(/\.?0+$/, ''); // Remove trailing zeros
192
+ });
193
+ }
194
+ /**
195
+ * Sort attributes alphabetically
196
+ */
197
+ export function sortAttributes(svg, config) {
198
+ if (!config.sortAttrs)
199
+ return svg;
200
+ // Match SVG tags with attributes (both self-closing and regular)
201
+ return svg.replace(/<([a-z][a-z0-9]*)\s+([^>]+?)(\/?)>/gi, (_match, tagName, attrs, selfClosing) => {
202
+ // Parse attributes
203
+ const attrPairs = [];
204
+ const attrRegex = /([a-zA-Z][a-zA-Z0-9-]*)="([^"]*)"/g;
205
+ let attrMatch;
206
+ while ((attrMatch = attrRegex.exec(attrs)) !== null) {
207
+ attrPairs.push([attrMatch[1], attrMatch[2]]);
208
+ }
209
+ // Sort alphabetically
210
+ attrPairs.sort((a, b) => a[0].localeCompare(b[0]));
211
+ // Reconstruct tag, preserving self-closing status
212
+ const sortedAttrs = attrPairs
213
+ .map(([key, val]) => `${key}="${val}"`)
214
+ .join(' ');
215
+ return `<${tagName} ${sortedAttrs}${selfClosing}>`;
216
+ });
217
+ }
218
+ /**
219
+ * Basic cleaning stage - combines all basic cleaners
220
+ * This is the main entry point for the optimizer pipeline
221
+ */
222
+ export async function basicCleaningStage(svg, config) {
223
+ let result = svg;
224
+ // Apply cleaners in sequence
225
+ result = removeXMLDeclaration(result, config);
226
+ result = removeDoctype(result, config);
227
+ result = removeComments(result, config);
228
+ result = removeMetadata(result, config);
229
+ result = normalizeWhitespace(result, config);
230
+ result = removeXMLNamespaces(result, config);
231
+ result = removeInlineStyles(result, config);
232
+ result = convertToCamelCase(result, config);
233
+ result = removePxUnits(result); // Remove px units for React compatibility
234
+ result = shortenColors(result, config);
235
+ result = roundFloats(result, config);
236
+ result = removeEmptyContainers(result, config);
237
+ result = removeHiddenElements(result);
238
+ result = sortAttributes(result, config);
239
+ return result;
240
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Collapse Useless Groups
3
+ * Remove <g> with no attrs and single child
4
+ * Merge attrs upward if safe (no conflicts)
5
+ */
6
+ import type { SVGNode } from './svg-tree-parser.js';
7
+ /**
8
+ * Collapse useless groups in the tree
9
+ * A group is useless if:
10
+ * 1. It has no attributes and exactly one child
11
+ * 2. It has attributes that don't conflict with its single child
12
+ */
13
+ export declare function collapseUselessGroups(root: SVGNode): {
14
+ collapsedCount: number;
15
+ collapsedNodes: string[];
16
+ };
17
+ /**
18
+ * Collapse useless groups stage
19
+ */
20
+ export declare function collapseUselessGroupsStage(root: SVGNode): {
21
+ modified: boolean;
22
+ stats: {
23
+ collapsedCount: number;
24
+ collapsedNodes: string[];
25
+ };
26
+ };
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Collapse Useless Groups
3
+ * Remove <g> with no attrs and single child
4
+ * Merge attrs upward if safe (no conflicts)
5
+ */
6
+ import { traverseTree, replaceNode } from './svg-tree-parser.js';
7
+ /**
8
+ * Check if a group is useless (no attributes and single child)
9
+ */
10
+ function isUselessGroup(node) {
11
+ return (node.tag === 'g' &&
12
+ node.attrs.size === 0 &&
13
+ node.children.length === 1 &&
14
+ !node.content);
15
+ }
16
+ /**
17
+ * Check if attributes can be safely merged from child to parent
18
+ * Returns true if no conflicts exist
19
+ */
20
+ function canMergeAttributes(parent, child) {
21
+ // Check for attribute conflicts
22
+ for (const [key] of child.attrs.entries()) {
23
+ if (parent.attrs.has(key)) {
24
+ // Conflict: both have the same attribute
25
+ return false;
26
+ }
27
+ }
28
+ return true;
29
+ }
30
+ /**
31
+ * Merge child attributes to parent
32
+ */
33
+ function mergeAttributesToParent(parent, child) {
34
+ for (const [key, value] of child.attrs.entries()) {
35
+ if (!parent.attrs.has(key)) {
36
+ parent.attrs.set(key, value);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Collapse useless groups in the tree
42
+ * A group is useless if:
43
+ * 1. It has no attributes and exactly one child
44
+ * 2. It has attributes that don't conflict with its single child
45
+ */
46
+ export function collapseUselessGroups(root) {
47
+ let collapsedCount = 0;
48
+ const collapsedNodes = [];
49
+ // We need to collect nodes to collapse first
50
+ // to avoid modifying tree during traversal
51
+ const nodesToCollapse = [];
52
+ traverseTree(root, node => {
53
+ if (node.tag === 'g') {
54
+ // Case 1: Group with no attributes and single child
55
+ if (isUselessGroup(node)) {
56
+ nodesToCollapse.push(node);
57
+ }
58
+ // Case 2: Group with single child and no attribute conflicts
59
+ else if (node.children.length === 1 && !node.content) {
60
+ const child = node.children[0];
61
+ if (canMergeAttributes(child, node)) {
62
+ nodesToCollapse.push(node);
63
+ }
64
+ }
65
+ }
66
+ });
67
+ // Collapse collected nodes
68
+ for (const node of nodesToCollapse) {
69
+ if (!node.parent)
70
+ continue;
71
+ const child = node.children[0];
72
+ // For groups with no attrs, just replace group with child
73
+ if (node.attrs.size === 0) {
74
+ if (replaceNode(node, child)) {
75
+ const id = node.attrs.get('id') || 'anonymous';
76
+ collapsedNodes.push(id);
77
+ collapsedCount++;
78
+ }
79
+ }
80
+ // For groups with attrs, merge them to child first
81
+ else if (canMergeAttributes(child, node)) {
82
+ mergeAttributesToParent(child, node);
83
+ if (replaceNode(node, child)) {
84
+ const id = node.attrs.get('id') || 'anonymous';
85
+ collapsedNodes.push(id);
86
+ collapsedCount++;
87
+ }
88
+ }
89
+ }
90
+ return {
91
+ collapsedCount,
92
+ collapsedNodes,
93
+ };
94
+ }
95
+ /**
96
+ * Collapse useless groups stage
97
+ */
98
+ export function collapseUselessGroupsStage(root) {
99
+ const result = collapseUselessGroups(root);
100
+ return {
101
+ modified: result.collapsedCount > 0,
102
+ stats: result,
103
+ };
104
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Path Command Optimizer (Phase 4.3)
3
+ *
4
+ * Goal: Achieve 50-70% reduction on complex paths with smart curve transformation
5
+ *
6
+ * Main features:
7
+ * 1. Curve shortening (C→S, C→Q, Q→T)
8
+ * 2. Smart command substitution (C/Q→L when straight)
9
+ * 3. Relative/Absolute re-evaluation after changes
10
+ * 4. Configurable tolerance based on optimization level
11
+ *
12
+ * Expected improvement: 10-25% additional reduction on complex icons
13
+ */
14
+ import type { PathCommand } from './path-parser.js';
15
+ /**
16
+ * Optimize path commands by transforming curves to simpler forms
17
+ *
18
+ * Priority:
19
+ * 1. C → S (smooth cubic)
20
+ * 2. C → Q (cubic to quadratic)
21
+ * 3. Q → T (smooth quadratic)
22
+ * 4. C/Q → L (curve to line when straight)
23
+ * 5. Re-evaluate absolute/relative after changes
24
+ */
25
+ export declare function optimizeCommands(commands: PathCommand[], tolerance?: number, precision?: number): {
26
+ commands: PathCommand[];
27
+ stats: {
28
+ convertedCtoS: number;
29
+ convertedCtoQ: number;
30
+ convertedQtoT: number;
31
+ convertedCurveToLine: number;
32
+ reoptimizedAbsRel: number;
33
+ };
34
+ };
35
+ /**
36
+ * Command optimization stage for pipeline integration
37
+ * Applies curve shortening, smart substitution, and re-optimization
38
+ */
39
+ export declare function commandOptimizationStage(commands: PathCommand[], tolerance?: number, precision?: number): {
40
+ commands: PathCommand[];
41
+ stats: {
42
+ convertedCtoS: number;
43
+ convertedCtoQ: number;
44
+ convertedQtoT: number;
45
+ convertedCurveToLine: number;
46
+ reoptimizedAbsRel: number;
47
+ };
48
+ };