@bookklik/senangstart-icons 1.0.7 → 1.0.11

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 (537) hide show
  1. package/.agent/skills/build-scripts/SKILL.md +155 -0
  2. package/.agent/skills/icon-development/SKILL.md +154 -0
  3. package/.agent/skills/senangstart-icons-architecture/SKILL.md +123 -0
  4. package/.agent/skills/testing/SKILL.md +202 -0
  5. package/.agent/skills/web-components/SKILL.md +209 -0
  6. package/.agent/workflows/add-icon.md +85 -0
  7. package/.agent/workflows/build.md +73 -0
  8. package/.agent/workflows/dev.md +52 -0
  9. package/.agent/workflows/docs.md +77 -0
  10. package/.agent/workflows/publish.md +80 -0
  11. package/.agent/workflows/test.md +56 -0
  12. package/.github/workflows/deploy-docs.yml +61 -0
  13. package/README.md +5 -5
  14. package/docs/.vitepress/config.mjs +173 -0
  15. package/docs/.vitepress/theme/custom.css +64 -0
  16. package/docs/.vitepress/theme/index.js +4 -0
  17. package/docs/guide/configuration.md +80 -0
  18. package/docs/guide/getting-started.md +41 -0
  19. package/docs/guide/installation.md +54 -0
  20. package/docs/guide/styling.md +156 -0
  21. package/docs/guide/usage.md +96 -0
  22. package/docs/icons/alert.md +55 -0
  23. package/docs/icons/align-bottom-object.md +55 -0
  24. package/docs/icons/align-center-object.md +55 -0
  25. package/docs/icons/align-left-object.md +55 -0
  26. package/docs/icons/align-middle-object.md +55 -0
  27. package/docs/icons/align-right-object.md +55 -0
  28. package/docs/icons/align-top-object.md +55 -0
  29. package/docs/icons/ar.md +55 -0
  30. package/docs/icons/archive-box.md +55 -0
  31. package/docs/icons/arrow-down.md +55 -0
  32. package/docs/icons/arrow-left-arrow-right.md +55 -0
  33. package/docs/icons/arrow-left-on-rectangle.md +55 -0
  34. package/docs/icons/arrow-left-right.md +55 -0
  35. package/docs/icons/arrow-left.md +55 -0
  36. package/docs/icons/arrow-long-down.md +55 -0
  37. package/docs/icons/arrow-long-left.md +55 -0
  38. package/docs/icons/arrow-long-right.md +55 -0
  39. package/docs/icons/arrow-long-up.md +55 -0
  40. package/docs/icons/arrow-path.md +55 -0
  41. package/docs/icons/arrow-right-on-rectangle.md +55 -0
  42. package/docs/icons/arrow-right.md +55 -0
  43. package/docs/icons/arrow-rotate-ccw.md +55 -0
  44. package/docs/icons/arrow-rotate-cw.md +55 -0
  45. package/docs/icons/arrow-top-right-on-square.md +55 -0
  46. package/docs/icons/arrow-up-arrow-down.md +55 -0
  47. package/docs/icons/arrow-up-down-left-right.md +55 -0
  48. package/docs/icons/arrow-up-down.md +55 -0
  49. package/docs/icons/arrow-up.md +55 -0
  50. package/docs/icons/banknotes.md +55 -0
  51. package/docs/icons/bars-3.md +55 -0
  52. package/docs/icons/basket.md +55 -0
  53. package/docs/icons/battery-0.md +55 -0
  54. package/docs/icons/battery-10.md +55 -0
  55. package/docs/icons/battery-100.md +55 -0
  56. package/docs/icons/battery-50.md +55 -0
  57. package/docs/icons/bell-alert.md +55 -0
  58. package/docs/icons/bell.md +55 -0
  59. package/docs/icons/bolt.md +55 -0
  60. package/docs/icons/book-close.md +55 -0
  61. package/docs/icons/book-open.md +55 -0
  62. package/docs/icons/book-stacked.md +55 -0
  63. package/docs/icons/bookmark.md +55 -0
  64. package/docs/icons/briefcase.md +55 -0
  65. package/docs/icons/brush.md +55 -0
  66. package/docs/icons/cake.md +55 -0
  67. package/docs/icons/calendar-approve.md +55 -0
  68. package/docs/icons/calendar-days.md +55 -0
  69. package/docs/icons/calendar-minus.md +55 -0
  70. package/docs/icons/calendar-plus.md +55 -0
  71. package/docs/icons/calendar-reject.md +55 -0
  72. package/docs/icons/calendar.md +55 -0
  73. package/docs/icons/camera.md +55 -0
  74. package/docs/icons/carousel.md +55 -0
  75. package/docs/icons/chart-bar.md +55 -0
  76. package/docs/icons/chart-line.md +55 -0
  77. package/docs/icons/chart-pie.md +55 -0
  78. package/docs/icons/chat-bubble-left-ellipsis.md +55 -0
  79. package/docs/icons/chat-bubble-left-right.md +55 -0
  80. package/docs/icons/chat-bubble-left.md +55 -0
  81. package/docs/icons/chat-bubble-right-ellipsis.md +55 -0
  82. package/docs/icons/chat-bubble-right.md +55 -0
  83. package/docs/icons/chatbot.md +55 -0
  84. package/docs/icons/check.md +55 -0
  85. package/docs/icons/chevron-double-down.md +55 -0
  86. package/docs/icons/chevron-double-left.md +55 -0
  87. package/docs/icons/chevron-double-right.md +55 -0
  88. package/docs/icons/chevron-double-up.md +55 -0
  89. package/docs/icons/chevron-down.md +55 -0
  90. package/docs/icons/chevron-left.md +55 -0
  91. package/docs/icons/chevron-right.md +55 -0
  92. package/docs/icons/chevron-up.md +55 -0
  93. package/docs/icons/circle.md +55 -0
  94. package/docs/icons/clipboard-document-check.md +55 -0
  95. package/docs/icons/clipboard.md +55 -0
  96. package/docs/icons/clock.md +55 -0
  97. package/docs/icons/cloud.md +55 -0
  98. package/docs/icons/code.md +55 -0
  99. package/docs/icons/cog-6-tooth.md +55 -0
  100. package/docs/icons/compress.md +55 -0
  101. package/docs/icons/computer-code.md +55 -0
  102. package/docs/icons/computer-desktop.md +55 -0
  103. package/docs/icons/computer-laptop.md +55 -0
  104. package/docs/icons/cone.md +55 -0
  105. package/docs/icons/console.md +55 -0
  106. package/docs/icons/container.md +55 -0
  107. package/docs/icons/contrast.md +55 -0
  108. package/docs/icons/controller.md +55 -0
  109. package/docs/icons/credit-card.md +55 -0
  110. package/docs/icons/crop.md +55 -0
  111. package/docs/icons/crosshair.md +55 -0
  112. package/docs/icons/cube.md +55 -0
  113. package/docs/icons/currency-dollar.md +55 -0
  114. package/docs/icons/currency-euro.md +55 -0
  115. package/docs/icons/currency-pound.md +55 -0
  116. package/docs/icons/currency-ringgit.md +55 -0
  117. package/docs/icons/currency-yen.md +55 -0
  118. package/docs/icons/cursor.md +55 -0
  119. package/docs/icons/cylinder-half.md +55 -0
  120. package/docs/icons/cylinder.md +55 -0
  121. package/docs/icons/device-phone-mobile.md +55 -0
  122. package/docs/icons/device-tablet.md +55 -0
  123. package/docs/icons/diamond.md +55 -0
  124. package/docs/icons/document-duplicate.md +55 -0
  125. package/docs/icons/document-text.md +55 -0
  126. package/docs/icons/document.md +55 -0
  127. package/docs/icons/dodecahedron.md +55 -0
  128. package/docs/icons/double-tick.md +55 -0
  129. package/docs/icons/draw-curve.md +55 -0
  130. package/docs/icons/draw-line.md +55 -0
  131. package/docs/icons/envelope-open.md +55 -0
  132. package/docs/icons/envelope.md +55 -0
  133. package/docs/icons/eraser.md +55 -0
  134. package/docs/icons/exclamation-circle.md +55 -0
  135. package/docs/icons/exclamation-triangle.md +55 -0
  136. package/docs/icons/expand.md +55 -0
  137. package/docs/icons/eye-slash.md +55 -0
  138. package/docs/icons/eye.md +55 -0
  139. package/docs/icons/flag.md +55 -0
  140. package/docs/icons/flip-horizontal.md +55 -0
  141. package/docs/icons/flip-vertical.md +55 -0
  142. package/docs/icons/focus.md +55 -0
  143. package/docs/icons/folder-minus.md +55 -0
  144. package/docs/icons/folder-open.md +55 -0
  145. package/docs/icons/folder-plus.md +55 -0
  146. package/docs/icons/folder.md +55 -0
  147. package/docs/icons/font.md +55 -0
  148. package/docs/icons/game.md +55 -0
  149. package/docs/icons/gift.md +55 -0
  150. package/docs/icons/globe-alt.md +55 -0
  151. package/docs/icons/gradient.md +55 -0
  152. package/docs/icons/grid.md +55 -0
  153. package/docs/icons/group-object.md +55 -0
  154. package/docs/icons/hand-grab.md +55 -0
  155. package/docs/icons/hand-thumb-down.md +55 -0
  156. package/docs/icons/hand-thumb-up.md +55 -0
  157. package/docs/icons/hand.md +55 -0
  158. package/docs/icons/heart-extruded.md +55 -0
  159. package/docs/icons/heart.md +55 -0
  160. package/docs/icons/hexagon.md +55 -0
  161. package/docs/icons/home.md +55 -0
  162. package/docs/icons/horizontal-3-dots.md +55 -0
  163. package/docs/icons/hourglass-0.md +55 -0
  164. package/docs/icons/hourglass-100.md +55 -0
  165. package/docs/icons/hourglass-50.md +55 -0
  166. package/docs/icons/hourglass-80.md +55 -0
  167. package/docs/icons/icosahedron.md +55 -0
  168. package/docs/icons/inbox.md +55 -0
  169. package/docs/icons/index.md +1295 -0
  170. package/docs/icons/information-circle.md +55 -0
  171. package/docs/icons/key.md +55 -0
  172. package/docs/icons/layer-stacks.md +55 -0
  173. package/docs/icons/layout.md +55 -0
  174. package/docs/icons/light-bulb.md +55 -0
  175. package/docs/icons/lock-closed.md +55 -0
  176. package/docs/icons/lock-open.md +55 -0
  177. package/docs/icons/magic-wand.md +55 -0
  178. package/docs/icons/magnifying-glass-focus.md +55 -0
  179. package/docs/icons/magnifying-glass-minus.md +55 -0
  180. package/docs/icons/magnifying-glass-plus.md +55 -0
  181. package/docs/icons/magnifying-glass.md +55 -0
  182. package/docs/icons/map-pin.md +55 -0
  183. package/docs/icons/map.md +55 -0
  184. package/docs/icons/marquee.md +55 -0
  185. package/docs/icons/maximize.md +55 -0
  186. package/docs/icons/medal.md +55 -0
  187. package/docs/icons/microphone-mute.md +55 -0
  188. package/docs/icons/microphone.md +55 -0
  189. package/docs/icons/minimize.md +55 -0
  190. package/docs/icons/minus.md +55 -0
  191. package/docs/icons/moon.md +55 -0
  192. package/docs/icons/musical-note.md +55 -0
  193. package/docs/icons/octahedron.md +55 -0
  194. package/docs/icons/panorama.md +55 -0
  195. package/docs/icons/paper-clip.md +55 -0
  196. package/docs/icons/pause-circle.md +55 -0
  197. package/docs/icons/pause.md +55 -0
  198. package/docs/icons/pencil.md +55 -0
  199. package/docs/icons/phone-x-mark.md +55 -0
  200. package/docs/icons/phone.md +55 -0
  201. package/docs/icons/photo.md +55 -0
  202. package/docs/icons/plane.md +55 -0
  203. package/docs/icons/play-circle.md +55 -0
  204. package/docs/icons/play.md +55 -0
  205. package/docs/icons/plus.md +55 -0
  206. package/docs/icons/polygon.md +55 -0
  207. package/docs/icons/presentation-chart-line.md +55 -0
  208. package/docs/icons/presentation-media.md +55 -0
  209. package/docs/icons/pyramid.md +55 -0
  210. package/docs/icons/qr-code.md +55 -0
  211. package/docs/icons/question-mark-circle.md +55 -0
  212. package/docs/icons/rectangle.md +55 -0
  213. package/docs/icons/reel.md +55 -0
  214. package/docs/icons/robot.md +55 -0
  215. package/docs/icons/roof.md +55 -0
  216. package/docs/icons/rotate-add.md +55 -0
  217. package/docs/icons/rotate-minus.md +55 -0
  218. package/docs/icons/save.md +55 -0
  219. package/docs/icons/scissor.md +55 -0
  220. package/docs/icons/shapes.md +55 -0
  221. package/docs/icons/shield-check.md +55 -0
  222. package/docs/icons/shield-exclamation.md +55 -0
  223. package/docs/icons/shopping-bag.md +55 -0
  224. package/docs/icons/shopping-cart.md +55 -0
  225. package/docs/icons/sliders-horizontal.md +55 -0
  226. package/docs/icons/sliders-vertical.md +55 -0
  227. package/docs/icons/sparkles.md +55 -0
  228. package/docs/icons/speaker-wave.md +55 -0
  229. package/docs/icons/speaker-x-mark.md +55 -0
  230. package/docs/icons/sphere-half.md +55 -0
  231. package/docs/icons/sphere.md +55 -0
  232. package/docs/icons/square.md +55 -0
  233. package/docs/icons/star.md +55 -0
  234. package/docs/icons/stop-circle.md +55 -0
  235. package/docs/icons/stop.md +55 -0
  236. package/docs/icons/sun.md +55 -0
  237. package/docs/icons/table.md +55 -0
  238. package/docs/icons/tabs.md +55 -0
  239. package/docs/icons/tetrahedron.md +55 -0
  240. package/docs/icons/text-align-center.md +55 -0
  241. package/docs/icons/text-align-justify.md +55 -0
  242. package/docs/icons/text-align-left.md +55 -0
  243. package/docs/icons/text-align-right.md +55 -0
  244. package/docs/icons/text.md +55 -0
  245. package/docs/icons/thunder.md +55 -0
  246. package/docs/icons/tic-tac-toe.md +55 -0
  247. package/docs/icons/time-reset.md +55 -0
  248. package/docs/icons/torus-knot.md +55 -0
  249. package/docs/icons/torus.md +55 -0
  250. package/docs/icons/trash.md +55 -0
  251. package/docs/icons/trophy.md +55 -0
  252. package/docs/icons/truck.md +55 -0
  253. package/docs/icons/tube.md +55 -0
  254. package/docs/icons/ungroup-object.md +55 -0
  255. package/docs/icons/user-circle.md +55 -0
  256. package/docs/icons/user-group.md +55 -0
  257. package/docs/icons/user-minus.md +55 -0
  258. package/docs/icons/user-plus.md +55 -0
  259. package/docs/icons/user.md +55 -0
  260. package/docs/icons/users.md +55 -0
  261. package/docs/icons/vertical-3-dots.md +55 -0
  262. package/docs/icons/video-camera.md +55 -0
  263. package/docs/icons/vr.md +55 -0
  264. package/docs/icons/wedge.md +55 -0
  265. package/docs/icons/whiteboard.md +55 -0
  266. package/docs/icons/wifi.md +55 -0
  267. package/docs/icons/window.md +55 -0
  268. package/docs/icons/x-mark.md +55 -0
  269. package/docs/index.md +55 -0
  270. package/docs/ms/guide/configuration.md +80 -0
  271. package/docs/ms/guide/getting-started.md +41 -0
  272. package/docs/ms/guide/installation.md +54 -0
  273. package/docs/ms/guide/styling.md +156 -0
  274. package/docs/ms/guide/usage.md +96 -0
  275. package/docs/ms/icons/alert.md +55 -0
  276. package/docs/ms/icons/align-bottom-object.md +55 -0
  277. package/docs/ms/icons/align-center-object.md +55 -0
  278. package/docs/ms/icons/align-left-object.md +55 -0
  279. package/docs/ms/icons/align-middle-object.md +55 -0
  280. package/docs/ms/icons/align-right-object.md +55 -0
  281. package/docs/ms/icons/align-top-object.md +55 -0
  282. package/docs/ms/icons/ar.md +55 -0
  283. package/docs/ms/icons/archive-box.md +55 -0
  284. package/docs/ms/icons/arrow-down.md +55 -0
  285. package/docs/ms/icons/arrow-left-arrow-right.md +55 -0
  286. package/docs/ms/icons/arrow-left-on-rectangle.md +55 -0
  287. package/docs/ms/icons/arrow-left-right.md +55 -0
  288. package/docs/ms/icons/arrow-left.md +55 -0
  289. package/docs/ms/icons/arrow-long-down.md +55 -0
  290. package/docs/ms/icons/arrow-long-left.md +55 -0
  291. package/docs/ms/icons/arrow-long-right.md +55 -0
  292. package/docs/ms/icons/arrow-long-up.md +55 -0
  293. package/docs/ms/icons/arrow-path.md +55 -0
  294. package/docs/ms/icons/arrow-right-on-rectangle.md +55 -0
  295. package/docs/ms/icons/arrow-right.md +55 -0
  296. package/docs/ms/icons/arrow-rotate-ccw.md +55 -0
  297. package/docs/ms/icons/arrow-rotate-cw.md +55 -0
  298. package/docs/ms/icons/arrow-top-right-on-square.md +55 -0
  299. package/docs/ms/icons/arrow-up-arrow-down.md +55 -0
  300. package/docs/ms/icons/arrow-up-down-left-right.md +55 -0
  301. package/docs/ms/icons/arrow-up-down.md +55 -0
  302. package/docs/ms/icons/arrow-up.md +55 -0
  303. package/docs/ms/icons/banknotes.md +55 -0
  304. package/docs/ms/icons/bars-3.md +55 -0
  305. package/docs/ms/icons/basket.md +55 -0
  306. package/docs/ms/icons/battery-0.md +55 -0
  307. package/docs/ms/icons/battery-10.md +55 -0
  308. package/docs/ms/icons/battery-100.md +55 -0
  309. package/docs/ms/icons/battery-50.md +55 -0
  310. package/docs/ms/icons/bell-alert.md +55 -0
  311. package/docs/ms/icons/bell.md +55 -0
  312. package/docs/ms/icons/bolt.md +55 -0
  313. package/docs/ms/icons/book-close.md +55 -0
  314. package/docs/ms/icons/book-open.md +55 -0
  315. package/docs/ms/icons/book-stacked.md +55 -0
  316. package/docs/ms/icons/bookmark.md +55 -0
  317. package/docs/ms/icons/briefcase.md +55 -0
  318. package/docs/ms/icons/brush.md +55 -0
  319. package/docs/ms/icons/cake.md +55 -0
  320. package/docs/ms/icons/calendar-approve.md +55 -0
  321. package/docs/ms/icons/calendar-days.md +55 -0
  322. package/docs/ms/icons/calendar-minus.md +55 -0
  323. package/docs/ms/icons/calendar-plus.md +55 -0
  324. package/docs/ms/icons/calendar-reject.md +55 -0
  325. package/docs/ms/icons/calendar.md +55 -0
  326. package/docs/ms/icons/camera.md +55 -0
  327. package/docs/ms/icons/carousel.md +55 -0
  328. package/docs/ms/icons/chart-bar.md +55 -0
  329. package/docs/ms/icons/chart-line.md +55 -0
  330. package/docs/ms/icons/chart-pie.md +55 -0
  331. package/docs/ms/icons/chat-bubble-left-ellipsis.md +55 -0
  332. package/docs/ms/icons/chat-bubble-left-right.md +55 -0
  333. package/docs/ms/icons/chat-bubble-left.md +55 -0
  334. package/docs/ms/icons/chat-bubble-right-ellipsis.md +55 -0
  335. package/docs/ms/icons/chat-bubble-right.md +55 -0
  336. package/docs/ms/icons/chatbot.md +55 -0
  337. package/docs/ms/icons/check.md +55 -0
  338. package/docs/ms/icons/chevron-double-down.md +55 -0
  339. package/docs/ms/icons/chevron-double-left.md +55 -0
  340. package/docs/ms/icons/chevron-double-right.md +55 -0
  341. package/docs/ms/icons/chevron-double-up.md +55 -0
  342. package/docs/ms/icons/chevron-down.md +55 -0
  343. package/docs/ms/icons/chevron-left.md +55 -0
  344. package/docs/ms/icons/chevron-right.md +55 -0
  345. package/docs/ms/icons/chevron-up.md +55 -0
  346. package/docs/ms/icons/circle.md +55 -0
  347. package/docs/ms/icons/clipboard-document-check.md +55 -0
  348. package/docs/ms/icons/clipboard.md +55 -0
  349. package/docs/ms/icons/clock.md +55 -0
  350. package/docs/ms/icons/cloud.md +55 -0
  351. package/docs/ms/icons/code.md +55 -0
  352. package/docs/ms/icons/cog-6-tooth.md +55 -0
  353. package/docs/ms/icons/compress.md +55 -0
  354. package/docs/ms/icons/computer-code.md +55 -0
  355. package/docs/ms/icons/computer-desktop.md +55 -0
  356. package/docs/ms/icons/computer-laptop.md +55 -0
  357. package/docs/ms/icons/cone.md +55 -0
  358. package/docs/ms/icons/console.md +55 -0
  359. package/docs/ms/icons/container.md +55 -0
  360. package/docs/ms/icons/contrast.md +55 -0
  361. package/docs/ms/icons/controller.md +55 -0
  362. package/docs/ms/icons/credit-card.md +55 -0
  363. package/docs/ms/icons/crop.md +55 -0
  364. package/docs/ms/icons/crosshair.md +55 -0
  365. package/docs/ms/icons/cube.md +55 -0
  366. package/docs/ms/icons/currency-dollar.md +55 -0
  367. package/docs/ms/icons/currency-euro.md +55 -0
  368. package/docs/ms/icons/currency-pound.md +55 -0
  369. package/docs/ms/icons/currency-ringgit.md +55 -0
  370. package/docs/ms/icons/currency-yen.md +55 -0
  371. package/docs/ms/icons/cursor.md +55 -0
  372. package/docs/ms/icons/cylinder-half.md +55 -0
  373. package/docs/ms/icons/cylinder.md +55 -0
  374. package/docs/ms/icons/device-phone-mobile.md +55 -0
  375. package/docs/ms/icons/device-tablet.md +55 -0
  376. package/docs/ms/icons/diamond.md +55 -0
  377. package/docs/ms/icons/document-duplicate.md +55 -0
  378. package/docs/ms/icons/document-text.md +55 -0
  379. package/docs/ms/icons/document.md +55 -0
  380. package/docs/ms/icons/dodecahedron.md +55 -0
  381. package/docs/ms/icons/double-tick.md +55 -0
  382. package/docs/ms/icons/draw-curve.md +55 -0
  383. package/docs/ms/icons/draw-line.md +55 -0
  384. package/docs/ms/icons/envelope-open.md +55 -0
  385. package/docs/ms/icons/envelope.md +55 -0
  386. package/docs/ms/icons/eraser.md +55 -0
  387. package/docs/ms/icons/exclamation-circle.md +55 -0
  388. package/docs/ms/icons/exclamation-triangle.md +55 -0
  389. package/docs/ms/icons/expand.md +55 -0
  390. package/docs/ms/icons/eye-slash.md +55 -0
  391. package/docs/ms/icons/eye.md +55 -0
  392. package/docs/ms/icons/flag.md +55 -0
  393. package/docs/ms/icons/flip-horizontal.md +55 -0
  394. package/docs/ms/icons/flip-vertical.md +55 -0
  395. package/docs/ms/icons/focus.md +55 -0
  396. package/docs/ms/icons/folder-minus.md +55 -0
  397. package/docs/ms/icons/folder-open.md +55 -0
  398. package/docs/ms/icons/folder-plus.md +55 -0
  399. package/docs/ms/icons/folder.md +55 -0
  400. package/docs/ms/icons/font.md +55 -0
  401. package/docs/ms/icons/game.md +55 -0
  402. package/docs/ms/icons/gift.md +55 -0
  403. package/docs/ms/icons/globe-alt.md +55 -0
  404. package/docs/ms/icons/gradient.md +55 -0
  405. package/docs/ms/icons/grid.md +55 -0
  406. package/docs/ms/icons/group-object.md +55 -0
  407. package/docs/ms/icons/hand-grab.md +55 -0
  408. package/docs/ms/icons/hand-thumb-down.md +55 -0
  409. package/docs/ms/icons/hand-thumb-up.md +55 -0
  410. package/docs/ms/icons/hand.md +55 -0
  411. package/docs/ms/icons/heart-extruded.md +55 -0
  412. package/docs/ms/icons/heart.md +55 -0
  413. package/docs/ms/icons/hexagon.md +55 -0
  414. package/docs/ms/icons/home.md +55 -0
  415. package/docs/ms/icons/horizontal-3-dots.md +55 -0
  416. package/docs/ms/icons/hourglass-0.md +55 -0
  417. package/docs/ms/icons/hourglass-100.md +55 -0
  418. package/docs/ms/icons/hourglass-50.md +55 -0
  419. package/docs/ms/icons/hourglass-80.md +55 -0
  420. package/docs/ms/icons/icosahedron.md +55 -0
  421. package/docs/ms/icons/inbox.md +55 -0
  422. package/docs/ms/icons/index.md +1295 -0
  423. package/docs/ms/icons/information-circle.md +55 -0
  424. package/docs/ms/icons/key.md +55 -0
  425. package/docs/ms/icons/layer-stacks.md +55 -0
  426. package/docs/ms/icons/layout.md +55 -0
  427. package/docs/ms/icons/light-bulb.md +55 -0
  428. package/docs/ms/icons/lock-closed.md +55 -0
  429. package/docs/ms/icons/lock-open.md +55 -0
  430. package/docs/ms/icons/magic-wand.md +55 -0
  431. package/docs/ms/icons/magnifying-glass-focus.md +55 -0
  432. package/docs/ms/icons/magnifying-glass-minus.md +55 -0
  433. package/docs/ms/icons/magnifying-glass-plus.md +55 -0
  434. package/docs/ms/icons/magnifying-glass.md +55 -0
  435. package/docs/ms/icons/map-pin.md +55 -0
  436. package/docs/ms/icons/map.md +55 -0
  437. package/docs/ms/icons/marquee.md +55 -0
  438. package/docs/ms/icons/maximize.md +55 -0
  439. package/docs/ms/icons/medal.md +55 -0
  440. package/docs/ms/icons/microphone-mute.md +55 -0
  441. package/docs/ms/icons/microphone.md +55 -0
  442. package/docs/ms/icons/minimize.md +55 -0
  443. package/docs/ms/icons/minus.md +55 -0
  444. package/docs/ms/icons/moon.md +55 -0
  445. package/docs/ms/icons/musical-note.md +55 -0
  446. package/docs/ms/icons/octahedron.md +55 -0
  447. package/docs/ms/icons/panorama.md +55 -0
  448. package/docs/ms/icons/paper-clip.md +55 -0
  449. package/docs/ms/icons/pause-circle.md +55 -0
  450. package/docs/ms/icons/pause.md +55 -0
  451. package/docs/ms/icons/pencil.md +55 -0
  452. package/docs/ms/icons/phone-x-mark.md +55 -0
  453. package/docs/ms/icons/phone.md +55 -0
  454. package/docs/ms/icons/photo.md +55 -0
  455. package/docs/ms/icons/plane.md +55 -0
  456. package/docs/ms/icons/play-circle.md +55 -0
  457. package/docs/ms/icons/play.md +55 -0
  458. package/docs/ms/icons/plus.md +55 -0
  459. package/docs/ms/icons/polygon.md +55 -0
  460. package/docs/ms/icons/presentation-chart-line.md +55 -0
  461. package/docs/ms/icons/presentation-media.md +55 -0
  462. package/docs/ms/icons/pyramid.md +55 -0
  463. package/docs/ms/icons/qr-code.md +55 -0
  464. package/docs/ms/icons/question-mark-circle.md +55 -0
  465. package/docs/ms/icons/rectangle.md +55 -0
  466. package/docs/ms/icons/reel.md +55 -0
  467. package/docs/ms/icons/robot.md +55 -0
  468. package/docs/ms/icons/roof.md +55 -0
  469. package/docs/ms/icons/rotate-add.md +55 -0
  470. package/docs/ms/icons/rotate-minus.md +55 -0
  471. package/docs/ms/icons/save.md +55 -0
  472. package/docs/ms/icons/scissor.md +55 -0
  473. package/docs/ms/icons/shapes.md +55 -0
  474. package/docs/ms/icons/shield-check.md +55 -0
  475. package/docs/ms/icons/shield-exclamation.md +55 -0
  476. package/docs/ms/icons/shopping-bag.md +55 -0
  477. package/docs/ms/icons/shopping-cart.md +55 -0
  478. package/docs/ms/icons/sliders-horizontal.md +55 -0
  479. package/docs/ms/icons/sliders-vertical.md +55 -0
  480. package/docs/ms/icons/sparkles.md +55 -0
  481. package/docs/ms/icons/speaker-wave.md +55 -0
  482. package/docs/ms/icons/speaker-x-mark.md +55 -0
  483. package/docs/ms/icons/sphere-half.md +55 -0
  484. package/docs/ms/icons/sphere.md +55 -0
  485. package/docs/ms/icons/square.md +55 -0
  486. package/docs/ms/icons/star.md +55 -0
  487. package/docs/ms/icons/stop-circle.md +55 -0
  488. package/docs/ms/icons/stop.md +55 -0
  489. package/docs/ms/icons/sun.md +55 -0
  490. package/docs/ms/icons/table.md +55 -0
  491. package/docs/ms/icons/tabs.md +55 -0
  492. package/docs/ms/icons/tetrahedron.md +55 -0
  493. package/docs/ms/icons/text-align-center.md +55 -0
  494. package/docs/ms/icons/text-align-justify.md +55 -0
  495. package/docs/ms/icons/text-align-left.md +55 -0
  496. package/docs/ms/icons/text-align-right.md +55 -0
  497. package/docs/ms/icons/text.md +55 -0
  498. package/docs/ms/icons/thunder.md +55 -0
  499. package/docs/ms/icons/tic-tac-toe.md +55 -0
  500. package/docs/ms/icons/time-reset.md +55 -0
  501. package/docs/ms/icons/torus-knot.md +55 -0
  502. package/docs/ms/icons/torus.md +55 -0
  503. package/docs/ms/icons/trash.md +55 -0
  504. package/docs/ms/icons/trophy.md +55 -0
  505. package/docs/ms/icons/truck.md +55 -0
  506. package/docs/ms/icons/tube.md +55 -0
  507. package/docs/ms/icons/ungroup-object.md +55 -0
  508. package/docs/ms/icons/user-circle.md +55 -0
  509. package/docs/ms/icons/user-group.md +55 -0
  510. package/docs/ms/icons/user-minus.md +55 -0
  511. package/docs/ms/icons/user-plus.md +55 -0
  512. package/docs/ms/icons/user.md +55 -0
  513. package/docs/ms/icons/users.md +55 -0
  514. package/docs/ms/icons/vertical-3-dots.md +55 -0
  515. package/docs/ms/icons/video-camera.md +55 -0
  516. package/docs/ms/icons/vr.md +55 -0
  517. package/docs/ms/icons/wedge.md +55 -0
  518. package/docs/ms/icons/whiteboard.md +55 -0
  519. package/docs/ms/icons/wifi.md +55 -0
  520. package/docs/ms/icons/window.md +55 -0
  521. package/docs/ms/icons/x-mark.md +55 -0
  522. package/docs/ms/index.md +55 -0
  523. package/docs/public/assets/senangstart-icons-logo.svg +1 -0
  524. package/docs/public/assets/ss-logo.svg +83 -0
  525. package/docs/public/llms.txt +285 -0
  526. package/package.json +13 -3
  527. package/scripts/build-icon-docs.js +323 -0
  528. package/scripts/build.js +44 -0
  529. package/scripts/generate-llms-txt.js +70 -0
  530. package/test-results.json +11 -0
  531. package/tests/build-css.test.js +134 -0
  532. package/tests/build-icon-docs.test.js +134 -0
  533. package/tests/build-pipeline.test.js +138 -0
  534. package/tests/build-svgs.test.js +102 -0
  535. package/tests/ss-icon.test.js +178 -0
  536. package/tests/ss-loader.test.js +156 -0
  537. package/vitest.config.js +15 -0
