basicons 1.0.6 → 1.0.7

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 (329) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/basicons/accessibility-2.svg +3 -0
  3. data/app/assets/images/basicons/accessibility.svg +3 -0
  4. data/app/assets/images/basicons/activity-graph.svg +3 -0
  5. data/app/assets/images/basicons/activity-heart-2.svg +4 -0
  6. data/app/assets/images/basicons/activity-heart.svg +3 -0
  7. data/app/assets/images/basicons/alarm-clock-2.svg +3 -0
  8. data/app/assets/images/basicons/alarm-clock.svg +3 -0
  9. data/app/assets/images/basicons/align-center.svg +3 -0
  10. data/app/assets/images/basicons/align-justify.svg +3 -0
  11. data/app/assets/images/basicons/align-left.svg +3 -0
  12. data/app/assets/images/basicons/align-right.svg +3 -0
  13. data/app/assets/images/basicons/alphabet-a.svg +3 -0
  14. data/app/assets/images/basicons/archive-delete.svg +3 -0
  15. data/app/assets/images/basicons/arrow-down-tray.svg +3 -0
  16. data/app/assets/images/basicons/arrow-down-triangle.svg +3 -0
  17. data/app/assets/images/basicons/arrow-down.svg +3 -0
  18. data/app/assets/images/basicons/arrow-left-triangle.svg +3 -0
  19. data/app/assets/images/basicons/arrow-left.svg +3 -0
  20. data/app/assets/images/basicons/arrow-path-rounded.svg +3 -0
  21. data/app/assets/images/basicons/arrow-path.svg +3 -0
  22. data/app/assets/images/basicons/arrow-right-triangle.svg +3 -0
  23. data/app/assets/images/basicons/arrow-right.svg +3 -0
  24. data/app/assets/images/basicons/arrow-up-tray-2.svg +3 -0
  25. data/app/assets/images/basicons/arrow-up-tray.svg +3 -0
  26. data/app/assets/images/basicons/arrow-up-triangle.svg +3 -0
  27. data/app/assets/images/basicons/arrow-up.svg +3 -0
  28. data/app/assets/images/basicons/arrow-uturn-left.svg +3 -0
  29. data/app/assets/images/basicons/arrow-uturn-right.svg +3 -0
  30. data/app/assets/images/basicons/at-symbol.svg +3 -0
  31. data/app/assets/images/basicons/backward-2.svg +3 -0
  32. data/app/assets/images/basicons/backward.svg +4 -0
  33. data/app/assets/images/basicons/badge-award.svg +3 -0
  34. data/app/assets/images/basicons/badge-verified.svg +10 -0
  35. data/app/assets/images/basicons/bank.svg +3 -0
  36. data/app/assets/images/basicons/banknotes.svg +3 -0
  37. data/app/assets/images/basicons/bars-3.svg +3 -0
  38. data/app/assets/images/basicons/battery-0.svg +3 -0
  39. data/app/assets/images/basicons/battery-50.svg +3 -0
  40. data/app/assets/images/basicons/battery-charging.svg +3 -0
  41. data/app/assets/images/basicons/bell-slash.svg +3 -0
  42. data/app/assets/images/basicons/bell.svg +3 -0
  43. data/app/assets/images/basicons/bike.svg +3 -0
  44. data/app/assets/images/basicons/bitcoin.svg +3 -0
  45. data/app/assets/images/basicons/bluetooth-off.svg +3 -0
  46. data/app/assets/images/basicons/bluetooth.svg +3 -0
  47. data/app/assets/images/basicons/bolt-2.svg +3 -0
  48. data/app/assets/images/basicons/bolt.svg +3 -0
  49. data/app/assets/images/basicons/book-open-2.svg +3 -0
  50. data/app/assets/images/basicons/book-open.svg +3 -0
  51. data/app/assets/images/basicons/bookmark-check.svg +3 -0
  52. data/app/assets/images/basicons/bookmark-save.svg +3 -0
  53. data/app/assets/images/basicons/bottle-2.svg +3 -0
  54. data/app/assets/images/basicons/bottle-3.svg +3 -0
  55. data/app/assets/images/basicons/bottle.svg +3 -0
  56. data/app/assets/images/basicons/briefcase-2.svg +3 -0
  57. data/app/assets/images/basicons/briefcase.svg +3 -0
  58. data/app/assets/images/basicons/bug.svg +3 -0
  59. data/app/assets/images/basicons/building-library.svg +3 -0
  60. data/app/assets/images/basicons/building-office-2.svg +3 -0
  61. data/app/assets/images/basicons/building-office-3.svg +3 -0
  62. data/app/assets/images/basicons/building-office-4.svg +3 -0
  63. data/app/assets/images/basicons/building-office.svg +3 -0
  64. data/app/assets/images/basicons/building-storefront.svg +3 -0
  65. data/app/assets/images/basicons/bus.svg +3 -0
  66. data/app/assets/images/basicons/calculator-2.svg +3 -0
  67. data/app/assets/images/basicons/calculator.svg +7 -0
  68. data/app/assets/images/basicons/calendar-bookmark.svg +3 -0
  69. data/app/assets/images/basicons/calendar-check.svg +3 -0
  70. data/app/assets/images/basicons/calendar-date-range.svg +3 -0
  71. data/app/assets/images/basicons/calendar-plus.svg +3 -0
  72. data/app/assets/images/basicons/camera.svg +4 -0
  73. data/app/assets/images/basicons/car.svg +3 -0
  74. data/app/assets/images/basicons/cat.svg +3 -0
  75. data/app/assets/images/basicons/category.svg +3 -0
  76. data/app/assets/images/basicons/cctv.svg +3 -0
  77. data/app/assets/images/basicons/chart-line.svg +3 -0
  78. data/app/assets/images/basicons/chart-pie.svg +3 -0
  79. data/app/assets/images/basicons/chat-bubble-left-ellipsis.svg +3 -0
  80. data/app/assets/images/basicons/chat-bubble-left.svg +3 -0
  81. data/app/assets/images/basicons/chat-bubble-oval-left.svg +3 -0
  82. data/app/assets/images/basicons/check-circle-2.svg +3 -0
  83. data/app/assets/images/basicons/check-circle.svg +3 -0
  84. data/app/assets/images/basicons/check-square-2.svg +3 -0
  85. data/app/assets/images/basicons/check-square.svg +3 -0
  86. data/app/assets/images/basicons/check.svg +3 -0
  87. data/app/assets/images/basicons/checklist-2.svg +3 -0
  88. data/app/assets/images/basicons/checklist.svg +3 -0
  89. data/app/assets/images/basicons/chevron-double-down.svg +3 -0
  90. data/app/assets/images/basicons/chevron-double-left.svg +3 -0
  91. data/app/assets/images/basicons/chevron-double-right.svg +3 -0
  92. data/app/assets/images/basicons/chevron-double-up.svg +3 -0
  93. data/app/assets/images/basicons/chevron-down.svg +3 -0
  94. data/app/assets/images/basicons/chevron-left.svg +3 -0
  95. data/app/assets/images/basicons/chevron-right.svg +3 -0
  96. data/app/assets/images/basicons/chevron-up-down-2.svg +3 -0
  97. data/app/assets/images/basicons/chevron-up-down-3.svg +3 -0
  98. data/app/assets/images/basicons/chevron-up-down.svg +3 -0
  99. data/app/assets/images/basicons/chevron-up.svg +3 -0
  100. data/app/assets/images/basicons/chip.svg +3 -0
  101. data/app/assets/images/basicons/circle-oval.svg +3 -0
  102. data/app/assets/images/basicons/clear.svg +3 -0
  103. data/app/assets/images/basicons/clipboard-document-check.svg +5 -0
  104. data/app/assets/images/basicons/clipboard-document.svg +3 -0
  105. data/app/assets/images/basicons/clock-countdown.svg +3 -0
  106. data/app/assets/images/basicons/clock.svg +3 -0
  107. data/app/assets/images/basicons/cloud-rain.svg +3 -0
  108. data/app/assets/images/basicons/cloud.svg +3 -0
  109. data/app/assets/images/basicons/code-bracket-square.svg +5 -0
  110. data/app/assets/images/basicons/code-bracket.svg +3 -0
  111. data/app/assets/images/basicons/coffee-2.svg +3 -0
  112. data/app/assets/images/basicons/coffee.svg +3 -0
  113. data/app/assets/images/basicons/cog-6-tooth.svg +4 -0
  114. data/app/assets/images/basicons/cog-8-tooth.svg +4 -0
  115. data/app/assets/images/basicons/command.svg +3 -0
  116. data/app/assets/images/basicons/compass.svg +4 -0
  117. data/app/assets/images/basicons/cookies.svg +3 -0
  118. data/app/assets/images/basicons/credit-card.svg +3 -0
  119. data/app/assets/images/basicons/crop.svg +3 -0
  120. data/app/assets/images/basicons/crown.svg +3 -0
  121. data/app/assets/images/basicons/cube.svg +3 -0
  122. data/app/assets/images/basicons/currency-dollar.svg +3 -0
  123. data/app/assets/images/basicons/currency-euro.svg +3 -0
  124. data/app/assets/images/basicons/currency-pound.svg +3 -0
  125. data/app/assets/images/basicons/currency-yen.svg +3 -0
  126. data/app/assets/images/basicons/cursor-arrow-rays.svg +3 -0
  127. data/app/assets/images/basicons/dash.svg +3 -0
  128. data/app/assets/images/basicons/data-server.svg +3 -0
  129. data/app/assets/images/basicons/document-duplicate-2.svg +3 -0
  130. data/app/assets/images/basicons/document-duplicate.svg +3 -0
  131. data/app/assets/images/basicons/document-magnifying-glass.svg +3 -0
  132. data/app/assets/images/basicons/document-text-2.svg +3 -0
  133. data/app/assets/images/basicons/document-text-3.svg +3 -0
  134. data/app/assets/images/basicons/document-text.svg +3 -0
  135. data/app/assets/images/basicons/document.svg +3 -0
  136. data/app/assets/images/basicons/droplet.svg +3 -0
  137. data/app/assets/images/basicons/droplets.svg +3 -0
  138. data/app/assets/images/basicons/ellipsis-horizontal.svg +5 -0
  139. data/app/assets/images/basicons/ellipsis-vertical.svg +5 -0
  140. data/app/assets/images/basicons/envelope-open.svg +3 -0
  141. data/app/assets/images/basicons/envelope.svg +3 -0
  142. data/app/assets/images/basicons/eraser.svg +3 -0
  143. data/app/assets/images/basicons/exclamation-triangle.svg +3 -0
  144. data/app/assets/images/basicons/expand-arrows.svg +3 -0
  145. data/app/assets/images/basicons/expand.svg +3 -0
  146. data/app/assets/images/basicons/external-link.svg +3 -0
  147. data/app/assets/images/basicons/eye-slash.svg +3 -0
  148. data/app/assets/images/basicons/eye.svg +5 -0
  149. data/app/assets/images/basicons/face-frown.svg +3 -0
  150. data/app/assets/images/basicons/face-id.svg +3 -0
  151. data/app/assets/images/basicons/face-neutral.svg +3 -0
  152. data/app/assets/images/basicons/face-smile.svg +3 -0
  153. data/app/assets/images/basicons/face-surprised.svg +3 -0
  154. data/app/assets/images/basicons/facebook-social.svg +3 -0
  155. data/app/assets/images/basicons/flag.svg +3 -0
  156. data/app/assets/images/basicons/folder-plus.svg +3 -0
  157. data/app/assets/images/basicons/folder.svg +3 -0
  158. data/app/assets/images/basicons/forward-2.svg +3 -0
  159. data/app/assets/images/basicons/forward-3.svg +4 -0
  160. data/app/assets/images/basicons/forward.svg +3 -0
  161. data/app/assets/images/basicons/funnel-2.svg +3 -0
  162. data/app/assets/images/basicons/funnel.svg +3 -0
  163. data/app/assets/images/basicons/gaming-pad.svg +3 -0
  164. data/app/assets/images/basicons/gender-female.svg +3 -0
  165. data/app/assets/images/basicons/gender-male.svg +3 -0
  166. data/app/assets/images/basicons/gif.svg +3 -0
  167. data/app/assets/images/basicons/gift.svg +3 -0
  168. data/app/assets/images/basicons/git-branch.svg +3 -0
  169. data/app/assets/images/basicons/glasses-rectangle.svg +3 -0
  170. data/app/assets/images/basicons/glasses-round.svg +3 -0
  171. data/app/assets/images/basicons/globe-americas.svg +3 -0
  172. data/app/assets/images/basicons/grid.svg +6 -0
  173. data/app/assets/images/basicons/hashtag.svg +3 -0
  174. data/app/assets/images/basicons/headphones.svg +3 -0
  175. data/app/assets/images/basicons/heart.svg +3 -0
  176. data/app/assets/images/basicons/home-2.svg +3 -0
  177. data/app/assets/images/basicons/home-3.svg +3 -0
  178. data/app/assets/images/basicons/home-4.svg +3 -0
  179. data/app/assets/images/basicons/home-5.svg +3 -0
  180. data/app/assets/images/basicons/home-modern.svg +3 -0
  181. data/app/assets/images/basicons/home.svg +3 -0
  182. data/app/assets/images/basicons/humidity.svg +3 -0
  183. data/app/assets/images/basicons/inbox.svg +3 -0
  184. data/app/assets/images/basicons/infinity.svg +3 -0
  185. data/app/assets/images/basicons/info.svg +3 -0
  186. data/app/assets/images/basicons/instagram-social.svg +3 -0
  187. data/app/assets/images/basicons/key-2.svg +3 -0
  188. data/app/assets/images/basicons/key.svg +3 -0
  189. data/app/assets/images/basicons/laptop.svg +3 -0
  190. data/app/assets/images/basicons/layers.svg +3 -0
  191. data/app/assets/images/basicons/lifebuoy.svg +3 -0
  192. data/app/assets/images/basicons/light-bulb.svg +3 -0
  193. data/app/assets/images/basicons/link-2.svg +3 -0
  194. data/app/assets/images/basicons/link.svg +3 -0
  195. data/app/assets/images/basicons/linkedin-social.svg +5 -0
  196. data/app/assets/images/basicons/lock-closed.svg +3 -0
  197. data/app/assets/images/basicons/lock-open.svg +3 -0
  198. data/app/assets/images/basicons/log-in-2.svg +3 -0
  199. data/app/assets/images/basicons/log-in.svg +3 -0
  200. data/app/assets/images/basicons/log-out-2.svg +3 -0
  201. data/app/assets/images/basicons/log-out.svg +3 -0
  202. data/app/assets/images/basicons/luggage.svg +3 -0
  203. data/app/assets/images/basicons/magnifying-glass.svg +3 -0
  204. data/app/assets/images/basicons/map-pin-2.svg +3 -0
  205. data/app/assets/images/basicons/map-pin-3.svg +4 -0
  206. data/app/assets/images/basicons/map-pin.svg +3 -0
  207. data/app/assets/images/basicons/map.svg +3 -0
  208. data/app/assets/images/basicons/marker.svg +3 -0
  209. data/app/assets/images/basicons/medal.svg +3 -0
  210. data/app/assets/images/basicons/media-cast.svg +3 -0
  211. data/app/assets/images/basicons/megaphone.svg +3 -0
  212. data/app/assets/images/basicons/microphone-slash.svg +3 -0
  213. data/app/assets/images/basicons/microphone.svg +3 -0
  214. data/app/assets/images/basicons/minimize.svg +3 -0
  215. data/app/assets/images/basicons/minus.svg +3 -0
  216. data/app/assets/images/basicons/moon.svg +3 -0
  217. data/app/assets/images/basicons/mouse.svg +3 -0
  218. data/app/assets/images/basicons/multimedia-gaming.svg +3 -0
  219. data/app/assets/images/basicons/musical-note.svg +3 -0
  220. data/app/assets/images/basicons/number-0.svg +3 -0
  221. data/app/assets/images/basicons/number-1.svg +3 -0
  222. data/app/assets/images/basicons/paper-clip.svg +3 -0
  223. data/app/assets/images/basicons/pencil-2.svg +3 -0
  224. data/app/assets/images/basicons/pencil.svg +3 -0
  225. data/app/assets/images/basicons/phone.svg +3 -0
  226. data/app/assets/images/basicons/photo.svg +3 -0
  227. data/app/assets/images/basicons/plane-2.svg +3 -0
  228. data/app/assets/images/basicons/plane.svg +3 -0
  229. data/app/assets/images/basicons/planet.svg +3 -0
  230. data/app/assets/images/basicons/plug-connect.svg +3 -0
  231. data/app/assets/images/basicons/plus-circle.svg +3 -0
  232. data/app/assets/images/basicons/plus-square.svg +3 -0
  233. data/app/assets/images/basicons/plus.svg +3 -0
  234. data/app/assets/images/basicons/printer-2.svg +3 -0
  235. data/app/assets/images/basicons/printer.svg +3 -0
  236. data/app/assets/images/basicons/puzzle.svg +3 -0
  237. data/app/assets/images/basicons/qr-code.svg +3 -0
  238. data/app/assets/images/basicons/receipt.svg +3 -0
  239. data/app/assets/images/basicons/reply-all.svg +3 -0
  240. data/app/assets/images/basicons/reply.svg +3 -0
  241. data/app/assets/images/basicons/rocket-launch.svg +3 -0
  242. data/app/assets/images/basicons/row-3.svg +3 -0
  243. data/app/assets/images/basicons/save.svg +3 -0
  244. data/app/assets/images/basicons/school.svg +3 -0
  245. data/app/assets/images/basicons/scissors.svg +3 -0
  246. data/app/assets/images/basicons/server.svg +3 -0
  247. data/app/assets/images/basicons/share.svg +3 -0
  248. data/app/assets/images/basicons/shield-check.svg +3 -0
  249. data/app/assets/images/basicons/shoe.svg +3 -0
  250. data/app/assets/images/basicons/shopping-bag-2.svg +3 -0
  251. data/app/assets/images/basicons/shopping-bag.svg +3 -0
  252. data/app/assets/images/basicons/shopping-cart.svg +3 -0
  253. data/app/assets/images/basicons/signal.svg +3 -0
  254. data/app/assets/images/basicons/sofa.svg +3 -0
  255. data/app/assets/images/basicons/sound.svg +3 -0
  256. data/app/assets/images/basicons/sparkles-2.svg +4 -0
  257. data/app/assets/images/basicons/sparkles-3.svg +3 -0
  258. data/app/assets/images/basicons/sparkles-4.svg +3 -0
  259. data/app/assets/images/basicons/sparkles.svg +5 -0
  260. data/app/assets/images/basicons/speaker-x-mark-2.svg +4 -0
  261. data/app/assets/images/basicons/speaker-x-mark.svg +3 -0
  262. data/app/assets/images/basicons/speedometer.svg +3 -0
  263. data/app/assets/images/basicons/square.svg +3 -0
  264. data/app/assets/images/basicons/star.svg +3 -0
  265. data/app/assets/images/basicons/stopwatch.svg +3 -0
  266. data/app/assets/images/basicons/sun.svg +3 -0
  267. data/app/assets/images/basicons/sunrise.svg +3 -0
  268. data/app/assets/images/basicons/sunset.svg +3 -0
  269. data/app/assets/images/basicons/swim.svg +3 -0
  270. data/app/assets/images/basicons/t-shirt.svg +3 -0
  271. data/app/assets/images/basicons/tag.svg +3 -0
  272. data/app/assets/images/basicons/target-2.svg +3 -0
  273. data/app/assets/images/basicons/target-3.svg +3 -0
  274. data/app/assets/images/basicons/target.svg +3 -0
  275. data/app/assets/images/basicons/terminal.svg +5 -0
  276. data/app/assets/images/basicons/thumbs-down.svg +3 -0
  277. data/app/assets/images/basicons/thumbs-up.svg +3 -0
  278. data/app/assets/images/basicons/thunderstorm.svg +3 -0
  279. data/app/assets/images/basicons/ticket.svg +4 -0
  280. data/app/assets/images/basicons/tiktok-social.svg +3 -0
  281. data/app/assets/images/basicons/toggle-left.svg +3 -0
  282. data/app/assets/images/basicons/toggle-right.svg +3 -0
  283. data/app/assets/images/basicons/toggle.svg +4 -0
  284. data/app/assets/images/basicons/toilet-paper.svg +3 -0
  285. data/app/assets/images/basicons/translate.svg +3 -0
  286. data/app/assets/images/basicons/trash-2.svg +3 -0
  287. data/app/assets/images/basicons/trash.svg +3 -0
  288. data/app/assets/images/basicons/trophy.svg +3 -0
  289. data/app/assets/images/basicons/truck.svg +3 -0
  290. data/app/assets/images/basicons/tv.svg +3 -0
  291. data/app/assets/images/basicons/umbrella-insurance.svg +3 -0
  292. data/app/assets/images/basicons/usb-charger.svg +3 -0
  293. data/app/assets/images/basicons/user-2.svg +4 -0
  294. data/app/assets/images/basicons/user-circle.svg +3 -0
  295. data/app/assets/images/basicons/user-minus.svg +3 -0
  296. data/app/assets/images/basicons/user-plus.svg +3 -0
  297. data/app/assets/images/basicons/user-search.svg +3 -0
  298. data/app/assets/images/basicons/user-sparkles.svg +3 -0
  299. data/app/assets/images/basicons/user-square.svg +3 -0
  300. data/app/assets/images/basicons/user.svg +3 -0
  301. data/app/assets/images/basicons/users.svg +3 -0
  302. data/app/assets/images/basicons/video-camera-slash.svg +3 -0
  303. data/app/assets/images/basicons/video-camera.svg +3 -0
  304. data/app/assets/images/basicons/viewfinder.svg +3 -0
  305. data/app/assets/images/basicons/volume-down.svg +3 -0
  306. data/app/assets/images/basicons/volume-up.svg +3 -0
  307. data/app/assets/images/basicons/wallet.svg +3 -0
  308. data/app/assets/images/basicons/wifi-lock.svg +3 -0
  309. data/app/assets/images/basicons/wifi.svg +3 -0
  310. data/app/assets/images/basicons/wind-2.svg +3 -0
  311. data/app/assets/images/basicons/wind.svg +3 -0
  312. data/app/assets/images/basicons/window.svg +3 -0
  313. data/app/assets/images/basicons/wrench.svg +3 -0
  314. data/app/assets/images/basicons/x-circle-2.svg +3 -0
  315. data/app/assets/images/basicons/x-circle.svg +3 -0
  316. data/app/assets/images/basicons/x-mark.svg +3 -0
  317. data/app/assets/images/basicons/x-square.svg +3 -0
  318. data/app/assets/images/basicons/x-twitter.svg +3 -0
  319. data/app/assets/images/basicons/youtube-social.svg +4 -0
  320. data/app/assets/images/basicons/zoom-in.svg +3 -0
  321. data/app/assets/images/basicons/zoom-out.svg +3 -0
  322. data/lib/basicons/basicon.rb +50 -40
  323. data/lib/basicons/engine.rb +11 -0
  324. data/lib/basicons/errors.rb +9 -0
  325. data/lib/basicons/helper.rb +7 -0
  326. data/lib/basicons/version.rb +1 -1
  327. data/lib/basicons.rb +12 -4
  328. metadata +329 -7
  329. data/lib/assets/data.json +0 -322
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M7 17C4.23858 17 2 14.7614 2 12C2 9.23858 4.23858 7 7 7M7 17C9.76142 17 12 14.7614 12 12C12 9.23858 9.76142 7 7 7M7 17H17C19.7614 17 22 14.7614 22 12C22 9.23858 19.7614 7 17 7H7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M17 17C14.2386 17 12 14.7614 12 12C12 9.23858 14.2386 7 17 7M17 17C19.7614 17 22 14.7614 22 12C22 9.23858 19.7614 7 17 7M17 17H7C4.23858 17 2 14.7614 2 12C2 9.23858 4.23858 7 7 7H17" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M15 4H5.5C4.11929 4 3 5.11929 3 6.5C3 7.88071 4.11929 9 5.5 9H15M17.5 10C15.567 10 14 8.433 14 6.5C14 4.567 15.567 3 17.5 3C19.433 3 21 4.567 21 6.5C21 8.433 19.433 10 17.5 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M9 15H18.5C19.8807 15 21 16.1193 21 17.5C21 18.8807 19.8807 20 18.5 20H9M6.5 21C8.433 21 10 19.433 10 17.5C10 15.567 8.433 14 6.5 14C4.567 14 3 15.567 3 17.5C3 19.433 4.567 21 6.5 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M13 9.5V16C13 19 12 21 12 21H2C2 21 3 19 3 16V9.5C3 5.91015 4.79086 3 7 3H17M13 9.5C13 13.0899 14.7909 16 17 16C19.2091 16 21 13.0899 21 9.5C21 5.91015 19.2091 3 17 3M13 9.5C13 5.91015 14.7909 3 17 3M17.5931 9.47323C17.5931 10.5778 17.3692 11.4732 17.0931 11.4732C16.8169 11.4732 16.5931 10.5778 16.5931 9.47323C16.5931 8.36866 16.8169 7.47323 17.0931 7.47323C17.3692 7.47323 17.5931 8.36866 17.5931 9.47323Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M12.8182 17L16 10L19.1818 17M12.8182 17L11 21M12.8182 17H19.1818M19.1818 17L21 21M2 5H14M8 5V3M11.7511 5C10.7831 10.7702 7.06969 15.6095 2 18.129M5 8.60107C5.9617 11.0396 7.44046 13.2176 9.30118 15.0001" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M9 3H15M3 6H21M10 16V11M14 16V11M5 6H19L18.1245 19.133C18.0544 20.1836 17.1818 21 16.1289 21L7.8461 21C6.79171 21 5.91842 20.1814 5.85028 19.1292L5 6Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M9 3H15M3 6H21M5 6H19L18.1245 19.133C18.0544 20.1836 17.1818 21 16.1289 21L7.8461 21C6.79171 21 5.91842 20.1814 5.85028 19.1292L5 6Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M12 17C15.3137 17 18 14.3137 18 11V2H6V11C6 14.3137 8.68629 17 12 17ZM12 17V22M7 22H17M18 4H21V7C21 8.65685 19.6569 10 18 10M6 4H3V7C3 8.65685 4.34315 10 6 10" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M9 18H15M9 18C9 19.1046 8.10457 20 7 20C5.89543 20 5 19.1046 5 18M9 18C9 16.8954 8.10457 16 7 16C5.89543 16 5 16.8954 5 18M15 18C15 19.1046 15.8954 20 17 20C18.1046 20 19 19.1046 19 18M15 18C15 16.8954 15.8954 16 17 16C18.1046 16 19 16.8954 19 18M5 18H3C2.44772 18 2 17.5523 2 17V5C2 4.44772 2.44772 4 3 4H15C15.5523 4 16 4.44772 16 5V16.2676M19 18H22V12.51C22 12.1754 21.916 11.8461 21.7558 11.5523L19 6.5H16M21.9339 12H16" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M6 2L12 6L18 2M4 22H20C21.1046 22 22 21.1046 22 20V8C22 6.89543 21.1046 6 20 6H4C2.89543 6 2 6.89543 2 8V20C2 21.1046 2.89543 22 4 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.9999 3C17.1853 3 21.4982 6.94668 21.9999 12C21.3942 11.8436 20.6267 11.8417 19.9013 11.9104C17.9748 12.0926 16.2614 13.329 15.9999 14.5M11.9999 3C6.81459 3 2.55104 6.94668 2.04932 12M11.9999 3C14.3776 5.62038 15.9999 10.6357 15.9999 14.5M11.9999 3C9.62235 5.62037 7.99994 10.6357 7.99994 14.5M11.9999 3L11.9999 2M15.9999 14.5C15.4508 13.3348 13.7416 12 11.9999 12M2.08044 12C2.68621 11.8436 3.45373 11.8417 4.17906 11.9104C6.10563 12.0926 7.73845 13.329 7.99994 14.5M7.99994 14.5C8.54905 13.3348 10.2583 12 11.9999 12M11.9999 12L11.9999 19.5C11.9999 20.8807 10.8807 22 9.49994 22C8.11923 22 6.99994 20.8807 6.99994 19.5V19" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M19 21V12C19 11.4477 18.5523 11 18 11H6C5.44772 11 5 11.4477 5 12V21M13 8H11M17 11V5C17 3.89543 16.1046 3 15 3H9C7.89543 3 7 3.89543 7 5V11H17Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M4 21H20C20 21 18.5 15 12 15C5.5 15 4 21 4 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M16 7C16 9.20914 14.2091 11 12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5.75988 19.8248C6.9173 17.5547 9.27709 16 12 16C14.7019 16 17.0462 17.5308 18.2131 19.7723M14.3333 10.4444C14.3333 11.7945 13.2389 12.8889 11.8889 12.8889C10.5389 12.8889 9.44444 11.7945 9.44444 10.4444C9.44444 9.09442 10.5389 8 11.8889 8C13.2389 8 14.3333 9.09442 14.3333 10.4444ZM12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 21V17C2 15.8954 2.89543 15 4 15H14C15.1046 15 16 15.8954 16 17V21M16 11H22M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 21V17C2 15.8954 2.89543 15 4 15H14C15.1046 15 16 15.8954 16 17V21M19 8V11M19 11V14M19 11H16M19 11H22M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M3 21V17C3 15.8954 3.89543 15 5 15H12M19.5 19.5L21 21M16 7C16 9.20914 14.2091 11 12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7ZM20.25 17.625C20.25 19.0747 19.0747 20.25 17.625 20.25C16.1753 20.25 15 19.0747 15 17.625C15 16.1753 16.1753 15 17.625 15C19.0747 15 20.25 16.1753 20.25 17.625Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M3 21V17C3 15.8954 3.89543 15 5 15H11M16 7C16 9.20914 14.2091 11 12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7ZM18 13C18 15.2091 16.2091 17 14 17C16.2091 17 18 18.7909 18 21C18 18.7909 19.7909 17 22 17C19.7909 17 18 15.2091 18 13Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M6 20C7.15742 17.7299 9.27709 16 12 16C14.7019 16 16.8331 17.7584 18 20M14.3333 10.4444C14.3333 11.7945 13.2389 12.8889 11.8889 12.8889C10.5389 12.8889 9.44444 11.7945 9.44444 10.4444C9.44444 9.09442 10.5389 8 11.8889 8C13.2389 8 14.3333 9.09442 14.3333 10.4444ZM12 21C8.25027 21 6.3754 21 5.06107 20.0451C4.6366 19.7367 4.26331 19.3634 3.95491 18.9389C3 17.6246 3 15.7497 3 12C3 8.25027 3 6.3754 3.95491 5.06107C4.26331 4.6366 4.6366 4.26331 5.06107 3.95491C6.3754 3 8.25027 3 12 3C15.7497 3 17.6246 3 18.9389 3.95491C19.3634 4.26331 19.7367 4.6366 20.0451 5.06107C21 6.3754 21 8.25027 21 12C21 15.7497 21 17.6246 20.0451 18.9389C19.7367 19.3634 19.3634 19.7367 18.9389 20.0451C17.6246 21 15.7497 21 12 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M4 21V17C4 15.8954 4.89543 15 6 15H18C19.1046 15 20 15.8954 20 17V21M16 7C16 9.20914 14.2091 11 12 11C9.79086 11 8 9.20914 8 7C8 4.79086 9.79086 3 12 3C14.2091 3 16 4.79086 16 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 21V17C2 15.8954 2.89543 15 4 15H14C15.1046 15 16 15.8954 16 17V21M16 3C16.8604 3.2203 17.623 3.7207 18.1676 4.42231C18.7122 5.12392 19.0078 5.98683 19.0078 6.875C19.0078 7.76317 18.7122 8.62608 18.1676 9.32769C17.623 10.0293 16.8604 10.5297 16 10.75M19 15H20C21.1046 15 22 15.8954 22 17V21M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M16 16.5C16 17.7887 15.0642 19 13.7647 19H4.35294C3.05345 19 2 17.9553 2 16.6667V7.33333C2 6.04467 3.05345 5 4.35294 5H5M22 17V7L16 11V7.33333C16 6.04467 14.9466 5 13.6471 5H11M2 2L22 22" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M16.1176 12L22 7.33333V16.6667L16.1176 12ZM16.1176 12V7.33333C16.1176 6.04467 15.0642 5 13.7647 5H4.35294C3.05345 5 2 6.04467 2 7.33333V16.6667C2 17.9553 3.05345 19 4.35294 19H13.7647C15.0642 19 16.1176 17.9553 16.1176 16.6667V12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M21 9V5C21 3.89543 20.1046 3 19 3H15M21 15V19C21 20.1046 20.1046 21 19 21H15M3 15V19C3 20.1046 3.89543 21 5 21H9M3 9V5C3 3.89543 3.89543 3 5 3H9M12 9V12M12 12V15M12 12H9M12 12H15" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M20 9.35425C20.6224 10.0594 21 10.9856 21 12.0001C21 13.0145 20.6224 13.9408 20 14.6459M4 8H9.5L16 3V21L9.5 16H4C3.44772 16 3 15.5523 3 15V9C3 8.44772 3.44772 8 4 8Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M17 9.35425C17.6224 10.0594 18 10.9856 18 12.0001C18 13.0145 17.6224 13.9408 17 14.6459M21 8C21.6224 9.06603 22 10.4663 22 12C22 13.5337 21.6224 14.934 21 16M3 8H8L14 3V21L8 16H3C2.44772 16 2 15.5523 2 15V9C2 8.44772 2.44772 8 3 8Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M20 9.71429V6.28571C20 5.02335 19.1046 4 18 4H4C2.89543 4 2 5.02335 2 6.28571V17.7143C2 18.9767 2.89543 20 4 20H18C19.1046 20 20 18.9767 20 17.7143V14.2857M16 14.2857H21C21.5523 14.2857 22 13.838 22 13.2857V10.7143C22 10.162 21.5523 9.71429 21 9.71429H16C14.8954 9.71429 14 10.7376 14 12C14 13.2624 14.8954 14.2857 16 14.2857Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 6C4.88494 4.10123 8.31702 3 12 3C15.683 3 19.1151 4.10123 22 6M4.99996 9.8774C7.05917 8.6054 9.44995 7.87744 12 7.87744C13.39 7.87744 14.7326 8.09373 16 8.49651M9.07354 13.4549C10.0119 13.0016 11.0216 12.7549 12.0735 12.7549M19 16V14C19 12.8954 18.1046 12 17 12C15.8954 12 15 12.8954 15 14V16M14 21H20C20.5523 21 21 20.5523 21 20V17C21 16.4477 20.5523 16 20 16H14C13.4477 16 13 16.4477 13 17V20C13 20.5523 13.4477 21 14 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 8C4.88494 6.10123 8.31702 5 12 5C15.683 5 19.1151 6.10123 22 8M4.99996 11.8774C7.05917 10.6054 9.44995 9.87744 12 9.87744C14.55 9.87744 16.9407 10.6054 19 11.8774M9.07354 15.4549C10.0119 15.0016 11.0216 14.7549 12.0735 14.7549C13.1254 14.7549 14.1352 15.0016 15.0735 15.4549M11.9181 19.1464L11.902 19.1303" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M9.50929 4.66667C9.8755 4.2575 10.4077 4 11 4C12.1046 4 13 4.89543 13 6C13 7.10457 12.1046 8 11 8H2.00002M12.5093 19.3333C12.8755 19.7425 13.4077 20 14 20C15.1046 20 16 19.1046 16 18C16 16.8954 15.1046 16 14 16H2.00002M16.7639 7C17.3132 6.38625 18.1115 6 19 6C20.6569 6 22 7.34315 22 9C22 10.6569 20.6569 12 19 12H2" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M3 7.1173C3 7.1173 5 8.01764 7.5 7.49992C9.95155 6.99223 11.1025 5.81636 14.5 4.48194C17 3.50001 21 4.99984 21 4.99984M3 12.9689C3 12.9689 5 13.8692 7.5 13.3515C9.95155 12.8438 11.1025 11.6679 14.5 10.3335C17 9.35158 21 10.8514 21 10.8514M3 18.9689C3 18.9689 5 19.8692 7.5 19.3515C9.95155 18.8438 11.1025 17.6679 14.5 16.3335C17 15.3516 21 16.8514 21 16.8514" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2 9H22M5.98389 6.51611L6 6.5M9 6.51611L9.01611 6.5M12.0161 6.51611L12.0322 6.5M4 20H20C21.1046 20 22 19.1046 22 18V6C22 4.89543 21.1046 4 20 4H4C2.89543 4 2 4.89543 2 6V18C2 19.1046 2.89543 20 4 20Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M13.5105 13.9623C15.7334 14.8061 18.3797 14.3029 20.2121 12.4705C22.1578 10.5248 22.4602 7.51682 21.3874 5.21718L17.046 9.55861L14.4412 6.95375L18.7826 2.61233C16.4829 1.53957 13.4749 1.84198 11.5293 3.78762C9.6969 5.62002 9.19365 8.26635 10.0374 10.4892M9.99061 10.536L2.71931 17.8073C1.76023 18.7664 1.76023 20.3214 2.71931 21.2804C3.67839 22.2395 5.23337 22.2395 6.19245 21.2804L13.4637 14.0091" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5 19L19 5M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M16 8L12 12M12 12L8 16M12 12L8 8M12 12L16 16M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5 5L19 19M5 19L19 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M8 8L12 12M12 12L16 16M12 12L8 16M12 12L16 8M5 21H19C20.1046 21 21 20.1046 21 19V5C21 3.89543 20.1046 3 19 3H5C3.89543 3 3 3.89543 3 5V19C3 20.1046 3.89543 21 5 21Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M10.1111 13L3 21M19 3L13.0897 9.64914M3 3L16 21H21L8 3H3Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,4 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M2.44974 6.99251C2.57907 6.0915 3.31865 5.41506 4.22659 5.35027C6.16394 5.21201 9.53638 5 12 5C14.4636 5 17.8361 5.21201 19.7734 5.35027C20.6813 5.41506 21.4209 6.0915 21.5503 6.99251C21.749 8.37719 22 10.4356 22 12.0001C22 13.5647 21.749 15.623 21.5503 17.0077C21.4209 17.9087 20.6813 18.5852 19.7733 18.6499C17.836 18.7881 14.4636 19 12 19C9.53641 19 6.16403 18.7881 4.22666 18.6499C3.31869 18.5852 2.57906 17.9087 2.44973 17.0077C2.25098 15.623 2 13.5647 2 12.0001C2 10.4356 2.25099 8.37719 2.44974 6.99251Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M16 12L10 15.4641V8.5359L16 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11 8V14M14 11H8M21 21L17 17M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M14 11H8M21 21L17 17M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
3
+ </svg>
@@ -1,65 +1,75 @@
1
+ require 'basicons/errors'
2
+ require 'cgi'
3
+
1
4
  module Basicons
