v-uixy 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -0
- package/bin/v-uixy.js +30 -0
- package/commands/add.js +189 -0
- package/commands/init.js +113 -0
- package/commands/list.js +48 -0
- package/commands/remove.js +69 -0
- package/configs/components.json +3 -0
- package/package.json +48 -0
- package/templates/assets/css/main.css +174 -0
- package/templates/assets/icons/4g.svg +3 -0
- package/templates/assets/icons/4k-box.svg +3 -0
- package/templates/assets/icons/4k.svg +3 -0
- package/templates/assets/icons/5g.svg +3 -0
- package/templates/assets/icons/ab-testing.svg +3 -0
- package/templates/assets/icons/ac.svg +3 -0
- package/templates/assets/icons/add-box-multiple.svg +3 -0
- package/templates/assets/icons/add-box.svg +3 -0
- package/templates/assets/icons/add-col.svg +3 -0
- package/templates/assets/icons/add-grid.svg +3 -0
- package/templates/assets/icons/add-row.svg +3 -0
- package/templates/assets/icons/alert.svg +3 -0
- package/templates/assets/icons/align-center.svg +3 -0
- package/templates/assets/icons/align-justify.svg +3 -0
- package/templates/assets/icons/align-left.svg +3 -0
- package/templates/assets/icons/align-right.svg +3 -0
- package/templates/assets/icons/analytics.svg +3 -0
- package/templates/assets/icons/anchor.svg +3 -0
- package/templates/assets/icons/android.svg +3 -0
- package/templates/assets/icons/animation.svg +3 -0
- package/templates/assets/icons/archive.svg +3 -0
- package/templates/assets/icons/arrow-bar-down.svg +3 -0
- package/templates/assets/icons/arrow-bar-left.svg +3 -0
- package/templates/assets/icons/arrow-bar-right.svg +3 -0
- package/templates/assets/icons/arrow-bar-up.svg +3 -0
- package/templates/assets/icons/arrow-down-box.svg +3 -0
- package/templates/assets/icons/arrow-down.svg +3 -0
- package/templates/assets/icons/arrow-left-box.svg +3 -0
- package/templates/assets/icons/arrow-left.svg +3 -0
- package/templates/assets/icons/arrow-right-box.svg +3 -0
- package/templates/assets/icons/arrow-right.svg +3 -0
- package/templates/assets/icons/arrow-up-box.svg +3 -0
- package/templates/assets/icons/arrow-up.svg +3 -0
- package/templates/assets/icons/arrows-horizontal.svg +3 -0
- package/templates/assets/icons/arrows-vertical.svg +3 -0
- package/templates/assets/icons/art-text.svg +3 -0
- package/templates/assets/icons/article-multiple.svg +3 -0
- package/templates/assets/icons/article.svg +3 -0
- package/templates/assets/icons/aspect-ratio.svg +3 -0
- package/templates/assets/icons/at.svg +3 -0
- package/templates/assets/icons/attachment.svg +3 -0
- package/templates/assets/icons/audio-device.svg +3 -0
- package/templates/assets/icons/avatar.svg +3 -0
- package/templates/assets/icons/backburger.svg +3 -0
- package/templates/assets/icons/battery-1.svg +3 -0
- package/templates/assets/icons/battery-2.svg +3 -0
- package/templates/assets/icons/battery-charging.svg +3 -0
- package/templates/assets/icons/battery-full.svg +3 -0
- package/templates/assets/icons/battery.svg +3 -0
- package/templates/assets/icons/bed.svg +3 -0
- package/templates/assets/icons/bitcoin.svg +3 -0
- package/templates/assets/icons/bluetooth.svg +3 -0
- package/templates/assets/icons/book-open.svg +3 -0
- package/templates/assets/icons/book.svg +3 -0
- package/templates/assets/icons/bookmark.svg +3 -0
- package/templates/assets/icons/bookmarks.svg +3 -0
- package/templates/assets/icons/briefcase-account.svg +3 -0
- package/templates/assets/icons/briefcase-check.svg +3 -0
- package/templates/assets/icons/briefcase-delete.svg +3 -0
- package/templates/assets/icons/briefcase-download.svg +3 -0
- package/templates/assets/icons/briefcase-minus.svg +3 -0
- package/templates/assets/icons/briefcase-plus.svg +3 -0
- package/templates/assets/icons/briefcase-search-1.svg +3 -0
- package/templates/assets/icons/briefcase-search.svg +3 -0
- package/templates/assets/icons/briefcase-upload.svg +3 -0
- package/templates/assets/icons/briefcase.svg +3 -0
- package/templates/assets/icons/bug.svg +3 -0
- package/templates/assets/icons/building-community.svg +3 -0
- package/templates/assets/icons/building-skyscraper.svg +3 -0
- package/templates/assets/icons/building.svg +3 -0
- package/templates/assets/icons/buildings.svg +3 -0
- package/templates/assets/icons/bulletlist.svg +3 -0
- package/templates/assets/icons/bullseye-arrow.svg +3 -0
- package/templates/assets/icons/bullseye.svg +3 -0
- package/templates/assets/icons/bus.svg +3 -0
- package/templates/assets/icons/cake.svg +3 -0
- package/templates/assets/icons/calculator.svg +3 -0
- package/templates/assets/icons/calendar-alert.svg +3 -0
- package/templates/assets/icons/calendar-arrow-left.svg +3 -0
- package/templates/assets/icons/calendar-arrow-right.svg +3 -0
- package/templates/assets/icons/calendar-check.svg +3 -0
- package/templates/assets/icons/calendar-export.svg +3 -0
- package/templates/assets/icons/calendar-grid.svg +3 -0
- package/templates/assets/icons/calendar-import.svg +3 -0
- package/templates/assets/icons/calendar-minus.svg +3 -0
- package/templates/assets/icons/calendar-month.svg +3 -0
- package/templates/assets/icons/calendar-multiple-check.svg +3 -0
- package/templates/assets/icons/calendar-multiple.svg +3 -0
- package/templates/assets/icons/calendar-plus.svg +3 -0
- package/templates/assets/icons/calendar-range.svg +3 -0
- package/templates/assets/icons/calendar-remove.svg +3 -0
- package/templates/assets/icons/calendar-search.svg +3 -0
- package/templates/assets/icons/calendar-sort-ascending.svg +3 -0
- package/templates/assets/icons/calendar-sort-descending.svg +3 -0
- package/templates/assets/icons/calendar-text.svg +3 -0
- package/templates/assets/icons/calendar-today.svg +3 -0
- package/templates/assets/icons/calendar-tomorrow.svg +3 -0
- package/templates/assets/icons/calendar-week-begin.svg +3 -0
- package/templates/assets/icons/calendar-week.svg +3 -0
- package/templates/assets/icons/calendar-weekend.svg +3 -0
- package/templates/assets/icons/calendar.svg +3 -0
- package/templates/assets/icons/camera-add.svg +3 -0
- package/templates/assets/icons/camera-alt.svg +3 -0
- package/templates/assets/icons/camera-face.svg +3 -0
- package/templates/assets/icons/camera.svg +3 -0
- package/templates/assets/icons/car.svg +3 -0
- package/templates/assets/icons/card-id.svg +3 -0
- package/templates/assets/icons/card-plus.svg +3 -0
- package/templates/assets/icons/card-stack.svg +3 -0
- package/templates/assets/icons/card-text.svg +3 -0
- package/templates/assets/icons/card.svg +3 -0
- package/templates/assets/icons/cart.svg +3 -0
- package/templates/assets/icons/cast.svg +3 -0
- package/templates/assets/icons/cellular-signal-0.svg +3 -0
- package/templates/assets/icons/cellular-signal-1.svg +3 -0
- package/templates/assets/icons/cellular-signal-2.svg +3 -0
- package/templates/assets/icons/cellular-signal-3.svg +3 -0
- package/templates/assets/icons/cellular-signal-off.svg +3 -0
- package/templates/assets/icons/chart-add.svg +3 -0
- package/templates/assets/icons/chart-bar.svg +3 -0
- package/templates/assets/icons/chart-delete.svg +3 -0
- package/templates/assets/icons/chart-minus.svg +3 -0
- package/templates/assets/icons/chart-multiple.svg +3 -0
- package/templates/assets/icons/chart.svg +3 -0
- package/templates/assets/icons/chat.svg +3 -0
- package/templates/assets/icons/check-double.svg +3 -0
- package/templates/assets/icons/check.svg +3 -0
- package/templates/assets/icons/checkbox-on.svg +3 -0
- package/templates/assets/icons/checkbox.svg +3 -0
- package/templates/assets/icons/checklist.svg +3 -0
- package/templates/assets/icons/chess.svg +3 -0
- package/templates/assets/icons/chevron-down.svg +3 -0
- package/templates/assets/icons/chevron-left.svg +3 -0
- package/templates/assets/icons/chevron-right.svg +3 -0
- package/templates/assets/icons/chevron-up.svg +3 -0
- package/templates/assets/icons/chevrons-horizontal.svg +3 -0
- package/templates/assets/icons/chevrons-vertical.svg +3 -0
- package/templates/assets/icons/circle.svg +3 -0
- package/templates/assets/icons/clipboard.svg +3 -0
- package/templates/assets/icons/clock.svg +3 -0
- package/templates/assets/icons/close-box.svg +3 -0
- package/templates/assets/icons/close.svg +3 -0
- package/templates/assets/icons/cloud-done.svg +3 -0
- package/templates/assets/icons/cloud-download.svg +3 -0
- package/templates/assets/icons/cloud-moon.svg +3 -0
- package/templates/assets/icons/cloud-sun.svg +3 -0
- package/templates/assets/icons/cloud-upload.svg +3 -0
- package/templates/assets/icons/cloud.svg +3 -0
- package/templates/assets/icons/cocktail.svg +3 -0
- package/templates/assets/icons/code.svg +3 -0
- package/templates/assets/icons/coffee-alt.svg +3 -0
- package/templates/assets/icons/coffee.svg +3 -0
- package/templates/assets/icons/coin.svg +3 -0
- package/templates/assets/icons/collapse.svg +3 -0
- package/templates/assets/icons/colors-swatch.svg +3 -0
- package/templates/assets/icons/command.svg +3 -0
- package/templates/assets/icons/comment.svg +3 -0
- package/templates/assets/icons/contact-delete.svg +3 -0
- package/templates/assets/icons/contact-multiple.svg +3 -0
- package/templates/assets/icons/contact-plus.svg +3 -0
- package/templates/assets/icons/contact.svg +3 -0
- package/templates/assets/icons/copy.svg +3 -0
- package/templates/assets/icons/corner-down-left.svg +3 -0
- package/templates/assets/icons/corner-down-right.svg +3 -0
- package/templates/assets/icons/corner-left-down.svg +3 -0
- package/templates/assets/icons/corner-left-up.svg +3 -0
- package/templates/assets/icons/corner-right-down.svg +3 -0
- package/templates/assets/icons/corner-right-up.svg +3 -0
- package/templates/assets/icons/corner-up-left.svg +3 -0
- package/templates/assets/icons/corner-up-right.svg +3 -0
- package/templates/assets/icons/credit-card-delete.svg +3 -0
- package/templates/assets/icons/credit-card-minus.svg +3 -0
- package/templates/assets/icons/credit-card-multiple.svg +3 -0
- package/templates/assets/icons/credit-card-plus.svg +3 -0
- package/templates/assets/icons/credit-card-settings.svg +3 -0
- package/templates/assets/icons/credit-card-wireless.svg +3 -0
- package/templates/assets/icons/credit-card.svg +3 -0
- package/templates/assets/icons/crop.svg +3 -0
- package/templates/assets/icons/cut.svg +3 -0
- package/templates/assets/icons/dashboard.svg +3 -0
- package/templates/assets/icons/debug-check.svg +3 -0
- package/templates/assets/icons/debug-off.svg +3 -0
- package/templates/assets/icons/debug-pause.svg +3 -0
- package/templates/assets/icons/debug-play.svg +3 -0
- package/templates/assets/icons/debug-stop.svg +3 -0
- package/templates/assets/icons/debug.svg +4 -0
- package/templates/assets/icons/delete.svg +3 -0
- package/templates/assets/icons/deskphone.svg +3 -0
- package/templates/assets/icons/device-laptop.svg +3 -0
- package/templates/assets/icons/device-phone.svg +3 -0
- package/templates/assets/icons/device-tablet.svg +3 -0
- package/templates/assets/icons/device-tv-smart.svg +3 -0
- package/templates/assets/icons/device-tv.svg +3 -0
- package/templates/assets/icons/device-vibrate.svg +3 -0
- package/templates/assets/icons/device-watch.svg +3 -0
- package/templates/assets/icons/devices.svg +3 -0
- package/templates/assets/icons/dice.svg +3 -0
- package/templates/assets/icons/dollar.svg +3 -0
- package/templates/assets/icons/downasaur.svg +3 -0
- package/templates/assets/icons/download.svg +3 -0
- package/templates/assets/icons/draft.svg +3 -0
- package/templates/assets/icons/drag-and-drop.svg +3 -0
- package/templates/assets/icons/drop-area.svg +3 -0
- package/templates/assets/icons/drop-full.svg +3 -0
- package/templates/assets/icons/drop-half.svg +3 -0
- package/templates/assets/icons/drop.svg +3 -0
- package/templates/assets/icons/duplicate-alt.svg +3 -0
- package/templates/assets/icons/duplicate.svg +3 -0
- package/templates/assets/icons/edit-box.svg +3 -0
- package/templates/assets/icons/edit.svg +3 -0
- package/templates/assets/icons/euro.svg +3 -0
- package/templates/assets/icons/expand.svg +3 -0
- package/templates/assets/icons/external-link.svg +3 -0
- package/templates/assets/icons/eye-closed.svg +3 -0
- package/templates/assets/icons/eye.svg +3 -0
- package/templates/assets/icons/file-alt.svg +3 -0
- package/templates/assets/icons/file-delete.svg +3 -0
- package/templates/assets/icons/file-flash.svg +3 -0
- package/templates/assets/icons/file-minus.svg +3 -0
- package/templates/assets/icons/file-multiple.svg +3 -0
- package/templates/assets/icons/file-off.svg +3 -0
- package/templates/assets/icons/file-plus.svg +3 -0
- package/templates/assets/icons/file.svg +3 -0
- package/templates/assets/icons/fill-half.svg +3 -0
- package/templates/assets/icons/fill.svg +3 -0
- package/templates/assets/icons/flag.svg +3 -0
- package/templates/assets/icons/flatten.svg +3 -0
- package/templates/assets/icons/flip-to-back.svg +3 -0
- package/templates/assets/icons/flip-to-front.svg +3 -0
- package/templates/assets/icons/float-center.svg +3 -0
- package/templates/assets/icons/float-left.svg +3 -0
- package/templates/assets/icons/float-right.svg +3 -0
- package/templates/assets/icons/folder-minus.svg +3 -0
- package/templates/assets/icons/folder-plus.svg +3 -0
- package/templates/assets/icons/folder-x.svg +3 -0
- package/templates/assets/icons/folder.svg +3 -0
- package/templates/assets/icons/forward.svg +3 -0
- package/templates/assets/icons/forwardburger.svg +3 -0
- package/templates/assets/icons/frame-add.svg +3 -0
- package/templates/assets/icons/frame-check.svg +3 -0
- package/templates/assets/icons/frame-delete.svg +3 -0
- package/templates/assets/icons/frame-minus.svg +3 -0
- package/templates/assets/icons/frame.svg +3 -0
- package/templates/assets/icons/gamepad.svg +3 -0
- package/templates/assets/icons/gif.svg +3 -0
- package/templates/assets/icons/gift.svg +3 -0
- package/templates/assets/icons/git-branch.svg +3 -0
- package/templates/assets/icons/git-commit.svg +3 -0
- package/templates/assets/icons/git-merge.svg +3 -0
- package/templates/assets/icons/git-pull-request.svg +3 -0
- package/templates/assets/icons/github-2.svg +4 -0
- package/templates/assets/icons/github.svg +3 -0
- package/templates/assets/icons/gps.svg +3 -0
- package/templates/assets/icons/grid.svg +3 -0
- package/templates/assets/icons/group.svg +3 -0
- package/templates/assets/icons/hd.svg +3 -0
- package/templates/assets/icons/headphone.svg +3 -0
- package/templates/assets/icons/headset.svg +3 -0
- package/templates/assets/icons/heart.svg +3 -0
- package/templates/assets/icons/hidden.svg +3 -0
- package/templates/assets/icons/home.svg +3 -0
- package/templates/assets/icons/hourglass.svg +3 -0
- package/templates/assets/icons/hq.svg +3 -0
- package/templates/assets/icons/human-handsdown.svg +3 -0
- package/templates/assets/icons/human-handsup.svg +3 -0
- package/templates/assets/icons/human-height-alt.svg +3 -0
- package/templates/assets/icons/human-height.svg +3 -0
- package/templates/assets/icons/human-run.svg +3 -0
- package/templates/assets/icons/human.svg +3 -0
- package/templates/assets/icons/image-arrow-right.svg +3 -0
- package/templates/assets/icons/image-broken.svg +3 -0
- package/templates/assets/icons/image-delete.svg +3 -0
- package/templates/assets/icons/image-flash.svg +3 -0
- package/templates/assets/icons/image-frame.svg +3 -0
- package/templates/assets/icons/image-gallery.svg +3 -0
- package/templates/assets/icons/image-multiple.svg +3 -0
- package/templates/assets/icons/image-new.svg +3 -0
- package/templates/assets/icons/image-plus.svg +3 -0
- package/templates/assets/icons/image.svg +3 -0
- package/templates/assets/icons/inbox-all.svg +3 -0
- package/templates/assets/icons/inbox-full.svg +3 -0
- package/templates/assets/icons/inbox.svg +3 -0
- package/templates/assets/icons/info-box.svg +3 -0
- package/templates/assets/icons/invert.svg +3 -0
- package/templates/assets/icons/iso.svg +3 -0
- package/templates/assets/icons/kanban.svg +3 -0
- package/templates/assets/icons/keyboard.svg +3 -0
- package/templates/assets/icons/label-alt-multiple.svg +3 -0
- package/templates/assets/icons/label-alt.svg +3 -0
- package/templates/assets/icons/label-sharp.svg +3 -0
- package/templates/assets/icons/label.svg +3 -0
- package/templates/assets/icons/layout-align-bottom.svg +3 -0
- package/templates/assets/icons/layout-align-left.svg +3 -0
- package/templates/assets/icons/layout-align-right.svg +3 -0
- package/templates/assets/icons/layout-align-top.svg +3 -0
- package/templates/assets/icons/layout-columns.svg +3 -0
- package/templates/assets/icons/layout-distribute-horizontal.svg +3 -0
- package/templates/assets/icons/layout-distribute-vertical.svg +3 -0
- package/templates/assets/icons/layout-footer.svg +3 -0
- package/templates/assets/icons/layout-header.svg +3 -0
- package/templates/assets/icons/layout-rows.svg +3 -0
- package/templates/assets/icons/layout-sidebar-left.svg +3 -0
- package/templates/assets/icons/layout-sidebar-right.svg +3 -0
- package/templates/assets/icons/layout.svg +3 -0
- package/templates/assets/icons/lightbulb-2.svg +3 -0
- package/templates/assets/icons/lightbulb-on.svg +3 -0
- package/templates/assets/icons/lightbulb.svg +3 -0
- package/templates/assets/icons/link.svg +3 -0
- package/templates/assets/icons/list-box.svg +3 -0
- package/templates/assets/icons/list.svg +3 -0
- package/templates/assets/icons/loader.svg +3 -0
- package/templates/assets/icons/lock-open.svg +3 -0
- package/templates/assets/icons/lock.svg +3 -0
- package/templates/assets/icons/login.svg +3 -0
- package/templates/assets/icons/logout.svg +3 -0
- package/templates/assets/icons/luggage.svg +3 -0
- package/templates/assets/icons/mail-arrow-right.svg +3 -0
- package/templates/assets/icons/mail-check.svg +3 -0
- package/templates/assets/icons/mail-delete.svg +3 -0
- package/templates/assets/icons/mail-flash.svg +3 -0
- package/templates/assets/icons/mail-multiple.svg +3 -0
- package/templates/assets/icons/mail-off.svg +3 -0
- package/templates/assets/icons/mail-unread.svg +3 -0
- package/templates/assets/icons/mail.svg +3 -0
- package/templates/assets/icons/map.svg +3 -0
- package/templates/assets/icons/mastodon.svg +3 -0
- package/templates/assets/icons/membercard.svg +3 -0
- package/templates/assets/icons/menu.svg +3 -0
- package/templates/assets/icons/message-arrow-left.svg +3 -0
- package/templates/assets/icons/message-arrow-right.svg +3 -0
- package/templates/assets/icons/message-bookmark.svg +3 -0
- package/templates/assets/icons/message-clock.svg +3 -0
- package/templates/assets/icons/message-delete.svg +3 -0
- package/templates/assets/icons/message-flash.svg +3 -0
- package/templates/assets/icons/message-image.svg +3 -0
- package/templates/assets/icons/message-minus.svg +3 -0
- package/templates/assets/icons/message-plus.svg +3 -0
- package/templates/assets/icons/message-processing.svg +3 -0
- package/templates/assets/icons/message-reply.svg +3 -0
- package/templates/assets/icons/message-text.svg +3 -0
- package/templates/assets/icons/message.svg +3 -0
- package/templates/assets/icons/minus.svg +3 -0
- package/templates/assets/icons/missed-call.svg +3 -0
- package/templates/assets/icons/modem.svg +3 -0
- package/templates/assets/icons/money.svg +3 -0
- package/templates/assets/icons/monitor.svg +3 -0
- package/templates/assets/icons/mood-happy.svg +3 -0
- package/templates/assets/icons/mood-neutral.svg +3 -0
- package/templates/assets/icons/mood-sad.svg +3 -0
- package/templates/assets/icons/moon-star.svg +3 -0
- package/templates/assets/icons/moon-stars.svg +3 -0
- package/templates/assets/icons/moon.svg +3 -0
- package/templates/assets/icons/more-horizontal.svg +3 -0
- package/templates/assets/icons/more-vertical.svg +3 -0
- package/templates/assets/icons/mouse.svg +3 -0
- package/templates/assets/icons/move.svg +3 -0
- package/templates/assets/icons/movie.svg +3 -0
- package/templates/assets/icons/music.svg +3 -0
- package/templates/assets/icons/next.svg +3 -0
- package/templates/assets/icons/note-delete.svg +3 -0
- package/templates/assets/icons/note-multiple.svg +3 -0
- package/templates/assets/icons/note-plus.svg +3 -0
- package/templates/assets/icons/note.svg +3 -0
- package/templates/assets/icons/notes-delete.svg +3 -0
- package/templates/assets/icons/notes-multiple.svg +3 -0
- package/templates/assets/icons/notes-plus.svg +3 -0
- package/templates/assets/icons/notes.svg +3 -0
- package/templates/assets/icons/notification-off.svg +3 -0
- package/templates/assets/icons/notification.svg +3 -0
- package/templates/assets/icons/open.svg +3 -0
- package/templates/assets/icons/paint-bucket.svg +3 -0
- package/templates/assets/icons/paperclip.svg +3 -0
- package/templates/assets/icons/pause.svg +3 -0
- package/templates/assets/icons/percent.svg +3 -0
- package/templates/assets/icons/picture-in-picture-alt.svg +3 -0
- package/templates/assets/icons/picture-in-picture.svg +3 -0
- package/templates/assets/icons/pin.svg +3 -0
- package/templates/assets/icons/pixelarticons.svg +3 -0
- package/templates/assets/icons/play.svg +3 -0
- package/templates/assets/icons/playlist.svg +3 -0
- package/templates/assets/icons/plus.svg +3 -0
- package/templates/assets/icons/power.svg +3 -0
- package/templates/assets/icons/prev.svg +3 -0
- package/templates/assets/icons/print.svg +3 -0
- package/templates/assets/icons/radio-handheld.svg +3 -0
- package/templates/assets/icons/radio-on.svg +3 -0
- package/templates/assets/icons/radio-signal.svg +3 -0
- package/templates/assets/icons/radio-tower.svg +3 -0
- package/templates/assets/icons/reciept-alt.svg +3 -0
- package/templates/assets/icons/reciept.svg +3 -0
- package/templates/assets/icons/redo.svg +3 -0
- package/templates/assets/icons/reload.svg +3 -0
- package/templates/assets/icons/remove-box-multiple.svg +3 -0
- package/templates/assets/icons/remove-box.svg +3 -0
- package/templates/assets/icons/repeat.svg +3 -0
- package/templates/assets/icons/reply-all.svg +3 -0
- package/templates/assets/icons/reply.svg +3 -0
- package/templates/assets/icons/rounded-corner.svg +3 -0
- package/templates/assets/icons/save.svg +3 -0
- package/templates/assets/icons/scale.svg +3 -0
- package/templates/assets/icons/script-text.svg +3 -0
- package/templates/assets/icons/script.svg +3 -0
- package/templates/assets/icons/scroll-horizontal.svg +3 -0
- package/templates/assets/icons/scroll-vertical.svg +3 -0
- package/templates/assets/icons/sd.svg +3 -0
- package/templates/assets/icons/search.svg +3 -0
- package/templates/assets/icons/section-copy.svg +3 -0
- package/templates/assets/icons/section-minus.svg +3 -0
- package/templates/assets/icons/section-plus.svg +3 -0
- package/templates/assets/icons/section-x.svg +3 -0
- package/templates/assets/icons/section.svg +3 -0
- package/templates/assets/icons/server.svg +3 -0
- package/templates/assets/icons/sharp-corner.svg +3 -0
- package/templates/assets/icons/shield-off.svg +3 -0
- package/templates/assets/icons/shield.svg +3 -0
- package/templates/assets/icons/ship.svg +3 -0
- package/templates/assets/icons/shopping-bag.svg +3 -0
- package/templates/assets/icons/shuffle.svg +3 -0
- package/templates/assets/icons/sliders-2.svg +3 -0
- package/templates/assets/icons/sliders.svg +3 -0
- package/templates/assets/icons/sort-alphabetic.svg +3 -0
- package/templates/assets/icons/sort-numeric.svg +3 -0
- package/templates/assets/icons/sort.svg +3 -0
- package/templates/assets/icons/speaker.svg +3 -0
- package/templates/assets/icons/speed-fast.svg +3 -0
- package/templates/assets/icons/speed-medium.svg +3 -0
- package/templates/assets/icons/speed-slow.svg +3 -0
- package/templates/assets/icons/spotlight.svg +3 -0
- package/templates/assets/icons/store.svg +3 -0
- package/templates/assets/icons/subscriptions.svg +3 -0
- package/templates/assets/icons/subtitles.svg +3 -0
- package/templates/assets/icons/suitcase.svg +3 -0
- package/templates/assets/icons/sun-alt.svg +3 -0
- package/templates/assets/icons/sun.svg +3 -0
- package/templates/assets/icons/switch.svg +3 -0
- package/templates/assets/icons/sync.svg +3 -0
- package/templates/assets/icons/tab.svg +3 -0
- package/templates/assets/icons/table.svg +3 -0
- package/templates/assets/icons/tea.svg +3 -0
- package/templates/assets/icons/teach.svg +3 -0
- package/templates/assets/icons/text-add.svg +3 -0
- package/templates/assets/icons/text-colums.svg +3 -0
- package/templates/assets/icons/text-search.svg +3 -0
- package/templates/assets/icons/text-wrap.svg +3 -0
- package/templates/assets/icons/timeline.svg +3 -0
- package/templates/assets/icons/toggle-left.svg +3 -0
- package/templates/assets/icons/toggle-right.svg +3 -0
- package/templates/assets/icons/tournament.svg +3 -0
- package/templates/assets/icons/track-changes.svg +3 -0
- package/templates/assets/icons/trash-alt.svg +3 -0
- package/templates/assets/icons/trash.svg +3 -0
- package/templates/assets/icons/trending-down.svg +3 -0
- package/templates/assets/icons/trending-up.svg +3 -0
- package/templates/assets/icons/trending.svg +3 -0
- package/templates/assets/icons/trophy.svg +3 -0
- package/templates/assets/icons/truck.svg +3 -0
- package/templates/assets/icons/undo.svg +3 -0
- package/templates/assets/icons/ungroup.svg +3 -0
- package/templates/assets/icons/unlink.svg +3 -0
- package/templates/assets/icons/upload.svg +3 -0
- package/templates/assets/icons/user-minus.svg +3 -0
- package/templates/assets/icons/user-plus.svg +3 -0
- package/templates/assets/icons/user-x.svg +3 -0
- package/templates/assets/icons/user.svg +3 -0
- package/templates/assets/icons/users.svg +3 -0
- package/templates/assets/icons/video-off.svg +3 -0
- package/templates/assets/icons/video.svg +3 -0
- package/templates/assets/icons/view-col.svg +3 -0
- package/templates/assets/icons/view-list.svg +3 -0
- package/templates/assets/icons/viewport-narrow.svg +3 -0
- package/templates/assets/icons/viewport-wide.svg +3 -0
- package/templates/assets/icons/visible.svg +3 -0
- package/templates/assets/icons/volume-1.svg +3 -0
- package/templates/assets/icons/volume-2.svg +3 -0
- package/templates/assets/icons/volume-3.svg +3 -0
- package/templates/assets/icons/volume-minus.svg +3 -0
- package/templates/assets/icons/volume-plus.svg +3 -0
- package/templates/assets/icons/volume-vibrate.svg +3 -0
- package/templates/assets/icons/volume-x.svg +3 -0
- package/templates/assets/icons/volume.svg +3 -0
- package/templates/assets/icons/wallet.svg +3 -0
- package/templates/assets/icons/warning-box.svg +3 -0
- package/templates/assets/icons/wind.svg +3 -0
- package/templates/assets/icons/zap.svg +3 -0
- package/templates/assets/icons/zoom-in.svg +3 -0
- package/templates/assets/icons/zoom-out.svg +3 -0
- package/templates/components/Accordion/Accordion.component.vue +36 -0
- package/templates/components/Accordion/Accordion.types.ts +8 -0
- package/templates/components/Accordion/AccordionItem.component.vue +90 -0
- package/templates/components/Accordion/index.ts +13 -0
- package/templates/components/Alert/Alert.component.vue +82 -0
- package/templates/components/Alert/Alert.styles.ts +0 -0
- package/templates/components/Alert/Alert.types.ts +14 -0
- package/templates/components/Alert/AlertItem.component.vue +55 -0
- package/templates/components/Alert/composables/index.ts +1 -0
- package/templates/components/Alert/composables/useAlert.composable.ts +17 -0
- package/templates/components/Alert/index.ts +11 -0
- package/templates/components/Avatar/Avatar.component.vue +53 -0
- package/templates/components/Avatar/Avatar.styles.ts +27 -0
- package/templates/components/Avatar/Avatar.types.ts +6 -0
- package/templates/components/Avatar/index.ts +4 -0
- package/templates/components/Badge/Badge.component.vue +91 -0
- package/templates/components/Badge/Badge.styles.ts +53 -0
- package/templates/components/Badge/Badge.types.ts +12 -0
- package/templates/components/Badge/index.ts +4 -0
- package/templates/components/Button/Button.component.vue +103 -0
- package/templates/components/Button/Button.styles.ts +40 -0
- package/templates/components/Button/Button.types.ts +14 -0
- package/templates/components/Button/index.ts +4 -0
- package/templates/components/Calendar/Calendar.component.vue +197 -0
- package/templates/components/Calendar/Calendar.styles.ts +23 -0
- package/templates/components/Calendar/Calendar.types.ts +6 -0
- package/templates/components/Calendar/index.ts +4 -0
- package/templates/components/Card/Card.component.vue +34 -0
- package/templates/components/Card/Card.styles.ts +7 -0
- package/templates/components/Card/Card.types.ts +5 -0
- package/templates/components/Card/index.ts +4 -0
- package/templates/components/Checkbox/Checkbox.component.vue +49 -0
- package/templates/components/Checkbox/Checkbox.styles.ts +21 -0
- package/templates/components/Checkbox/Checkbox.types.ts +3 -0
- package/templates/components/Checkbox/index.ts +4 -0
- package/templates/components/Command/Command.component.vue +100 -0
- package/templates/components/Command/Command.styles.ts +3 -0
- package/templates/components/Command/Command.types.ts +19 -0
- package/templates/components/Command/index.ts +4 -0
- package/templates/components/Icon/Icon.component.vue +20 -0
- package/templates/components/Icon/Icon.types.ts +5 -0
- package/templates/components/Icon/index.ts +4 -0
- package/templates/components/IconButton/IconButton.component.vue +95 -0
- package/templates/components/IconButton/IconButton.styles.ts +29 -0
- package/templates/components/IconButton/IconButton.types.ts +12 -0
- package/templates/components/IconButton/index.ts +4 -0
- package/templates/components/Input/Input.component.vue +98 -0
- package/templates/components/Input/Input.styles.ts +69 -0
- package/templates/components/Input/Input.types.ts +19 -0
- package/templates/components/Input/index.ts +4 -0
- package/templates/components/InputOTP/InputOTP.component.vue +158 -0
- package/templates/components/InputOTP/InputOTP.styles.ts +19 -0
- package/templates/components/InputOTP/InputOTP.types.ts +4 -0
- package/templates/components/InputOTP/index.ts +4 -0
- package/templates/components/Link/Link.component.vue +23 -0
- package/templates/components/Link/Link.types.ts +3 -0
- package/templates/components/Link/index.ts +4 -0
- package/templates/components/Loader/Loader.component.vue +12 -0
- package/templates/components/Loader/Loader.styles.ts +12 -0
- package/templates/components/Loader/Loader.types.ts +3 -0
- package/templates/components/Loader/index.ts +4 -0
- package/templates/components/Modal/Modal.component.vue +68 -0
- package/templates/components/Modal/Modal.styles.ts +7 -0
- package/templates/components/Modal/Modal.types.ts +1 -0
- package/templates/components/Modal/index.ts +4 -0
- package/templates/components/Popover/Popover.component.vue +66 -0
- package/templates/components/Popover/Popover.types.ts +4 -0
- package/templates/components/Popover/index.ts +4 -0
- package/templates/components/Radio/Radio.component.vue +40 -0
- package/templates/components/Radio/Radio.styles.ts +3 -0
- package/templates/components/Radio/Radio.types.ts +6 -0
- package/templates/components/Radio/index.ts +4 -0
- package/templates/components/Scale/Scale.component.vue +27 -0
- package/templates/components/Scale/Scale.types.ts +0 -0
- package/templates/components/Scale/composables/index.ts +1 -0
- package/templates/components/Scale/composables/useScale.composable.ts +13 -0
- package/templates/components/Scale/index.ts +4 -0
- package/templates/components/Select/Select.component.vue +201 -0
- package/templates/components/Select/Select.styles.ts +74 -0
- package/templates/components/Select/Select.types.ts +31 -0
- package/templates/components/Select/composables/index.ts +1 -0
- package/templates/components/Select/composables/useSelect.composable.ts +118 -0
- package/templates/components/Select/index.ts +15 -0
- package/templates/components/Separator/Separator.component.vue +22 -0
- package/templates/components/Separator/Separator.styles.ts +11 -0
- package/templates/components/Separator/Separator.types.ts +3 -0
- package/templates/components/Separator/index.ts +4 -0
- package/templates/components/Sheet/Sheet.component.vue +80 -0
- package/templates/components/Sheet/Sheet.styles.ts +11 -0
- package/templates/components/Sheet/Sheet.types.ts +3 -0
- package/templates/components/Sheet/index.ts +4 -0
- package/templates/components/Skeleton/Skeleton.component.vue +21 -0
- package/templates/components/Skeleton/Skeleton.styles.ts +5 -0
- package/templates/components/Skeleton/Skeleton.types.ts +1 -0
- package/templates/components/Skeleton/index.ts +4 -0
- package/templates/components/Slider/Slider.component.vue +51 -0
- package/templates/components/Slider/Slider.styles.ts +13 -0
- package/templates/components/Slider/Slider.types.ts +6 -0
- package/templates/components/Slider/index.ts +4 -0
- package/templates/components/Switch/Switch.component.vue +44 -0
- package/templates/components/Switch/Switch.styles.ts +22 -0
- package/templates/components/Switch/Switch.types.ts +3 -0
- package/templates/components/Switch/index.ts +4 -0
- package/templates/components/TableOfContents/TableOfContents.component.vue +118 -0
- package/templates/components/TableOfContents/TableOfContents.styles.ts +23 -0
- package/templates/components/TableOfContents/TableOfContents.types.ts +4 -0
- package/templates/components/TableOfContents/index.ts +4 -0
- package/templates/components/Tabs/Tabs.component.vue +60 -0
- package/templates/components/Tabs/Tabs.styles.ts +17 -0
- package/templates/components/Tabs/Tabs.types.ts +7 -0
- package/templates/components/Tabs/index.ts +4 -0
- package/templates/components/Textarea/Textarea.component.vue +83 -0
- package/templates/components/Textarea/Textarea.styles.ts +50 -0
- package/templates/components/Textarea/Textarea.types.ts +14 -0
- package/templates/components/Textarea/index.ts +4 -0
- package/templates/components/Theme/Theme.component.vue +82 -0
- package/templates/components/Theme/Theme.types.ts +1 -0
- package/templates/components/Theme/composables/index.ts +1 -0
- package/templates/components/Theme/composables/useTheme.composable.ts +15 -0
- package/templates/components/Theme/index.ts +5 -0
- package/templates/components/TimePicker/TimePicker.component.vue +115 -0
- package/templates/components/TimePicker/TimePicker.styles.ts +5 -0
- package/templates/components/TimePicker/TimePicker.types.ts +3 -0
- package/templates/components/TimePicker/index.ts +4 -0
- package/templates/components/Toast/Toast.component.vue +78 -0
- package/templates/components/Toast/Toast.styles.ts +0 -0
- package/templates/components/Toast/Toast.types.ts +6 -0
- package/templates/components/Toast/ToastItem.component.vue +20 -0
- package/templates/components/Toast/composables/index.ts +1 -0
- package/templates/components/Toast/composables/useToast.composable.ts +17 -0
- package/templates/components/Toast/index.ts +11 -0
- package/templates/components/Toggle/Toggle.component.vue +53 -0
- package/templates/components/Toggle/Toggle.styles.ts +20 -0
- package/templates/components/Toggle/Toggle.types.ts +8 -0
- package/templates/components/Toggle/index.ts +4 -0
- package/templates/components/Tooltip/Tooltip.component.vue +57 -0
- package/templates/components/Tooltip/Tooltip.types.ts +4 -0
- package/templates/components/Tooltip/index.ts +4 -0
- package/templates/components.json +202 -0
- package/templates/composables/usePosition.ts +106 -0
- package/templates/nuxt.config.ts +13 -0
- package/templates/scripts/generateIconTypes.script.js +48 -0
- package/templates/tailwind.config.ts +12 -0
- package/templates/tsconfig.json +11 -0
- package/templates/types/icons.ts +492 -0
- package/templates/types/styles.d.ts +4 -0
- package/templates/utils/styles.ts +109 -0
- package/templates/utils/twMerge.ts +41 -0
package/README.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# v-uixy [](https://www.npmjs.com/package/v-uixy)
|
|
2
|
+
|
|
3
|
+
Crafted with TypeScript, Tailwind CSS, and v-motion, this library offers a comprehensive suite of reusable components and animations. Streamline development, enhance user experiences, and unleash creativity with the flexible and responsive toolkit.
|
|
4
|
+
|
|
5
|
+
[](#)
|
|
6
|
+
[](#)
|
|
7
|
+
[](#)
|
|
8
|
+
[](#)
|
|
9
|
+
|
|
10
|
+
## Quick setup
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
npx v-uixy
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
That is all. Have fun using it!
|
|
17
|
+
|
|
18
|
+
## Demo
|
|
19
|
+
|
|
20
|
+
You can try the components yourself [here](https://v-uixy.alanhaber.me).
|
package/bin/v-uixy.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Command } from "commander";
|
|
4
|
+
import add from "../commands/add.js";
|
|
5
|
+
import remove from "../commands/remove.js";
|
|
6
|
+
import list from "../commands/list.js";
|
|
7
|
+
import init from "../commands/init.js";
|
|
8
|
+
|
|
9
|
+
const program = new Command();
|
|
10
|
+
|
|
11
|
+
program
|
|
12
|
+
.name("v-uixy")
|
|
13
|
+
.description("A UI components CLI for Nuxt + Tailwind")
|
|
14
|
+
.version("0.1.0");
|
|
15
|
+
|
|
16
|
+
program.command("add <component>").description("Add a component").action(add);
|
|
17
|
+
|
|
18
|
+
program
|
|
19
|
+
.command("remove <component>")
|
|
20
|
+
.description("Remove a component")
|
|
21
|
+
.action(remove);
|
|
22
|
+
|
|
23
|
+
program.command("list").description("List available components").action(list);
|
|
24
|
+
|
|
25
|
+
program
|
|
26
|
+
.command("init")
|
|
27
|
+
.description("Initialize v-uixy in your project")
|
|
28
|
+
.action(init);
|
|
29
|
+
|
|
30
|
+
program.parse(process.argv);
|
package/commands/add.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { execa } from "execa";
|
|
5
|
+
|
|
6
|
+
const projectRoot = process.cwd();
|
|
7
|
+
const templatesRoot = path.resolve(
|
|
8
|
+
path.dirname(new URL(import.meta.url).pathname),
|
|
9
|
+
"../templates"
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
const componentsDir = path.join(projectRoot, "components/ui");
|
|
13
|
+
const composablesDir = path.join(projectRoot, "composables");
|
|
14
|
+
const componentIndexPath = path.join(componentsDir, "index.ts");
|
|
15
|
+
const composablesIndexPath = path.join(composablesDir, "index.ts");
|
|
16
|
+
const registryPath = path.join(templatesRoot, "components.json");
|
|
17
|
+
|
|
18
|
+
async function loadRegistry() {
|
|
19
|
+
const exists = await fs.pathExists(registryPath);
|
|
20
|
+
if (!exists) {
|
|
21
|
+
console.error(chalk.red("❌ Missing components.json"));
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const data = await fs.readJson(registryPath);
|
|
26
|
+
return data.components || [];
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function parseRelated(raw) {
|
|
30
|
+
if (Array.isArray(raw))
|
|
31
|
+
return raw.flatMap((r) => r.split(",").map((s) => s.trim()));
|
|
32
|
+
if (typeof raw === "string") return raw.split(",").map((s) => s.trim());
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
async function resolveDeps(name, registry, resolved = new Set()) {
|
|
37
|
+
if (resolved.has(name)) return;
|
|
38
|
+
|
|
39
|
+
const def = registry.find((c) => c.name === name);
|
|
40
|
+
if (!def) {
|
|
41
|
+
console.error(chalk.red(`❌ Component "${name}" not found in registry.`));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
resolved.add(name);
|
|
46
|
+
|
|
47
|
+
for (const related of parseRelated(def["related-components"])) {
|
|
48
|
+
await resolveDeps(related, registry, resolved);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function copyComponent(name) {
|
|
53
|
+
const src = path.join(templatesRoot, `components/${name}`);
|
|
54
|
+
const dest = path.join(componentsDir, name);
|
|
55
|
+
|
|
56
|
+
if (!(await fs.pathExists(src))) {
|
|
57
|
+
console.log(chalk.yellow(`⚠️ No template found for component "${name}"`));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
await fs.copy(src, dest, { overwrite: true });
|
|
62
|
+
console.log(chalk.green(`✔ Copied ${name} to components/ui/${name}`));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async function copyComposable(name) {
|
|
66
|
+
const src = path.join(templatesRoot, `composables/${name}.ts`);
|
|
67
|
+
const dest = path.join(composablesDir, `${name}.ts`);
|
|
68
|
+
|
|
69
|
+
if (!(await fs.pathExists(src))) {
|
|
70
|
+
console.log(chalk.yellow(`⚠️ No template found for composable "${name}"`));
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
await fs.ensureDir(composablesDir);
|
|
75
|
+
await fs.copy(src, dest, { overwrite: true });
|
|
76
|
+
console.log(chalk.green(`✔ Copied composable: ${name}.ts`));
|
|
77
|
+
|
|
78
|
+
await updateComposablesIndex(name);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async function getExistingIndexComponents() {
|
|
82
|
+
if (!(await fs.pathExists(componentIndexPath))) return [];
|
|
83
|
+
|
|
84
|
+
const content = await fs.readFile(componentIndexPath, "utf8");
|
|
85
|
+
const names = [];
|
|
86
|
+
for (const line of content.split("\n")) {
|
|
87
|
+
const m = line.match(/^\s*export \* from \"\.\/([^\"]+)\";\s*$/);
|
|
88
|
+
if (m && m[1]) names.push(m[1].trim());
|
|
89
|
+
}
|
|
90
|
+
return names;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async function updateIndex(newComponents) {
|
|
94
|
+
await fs.ensureFile(componentIndexPath);
|
|
95
|
+
|
|
96
|
+
const existing = await getExistingIndexComponents();
|
|
97
|
+
const existingSet = new Set(existing);
|
|
98
|
+
|
|
99
|
+
// Preserve existing order; append new components in the order provided
|
|
100
|
+
const merged = [...existing];
|
|
101
|
+
for (const name of newComponents) {
|
|
102
|
+
if (!existingSet.has(name)) {
|
|
103
|
+
merged.push(name);
|
|
104
|
+
existingSet.add(name);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const lines = merged.map((name) => `export * from "./${name}";`);
|
|
109
|
+
await fs.writeFile(componentIndexPath, lines.join("\n") + "\n");
|
|
110
|
+
console.log(chalk.green(`🔗 Updated components/ui/index.ts`));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
async function updateComposablesIndex(name) {
|
|
114
|
+
const line = `export * from "./${name}";`;
|
|
115
|
+
await fs.ensureFile(composablesIndexPath);
|
|
116
|
+
const content = await fs.readFile(composablesIndexPath, "utf8");
|
|
117
|
+
const lines = content.split("\n").map((line) => line.trim());
|
|
118
|
+
|
|
119
|
+
if (!lines.includes(line)) {
|
|
120
|
+
await fs.appendFile(composablesIndexPath, line + "\n");
|
|
121
|
+
console.log(`🔗 Linked composable "${name}" in composables/index.ts`);
|
|
122
|
+
} else {
|
|
123
|
+
console.log(`ℹ️ Composable "${name}" already linked`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
async function installPackages(componentNames, registry) {
|
|
128
|
+
const packages = new Set();
|
|
129
|
+
|
|
130
|
+
for (const name of componentNames) {
|
|
131
|
+
const def = registry.find((c) => c.name === name);
|
|
132
|
+
if (def?.packages?.length) {
|
|
133
|
+
def.packages.forEach((pkg) => packages.add(pkg));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (packages.size === 0) return;
|
|
138
|
+
|
|
139
|
+
const packageJsonPath = path.join(projectRoot, "package.json");
|
|
140
|
+
const packageJson = await fs.readJson(packageJsonPath);
|
|
141
|
+
const existingDeps = {
|
|
142
|
+
...packageJson.dependencies,
|
|
143
|
+
...packageJson.devDependencies,
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const toInstall = [...packages].filter((pkg) => !existingDeps[pkg]);
|
|
147
|
+
|
|
148
|
+
if (toInstall.length === 0) {
|
|
149
|
+
console.log(chalk.gray("✅ All required packages are already installed."));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
console.log(
|
|
154
|
+
chalk.blue(`📦 Installing new packages: ${toInstall.join(", ")}`)
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
try {
|
|
158
|
+
await execa("npm", ["install", ...toInstall], { stdio: "inherit" });
|
|
159
|
+
console.log(chalk.green("✔ Packages installed"));
|
|
160
|
+
} catch (err) {
|
|
161
|
+
console.error(chalk.red("✖ Failed to install packages"));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export default async function add(componentName) {
|
|
166
|
+
const registry = await loadRegistry();
|
|
167
|
+
let componentsToAdd = new Set();
|
|
168
|
+
|
|
169
|
+
if (componentName.toLowerCase() === "all") {
|
|
170
|
+
componentsToAdd = new Set(registry.map((c) => c.name));
|
|
171
|
+
} else {
|
|
172
|
+
await resolveDeps(componentName, registry, componentsToAdd);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const copied = [];
|
|
176
|
+
|
|
177
|
+
for (const name of componentsToAdd) {
|
|
178
|
+
await copyComponent(name);
|
|
179
|
+
copied.push(name);
|
|
180
|
+
|
|
181
|
+
const def = registry.find((c) => c.name === name);
|
|
182
|
+
for (const composable of def?.composables || []) {
|
|
183
|
+
await copyComposable(composable);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
await updateIndex(copied);
|
|
188
|
+
await installPackages(componentsToAdd, registry);
|
|
189
|
+
}
|
package/commands/init.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import inquirer from "inquirer";
|
|
4
|
+
import chalk from "chalk";
|
|
5
|
+
import { fileURLToPath } from "url";
|
|
6
|
+
import { dirname } from "path";
|
|
7
|
+
import { execa } from "execa";
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
const root = process.cwd();
|
|
12
|
+
|
|
13
|
+
const templateRoot = path.resolve(__dirname, "../templates");
|
|
14
|
+
|
|
15
|
+
const filesToCopy = [
|
|
16
|
+
"components.json",
|
|
17
|
+
"scripts/generateIconTypes.script.js",
|
|
18
|
+
"assets/css/main.css",
|
|
19
|
+
"tailwind.config.ts",
|
|
20
|
+
"nuxt.config.ts",
|
|
21
|
+
"tsconfig.json",
|
|
22
|
+
"types/styles.d.ts",
|
|
23
|
+
"types/icons.ts",
|
|
24
|
+
"utils/styles.ts",
|
|
25
|
+
"utils/twMerge.ts",
|
|
26
|
+
];
|
|
27
|
+
|
|
28
|
+
const dirsToCopy = ["assets/icons"];
|
|
29
|
+
|
|
30
|
+
async function installPackages() {
|
|
31
|
+
const packages = [
|
|
32
|
+
"tailwindcss",
|
|
33
|
+
"postcss",
|
|
34
|
+
"autoprefixer",
|
|
35
|
+
"vite-svg-loader",
|
|
36
|
+
"tailwind-merge",
|
|
37
|
+
"@tailwindcss/vite",
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
console.log(chalk.blue("\n📦 Installing dependencies..."));
|
|
41
|
+
try {
|
|
42
|
+
await execa("npm", ["install", "-D", ...packages], { stdio: "inherit" });
|
|
43
|
+
console.log(chalk.green("✔ Dependencies installed successfully!"));
|
|
44
|
+
} catch (err) {
|
|
45
|
+
console.log(chalk.red("✖ Failed to install packages"));
|
|
46
|
+
console.error(err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export default async function init(options = {}) {
|
|
51
|
+
console.log(chalk.cyan("🧩 Initializing v-uixy..."));
|
|
52
|
+
|
|
53
|
+
for (const relPath of filesToCopy) {
|
|
54
|
+
const src = path.join(templateRoot, relPath);
|
|
55
|
+
const dest = path.join(root, relPath);
|
|
56
|
+
|
|
57
|
+
const exists = await fs.pathExists(dest);
|
|
58
|
+
if (exists) {
|
|
59
|
+
const { overwrite } = await inquirer.prompt([
|
|
60
|
+
{
|
|
61
|
+
type: "confirm",
|
|
62
|
+
name: "overwrite",
|
|
63
|
+
message: `${chalk.yellow(relPath)} already exists. Overwrite?`,
|
|
64
|
+
default: false,
|
|
65
|
+
},
|
|
66
|
+
]);
|
|
67
|
+
|
|
68
|
+
if (!overwrite) {
|
|
69
|
+
console.log(chalk.gray(`→ Skipped ${relPath}`));
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
await fs.ensureDir(path.dirname(dest));
|
|
75
|
+
await fs.copy(src, dest);
|
|
76
|
+
console.log(chalk.green(`✔ Created ${relPath}`));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
for (const relPath of dirsToCopy) {
|
|
80
|
+
const src = path.join(templateRoot, relPath);
|
|
81
|
+
const dest = path.join(root, relPath);
|
|
82
|
+
|
|
83
|
+
const exists = await fs.pathExists(dest);
|
|
84
|
+
if (exists) {
|
|
85
|
+
const { overwrite } = await inquirer.prompt([
|
|
86
|
+
{
|
|
87
|
+
type: "confirm",
|
|
88
|
+
name: "overwrite",
|
|
89
|
+
message: `${chalk.yellow(
|
|
90
|
+
relPath
|
|
91
|
+
)} already exists. Overwrite entire directory?`,
|
|
92
|
+
default: false,
|
|
93
|
+
},
|
|
94
|
+
]);
|
|
95
|
+
|
|
96
|
+
if (!overwrite) {
|
|
97
|
+
console.log(chalk.gray(`→ Skipped ${relPath}`));
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
await fs.remove(dest);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
await fs.copy(src, dest);
|
|
105
|
+
console.log(chalk.green(`✔ Copied directory ${relPath}`));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (!options.withoutPackages) {
|
|
109
|
+
await installPackages();
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
console.log(chalk.green("\n🎉 v-uixy initialized successfully!\n"));
|
|
113
|
+
}
|
package/commands/list.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
|
|
5
|
+
const projectRoot = process.cwd();
|
|
6
|
+
const componentsDir = path.join(projectRoot, "components/ui");
|
|
7
|
+
const templatesRoot = path.resolve(
|
|
8
|
+
path.dirname(new URL(import.meta.url).pathname),
|
|
9
|
+
"../templates"
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
async function loadRegistry() {
|
|
13
|
+
const registryPath = path.join(templatesRoot, "components.json");
|
|
14
|
+
|
|
15
|
+
const exists = await fs.pathExists(registryPath);
|
|
16
|
+
if (!exists) {
|
|
17
|
+
console.error(chalk.red("❌ Missing components.json inside templates."));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const data = await fs.readJson(registryPath);
|
|
22
|
+
return data.components || [];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
async function listComponents() {
|
|
26
|
+
const registry = await loadRegistry();
|
|
27
|
+
const results = [];
|
|
28
|
+
|
|
29
|
+
for (const { name } of registry) {
|
|
30
|
+
const componentPath = path.join(componentsDir, name);
|
|
31
|
+
const isInstalled = await fs.pathExists(componentPath);
|
|
32
|
+
|
|
33
|
+
results.push({
|
|
34
|
+
name,
|
|
35
|
+
status: isInstalled
|
|
36
|
+
? chalk.green("✔ installed")
|
|
37
|
+
: chalk.gray("✖ not installed"),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
console.log(chalk.cyan("\n📦 Available Components:\n"));
|
|
42
|
+
for (const c of results) {
|
|
43
|
+
console.log(`${chalk.bold(c.name.padEnd(15))} ${c.status}`);
|
|
44
|
+
}
|
|
45
|
+
console.log();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export default listComponents;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import inquirer from "inquirer";
|
|
5
|
+
|
|
6
|
+
const projectRoot = process.cwd();
|
|
7
|
+
const templatesRoot = path.resolve(
|
|
8
|
+
path.dirname(new URL(import.meta.url).pathname),
|
|
9
|
+
"../templates"
|
|
10
|
+
);
|
|
11
|
+
const componentsDir = path.join(projectRoot, "components/ui");
|
|
12
|
+
const componentIndexPath = path.join(componentsDir, "index.ts");
|
|
13
|
+
|
|
14
|
+
async function loadRegistry() {
|
|
15
|
+
const registryPath = path.join(templatesRoot, "components.json");
|
|
16
|
+
const exists = await fs.pathExists(registryPath);
|
|
17
|
+
if (!exists) {
|
|
18
|
+
console.error(chalk.red("❌ Missing components.json inside templates."));
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const data = await fs.readJson(registryPath);
|
|
23
|
+
return data.components || [];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
async function removeIndexExport(name) {
|
|
27
|
+
const line = `export * from "./${name}";`;
|
|
28
|
+
if (!(await fs.pathExists(componentIndexPath))) return;
|
|
29
|
+
|
|
30
|
+
const content = await fs.readFile(componentIndexPath, "utf8");
|
|
31
|
+
const newContent = content
|
|
32
|
+
.split("\n")
|
|
33
|
+
.filter((l) => l.trim() !== line)
|
|
34
|
+
.join("\n");
|
|
35
|
+
|
|
36
|
+
await fs.writeFile(componentIndexPath, newContent);
|
|
37
|
+
console.log(`🧹 Removed export from index.ts for "${name}"`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function removeComponent(name) {
|
|
41
|
+
const pathToRemove = path.join(componentsDir, name);
|
|
42
|
+
const exists = await fs.pathExists(pathToRemove);
|
|
43
|
+
|
|
44
|
+
if (!exists) {
|
|
45
|
+
console.log(chalk.yellow(`⚠️ Component "${name}" does not exist.`));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const { confirm } = await inquirer.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: "confirm",
|
|
52
|
+
name: "confirm",
|
|
53
|
+
message: `Remove component "${name}"?`,
|
|
54
|
+
default: false,
|
|
55
|
+
},
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
if (!confirm) return;
|
|
59
|
+
|
|
60
|
+
await fs.remove(pathToRemove);
|
|
61
|
+
await removeIndexExport(name);
|
|
62
|
+
console.log(chalk.green(`🗑️ Removed component "${name}"`));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export default async function remove(componentName) {
|
|
66
|
+
const registry = await loadRegistry();
|
|
67
|
+
|
|
68
|
+
await removeComponent(componentName);
|
|
69
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "v-uixy",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": false,
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Alan Haber",
|
|
7
|
+
"email": "contact@alanhaber.me"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"description": "Add UI components to your project.",
|
|
11
|
+
"bin": {
|
|
12
|
+
"v-uixy": "bin/v-uixy.js"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"cli",
|
|
16
|
+
"ui",
|
|
17
|
+
"components",
|
|
18
|
+
"scaffold",
|
|
19
|
+
"generator",
|
|
20
|
+
"nuxt",
|
|
21
|
+
"vue",
|
|
22
|
+
"typescript",
|
|
23
|
+
"v-motion",
|
|
24
|
+
"tailwindcss"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=20"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"bin/",
|
|
31
|
+
"commands/**/*.js",
|
|
32
|
+
"configs/**/*.json",
|
|
33
|
+
"templates/**",
|
|
34
|
+
"README.md"
|
|
35
|
+
],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/haberalan/v-uixy.git"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"chalk": "^5.4.1",
|
|
43
|
+
"commander": "^14.0.0",
|
|
44
|
+
"execa": "^9.5.3",
|
|
45
|
+
"fs-extra": "^11.3.0",
|
|
46
|
+
"inquirer": "^12.6.3"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
@import url("https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;1,100;1,200;1,300;1,400;1,500;1,600;1,700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
|
|
2
|
+
@import "tailwindcss";
|
|
3
|
+
|
|
4
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
5
|
+
|
|
6
|
+
@theme {
|
|
7
|
+
--font-sans: "Inter", sans-serif;
|
|
8
|
+
--font-mono: "IBM Plex Mono", monospace;
|
|
9
|
+
|
|
10
|
+
--font-weight-200: 200;
|
|
11
|
+
--font-weight-300: 300;
|
|
12
|
+
--font-weight-400: 400;
|
|
13
|
+
--font-weight-500: 500;
|
|
14
|
+
--font-weight-600: 600;
|
|
15
|
+
--font-weight-700: 700;
|
|
16
|
+
--font-weight-800: 800;
|
|
17
|
+
|
|
18
|
+
--text-display-2xl: 56px;
|
|
19
|
+
--text-display-2xl-line-height: 60px;
|
|
20
|
+
--text-display-xl: 48px;
|
|
21
|
+
--text-display-xl-line-height: 56px;
|
|
22
|
+
--text-display-lg: 42px;
|
|
23
|
+
--text-display-lg-line-height: 52px;
|
|
24
|
+
--text-display-md: 36px;
|
|
25
|
+
--text-display-md-line-height: 44px;
|
|
26
|
+
--text-display-sm: 32px;
|
|
27
|
+
--text-display-sm-line-height: 40px;
|
|
28
|
+
--text-3xl: 28px;
|
|
29
|
+
--text-3xl-line-height: 42px;
|
|
30
|
+
--text-2xl: 24px;
|
|
31
|
+
--text-2xl-line-height: 32px;
|
|
32
|
+
--text-xl: 21px;
|
|
33
|
+
--text-xl-line-height: 32px;
|
|
34
|
+
--text-lg: 18px;
|
|
35
|
+
--text-lg-line-height: 24px;
|
|
36
|
+
--text-md: 16px;
|
|
37
|
+
--text-md-line-height: 24px;
|
|
38
|
+
--text-sm: 14px;
|
|
39
|
+
--text-sm-line-height: 18px;
|
|
40
|
+
--text-xs: 12px;
|
|
41
|
+
--text-xs-line-height: 16px;
|
|
42
|
+
--text-button-lg: 16px;
|
|
43
|
+
--text-button-lg-line-height: 24px;
|
|
44
|
+
--text-button-md: 14px;
|
|
45
|
+
--text-button-md-line-height: 24px;
|
|
46
|
+
--text-button-sm: 12px;
|
|
47
|
+
--text-button-sm-line-height: 24px;
|
|
48
|
+
|
|
49
|
+
--spacing-0: 0px;
|
|
50
|
+
--spacing-1: 4px;
|
|
51
|
+
--spacing-2: 8px;
|
|
52
|
+
--spacing-3: 12px;
|
|
53
|
+
--spacing-4: 16px;
|
|
54
|
+
--spacing-5: 20px;
|
|
55
|
+
--spacing-6: 24px;
|
|
56
|
+
--spacing-7: 28px;
|
|
57
|
+
--spacing-8: 32px;
|
|
58
|
+
--spacing-9: 36px;
|
|
59
|
+
--spacing-10: 40px;
|
|
60
|
+
--spacing-11: 44px;
|
|
61
|
+
--spacing-12: 48px;
|
|
62
|
+
--spacing-13: 52px;
|
|
63
|
+
--spacing-14: 56px;
|
|
64
|
+
--spacing-15: 60px;
|
|
65
|
+
--spacing-16: 64px;
|
|
66
|
+
--spacing-auto: auto;
|
|
67
|
+
|
|
68
|
+
--radius-none: 0px;
|
|
69
|
+
--radius-0: 0px;
|
|
70
|
+
--radius-1: 4px;
|
|
71
|
+
--radius-2: 8px;
|
|
72
|
+
--radius-3: 12px;
|
|
73
|
+
--radius-4: 16px;
|
|
74
|
+
--radius-5: 20px;
|
|
75
|
+
--radius-6: 24px;
|
|
76
|
+
--radius-7: 28px;
|
|
77
|
+
--radius-8: 32px;
|
|
78
|
+
--radius-9: 36px;
|
|
79
|
+
--radius-10: 40px;
|
|
80
|
+
--radius-11: 44px;
|
|
81
|
+
--radius-12: 48px;
|
|
82
|
+
--radius-13: 52px;
|
|
83
|
+
--radius-14: 56px;
|
|
84
|
+
--radius-15: 60px;
|
|
85
|
+
--radius-16: 64px;
|
|
86
|
+
--radius-full: 9999px;
|
|
87
|
+
|
|
88
|
+
--color-transparent: transparent;
|
|
89
|
+
--color-current: currentColor;
|
|
90
|
+
--color-white: #ffffff;
|
|
91
|
+
--color-black: #0a0908;
|
|
92
|
+
|
|
93
|
+
--color-gray-100: #fafafa;
|
|
94
|
+
--color-gray-200: #f5f5f5;
|
|
95
|
+
--color-gray-300: #e5e5e5;
|
|
96
|
+
--color-gray-400: #d6d6d6;
|
|
97
|
+
--color-gray-500: #a3a3a3;
|
|
98
|
+
--color-gray-600: #737373;
|
|
99
|
+
--color-gray-700: #434343;
|
|
100
|
+
--color-gray-800: #2a2a2a;
|
|
101
|
+
--color-gray-900: #212529;
|
|
102
|
+
--color-gray-1000: #0f0f0f;
|
|
103
|
+
|
|
104
|
+
--color-error-100: #fff0f3;
|
|
105
|
+
--color-error-200: #ffccd5;
|
|
106
|
+
--color-error-300: #ffb3c1;
|
|
107
|
+
--color-error-400: #ff8fa3;
|
|
108
|
+
--color-error-500: #ff758f;
|
|
109
|
+
--color-error-600: #ff4d6d;
|
|
110
|
+
--color-error-700: #c9184a;
|
|
111
|
+
--color-error-800: #a4133c;
|
|
112
|
+
--color-error-900: #800f2f;
|
|
113
|
+
--color-error-1000: #590d22;
|
|
114
|
+
|
|
115
|
+
--transition-property-spacing: margin, padding;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
@layer base {
|
|
119
|
+
body {
|
|
120
|
+
@apply font-sans;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
footer {
|
|
124
|
+
@apply mt-auto;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
*:focus-visible {
|
|
128
|
+
@apply outline-2 outline-offset-1 outline-gray-300;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
*::selection {
|
|
132
|
+
@apply bg-error-200 dark:bg-error-500/50;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.dark {
|
|
136
|
+
@apply bg-black text-gray-100;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.light {
|
|
140
|
+
@apply bg-gray-100 text-black;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
@layer utilities {
|
|
145
|
+
.scrollbar::-webkit-scrollbar {
|
|
146
|
+
@apply h-2 w-2 bg-transparent;
|
|
147
|
+
}
|
|
148
|
+
.scrollbar::-webkit-scrollbar-track {
|
|
149
|
+
@apply bg-transparent;
|
|
150
|
+
}
|
|
151
|
+
.scrollbar::-webkit-scrollbar-thumb {
|
|
152
|
+
@apply rounded-full bg-gray-300 dark:bg-gray-900;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.scrollbar::-webkit-scrollbar-corner {
|
|
156
|
+
@apply bg-transparent;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.slider::-webkit-slider-thumb {
|
|
160
|
+
@apply relative z-10 h-5 w-5 cursor-pointer appearance-none rounded-full border-2 border-solid border-black bg-gray-100 dark:border-gray-100 dark:bg-black;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.slider:disabled::-webkit-slider-thumb {
|
|
164
|
+
@apply cursor-default border-gray-500 dark:border-gray-500;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.disable-transitions * {
|
|
168
|
+
transition: none !important;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
@utility container {
|
|
173
|
+
@apply mx-auto px-4;
|
|
174
|
+
}
|