@qeetrix/icons 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +455 -0
  3. package/dist/icon-base.d.ts +28 -0
  4. package/dist/icon-base.js +37 -0
  5. package/dist/icons/accessibility.d.ts +2 -0
  6. package/dist/icons/accessibility.js +6 -0
  7. package/dist/icons/activity.d.ts +2 -0
  8. package/dist/icons/activity.js +6 -0
  9. package/dist/icons/alarm-clock.d.ts +2 -0
  10. package/dist/icons/alarm-clock.js +6 -0
  11. package/dist/icons/alert-circle.d.ts +2 -0
  12. package/dist/icons/alert-circle.js +6 -0
  13. package/dist/icons/alert-octagon.d.ts +2 -0
  14. package/dist/icons/alert-octagon.js +6 -0
  15. package/dist/icons/alert-triangle.d.ts +2 -0
  16. package/dist/icons/alert-triangle.js +6 -0
  17. package/dist/icons/align-center.d.ts +2 -0
  18. package/dist/icons/align-center.js +6 -0
  19. package/dist/icons/align-justify.d.ts +2 -0
  20. package/dist/icons/align-justify.js +6 -0
  21. package/dist/icons/align-left.d.ts +2 -0
  22. package/dist/icons/align-left.js +6 -0
  23. package/dist/icons/align-right.d.ts +2 -0
  24. package/dist/icons/align-right.js +6 -0
  25. package/dist/icons/archive.d.ts +2 -0
  26. package/dist/icons/archive.js +6 -0
  27. package/dist/icons/arrow-down-left.d.ts +2 -0
  28. package/dist/icons/arrow-down-left.js +6 -0
  29. package/dist/icons/arrow-down-right.d.ts +2 -0
  30. package/dist/icons/arrow-down-right.js +6 -0
  31. package/dist/icons/arrow-down.d.ts +2 -0
  32. package/dist/icons/arrow-down.js +6 -0
  33. package/dist/icons/arrow-left-right.d.ts +2 -0
  34. package/dist/icons/arrow-left-right.js +6 -0
  35. package/dist/icons/arrow-left.d.ts +2 -0
  36. package/dist/icons/arrow-left.js +6 -0
  37. package/dist/icons/arrow-right.d.ts +2 -0
  38. package/dist/icons/arrow-right.js +6 -0
  39. package/dist/icons/arrow-up-down.d.ts +2 -0
  40. package/dist/icons/arrow-up-down.js +6 -0
  41. package/dist/icons/arrow-up-left.d.ts +2 -0
  42. package/dist/icons/arrow-up-left.js +6 -0
  43. package/dist/icons/arrow-up-right.d.ts +2 -0
  44. package/dist/icons/arrow-up-right.js +6 -0
  45. package/dist/icons/arrow-up.d.ts +2 -0
  46. package/dist/icons/arrow-up.js +6 -0
  47. package/dist/icons/at-sign.d.ts +2 -0
  48. package/dist/icons/at-sign.js +6 -0
  49. package/dist/icons/award.d.ts +2 -0
  50. package/dist/icons/award.js +6 -0
  51. package/dist/icons/ban.d.ts +2 -0
  52. package/dist/icons/ban.js +6 -0
  53. package/dist/icons/bank.d.ts +2 -0
  54. package/dist/icons/bank.js +6 -0
  55. package/dist/icons/banknote.d.ts +2 -0
  56. package/dist/icons/banknote.js +6 -0
  57. package/dist/icons/battery-charging.d.ts +2 -0
  58. package/dist/icons/battery-charging.js +6 -0
  59. package/dist/icons/battery-low.d.ts +2 -0
  60. package/dist/icons/battery-low.js +6 -0
  61. package/dist/icons/battery.d.ts +2 -0
  62. package/dist/icons/battery.js +6 -0
  63. package/dist/icons/bell-dot.d.ts +2 -0
  64. package/dist/icons/bell-dot.js +6 -0
  65. package/dist/icons/bell-off.d.ts +2 -0
  66. package/dist/icons/bell-off.js +6 -0
  67. package/dist/icons/bell-ring.d.ts +2 -0
  68. package/dist/icons/bell-ring.js +6 -0
  69. package/dist/icons/bell.d.ts +2 -0
  70. package/dist/icons/bell.js +6 -0
  71. package/dist/icons/bluetooth.d.ts +2 -0
  72. package/dist/icons/bluetooth.js +6 -0
  73. package/dist/icons/bold.d.ts +2 -0
  74. package/dist/icons/bold.js +6 -0
  75. package/dist/icons/book-open.d.ts +2 -0
  76. package/dist/icons/book-open.js +6 -0
  77. package/dist/icons/book.d.ts +2 -0
  78. package/dist/icons/book.js +6 -0
  79. package/dist/icons/bookmark.d.ts +2 -0
  80. package/dist/icons/bookmark.js +6 -0
  81. package/dist/icons/braces.d.ts +2 -0
  82. package/dist/icons/braces.js +6 -0
  83. package/dist/icons/brackets.d.ts +2 -0
  84. package/dist/icons/brackets.js +6 -0
  85. package/dist/icons/briefcase.d.ts +2 -0
  86. package/dist/icons/briefcase.js +6 -0
  87. package/dist/icons/bug.d.ts +2 -0
  88. package/dist/icons/bug.js +6 -0
  89. package/dist/icons/calculator.d.ts +2 -0
  90. package/dist/icons/calculator.js +6 -0
  91. package/dist/icons/calendar-check.d.ts +2 -0
  92. package/dist/icons/calendar-check.js +6 -0
  93. package/dist/icons/calendar-clock.d.ts +2 -0
  94. package/dist/icons/calendar-clock.js +6 -0
  95. package/dist/icons/calendar-days.d.ts +2 -0
  96. package/dist/icons/calendar-days.js +6 -0
  97. package/dist/icons/calendar-edit.d.ts +2 -0
  98. package/dist/icons/calendar-edit.js +6 -0
  99. package/dist/icons/calendar-off.d.ts +2 -0
  100. package/dist/icons/calendar-off.js +6 -0
  101. package/dist/icons/calendar-plus.d.ts +2 -0
  102. package/dist/icons/calendar-plus.js +6 -0
  103. package/dist/icons/calendar-search.d.ts +2 -0
  104. package/dist/icons/calendar-search.js +6 -0
  105. package/dist/icons/calendar-x.d.ts +2 -0
  106. package/dist/icons/calendar-x.js +6 -0
  107. package/dist/icons/calendar.d.ts +2 -0
  108. package/dist/icons/calendar.js +6 -0
  109. package/dist/icons/camera-off.d.ts +2 -0
  110. package/dist/icons/camera-off.js +6 -0
  111. package/dist/icons/camera.d.ts +2 -0
  112. package/dist/icons/camera.js +6 -0
  113. package/dist/icons/captions-off.d.ts +2 -0
  114. package/dist/icons/captions-off.js +6 -0
  115. package/dist/icons/captions.d.ts +2 -0
  116. package/dist/icons/captions.js +6 -0
  117. package/dist/icons/certificate.d.ts +2 -0
  118. package/dist/icons/certificate.js +6 -0
  119. package/dist/icons/chart-area.d.ts +2 -0
  120. package/dist/icons/chart-area.js +6 -0
  121. package/dist/icons/chart-bar.d.ts +2 -0
  122. package/dist/icons/chart-bar.js +6 -0
  123. package/dist/icons/chart-line.d.ts +2 -0
  124. package/dist/icons/chart-line.js +6 -0
  125. package/dist/icons/chart-pie.d.ts +2 -0
  126. package/dist/icons/chart-pie.js +6 -0
  127. package/dist/icons/check-circle.d.ts +2 -0
  128. package/dist/icons/check-circle.js +6 -0
  129. package/dist/icons/check-square.d.ts +2 -0
  130. package/dist/icons/check-square.js +6 -0
  131. package/dist/icons/check.d.ts +2 -0
  132. package/dist/icons/check.js +6 -0
  133. package/dist/icons/checks.d.ts +2 -0
  134. package/dist/icons/checks.js +6 -0
  135. package/dist/icons/chevron-down.d.ts +2 -0
  136. package/dist/icons/chevron-down.js +6 -0
  137. package/dist/icons/chevron-left.d.ts +2 -0
  138. package/dist/icons/chevron-left.js +6 -0
  139. package/dist/icons/chevron-right.d.ts +2 -0
  140. package/dist/icons/chevron-right.js +6 -0
  141. package/dist/icons/chevron-up.d.ts +2 -0
  142. package/dist/icons/chevron-up.js +6 -0
  143. package/dist/icons/chevrons-down.d.ts +2 -0
  144. package/dist/icons/chevrons-down.js +6 -0
  145. package/dist/icons/chevrons-left.d.ts +2 -0
  146. package/dist/icons/chevrons-left.js +6 -0
  147. package/dist/icons/chevrons-right.d.ts +2 -0
  148. package/dist/icons/chevrons-right.js +6 -0
  149. package/dist/icons/chevrons-up.d.ts +2 -0
  150. package/dist/icons/chevrons-up.js +6 -0
  151. package/dist/icons/circle-dot.d.ts +2 -0
  152. package/dist/icons/circle-dot.js +6 -0
  153. package/dist/icons/circle.d.ts +2 -0
  154. package/dist/icons/circle.js +6 -0
  155. package/dist/icons/clipboard-check.d.ts +2 -0
  156. package/dist/icons/clipboard-check.js +6 -0
  157. package/dist/icons/clipboard-list.d.ts +2 -0
  158. package/dist/icons/clipboard-list.js +6 -0
  159. package/dist/icons/clipboard.d.ts +2 -0
  160. package/dist/icons/clipboard.js +6 -0
  161. package/dist/icons/clock.d.ts +2 -0
  162. package/dist/icons/clock.js +6 -0
  163. package/dist/icons/cloud-download.d.ts +2 -0
  164. package/dist/icons/cloud-download.js +6 -0
  165. package/dist/icons/cloud-off.d.ts +2 -0
  166. package/dist/icons/cloud-off.js +6 -0
  167. package/dist/icons/cloud-upload.d.ts +2 -0
  168. package/dist/icons/cloud-upload.js +6 -0
  169. package/dist/icons/cloud.d.ts +2 -0
  170. package/dist/icons/cloud.js +6 -0
  171. package/dist/icons/code.d.ts +2 -0
  172. package/dist/icons/code.js +6 -0
  173. package/dist/icons/collapse.d.ts +2 -0
  174. package/dist/icons/collapse.js +6 -0
  175. package/dist/icons/columns.d.ts +2 -0
  176. package/dist/icons/columns.js +6 -0
  177. package/dist/icons/contact.d.ts +2 -0
  178. package/dist/icons/contact.js +6 -0
  179. package/dist/icons/contrast.d.ts +2 -0
  180. package/dist/icons/contrast.js +6 -0
  181. package/dist/icons/copy.d.ts +2 -0
  182. package/dist/icons/copy.js +6 -0
  183. package/dist/icons/cpu.d.ts +2 -0
  184. package/dist/icons/cpu.js +6 -0
  185. package/dist/icons/credit-card-check.d.ts +2 -0
  186. package/dist/icons/credit-card-check.js +6 -0
  187. package/dist/icons/credit-card-plus.d.ts +2 -0
  188. package/dist/icons/credit-card-plus.js +6 -0
  189. package/dist/icons/credit-card-x.d.ts +2 -0
  190. package/dist/icons/credit-card-x.js +6 -0
  191. package/dist/icons/credit-card.d.ts +2 -0
  192. package/dist/icons/credit-card.js +6 -0
  193. package/dist/icons/crop.d.ts +2 -0
  194. package/dist/icons/crop.js +6 -0
  195. package/dist/icons/database.d.ts +2 -0
  196. package/dist/icons/database.js +6 -0
  197. package/dist/icons/download.d.ts +2 -0
  198. package/dist/icons/download.js +6 -0
  199. package/dist/icons/drag-handle.d.ts +2 -0
  200. package/dist/icons/drag-handle.js +6 -0
  201. package/dist/icons/droplet.d.ts +2 -0
  202. package/dist/icons/droplet.js +6 -0
  203. package/dist/icons/ear-off.d.ts +2 -0
  204. package/dist/icons/ear-off.js +6 -0
  205. package/dist/icons/ear.d.ts +2 -0
  206. package/dist/icons/ear.js +6 -0
  207. package/dist/icons/edit.d.ts +2 -0
  208. package/dist/icons/edit.js +6 -0
  209. package/dist/icons/eraser.d.ts +2 -0
  210. package/dist/icons/eraser.js +6 -0
  211. package/dist/icons/expand.d.ts +2 -0
  212. package/dist/icons/expand.js +6 -0
  213. package/dist/icons/external-link.d.ts +2 -0
  214. package/dist/icons/external-link.js +6 -0
  215. package/dist/icons/eye-off.d.ts +2 -0
  216. package/dist/icons/eye-off.js +6 -0
  217. package/dist/icons/eye.d.ts +2 -0
  218. package/dist/icons/eye.js +6 -0
  219. package/dist/icons/face-id.d.ts +2 -0
  220. package/dist/icons/face-id.js +6 -0
  221. package/dist/icons/file-alert.d.ts +2 -0
  222. package/dist/icons/file-alert.js +6 -0
  223. package/dist/icons/file-archive.d.ts +2 -0
  224. package/dist/icons/file-archive.js +6 -0
  225. package/dist/icons/file-check.d.ts +2 -0
  226. package/dist/icons/file-check.js +6 -0
  227. package/dist/icons/file-code.d.ts +2 -0
  228. package/dist/icons/file-code.js +6 -0
  229. package/dist/icons/file-download.d.ts +2 -0
  230. package/dist/icons/file-download.js +6 -0
  231. package/dist/icons/file-edit.d.ts +2 -0
  232. package/dist/icons/file-edit.js +6 -0
  233. package/dist/icons/file-image.d.ts +2 -0
  234. package/dist/icons/file-image.js +6 -0
  235. package/dist/icons/file-lock.d.ts +2 -0
  236. package/dist/icons/file-lock.js +6 -0
  237. package/dist/icons/file-minus.d.ts +2 -0
  238. package/dist/icons/file-minus.js +6 -0
  239. package/dist/icons/file-plus.d.ts +2 -0
  240. package/dist/icons/file-plus.js +6 -0
  241. package/dist/icons/file-search.d.ts +2 -0
  242. package/dist/icons/file-search.js +6 -0
  243. package/dist/icons/file-text.d.ts +2 -0
  244. package/dist/icons/file-text.js +6 -0
  245. package/dist/icons/file-upload.d.ts +2 -0
  246. package/dist/icons/file-upload.js +6 -0
  247. package/dist/icons/file-x.d.ts +2 -0
  248. package/dist/icons/file-x.js +6 -0
  249. package/dist/icons/file.d.ts +2 -0
  250. package/dist/icons/file.js +6 -0
  251. package/dist/icons/files.d.ts +2 -0
  252. package/dist/icons/files.js +6 -0
  253. package/dist/icons/film.d.ts +2 -0
  254. package/dist/icons/film.js +6 -0
  255. package/dist/icons/filter-x.d.ts +2 -0
  256. package/dist/icons/filter-x.js +6 -0
  257. package/dist/icons/filter.d.ts +2 -0
  258. package/dist/icons/filter.js +6 -0
  259. package/dist/icons/fingerprint.d.ts +2 -0
  260. package/dist/icons/fingerprint.js +6 -0
  261. package/dist/icons/first-page.d.ts +2 -0
  262. package/dist/icons/first-page.js +6 -0
  263. package/dist/icons/flag.d.ts +2 -0
  264. package/dist/icons/flag.js +6 -0
  265. package/dist/icons/folder-check.d.ts +2 -0
  266. package/dist/icons/folder-check.js +6 -0
  267. package/dist/icons/folder-lock.d.ts +2 -0
  268. package/dist/icons/folder-lock.js +6 -0
  269. package/dist/icons/folder-minus.d.ts +2 -0
  270. package/dist/icons/folder-minus.js +6 -0
  271. package/dist/icons/folder-open.d.ts +2 -0
  272. package/dist/icons/folder-open.js +6 -0
  273. package/dist/icons/folder-plus.d.ts +2 -0
  274. package/dist/icons/folder-plus.js +6 -0
  275. package/dist/icons/folder-search.d.ts +2 -0
  276. package/dist/icons/folder-search.js +6 -0
  277. package/dist/icons/folder-x.d.ts +2 -0
  278. package/dist/icons/folder-x.js +6 -0
  279. package/dist/icons/folder.d.ts +2 -0
  280. package/dist/icons/folder.js +6 -0
  281. package/dist/icons/forward.d.ts +2 -0
  282. package/dist/icons/forward.js +6 -0
  283. package/dist/icons/gauge.d.ts +2 -0
  284. package/dist/icons/gauge.js +6 -0
  285. package/dist/icons/gift.d.ts +2 -0
  286. package/dist/icons/gift.js +6 -0
  287. package/dist/icons/git-branch.d.ts +2 -0
  288. package/dist/icons/git-branch.js +6 -0
  289. package/dist/icons/git-commit.d.ts +2 -0
  290. package/dist/icons/git-commit.js +6 -0
  291. package/dist/icons/git-merge.d.ts +2 -0
  292. package/dist/icons/git-merge.js +6 -0
  293. package/dist/icons/git-pull-request.d.ts +2 -0
  294. package/dist/icons/git-pull-request.js +6 -0
  295. package/dist/icons/globe.d.ts +2 -0
  296. package/dist/icons/globe.js +6 -0
  297. package/dist/icons/graduation-cap.d.ts +2 -0
  298. package/dist/icons/graduation-cap.js +6 -0
  299. package/dist/icons/grid.d.ts +2 -0
  300. package/dist/icons/grid.js +6 -0
  301. package/dist/icons/hard-drive.d.ts +2 -0
  302. package/dist/icons/hard-drive.js +6 -0
  303. package/dist/icons/hash.d.ts +2 -0
  304. package/dist/icons/hash.js +6 -0
  305. package/dist/icons/heading.d.ts +2 -0
  306. package/dist/icons/heading.js +6 -0
  307. package/dist/icons/headphones.d.ts +2 -0
  308. package/dist/icons/headphones.js +6 -0
  309. package/dist/icons/heart.d.ts +2 -0
  310. package/dist/icons/heart.js +6 -0
  311. package/dist/icons/help-circle.d.ts +2 -0
  312. package/dist/icons/help-circle.js +6 -0
  313. package/dist/icons/history.d.ts +2 -0
  314. package/dist/icons/history.js +6 -0
  315. package/dist/icons/home.d.ts +2 -0
  316. package/dist/icons/home.js +6 -0
  317. package/dist/icons/hourglass.d.ts +2 -0
  318. package/dist/icons/hourglass.js +6 -0
  319. package/dist/icons/id-badge.d.ts +2 -0
  320. package/dist/icons/id-badge.js +6 -0
  321. package/dist/icons/image.d.ts +2 -0
  322. package/dist/icons/image.js +6 -0
  323. package/dist/icons/inbox.d.ts +2 -0
  324. package/dist/icons/inbox.js +6 -0
  325. package/dist/icons/index.d.ts +331 -0
  326. package/dist/icons/index.js +332 -0
  327. package/dist/icons/info-circle.d.ts +2 -0
  328. package/dist/icons/info-circle.js +6 -0
  329. package/dist/icons/italic.d.ts +2 -0
  330. package/dist/icons/italic.js +6 -0
  331. package/dist/icons/key-off.d.ts +2 -0
  332. package/dist/icons/key-off.js +6 -0
  333. package/dist/icons/key.d.ts +2 -0
  334. package/dist/icons/key.js +6 -0
  335. package/dist/icons/keyboard.d.ts +2 -0
  336. package/dist/icons/keyboard.js +6 -0
  337. package/dist/icons/languages.d.ts +2 -0
  338. package/dist/icons/languages.js +6 -0
  339. package/dist/icons/laptop.d.ts +2 -0
  340. package/dist/icons/laptop.js +6 -0
  341. package/dist/icons/last-page.d.ts +2 -0
  342. package/dist/icons/last-page.js +6 -0
  343. package/dist/icons/layers.d.ts +2 -0
  344. package/dist/icons/layers.js +6 -0
  345. package/dist/icons/lightbulb.d.ts +2 -0
  346. package/dist/icons/lightbulb.js +6 -0
  347. package/dist/icons/link-off.d.ts +2 -0
  348. package/dist/icons/link-off.js +6 -0
  349. package/dist/icons/link.d.ts +2 -0
  350. package/dist/icons/link.js +6 -0
  351. package/dist/icons/list-checks.d.ts +2 -0
  352. package/dist/icons/list-checks.js +6 -0
  353. package/dist/icons/list-ordered.d.ts +2 -0
  354. package/dist/icons/list-ordered.js +6 -0
  355. package/dist/icons/list.d.ts +2 -0
  356. package/dist/icons/list.js +6 -0
  357. package/dist/icons/loader.d.ts +2 -0
  358. package/dist/icons/loader.js +6 -0
  359. package/dist/icons/lock-open.d.ts +2 -0
  360. package/dist/icons/lock-open.js +6 -0
  361. package/dist/icons/lock.d.ts +2 -0
  362. package/dist/icons/lock.js +6 -0
  363. package/dist/icons/log-in.d.ts +2 -0
  364. package/dist/icons/log-in.js +6 -0
  365. package/dist/icons/log-out.d.ts +2 -0
  366. package/dist/icons/log-out.js +6 -0
  367. package/dist/icons/mail-check.d.ts +2 -0
  368. package/dist/icons/mail-check.js +6 -0
  369. package/dist/icons/mail-open.d.ts +2 -0
  370. package/dist/icons/mail-open.js +6 -0
  371. package/dist/icons/mail-plus.d.ts +2 -0
  372. package/dist/icons/mail-plus.js +6 -0
  373. package/dist/icons/mail-search.d.ts +2 -0
  374. package/dist/icons/mail-search.js +6 -0
  375. package/dist/icons/mail-x.d.ts +2 -0
  376. package/dist/icons/mail-x.js +6 -0
  377. package/dist/icons/mail.d.ts +2 -0
  378. package/dist/icons/mail.js +6 -0
  379. package/dist/icons/map-pin.d.ts +2 -0
  380. package/dist/icons/map-pin.js +6 -0
  381. package/dist/icons/map.d.ts +2 -0
  382. package/dist/icons/map.js +6 -0
  383. package/dist/icons/maximize.d.ts +2 -0
  384. package/dist/icons/maximize.js +6 -0
  385. package/dist/icons/megaphone.d.ts +2 -0
  386. package/dist/icons/megaphone.js +6 -0
  387. package/dist/icons/menu.d.ts +2 -0
  388. package/dist/icons/menu.js +6 -0
  389. package/dist/icons/message-circle.d.ts +2 -0
  390. package/dist/icons/message-circle.js +6 -0
  391. package/dist/icons/message-square-plus.d.ts +2 -0
  392. package/dist/icons/message-square-plus.js +6 -0
  393. package/dist/icons/message-square-search.d.ts +2 -0
  394. package/dist/icons/message-square-search.js +6 -0
  395. package/dist/icons/message-square-x.d.ts +2 -0
  396. package/dist/icons/message-square-x.js +6 -0
  397. package/dist/icons/message-square.d.ts +2 -0
  398. package/dist/icons/message-square.js +6 -0
  399. package/dist/icons/messages.d.ts +2 -0
  400. package/dist/icons/messages.js +6 -0
  401. package/dist/icons/mic-off.d.ts +2 -0
  402. package/dist/icons/mic-off.js +6 -0
  403. package/dist/icons/mic.d.ts +2 -0
  404. package/dist/icons/mic.js +6 -0
  405. package/dist/icons/minimize.d.ts +2 -0
  406. package/dist/icons/minimize.js +6 -0
  407. package/dist/icons/minus-circle.d.ts +2 -0
  408. package/dist/icons/minus-circle.js +6 -0
  409. package/dist/icons/minus-square.d.ts +2 -0
  410. package/dist/icons/minus-square.js +6 -0
  411. package/dist/icons/minus.d.ts +2 -0
  412. package/dist/icons/minus.js +6 -0
  413. package/dist/icons/monitor.d.ts +2 -0
  414. package/dist/icons/monitor.js +6 -0
  415. package/dist/icons/moon.d.ts +2 -0
  416. package/dist/icons/moon.js +6 -0
  417. package/dist/icons/more-horizontal.d.ts +2 -0
  418. package/dist/icons/more-horizontal.js +6 -0
  419. package/dist/icons/more-vertical.d.ts +2 -0
  420. package/dist/icons/more-vertical.js +6 -0
  421. package/dist/icons/mouse.d.ts +2 -0
  422. package/dist/icons/mouse.js +6 -0
  423. package/dist/icons/move.d.ts +2 -0
  424. package/dist/icons/move.js +6 -0
  425. package/dist/icons/music.d.ts +2 -0
  426. package/dist/icons/music.js +6 -0
  427. package/dist/icons/newspaper.d.ts +2 -0
  428. package/dist/icons/newspaper.js +6 -0
  429. package/dist/icons/organization.d.ts +2 -0
  430. package/dist/icons/organization.js +6 -0
  431. package/dist/icons/package.d.ts +2 -0
  432. package/dist/icons/package.js +6 -0
  433. package/dist/icons/palette.d.ts +2 -0
  434. package/dist/icons/palette.js +6 -0
  435. package/dist/icons/paperclip.d.ts +2 -0
  436. package/dist/icons/paperclip.js +6 -0
  437. package/dist/icons/passkey.d.ts +2 -0
  438. package/dist/icons/passkey.js +6 -0
  439. package/dist/icons/password.d.ts +2 -0
  440. package/dist/icons/password.js +6 -0
  441. package/dist/icons/pause.d.ts +2 -0
  442. package/dist/icons/pause.js +6 -0
  443. package/dist/icons/percent.d.ts +2 -0
  444. package/dist/icons/percent.js +6 -0
  445. package/dist/icons/phone-incoming.d.ts +2 -0
  446. package/dist/icons/phone-incoming.js +6 -0
  447. package/dist/icons/phone-off.d.ts +2 -0
  448. package/dist/icons/phone-off.js +6 -0
  449. package/dist/icons/phone-outgoing.d.ts +2 -0
  450. package/dist/icons/phone-outgoing.js +6 -0
  451. package/dist/icons/phone.d.ts +2 -0
  452. package/dist/icons/phone.js +6 -0
  453. package/dist/icons/pin-off.d.ts +2 -0
  454. package/dist/icons/pin-off.js +6 -0
  455. package/dist/icons/pin.d.ts +2 -0
  456. package/dist/icons/pin.js +6 -0
  457. package/dist/icons/play.d.ts +2 -0
  458. package/dist/icons/play.js +6 -0
  459. package/dist/icons/plug.d.ts +2 -0
  460. package/dist/icons/plug.js +6 -0
  461. package/dist/icons/plus-circle.d.ts +2 -0
  462. package/dist/icons/plus-circle.js +6 -0
  463. package/dist/icons/plus-square.d.ts +2 -0
  464. package/dist/icons/plus-square.js +6 -0
  465. package/dist/icons/plus.d.ts +2 -0
  466. package/dist/icons/plus.js +6 -0
  467. package/dist/icons/power.d.ts +2 -0
  468. package/dist/icons/power.js +6 -0
  469. package/dist/icons/printer.d.ts +2 -0
  470. package/dist/icons/printer.js +6 -0
  471. package/dist/icons/qr-code.d.ts +2 -0
  472. package/dist/icons/qr-code.js +6 -0
  473. package/dist/icons/quote.d.ts +2 -0
  474. package/dist/icons/quote.js +6 -0
  475. package/dist/icons/receipt.d.ts +2 -0
  476. package/dist/icons/receipt.js +6 -0
  477. package/dist/icons/redo.d.ts +2 -0
  478. package/dist/icons/redo.js +6 -0
  479. package/dist/icons/refresh.d.ts +2 -0
  480. package/dist/icons/refresh.js +6 -0
  481. package/dist/icons/repeat.d.ts +2 -0
  482. package/dist/icons/repeat.js +6 -0
  483. package/dist/icons/reply-all.d.ts +2 -0
  484. package/dist/icons/reply-all.js +6 -0
  485. package/dist/icons/reply.d.ts +2 -0
  486. package/dist/icons/reply.js +6 -0
  487. package/dist/icons/rocket.d.ts +2 -0
  488. package/dist/icons/rocket.js +6 -0
  489. package/dist/icons/router.d.ts +2 -0
  490. package/dist/icons/router.js +6 -0
  491. package/dist/icons/rows.d.ts +2 -0
  492. package/dist/icons/rows.js +6 -0
  493. package/dist/icons/rss.d.ts +2 -0
  494. package/dist/icons/rss.js +6 -0
  495. package/dist/icons/ruler.d.ts +2 -0
  496. package/dist/icons/ruler.js +6 -0
  497. package/dist/icons/save.d.ts +2 -0
  498. package/dist/icons/save.js +6 -0
  499. package/dist/icons/scan.d.ts +2 -0
  500. package/dist/icons/scan.js +6 -0
  501. package/dist/icons/scissors.d.ts +2 -0
  502. package/dist/icons/scissors.js +6 -0
  503. package/dist/icons/screen-share.d.ts +2 -0
  504. package/dist/icons/screen-share.js +6 -0
  505. package/dist/icons/search-x.d.ts +2 -0
  506. package/dist/icons/search-x.js +6 -0
  507. package/dist/icons/search.d.ts +2 -0
  508. package/dist/icons/search.js +6 -0
  509. package/dist/icons/send.d.ts +2 -0
  510. package/dist/icons/send.js +6 -0
  511. package/dist/icons/server.d.ts +2 -0
  512. package/dist/icons/server.js +6 -0
  513. package/dist/icons/settings.d.ts +2 -0
  514. package/dist/icons/settings.js +6 -0
  515. package/dist/icons/shapes.d.ts +2 -0
  516. package/dist/icons/shapes.js +6 -0
  517. package/dist/icons/share.d.ts +2 -0
  518. package/dist/icons/share.js +6 -0
  519. package/dist/icons/shield-alert.d.ts +2 -0
  520. package/dist/icons/shield-alert.js +6 -0
  521. package/dist/icons/shield-check.d.ts +2 -0
  522. package/dist/icons/shield-check.js +6 -0
  523. package/dist/icons/shield-lock.d.ts +2 -0
  524. package/dist/icons/shield-lock.js +6 -0
  525. package/dist/icons/shield-off.d.ts +2 -0
  526. package/dist/icons/shield-off.js +6 -0
  527. package/dist/icons/shield-user.d.ts +2 -0
  528. package/dist/icons/shield-user.js +6 -0
  529. package/dist/icons/shield-x.d.ts +2 -0
  530. package/dist/icons/shield-x.js +6 -0
  531. package/dist/icons/shield.d.ts +2 -0
  532. package/dist/icons/shield.js +6 -0
  533. package/dist/icons/shopping-cart.d.ts +2 -0
  534. package/dist/icons/shopping-cart.js +6 -0
  535. package/dist/icons/shuffle.d.ts +2 -0
  536. package/dist/icons/shuffle.js +6 -0
  537. package/dist/icons/sidebar-left.d.ts +2 -0
  538. package/dist/icons/sidebar-left.js +6 -0
  539. package/dist/icons/sidebar-right.d.ts +2 -0
  540. package/dist/icons/sidebar-right.js +6 -0
  541. package/dist/icons/skip-back.d.ts +2 -0
  542. package/dist/icons/skip-back.js +6 -0
  543. package/dist/icons/skip-forward.d.ts +2 -0
  544. package/dist/icons/skip-forward.js +6 -0
  545. package/dist/icons/sliders.d.ts +2 -0
  546. package/dist/icons/sliders.js +6 -0
  547. package/dist/icons/smartphone.d.ts +2 -0
  548. package/dist/icons/smartphone.js +6 -0
  549. package/dist/icons/sort-asc.d.ts +2 -0
  550. package/dist/icons/sort-asc.js +6 -0
  551. package/dist/icons/sort-desc.d.ts +2 -0
  552. package/dist/icons/sort-desc.js +6 -0
  553. package/dist/icons/sort.d.ts +2 -0
  554. package/dist/icons/sort.js +6 -0
  555. package/dist/icons/speaker.d.ts +2 -0
  556. package/dist/icons/speaker.js +6 -0
  557. package/dist/icons/square.d.ts +2 -0
  558. package/dist/icons/square.js +6 -0
  559. package/dist/icons/star.d.ts +2 -0
  560. package/dist/icons/star.js +6 -0
  561. package/dist/icons/store.d.ts +2 -0
  562. package/dist/icons/store.js +6 -0
  563. package/dist/icons/strikethrough.d.ts +2 -0
  564. package/dist/icons/strikethrough.js +6 -0
  565. package/dist/icons/sun.d.ts +2 -0
  566. package/dist/icons/sun.js +6 -0
  567. package/dist/icons/swap-horizontal.d.ts +2 -0
  568. package/dist/icons/swap-horizontal.js +6 -0
  569. package/dist/icons/swap-vertical.d.ts +2 -0
  570. package/dist/icons/swap-vertical.js +6 -0
  571. package/dist/icons/sync.d.ts +2 -0
  572. package/dist/icons/sync.js +6 -0
  573. package/dist/icons/table.d.ts +2 -0
  574. package/dist/icons/table.js +6 -0
  575. package/dist/icons/tag.d.ts +2 -0
  576. package/dist/icons/tag.js +6 -0
  577. package/dist/icons/target.d.ts +2 -0
  578. package/dist/icons/target.js +6 -0
  579. package/dist/icons/terminal.d.ts +2 -0
  580. package/dist/icons/terminal.js +6 -0
  581. package/dist/icons/text-size.d.ts +2 -0
  582. package/dist/icons/text-size.js +6 -0
  583. package/dist/icons/text.d.ts +2 -0
  584. package/dist/icons/text.js +6 -0
  585. package/dist/icons/thumbs-down.d.ts +2 -0
  586. package/dist/icons/thumbs-down.js +6 -0
  587. package/dist/icons/thumbs-up.d.ts +2 -0
  588. package/dist/icons/thumbs-up.js +6 -0
  589. package/dist/icons/ticket.d.ts +2 -0
  590. package/dist/icons/ticket.js +6 -0
  591. package/dist/icons/timer.d.ts +2 -0
  592. package/dist/icons/timer.js +6 -0
  593. package/dist/icons/toggle-left.d.ts +2 -0
  594. package/dist/icons/toggle-left.js +6 -0
  595. package/dist/icons/toggle-right.d.ts +2 -0
  596. package/dist/icons/toggle-right.js +6 -0
  597. package/dist/icons/trash.d.ts +2 -0
  598. package/dist/icons/trash.js +6 -0
  599. package/dist/icons/trending-down.d.ts +2 -0
  600. package/dist/icons/trending-down.js +6 -0
  601. package/dist/icons/trending-up.d.ts +2 -0
  602. package/dist/icons/trending-up.js +6 -0
  603. package/dist/icons/trophy.d.ts +2 -0
  604. package/dist/icons/trophy.js +6 -0
  605. package/dist/icons/truck.d.ts +2 -0
  606. package/dist/icons/truck.js +6 -0
  607. package/dist/icons/underline.d.ts +2 -0
  608. package/dist/icons/underline.js +6 -0
  609. package/dist/icons/undo.d.ts +2 -0
  610. package/dist/icons/undo.js +6 -0
  611. package/dist/icons/upload.d.ts +2 -0
  612. package/dist/icons/upload.js +6 -0
  613. package/dist/icons/user-check.d.ts +2 -0
  614. package/dist/icons/user-check.js +6 -0
  615. package/dist/icons/user-circle.d.ts +2 -0
  616. package/dist/icons/user-circle.js +6 -0
  617. package/dist/icons/user-edit.d.ts +2 -0
  618. package/dist/icons/user-edit.js +6 -0
  619. package/dist/icons/user-lock.d.ts +2 -0
  620. package/dist/icons/user-lock.js +6 -0
  621. package/dist/icons/user-minus.d.ts +2 -0
  622. package/dist/icons/user-minus.js +6 -0
  623. package/dist/icons/user-plus.d.ts +2 -0
  624. package/dist/icons/user-plus.js +6 -0
  625. package/dist/icons/user-search.d.ts +2 -0
  626. package/dist/icons/user-search.js +6 -0
  627. package/dist/icons/user-x.d.ts +2 -0
  628. package/dist/icons/user-x.js +6 -0
  629. package/dist/icons/user.d.ts +2 -0
  630. package/dist/icons/user.js +6 -0
  631. package/dist/icons/users.d.ts +2 -0
  632. package/dist/icons/users.js +6 -0
  633. package/dist/icons/vault.d.ts +2 -0
  634. package/dist/icons/vault.js +6 -0
  635. package/dist/icons/video-off.d.ts +2 -0
  636. package/dist/icons/video-off.js +6 -0
  637. package/dist/icons/video.d.ts +2 -0
  638. package/dist/icons/video.js +6 -0
  639. package/dist/icons/volume-low.d.ts +2 -0
  640. package/dist/icons/volume-low.js +6 -0
  641. package/dist/icons/volume-off.d.ts +2 -0
  642. package/dist/icons/volume-off.js +6 -0
  643. package/dist/icons/volume.d.ts +2 -0
  644. package/dist/icons/volume.js +6 -0
  645. package/dist/icons/wallet.d.ts +2 -0
  646. package/dist/icons/wallet.js +6 -0
  647. package/dist/icons/watch.d.ts +2 -0
  648. package/dist/icons/watch.js +6 -0
  649. package/dist/icons/wifi-off.d.ts +2 -0
  650. package/dist/icons/wifi-off.js +6 -0
  651. package/dist/icons/wifi.d.ts +2 -0
  652. package/dist/icons/wifi.js +6 -0
  653. package/dist/icons/workflow.d.ts +2 -0
  654. package/dist/icons/workflow.js +6 -0
  655. package/dist/icons/wrench.d.ts +2 -0
  656. package/dist/icons/wrench.js +6 -0
  657. package/dist/icons/x-circle.d.ts +2 -0
  658. package/dist/icons/x-circle.js +6 -0
  659. package/dist/icons/x-square.d.ts +2 -0
  660. package/dist/icons/x-square.js +6 -0
  661. package/dist/icons/x.d.ts +2 -0
  662. package/dist/icons/x.js +6 -0
  663. package/dist/icons/zap.d.ts +2 -0
  664. package/dist/icons/zap.js +6 -0
  665. package/dist/icons/zoom-in.d.ts +2 -0
  666. package/dist/icons/zoom-in.js +6 -0
  667. package/dist/icons/zoom-out.d.ts +2 -0
  668. package/dist/icons/zoom-out.js +6 -0
  669. package/dist/index.d.ts +20 -0
  670. package/dist/index.js +22 -0
  671. package/dist/metadata.d.ts +11 -0
  672. package/dist/metadata.js +2991 -0
  673. package/dist/types.d.ts +60 -0
  674. package/dist/types.js +1 -0
  675. package/package.json +100 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Qeet Group
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,455 @@
1
+ <div align="center">
2
+
3
+ # ✨ Qeetrix Icons
4
+
5
+ ### The Qeet Group icon library — one grid, one stroke, every product
6
+
7
+ *Outline · Tree-shakeable · Accessible by default · Generated from canonical SVG*
8
+
9
+ <br>
10
+
11
+ [![CI](https://github.com/qeetgroup/qeetrix-icons/actions/workflows/ci.yml/badge.svg)](https://github.com/qeetgroup/qeetrix-icons/actions/workflows/ci.yml)
12
+ ![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=fff)
13
+ ![TypeScript](https://img.shields.io/badge/TypeScript-6-3178C6?logo=typescript&logoColor=fff)
14
+ ![Bun](https://img.shields.io/badge/Bun-1.3-F69220?logo=bun&logoColor=fff)
15
+ ![Biome](https://img.shields.io/badge/Biome-2-60A5FA?logo=biome&logoColor=fff)
16
+ ![License](https://img.shields.io/badge/License-MIT-green)
17
+
18
+ **[🚀 Install](#-install)** · **[🎨 Usage](#-usage)** · **[🔎 Find an icon](#-finding-an-icon)** · **[♿ Accessibility](#-accessibility)** · **[🏗 How it works](#-how-it-works)** · **[🛠 Develop](#-develop)**
19
+
20
+ | | | | |
21
+ |:---:|:---:|:---:|:---:|
22
+ | 🎯 **331** icons | 📂 **22** categories | 📦 **0** runtime deps | 🌳 **586 B** for one icon |
23
+
24
+ > **Status — Phase 3.** A complete enterprise catalogue: **331 icons** across 22 categories,
25
+ > 298 of them rated essential or highly useful. One visual language, every glyph reviewed at
26
+ > 16/20/24/32px. See the [coverage matrix](docs/icon-catalog.md).
27
+
28
+ </div>
29
+
30
+ ---
31
+
32
+ ## ✨ What it is
33
+
34
+ A React icon library where **the SVG file is the source of truth**. Everything else — the components,
35
+ the exports, the metadata, the types — is generated from `icons/<category>/<name>.svg` and validated
36
+ on the way through.
37
+
38
+ | | |
39
+ |:--|:--|
40
+ | **One family, not a pile** | A written [visual language](docs/icon-design-system.md) — shared motifs, one badge radius, 45° diagonals — so the set coheres. |
41
+ | **Governed, not accumulated** | Enforced naming (`user-plus`, never `add-user`), unique aliases, and a [catalogue doctor](docs/contributing.md) that reports duplicate semantics. |
42
+ | **One grid** | Every icon is 24 × 24, 2px stroke, round caps. Enforced, not requested. |
43
+ | **Inherits colour** | `currentColor` throughout. Works in dark mode and after a re-brand with no icon-specific styling. |
44
+ | **Adding an icon is one file** | Drop in an SVG, run `bun run generate`. The component, export and metadata appear. |
45
+ | **Invalid icons fail the build** | 30 error rules, 4 warnings. A hard-coded colour, a `transform`, or a stray editor `<title>` cannot ship. |
46
+ | **Genuinely tree-shakeable** | One icon bundles to **586 B**; all 331 to 76 KB — 0.8%. Verified with a real bundler, not assumed. |
47
+ | **Accessible by default** | Decorative unless you name it, and it is impossible to produce a labelled-but-hidden icon. |
48
+
49
+ ---
50
+
51
+ ## 🚀 Install
52
+
53
+ ```bash
54
+ bun add @qeetrix/icons
55
+ ```
56
+
57
+ React 19 or later is a peer dependency. There are no runtime dependencies.
58
+
59
+ ---
60
+
61
+ ## 🎨 Usage
62
+
63
+ ```tsx
64
+ import { ArrowLeft } from "@qeetrix/icons";
65
+
66
+ export function BackButton() {
67
+ return (
68
+ <button type="button">
69
+ <ArrowLeft size={20} />
70
+ Back
71
+ </button>
72
+ );
73
+ }
74
+ ```
75
+
76
+ ### Sizing
77
+
78
+ `size` sets width and height together. The default is `24`.
79
+
80
+ ```tsx
81
+ <ArrowLeft size={16} />
82
+ <ArrowLeft size={20} />
83
+ <ArrowLeft size={24} />
84
+ <ArrowLeft size="1.5rem" /> {/* any CSS length */}
85
+ ```
86
+
87
+ Or size it with CSS, which scales with the surrounding type:
88
+
89
+ ```tsx
90
+ <ArrowLeft className="size-5" />
91
+ ```
92
+
93
+ ### Colour
94
+
95
+ Never set an icon's colour directly — it inherits from `currentColor`:
96
+
97
+ ```tsx
98
+ <span className="text-red-600">
99
+ <ShieldCheck /> {/* red */}
100
+ </span>
101
+
102
+ <button className="text-white bg-brand">
103
+ <Check /> {/* white */}
104
+ </button>
105
+ ```
106
+
107
+ This is why the set needs no dark-mode variant and no re-brand pass.
108
+
109
+ ### Stroke weight
110
+
111
+ ```tsx
112
+ <ArrowLeft strokeWidth={1.5} /> {/* lighter, for large sizes */}
113
+ ```
114
+
115
+ ### Everything else
116
+
117
+ Props are `React.SVGProps<SVGSVGElement>` plus `size`, so every standard SVG and React attribute
118
+ works — `className`, `style`, `onClick`, `data-*`, `ref`, all `aria-*`:
119
+
120
+ ```tsx
121
+ <ArrowLeft
122
+ size={20}
123
+ className="shrink-0 text-muted-foreground"
124
+ aria-label="Go back"
125
+ onClick={goBack}
126
+ />
127
+ ```
128
+
129
+ ### Types
130
+
131
+ ```ts
132
+ import type { QeetrixIconProps } from "@qeetrix/icons";
133
+
134
+ type QeetrixIconProps = React.SVGProps<SVGSVGElement> & {
135
+ size?: number | string;
136
+ };
137
+ ```
138
+
139
+ > Named `QeetrixIconProps`, not `IconProps`, because `@qeetrix/ui` already exports an `IconProps` for
140
+ > its `<Icon icon={…}>` wrapper. Distinct names let a consumer re-export both packages from one barrel.
141
+
142
+ ### Metadata
143
+
144
+ For an icon picker, a docs search, or any catalogue UI — importable **without** pulling in a single
145
+ component:
146
+
147
+ ```ts
148
+ import { icons, iconNames } from "@qeetrix/icons/metadata";
149
+
150
+ icons.find((icon) => icon.name === "search");
151
+ // {
152
+ // name: "search",
153
+ // component: "Search",
154
+ // category: "interface",
155
+ // tags: ["find", "magnifier", "lookup", "query", "filter"],
156
+ // aliases: ["magnifying-glass"],
157
+ // mirror: true,
158
+ // }
159
+ ```
160
+
161
+ `mirror` marks glyphs that must flip under `dir="rtl"` — horizontal directions only, since `arrow-up`
162
+ means the same thing in both reading directions. It is metadata, not behaviour: this package does not
163
+ read layout direction, so apply it yourself (`rtl:-scale-x-100`, or swap the icon).
164
+
165
+ ---
166
+
167
+ ## 📂 Categories
168
+
169
+ The category is the source directory and is **browse metadata only** — it is never part of an icon's
170
+ export name, so moving an icon between categories is not a breaking change.
171
+
172
+ | Category | Icons |
173
+ |:--|--:|
174
+ | `accessibility` | 6 |
175
+ | `arrows` | 13 |
176
+ | `communication` | 25 |
177
+ | `data` | 14 |
178
+ | `design` | 8 |
179
+ | `development` | 12 |
180
+ | `devices` | 16 |
181
+ | `editing` | 26 |
182
+ | `files` | 34 |
183
+ | `finance` | 12 |
184
+ | `hardware` | 1 |
185
+ | `interface` | 35 |
186
+ | `maps` | 2 |
187
+ | `media` | 14 |
188
+ | `navigation` | 19 |
189
+ | `notifications` | 5 |
190
+ | `security` | 18 |
191
+ | `social` | 7 |
192
+ | `status` | 13 |
193
+ | `time` | 14 |
194
+ | `users` | 16 |
195
+ | `utilities` | 21 |
196
+
197
+ The category is the source directory and is **browse metadata only** — it is never part of an icon's
198
+ export name, so moving an icon between categories is not a breaking change.
199
+
200
+ Directional glyphs carry a `mirror` flag for RTL: 72 of 331 icons are marked. Vertical direction never
201
+ mirrors, and media transport controls deliberately do not either — playback direction is not reading
202
+ direction.
203
+
204
+ ---
205
+
206
+ ## 🔎 Finding an icon
207
+
208
+ At this size, searching first is the difference between a coherent catalogue and a pile.
209
+
210
+ ```bash
211
+ bun run explorer && open .explorer/index.html
212
+ ```
213
+
214
+ The explorer is a single static file with the whole catalogue inlined — no server, no build step.
215
+
216
+ | | |
217
+ |:--|:--|
218
+ | **Search** | Names, component names, categories, tags and aliases, with deterministic ranking: exact name → prefix → alias → component → substring → tag → category |
219
+ | **Filter** | Category, coverage priority, mirror-only |
220
+ | **Preview** | 16 / 20 / 24 / 32 / 48 / 64 px, on light or dark, grid or list |
221
+ | **Detail** | Full metadata plus copyable import, JSX and component name |
222
+ | **Linkable** | `#icon=shield-check`, `#q=lock&category=security` — every view is shareable |
223
+ | **Keyboard** | Tab and Enter throughout, arrow keys across the grid, `/` to focus search, Escape to close |
224
+
225
+ Or read the [coverage matrix](docs/icon-catalog.md), which lists every icon with its tags and
226
+ aliases. Search the **aliases** too — many words you would reach for are aliases rather than names:
227
+
228
+ | You want | It is called |
229
+ |:--|:--|
230
+ | `delete`, `bin` | `trash` |
231
+ | `add`, `new` | `plus` |
232
+ | `close`, `cancel` | `x` |
233
+ | `gear`, `cog` | `settings` |
234
+ | `stop` | `square` |
235
+ | `sign-in` / `sign-out` | `log-in` / `log-out` |
236
+ | `checkbox` | `check-square` |
237
+ | `hamburger` | `menu` |
238
+ | `spinner` | `loader` |
239
+
240
+ Programmatically, `@qeetrix/icons/metadata` carries the same data:
241
+
242
+ ```ts
243
+ import { icons } from "@qeetrix/icons/metadata";
244
+
245
+ const match = (q: string) =>
246
+ icons.filter((i) => i.name.includes(q) || i.tags.includes(q) || i.aliases.includes(q));
247
+ ```
248
+
249
+ ---
250
+
251
+ ## ♿ Accessibility
252
+
253
+ An icon is **decorative by default** and carries `aria-hidden="true"`. Passing `aria-label` or
254
+ `aria-labelledby` automatically makes it a named graphic (`role="img"`) and drops `aria-hidden`.
255
+
256
+ That automatic flip is the design: it makes the usual silent bug — an element that is both
257
+ `aria-hidden` and labelled, so the label is never announced — impossible to write.
258
+
259
+ **Icon beside visible text** — decorative. The text is the label; do nothing.
260
+
261
+ ```tsx
262
+ <button type="button">
263
+ <ArrowLeft size={20} />
264
+ Back
265
+ </button>
266
+ ```
267
+
268
+ **Icon-only control** — name the *control*, not the icon.
269
+
270
+ ```tsx
271
+ <button type="button" aria-label="Delete row">
272
+ <Trash size={16} />
273
+ </button>
274
+ ```
275
+
276
+ **Standalone meaningful icon** — nothing else conveys it, so name the icon.
277
+
278
+ ```tsx
279
+ <ShieldCheck size={16} aria-label="Verified" />
280
+ ```
281
+
282
+ **Opting out** — pass `aria-hidden={false}` or an explicit `role`.
283
+
284
+ The suite verifies these patterns with axe inside buttons, links, inputs, navigation, menus,
285
+ tooltips, data tables and form validation messages.
286
+
287
+ Do **not** put a `<title>` in a source SVG to name an icon. The same glyph means different things in
288
+ different places — `x` is "Close" in a dialog and "Remove" in a chip — so the name belongs at the
289
+ usage site.
290
+
291
+ ---
292
+
293
+ ## 🏗 How it works
294
+
295
+ The SVG source is canonical. Everything downstream is derived:
296
+
297
+ ```text
298
+ icons/arrows/arrow-left.svg
299
+ ↓ bun run generate
300
+ src/icons/arrow-left.tsx export function ArrowLeft(props: QeetrixIconProps)
301
+ src/icons/index.ts export { ArrowLeft } from "./arrow-left.js";
302
+ src/metadata.ts { name: "arrow-left", component: "ArrowLeft", … }
303
+ ↓ bun run build
304
+ dist/icons/arrow-left.js + .d.ts
305
+ ```
306
+
307
+ Generated files are **committed** — a reader sees real component source, and a diff shows exactly
308
+ what an icon change did to the public API. `bun run generate:check` proves they still match the
309
+ generator, and CI runs it before the build so a hand-edit is caught rather than overwritten.
310
+
311
+ Output is deterministic: no timestamps, and all ordering by explicit codepoint comparison rather than
312
+ `localeCompare`, so a tracked file's byte order never depends on the machine that produced it.
313
+
314
+ ### Layout
315
+
316
+ ```text
317
+ icons/ ← source of truth, 22 categories
318
+ icon-metadata.json ← tags, aliases, RTL mirror flags, coverage priority
319
+ scripts/
320
+ validate.mjs ← bun run validate
321
+ generate.mjs ← bun run generate [--check]
322
+ explorer.mjs ← bun run explorer
323
+ catalog.mjs ← bun run catalog [--check]
324
+ api-docs.mjs ← bun run api [--check]
325
+ verify-package.mjs ← bun run verify:package
326
+ doctor.mjs ← bun run doctor
327
+ clean.mjs
328
+ config/ categories · package-size baseline · consumer fixture
329
+ lib/ discover · svg · rules · naming · emit · io · pipeline · search
330
+ src/
331
+ index.ts ← public barrel (hand-written)
332
+ types.ts ← QeetrixIconProps, IconMetadata (hand-written)
333
+ icon-base.tsx ← the shared <svg> shell + a11y contract (hand-written)
334
+ metadata.ts ← GENERATED
335
+ icons/ ← GENERATED, one module per icon
336
+ tests/
337
+ fixtures/ valid + invalid SVGs, outside icons/ on purpose
338
+ icons/ metadata/ build/ visual/ explorer/
339
+ docs/ icon-catalog · icon-design-system · icon-guidelines · naming · contributing
340
+ ```
341
+
342
+ ### Import surface
343
+
344
+ | Specifier | Resolves to |
345
+ |:--|:--|
346
+ | `@qeetrix/icons` | Every icon, plus `IconBase` and the spec constants |
347
+ | `@qeetrix/icons/metadata` | The catalogue only — no components |
348
+ | `@qeetrix/icons/icons/arrow-left` | A single icon, for bundlers with weak tree-shaking |
349
+
350
+ No internal paths are exposed. There is no `@qeetrix/icons/dist/…`.
351
+
352
+ ---
353
+
354
+ ## ✅ Validation
355
+
356
+ `bun run validate` enforces the specification in
357
+ **[docs/icon-guidelines.md](docs/icon-guidelines.md)**. Errors fail the build; warnings do not.
358
+
359
+ Rejected: a `viewBox` other than `0 0 24 24` · `width`/`height` on the root · missing or wrong root
360
+ spec attributes · hard-coded colours · `transform` anywhere · raster or `data:` content · external
361
+ references · `<style>` or `style=` · editor metadata · `id` and `class` attributes · elements or
362
+ attributes outside the allowlist · stray text · `DOCTYPE` or CDATA · empty icons · bad filenames ·
363
+ unknown categories · duplicate names · component-name collisions · orphan metadata · aliases claimed
364
+ twice or colliding with an icon name · an invalid `priority`.
365
+
366
+ Colour is checked by **allowlist** — only `none`, `currentColor`, `inherit` and `transparent` are
367
+ accepted — so `#f26d0e`, `rgb(0 0 0)`, `oklch(…)` and all 148 CSS colour names are caught without any
368
+ of them appearing in the rule set.
369
+
370
+ `bun run doctor` adds the catalogue-scale checks: duplicate semantics, half-finished families, naming
371
+ drift, category imbalance, thin or spammy tags. It is advisory and exits 0 — those are judgement
372
+ calls, and a check that blocked a merge over a naming opinion would just get switched off.
373
+
374
+ ---
375
+
376
+ ## 🛠 Develop
377
+
378
+ ```bash
379
+ bun install
380
+ bun run validate # check every source SVG
381
+ bun run generate # regenerate components, barrel and metadata
382
+ bun run explorer # build the explorer and review sheets, then open .explorer/index.html
383
+ bun run catalog # regenerate docs/icon-catalog.md
384
+ bun run doctor # catalogue health report (advisory)
385
+ bun run typecheck
386
+ bun run lint # Biome — lint and format
387
+ bun run test
388
+ bun run build # clean → generate → tsc → tsc-alias
389
+ ```
390
+
391
+ ### The icon explorer
392
+
393
+ `bun run explorer` writes three artifacts to `.explorer/` (gitignored):
394
+
395
+ | | |
396
+ |:--|:--|
397
+ | `index.html` | The **icon explorer** — ranked search over names, tags and aliases; category, priority and mirror filters; grid or list; preview at 16/20/24/32/48/64; light and dark preview; copy import, JSX or component name; deep-linkable |
398
+ | `contact-sheet.svg` | The whole set on one page. The only way to catch an icon that looks wrong *beside its siblings* |
399
+ | `small-sizes.svg` | Every icon at all four sizes. 16px is where glyphs fall apart |
400
+
401
+ The last two exist because the most common icon defect is not invalidity — it is an icon that is
402
+ individually fine and collectively wrong. Every glyph in this catalogue was reviewed this way, and
403
+ that review is what caught `settings` reading as a sun, `undo`/`reply` sharing a silhouette, and the
404
+ `mail-*` badges colliding with the envelope.
405
+
406
+ Tooling: **bun**, **Biome 2**, **Vitest 4**, **Changesets**, and plain **`tsc`** for the build — no
407
+ bundler, which suits a package whose ideal output is one module per icon anyway. This mirrors
408
+ `@qeetrix/ui`; there is no ESLint and no Prettier anywhere in the workspace.
409
+
410
+ CI runs two jobs. `verify` covers
411
+ `validate → generate:check → build → typecheck → lint → test → explorer → catalog:check → api:check → doctor`.
412
+ `package` runs `verify:package` on its own, so a slow install and bundle measurement does not gate
413
+ every review.
414
+
415
+ **Docs**
416
+
417
+ | | |
418
+ |:--|:--|
419
+ | [docs/usage.md](docs/usage.md) | **Start here as a consumer** — install, sizing, colour, accessibility, entry points |
420
+ | [docs/api.md](docs/api.md) | Complete prop reference, generated from the shipped types |
421
+ | [docs/icon-catalog.md](docs/icon-catalog.md) | **The coverage matrix** — every icon, its priority, tags, aliases and RTL flag. Search this before adding one |
422
+ | [docs/releases.md](docs/releases.md) | Changesets, what each bump means, deprecation policy |
423
+ | [docs/icon-design-system.md](docs/icon-design-system.md) | The visual language — grid bands, stroke density, shared motifs, small-size rules |
424
+ | [docs/icon-guidelines.md](docs/icon-guidelines.md) | The technical spec and every validation rule |
425
+ | [docs/naming.md](docs/naming.md) | Naming governance, and tags vs aliases |
426
+ | [docs/contributing.md](docs/contributing.md) | Adding an icon, adding a rule, conventions |
427
+
428
+ ---
429
+
430
+ ## 🔭 What's next
431
+
432
+ Phase 3 delivered enterprise coverage. Phase 4 should build:
433
+
434
+ - **`@qeetrix/ui` migration** — replace `lucide-react` and the 10 placeholder brand glyphs. The prop
435
+ shape is already drop-in compatible, so this is a swap plus a codemod. Land the Tailwind v4 syntax
436
+ migration sitting uncommitted in that repo first.
437
+ - **Qeet-domain icons** — SAML, OIDC, SCIM, webhook, audit-log, tenant, GST. Deferred deliberately:
438
+ they need product review, not just drawing.
439
+ - **Coverage audit against real screens** — walk actual Qeet product UIs and record what is still
440
+ missing, rather than guessing at the next hundred.
441
+ - **Discovery surfaces** — an icon browser in `qeetrix-docs` and Storybook stories, both fed by
442
+ `@qeetrix/icons/metadata`.
443
+ - **Figma library** published from the same canonical SVG, so design and code cannot drift.
444
+ - **A published `1.0.0`**, once the migration has proved the API in a real consumer.
445
+
446
+ ---
447
+
448
+ ## 📄 License
449
+
450
+ [MIT](LICENSE). The artwork is original to Qeet Group — nothing in this repository is derived from
451
+ lucide, Feather, Heroicons, Material Icons, Font Awesome, Phosphor, Tabler or any other icon set.
452
+
453
+ Part of the **[Qeet Group](https://github.com/qeetgroup)** workspace, alongside
454
+ [`@qeetrix/ui`](https://github.com/qeetgroup/qeetrix-ui).
455
+ # qeetrix-icons
@@ -0,0 +1,28 @@
1
+ import type { QeetrixIconProps } from "./types.js";
2
+ /** Canonical grid. Every source SVG is authored against `0 0 24 24`. */
3
+ export declare const ICON_VIEW_BOX = "0 0 24 24";
4
+ /** Default rendered size in px. */
5
+ export declare const ICON_DEFAULT_SIZE = 24;
6
+ /** Default stroke width. Matches the outline spec in docs/icon-guidelines.md. */
7
+ export declare const ICON_DEFAULT_STROKE_WIDTH = 2;
8
+ /**
9
+ * The single `<svg>` shell every generated icon renders through.
10
+ *
11
+ * Centralising it means the grid, the stroke defaults and — most importantly —
12
+ * the accessibility behaviour are defined exactly once rather than duplicated
13
+ * into every generated component.
14
+ *
15
+ * Accessibility: an icon is decorative by default (`aria-hidden="true"`),
16
+ * because that is overwhelmingly the common case — an icon beside a text label
17
+ * adds nothing for a screen reader. Passing `aria-label` or `aria-labelledby`
18
+ * flips it to a semantic graphic (`role="img"`, no `aria-hidden`). That
19
+ * automatic flip is the point: it makes the silent failure mode — an element
20
+ * that is both `aria-hidden` and labelled, so the label is never announced —
21
+ * unrepresentable.
22
+ *
23
+ * `...rest` is spread last, so every default above remains overridable;
24
+ * `aria-hidden={false}` opts out of the decorative default entirely.
25
+ *
26
+ * Server-safe: no hooks, no browser APIs, no `"use client"`.
27
+ */
28
+ export declare function IconBase({ size, strokeWidth, children, ...rest }: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /** Canonical grid. Every source SVG is authored against `0 0 24 24`. */
3
+ export const ICON_VIEW_BOX = "0 0 24 24";
4
+ /** Default rendered size in px. */
5
+ export const ICON_DEFAULT_SIZE = 24;
6
+ /** Default stroke width. Matches the outline spec in docs/icon-guidelines.md. */
7
+ export const ICON_DEFAULT_STROKE_WIDTH = 2;
8
+ /**
9
+ * The single `<svg>` shell every generated icon renders through.
10
+ *
11
+ * Centralising it means the grid, the stroke defaults and — most importantly —
12
+ * the accessibility behaviour are defined exactly once rather than duplicated
13
+ * into every generated component.
14
+ *
15
+ * Accessibility: an icon is decorative by default (`aria-hidden="true"`),
16
+ * because that is overwhelmingly the common case — an icon beside a text label
17
+ * adds nothing for a screen reader. Passing `aria-label` or `aria-labelledby`
18
+ * flips it to a semantic graphic (`role="img"`, no `aria-hidden`). That
19
+ * automatic flip is the point: it makes the silent failure mode — an element
20
+ * that is both `aria-hidden` and labelled, so the label is never announced —
21
+ * unrepresentable.
22
+ *
23
+ * `...rest` is spread last, so every default above remains overridable;
24
+ * `aria-hidden={false}` opts out of the decorative default entirely.
25
+ *
26
+ * Server-safe: no hooks, no browser APIs, no `"use client"`.
27
+ */
28
+ export function IconBase({ size = ICON_DEFAULT_SIZE, strokeWidth = ICON_DEFAULT_STROKE_WIDTH, children, ...rest }) {
29
+ const labelled = rest["aria-label"] != null || rest["aria-labelledby"] != null;
30
+ // On the suppression below: this component IS the library's accessibility
31
+ // contract, and it satisfies noSvgWithoutTitle's intent dynamically rather
32
+ // than statically. A decorative icon carries `aria-hidden` (which the rule
33
+ // accepts in place of a title); a semantic one is named by the consumer's
34
+ // `aria-label`/`aria-labelledby` and gets `role="img"`. A static `<title>`
35
+ // here would give every icon in the library the same useless accessible name.
36
+ return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: ICON_VIEW_BOX, width: size, height: size, fill: "none", stroke: "currentColor", strokeWidth: strokeWidth, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": labelled ? undefined : true, role: labelled ? "img" : undefined, ...rest, children: children }));
37
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function Accessibility(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/accessibility/accessibility.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function Accessibility(props) {
5
+ return (_jsxs(IconBase, { ...props, children: [_jsx("circle", { cx: "12", cy: "4.5", r: "2" }), _jsx("path", { d: "M4 8.5h16" }), _jsx("path", { d: "M9 8.5l1 5.5h4l1-5.5" }), _jsx("path", { d: "M10 14l-2 7M14 14l2 7" })] }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function Activity(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/data/activity.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function Activity(props) {
5
+ return (_jsx(IconBase, { ...props, children: _jsx("path", { d: "M22 12h-4l-3 8-4-16-3 8H2" }) }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlarmClock(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/time/alarm-clock.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlarmClock(props) {
5
+ return (_jsxs(IconBase, { ...props, children: [_jsx("circle", { cx: "12", cy: "13", r: "7.5" }), _jsx("path", { d: "M12 9.5V13l2.5 1.5" }), _jsx("path", { d: "M6 4.5 4 6.5" }), _jsx("path", { d: "M18 4.5 20 6.5" })] }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlertCircle(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/status/alert-circle.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlertCircle(props) {
5
+ return (_jsxs(IconBase, { ...props, children: [_jsx("circle", { cx: "12", cy: "12", r: "9" }), _jsx("path", { d: "M12 8v4" }), _jsx("path", { d: "M12 16h.01" })] }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlertOctagon(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/status/alert-octagon.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlertOctagon(props) {
5
+ return (_jsxs(IconBase, { ...props, children: [_jsx("path", { d: "M8 3h8l5 5v8l-5 5H8l-5-5V8z" }), _jsx("path", { d: "M12 8v4" }), _jsx("path", { d: "M12 16h.01" })] }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlertTriangle(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/status/alert-triangle.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlertTriangle(props) {
5
+ return (_jsxs(IconBase, { ...props, children: [_jsx("path", { d: "M12 4l9 16H3z" }), _jsx("path", { d: "M12 10v4" }), _jsx("path", { d: "M12 17h.01" })] }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlignCenter(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/editing/align-center.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlignCenter(props) {
5
+ return (_jsx(IconBase, { ...props, children: _jsx("path", { d: "M3 6h18M6 12h12M5 18h14" }) }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlignJustify(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/editing/align-justify.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlignJustify(props) {
5
+ return (_jsx(IconBase, { ...props, children: _jsx("path", { d: "M3 6h18M3 12h18M3 18h18" }) }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlignLeft(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/editing/align-left.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlignLeft(props) {
5
+ return (_jsx(IconBase, { ...props, children: _jsx("path", { d: "M3 6h18M3 12h12M3 18h16" }) }));
6
+ }
@@ -0,0 +1,2 @@
1
+ import type { QeetrixIconProps } from "../types.js";
2
+ export declare function AlignRight(props: QeetrixIconProps): import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /* GENERATED by scripts/generate.mjs from icons/editing/align-right.svg. Do not edit by hand. */
3
+ import { IconBase } from "../icon-base.js";
4
+ export function AlignRight(props) {
5
+ return (_jsx(IconBase, { ...props, children: _jsx("path", { d: "M3 6h18M9 12h12M7 18h14" }) }));
6
+ }