2
5
  class Basicon
3
- SVG_SIZES = {
4
- small: 16,
5
- medium: 32,
6
- large: 64
7
- }.freeze
8
-
9
- attr_reader :data, :size
10
- attr_reader :symbol, :options
6
+ @cache = {}
7
+ @cache_mutex = Mutex.new
11
8
 
12
9
  def initialize(symbol, options = {})
13
- @symbol = symbol.to_s
14
10
  @options = options.dup
11
+ @symbol = symbol.to_s
15
12
 
16
- if @data = Basicons::SVG_DATA[@symbol]
17
- @options.merge!({
18
- class: classes,
19
- width: svg_size,
20
- height: svg_size,
21
- viewBox: '0 0 24 24',
22
- stroke: 'currentColor',
23
- fill: 'none'
24
- })
25
-
26
- @options.delete(:size)
27
- @options['stroke-width'] = 2
28
- @options['stroke-linecap'] = 'round'
29
- @options['stroke-linejoin'] = 'round'
30
- @options['xmlns'] = 'http://www.w3.org/2000/svg'
31
- else
32
- raise "<#{@symbol}> not found"
13
+ unless @symbol.match?(/\A[a-z0-9-]+\z/)
14
+ raise ArgumentError, "invalid basicon name"
33
15
  end
