svger-cli 3.1.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (729) hide show
  1. package/CHANGELOG.md +399 -0
  2. package/README.md +448 -37
  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/index.d.ts +4 -0
  627. package/dist/index.js +4 -0
  628. package/dist/integrations/babel.d.ts +1 -1
  629. package/dist/integrations/babel.js +31 -12
  630. package/dist/integrations/jest-preset.js +1 -1
  631. package/dist/integrations/rollup.js +29 -10
  632. package/dist/integrations/vite.js +29 -14
  633. package/dist/integrations/webpack.d.ts +1 -0
  634. package/dist/integrations/webpack.js +29 -10
  635. package/dist/optimizers/advanced-stages.d.ts +40 -0
  636. package/dist/optimizers/advanced-stages.js +297 -0
  637. package/dist/optimizers/basic-cleaner.d.ts +68 -0
  638. package/dist/optimizers/basic-cleaner.js +198 -0
  639. package/dist/optimizers/collapse-useless-groups.d.ts +26 -0
  640. package/dist/optimizers/collapse-useless-groups.js +104 -0
  641. package/dist/optimizers/command-optimizer.d.ts +48 -0
  642. package/dist/optimizers/command-optimizer.js +299 -0
  643. package/dist/optimizers/index.d.ts +14 -0
  644. package/dist/optimizers/index.js +15 -0
  645. package/dist/optimizers/move-attrs-to-parent.d.ts +31 -0
  646. package/dist/optimizers/move-attrs-to-parent.js +115 -0
  647. package/dist/optimizers/numeric-optimizer.d.ts +43 -0
  648. package/dist/optimizers/numeric-optimizer.js +383 -0
  649. package/dist/optimizers/optimizer-pipeline.d.ts +39 -0
  650. package/dist/optimizers/optimizer-pipeline.js +81 -0
  651. package/dist/optimizers/path-deduplicator.d.ts +37 -0
  652. package/dist/optimizers/path-deduplicator.js +406 -0
  653. package/dist/optimizers/path-parser.d.ts +60 -0
  654. package/dist/optimizers/path-parser.js +428 -0
  655. package/dist/optimizers/path-shortener.d.ts +41 -0
  656. package/dist/optimizers/path-shortener.js +274 -0
  657. package/dist/optimizers/path-simplifier.d.ts +30 -0
  658. package/dist/optimizers/path-simplifier.js +326 -0
  659. package/dist/optimizers/remove-hidden-empty.d.ts +29 -0
  660. package/dist/optimizers/remove-hidden-empty.js +130 -0
  661. package/dist/optimizers/remove-unused-defs.d.ts +24 -0
  662. package/dist/optimizers/remove-unused-defs.js +132 -0
  663. package/dist/optimizers/shape-conversion.d.ts +74 -0
  664. package/dist/optimizers/shape-conversion.js +277 -0
  665. package/dist/optimizers/style-optimizer.d.ts +30 -0
  666. package/dist/optimizers/style-optimizer.js +324 -0
  667. package/dist/optimizers/svg-tree-parser.d.ts +55 -0
  668. package/dist/optimizers/svg-tree-parser.js +352 -0
  669. package/dist/optimizers/transform-collapsing.d.ts +38 -0
  670. package/dist/optimizers/transform-collapsing.js +444 -0
  671. package/dist/optimizers/transform-optimizer.d.ts +65 -0
  672. package/dist/optimizers/transform-optimizer.js +320 -0
  673. package/dist/optimizers/tree-serializer.d.ts +46 -0
  674. package/dist/optimizers/tree-serializer.js +190 -0
  675. package/dist/optimizers/tree-stages.d.ts +27 -0
  676. package/dist/optimizers/tree-stages.js +141 -0
  677. package/dist/optimizers/types.d.ts +207 -0
  678. package/dist/optimizers/types.js +122 -0
  679. package/dist/plugins/color-replacer.d.ts +39 -0
  680. package/dist/plugins/color-replacer.js +126 -0
  681. package/dist/plugins/gradient-optimizer.d.ts +33 -0
  682. package/dist/plugins/gradient-optimizer.js +197 -0
  683. package/dist/plugins/stroke-normalizer.d.ts +33 -0
  684. package/dist/plugins/stroke-normalizer.js +166 -0
  685. package/dist/plugins/watermark-remover.d.ts +32 -0
  686. package/dist/plugins/watermark-remover.js +133 -0
  687. package/dist/processors/svg-processor.d.ts +17 -2
  688. package/dist/processors/svg-processor.js +108 -32
  689. package/dist/services/config.d.ts +4 -0
  690. package/dist/services/config.js +62 -1
  691. package/dist/services/file-watcher.d.ts +1 -1
  692. package/dist/services/file-watcher.js +1 -1
  693. package/dist/services/svg-service.d.ts +6 -0
  694. package/dist/services/svg-service.js +66 -16
  695. package/dist/types/index.d.ts +1 -0
  696. package/dist/types/plugin-system.d.ts +153 -0
  697. package/dist/types/plugin-system.js +5 -0
  698. package/dist/utils/visual-diff.d.ts +150 -0
  699. package/dist/utils/visual-diff.js +247 -0
  700. package/dist/watch.js +0 -2
  701. package/docs/COMPLETE-ACHIEVEMENT-SUMMARY.md +401 -0
  702. package/docs/MIGRATION-4.0.0.md +271 -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 +16 -6
  729. package/DEVELOPMENT.md +0 -353
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Tree-Based Optimization Stages
3
+ * Wrapper for tree-based optimizations in the optimizer pipeline
4
+ * Handles parse → optimize → serialize cycle
5
+ */
6
+ import { parseSVG } from './svg-tree-parser.js';
7
+ import { serializeSVGMinified } from './tree-serializer.js';
8
+ import { removeUnusedDefsStage } from './remove-unused-defs.js';
9
+ import { collapseUselessGroupsStage } from './collapse-useless-groups.js';
10
+ import { moveAttributesToParentStage } from './move-attrs-to-parent.js';
11
+ import { removeHiddenAndEmptyElementsStage } from './remove-hidden-empty.js';
12
+ /**
13
+ * Tree-based optimization stage: Remove unused defs
14
+ */
15
+ export async function treeRemoveUnusedDefsStage(svg, config) {
16
+ // Skip if not enabled for this level
17
+ if (config.level === 'none' || config.level === 'basic') {
18
+ return svg;
19
+ }
20
+ try {
21
+ const tree = parseSVG(svg);
22
+ if (!tree)
23
+ return svg;
24
+ const result = removeUnusedDefsStage(tree);
25
+ if (result.modified) {
26
+ return serializeSVGMinified(tree);
27
+ }
28
+ return svg;
29
+ }
30
+ catch (error) {
31
+ console.warn('Tree optimization (remove-unused-defs) failed:', error);
32
+ return svg;
33
+ }
34
+ }
35
+ /**
36
+ * Tree-based optimization stage: Collapse useless groups
37
+ */
38
+ export async function treeCollapseGroupsStage(svg, config) {
39
+ // Only enabled for aggressive and maximum
40
+ if (!config.collapseGroups) {
41
+ return svg;
42
+ }
43
+ try {
44
+ const tree = parseSVG(svg);
45
+ if (!tree)
46
+ return svg;
47
+ const result = collapseUselessGroupsStage(tree);
48
+ if (result.modified) {
49
+ return serializeSVGMinified(tree);
50
+ }
51
+ return svg;
52
+ }
53
+ catch (error) {
54
+ console.warn('Tree optimization (collapse-groups) failed:', error);
55
+ return svg;
56
+ }
57
+ }
58
+ /**
59
+ * Tree-based optimization stage: Move attributes to parent
60
+ */
61
+ export async function treeMoveAttributesToParentStage(svg, config) {
62
+ // Only enabled for aggressive and maximum
63
+ if (config.level === 'none' || config.level === 'basic') {
64
+ return svg;
65
+ }
66
+ try {
67
+ const tree = parseSVG(svg);
68
+ if (!tree)
69
+ return svg;
70
+ const result = moveAttributesToParentStage(tree);
71
+ if (result.modified) {
72
+ return serializeSVGMinified(tree);
73
+ }
74
+ return svg;
75
+ }
76
+ catch (error) {
77
+ console.warn('Tree optimization (move-attrs-to-parent) failed:', error);
78
+ return svg;
79
+ }
80
+ }
81
+ /**
82
+ * Tree-based optimization stage: Remove hidden and empty elements
83
+ */
84
+ export async function treeRemoveHiddenEmptyStage(svg, config) {
85
+ // Enabled for balanced and above
86
+ if (!config.removeHiddenElements) {
87
+ return svg;
88
+ }
89
+ try {
90
+ const tree = parseSVG(svg);
91
+ if (!tree)
92
+ return svg;
93
+ const result = removeHiddenAndEmptyElementsStage(tree);
94
+ if (result.modified) {
95
+ return serializeSVGMinified(tree);
96
+ }
97
+ return svg;
98
+ }
99
+ catch (error) {
100
+ console.warn('Tree optimization (remove-hidden-empty) failed:', error);
101
+ return svg;
102
+ }
103
+ }
104
+ /**
105
+ * Combined tree-based optimization stage
106
+ * Applies all tree optimizations in one pass for efficiency
107
+ */
108
+ export async function treeOptimizationStage(svg, config) {
109
+ // Skip tree optimizations for none and basic levels
110
+ if (config.level === 'none' || config.level === 'basic') {
111
+ return svg;
112
+ }
113
+ try {
114
+ const tree = parseSVG(svg);
115
+ if (!tree)
116
+ return svg;
117
+ let modified = false;
118
+ // Apply all tree-based optimizations
119
+ const stages = [
120
+ removeUnusedDefsStage,
121
+ removeHiddenAndEmptyElementsStage,
122
+ moveAttributesToParentStage,
123
+ collapseUselessGroupsStage,
124
+ ];
125
+ for (const stage of stages) {
126
+ const result = stage(tree);
127
+ if (result.modified) {
128
+ modified = true;
129
+ }
130
+ }
131
+ // Serialize only if modified
132
+ if (modified) {
133
+ return serializeSVGMinified(tree);
134
+ }
135
+ return svg;
136
+ }
137
+ catch (error) {
138
+ console.warn('Tree optimization failed:', error);
139
+ return svg;
140
+ }
141
+ }
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Type definitions for Advanced SVG Optimizer
3
+ */
4
+ /**
5
+ * Optimization level enum
6
+ */
7
+ export declare enum OptLevel {
8
+ NONE = "none",
9
+ BASIC = "basic",
10
+ BALANCED = "balanced",
11
+ AGGRESSIVE = "aggressive",
12
+ MAXIMUM = "maximum"
13
+ }
14
+ /**
15
+ * Optimization configuration interface
16
+ */
17
+ export interface OptConfig {
18
+ /**
19
+ * Optimization level
20
+ * @default 'balanced'
21
+ */
22
+ level: OptLevel;
23
+ /**
24
+ * Float precision for decimal numbers (1-4)
25
+ * @default 3
26
+ */
27
+ floatPrecision: 1 | 2 | 3 | 4;
28
+ /**
29
+ * Path simplification tolerance (0-1)
30
+ * Higher values = more aggressive simplification
31
+ * @default 0.5
32
+ */
33
+ pathTolerance: number;
34
+ /**
35
+ * Remove viewBox attribute
36
+ * @default false
37
+ */
38
+ removeViewBox: boolean;
39
+ /**
40
+ * Remove unnecessary XML declarations and metadata
41
+ * @default true
42
+ */
43
+ removeMetadata: boolean;
44
+ /**
45
+ * Remove comments
46
+ * @default true
47
+ */
48
+ removeComments: boolean;
49
+ /**
50
+ * Normalize whitespace
51
+ * @default true
52
+ */
53
+ normalizeWhitespace: boolean;
54
+ /**
55
+ * Remove unnecessary attributes
56
+ * @default true
57
+ */
58
+ removeUnnecessaryAttrs: boolean;
59
+ /**
60
+ * Convert colors to shortest form (#ffffff → #fff)
61
+ * @default true
62
+ */
63
+ shortenColors: boolean;
64
+ /**
65
+ * Merge paths when possible
66
+ * @default false (basic/balanced), true (aggressive/maximum)
67
+ */
68
+ mergePaths: boolean;
69
+ /**
70
+ * Remove hidden elements (opacity:0, display:none)
71
+ * @default false (basic), true (balanced+)
72
+ */
73
+ removeHiddenElements: boolean;
74
+ /**
75
+ * Convert style attributes to presentation attributes
76
+ * @default false
77
+ */
78
+ inlineStyles: boolean;
79
+ /**
80
+ * Remove empty containers (g, defs without children)
81
+ * @default true
82
+ */
83
+ removeEmptyContainers: boolean;
84
+ /**
85
+ * Collapse useless groups
86
+ * @default false (basic/balanced), true (aggressive/maximum)
87
+ */
88
+ collapseGroups: boolean;
89
+ /**
90
+ * Convert attributes to camelCase for React compatibility
91
+ * @default true
92
+ */
93
+ reactCompatibility: boolean;
94
+ /**
95
+ * Sort attributes alphabetically
96
+ * @default false
97
+ */
98
+ sortAttrs: boolean;
99
+ /**
100
+ * Remove DOCTYPE declarations
101
+ * @default true
102
+ */
103
+ removeDoctype: boolean;
104
+ /**
105
+ * Remove XML processing instructions
106
+ * @default true
107
+ */
108
+ removeXMLProcInst: boolean;
109
+ /**
110
+ * Enable numeric optimization (coordinate precision, etc.)
111
+ * @default true
112
+ */
113
+ enableNumericOptimization: boolean;
114
+ /**
115
+ * Enable style optimization (color shortening, unit removal, etc.)
116
+ * @default true
117
+ */
118
+ enableStyleOptimization: boolean;
119
+ /**
120
+ * Enable transform optimization (matrix simplification, etc.)
121
+ * @default false (basic/balanced), true (aggressive/maximum)
122
+ */
123
+ enableTransformOptimization: boolean;
124
+ /**
125
+ * Enable transform collapsing (propagate, bake into coordinates, collapse groups)
126
+ * @default false (basic/balanced), true (aggressive/maximum)
127
+ */
128
+ enableTransformCollapsing: boolean;
129
+ /**
130
+ * Enable path optimization (command merging, H/V conversion, etc.)
131
+ * @default false (basic/balanced), true (aggressive/maximum)
132
+ */
133
+ enablePathOptimization: boolean;
134
+ /**
135
+ * Enable path simplification (Douglas-Peucker, Visvalingam-Whyatt)
136
+ * @default false (basic/balanced/aggressive), true (maximum)
137
+ */
138
+ enablePathSimplification: boolean;
139
+ /**
140
+ * Enable shape conversion (rect/polygon/polyline → path)
141
+ * @default false (basic/balanced), true (aggressive/maximum)
142
+ */
143
+ shapeConversion: boolean;
144
+ /**
145
+ * Minimum bytes to save for shape conversion
146
+ * @default 5 (aggressive), 0 (maximum)
147
+ */
148
+ shapeConversionThreshold: number;
149
+ /**
150
+ * Optimization level for stage-based processing
151
+ * @default 'BALANCED'
152
+ */
153
+ optimizationLevel: OptLevel;
154
+ /**
155
+ * Custom plugins (future extension point)
156
+ */
157
+ plugins?: OptimizationPlugin[];
158
+ }
159
+ /**
160
+ * Optimization plugin interface (for future extensibility)
161
+ */
162
+ export interface OptimizationPlugin {
163
+ name: string;
164
+ stage: 'pre-parse' | 'tree' | 'post-serialize';
165
+ execute: (input: string | OptimizedTree, config: OptConfig) => string | OptimizedTree | Promise<string | OptimizedTree>;
166
+ }
167
+ /**
168
+ * Optimized tree node (lightweight virtual DOM)
169
+ */
170
+ export interface OptimizedNode {
171
+ type: 'element' | 'text' | 'comment';
172
+ tagName?: string;
173
+ attributes?: Record<string, string>;
174
+ children?: OptimizedNode[];
175
+ textContent?: string;
176
+ commentText?: string;
177
+ }
178
+ /**
179
+ * Optimized tree structure
180
+ */
181
+ export interface OptimizedTree {
182
+ root: OptimizedNode;
183
+ metadata: {
184
+ originalSize: number;
185
+ optimizedSize: number;
186
+ reductionPercent: number;
187
+ stages: string[];
188
+ };
189
+ }
190
+ /**
191
+ * Optimization stage function type
192
+ */
193
+ export type OptimizationStage = (svgString: string, config: OptConfig) => Promise<string> | string;
194
+ /**
195
+ * Optimization result
196
+ */
197
+ export interface OptimizationResult {
198
+ optimizedSvg: string;
199
+ originalSize: number;
200
+ optimizedSize: number;
201
+ reductionPercent: number;
202
+ stagesApplied: string[];
203
+ }
204
+ /**
205
+ * Get default optimization config based on level
206
+ */
207
+ export declare function getDefaultOptConfig(level: OptLevel): OptConfig;
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Type definitions for Advanced SVG Optimizer
3
+ */
4
+ /**
5
+ * Optimization level enum
6
+ */
7
+ export var OptLevel;
8
+ (function (OptLevel) {
9
+ OptLevel["NONE"] = "none";
10
+ OptLevel["BASIC"] = "basic";
11
+ OptLevel["BALANCED"] = "balanced";
12
+ OptLevel["AGGRESSIVE"] = "aggressive";
13
+ OptLevel["MAXIMUM"] = "maximum";
14
+ })(OptLevel || (OptLevel = {}));
15
+ /**
16
+ * Get default optimization config based on level
17
+ */
18
+ export function getDefaultOptConfig(level) {
19
+ const baseConfig = {
20
+ level,
21
+ floatPrecision: 3,
22
+ pathTolerance: 0.5,
23
+ removeViewBox: false,
24
+ removeMetadata: true,
25
+ removeComments: true,
26
+ normalizeWhitespace: true,
27
+ removeUnnecessaryAttrs: true,
28
+ shortenColors: true,
29
+ mergePaths: false,
30
+ removeHiddenElements: false,
31
+ inlineStyles: false,
32
+ removeEmptyContainers: true,
33
+ collapseGroups: false,
34
+ reactCompatibility: true,
35
+ sortAttrs: false,
36
+ removeDoctype: true,
37
+ removeXMLProcInst: true,
38
+ enableNumericOptimization: true,
39
+ enableStyleOptimization: true,
40
+ enableTransformOptimization: false,
41
+ enableTransformCollapsing: false,
42
+ enablePathOptimization: false,
43
+ enablePathSimplification: false,
44
+ shapeConversion: false,
45
+ shapeConversionThreshold: 5,
46
+ optimizationLevel: level,
47
+ };
48
+ switch (level) {
49
+ case OptLevel.NONE:
50
+ return {
51
+ ...baseConfig,
52
+ removeMetadata: false,
53
+ removeComments: false,
54
+ normalizeWhitespace: false,
55
+ removeUnnecessaryAttrs: false,
56
+ shortenColors: false,
57
+ removeEmptyContainers: false,
58
+ removeDoctype: false,
59
+ removeXMLProcInst: false,
60
+ enableNumericOptimization: false,
61
+ enableStyleOptimization: false,
62
+ enableTransformOptimization: false,
63
+ enableTransformCollapsing: false,
64
+ enablePathOptimization: false,
65
+ enablePathSimplification: false,
66
+ };
67
+ case OptLevel.BASIC:
68
+ return baseConfig;
69
+ case OptLevel.BALANCED:
70
+ return {
71
+ ...baseConfig,
72
+ removeHiddenElements: true,
73
+ floatPrecision: 3,
74
+ enableNumericOptimization: true,
75
+ enableStyleOptimization: true,
76
+ enableTransformOptimization: false,
77
+ enableTransformCollapsing: false,
78
+ enablePathOptimization: false,
79
+ };
80
+ case OptLevel.AGGRESSIVE:
81
+ return {
82
+ ...baseConfig,
83
+ removeHiddenElements: true,
84
+ mergePaths: true,
85
+ collapseGroups: true,
86
+ floatPrecision: 2,
87
+ pathTolerance: 0.7,
88
+ sortAttrs: true,
89
+ enableNumericOptimization: true,
90
+ enableStyleOptimization: true,
91
+ enableTransformOptimization: true,
92
+ enableTransformCollapsing: true,
93
+ enablePathOptimization: true,
94
+ // DISABLED: Shape conversion conflicts with floatPrecision=2
95
+ // Causes visual regressions (coordinates get rounded before conversion)
96
+ shapeConversion: false,
97
+ shapeConversionThreshold: 5,
98
+ };
99
+ case OptLevel.MAXIMUM:
100
+ return {
101
+ ...baseConfig,
102
+ removeHiddenElements: true,
103
+ mergePaths: true,
104
+ collapseGroups: true,
105
+ inlineStyles: true,
106
+ floatPrecision: 1,
107
+ pathTolerance: 0.9,
108
+ sortAttrs: true,
109
+ removeViewBox: false, // Keep viewBox even at maximum for compatibility
110
+ enableNumericOptimization: true,
111
+ enableStyleOptimization: true,
112
+ enableTransformOptimization: true,
113
+ enableTransformCollapsing: true,
114
+ enablePathOptimization: true,
115
+ enablePathSimplification: true,
116
+ shapeConversion: true,
117
+ shapeConversionThreshold: 0, // Convert even 1-byte savings
118
+ };
119
+ default:
120
+ return baseConfig;
121
+ }
122
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Example Plugin: Color Replacer with Visual Validation
3
+ * Demonstrates Phase 6.2 plugin system with pipeline hooks
4
+ */
5
+ import type { EnhancedPlugin } from '../types/plugin-system.js';
6
+ /**
7
+ * Color Replacer Plugin
8
+ * Replaces specified colors in SVG while ensuring visual quality
9
+ */
10
+ export declare const colorReplacerPlugin: EnhancedPlugin;
11
+ /**
12
+ * Example usage:
13
+ *
14
+ * import { enhancedPluginManager } from './core/enhanced-plugin-manager.js';
15
+ * import { colorReplacerPlugin } from './plugins/color-replacer.js';
16
+ *
17
+ * // Register plugin
18
+ * await enhancedPluginManager.registerPlugin(colorReplacerPlugin);
19
+ *
20
+ * // Enable with options
21
+ * enhancedPluginManager.enablePlugin('color-replacer', {
22
+ * colors: {
23
+ * '#ff0000': '#00ff00', // Red → Green
24
+ * '#0000ff': '#ffff00', // Blue → Yellow
25
+ * },
26
+ * includeStyles: true,
27
+ * });
28
+ *
29
+ * // Process SVG through pipeline with visual validation
30
+ * const result = await enhancedPluginManager.processWithHooks(
31
+ * svgContent,
32
+ * config
33
+ * );
34
+ *
35
+ * // Check validation results
36
+ * if (result.validationResults.some(v => !v.validationPassed)) {
37
+ * console.error('Visual validation failed!');
38
+ * }
39
+ */
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Example Plugin: Color Replacer with Visual Validation
3
+ * Demonstrates Phase 6.2 plugin system with pipeline hooks
4
+ */
5
+ /**
6
+ * Color Replacer Plugin
7
+ * Replaces specified colors in SVG while ensuring visual quality
8
+ */
9
+ export const colorReplacerPlugin = {
10
+ name: 'color-replacer',
11
+ version: '1.0.0',
12
+ description: 'Replace colors in SVG with visual validation',
13
+ author: 'svger-cli',
14
+ hooks: {
15
+ 'after-parse': async (context) => {
16
+ const options = context.metadata.get('pluginOptions');
17
+ if (!options || !options.colors) {
18
+ return { content: context.content };
19
+ }
20
+ let modifiedContent = context.content;
21
+ // Replace colors
22
+ for (const [oldColor, newColor] of Object.entries(options.colors)) {
23
+ // Replace in fill attributes
24
+ const fillRegex = new RegExp(`fill=["']${escapeRegex(oldColor)}["']`, options.caseSensitive ? 'g' : 'gi');
25
+ modifiedContent = modifiedContent.replace(fillRegex, `fill="${newColor}"`);
26
+ // Replace in stroke attributes
27
+ const strokeRegex = new RegExp(`stroke=["']${escapeRegex(oldColor)}["']`, options.caseSensitive ? 'g' : 'gi');
28
+ modifiedContent = modifiedContent.replace(strokeRegex, `stroke="${newColor}"`);
29
+ // Replace in style attributes if enabled
30
+ if (options.includeStyles) {
31
+ const styleRegex = new RegExp(`(fill|stroke):\\s*${escapeRegex(oldColor)}`, options.caseSensitive ? 'g' : 'gi');
32
+ modifiedContent = modifiedContent.replace(styleRegex, `$1:${newColor}`);
33
+ }
34
+ }
35
+ return {
36
+ content: modifiedContent,
37
+ metadata: {
38
+ colorsReplaced: Object.keys(options.colors).length,
39
+ },
40
+ };
41
+ },
42
+ },
43
+ // Enable visual validation - colors should change but structure stays the same
44
+ validation: {
45
+ enabled: true,
46
+ maxDiffPercent: 100, // Allow 100% color change, but structure must be identical
47
+ options: {
48
+ diff: {
49
+ threshold: 0.1, // Strict threshold for structural changes
50
+ includeAA: false,
51
+ },
52
+ },
53
+ },
54
+ configSchema: {
55
+ colors: {
56
+ type: 'object',
57
+ required: true,
58
+ description: 'Color mapping (old color → new color)',
59
+ },
60
+ includeStyles: {
61
+ type: 'boolean',
62
+ required: false,
63
+ default: false,
64
+ description: 'Whether to replace colors in style attributes',
65
+ },
66
+ caseSensitive: {
67
+ type: 'boolean',
68
+ required: false,
69
+ default: false,
70
+ description: 'Case-sensitive color matching',
71
+ },
72
+ },
73
+ validate(options) {
74
+ if (!options) {
75
+ return { valid: false, errors: ['Options are required'] };
76
+ }
77
+ if (!options.colors || typeof options.colors !== 'object') {
78
+ return {
79
+ valid: false,
80
+ errors: ['colors property is required and must be an object'],
81
+ };
82
+ }
83
+ if (Object.keys(options.colors).length === 0) {
84
+ return {
85
+ valid: false,
86
+ errors: ['At least one color mapping is required'],
87
+ };
88
+ }
89
+ return { valid: true, errors: [] };
90
+ },
91
+ };
92
+ /**
93
+ * Escape special regex characters
94
+ */
95
+ function escapeRegex(str) {
96
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
97
+ }
98
+ /**
99
+ * Example usage:
100
+ *
101
+ * import { enhancedPluginManager } from './core/enhanced-plugin-manager.js';
102
+ * import { colorReplacerPlugin } from './plugins/color-replacer.js';
103
+ *
104
+ * // Register plugin
105
+ * await enhancedPluginManager.registerPlugin(colorReplacerPlugin);
106
+ *
107
+ * // Enable with options
108
+ * enhancedPluginManager.enablePlugin('color-replacer', {
109
+ * colors: {
110
+ * '#ff0000': '#00ff00', // Red → Green
111
+ * '#0000ff': '#ffff00', // Blue → Yellow
112
+ * },
113
+ * includeStyles: true,
114
+ * });
115
+ *
116
+ * // Process SVG through pipeline with visual validation
117
+ * const result = await enhancedPluginManager.processWithHooks(
118
+ * svgContent,
119
+ * config
120
+ * );
121
+ *
122
+ * // Check validation results
123
+ * if (result.validationResults.some(v => !v.validationPassed)) {
124
+ * console.error('Visual validation failed!');
125
+ * }
126
+ */
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Gradient Optimizer Plugin
3
+ * Removes redundant gradient stops and optimizes gradient definitions
4
+ *
5
+ * Features:
6
+ * - Remove duplicate gradient stops
7
+ * - Merge gradients with identical stops
8
+ * - Remove unused gradient definitions
9
+ * - Optimize stop colors (round precision)
10
+ *
11
+ * Visual tolerance: 2% (gradients should look nearly identical)
12
+ */
13
+ import type { EnhancedPlugin } from '../types/plugin-system.js';
14
+ /**
15
+ * Configuration for gradient optimizer
16
+ */
17
+ export interface GradientOptimizerOptions {
18
+ /** Remove duplicate stops (default: true) */
19
+ removeDuplicates?: boolean;
20
+ /** Merge identical gradients (default: true) */
21
+ mergeIdentical?: boolean;
22
+ /** Remove unused gradients (default: true) */
23
+ removeUnused?: boolean;
24
+ /** Color precision (number of decimals, default: 2) */
25
+ colorPrecision?: number;
26
+ /** Offset precision (number of decimals, default: 2) */
27
+ offsetPrecision?: number;
28
+ }
29
+ /**
30
+ * Gradient Optimizer Plugin
31
+ */
32
+ export declare const gradientOptimizerPlugin: EnhancedPlugin;
33
+ export default gradientOptimizerPlugin;