designkit-ai 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/AI-AGENT.md +51 -0
- package/LICENSE +21 -0
- package/README.md +517 -0
- package/bin/designkit.js +61 -0
- package/components/_index.md +81 -0
- package/components/app-mobile/README.md +117 -0
- package/components/app-mobile/badges/badge-count.html +9 -0
- package/components/app-mobile/badges/badge-dot.html +9 -0
- package/components/app-mobile/badges/badge-large.html +9 -0
- package/components/app-mobile/buttons/button-filled.html +9 -0
- package/components/app-mobile/buttons/button-icon.html +11 -0
- package/components/app-mobile/buttons/button-outlined.html +9 -0
- package/components/app-mobile/buttons/button-text.html +9 -0
- package/components/app-mobile/buttons/button-tonal.html +9 -0
- package/components/app-mobile/buttons/fab-extended.html +12 -0
- package/components/app-mobile/buttons/fab-small.html +11 -0
- package/components/app-mobile/buttons/fab.html +11 -0
- package/components/app-mobile/buttons/icon-button-filled.html +11 -0
- package/components/app-mobile/buttons/icon-button-tonal.html +11 -0
- package/components/app-mobile/buttons/segmented-button.html +13 -0
- package/components/app-mobile/cards/card-elevated.html +15 -0
- package/components/app-mobile/cards/card-filled.html +15 -0
- package/components/app-mobile/cards/card-outlined.html +15 -0
- package/components/app-mobile/charts/bar-chart.html +20 -0
- package/components/app-mobile/charts/donut-chart.html +20 -0
- package/components/app-mobile/charts/horizontal-bar.html +15 -0
- package/components/app-mobile/charts/line-chart.html +26 -0
- package/components/app-mobile/charts/progress-ring.html +17 -0
- package/components/app-mobile/charts/sparkline.html +11 -0
- package/components/app-mobile/charts/stat-card.html +18 -0
- package/components/app-mobile/chips/chip-assist.html +12 -0
- package/components/app-mobile/chips/chip-filter.html +12 -0
- package/components/app-mobile/chips/chip-input.html +14 -0
- package/components/app-mobile/chips/chip-suggestion.html +9 -0
- package/components/app-mobile/data-display/avatar-group.html +35 -0
- package/components/app-mobile/dialogs/dialog-basic.html +16 -0
- package/components/app-mobile/dialogs/dialog-fullscreen.html +18 -0
- package/components/app-mobile/dividers/divider-full.html +9 -0
- package/components/app-mobile/dividers/divider-inset.html +9 -0
- package/components/app-mobile/ecommerce/cart-item.html +29 -0
- package/components/app-mobile/ecommerce/cart-summary.html +31 -0
- package/components/app-mobile/ecommerce/color-selector.html +17 -0
- package/components/app-mobile/ecommerce/order-status.html +25 -0
- package/components/app-mobile/ecommerce/product-detail-hero.html +45 -0
- package/components/app-mobile/ecommerce/size-selector.html +17 -0
- package/components/app-mobile/ecommerce/wishlist-item.html +22 -0
- package/components/app-mobile/education/assignment-card.html +24 -0
- package/components/app-mobile/education/certificate.html +30 -0
- package/components/app-mobile/education/course-card.html +32 -0
- package/components/app-mobile/education/grade-report.html +53 -0
- package/components/app-mobile/education/lesson-progress.html +21 -0
- package/components/app-mobile/education/quiz-mcq.html +35 -0
- package/components/app-mobile/education/quiz-truefalse.html +26 -0
- package/components/app-mobile/education/student-dashboard.html +57 -0
- package/components/app-mobile/feedback/banner.html +13 -0
- package/components/app-mobile/feedback/progress-circular.html +14 -0
- package/components/app-mobile/feedback/progress-linear.html +11 -0
- package/components/app-mobile/feedback/skeleton.html +20 -0
- package/components/app-mobile/feedback/snackbar.html +15 -0
- package/components/app-mobile/feedback/tooltip.html +9 -0
- package/components/app-mobile/finance/bank-account-card.html +36 -0
- package/components/app-mobile/finance/budget-category.html +24 -0
- package/components/app-mobile/finance/credit-score.html +29 -0
- package/components/app-mobile/finance/investment-portfolio.html +52 -0
- package/components/app-mobile/finance/transaction-row.html +26 -0
- package/components/app-mobile/finance/transfer-form.html +42 -0
- package/components/app-mobile/fitness/body-metrics.html +41 -0
- package/components/app-mobile/fitness/calorie-tracker.html +48 -0
- package/components/app-mobile/fitness/exercise-timer.html +30 -0
- package/components/app-mobile/fitness/meal-plan.html +36 -0
- package/components/app-mobile/fitness/sleep-tracker.html +50 -0
- package/components/app-mobile/fitness/workout-card.html +37 -0
- package/components/app-mobile/food/cuisine-filter.html +39 -0
- package/components/app-mobile/food/menu-item.html +25 -0
- package/components/app-mobile/food/order-tracker.html +46 -0
- package/components/app-mobile/food/restaurant-card.html +34 -0
- package/components/app-mobile/food/review-card.html +35 -0
- package/components/app-mobile/food/table-reservation.html +42 -0
- package/components/app-mobile/forms/form-address.html +41 -0
- package/components/app-mobile/forms/form-payment.html +37 -0
- package/components/app-mobile/forms/form-profile.html +39 -0
- package/components/app-mobile/forms/time-picker.html +28 -0
- package/components/app-mobile/healthcare/appointment-card.html +26 -0
- package/components/app-mobile/healthcare/doctor-profile.html +32 -0
- package/components/app-mobile/healthcare/health-metric-chart.html +51 -0
- package/components/app-mobile/healthcare/insurance-card.html +35 -0
- package/components/app-mobile/healthcare/lab-results.html +23 -0
- package/components/app-mobile/healthcare/medication-reminder.html +24 -0
- package/components/app-mobile/healthcare/symptom-checker.html +42 -0
- package/components/app-mobile/healthcare/vitals-dashboard.html +56 -0
- package/components/app-mobile/inputs/date-picker.html +68 -0
- package/components/app-mobile/inputs/file-upload.html +13 -0
- package/components/app-mobile/inputs/otp-input.html +16 -0
- package/components/app-mobile/inputs/password-field.html +13 -0
- package/components/app-mobile/inputs/search-bar.html +17 -0
- package/components/app-mobile/inputs/select.html +17 -0
- package/components/app-mobile/inputs/text-field-filled.html +12 -0
- package/components/app-mobile/inputs/text-field-outlined.html +12 -0
- package/components/app-mobile/inputs/textarea.html +12 -0
- package/components/app-mobile/inputs/time-picker.html +33 -0
- package/components/app-mobile/job/application-status.html +18 -0
- package/components/app-mobile/job/interview-schedule.html +32 -0
- package/components/app-mobile/lists/list-item-1line.html +14 -0
- package/components/app-mobile/lists/list-item-2line.html +20 -0
- package/components/app-mobile/lists/list-item-3line.html +17 -0
- package/components/app-mobile/logistics/delivery-map.html +40 -0
- package/components/app-mobile/logistics/driver-card.html +25 -0
- package/components/app-mobile/logistics/package-tracker.html +42 -0
- package/components/app-mobile/logistics/shipment-row.html +20 -0
- package/components/app-mobile/media/audio-player.html +38 -0
- package/components/app-mobile/media/image-carousel.html +28 -0
- package/components/app-mobile/menus/menu-context.html +13 -0
- package/components/app-mobile/menus/menu-dropdown.html +14 -0
- package/components/app-mobile/native/gesture-nav-bar.html +11 -0
- package/components/app-mobile/native/ios-action-sheet.html +19 -0
- package/components/app-mobile/native/ios-alert.html +18 -0
- package/components/app-mobile/native/ios-home-indicator.html +11 -0
- package/components/app-mobile/native/ios-list-cell.html +14 -0
- package/components/app-mobile/native/ios-nav-bar.html +16 -0
- package/components/app-mobile/native/ios-page-sheet.html +17 -0
- package/components/app-mobile/native/ios-search-bar.html +15 -0
- package/components/app-mobile/native/ios-segmented-control.html +13 -0
- package/components/app-mobile/native/ios-status-bar.html +17 -0
- package/components/app-mobile/native/ios-tab-bar.html +31 -0
- package/components/app-mobile/native/ios-wheel-picker.html +34 -0
- package/components/app-mobile/native/notification-item.html +19 -0
- package/components/app-mobile/native/permission-dialog.html +18 -0
- package/components/app-mobile/native/status-bar.html +16 -0
- package/components/app-mobile/navbars/bottom-app-bar.html +19 -0
- package/components/app-mobile/navbars/bottom-nav-3.html +28 -0
- package/components/app-mobile/navbars/bottom-nav-4.html +26 -0
- package/components/app-mobile/navbars/bottom-nav-5.html +30 -0
- package/components/app-mobile/navbars/top-app-bar-center.html +17 -0
- package/components/app-mobile/navbars/top-app-bar-large.html +20 -0
- package/components/app-mobile/navbars/top-app-bar-medium.html +20 -0
- package/components/app-mobile/navbars/top-app-bar-small.html +22 -0
- package/components/app-mobile/navigation/back-header.html +32 -0
- package/components/app-mobile/navigation/segmented-control.html +19 -0
- package/components/app-mobile/navigation/stepper-vertical.html +65 -0
- package/components/app-mobile/patterns/accordion.html +20 -0
- package/components/app-mobile/patterns/activity-feed.html +26 -0
- package/components/app-mobile/patterns/audio-waveform.html +34 -0
- package/components/app-mobile/patterns/avatar-group.html +14 -0
- package/components/app-mobile/patterns/breadcrumb.html +15 -0
- package/components/app-mobile/patterns/calendar-month.html +56 -0
- package/components/app-mobile/patterns/camera-viewfinder.html +33 -0
- package/components/app-mobile/patterns/card-horizontal.html +15 -0
- package/components/app-mobile/patterns/cart-item.html +23 -0
- package/components/app-mobile/patterns/category-pills.html +15 -0
- package/components/app-mobile/patterns/chat-bubble-received.html +15 -0
- package/components/app-mobile/patterns/chat-bubble-sent.html +14 -0
- package/components/app-mobile/patterns/chat-conversation.html +27 -0
- package/components/app-mobile/patterns/chat-input-bar.html +13 -0
- package/components/app-mobile/patterns/code-editor.html +29 -0
- package/components/app-mobile/patterns/comment-item.html +15 -0
- package/components/app-mobile/patterns/contact-card.html +19 -0
- package/components/app-mobile/patterns/data-table.html +25 -0
- package/components/app-mobile/patterns/empty-state.html +19 -0
- package/components/app-mobile/patterns/error-screen.html +14 -0
- package/components/app-mobile/patterns/event-card.html +22 -0
- package/components/app-mobile/patterns/image-editor.html +34 -0
- package/components/app-mobile/patterns/image-grid.html +16 -0
- package/components/app-mobile/patterns/login-form.html +22 -0
- package/components/app-mobile/patterns/map-card.html +19 -0
- package/components/app-mobile/patterns/media-player.html +26 -0
- package/components/app-mobile/patterns/notification-list.html +25 -0
- package/components/app-mobile/patterns/onboarding-slide.html +24 -0
- package/components/app-mobile/patterns/order-summary.html +16 -0
- package/components/app-mobile/patterns/order-tracker.html +27 -0
- package/components/app-mobile/patterns/pagination.html +17 -0
- package/components/app-mobile/patterns/post-card.html +28 -0
- package/components/app-mobile/patterns/product-card.html +26 -0
- package/components/app-mobile/patterns/profile-header.html +18 -0
- package/components/app-mobile/patterns/rating-stars.html +15 -0
- package/components/app-mobile/patterns/review-card.html +22 -0
- package/components/app-mobile/patterns/search-results.html +35 -0
- package/components/app-mobile/patterns/settings-group.html +30 -0
- package/components/app-mobile/patterns/stepper-horizontal.html +24 -0
- package/components/app-mobile/patterns/story-circle.html +16 -0
- package/components/app-mobile/patterns/swipe-action.html +19 -0
- package/components/app-mobile/patterns/tag-pills.html +14 -0
- package/components/app-mobile/patterns/timeline-item.html +19 -0
- package/components/app-mobile/patterns/todo-item.html +18 -0
- package/components/app-mobile/patterns/video-editor-timeline.html +36 -0
- package/components/app-mobile/patterns/video-player.html +33 -0
- package/components/app-mobile/patterns/wallet-card.html +18 -0
- package/components/app-mobile/sliders/slider-continuous.html +14 -0
- package/components/app-mobile/sliders/slider-discrete.html +21 -0
- package/components/app-mobile/social/chat-bubble-received.html +15 -0
- package/components/app-mobile/social/chat-bubble-sent.html +16 -0
- package/components/app-mobile/social/notification-item.html +17 -0
- package/components/app-mobile/social/post-card.html +46 -0
- package/components/app-mobile/social/reaction-bar.html +29 -0
- package/components/app-mobile/social/story-circle.html +15 -0
- package/components/app-mobile/social/user-profile-card.html +29 -0
- package/components/app-mobile/surfaces/bottom-sheet.html +23 -0
- package/components/app-mobile/surfaces/nav-drawer.html +20 -0
- package/components/app-mobile/surfaces/nav-rail.html +14 -0
- package/components/app-mobile/surfaces/side-sheet.html +17 -0
- package/components/app-mobile/tabs/tabs-primary.html +13 -0
- package/components/app-mobile/tabs/tabs-secondary.html +13 -0
- package/components/app-mobile/toggles/checkbox.html +14 -0
- package/components/app-mobile/toggles/radio.html +14 -0
- package/components/app-mobile/toggles/switch.html +11 -0
- package/components/app-mobile/travel/booking-summary.html +51 -0
- package/components/app-mobile/travel/flight-card.html +41 -0
- package/components/app-mobile/travel/hotel-card.html +35 -0
- package/components/app-mobile/travel/itinerary-item.html +29 -0
- package/components/app-mobile/travel/map-pins.html +42 -0
- package/components/app-mobile/travel/travel-date-picker.html +72 -0
- package/components/common/decorations/abstract-lines.html +30 -0
- package/components/common/decorations/circle-rings.html +26 -0
- package/components/common/decorations/corner-decoration.html +27 -0
- package/components/common/decorations/dots-pattern.html +51 -0
- package/components/common/decorations/gradient-blob.html +19 -0
- package/components/common/decorations/mesh-gradient.html +32 -0
- package/components/common/decorations/sparkle-burst.html +35 -0
- package/components/common/decorations/wave-divider.html +17 -0
- package/components/common/illustrations/empty-cart.html +27 -0
- package/components/common/illustrations/empty-inbox.html +28 -0
- package/components/common/illustrations/empty-search.html +26 -0
- package/components/common/illustrations/error-404.html +29 -0
- package/components/common/illustrations/no-data.html +31 -0
- package/components/common/illustrations/success-check.html +33 -0
- package/components/common/illustrations/upload-cloud.html +23 -0
- package/components/common/illustrations/welcome.html +31 -0
- package/components/common/mockup-elements/avatar-placeholder.html +17 -0
- package/components/common/mockup-elements/browser-chrome.html +37 -0
- package/components/common/mockup-elements/chart-bar.html +42 -0
- package/components/common/mockup-elements/image-placeholder.html +27 -0
- package/components/common/mockup-elements/laptop-frame.html +32 -0
- package/components/common/mockup-elements/map-placeholder.html +39 -0
- package/components/common/mockup-elements/phone-frame.html +29 -0
- package/components/common/mockup-elements/status-bar-android.html +30 -0
- package/components/common/mockup-elements/status-bar-ios.html +26 -0
- package/components/common/mockup-elements/video-placeholder.html +29 -0
- package/components/common/ui-icons/icon-add-circle.html +12 -0
- package/components/common/ui-icons/icon-airdrop.html +10 -0
- package/components/common/ui-icons/icon-airplay.html +10 -0
- package/components/common/ui-icons/icon-apple-logo.html +10 -0
- package/components/common/ui-icons/icon-arrow-back.html +11 -0
- package/components/common/ui-icons/icon-arrow-down.html +10 -0
- package/components/common/ui-icons/icon-arrow-right.html +10 -0
- package/components/common/ui-icons/icon-arrow-up.html +10 -0
- package/components/common/ui-icons/icon-bag.html +10 -0
- package/components/common/ui-icons/icon-battery.html +10 -0
- package/components/common/ui-icons/icon-bluetooth.html +10 -0
- package/components/common/ui-icons/icon-bolt.html +10 -0
- package/components/common/ui-icons/icon-bookmark-fill.html +10 -0
- package/components/common/ui-icons/icon-bookmark.html +10 -0
- package/components/common/ui-icons/icon-bubble-left.html +10 -0
- package/components/common/ui-icons/icon-calendar.html +19 -0
- package/components/common/ui-icons/icon-camera.html +11 -0
- package/components/common/ui-icons/icon-cart.html +10 -0
- package/components/common/ui-icons/icon-checkmark.html +10 -0
- package/components/common/ui-icons/icon-chevron-down.html +10 -0
- package/components/common/ui-icons/icon-chevron-left.html +10 -0
- package/components/common/ui-icons/icon-chevron-right.html +10 -0
- package/components/common/ui-icons/icon-chevron-up.html +10 -0
- package/components/common/ui-icons/icon-clock.html +10 -0
- package/components/common/ui-icons/icon-creditcard.html +10 -0
- package/components/common/ui-icons/icon-doc.html +10 -0
- package/components/common/ui-icons/icon-download.html +10 -0
- package/components/common/ui-icons/icon-ellipsis-vertical.html +10 -0
- package/components/common/ui-icons/icon-ellipsis.html +10 -0
- package/components/common/ui-icons/icon-envelope.html +10 -0
- package/components/common/ui-icons/icon-eye-slash.html +10 -0
- package/components/common/ui-icons/icon-eye.html +10 -0
- package/components/common/ui-icons/icon-faceid.html +10 -0
- package/components/common/ui-icons/icon-favorite.html +10 -0
- package/components/common/ui-icons/icon-folder.html +10 -0
- package/components/common/ui-icons/icon-globe.html +10 -0
- package/components/common/ui-icons/icon-heart-fill.html +10 -0
- package/components/common/ui-icons/icon-heart.html +10 -0
- package/components/common/ui-icons/icon-home.html +10 -0
- package/components/common/ui-icons/icon-link.html +10 -0
- package/components/common/ui-icons/icon-list-bullet.html +10 -0
- package/components/common/ui-icons/icon-location.html +11 -0
- package/components/common/ui-icons/icon-lock.html +10 -0
- package/components/common/ui-icons/icon-magnifying-glass.html +10 -0
- package/components/common/ui-icons/icon-map.html +10 -0
- package/components/common/ui-icons/icon-menu-hamburger.html +12 -0
- package/components/common/ui-icons/icon-mic.html +10 -0
- package/components/common/ui-icons/icon-minus.html +10 -0
- package/components/common/ui-icons/icon-notification.html +11 -0
- package/components/common/ui-icons/icon-paperplane.html +10 -0
- package/components/common/ui-icons/icon-pause.html +10 -0
- package/components/common/ui-icons/icon-pencil.html +10 -0
- package/components/common/ui-icons/icon-person-2.html +10 -0
- package/components/common/ui-icons/icon-person-crop-circle.html +10 -0
- package/components/common/ui-icons/icon-phone-fill.html +10 -0
- package/components/common/ui-icons/icon-photo.html +10 -0
- package/components/common/ui-icons/icon-play-fill.html +10 -0
- package/components/common/ui-icons/icon-plus.html +10 -0
- package/components/common/ui-icons/icon-profile.html +11 -0
- package/components/common/ui-icons/icon-qrcode.html +10 -0
- package/components/common/ui-icons/icon-settings.html +11 -0
- package/components/common/ui-icons/icon-share.html +14 -0
- package/components/common/ui-icons/icon-slider-horizontal.html +10 -0
- package/components/common/ui-icons/icon-square-grid.html +10 -0
- package/components/common/ui-icons/icon-star-fill.html +10 -0
- package/components/common/ui-icons/icon-star.html +10 -0
- package/components/common/ui-icons/icon-touchid.html +10 -0
- package/components/common/ui-icons/icon-trash.html +10 -0
- package/components/common/ui-icons/icon-upload.html +10 -0
- package/components/common/ui-icons/icon-video.html +10 -0
- package/components/common/ui-icons/icon-wifi.html +10 -0
- package/components/common/ui-icons/icon-xmark.html +10 -0
- package/components/componentmap-app-mobile.md +210 -0
- package/components/componentmap-web.md +206 -0
- package/components/web/README.md +110 -0
- package/components/web/account/payment-method.html +13 -0
- package/components/web/account/profile-card.html +18 -0
- package/components/web/account/subscription-card.html +21 -0
- package/components/web/badges/badge-set.html +14 -0
- package/components/web/buttons/button-danger.html +10 -0
- package/components/web/buttons/button-ghost.html +10 -0
- package/components/web/buttons/button-group.html +12 -0
- package/components/web/buttons/button-icon.html +10 -0
- package/components/web/buttons/button-primary.html +11 -0
- package/components/web/buttons/button-secondary.html +10 -0
- package/components/web/cards/card-basic.html +11 -0
- package/components/web/cards/card-feature.html +12 -0
- package/components/web/cards/card-image.html +16 -0
- package/components/web/cards/card-pricing.html +21 -0
- package/components/web/cards/card-stat.html +15 -0
- package/components/web/cards/card-testimonial.html +21 -0
- package/components/web/cart/cart-page.html +30 -0
- package/components/web/cart/checkout-form.html +27 -0
- package/components/web/cart/order-confirmation.html +24 -0
- package/components/web/charts/chart-area.html +25 -0
- package/components/web/charts/chart-bar.html +19 -0
- package/components/web/charts/chart-donut.html +27 -0
- package/components/web/content/author-card.html +15 -0
- package/components/web/content/blog-card-horizontal.html +16 -0
- package/components/web/cta/cta-centered.html +15 -0
- package/components/web/cta/cta-newsletter.html +16 -0
- package/components/web/cta/cta-with-image.html +17 -0
- package/components/web/data-display/accordion.html +45 -0
- package/components/web/data-display/grid-view.html +21 -0
- package/components/web/data-display/list-view.html +27 -0
- package/components/web/data-display/progress-steps.html +39 -0
- package/components/web/data-display/rating-stars.html +38 -0
- package/components/web/data-display/stat-card-compact.html +32 -0
- package/components/web/data-display/stat-card-large.html +34 -0
- package/components/web/data-display/table-selectable.html +127 -0
- package/components/web/data-display/table-sortable.html +120 -0
- package/components/web/data-display/tag-group.html +25 -0
- package/components/web/data-display/timeline-horizontal.html +55 -0
- package/components/web/data-display/timeline-vertical.html +76 -0
- package/components/web/data-display/tree-view.html +86 -0
- package/components/web/dividers/divider-text.html +8 -0
- package/components/web/ecommerce/coupon-input.html +11 -0
- package/components/web/ecommerce/product-card-grid.html +29 -0
- package/components/web/ecommerce/product-card-list.html +32 -0
- package/components/web/features/features-alternating.html +35 -0
- package/components/web/features/features-bento.html +43 -0
- package/components/web/features/features-icon-list.html +44 -0
- package/components/web/feedback/alert-banner.html +12 -0
- package/components/web/feedback/empty-state-error.html +18 -0
- package/components/web/feedback/empty-state-no-data.html +18 -0
- package/components/web/feedback/empty-state-no-search.html +15 -0
- package/components/web/feedback/empty-state.html +16 -0
- package/components/web/feedback/loading-spinner.html +14 -0
- package/components/web/feedback/progress-bar.html +11 -0
- package/components/web/feedback/skeleton-card.html +17 -0
- package/components/web/feedback/skeleton-list.html +45 -0
- package/components/web/feedback/skeleton.html +16 -0
- package/components/web/feedback/toast-error.html +12 -0
- package/components/web/feedback/toast-info.html +12 -0
- package/components/web/feedback/toast-success.html +12 -0
- package/components/web/feedback/tooltip.html +8 -0
- package/components/web/forms/date-picker.html +67 -0
- package/components/web/forms/file-upload.html +16 -0
- package/components/web/forms/form-contact.html +35 -0
- package/components/web/forms/form-login.html +29 -0
- package/components/web/forms/form-search-filters.html +57 -0
- package/components/web/forms/form-signup.html +35 -0
- package/components/web/heroes/hero-gradient.html +20 -0
- package/components/web/heroes/hero-image-bg.html +21 -0
- package/components/web/heroes/hero-video.html +17 -0
- package/components/web/inputs/checkbox.html +11 -0
- package/components/web/inputs/date-input.html +15 -0
- package/components/web/inputs/file-upload.html +12 -0
- package/components/web/inputs/radio-group.html +15 -0
- package/components/web/inputs/search-command.html +12 -0
- package/components/web/inputs/select.html +14 -0
- package/components/web/inputs/tag-input.html +15 -0
- package/components/web/inputs/text-input.html +11 -0
- package/components/web/inputs/textarea.html +11 -0
- package/components/web/inputs/toggle.html +11 -0
- package/components/web/job/candidate-profile.html +47 -0
- package/components/web/job/job-listing.html +44 -0
- package/components/web/job/resume-section.html +41 -0
- package/components/web/job/salary-range.html +19 -0
- package/components/web/layout/cta-banner.html +15 -0
- package/components/web/layout/features-grid.html +31 -0
- package/components/web/layout/hero-centered.html +19 -0
- package/components/web/layout/hero-split.html +21 -0
- package/components/web/layout/pricing-section.html +37 -0
- package/components/web/layout/stats-row.html +13 -0
- package/components/web/logos/logo-grid.html +20 -0
- package/components/web/logos/logo-ticker.html +19 -0
- package/components/web/marketing/cta-simple.html +18 -0
- package/components/web/marketing/cta-split.html +20 -0
- package/components/web/marketing/faq-accordion.html +55 -0
- package/components/web/marketing/feature-centered.html +35 -0
- package/components/web/marketing/feature-grid-2col.html +58 -0
- package/components/web/marketing/feature-grid-3col.html +44 -0
- package/components/web/marketing/footer-complex.html +86 -0
- package/components/web/marketing/footer-simple.html +59 -0
- package/components/web/marketing/hero-centered.html +44 -0
- package/components/web/marketing/hero-split-left.html +41 -0
- package/components/web/marketing/hero-split-right.html +35 -0
- package/components/web/marketing/logo-cloud.html +18 -0
- package/components/web/marketing/newsletter-signup.html +25 -0
- package/components/web/marketing/pricing-3tier.html +72 -0
- package/components/web/marketing/pricing-toggle.html +85 -0
- package/components/web/marketing/social-proof-bar.html +32 -0
- package/components/web/marketing/stats-row.html +45 -0
- package/components/web/marketing/team-grid.html +65 -0
- package/components/web/marketing/testimonial-carousel.html +45 -0
- package/components/web/marketing/testimonial-grid.html +75 -0
- package/components/web/media/blog-post-card.html +24 -0
- package/components/web/media/comment-single.html +26 -0
- package/components/web/media/image-gallery-grid.html +18 -0
- package/components/web/media/rich-text-block.html +20 -0
- package/components/web/media/testimonial-quote.html +20 -0
- package/components/web/media/video-player.html +44 -0
- package/components/web/menus/dropdown-menu.html +14 -0
- package/components/web/metrics/kpi-row.html +13 -0
- package/components/web/modals/modal-basic.html +21 -0
- package/components/web/modals/modal-form.html +22 -0
- package/components/web/navbars/breadcrumb.html +14 -0
- package/components/web/navbars/footer.html +35 -0
- package/components/web/navbars/sidebar-dark.html +21 -0
- package/components/web/navbars/sidebar.html +23 -0
- package/components/web/navbars/topnav-search.html +25 -0
- package/components/web/navbars/topnav.html +20 -0
- package/components/web/navigation/mega-menu.html +92 -0
- package/components/web/navigation/pagination.html +43 -0
- package/components/web/navigation/sidebar-collapsed.html +93 -0
- package/components/web/navigation/sidebar-expanded.html +121 -0
- package/components/web/navigation/stepper-horizontal.html +51 -0
- package/components/web/patterns/accordion.html +19 -0
- package/components/web/patterns/activity-feed.html +25 -0
- package/components/web/patterns/auth-login.html +24 -0
- package/components/web/patterns/avatar-group.html +13 -0
- package/components/web/patterns/calendar-month.html +44 -0
- package/components/web/patterns/category-pills.html +15 -0
- package/components/web/patterns/chat-web.html +24 -0
- package/components/web/patterns/code-editor.html +34 -0
- package/components/web/patterns/comparison-table.html +39 -0
- package/components/web/patterns/cookie-banner.html +14 -0
- package/components/web/patterns/error-page.html +16 -0
- package/components/web/patterns/file-list.html +24 -0
- package/components/web/patterns/filter-toolbar.html +14 -0
- package/components/web/patterns/kanban-column.html +27 -0
- package/components/web/patterns/notification-list.html +26 -0
- package/components/web/patterns/order-tracker.html +16 -0
- package/components/web/patterns/pagination.html +16 -0
- package/components/web/patterns/product-card-web.html +23 -0
- package/components/web/patterns/settings-form.html +24 -0
- package/components/web/patterns/stepper.html +16 -0
- package/components/web/patterns/user-table-row.html +15 -0
- package/components/web/patterns/video-player.html +26 -0
- package/components/web/presentation/slide-content.html +17 -0
- package/components/web/presentation/slide-title.html +13 -0
- package/components/web/pricing/pricing-table.html +51 -0
- package/components/web/pricing/pricing-toggle.html +62 -0
- package/components/web/print/business-card.html +20 -0
- package/components/web/products/product-card-horizontal.html +19 -0
- package/components/web/products/product-detail.html +39 -0
- package/components/web/products/product-grid.html +13 -0
- package/components/web/products/review-section.html +29 -0
- package/components/web/promotions/coupon-card.html +17 -0
- package/components/web/promotions/promo-banner.html +24 -0
- package/components/web/real-estate/agent-contact.html +32 -0
- package/components/web/real-estate/listing-detail-hero.html +44 -0
- package/components/web/real-estate/price-range-slider.html +20 -0
- package/components/web/real-estate/property-card.html +38 -0
- package/components/web/real-estate/property-map-pin.html +19 -0
- package/components/web/real-estate/virtual-tour-button.html +17 -0
- package/components/web/saas/api-key-row.html +31 -0
- package/components/web/saas/audit-log-row.html +21 -0
- package/components/web/saas/billing-plan.html +50 -0
- package/components/web/saas/kpi-row.html +61 -0
- package/components/web/saas/team-member-row.html +30 -0
- package/components/web/saas/webhook-config.html +44 -0
- package/components/web/screenshots/app-screenshot.html +32 -0
- package/components/web/screenshots/screenshot-gallery.html +45 -0
- package/components/web/social/comment-thread.html +75 -0
- package/components/web/social-media/instagram-post.html +17 -0
- package/components/web/social-proof/logo-cloud.html +18 -0
- package/components/web/social-proof/testimonial-carousel.html +30 -0
- package/components/web/surfaces/slide-over.html +20 -0
- package/components/web/tables/data-table.html +41 -0
- package/components/web/tables/table-simple.html +13 -0
- package/components/web/tabs/tabs-pills.html +12 -0
- package/components/web/tabs/tabs-underline.html +13 -0
- package/components/web/toggles/toggle-dark-mode.html +19 -0
- package/components/web/toggles/toggle-group.html +38 -0
- package/components/web/toggles/toggle-switch.html +14 -0
- package/components/web/widgets/api-key-row.html +16 -0
- package/components/web/widgets/billing-card.html +14 -0
- package/components/web/widgets/changelog-item.html +15 -0
- package/components/web/widgets/integration-card.html +15 -0
- package/components/web/widgets/onboarding-checklist.html +18 -0
- package/components/web/widgets/pricing-toggle.html +13 -0
- package/components/web/widgets/team-member-row.html +13 -0
- package/components/web/widgets/usage-meter.html +12 -0
- package/package.json +46 -0
- package/skills/README.md +35 -0
- package/skills/contribute.md +267 -0
- package/skills/design.md +470 -0
- package/skills/flutter.md +156 -0
- package/skills/nextjs.md +143 -0
- package/skills/react-native.md +258 -0
- package/skills/react.md +171 -0
- package/skills/svelte.md +95 -0
- package/skills/swiftui.md +171 -0
- package/skills/tailwind.md +108 -0
- package/skills/vue.md +111 -0
- package/src/commands/add.js +51 -0
- package/src/commands/convert.js +120 -0
- package/src/commands/design.js +89 -0
- package/src/commands/init.js +136 -0
- package/src/commands/list.js +52 -0
- package/src/commands/search.js +40 -0
- package/src/lib/index.js +100 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Skill: SwiftUI (iOS)
|
|
2
|
+
|
|
3
|
+
Build, design, and convert DesignKit UI using SwiftUI.
|
|
4
|
+
|
|
5
|
+
## Your role
|
|
6
|
+
|
|
7
|
+
You are an iOS developer with strong UI skills.
|
|
8
|
+
You can:
|
|
9
|
+
- **Design** a screen from scratch using the token system
|
|
10
|
+
- **Convert** a DesignKit HTML file to SwiftUI Views
|
|
11
|
+
- **Build** a full feature (onboarding, tab bar app, list + detail, settings, etc.)
|
|
12
|
+
|
|
13
|
+
Read the request and determine which mode applies.
|
|
14
|
+
|
|
15
|
+
## Token struct (`Tokens.swift`)
|
|
16
|
+
|
|
17
|
+
```swift
|
|
18
|
+
import SwiftUI
|
|
19
|
+
|
|
20
|
+
struct T {
|
|
21
|
+
// Colors
|
|
22
|
+
static let primary = Color(hex: "#6366F1")
|
|
23
|
+
static let primaryText = Color.white
|
|
24
|
+
static let bg = Color(hex: "#FFFFFF")
|
|
25
|
+
static let surface = Color(hex: "#F8FAFC")
|
|
26
|
+
static let surface2 = Color(hex: "#F1F5F9")
|
|
27
|
+
static let textPrimary = Color(hex: "#0F172A")
|
|
28
|
+
static let text2 = Color(hex: "#475569")
|
|
29
|
+
static let text3 = Color(hex: "#94A3B8")
|
|
30
|
+
static let border = Color(hex: "#E2E8F0")
|
|
31
|
+
static let success = Color(hex: "#22C55E")
|
|
32
|
+
static let error = Color(hex: "#EF4444")
|
|
33
|
+
static let warning = Color(hex: "#F59E0B")
|
|
34
|
+
|
|
35
|
+
// Border radius
|
|
36
|
+
static let radiusSm: CGFloat = 6
|
|
37
|
+
static let radius: CGFloat = 10
|
|
38
|
+
static let radiusLg: CGFloat = 14
|
|
39
|
+
static let radiusXl: CGFloat = 20
|
|
40
|
+
|
|
41
|
+
// Spacing
|
|
42
|
+
static let space1: CGFloat = 4
|
|
43
|
+
static let space2: CGFloat = 8
|
|
44
|
+
static let space3: CGFloat = 12
|
|
45
|
+
static let space4: CGFloat = 16
|
|
46
|
+
static let space5: CGFloat = 20
|
|
47
|
+
static let space6: CGFloat = 24
|
|
48
|
+
static let space8: CGFloat = 32
|
|
49
|
+
|
|
50
|
+
// Typography
|
|
51
|
+
static let fontSm: Font = .system(size: 13)
|
|
52
|
+
static let fontMd: Font = .system(size: 15)
|
|
53
|
+
static let fontLg: Font = .system(size: 17)
|
|
54
|
+
static let fontXl: Font = .system(size: 20, weight: .semibold)
|
|
55
|
+
static let font2xl: Font = .system(size: 24, weight: .bold)
|
|
56
|
+
static let font3xl: Font = .system(size: 32, weight: .bold)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Hex color initializer
|
|
60
|
+
extension Color {
|
|
61
|
+
init(hex: String) {
|
|
62
|
+
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
|
|
63
|
+
var int: UInt64 = 0
|
|
64
|
+
Scanner(string: hex).scanHexInt64(&int)
|
|
65
|
+
let r = Double((int >> 16) & 0xFF) / 255
|
|
66
|
+
let g = Double((int >> 8) & 0xFF) / 255
|
|
67
|
+
let b = Double(int & 0xFF) / 255
|
|
68
|
+
self.init(red: r, green: g, blue: b)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## HTML → SwiftUI mapping
|
|
74
|
+
|
|
75
|
+
| HTML | SwiftUI |
|
|
76
|
+
|------|---------|
|
|
77
|
+
| `<div style="display:flex">` | `HStack {}` |
|
|
78
|
+
| `<div style="flex-direction:column">` | `VStack(alignment: .leading) {}` |
|
|
79
|
+
| `<div style="position:relative">` | `ZStack {}` |
|
|
80
|
+
| `<div style="overflow-y:auto">` | `ScrollView {}` |
|
|
81
|
+
| `<div style="background:X; border-radius:Y; padding:Z">` | `.background(X).clipShape(RoundedRectangle(cornerRadius: Y)).padding(Z)` |
|
|
82
|
+
| `<button>` | `Button {}` |
|
|
83
|
+
| `<input>` | `TextField("placeholder", text: $value)` |
|
|
84
|
+
| `<img>` | `AsyncImage(url:)` or `Rectangle().fill(Color.gray.opacity(0.2))` |
|
|
85
|
+
| `<span>` / `<p>` | `Text("...")` |
|
|
86
|
+
| `<h1>` | `Text("...").font(.largeTitle).fontWeight(.bold)` |
|
|
87
|
+
| `gap: 16px` | `VStack(spacing: 16)` or `HStack(spacing: 16)` |
|
|
88
|
+
| `flex: 1` | `.frame(maxWidth: .infinity)` |
|
|
89
|
+
|
|
90
|
+
## Output format
|
|
91
|
+
|
|
92
|
+
```swift
|
|
93
|
+
import SwiftUI
|
|
94
|
+
|
|
95
|
+
struct ScreenNameView: View {
|
|
96
|
+
// @State, @Binding, @ObservedObject here
|
|
97
|
+
|
|
98
|
+
var body: some View {
|
|
99
|
+
NavigationStack {
|
|
100
|
+
ScrollView {
|
|
101
|
+
VStack(spacing: T.space4) {
|
|
102
|
+
// content here
|
|
103
|
+
}
|
|
104
|
+
.padding(T.space4)
|
|
105
|
+
}
|
|
106
|
+
.background(T.bg)
|
|
107
|
+
.navigationTitle("Screen Name")
|
|
108
|
+
.navigationBarTitleDisplayMode(.large)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
#Preview {
|
|
114
|
+
ScreenNameView()
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## iOS-specific patterns
|
|
119
|
+
|
|
120
|
+
```swift
|
|
121
|
+
// Safe area + tab bar
|
|
122
|
+
TabView {
|
|
123
|
+
HomeView().tabItem { Label("Home", systemImage: "house.fill") }
|
|
124
|
+
SearchView().tabItem { Label("Search", systemImage: "magnifyingglass") }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Card
|
|
128
|
+
RoundedRectangle(cornerRadius: T.radiusLg)
|
|
129
|
+
.fill(T.surface)
|
|
130
|
+
.overlay(
|
|
131
|
+
VStack(alignment: .leading, spacing: T.space2) {
|
|
132
|
+
Text("Title").font(T.fontLg).fontWeight(.semibold)
|
|
133
|
+
Text("Subtitle").font(T.fontSm).foregroundColor(T.text2)
|
|
134
|
+
}
|
|
135
|
+
.padding(T.space4)
|
|
136
|
+
, alignment: .topLeading
|
|
137
|
+
)
|
|
138
|
+
.shadow(color: .black.opacity(0.08), radius: 3, y: 1)
|
|
139
|
+
|
|
140
|
+
// Gradient card
|
|
141
|
+
LinearGradient(colors: [T.primary, Color(hex: "#8B5CF6")],
|
|
142
|
+
startPoint: .topLeading, endPoint: .bottomTrailing)
|
|
143
|
+
.clipShape(RoundedRectangle(cornerRadius: T.radiusXl))
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Rules
|
|
147
|
+
|
|
148
|
+
- **`T.*` tokens** — never hardcode Color or CGFloat
|
|
149
|
+
- **`@State` / `@Binding`** for local vs passed state
|
|
150
|
+
- **`NavigationStack`** not deprecated `NavigationView`
|
|
151
|
+
- **`.frame(maxWidth: .infinity)`** for full-width elements
|
|
152
|
+
- **`Spacer()`** for flex alignment
|
|
153
|
+
- **iOS 17+** target — use latest SwiftUI APIs
|
|
154
|
+
|
|
155
|
+
## Example prompt
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Read AI-AGENT.md and skills/swiftui.md, then:
|
|
159
|
+
|
|
160
|
+
Design and build a finance app home screen in SwiftUI:
|
|
161
|
+
- Navigation bar: greeting + notification bell icon
|
|
162
|
+
- Balance card: gradient (indigo → purple), large balance $12,450, +12.5% badge
|
|
163
|
+
- Quick actions HStack: Send, Receive, Pay, More (icon + label)
|
|
164
|
+
- "Recent Transactions" section header
|
|
165
|
+
- 4 transaction rows (icon, merchant, date, amount with color)
|
|
166
|
+
- TabView bottom bar: Home, Cards, Analytics, Profile
|
|
167
|
+
|
|
168
|
+
Output:
|
|
169
|
+
- HomeView.swift
|
|
170
|
+
- Tokens.swift
|
|
171
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Skill: Tailwind CSS v4
|
|
2
|
+
|
|
3
|
+
Build, design, and convert DesignKit UI using Tailwind CSS.
|
|
4
|
+
|
|
5
|
+
## Your role
|
|
6
|
+
|
|
7
|
+
You are a frontend developer with strong UI skills, using Tailwind CSS v4.
|
|
8
|
+
You can:
|
|
9
|
+
- **Design** a component or page from scratch with Tailwind utility classes
|
|
10
|
+
- **Convert** a DesignKit HTML file (inline styles → Tailwind classes)
|
|
11
|
+
- **Build** a full section or feature (hero, pricing page, dashboard layout, etc.)
|
|
12
|
+
|
|
13
|
+
Read the request and determine which mode applies.
|
|
14
|
+
|
|
15
|
+
## Token mapping to Tailwind
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
--kit-primary → bg-indigo-500 / text-indigo-500 / border-indigo-500
|
|
19
|
+
--kit-bg → bg-white
|
|
20
|
+
--kit-surface → bg-slate-50
|
|
21
|
+
--kit-surface-2 → bg-slate-100
|
|
22
|
+
--kit-text → text-slate-900
|
|
23
|
+
--kit-text-2 → text-slate-600
|
|
24
|
+
--kit-text-3 → text-slate-400
|
|
25
|
+
--kit-border → border-slate-200
|
|
26
|
+
--kit-radius → rounded-[10px] or rounded-lg
|
|
27
|
+
--kit-radius-sm → rounded-md
|
|
28
|
+
--kit-radius-lg → rounded-xl
|
|
29
|
+
--kit-radius-full → rounded-full
|
|
30
|
+
--kit-shadow-sm → shadow-sm
|
|
31
|
+
--kit-shadow → shadow-md
|
|
32
|
+
--kit-shadow-lg → shadow-lg
|
|
33
|
+
--kit-space-4 → p-4 / gap-4 / m-4
|
|
34
|
+
--kit-space-6 → p-6 / gap-6
|
|
35
|
+
--kit-text-sm → text-sm
|
|
36
|
+
--kit-text-md → text-base
|
|
37
|
+
--kit-text-lg → text-lg
|
|
38
|
+
--kit-text-xl → text-xl
|
|
39
|
+
--kit-text-2xl → text-2xl
|
|
40
|
+
--kit-text-3xl → text-3xl
|
|
41
|
+
--kit-text-4xl → text-4xl / text-5xl
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Tailwind v4 CSS config
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
/* app.css */
|
|
48
|
+
@import "tailwindcss";
|
|
49
|
+
|
|
50
|
+
@theme {
|
|
51
|
+
--color-primary: #6366F1;
|
|
52
|
+
--color-surface: #F8FAFC;
|
|
53
|
+
--color-surface-2: #F1F5F9;
|
|
54
|
+
--color-kit-text: #0F172A;
|
|
55
|
+
--color-kit-text-2: #475569;
|
|
56
|
+
--color-kit-text-3: #94A3B8;
|
|
57
|
+
--radius-kit: 10px;
|
|
58
|
+
--font-kit: 'Inter', system-ui, sans-serif;
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Output format
|
|
63
|
+
|
|
64
|
+
```html
|
|
65
|
+
<!-- Card example -->
|
|
66
|
+
<div class="bg-white rounded-xl border border-slate-200 shadow-sm p-4">
|
|
67
|
+
<h2 class="text-base font-semibold text-slate-900">Card Title</h2>
|
|
68
|
+
<p class="text-sm text-slate-500 mt-1">Supporting text goes here.</p>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<!-- Button example -->
|
|
72
|
+
<button class="h-10 px-5 bg-indigo-500 text-white text-sm font-medium rounded-lg
|
|
73
|
+
hover:bg-indigo-600 active:bg-indigo-700 transition-colors">
|
|
74
|
+
Get Started
|
|
75
|
+
</button>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Rules
|
|
79
|
+
|
|
80
|
+
- **Utility classes only** — no `style=""` in output
|
|
81
|
+
- **Semantic HTML** — `<button>`, `<nav>`, `<a>`, `<ul>/<li>`
|
|
82
|
+
- **`hover:` / `focus:` / `active:`** variants for interactive elements
|
|
83
|
+
- **`dark:` variants** if dark mode is requested
|
|
84
|
+
- **`transition-colors`** on all interactive elements
|
|
85
|
+
- **No arbitrary values unless necessary** — prefer Tailwind scale
|
|
86
|
+
- **`gap-*` not `space-x-*`** for flex/grid spacing
|
|
87
|
+
|
|
88
|
+
## Example prompt
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
Read skills/tailwind.md, then convert this component to Tailwind CSS:
|
|
92
|
+
[paste HTML or file path]
|
|
93
|
+
|
|
94
|
+
Use Tailwind v4 utility classes. Keep the same visual design.
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Or design from scratch:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Read AI-AGENT.md and skills/tailwind.md, then:
|
|
101
|
+
|
|
102
|
+
Design a SaaS top navigation bar using Tailwind CSS:
|
|
103
|
+
- Logo left
|
|
104
|
+
- Nav links center: Features, Pricing, Docs, Blog
|
|
105
|
+
- Right: "Sign in" ghost button + "Get started" primary button
|
|
106
|
+
|
|
107
|
+
Output: components/Navbar.html
|
|
108
|
+
```
|
package/skills/vue.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Skill: Vue 3 (Composition API + TypeScript)
|
|
2
|
+
|
|
3
|
+
Build, design, and convert DesignKit UI using Vue 3.
|
|
4
|
+
|
|
5
|
+
## Your role
|
|
6
|
+
|
|
7
|
+
You are a Vue 3 developer with strong UI skills.
|
|
8
|
+
You can:
|
|
9
|
+
- **Design** a component or view from scratch using the token system
|
|
10
|
+
- **Convert** a DesignKit HTML file to Vue SFC components
|
|
11
|
+
- **Build** a full feature (auth page, dashboard layout, form with validation, etc.)
|
|
12
|
+
|
|
13
|
+
Read the request and determine which mode applies.
|
|
14
|
+
|
|
15
|
+
## Token composable (output to `composables/useTokens.ts`)
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
// composables/useTokens.ts
|
|
19
|
+
export const tokens = {
|
|
20
|
+
primary: '#6366F1',
|
|
21
|
+
primaryText: '#FFFFFF',
|
|
22
|
+
bg: '#FFFFFF',
|
|
23
|
+
surface: '#F8FAFC',
|
|
24
|
+
surface2: '#F1F5F9',
|
|
25
|
+
text: '#0F172A',
|
|
26
|
+
text2: '#475569',
|
|
27
|
+
text3: '#94A3B8',
|
|
28
|
+
border: '#E2E8F0',
|
|
29
|
+
radius: '10px',
|
|
30
|
+
radiusSm: '6px',
|
|
31
|
+
radiusLg: '14px',
|
|
32
|
+
radiusFull: '9999px',
|
|
33
|
+
shadow: '0 4px 12px rgba(0,0,0,0.10)',
|
|
34
|
+
font: "'Inter', system-ui, sans-serif",
|
|
35
|
+
} as const
|
|
36
|
+
|
|
37
|
+
export function useTokens() {
|
|
38
|
+
return tokens
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Output format
|
|
43
|
+
|
|
44
|
+
```vue
|
|
45
|
+
<script setup lang="ts">
|
|
46
|
+
import { ref, computed } from 'vue'
|
|
47
|
+
import { useTokens } from '@/composables/useTokens'
|
|
48
|
+
|
|
49
|
+
// props
|
|
50
|
+
interface Props {
|
|
51
|
+
title?: string
|
|
52
|
+
}
|
|
53
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
54
|
+
title: 'Default'
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
// emits
|
|
58
|
+
const emit = defineEmits<{
|
|
59
|
+
change: [value: string]
|
|
60
|
+
}>()
|
|
61
|
+
|
|
62
|
+
const t = useTokens()
|
|
63
|
+
const isOpen = ref(false)
|
|
64
|
+
</script>
|
|
65
|
+
|
|
66
|
+
<template>
|
|
67
|
+
<div :style="{ fontFamily: t.font, background: t.bg, color: t.text }">
|
|
68
|
+
<!-- template here -->
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Rules
|
|
74
|
+
|
|
75
|
+
- **`<script setup lang="ts">`** — always, never Options API
|
|
76
|
+
- **`:style` binding** — use object syntax `:style="{ color: t.primary }"`
|
|
77
|
+
- **No scoped CSS** — use inline `:style` with tokens
|
|
78
|
+
- **`v-for` with `:key`** on all lists
|
|
79
|
+
- **`@click`, `@input`** for events — not `onclick`
|
|
80
|
+
- **`defineProps`, `defineEmits`, `defineExpose`** — typed
|
|
81
|
+
- **Semantic HTML** — `<button>`, `<nav>`, `<header>`, `<ul>/<li>`
|
|
82
|
+
|
|
83
|
+
## Vue Router navigation
|
|
84
|
+
|
|
85
|
+
```vue
|
|
86
|
+
<template>
|
|
87
|
+
<RouterLink to="/dashboard" :style="{ color: t.primary }">
|
|
88
|
+
Dashboard
|
|
89
|
+
</RouterLink>
|
|
90
|
+
</template>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Example prompt
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Read AI-AGENT.md and skills/vue.md, then:
|
|
97
|
+
|
|
98
|
+
Design and build a mobile app login screen in Vue 3:
|
|
99
|
+
- Logo at top
|
|
100
|
+
- Email + password inputs
|
|
101
|
+
- "Sign in" button (full width, primary color)
|
|
102
|
+
- "Forgot password" link
|
|
103
|
+
- Divider + Google OAuth button
|
|
104
|
+
- "Don't have an account? Sign up" footer
|
|
105
|
+
|
|
106
|
+
Output:
|
|
107
|
+
- src/views/LoginView.vue
|
|
108
|
+
- src/components/ui/BaseButton.vue
|
|
109
|
+
- src/components/ui/BaseInput.vue
|
|
110
|
+
- src/composables/useTokens.ts
|
|
111
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { buildIndex, searchComponents } from '../lib/index.js'
|
|
2
|
+
import { copyFileSync, mkdirSync, existsSync } from 'fs'
|
|
3
|
+
import { join, basename } from 'path'
|
|
4
|
+
|
|
5
|
+
export function addCommand(query, options) {
|
|
6
|
+
const { output } = options
|
|
7
|
+
const all = buildIndex()
|
|
8
|
+
|
|
9
|
+
// Exact match first
|
|
10
|
+
let component = all.find(c => c.id === query)
|
|
11
|
+
|
|
12
|
+
// Fuzzy match if not found
|
|
13
|
+
if (!component) {
|
|
14
|
+
const results = searchComponents(all, query)
|
|
15
|
+
if (results.length === 0) {
|
|
16
|
+
console.log(`\n ✗ No component found for "${query}"\n`)
|
|
17
|
+
console.log(' Try: designkit search <query>')
|
|
18
|
+
console.log(' Or: designkit list\n')
|
|
19
|
+
process.exit(1)
|
|
20
|
+
}
|
|
21
|
+
if (results.length === 1) {
|
|
22
|
+
component = results[0]
|
|
23
|
+
} else {
|
|
24
|
+
console.log(`\n Multiple matches for "${query}":\n`)
|
|
25
|
+
for (const c of results.slice(0, 10)) {
|
|
26
|
+
console.log(` ${c.id}`)
|
|
27
|
+
}
|
|
28
|
+
console.log(`\n Be more specific: designkit add ${results[0].id}\n`)
|
|
29
|
+
process.exit(1)
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Ensure output dir exists
|
|
34
|
+
if (!existsSync(output)) {
|
|
35
|
+
mkdirSync(output, { recursive: true })
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const fileName = basename(component.file)
|
|
39
|
+
const dest = join(output, fileName)
|
|
40
|
+
copyFileSync(component.file, dest)
|
|
41
|
+
|
|
42
|
+
console.log()
|
|
43
|
+
console.log(` ✓ Added: ${component.name}`)
|
|
44
|
+
console.log(` From: ${component.relativePath}`)
|
|
45
|
+
console.log(` To: ${dest}`)
|
|
46
|
+
console.log()
|
|
47
|
+
console.log(` Open ${fileName} in a browser to preview.`)
|
|
48
|
+
console.log(` Make sure --kit-* tokens are defined in your CSS.`)
|
|
49
|
+
console.log(` Run "designkit init" to get a tokens.css file.`)
|
|
50
|
+
console.log()
|
|
51
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk'
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'
|
|
3
|
+
import { fileURLToPath } from 'url'
|
|
4
|
+
import { dirname, join, resolve, extname, basename } from 'path'
|
|
5
|
+
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
7
|
+
const ROOT = join(__dirname, '../../')
|
|
8
|
+
|
|
9
|
+
const FRAMEWORK_EXTENSIONS = {
|
|
10
|
+
react: '.jsx',
|
|
11
|
+
nextjs: '.jsx',
|
|
12
|
+
vue: '.vue',
|
|
13
|
+
svelte: '.svelte',
|
|
14
|
+
tailwind: '.html',
|
|
15
|
+
flutter: '.dart',
|
|
16
|
+
swiftui: '.swift',
|
|
17
|
+
'react-native': '.jsx'
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function loadSkill(name) {
|
|
21
|
+
const skillPath = join(ROOT, 'skills', `${name}.md`)
|
|
22
|
+
if (!existsSync(skillPath)) return ''
|
|
23
|
+
return readFileSync(skillPath, 'utf8')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function loadAgentContext() {
|
|
27
|
+
const agentPath = join(ROOT, 'AI-AGENT.md')
|
|
28
|
+
if (!existsSync(agentPath)) return ''
|
|
29
|
+
return readFileSync(agentPath, 'utf8')
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export async function convertCommand(file, options) {
|
|
33
|
+
const apiKey = process.env.ANTHROPIC_API_KEY
|
|
34
|
+
if (!apiKey) {
|
|
35
|
+
console.error('Error: ANTHROPIC_API_KEY environment variable is required')
|
|
36
|
+
console.error('Set it with: export ANTHROPIC_API_KEY=your_key_here')
|
|
37
|
+
process.exit(1)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const framework = options.to
|
|
41
|
+
if (!framework) {
|
|
42
|
+
console.error('Error: --to <framework> is required')
|
|
43
|
+
console.error('Available: react, nextjs, vue, svelte, tailwind, flutter, swiftui, react-native')
|
|
44
|
+
process.exit(1)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (!FRAMEWORK_EXTENSIONS[framework]) {
|
|
48
|
+
console.error(`Error: Unknown framework "${framework}"`)
|
|
49
|
+
console.error(`Available: ${Object.keys(FRAMEWORK_EXTENSIONS).join(', ')}`)
|
|
50
|
+
process.exit(1)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const inputPath = resolve(file)
|
|
54
|
+
if (!existsSync(inputPath)) {
|
|
55
|
+
console.error(`Error: File not found: ${file}`)
|
|
56
|
+
process.exit(1)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const htmlContent = readFileSync(inputPath, 'utf8')
|
|
60
|
+
const agentContext = loadAgentContext()
|
|
61
|
+
const skillContent = loadSkill(framework)
|
|
62
|
+
|
|
63
|
+
if (!skillContent) {
|
|
64
|
+
console.error(`Error: Skill file not found: skills/${framework}.md`)
|
|
65
|
+
process.exit(1)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const systemPrompt = [
|
|
69
|
+
agentContext,
|
|
70
|
+
'---',
|
|
71
|
+
`# Active Skill: ${framework} (Convert mode)`,
|
|
72
|
+
skillContent
|
|
73
|
+
].join('\n\n')
|
|
74
|
+
|
|
75
|
+
const userMessage = `Convert the following HTML component to ${framework}.\n\nFollow the Convert mode instructions in the skill above.\n\n\`\`\`html\n${htmlContent}\n\`\`\``
|
|
76
|
+
|
|
77
|
+
const client = new Anthropic({ apiKey })
|
|
78
|
+
|
|
79
|
+
console.error(`\nConverting: ${file}`)
|
|
80
|
+
console.error(`Framework: ${framework}\n`)
|
|
81
|
+
|
|
82
|
+
// Determine output path
|
|
83
|
+
let outputPath = options.output
|
|
84
|
+
if (!outputPath) {
|
|
85
|
+
const name = basename(inputPath, extname(inputPath))
|
|
86
|
+
const ext = FRAMEWORK_EXTENSIONS[framework]
|
|
87
|
+
outputPath = resolve(dirname(inputPath), `${name}${ext}`)
|
|
88
|
+
} else {
|
|
89
|
+
outputPath = resolve(outputPath)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const dir = dirname(outputPath)
|
|
93
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
|
|
94
|
+
|
|
95
|
+
let fullOutput = ''
|
|
96
|
+
|
|
97
|
+
const stream = client.messages.stream({
|
|
98
|
+
model: 'claude-opus-4-6',
|
|
99
|
+
max_tokens: 8000,
|
|
100
|
+
thinking: { type: 'adaptive' },
|
|
101
|
+
system: systemPrompt,
|
|
102
|
+
messages: [
|
|
103
|
+
{ role: 'user', content: userMessage }
|
|
104
|
+
]
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
stream.on('text', (text) => {
|
|
108
|
+
process.stdout.write(text)
|
|
109
|
+
fullOutput += text
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
await stream.finalMessage()
|
|
113
|
+
|
|
114
|
+
// Extract code block if present
|
|
115
|
+
const codeMatch = fullOutput.match(/```(?:\w+)?\n([\s\S]*?)```/)
|
|
116
|
+
const codeToWrite = codeMatch ? codeMatch[1] : fullOutput
|
|
117
|
+
|
|
118
|
+
writeFileSync(outputPath, codeToWrite, 'utf8')
|
|
119
|
+
console.error(`\n\nSaved to: ${outputPath}`)
|
|
120
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk'
|
|
2
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'
|
|
3
|
+
import { fileURLToPath } from 'url'
|
|
4
|
+
import { dirname, join, resolve } from 'path'
|
|
5
|
+
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url))
|
|
7
|
+
const ROOT = join(__dirname, '../../')
|
|
8
|
+
|
|
9
|
+
function loadSkill(name) {
|
|
10
|
+
const skillPath = join(ROOT, 'skills', `${name}.md`)
|
|
11
|
+
if (!existsSync(skillPath)) return ''
|
|
12
|
+
return readFileSync(skillPath, 'utf8')
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function loadAgentContext() {
|
|
16
|
+
const agentPath = join(ROOT, 'AI-AGENT.md')
|
|
17
|
+
if (!existsSync(agentPath)) return ''
|
|
18
|
+
return readFileSync(agentPath, 'utf8')
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function designCommand(prompt, options) {
|
|
22
|
+
const apiKey = process.env.ANTHROPIC_API_KEY
|
|
23
|
+
if (!apiKey) {
|
|
24
|
+
console.error('Error: ANTHROPIC_API_KEY environment variable is required')
|
|
25
|
+
console.error('Set it with: export ANTHROPIC_API_KEY=your_key_here')
|
|
26
|
+
process.exit(1)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const skill = options.skill || 'design'
|
|
30
|
+
const validSkills = ['design', 'react', 'nextjs', 'vue', 'svelte', 'tailwind', 'flutter', 'swiftui', 'react-native']
|
|
31
|
+
|
|
32
|
+
if (!validSkills.includes(skill)) {
|
|
33
|
+
console.error(`Error: Unknown skill "${skill}". Available: ${validSkills.join(', ')}`)
|
|
34
|
+
process.exit(1)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const agentContext = loadAgentContext()
|
|
38
|
+
const skillContent = loadSkill(skill)
|
|
39
|
+
|
|
40
|
+
if (!skillContent) {
|
|
41
|
+
console.error(`Error: Skill file not found: skills/${skill}.md`)
|
|
42
|
+
process.exit(1)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const systemPrompt = [
|
|
46
|
+
agentContext,
|
|
47
|
+
'---',
|
|
48
|
+
`# Active Skill: ${skill}`,
|
|
49
|
+
skillContent
|
|
50
|
+
].join('\n\n')
|
|
51
|
+
|
|
52
|
+
const client = new Anthropic({ apiKey })
|
|
53
|
+
|
|
54
|
+
console.error(`\nDesigning with skill: ${skill}`)
|
|
55
|
+
console.error(`Prompt: ${prompt}\n`)
|
|
56
|
+
|
|
57
|
+
const outputFile = options.output
|
|
58
|
+
|
|
59
|
+
if (outputFile) {
|
|
60
|
+
const dir = resolve(dirname(outputFile))
|
|
61
|
+
if (!existsSync(dir)) mkdirSync(dir, { recursive: true })
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let fullOutput = ''
|
|
65
|
+
|
|
66
|
+
const stream = client.messages.stream({
|
|
67
|
+
model: 'claude-opus-4-6',
|
|
68
|
+
max_tokens: 8000,
|
|
69
|
+
thinking: { type: 'adaptive' },
|
|
70
|
+
system: systemPrompt,
|
|
71
|
+
messages: [
|
|
72
|
+
{ role: 'user', content: prompt }
|
|
73
|
+
]
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
stream.on('text', (text) => {
|
|
77
|
+
process.stdout.write(text)
|
|
78
|
+
fullOutput += text
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
await stream.finalMessage()
|
|
82
|
+
|
|
83
|
+
if (outputFile) {
|
|
84
|
+
writeFileSync(resolve(outputFile), fullOutput, 'utf8')
|
|
85
|
+
console.error(`\n\nSaved to: ${outputFile}`)
|
|
86
|
+
} else {
|
|
87
|
+
process.stdout.write('\n')
|
|
88
|
+
}
|
|
89
|
+
}
|