34
16
  end
35
17
 
18
+ def escaped_class
19
+ @_escaped_class ||= CGI.escapeHTML(@options[:class].to_s)
20
+ end
21
+
22
+ def classes
23
+ "basicon basicon-#{@symbol} #{escaped_class}".strip
24
+ end
25
+
36
26
  def to_svg
37
- "<svg #{html_attributes}>#{@data}</svg>"
27
+ raw = read_svg.sub(/<svg[^>]*>/) { |tag| apply_attrs(tag) }
28
+ raw.respond_to?(:html_safe) ? raw.html_safe : raw
38
29
  end
39
30
 
40
31
  private
41
32
 
42
- def html_attributes(result = '')
43
- @options.each { |key, value| result += "#{key}=\"#{value}\" " }
44
- result.strip
33
+ def read_svg
34
+ Basicon.cached_read(@symbol) || begin
35
+ raw = File.read("#{SVG_DIR}/#{@symbol}.svg")
36
+ Basicon.store_cache(@symbol, raw)
37
+ raw
38
+ rescue Errno::ENOENT
39
+ raise SVGNotFound, @symbol
40
+ end
41
+ end
42
+
43
+ def apply_attrs(tag)
44
+ tag.sub(/<svg(?=\s|>)/) { %Q(<svg class="#{classes}") }
45
+ .sub(/width="[^"]*"/) { %Q(width="#{svg_size}") }
46
+ .sub(/height="[^"]*"/) { %Q(height="#{svg_size}") }
45
47
  end
