@bookklik/senangstart-icons 1.0.7 → 1.0.8
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.
- package/.github/workflows/deploy-docs.yml +61 -0
- package/docs/.vitepress/config.mjs +171 -0
- package/docs/.vitepress/theme/custom.css +64 -0
- package/docs/.vitepress/theme/index.js +4 -0
- package/docs/guide/configuration.md +125 -0
- package/docs/guide/getting-started.md +34 -0
- package/docs/guide/installation.md +54 -0
- package/docs/guide/styling.md +156 -0
- package/docs/guide/usage.md +103 -0
- package/docs/icons/alert.md +59 -0
- package/docs/icons/align-bottom-object.md +59 -0
- package/docs/icons/align-center-object.md +59 -0
- package/docs/icons/align-left-object.md +59 -0
- package/docs/icons/align-middle-object.md +59 -0
- package/docs/icons/align-right-object.md +59 -0
- package/docs/icons/align-top-object.md +59 -0
- package/docs/icons/ar.md +59 -0
- package/docs/icons/archive-box.md +59 -0
- package/docs/icons/arrow-down.md +59 -0
- package/docs/icons/arrow-left-arrow-right.md +59 -0
- package/docs/icons/arrow-left-on-rectangle.md +59 -0
- package/docs/icons/arrow-left-right.md +59 -0
- package/docs/icons/arrow-left.md +59 -0
- package/docs/icons/arrow-long-down.md +59 -0
- package/docs/icons/arrow-long-left.md +59 -0
- package/docs/icons/arrow-long-right.md +59 -0
- package/docs/icons/arrow-long-up.md +59 -0
- package/docs/icons/arrow-path.md +59 -0
- package/docs/icons/arrow-right-on-rectangle.md +59 -0
- package/docs/icons/arrow-right.md +59 -0
- package/docs/icons/arrow-rotate-ccw.md +59 -0
- package/docs/icons/arrow-rotate-cw.md +59 -0
- package/docs/icons/arrow-top-right-on-square.md +59 -0
- package/docs/icons/arrow-up-arrow-down.md +59 -0
- package/docs/icons/arrow-up-down-left-right.md +59 -0
- package/docs/icons/arrow-up-down.md +59 -0
- package/docs/icons/arrow-up.md +59 -0
- package/docs/icons/banknotes.md +59 -0
- package/docs/icons/bars-3.md +59 -0
- package/docs/icons/basket.md +59 -0
- package/docs/icons/battery-0.md +59 -0
- package/docs/icons/battery-10.md +59 -0
- package/docs/icons/battery-100.md +59 -0
- package/docs/icons/battery-50.md +59 -0
- package/docs/icons/bell-alert.md +59 -0
- package/docs/icons/bell.md +59 -0
- package/docs/icons/bolt.md +59 -0
- package/docs/icons/book-close.md +59 -0
- package/docs/icons/book-open.md +59 -0
- package/docs/icons/book-stacked.md +59 -0
- package/docs/icons/bookmark.md +59 -0
- package/docs/icons/briefcase.md +59 -0
- package/docs/icons/brush.md +59 -0
- package/docs/icons/cake.md +59 -0
- package/docs/icons/calendar-approve.md +59 -0
- package/docs/icons/calendar-days.md +59 -0
- package/docs/icons/calendar-minus.md +59 -0
- package/docs/icons/calendar-plus.md +59 -0
- package/docs/icons/calendar-reject.md +59 -0
- package/docs/icons/calendar.md +59 -0
- package/docs/icons/camera.md +59 -0
- package/docs/icons/carousel.md +59 -0
- package/docs/icons/chart-bar.md +59 -0
- package/docs/icons/chart-line.md +59 -0
- package/docs/icons/chart-pie.md +59 -0
- package/docs/icons/chat-bubble-left-ellipsis.md +59 -0
- package/docs/icons/chat-bubble-left-right.md +59 -0
- package/docs/icons/chat-bubble-left.md +59 -0
- package/docs/icons/chat-bubble-right-ellipsis.md +59 -0
- package/docs/icons/chat-bubble-right.md +59 -0
- package/docs/icons/chatbot.md +59 -0
- package/docs/icons/check.md +59 -0
- package/docs/icons/chevron-double-down.md +59 -0
- package/docs/icons/chevron-double-left.md +59 -0
- package/docs/icons/chevron-double-right.md +59 -0
- package/docs/icons/chevron-double-up.md +59 -0
- package/docs/icons/chevron-down.md +59 -0
- package/docs/icons/chevron-left.md +59 -0
- package/docs/icons/chevron-right.md +59 -0
- package/docs/icons/chevron-up.md +59 -0
- package/docs/icons/circle.md +59 -0
- package/docs/icons/clipboard-document-check.md +59 -0
- package/docs/icons/clipboard.md +59 -0
- package/docs/icons/clock.md +59 -0
- package/docs/icons/cloud.md +59 -0
- package/docs/icons/code.md +59 -0
- package/docs/icons/cog-6-tooth.md +59 -0
- package/docs/icons/compress.md +59 -0
- package/docs/icons/computer-code.md +59 -0
- package/docs/icons/computer-desktop.md +59 -0
- package/docs/icons/computer-laptop.md +59 -0
- package/docs/icons/cone.md +59 -0
- package/docs/icons/console.md +59 -0
- package/docs/icons/container.md +59 -0
- package/docs/icons/contrast.md +59 -0
- package/docs/icons/controller.md +59 -0
- package/docs/icons/credit-card.md +59 -0
- package/docs/icons/crop.md +59 -0
- package/docs/icons/crosshair.md +59 -0
- package/docs/icons/cube.md +59 -0
- package/docs/icons/currency-dollar.md +59 -0
- package/docs/icons/currency-euro.md +59 -0
- package/docs/icons/currency-pound.md +59 -0
- package/docs/icons/currency-ringgit.md +59 -0
- package/docs/icons/currency-yen.md +59 -0
- package/docs/icons/cursor.md +59 -0
- package/docs/icons/cylinder-half.md +59 -0
- package/docs/icons/cylinder.md +59 -0
- package/docs/icons/device-phone-mobile.md +59 -0
- package/docs/icons/device-tablet.md +59 -0
- package/docs/icons/diamond.md +59 -0
- package/docs/icons/document-duplicate.md +59 -0
- package/docs/icons/document-text.md +59 -0
- package/docs/icons/document.md +59 -0
- package/docs/icons/dodecahedron.md +59 -0
- package/docs/icons/double-tick.md +59 -0
- package/docs/icons/draw-curve.md +59 -0
- package/docs/icons/draw-line.md +59 -0
- package/docs/icons/envelope-open.md +59 -0
- package/docs/icons/envelope.md +59 -0
- package/docs/icons/eraser.md +59 -0
- package/docs/icons/exclamation-circle.md +59 -0
- package/docs/icons/exclamation-triangle.md +59 -0
- package/docs/icons/expand.md +59 -0
- package/docs/icons/eye-slash.md +59 -0
- package/docs/icons/eye.md +59 -0
- package/docs/icons/flag.md +59 -0
- package/docs/icons/flip-horizontal.md +59 -0
- package/docs/icons/flip-vertical.md +59 -0
- package/docs/icons/focus.md +59 -0
- package/docs/icons/folder-minus.md +59 -0
- package/docs/icons/folder-open.md +59 -0
- package/docs/icons/folder-plus.md +59 -0
- package/docs/icons/folder.md +59 -0
- package/docs/icons/font.md +59 -0
- package/docs/icons/game.md +59 -0
- package/docs/icons/gift.md +59 -0
- package/docs/icons/globe-alt.md +59 -0
- package/docs/icons/gradient.md +59 -0
- package/docs/icons/grid.md +59 -0
- package/docs/icons/group-object.md +59 -0
- package/docs/icons/hand-grab.md +59 -0
- package/docs/icons/hand-thumb-down.md +59 -0
- package/docs/icons/hand-thumb-up.md +59 -0
- package/docs/icons/hand.md +59 -0
- package/docs/icons/heart-extruded.md +59 -0
- package/docs/icons/heart.md +59 -0
- package/docs/icons/hexagon.md +59 -0
- package/docs/icons/home.md +59 -0
- package/docs/icons/horizontal-3-dots.md +59 -0
- package/docs/icons/hourglass-0.md +59 -0
- package/docs/icons/hourglass-100.md +59 -0
- package/docs/icons/hourglass-50.md +59 -0
- package/docs/icons/hourglass-80.md +59 -0
- package/docs/icons/icosahedron.md +59 -0
- package/docs/icons/inbox.md +59 -0
- package/docs/icons/index.md +1295 -0
- package/docs/icons/information-circle.md +59 -0
- package/docs/icons/key.md +59 -0
- package/docs/icons/layer-stacks.md +59 -0
- package/docs/icons/layout.md +59 -0
- package/docs/icons/light-bulb.md +59 -0
- package/docs/icons/lock-closed.md +59 -0
- package/docs/icons/lock-open.md +59 -0
- package/docs/icons/magic-wand.md +59 -0
- package/docs/icons/magnifying-glass-focus.md +59 -0
- package/docs/icons/magnifying-glass-minus.md +59 -0
- package/docs/icons/magnifying-glass-plus.md +59 -0
- package/docs/icons/magnifying-glass.md +59 -0
- package/docs/icons/map-pin.md +59 -0
- package/docs/icons/map.md +59 -0
- package/docs/icons/marquee.md +59 -0
- package/docs/icons/maximize.md +59 -0
- package/docs/icons/medal.md +59 -0
- package/docs/icons/microphone-mute.md +59 -0
- package/docs/icons/microphone.md +59 -0
- package/docs/icons/minimize.md +59 -0
- package/docs/icons/minus.md +59 -0
- package/docs/icons/moon.md +59 -0
- package/docs/icons/musical-note.md +59 -0
- package/docs/icons/octahedron.md +59 -0
- package/docs/icons/panorama.md +59 -0
- package/docs/icons/paper-clip.md +59 -0
- package/docs/icons/pause-circle.md +59 -0
- package/docs/icons/pause.md +59 -0
- package/docs/icons/pencil.md +59 -0
- package/docs/icons/phone-x-mark.md +59 -0
- package/docs/icons/phone.md +59 -0
- package/docs/icons/photo.md +59 -0
- package/docs/icons/plane.md +59 -0
- package/docs/icons/play-circle.md +59 -0
- package/docs/icons/play.md +59 -0
- package/docs/icons/plus.md +59 -0
- package/docs/icons/polygon.md +59 -0
- package/docs/icons/presentation-chart-line.md +59 -0
- package/docs/icons/presentation-media.md +59 -0
- package/docs/icons/pyramid.md +59 -0
- package/docs/icons/qr-code.md +59 -0
- package/docs/icons/question-mark-circle.md +59 -0
- package/docs/icons/rectangle.md +59 -0
- package/docs/icons/reel.md +59 -0
- package/docs/icons/robot.md +59 -0
- package/docs/icons/roof.md +59 -0
- package/docs/icons/rotate-add.md +59 -0
- package/docs/icons/rotate-minus.md +59 -0
- package/docs/icons/save.md +59 -0
- package/docs/icons/scissor.md +59 -0
- package/docs/icons/shapes.md +59 -0
- package/docs/icons/shield-check.md +59 -0
- package/docs/icons/shield-exclamation.md +59 -0
- package/docs/icons/shopping-bag.md +59 -0
- package/docs/icons/shopping-cart.md +59 -0
- package/docs/icons/sliders-horizontal.md +59 -0
- package/docs/icons/sliders-vertical.md +59 -0
- package/docs/icons/sparkles.md +59 -0
- package/docs/icons/speaker-wave.md +59 -0
- package/docs/icons/speaker-x-mark.md +59 -0
- package/docs/icons/sphere-half.md +59 -0
- package/docs/icons/sphere.md +59 -0
- package/docs/icons/square.md +59 -0
- package/docs/icons/star.md +59 -0
- package/docs/icons/stop-circle.md +59 -0
- package/docs/icons/stop.md +59 -0
- package/docs/icons/sun.md +59 -0
- package/docs/icons/table.md +59 -0
- package/docs/icons/tabs.md +59 -0
- package/docs/icons/tetrahedron.md +59 -0
- package/docs/icons/text-align-center.md +59 -0
- package/docs/icons/text-align-justify.md +59 -0
- package/docs/icons/text-align-left.md +59 -0
- package/docs/icons/text-align-right.md +59 -0
- package/docs/icons/text.md +59 -0
- package/docs/icons/thunder.md +59 -0
- package/docs/icons/tic-tac-toe.md +59 -0
- package/docs/icons/time-reset.md +59 -0
- package/docs/icons/torus-knot.md +59 -0
- package/docs/icons/torus.md +59 -0
- package/docs/icons/trash.md +59 -0
- package/docs/icons/trophy.md +59 -0
- package/docs/icons/truck.md +59 -0
- package/docs/icons/tube.md +59 -0
- package/docs/icons/ungroup-object.md +59 -0
- package/docs/icons/user-circle.md +59 -0
- package/docs/icons/user-group.md +59 -0
- package/docs/icons/user-minus.md +59 -0
- package/docs/icons/user-plus.md +59 -0
- package/docs/icons/user.md +59 -0
- package/docs/icons/users.md +59 -0
- package/docs/icons/vertical-3-dots.md +59 -0
- package/docs/icons/video-camera.md +59 -0
- package/docs/icons/vr.md +59 -0
- package/docs/icons/wedge.md +59 -0
- package/docs/icons/whiteboard.md +59 -0
- package/docs/icons/wifi.md +59 -0
- package/docs/icons/window.md +59 -0
- package/docs/icons/x-mark.md +59 -0
- package/docs/index.md +48 -0
- package/docs/ms/guide/configuration.md +125 -0
- package/docs/ms/guide/getting-started.md +34 -0
- package/docs/ms/guide/installation.md +54 -0
- package/docs/ms/guide/styling.md +156 -0
- package/docs/ms/guide/usage.md +103 -0
- package/docs/ms/icons/alert.md +59 -0
- package/docs/ms/icons/align-bottom-object.md +59 -0
- package/docs/ms/icons/align-center-object.md +59 -0
- package/docs/ms/icons/align-left-object.md +59 -0
- package/docs/ms/icons/align-middle-object.md +59 -0
- package/docs/ms/icons/align-right-object.md +59 -0
- package/docs/ms/icons/align-top-object.md +59 -0
- package/docs/ms/icons/ar.md +59 -0
- package/docs/ms/icons/archive-box.md +59 -0
- package/docs/ms/icons/arrow-down.md +59 -0
- package/docs/ms/icons/arrow-left-arrow-right.md +59 -0
- package/docs/ms/icons/arrow-left-on-rectangle.md +59 -0
- package/docs/ms/icons/arrow-left-right.md +59 -0
- package/docs/ms/icons/arrow-left.md +59 -0
- package/docs/ms/icons/arrow-long-down.md +59 -0
- package/docs/ms/icons/arrow-long-left.md +59 -0
- package/docs/ms/icons/arrow-long-right.md +59 -0
- package/docs/ms/icons/arrow-long-up.md +59 -0
- package/docs/ms/icons/arrow-path.md +59 -0
- package/docs/ms/icons/arrow-right-on-rectangle.md +59 -0
- package/docs/ms/icons/arrow-right.md +59 -0
- package/docs/ms/icons/arrow-rotate-ccw.md +59 -0
- package/docs/ms/icons/arrow-rotate-cw.md +59 -0
- package/docs/ms/icons/arrow-top-right-on-square.md +59 -0
- package/docs/ms/icons/arrow-up-arrow-down.md +59 -0
- package/docs/ms/icons/arrow-up-down-left-right.md +59 -0
- package/docs/ms/icons/arrow-up-down.md +59 -0
- package/docs/ms/icons/arrow-up.md +59 -0
- package/docs/ms/icons/banknotes.md +59 -0
- package/docs/ms/icons/bars-3.md +59 -0
- package/docs/ms/icons/basket.md +59 -0
- package/docs/ms/icons/battery-0.md +59 -0
- package/docs/ms/icons/battery-10.md +59 -0
- package/docs/ms/icons/battery-100.md +59 -0
- package/docs/ms/icons/battery-50.md +59 -0
- package/docs/ms/icons/bell-alert.md +59 -0
- package/docs/ms/icons/bell.md +59 -0
- package/docs/ms/icons/bolt.md +59 -0
- package/docs/ms/icons/book-close.md +59 -0
- package/docs/ms/icons/book-open.md +59 -0
- package/docs/ms/icons/book-stacked.md +59 -0
- package/docs/ms/icons/bookmark.md +59 -0
- package/docs/ms/icons/briefcase.md +59 -0
- package/docs/ms/icons/brush.md +59 -0
- package/docs/ms/icons/cake.md +59 -0
- package/docs/ms/icons/calendar-approve.md +59 -0
- package/docs/ms/icons/calendar-days.md +59 -0
- package/docs/ms/icons/calendar-minus.md +59 -0
- package/docs/ms/icons/calendar-plus.md +59 -0
- package/docs/ms/icons/calendar-reject.md +59 -0
- package/docs/ms/icons/calendar.md +59 -0
- package/docs/ms/icons/camera.md +59 -0
- package/docs/ms/icons/carousel.md +59 -0
- package/docs/ms/icons/chart-bar.md +59 -0
- package/docs/ms/icons/chart-line.md +59 -0
- package/docs/ms/icons/chart-pie.md +59 -0
- package/docs/ms/icons/chat-bubble-left-ellipsis.md +59 -0
- package/docs/ms/icons/chat-bubble-left-right.md +59 -0
- package/docs/ms/icons/chat-bubble-left.md +59 -0
- package/docs/ms/icons/chat-bubble-right-ellipsis.md +59 -0
- package/docs/ms/icons/chat-bubble-right.md +59 -0
- package/docs/ms/icons/chatbot.md +59 -0
- package/docs/ms/icons/check.md +59 -0
- package/docs/ms/icons/chevron-double-down.md +59 -0
- package/docs/ms/icons/chevron-double-left.md +59 -0
- package/docs/ms/icons/chevron-double-right.md +59 -0
- package/docs/ms/icons/chevron-double-up.md +59 -0
- package/docs/ms/icons/chevron-down.md +59 -0
- package/docs/ms/icons/chevron-left.md +59 -0
- package/docs/ms/icons/chevron-right.md +59 -0
- package/docs/ms/icons/chevron-up.md +59 -0
- package/docs/ms/icons/circle.md +59 -0
- package/docs/ms/icons/clipboard-document-check.md +59 -0
- package/docs/ms/icons/clipboard.md +59 -0
- package/docs/ms/icons/clock.md +59 -0
- package/docs/ms/icons/cloud.md +59 -0
- package/docs/ms/icons/code.md +59 -0
- package/docs/ms/icons/cog-6-tooth.md +59 -0
- package/docs/ms/icons/compress.md +59 -0
- package/docs/ms/icons/computer-code.md +59 -0
- package/docs/ms/icons/computer-desktop.md +59 -0
- package/docs/ms/icons/computer-laptop.md +59 -0
- package/docs/ms/icons/cone.md +59 -0
- package/docs/ms/icons/console.md +59 -0
- package/docs/ms/icons/container.md +59 -0
- package/docs/ms/icons/contrast.md +59 -0
- package/docs/ms/icons/controller.md +59 -0
- package/docs/ms/icons/credit-card.md +59 -0
- package/docs/ms/icons/crop.md +59 -0
- package/docs/ms/icons/crosshair.md +59 -0
- package/docs/ms/icons/cube.md +59 -0
- package/docs/ms/icons/currency-dollar.md +59 -0
- package/docs/ms/icons/currency-euro.md +59 -0
- package/docs/ms/icons/currency-pound.md +59 -0
- package/docs/ms/icons/currency-ringgit.md +59 -0
- package/docs/ms/icons/currency-yen.md +59 -0
- package/docs/ms/icons/cursor.md +59 -0
- package/docs/ms/icons/cylinder-half.md +59 -0
- package/docs/ms/icons/cylinder.md +59 -0
- package/docs/ms/icons/device-phone-mobile.md +59 -0
- package/docs/ms/icons/device-tablet.md +59 -0
- package/docs/ms/icons/diamond.md +59 -0
- package/docs/ms/icons/document-duplicate.md +59 -0
- package/docs/ms/icons/document-text.md +59 -0
- package/docs/ms/icons/document.md +59 -0
- package/docs/ms/icons/dodecahedron.md +59 -0
- package/docs/ms/icons/double-tick.md +59 -0
- package/docs/ms/icons/draw-curve.md +59 -0
- package/docs/ms/icons/draw-line.md +59 -0
- package/docs/ms/icons/envelope-open.md +59 -0
- package/docs/ms/icons/envelope.md +59 -0
- package/docs/ms/icons/eraser.md +59 -0
- package/docs/ms/icons/exclamation-circle.md +59 -0
- package/docs/ms/icons/exclamation-triangle.md +59 -0
- package/docs/ms/icons/expand.md +59 -0
- package/docs/ms/icons/eye-slash.md +59 -0
- package/docs/ms/icons/eye.md +59 -0
- package/docs/ms/icons/flag.md +59 -0
- package/docs/ms/icons/flip-horizontal.md +59 -0
- package/docs/ms/icons/flip-vertical.md +59 -0
- package/docs/ms/icons/focus.md +59 -0
- package/docs/ms/icons/folder-minus.md +59 -0
- package/docs/ms/icons/folder-open.md +59 -0
- package/docs/ms/icons/folder-plus.md +59 -0
- package/docs/ms/icons/folder.md +59 -0
- package/docs/ms/icons/font.md +59 -0
- package/docs/ms/icons/game.md +59 -0
- package/docs/ms/icons/gift.md +59 -0
- package/docs/ms/icons/globe-alt.md +59 -0
- package/docs/ms/icons/gradient.md +59 -0
- package/docs/ms/icons/grid.md +59 -0
- package/docs/ms/icons/group-object.md +59 -0
- package/docs/ms/icons/hand-grab.md +59 -0
- package/docs/ms/icons/hand-thumb-down.md +59 -0
- package/docs/ms/icons/hand-thumb-up.md +59 -0
- package/docs/ms/icons/hand.md +59 -0
- package/docs/ms/icons/heart-extruded.md +59 -0
- package/docs/ms/icons/heart.md +59 -0
- package/docs/ms/icons/hexagon.md +59 -0
- package/docs/ms/icons/home.md +59 -0
- package/docs/ms/icons/horizontal-3-dots.md +59 -0
- package/docs/ms/icons/hourglass-0.md +59 -0
- package/docs/ms/icons/hourglass-100.md +59 -0
- package/docs/ms/icons/hourglass-50.md +59 -0
- package/docs/ms/icons/hourglass-80.md +59 -0
- package/docs/ms/icons/icosahedron.md +59 -0
- package/docs/ms/icons/inbox.md +59 -0
- package/docs/ms/icons/index.md +1295 -0
- package/docs/ms/icons/information-circle.md +59 -0
- package/docs/ms/icons/key.md +59 -0
- package/docs/ms/icons/layer-stacks.md +59 -0
- package/docs/ms/icons/layout.md +59 -0
- package/docs/ms/icons/light-bulb.md +59 -0
- package/docs/ms/icons/lock-closed.md +59 -0
- package/docs/ms/icons/lock-open.md +59 -0
- package/docs/ms/icons/magic-wand.md +59 -0
- package/docs/ms/icons/magnifying-glass-focus.md +59 -0
- package/docs/ms/icons/magnifying-glass-minus.md +59 -0
- package/docs/ms/icons/magnifying-glass-plus.md +59 -0
- package/docs/ms/icons/magnifying-glass.md +59 -0
- package/docs/ms/icons/map-pin.md +59 -0
- package/docs/ms/icons/map.md +59 -0
- package/docs/ms/icons/marquee.md +59 -0
- package/docs/ms/icons/maximize.md +59 -0
- package/docs/ms/icons/medal.md +59 -0
- package/docs/ms/icons/microphone-mute.md +59 -0
- package/docs/ms/icons/microphone.md +59 -0
- package/docs/ms/icons/minimize.md +59 -0
- package/docs/ms/icons/minus.md +59 -0
- package/docs/ms/icons/moon.md +59 -0
- package/docs/ms/icons/musical-note.md +59 -0
- package/docs/ms/icons/octahedron.md +59 -0
- package/docs/ms/icons/panorama.md +59 -0
- package/docs/ms/icons/paper-clip.md +59 -0
- package/docs/ms/icons/pause-circle.md +59 -0
- package/docs/ms/icons/pause.md +59 -0
- package/docs/ms/icons/pencil.md +59 -0
- package/docs/ms/icons/phone-x-mark.md +59 -0
- package/docs/ms/icons/phone.md +59 -0
- package/docs/ms/icons/photo.md +59 -0
- package/docs/ms/icons/plane.md +59 -0
- package/docs/ms/icons/play-circle.md +59 -0
- package/docs/ms/icons/play.md +59 -0
- package/docs/ms/icons/plus.md +59 -0
- package/docs/ms/icons/polygon.md +59 -0
- package/docs/ms/icons/presentation-chart-line.md +59 -0
- package/docs/ms/icons/presentation-media.md +59 -0
- package/docs/ms/icons/pyramid.md +59 -0
- package/docs/ms/icons/qr-code.md +59 -0
- package/docs/ms/icons/question-mark-circle.md +59 -0
- package/docs/ms/icons/rectangle.md +59 -0
- package/docs/ms/icons/reel.md +59 -0
- package/docs/ms/icons/robot.md +59 -0
- package/docs/ms/icons/roof.md +59 -0
- package/docs/ms/icons/rotate-add.md +59 -0
- package/docs/ms/icons/rotate-minus.md +59 -0
- package/docs/ms/icons/save.md +59 -0
- package/docs/ms/icons/scissor.md +59 -0
- package/docs/ms/icons/shapes.md +59 -0
- package/docs/ms/icons/shield-check.md +59 -0
- package/docs/ms/icons/shield-exclamation.md +59 -0
- package/docs/ms/icons/shopping-bag.md +59 -0
- package/docs/ms/icons/shopping-cart.md +59 -0
- package/docs/ms/icons/sliders-horizontal.md +59 -0
- package/docs/ms/icons/sliders-vertical.md +59 -0
- package/docs/ms/icons/sparkles.md +59 -0
- package/docs/ms/icons/speaker-wave.md +59 -0
- package/docs/ms/icons/speaker-x-mark.md +59 -0
- package/docs/ms/icons/sphere-half.md +59 -0
- package/docs/ms/icons/sphere.md +59 -0
- package/docs/ms/icons/square.md +59 -0
- package/docs/ms/icons/star.md +59 -0
- package/docs/ms/icons/stop-circle.md +59 -0
- package/docs/ms/icons/stop.md +59 -0
- package/docs/ms/icons/sun.md +59 -0
- package/docs/ms/icons/table.md +59 -0
- package/docs/ms/icons/tabs.md +59 -0
- package/docs/ms/icons/tetrahedron.md +59 -0
- package/docs/ms/icons/text-align-center.md +59 -0
- package/docs/ms/icons/text-align-justify.md +59 -0
- package/docs/ms/icons/text-align-left.md +59 -0
- package/docs/ms/icons/text-align-right.md +59 -0
- package/docs/ms/icons/text.md +59 -0
- package/docs/ms/icons/thunder.md +59 -0
- package/docs/ms/icons/tic-tac-toe.md +59 -0
- package/docs/ms/icons/time-reset.md +59 -0
- package/docs/ms/icons/torus-knot.md +59 -0
- package/docs/ms/icons/torus.md +59 -0
- package/docs/ms/icons/trash.md +59 -0
- package/docs/ms/icons/trophy.md +59 -0
- package/docs/ms/icons/truck.md +59 -0
- package/docs/ms/icons/tube.md +59 -0
- package/docs/ms/icons/ungroup-object.md +59 -0
- package/docs/ms/icons/user-circle.md +59 -0
- package/docs/ms/icons/user-group.md +59 -0
- package/docs/ms/icons/user-minus.md +59 -0
- package/docs/ms/icons/user-plus.md +59 -0
- package/docs/ms/icons/user.md +59 -0
- package/docs/ms/icons/users.md +59 -0
- package/docs/ms/icons/vertical-3-dots.md +59 -0
- package/docs/ms/icons/video-camera.md +59 -0
- package/docs/ms/icons/vr.md +59 -0
- package/docs/ms/icons/wedge.md +59 -0
- package/docs/ms/icons/whiteboard.md +59 -0
- package/docs/ms/icons/wifi.md +59 -0
- package/docs/ms/icons/window.md +59 -0
- package/docs/ms/icons/x-mark.md +59 -0
- package/docs/ms/index.md +48 -0
- package/package.json +13 -3
- package/scripts/build-icon-docs.js +331 -0
- package/scripts/build.js +40 -0
- package/test-results.json +11 -0
- package/tests/build-css.test.js +134 -0
- package/tests/build-icon-docs.test.js +132 -0
- package/tests/build-pipeline.test.js +138 -0
- package/tests/build-svgs.test.js +102 -0
- package/tests/ss-icon.test.js +178 -0
- package/tests/ss-loader.test.js +156 -0
- package/vitest.config.js +15 -0
package/docs/ms/index.md
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: home
|
|
3
|
+
|
|
4
|
+
hero:
|
|
5
|
+
name: "SenangStart Icons"
|
|
6
|
+
text: "Ikon cantik untuk projek web moden"
|
|
7
|
+
tagline: Pustaka ikon terkurasi, boleh disesuaikan, dan mudah digunakan
|
|
8
|
+
actions:
|
|
9
|
+
- theme: brand
|
|
10
|
+
text: Bermula
|
|
11
|
+
link: /ms/guide/getting-started
|
|
12
|
+
- theme: alt
|
|
13
|
+
text: Lihat Ikon
|
|
14
|
+
link: /ms/icons/
|
|
15
|
+
image:
|
|
16
|
+
src: https://senangstart.com/img/use_senangstart.svg
|
|
17
|
+
alt: SenangStart Icons
|
|
18
|
+
|
|
19
|
+
features:
|
|
20
|
+
- icon: <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"><path d="m21.64 3.64-1.28-1.28a1.21 1.21 0 00-1.72 0L2.36 18.64a1.21 1.21 0 000 1.72l1.28 1.28a1.2 1.2 0 001.72 0L21.64 5.36a1.2 1.2 0 000-1.72M10.5 10.5l3 3M5 6v4M19 15v4M10 3v2M7 8H3M21 17h-4M11 4H9"></path></svg>
|
|
21
|
+
title: Boleh Disesuaikan
|
|
22
|
+
details: Mudah menyesuaikan warna, saiz, dan gaya untuk memadankan sistem reka bentuk anda.
|
|
23
|
+
- icon: <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"><path d="M9 3h5L12 8 18 8 8.5 22l3.5-10h-6l2-9z"></path></svg>
|
|
24
|
+
title: Ringan
|
|
25
|
+
details: Ikon SVG yang dioptimumkan, pantas dimuatkan dan mesra prestasi.
|
|
26
|
+
- icon: <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"><path d="M9.90 5.32 L9.14 2.94 A9.5 9.5 0 0 1 14.86 2.94 L14.10 5.32 A7 7 0 0 1 16.73 6.84 L18.42 5.00 A9.5 9.5 0 0 1 21.27 9.94 L18.83 10.48 A7 7 0 0 1 18.83 13.52 L21.27 14.06 A9.5 9.5 0 0 1 18.42 19.00 L16.73 17.16 A7 7 0 0 1 14.10 18.68 L14.86 21.06 A9.5 9.5 0 0 1 9.14 21.06 L9.90 18.68 A7 7 0 0 1 7.27 17.16 L5.58 19.00 A9.5 9.5 0 0 1 2.73 14.06 L5.17 13.52 A7 7 0 0 1 5.17 10.48 L2.73 9.94 A9.5 9.5 0 0 1 5.58 5.00 L7.27 6.84 A7 7 0 0 1 9.90 5.32 Z M14.5 12 A2.5 2.5 0 1 0 9.5 12 A2.5 2.5 0 1 0 14.5 12 Z"></path></svg>
|
|
27
|
+
title: Integrasi Mudah
|
|
28
|
+
details: API mudah dengan pelbagai cara penggunaan - Web Components, CDN, atau npm.
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Mula Pantas
|
|
32
|
+
|
|
33
|
+
Tambah SenangStart Icons ke projek anda:
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<!-- CDN -->
|
|
37
|
+
<script src="https://unpkg.com/@bookklik/senangstart-icons/dist/senangstart-icon.min.js"></script>
|
|
38
|
+
|
|
39
|
+
<!-- Gunakan ikon -->
|
|
40
|
+
<ss-icon name="home"></ss-icon>
|
|
41
|
+
<ss-icon name="search" size="24"></ss-icon>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Atau pasang melalui npm:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
npm install @bookklik/senangstart-icons
|
|
48
|
+
```
|
package/package.json
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bookklik/senangstart-icons",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "Curated Starter icons designed for web projects.",
|
|
5
5
|
"main": "dist/senangstart-icon.min.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build:svg": "node scripts/build-svgs.js",
|
|
8
|
+
"build:icon-docs": "node scripts/build-icon-docs.js",
|
|
8
9
|
"build:css": "node scripts/build-css.js",
|
|
9
|
-
"build": "
|
|
10
|
+
"build": "node scripts/build.js",
|
|
10
11
|
"build:watch": "npm run build:svg && npm run build:css && webpack --mode production --watch",
|
|
11
12
|
"dev": "npm run build:svg && npm run build:css && webpack --mode development --watch",
|
|
12
|
-
"test": "
|
|
13
|
+
"test": "vitest run",
|
|
14
|
+
"test:watch": "vitest",
|
|
15
|
+
"test:coverage": "vitest run --coverage",
|
|
16
|
+
"docs:dev": "vitepress dev docs",
|
|
17
|
+
"docs:build": "vitepress build docs",
|
|
18
|
+
"docs:preview": "vitepress preview docs"
|
|
13
19
|
},
|
|
14
20
|
"keywords": [
|
|
15
21
|
"icons",
|
|
@@ -21,11 +27,15 @@
|
|
|
21
27
|
"devDependencies": {
|
|
22
28
|
"@babel/core": "^7.23.0",
|
|
23
29
|
"@babel/preset-env": "^7.23.0",
|
|
30
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
24
31
|
"babel-loader": "^9.1.3",
|
|
25
32
|
"css-loader": "^6.8.1",
|
|
26
33
|
"css-minimizer-webpack-plugin": "^5.0.1",
|
|
34
|
+
"jsdom": "^26.1.0",
|
|
27
35
|
"mini-css-extract-plugin": "^2.7.6",
|
|
28
36
|
"terser-webpack-plugin": "^5.3.9",
|
|
37
|
+
"vitepress": "^1.6.4",
|
|
38
|
+
"vitest": "^3.2.4",
|
|
29
39
|
"webpack": "^5.89.0",
|
|
30
40
|
"webpack-cli": "^5.1.4"
|
|
31
41
|
}
|
|
@@ -0,0 +1,331 @@
|
|
|
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
|
+
\`\`\`html
|
|
43
|
+
<ss-icon name="${slug}"></ss-icon>
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
### With custom size
|
|
47
|
+
|
|
48
|
+
\`\`\`html
|
|
49
|
+
<ss-icon name="${slug}" size="32"></ss-icon>
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
### With custom color
|
|
53
|
+
|
|
54
|
+
\`\`\`html
|
|
55
|
+
<ss-icon name="${slug}" color="#3b82f6"></ss-icon>
|
|
56
|
+
\`\`\`
|
|
57
|
+
|
|
58
|
+
### With custom stroke width
|
|
59
|
+
|
|
60
|
+
\`\`\`html
|
|
61
|
+
<ss-icon name="${slug}" stroke="2"></ss-icon>
|
|
62
|
+
\`\`\`
|
|
63
|
+
|
|
64
|
+
## Icon Details
|
|
65
|
+
|
|
66
|
+
| Property | Value |
|
|
67
|
+
|----------|-------|
|
|
68
|
+
| **Name** | ${name} |
|
|
69
|
+
| **Slug** | \`${slug}\` |
|
|
70
|
+
| **Tags** | ${tags.map(t => `\`${t}\``).join(', ')} |
|
|
71
|
+
|
|
72
|
+
## SVG Path
|
|
73
|
+
|
|
74
|
+
\`\`\`
|
|
75
|
+
${src}
|
|
76
|
+
\`\`\`
|
|
77
|
+
|
|
78
|
+
## Raw SVG
|
|
79
|
+
|
|
80
|
+
\`\`\`html
|
|
81
|
+
<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">
|
|
82
|
+
<path d="${src}"></path>
|
|
83
|
+
</svg>
|
|
84
|
+
\`\`\`
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
[← Back to Icon Library](/icons/)
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
// Generate Malay markdown content
|
|
92
|
+
const markdownMs = `---
|
|
93
|
+
title: ${name}
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
# ${name}
|
|
97
|
+
|
|
98
|
+
<div style="display: flex; justify-content: center; padding: 2rem; background: var(--vp-c-bg-soft); border-radius: 8px; margin: 1rem 0;">
|
|
99
|
+
${svgPreview}
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
## Penggunaan
|
|
103
|
+
|
|
104
|
+
\`\`\`html
|
|
105
|
+
<ss-icon name="${slug}"></ss-icon>
|
|
106
|
+
\`\`\`
|
|
107
|
+
|
|
108
|
+
### Dengan saiz tersuai
|
|
109
|
+
|
|
110
|
+
\`\`\`html
|
|
111
|
+
<ss-icon name="${slug}" size="32"></ss-icon>
|
|
112
|
+
\`\`\`
|
|
113
|
+
|
|
114
|
+
### Dengan warna tersuai
|
|
115
|
+
|
|
116
|
+
\`\`\`html
|
|
117
|
+
<ss-icon name="${slug}" color="#3b82f6"></ss-icon>
|
|
118
|
+
\`\`\`
|
|
119
|
+
|
|
120
|
+
### Dengan lebar garisan tersuai
|
|
121
|
+
|
|
122
|
+
\`\`\`html
|
|
123
|
+
<ss-icon name="${slug}" stroke="2"></ss-icon>
|
|
124
|
+
\`\`\`
|
|
125
|
+
|
|
126
|
+
## Butiran Ikon
|
|
127
|
+
|
|
128
|
+
| Ciri | Nilai |
|
|
129
|
+
|------|-------|
|
|
130
|
+
| **Nama** | ${name} |
|
|
131
|
+
| **Slug** | \`${slug}\` |
|
|
132
|
+
| **Tag** | ${tags.map(t => `\`${t}\``).join(', ')} |
|
|
133
|
+
|
|
134
|
+
## Laluan SVG
|
|
135
|
+
|
|
136
|
+
\`\`\`
|
|
137
|
+
${src}
|
|
138
|
+
\`\`\`
|
|
139
|
+
|
|
140
|
+
## SVG Mentah
|
|
141
|
+
|
|
142
|
+
\`\`\`html
|
|
143
|
+
<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">
|
|
144
|
+
<path d="${src}"></path>
|
|
145
|
+
</svg>
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
[← Kembali ke Pustaka Ikon](/ms/icons/)
|
|
151
|
+
`;
|
|
152
|
+
|
|
153
|
+
// Write individual icon markdown files (English)
|
|
154
|
+
const iconFilePath = path.join(docsIconsDir, `${slug}.md`);
|
|
155
|
+
fs.writeFileSync(iconFilePath, markdownEn);
|
|
156
|
+
|
|
157
|
+
// Write individual icon markdown files (Malay)
|
|
158
|
+
const iconFilePathMs = path.join(docsIconsDirMs, `${slug}.md`);
|
|
159
|
+
fs.writeFileSync(iconFilePathMs, markdownMs);
|
|
160
|
+
|
|
161
|
+
// Add to links array
|
|
162
|
+
iconLinks.push({
|
|
163
|
+
name,
|
|
164
|
+
slug,
|
|
165
|
+
tags
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
// Progress indicator
|
|
169
|
+
if ((index + 1) % 50 === 0 || index === icons.length - 1) {
|
|
170
|
+
console.log(` ✓ Generated ${index + 1}/${icons.length} icon docs (EN + MS)`);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
// Generate English index.md with links to all icons
|
|
175
|
+
const indexMarkdownEn = `---
|
|
176
|
+
title: Icon Library
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
# Icon Library
|
|
180
|
+
|
|
181
|
+
Browse all **${icons.length}** available icons in SenangStart Icons.
|
|
182
|
+
|
|
183
|
+
## Usage
|
|
184
|
+
|
|
185
|
+
Once you find the icon you need, use it like this:
|
|
186
|
+
|
|
187
|
+
\`\`\`html
|
|
188
|
+
<ss-icon name="icon-name"></ss-icon>
|
|
189
|
+
\`\`\`
|
|
190
|
+
|
|
191
|
+
## All Icons
|
|
192
|
+
|
|
193
|
+
<div class="icon-grid">
|
|
194
|
+
|
|
195
|
+
${iconLinks.map(icon => {
|
|
196
|
+
return `<a href="./${icon.slug}" class="icon-card" title="${icon.tags.join(', ')}">
|
|
197
|
+
<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>
|
|
198
|
+
<span>${icon.name}</span>
|
|
199
|
+
</a>`;
|
|
200
|
+
}).join('\n\n')}
|
|
201
|
+
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<style>
|
|
205
|
+
.icon-grid {
|
|
206
|
+
display: grid;
|
|
207
|
+
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
208
|
+
gap: 1rem;
|
|
209
|
+
margin-top: 1rem;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.icon-card {
|
|
213
|
+
display: flex;
|
|
214
|
+
flex-direction: column;
|
|
215
|
+
align-items: center;
|
|
216
|
+
justify-content: center;
|
|
217
|
+
padding: 1rem;
|
|
218
|
+
background: var(--vp-c-bg-soft);
|
|
219
|
+
border-radius: 8px;
|
|
220
|
+
text-decoration: none;
|
|
221
|
+
color: var(--vp-c-text-1) !important;
|
|
222
|
+
transition: all 0.2s ease;
|
|
223
|
+
text-align: center;
|
|
224
|
+
aspect-ratio: 1/1;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.icon-card:hover {
|
|
228
|
+
background: var(--vp-c-bg-soft-up);
|
|
229
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.icon-card svg {
|
|
233
|
+
margin-bottom: 0.5rem;
|
|
234
|
+
width: 3rem;
|
|
235
|
+
height: 3rem;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.icon-card span {
|
|
239
|
+
font-size: 0.8rem;
|
|
240
|
+
word-break: break-word;
|
|
241
|
+
overflow: hidden;
|
|
242
|
+
display: -webkit-box;
|
|
243
|
+
-webkit-box-orient: vertical;
|
|
244
|
+
-webkit-line-clamp: 1;
|
|
245
|
+
}
|
|
246
|
+
</style>
|
|
247
|
+
`;
|
|
248
|
+
|
|
249
|
+
// Generate Malay index.md with links to all icons
|
|
250
|
+
const indexMarkdownMs = `---
|
|
251
|
+
title: Pustaka Ikon
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
# Pustaka Ikon
|
|
255
|
+
|
|
256
|
+
Layari semua **${icons.length}** ikon yang tersedia dalam SenangStart Icons.
|
|
257
|
+
|
|
258
|
+
## Penggunaan
|
|
259
|
+
|
|
260
|
+
Setelah anda menemui ikon yang diperlukan, gunakannya seperti ini:
|
|
261
|
+
|
|
262
|
+
\`\`\`html
|
|
263
|
+
<ss-icon name="nama-ikon"></ss-icon>
|
|
264
|
+
\`\`\`
|
|
265
|
+
|
|
266
|
+
## Semua Ikon
|
|
267
|
+
|
|
268
|
+
<div class="icon-grid">
|
|
269
|
+
|
|
270
|
+
${iconLinks.map(icon => {
|
|
271
|
+
return `<a href="./${icon.slug}" class="icon-card" title="${icon.tags.join(', ')}">
|
|
272
|
+
<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>
|
|
273
|
+
<span>${icon.name}</span>
|
|
274
|
+
</a>`;
|
|
275
|
+
}).join('\n\n')}
|
|
276
|
+
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
<style>
|
|
280
|
+
.icon-grid {
|
|
281
|
+
display: grid;
|
|
282
|
+
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
|
|
283
|
+
gap: 1rem;
|
|
284
|
+
margin-top: 1rem;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
.icon-card {
|
|
288
|
+
display: flex;
|
|
289
|
+
flex-direction: column;
|
|
290
|
+
align-items: center;
|
|
291
|
+
justify-content: center;
|
|
292
|
+
padding: 1rem;
|
|
293
|
+
background: var(--vp-c-bg-soft);
|
|
294
|
+
border-radius: 8px;
|
|
295
|
+
text-decoration: none;
|
|
296
|
+
color: var(--vp-c-text-1) !important;
|
|
297
|
+
transition: all 0.2s ease;
|
|
298
|
+
text-align: center;
|
|
299
|
+
aspect-ratio: 1/1;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.icon-card:hover {
|
|
303
|
+
background: var(--vp-c-bg-soft-up);
|
|
304
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.icon-card svg {
|
|
308
|
+
margin-bottom: 0.5rem;
|
|
309
|
+
width: 3rem;
|
|
310
|
+
height: 3rem;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.icon-card span {
|
|
314
|
+
font-size: 0.8rem;
|
|
315
|
+
word-break: break-word;
|
|
316
|
+
overflow: hidden;
|
|
317
|
+
display: -webkit-box;
|
|
318
|
+
-webkit-box-orient: vertical;
|
|
319
|
+
-webkit-line-clamp: 1;
|
|
320
|
+
}
|
|
321
|
+
</style>
|
|
322
|
+
`;
|
|
323
|
+
|
|
324
|
+
fs.writeFileSync(indexPath, indexMarkdownEn);
|
|
325
|
+
fs.writeFileSync(indexPathMs, indexMarkdownMs);
|
|
326
|
+
|
|
327
|
+
console.log(`\n✅ Icon documentation generated successfully!`);
|
|
328
|
+
console.log(` - ${icons.length} English icon pages created`);
|
|
329
|
+
console.log(` - ${icons.length} Malay icon pages created`);
|
|
330
|
+
console.log(` - English index at docs/icons/index.md`);
|
|
331
|
+
console.log(` - Malay index at docs/ms/icons/index.md`);
|
package/scripts/build.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
console.log('\n✅ Build complete! Files copied to docs/public/');
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
npx : [33mThe 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.[39m
|
|
4
|
+
At line:1 char:1
|
|
5
|
+
+ npx vitest run tests/build-pipeline.test.js --reporter=json 2>&1 | Ou ...
|
|
6
|
+
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
7
|
+
+ CategoryInfo : NotSpecified: ([33mThe CJS bu...e details.[39m: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
|
+
});
|