@@ -0,0 +1,323 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // Paths
5
+ const iconsJsonPath = path.join(__dirname, '..', 'src', 'icons.json');
6
+ const docsIconsDir = path.join(__dirname, '..', 'docs', 'icons');
7
+ const docsIconsDirMs = path.join(__dirname, '..', 'docs', 'ms', 'icons');
8
+ const indexPath = path.join(docsIconsDir, 'index.md');
9
+ const indexPathMs = path.join(docsIconsDirMs, 'index.md');
10
+
11
+ // Read icons.json
12
+ const icons = JSON.parse(fs.readFileSync(iconsJsonPath, 'utf8'));
13
+
14
+ // Ensure docs/icons directories exist
15
+ fs.mkdirSync(docsIconsDir, { recursive: true });
16
+ fs.mkdirSync(docsIconsDirMs, { recursive: true });
17
+
18
+ console.log(`📝 Generating documentation for ${icons.length} icons...\n`);
19
+
20
+ // Generate markdown for each icon
21
+ const iconLinks = [];
22
+
23
+ icons.forEach((icon, index) => {
24
+ const { name, slug, src, tags } = icon;
25
+
26
+ // Create SVG preview (stroke-based icon)
27
+ const svgPreview = `<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="${src}"></path></svg>`;
28
+
29
+ // Generate English markdown content
30
+ const markdownEn = `---
31
+ title: ${name}
32
+ ---
33
+
34
+ # ${name}
35
+
36
+ <div style="display: flex; justify-content: center; padding: 2rem; background: var(--vp-c-bg-soft); border-radius: 8px; margin: 1rem 0;">
37
+ ${svgPreview}
38
+ </div>
39
+
40
+ ## Usage
41
+
42
+ ### With Web Components
43
+
44
+ \`\`\`html
45
+ <ss-icon icon="${slug}"></ss-icon>
46
+ \`\`\`
47
+
48
+ ### With icon tag
49
+
50
+ \`\`\`html
51
+ <i class="ss ss-${slug}"></i>
52
+ \`\`\`
53
+
54
+ ### With custom stroke width / thickness
55
+
56
+ \`\`\`html
57
+ <ss-icon icon="${slug}" thickness="1.2"></ss-icon>
58
+ \`\`\`
59
+
60
+ ## Icon Details
61
+
62
+ | Property | Value |
63
+ |----------|-------|
64
+ | **Name** | ${name} |
65
+ | **Slug** | \`${slug}\` |
66
+ | **Tags** | ${tags.map(t => `\`${t}\``).join(', ')} |
67
+
68
+ ## SVG Path
69
+
70
+ \`\`\`
71
+ ${src}
72
+ \`\`\`
73
+
74
+ ## Raw SVG
75
+
76
+ \`\`\`html
77
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
78
+ <path d="${src}"></path>
79
+ </svg>
80
+ \`\`\`
81
+
82
+ ---
83
+
84
+ [← Back to Icon Library](/icons/)
85
+ `;
86
+
87
+ // Generate Malay markdown content
88
+ const markdownMs = `---
89
+ title: ${name}
90
+ ---
91
+
92
+ # ${name}
93
+
94
+ <div style="display: flex; justify-content: center; padding: 2rem; background: var(--vp-c-bg-soft); border-radius: 8px; margin: 1rem 0;">
95
+ ${svgPreview}
96
+ </div>
97
+
98
+ ## Penggunaan
99
+
100
+ ### Dengan Komponen Web
101
+
102
+ \`\`\`html
103
+ <ss-icon icon="${slug}"></ss-icon>
104
+ \`\`\`
105
+
106
+ ### Dengan tag ikon
107
+
108
+ \`\`\`html
109
+ <i class="ss ss-${slug}"></i>
110
+ \`\`\`
111
+
112
+ ### Dengan ketebalan garisan tersuai
113
+
114
+ \`\`\`html
115
+ <ss-icon icon="${slug}" thickness="1.2"></ss-icon>
116
+ \`\`\`
117
+
118
+ ## Butiran Ikon
119
+
120
+ | Ciri | Nilai |
121
+ |------|-------|
122
+ | **Nama** | ${name} |
123
+ | **Slug** | \`${slug}\` |
124
+ | **Tag** | ${tags.map(t => `\`${t}\``).join(', ')} |
125
+
126
+ ## Laluan SVG
127
+
128
+ \`\`\`
129
+ ${src}
130
+ \`\`\`
131
+
132
+ ## SVG Mentah
133
+
134
+ \`\`\`html
135
+ <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
136
+ <path d="${src}"></path>
137
+ </svg>
138
+ \`\`\`
139
+
140
+ ---
141
+
142
+ [← Kembali ke Pustaka Ikon](/ms/icons/)
143
+ `;
144
+
145
+ // Write individual icon markdown files (English)
146
+ const iconFilePath = path.join(docsIconsDir, `${slug}.md`);
147
+ fs.writeFileSync(iconFilePath, markdownEn);
148
+
149
+ // Write individual icon markdown files (Malay)
150
+ const iconFilePathMs = path.join(docsIconsDirMs, `${slug}.md`);
151
+ fs.writeFileSync(iconFilePathMs, markdownMs);
152
+
153
+ // Add to links array
154
+ iconLinks.push({
155
+ name,
156
+ slug,
157
+ tags
158
+ });
159
+
160
+ // Progress indicator
161
+ if ((index + 1) % 50 === 0 || index === icons.length - 1) {
162
+ console.log(` ✓ Generated ${index + 1}/${icons.length} icon docs (EN + MS)`);
163
+ }
164
+ });
165
+
166
+ // Generate English index.md with links to all icons
167
+ const indexMarkdownEn = `---
168
+ title: Icon Library
169
+ ---
170
+
171
+ # Icon Library
172
+
173
+ Browse all **${icons.length}** available icons in SenangStart Icons.
174
+
175
+ ## Usage
176
+
177
+ Once you find the icon you need, use it like this:
178
+
179
+ \`\`\`html
180
+ <ss-icon name="icon-name"></ss-icon>
181
+ \`\`\`
182
+
183
+ ## All Icons
184
+
185
+ <div class="icon-grid">
186
+
187
+ ${iconLinks.map(icon => {
188
+ return `<a href="./${icon.slug}" class="icon-card" title="${icon.tags.join(', ')}">
189
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="${icons.find(i => i.slug === icon.slug).src}"></path></svg>
190
+ <span>${icon.name}</span>
191
+ </a>`;
192
+ }).join('\n\n')}
193
+
194
+ </div>
195
+
196
+ <style>
197
+ .icon-grid {
198
+ display: grid;
199
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
200
+ gap: 1rem;
201
+ margin-top: 1rem;
202
+ }
203
+
204
+ .icon-card {
205
+ display: flex;
206
+ flex-direction: column;
207
+ align-items: center;
208
+ justify-content: center;
209
+ padding: 1rem;
210
+ background: var(--vp-c-bg-soft);
211
+ border-radius: 8px;
212
+ text-decoration: none;
213
+ color: var(--vp-c-text-1) !important;
214
+ transition: all 0.2s ease;
215
+ text-align: center;
216
+ aspect-ratio: 1/1;
217
+ }
218
+
219
+ .icon-card:hover {
220
+ background: var(--vp-c-bg-soft-up);
221
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
222
+ }
223
+
224
+ .icon-card svg {
225
+ margin-bottom: 0.5rem;
226
+ width: 3rem;
227
+ height: 3rem;
228
+ }
229
+
230
+ .icon-card span {
231
+ font-size: 0.8rem;
232
+ word-break: break-word;
233
+ overflow: hidden;
234
+ display: -webkit-box;
235
+ -webkit-box-orient: vertical;
236
+ -webkit-line-clamp: 1;
237
+ }
238
+ </style>
239
+ `;
240
+
241
+ // Generate Malay index.md with links to all icons
242
+ const indexMarkdownMs = `---
243
+ title: Pustaka Ikon
244
+ ---
245
+
246
+ # Pustaka Ikon
247
+
248
+ Layari semua **${icons.length}** ikon yang tersedia dalam SenangStart Icons.
249
+
250
+ ## Penggunaan
251
+
252
+ Setelah anda menemui ikon yang diperlukan, gunakannya seperti ini:
253
+
254
+ \`\`\`html
255
+ <ss-icon name="nama-ikon"></ss-icon>
256
+ \`\`\`
257
+
258
+ ## Semua Ikon
259
+
260
+ <div class="icon-grid">
261
+
262
+ ${iconLinks.map(icon => {
263
+ return `<a href="./${icon.slug}" class="icon-card" title="${icon.tags.join(', ')}">
264
+ <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="${icons.find(i => i.slug === icon.slug).src}"></path></svg>
265
+ <span>${icon.name}</span>
266
+ </a>`;
267
+ }).join('\n\n')}
268
+
269
+ </div>
270
+
271
+ <style>
272
+ .icon-grid {
273
+ display: grid;
274
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
275
+ gap: 1rem;
276
+ margin-top: 1rem;
277
+ }
278
+
279
+ .icon-card {
280
+ display: flex;
281
+ flex-direction: column;
282
+ align-items: center;
283
+ justify-content: center;
284
+ padding: 1rem;
285
+ background: var(--vp-c-bg-soft);
286
+ border-radius: 8px;
287
+ text-decoration: none;
288
+ color: var(--vp-c-text-1) !important;
289
+ transition: all 0.2s ease;
290
+ text-align: center;
291
+ aspect-ratio: 1/1;
292
+ }
293
+
294
+ .icon-card:hover {
295
+ background: var(--vp-c-bg-soft-up);
296
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
297
+ }
298
+
299
+ .icon-card svg {
300
+ margin-bottom: 0.5rem;
301
+ width: 3rem;
302
+ height: 3rem;
303
+ }
304
+
305
+ .icon-card span {
306
+ font-size: 0.8rem;
307
+ word-break: break-word;
308
+ overflow: hidden;
309
+ display: -webkit-box;
310
+ -webkit-box-orient: vertical;
311
+ -webkit-line-clamp: 1;
312
+ }
313
+ </style>
314
+ `;
315
+
316
+ fs.writeFileSync(indexPath, indexMarkdownEn);
317
+ fs.writeFileSync(indexPathMs, indexMarkdownMs);
318
+
319
+ console.log(`\n✅ Icon documentation generated successfully!`);
320
+ console.log(` - ${icons.length} English icon pages created`);
321
+ console.log(` - ${icons.length} Malay icon pages created`);
322
+ console.log(` - English index at docs/icons/index.md`);
323
+ console.log(` - Malay index at docs/ms/icons/index.md`);
@@ -0,0 +1,44 @@
1
+ const { execSync } = require('child_process');
2
+ const fs = require('fs');
3
+ const path = require('path');
4
+
5
+ // Helper function to recursively copy a directory
6
+ function copyDir(src, dest) {
7
+ fs.mkdirSync(dest, { recursive: true });
8
+ const entries = fs.readdirSync(src);
9
+
10
+ for (const entry of entries) {
11
+ const srcPath = path.join(src, entry);
12
+ const destPath = path.join(dest, entry);
13
+
14
+ if (fs.statSync(srcPath).isDirectory()) {
15
+ copyDir(srcPath, destPath);
16
+ } else {
17
+ fs.copyFileSync(srcPath, destPath);
18
+ }
19
+ }
20
+ }
21
+
22
+ console.log('🔨 Building SenangStart Icons...\n');
23
+
24
+ // Step 1: Build SVGs
25
+ console.log('📦 Step 1: Building SVGs...');
26
+ execSync('node scripts/build-svgs.js', { stdio: 'inherit' });
27
+
28
+ // Step 2: Build CSS
29
+ console.log('\n🎨 Step 2: Building CSS...');
30
+ execSync('node scripts/build-css.js', { stdio: 'inherit' });
31
+
32
+ // Step 3: Run Generate Icon Docs
33
+ console.log('\n⚙️ Step 3: Running Generate Icon Docs...');
34
+ execSync('node scripts/build-icon-docs.js', { stdio: 'inherit' });
35
+
36
+ // Step 4: Run Webpack
37
+ console.log('\n⚙️ Step 4: Running Webpack...');
38
+ execSync('npx webpack --mode production', { stdio: 'inherit' });
39
+
40
+ // Step 5: Generate llms.txt
41
+ console.log('\n📝 Step 5: Generating llms.txt...');
42
+ execSync('node scripts/generate-llms-txt.js', { stdio: 'inherit' });
43
+
44
+ console.log('\n✅ Build complete! Files copied to docs/public/');
@@ -0,0 +1,70 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ // Paths
5
+ const iconsJsonPath = path.join(__dirname, '..', 'src', 'icons.json');
6
+ const publicDir = path.join(__dirname, '..', 'docs', 'public');
7
+ const outputFile = path.join(publicDir, 'llms.txt');
8
+ const packageJsonPath = path.join(__dirname, '..', 'package.json');
9
+
10
+ // Read data
11
+ const icons = JSON.parse(fs.readFileSync(iconsJsonPath, 'utf8'));
12
+ const pkg = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
13
+
14
+ // Ensure output directory exists
15
+ fs.mkdirSync(publicDir, { recursive: true });
16
+
17
+ console.log(`📝 Generating llms.txt for ${icons.length} icons...\n`);
18
+
19
+ // Content sections
20
+ const header = `# ${pkg.name}
21
+
22
+ ${pkg.description}
23
+
24
+ Version: ${pkg.version}
25
+ License: ${pkg.license}
26
+ `;
27
+
28
+ const usage = `## Usage
29
+
30
+ ### Web Components
31
+
32
+ 1. Include the script:
33
+ \`\`\`html
34
+ <script src="https://unpkg.com/${pkg.name}/dist/senangstart-icon.min.js"></script>
35
+ \`\`\`
36
+
37
+ 2. Use the component:
38
+ \`\`\`html
39
+ <ss-icon icon="icon-slug"></ss-icon>
40
+ <!-- Optional: thickness="1.5" -->
41
+ <ss-icon icon="icon-slug" thickness="2"></ss-icon>
42
+ \`\`\`
43
+
44
+ ### CSS Icons
45
+
46
+ 1. Include the CSS:
47
+ \`\`\`html
48
+ <link rel="stylesheet" href="https://unpkg.com/${pkg.name}/dist/senangstart-icon.css">
49
+ \`\`\`
50
+
51
+ 2. Use the class:
52
+ \`\`\`html
53
+ <i class="ss ss-icon-slug"></i>
54
+ \`\`\`
55
+ `;
56
+
57
+ const iconsList = `## Available Icons (${icons.length})
58
+
59
+ Format: Icon Name (\`slug\`) - Tags
60
+
61
+ ${icons.map(icon => `- ${icon.name} (\`${icon.slug}\`) - ${icon.tags.join(', ')}`).join('\n')}
62
+ `;
63
+
64
+ // Combine content
65
+ const content = [header, usage, iconsList].join('\n');
66
+
67
+ // Write file
68
+ fs.writeFileSync(outputFile, content);
69
+
70
+ console.log(`✅ Generated docs/public/llms.txt (${content.length} bytes)`);
@@ -0,0 +1,11 @@
1
+ npx : The CJS build of Vite's Node API is deprecated. See
2
+ https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated for more
3
+ details.
4
+ At line:1 char:1
5
+ + npx vitest run tests/build-pipeline.test.js --reporter=json 2>&1 | Ou ...
6
+ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7
+ + CategoryInfo : NotSpecified: (The CJS bu...e details.:String
8
+ ) [], RemoteException
9
+ + FullyQualifiedErrorId : NativeCommandError
10
+
11
+ {"numTotalTestSuites":9,"numPassedTestSuites":6,"numFailedTestSuites":3,"numPendingTestSuites":0,"numTotalTests":14,"numPassedTests":13,"numFailedTests":1,"numPendingTests":0,"numTodoTests":0,"snapshot":{"added":0,"failure":false,"filesAdded":0,"filesRemoved":0,"filesRemovedList":[],"filesUnmatched":0,"filesUpdated":0,"matched":0,"total":0,"unchecked":0,"uncheckedKeysByFile":[],"unmatched":0,"updated":0,"didUpdate":false},"startTime":1768184278421,"success":false,"testResults":[{"assertionResults":[{"ancestorTitles":["Build Pipeline Integration","Source files"],"fullName":"Build Pipeline Integration Source files should have icons.json","status":"passed","title":"should have icons.json","duration":1.2354001998901367,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Source files"],"fullName":"Build Pipeline Integration Source files should have all required source files","status":"passed","title":"should have all required source files","duration":0.46810007095336914,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Generated SVG files"],"fullName":"Build Pipeline Integration Generated SVG files should have svg directory","status":"passed","title":"should have svg directory","duration":0.37180042266845703,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Generated SVG files"],"fullName":"Build Pipeline Integration Generated SVG files should have SVG file for each icon in icons.json","status":"passed","title":"should have SVG file for each icon in icons.json","duration":21.953199863433838,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Generated SVG files"],"fullName":"Build Pipeline Integration Generated SVG files should have index.js exporting all icons","status":"passed","title":"should have index.js exporting all icons","duration":0.5628995895385742,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Generated CSS"],"fullName":"Build Pipeline Integration Generated CSS should have icons.css file","status":"passed","title":"should have icons.css file","duration":0.21340036392211914,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Generated CSS"],"fullName":"Build Pipeline Integration Generated CSS should have CSS class for each icon","status":"passed","title":"should have CSS class for each icon","duration":9.665900230407715,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Documentation files"],"fullName":"Build Pipeline Integration Documentation files should have docs directory structure","status":"passed","title":"should have docs directory structure","duration":0.31890010833740234,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Documentation files"],"fullName":"Build Pipeline Integration Documentation files should have documentation for each icon","status":"passed","title":"should have documentation for each icon","duration":44.08650016784668,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Icon data consistency"],"fullName":"Build Pipeline Integration Icon data consistency should have matching icon counts across all generated files","status":"failed","title":"should have matching icon counts across all generated files","duration":8.33899974822998,"failureMessages":["AssertionError: expected 248 to be 246 // Object.is equality\n at C:\\wamp64\\www\\senangstart-icons\\tests\\build-pipeline.test.js:93:31\n at file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:155:11\n at file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:752:26\n at file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:1897:20\n at new Promise (<anonymous>)\n at runWithTimeout (file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:1863:10)\n at runTest (file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:1574:12)\n at processTicksAndRejections (node:internal/process/task_queues:95:5)\n at runSuite (file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:1729:8)\n at runSuite (file:///C:/wamp64/www/senangstart-icons/node_modules/@vitest/runner/dist/chunk-hooks.js:1729:8)"],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Icon data consistency"],"fullName":"Build Pipeline Integration Icon data consistency should have valid SVG path data in icons.json","status":"passed","title":"should have valid SVG path data in icons.json","duration":9.310800075531006,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Icon data consistency"],"fullName":"Build Pipeline Integration Icon data consistency should have normalized slugs (lowercase, hyphenated)","status":"passed","title":"should have normalized slugs (lowercase, hyphenated)","duration":7.935400009155273,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Build scripts"],"fullName":"Build Pipeline Integration Build scripts should have all build scripts","status":"passed","title":"should have all build scripts","duration":0.5515999794006348,"failureMessages":[],"meta":{}},{"ancestorTitles":["Build Pipeline Integration","Webpack configuration"],"fullName":"Build Pipeline Integration Webpack configuration should have webpack.config.js","status":"passed","title":"should have webpack.config.js","duration":0.3931999206542969,"failureMessages":[],"meta":{}}],"startTime":1768184278865,"endTime":1768184278972.3933,"status":"failed","message":"","name":"C:/wamp64/www/senangstart-icons/tests/build-pipeline.test.js"}]}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Tests for build-css.js
3
+ *
4
+ * Tests CSS generation with SVG data URIs
5
+ */
6
+ import { describe, it, expect, beforeAll } from 'vitest';
7
+ import fs from 'fs';
8
+ import path from 'path';
9
+
10
+ const iconsPath = path.resolve(__dirname, '../src/icons.json');
11
+ const cssPath = path.resolve(__dirname, '../src/icons.css');
12
+
13
+ // Recreate the encodeSvg function from build-css.js for testing
14
+ function encodeSvg(svg) {
15
+ return svg
16
+ .replace(/"/g, "'")
17
+ .replace(/%/g, "%25")
18
+ .replace(/#/g, "%23")
19
+ .replace(/{/g, "%7B")
20
+ .replace(/}/g, "%7D")
21
+ .replace(/</g, "%3C")
22
+ .replace(/>/g, "%3E")
23
+ .replace(/\s+/g, " ")
24
+ .trim();
25
+ }
26
+
27
+ // Recreate generateSvg function from build-css.js
28
+ function generateSvg(icon) {
29
+ const { src, viewBox, fill, stroke, strokeWidth } = icon;
30
+ const vBox = viewBox || "0 0 24 24";
31
+ const fl = fill || "none";
32
+ const strk = stroke || "currentColor";
33
+ const strkWidth = strokeWidth || "2";
34
+
35
+ return `<svg xmlns='http://www.w3.org/2000/svg' viewBox='${vBox}' fill='${fl}' stroke='${strk}' stroke-width='${strkWidth}' stroke-linecap='round' stroke-linejoin='round'><path d='${src}'/></svg>`;
36
+ }
37
+
38
+ describe('build-css.js', () => {
39
+ let icons;
40
+ let cssContent;
41
+
42
+ beforeAll(() => {
43
+ icons = JSON.parse(fs.readFileSync(iconsPath, 'utf8'));
44
+ cssContent = fs.readFileSync(cssPath, 'utf8');
45
+ });
46
+
47
+ describe('encodeSvg function', () => {
48
+ it('should replace double quotes with single quotes', () => {
49
+ const result = encodeSvg('<svg viewBox="0 0 24 24">');
50
+ expect(result).not.toContain('"');
51
+ expect(result).toContain("'");
52
+ });
53
+
54
+ it('should URL-encode special characters', () => {
55
+ const result = encodeSvg('<svg>#test</svg>');
56
+ expect(result).toContain('%3C'); // <
57
+ expect(result).toContain('%3E'); // >
58
+ expect(result).toContain('%23'); // #
59
+ });
60
+
61
+ it('should collapse whitespace', () => {
62
+ const result = encodeSvg('<svg> test test </svg>');
63
+ expect(result).not.toContain(' '); // no double spaces
64
+ });
65
+ });
66
+
67
+ describe('generateSvg function', () => {
68
+ it('should generate valid SVG string', () => {
69
+ const icon = { src: 'M12 4.5v15m7.5-7.5h-15', name: 'test' };
70
+ const svg = generateSvg(icon);
71
+
72
+ expect(svg).toContain("<svg");
73
+ expect(svg).toContain("xmlns='http://www.w3.org/2000/svg'");
74
+ expect(svg).toContain("<path d='M12 4.5v15m7.5-7.5h-15'");
75
+ });
76
+
77
+ it('should apply default values', () => {
78
+ const icon = { src: 'M0 0', name: 'test' };
79
+ const svg = generateSvg(icon);
80
+
81
+ expect(svg).toContain("viewBox='0 0 24 24'");
82
+ expect(svg).toContain("fill='none'");
83
+ expect(svg).toContain("stroke='currentColor'");
84
+ expect(svg).toContain("stroke-width='2'");
85
+ });
86
+
87
+ it('should use custom values when provided', () => {
88
+ const icon = {
89
+ src: 'M0 0',
90
+ name: 'test',
91
+ viewBox: '0 0 48 48',
92
+ fill: 'red',
93
+ stroke: 'blue',
94
+ strokeWidth: '4'
95
+ };
96
+ const svg = generateSvg(icon);
97
+
98
+ expect(svg).toContain("viewBox='0 0 48 48'");
99
+ expect(svg).toContain("fill='red'");
100
+ expect(svg).toContain("stroke='blue'");
101
+ expect(svg).toContain("stroke-width='4'");
102
+ });
103
+ });
104
+
105
+ describe('CSS file generation', () => {
106
+ it('should contain base .ss class', () => {
107
+ expect(cssContent).toContain('.ss {');
108
+ expect(cssContent).toContain('display: inline-block;');
109
+ expect(cssContent).toContain('width: 1em;');
110
+ expect(cssContent).toContain('height: 1em;');
111
+ });
112
+
113
+ it('should contain mask properties in base class', () => {
114
+ expect(cssContent).toContain('mask-size: contain;');
115
+ expect(cssContent).toContain('mask-repeat: no-repeat;');
116
+ expect(cssContent).toContain('mask-position: center;');
117
+ });
118
+
119
+ it('should generate class for each icon', () => {
120
+ icons.forEach(icon => {
121
+ expect(cssContent).toContain(`.ss-${icon.slug}`);
122
+ });
123
+ });
124
+
125
+ it('should use data URI for mask-image', () => {
126
+ expect(cssContent).toContain('mask-image: url("data:image/svg+xml,');
127
+ });
128
+
129
+ it('should have proper header comment', () => {
130
+ expect(cssContent).toContain('Senangstart Icons - CSS Only');
131
+ expect(cssContent).toContain('Auto-generated');
132
+ });
133
+ });
134
+ });