46
48
 
47
49
  def svg_size
48
- return @size unless @size.nil?
50
+ size = @options[:size].to_s
51
+ size = SVG_SIZES[size.to_sym] || size.to_i
52
+ size = 24 if size <= 0
53
+ size
54
+ end
49
55
 
50
- @size = @options[:size].to_i
51
- value = @options[:size].to_s
56
+ class << self
57
+ def store_cache(symbol, raw)
58
+ @cache_mutex.synchronize do
59
+ @cache.shift if @cache.size >= CACHE_MAX_ENTRIES
60
+ @cache[symbol] = raw
61
+ end
52
62
 
53
- if value.match?(/small|medium|large/)
54
- @size = SVG_SIZES[value.to_sym]
63
+ raw
55
64
  end
56
65
 
57
- @size = 24 if @size.zero?
58
- @size
59
- end
66
+ def cached_read(symbol)
67
+ @cache_mutex.synchronize { @cache[symbol] }
68
+ end
60
69
 
61
- def classes
62
- "basicon basicon-#{@symbol} #{@options[:class]}".strip
70
+ def clear_cache
71
+ @cache_mutex.synchronize { @cache.clear }
72
+ end
63
73
  end
64
74
  end
65
75
  end
@@ -0,0 +1,11 @@
1
+ module Basicons
2
+ class Engine < Rails::Engine
3
+ isolate_namespace Basicons
4
+
5
+ initializer 'basicons.helper' do
6
+ ActiveSupport.on_load :action_view do
7
+ include Basicons::Helper
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ module Basicons
2
+ class Error < StandardError; end
3
+
4
+ class SVGNotFound < Error
5
+ def initialize(symbol)
6
+ super("SVG #{symbol} not found")
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Basicons
2
+ module Helper
3
+ def basicon(symbol, options = {})
4
+ Basicons::Basicon.new(symbol, options).to_svg
5
+ end
6
+ end
7
+ end
@@ -1,3 +1,3 @@
1
1
  module Basicons
2
- VERSION = '1.0.6'.freeze
2
+ VERSION = '1.0.7'
3
3
  end
data/lib/basicons.rb CHANGED
@@ -1,8 +1,16 @@
1
- require 'basicons/version'
2
1
  require 'basicons/basicon'
3
- require 'json'
2
+ require 'basicons/engine' if defined?(Rails)
3
+ require 'basicons/helper'
4
+ require 'basicons/version'
4
5
 
5
6
  module Basicons
6
- json_data = File.read("#{File.dirname(__FILE__)}/assets/data.json")
7
- SVG_DATA = JSON.parse(json_data).freeze
7
+ SVG_DIR = File.expand_path('../app/assets/images/basicons', __dir__)
8
+
9
+ SVG_SIZES = { small: 16, medium: 32, large: 64 }.freeze
10
+
11
+ CACHE_MAX_ENTRIES = 100
12
+
13
+ def self.render(*args)
14
+ Basicon.new(*args).to_svg
15
+ end
8
16
  end