@reinvented/design 0.4.0 → 1.1.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 +1 -1
- package/SKILL.md +214 -0
- package/package.json +58 -23
- package/skills/apps/analytics.md +103 -0
- package/skills/apps/booking-scheduling.md +97 -0
- package/skills/apps/content-management.md +52 -0
- package/skills/apps/crm.md +80 -0
- package/skills/apps/e-commerce.md +109 -0
- package/skills/apps/education.md +79 -0
- package/skills/apps/finance.md +68 -0
- package/skills/apps/health-fitness.md +72 -0
- package/skills/apps/marketplace.md +99 -0
- package/skills/apps/messaging.md +84 -0
- package/skills/apps/portfolio-personal.md +90 -0
- package/skills/apps/project-management.md +95 -0
- package/skills/apps/saas-dashboard.md +104 -0
- package/skills/apps/social-platform.md +50 -0
- package/skills/blocks/auth.md +106 -0
- package/skills/blocks/communication.md +98 -0
- package/skills/blocks/content.md +107 -0
- package/skills/blocks/data-management.md +109 -0
- package/skills/blocks/data-viz.md +92 -0
- package/skills/blocks/ecommerce.md +126 -0
- package/skills/blocks/feedback.md +97 -0
- package/skills/blocks/filtering.md +127 -0
- package/skills/blocks/marketing.md +136 -0
- package/skills/blocks/media.md +102 -0
- package/skills/blocks/navigation.md +136 -0
- package/skills/blocks/onboarding.md +75 -0
- package/skills/blocks/profiles.md +131 -0
- package/skills/blocks/scheduling.md +117 -0
- package/skills/blocks/settings.md +102 -0
- package/skills/components/advanced-components.md +142 -0
- package/skills/components/avatar.md +92 -0
- package/skills/components/badge.md +105 -0
- package/skills/components/button.md +87 -0
- package/skills/components/card.md +144 -0
- package/skills/components/chart.md +88 -0
- package/skills/components/dialog.md +109 -0
- package/skills/components/dropdown-menu.md +117 -0
- package/skills/components/extended-components.md +187 -0
- package/skills/components/feedback.md +165 -0
- package/skills/components/form.md +112 -0
- package/skills/components/input.md +107 -0
- package/skills/components/map.md +53 -0
- package/skills/components/navigation.md +73 -0
- package/skills/components/overlay.md +77 -0
- package/skills/components/page-header.md +51 -0
- package/skills/components/select.md +175 -0
- package/skills/components/table.md +102 -0
- package/skills/components/tabs.md +105 -0
- package/skills/components/utilities.md +138 -0
- package/skills/devices/desktop.md +43 -0
- package/skills/devices/mobile.md +77 -0
- package/skills/foundation/design-principles.md +77 -0
- package/skills/foundation/design-tokens.md +121 -0
- package/skills/foundation/mockup-generation.md +118 -0
- package/skills/foundation/rules.md +54 -0
- package/skills/foundation/tailwind-usage.md +204 -0
- package/skills/layouts/dashboard.md +71 -0
- package/skills/layouts/full-page-form.md +75 -0
- package/skills/layouts/list-detail.md +70 -0
- package/skills/layouts/marketing.md +70 -0
- package/skills/layouts/responsive.md +67 -0
- package/skills/layouts/settings-page.md +106 -0
- package/skills/layouts/sidebar.md +73 -0
- package/skills/layouts/topbar.md +68 -0
- package/skills/patterns/auth.md +131 -0
- package/skills/patterns/content-display.md +164 -0
- package/skills/patterns/dashboards.md +104 -0
- package/skills/patterns/data-tables.md +113 -0
- package/skills/patterns/empty-states.md +71 -0
- package/skills/patterns/error-states.md +73 -0
- package/skills/patterns/forms.md +136 -0
- package/skills/patterns/loading-states.md +92 -0
- package/skills/patterns/navigation.md +113 -0
- package/skills/patterns/notifications.md +91 -0
- package/skills/patterns/onboarding.md +42 -0
- package/skills/patterns/search.md +55 -0
- package/skills/patterns/settings.md +132 -0
- package/skills/patterns/user-profiles.md +67 -0
- package/skills/personas/business-operator.md +114 -0
- package/skills/personas/consumer-casual.md +60 -0
- package/skills/personas/consumer-power-user.md +109 -0
- package/skills/personas/creative-professional.md +109 -0
- package/skills/personas/enterprise-admin.md +134 -0
- package/skills/visual/color-usage.md +62 -0
- package/skills/visual/dark-mode.md +50 -0
- package/skills/visual/polish-techniques.md +101 -0
- package/skills/visual/spacing-composition.md +69 -0
- package/skills/visual/transitions-animations.md +66 -0
- package/skills/visual/typography-hierarchy.md +66 -0
- package/src/components/blocks/auth/auth-card/AuthCard.tsx +62 -0
- package/src/components/blocks/auth/auth-card/index.ts +1 -0
- package/src/components/blocks/auth/index.ts +3 -0
- package/src/components/blocks/auth/social-login/SocialLoginGroup.tsx +75 -0
- package/src/components/blocks/auth/social-login/index.ts +1 -0
- package/src/components/blocks/auth/two-factor/TwoFactorForm.tsx +59 -0
- package/src/components/blocks/auth/two-factor/index.ts +1 -0
- package/src/components/blocks/communication/activity-item/ActivityItem.tsx +17 -0
- package/src/components/blocks/communication/activity-item/ActivityItemAvatar.tsx +21 -0
- package/src/components/blocks/communication/activity-item/ActivityItemContent.tsx +16 -0
- package/src/components/blocks/communication/activity-item/index.ts +3 -0
- package/src/components/blocks/communication/chat-bubble/ChatBubble.tsx +21 -0
- package/src/components/blocks/communication/chat-bubble/ChatBubbleAvatar.tsx +19 -0
- package/src/components/blocks/communication/chat-bubble/ChatBubbleMessage.tsx +35 -0
- package/src/components/blocks/communication/chat-bubble/ChatBubbleTimestamp.tsx +15 -0
- package/src/components/blocks/communication/chat-bubble/index.ts +4 -0
- package/src/components/blocks/communication/index.ts +2 -0
- package/src/components/blocks/content/article-header/ArticleHeader.tsx +73 -0
- package/src/components/blocks/content/article-header/index.ts +1 -0
- package/src/components/blocks/content/author-card/AuthorCard.tsx +46 -0
- package/src/components/blocks/content/author-card/index.ts +1 -0
- package/src/components/blocks/content/index.ts +3 -0
- package/src/components/blocks/content/rich-text/RichTextContent.tsx +27 -0
- package/src/components/blocks/content/rich-text/index.ts +1 -0
- package/src/components/blocks/data-management/index.ts +2 -0
- package/src/components/blocks/data-management/kanban/KanbanBoard.tsx +10 -0
- package/src/components/blocks/data-management/kanban/KanbanCard.tsx +102 -0
- package/src/components/blocks/data-management/kanban/KanbanColumn.tsx +41 -0
- package/src/components/blocks/data-management/kanban/index.ts +3 -0
- package/src/components/blocks/data-management/tree-view/TreeItem.tsx +68 -0
- package/src/components/blocks/data-management/tree-view/TreeView.tsx +10 -0
- package/src/components/blocks/data-management/tree-view/index.ts +2 -0
- package/src/components/blocks/data-viz/financial-ticker/FinancialTicker.tsx +35 -0
- package/src/components/blocks/data-viz/financial-ticker/index.ts +1 -0
- package/src/components/blocks/data-viz/index.ts +3 -0
- package/src/components/blocks/data-viz/kpi-card/KpiCard.tsx +61 -0
- package/src/components/blocks/data-viz/kpi-card/index.ts +1 -0
- package/src/components/blocks/data-viz/stat-grid/StatGrid.tsx +28 -0
- package/src/components/blocks/data-viz/stat-grid/index.ts +1 -0
- package/src/components/blocks/ecommerce/index.ts +3 -0
- package/src/components/blocks/ecommerce/pricing-tier/PricingFeatureList.tsx +27 -0
- package/src/components/blocks/ecommerce/pricing-tier/PricingHeader.tsx +25 -0
- package/src/components/blocks/ecommerce/pricing-tier/PricingTier.tsx +31 -0
- package/src/components/blocks/ecommerce/pricing-tier/index.ts +3 -0
- package/src/components/blocks/ecommerce/product-card/ProductCard.tsx +17 -0
- package/src/components/blocks/ecommerce/product-card/ProductCardContent.tsx +15 -0
- package/src/components/blocks/ecommerce/product-card/ProductCardImage.tsx +20 -0
- package/src/components/blocks/ecommerce/product-card/ProductCardPrice.tsx +20 -0
- package/src/components/blocks/ecommerce/product-card/index.ts +4 -0
- package/src/components/blocks/ecommerce/rating-summary/RatingStars.tsx +32 -0
- package/src/components/blocks/ecommerce/rating-summary/index.ts +1 -0
- package/src/components/blocks/feedback/empty-state/EmptyState.tsx +53 -0
- package/src/components/blocks/feedback/empty-state/index.ts +1 -0
- package/src/components/blocks/feedback/error-state/ErrorState.tsx +50 -0
- package/src/components/blocks/feedback/error-state/index.ts +1 -0
- package/src/components/blocks/feedback/index.ts +3 -0
- package/src/components/blocks/feedback/not-found/NotFoundState.tsx +47 -0
- package/src/components/blocks/feedback/not-found/index.ts +1 -0
- package/src/components/blocks/filtering/faceted-sidebar/FacetedGroup.tsx +32 -0
- package/src/components/blocks/filtering/faceted-sidebar/FacetedSidebar.tsx +26 -0
- package/src/components/blocks/filtering/faceted-sidebar/index.ts +2 -0
- package/src/components/blocks/filtering/filter-bar/FilterBar.tsx +85 -0
- package/src/components/blocks/filtering/filter-bar/index.ts +1 -0
- package/src/components/blocks/filtering/index.ts +3 -0
- package/src/components/blocks/filtering/search-result/SearchResultItem.tsx +70 -0
- package/src/components/blocks/filtering/search-result/index.ts +1 -0
- package/src/components/blocks/index.ts +21 -0
- package/src/components/blocks/marketing/cta-block/CtaBlock.tsx +80 -0
- package/src/components/blocks/marketing/cta-block/index.ts +1 -0
- package/src/components/blocks/marketing/feature-grid/FeatureGrid.tsx +47 -0
- package/src/components/blocks/marketing/feature-grid/index.ts +1 -0
- package/src/components/blocks/marketing/hero-section/HeroSection.tsx +89 -0
- package/src/components/blocks/marketing/hero-section/index.ts +1 -0
- package/src/components/blocks/marketing/index.ts +4 -0
- package/src/components/blocks/marketing/testimonial-card/TestimonialCard.tsx +71 -0
- package/src/components/blocks/marketing/testimonial-card/index.ts +1 -0
- package/src/components/blocks/media/call-controls/CallControlButton.tsx +52 -0
- package/src/components/blocks/media/call-controls/CallControls.tsx +10 -0
- package/src/components/blocks/media/call-controls/index.ts +2 -0
- package/src/components/blocks/media/index.ts +2 -0
- package/src/components/blocks/media/media-player/MediaPlayer.tsx +20 -0
- package/src/components/blocks/media/media-player/MediaPlayerControls.tsx +16 -0
- package/src/components/blocks/media/media-player/MediaPlayerScrubber.tsx +29 -0
- package/src/components/blocks/media/media-player/MediaPlayerVideo.tsx +25 -0
- package/src/components/blocks/media/media-player/index.ts +4 -0
- package/src/components/blocks/navigation/app-sidebar/AppSidebar.tsx +32 -0
- package/src/components/blocks/navigation/app-sidebar/NavItem.tsx +43 -0
- package/src/components/blocks/navigation/app-sidebar/index.ts +2 -0
- package/src/components/blocks/navigation/context-switcher/ContextSwitcher.tsx +77 -0
- package/src/components/blocks/navigation/context-switcher/index.ts +1 -0
- package/src/components/blocks/navigation/index.ts +3 -0
- package/src/components/blocks/navigation/top-navbar/TopNavbar.tsx +47 -0
- package/src/components/blocks/navigation/top-navbar/index.ts +1 -0
- package/src/components/blocks/onboarding/index.ts +2 -0
- package/src/components/blocks/onboarding/onboarding-welcome/OnboardingWelcome.tsx +74 -0
- package/src/components/blocks/onboarding/onboarding-welcome/index.ts +1 -0
- package/src/components/blocks/onboarding/step-wizard/StepWizard.tsx +72 -0
- package/src/components/blocks/onboarding/step-wizard/index.ts +1 -0
- package/src/components/blocks/profiles/connection-list/ConnectionItem.tsx +35 -0
- package/src/components/blocks/profiles/connection-list/ConnectionList.tsx +16 -0
- package/src/components/blocks/profiles/connection-list/index.ts +2 -0
- package/src/components/blocks/profiles/index.ts +3 -0
- package/src/components/blocks/profiles/profile-header/ProfileHeader.tsx +88 -0
- package/src/components/blocks/profiles/profile-header/index.ts +1 -0
- package/src/components/blocks/profiles/profile-stats/ProfileStats.tsx +20 -0
- package/src/components/blocks/profiles/profile-stats/index.ts +1 -0
- package/src/components/blocks/scheduling/booking-slot/BookingSlot.tsx +44 -0
- package/src/components/blocks/scheduling/booking-slot/index.ts +1 -0
- package/src/components/blocks/scheduling/event-card/EventCard.tsx +85 -0
- package/src/components/blocks/scheduling/event-card/index.ts +1 -0
- package/src/components/blocks/scheduling/index.ts +3 -0
- package/src/components/blocks/scheduling/timeline-row/TimelineRow.tsx +82 -0
- package/src/components/blocks/scheduling/timeline-row/index.ts +1 -0
- package/src/components/blocks/settings/billing-usage/BillingUsage.tsx +49 -0
- package/src/components/blocks/settings/billing-usage/index.ts +1 -0
- package/src/components/blocks/settings/index.ts +3 -0
- package/src/components/blocks/settings/integration-card/IntegrationCard.tsx +62 -0
- package/src/components/blocks/settings/integration-card/index.ts +1 -0
- package/src/components/blocks/settings/settings-section/SettingsSection.tsx +23 -0
- package/src/components/blocks/settings/settings-section/index.ts +1 -0
- package/src/components/ui/accordion.tsx +56 -0
- package/src/components/ui/alert-dialog.tsx +141 -0
- package/src/components/ui/alert.tsx +59 -0
- package/src/components/ui/aspect-ratio.tsx +5 -0
- package/src/components/ui/avatar.tsx +50 -0
- package/src/components/ui/badge.tsx +36 -0
- package/src/components/ui/breadcrumb.tsx +115 -0
- package/src/components/ui/button.tsx +56 -0
- package/src/components/ui/calendar.tsx +211 -0
- package/src/components/ui/card.tsx +79 -0
- package/src/components/ui/carousel.tsx +262 -0
- package/src/components/ui/chart.tsx +367 -0
- package/src/components/ui/checkbox.tsx +28 -0
- package/src/components/ui/collapsible.tsx +11 -0
- package/src/components/ui/command.tsx +153 -0
- package/src/components/ui/component-placeholder.tsx +38 -0
- package/src/components/ui/context-menu.tsx +198 -0
- package/src/components/ui/dialog.tsx +122 -0
- package/src/components/ui/drawer.tsx +116 -0
- package/src/components/ui/dropdown-menu.tsx +200 -0
- package/src/components/ui/form.tsx +176 -0
- package/src/components/ui/hover-card.tsx +27 -0
- package/src/components/ui/input-otp.tsx +69 -0
- package/src/components/ui/input.tsx +22 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/menubar.tsx +256 -0
- package/src/components/ui/navigation-menu.tsx +128 -0
- package/src/components/ui/pagination.tsx +117 -0
- package/src/components/ui/popover.tsx +29 -0
- package/src/components/ui/progress.tsx +28 -0
- package/src/components/ui/radio-group.tsx +42 -0
- package/src/components/ui/resizable.tsx +45 -0
- package/src/components/ui/scroll-area.tsx +46 -0
- package/src/components/ui/select.tsx +160 -0
- package/src/components/ui/separator.tsx +29 -0
- package/src/components/ui/sheet.tsx +140 -0
- package/src/components/ui/skeleton.tsx +15 -0
- package/src/components/ui/slider.tsx +26 -0
- package/src/components/ui/sonner.tsx +45 -0
- package/src/components/ui/switch.tsx +27 -0
- package/src/components/ui/table.tsx +117 -0
- package/src/components/ui/tabs.tsx +53 -0
- package/src/components/ui/textarea.tsx +22 -0
- package/src/components/ui/toast.tsx +127 -0
- package/src/components/ui/toaster.tsx +33 -0
- package/src/components/ui/toggle-group.tsx +61 -0
- package/src/components/ui/toggle.tsx +45 -0
- package/src/components/ui/tooltip.tsx +28 -0
- package/src/hooks/use-toast.ts +194 -0
- package/src/index.ts +53 -56
- package/src/styles/tokens.css +30 -14
- package/tailwind.config.js +120 -98
- package/tsconfig.json +2 -2
- package/DESIGN_GUIDE.md +0 -148
- package/src/components/ui/accordion/Accordion.vue +0 -13
- package/src/components/ui/accordion/AccordionContent.vue +0 -20
- package/src/components/ui/accordion/AccordionItem.vue +0 -15
- package/src/components/ui/accordion/AccordionTrigger.vue +0 -25
- package/src/components/ui/accordion/index.ts +0 -4
- package/src/components/ui/alert/Alert.vue +0 -38
- package/src/components/ui/alert/AlertDescription.vue +0 -12
- package/src/components/ui/alert/AlertTitle.vue +0 -12
- package/src/components/ui/alert/index.ts +0 -3
- package/src/components/ui/alert-dialog/AlertDialog.vue +0 -13
- package/src/components/ui/alert-dialog/AlertDialogAction.vue +0 -21
- package/src/components/ui/alert-dialog/AlertDialogCancel.vue +0 -21
- package/src/components/ui/alert-dialog/AlertDialogContent.vue +0 -39
- package/src/components/ui/alert-dialog/AlertDialogDescription.vue +0 -15
- package/src/components/ui/alert-dialog/AlertDialogFooter.vue +0 -12
- package/src/components/ui/alert-dialog/AlertDialogHeader.vue +0 -12
- package/src/components/ui/alert-dialog/AlertDialogTitle.vue +0 -15
- package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -11
- package/src/components/ui/alert-dialog/index.ts +0 -9
- package/src/components/ui/avatar/Avatar.vue +0 -14
- package/src/components/ui/avatar/index.ts +0 -1
- package/src/components/ui/badge/Badge.vue +0 -27
- package/src/components/ui/badge/index.ts +0 -1
- package/src/components/ui/breadcrumb/Breadcrumb.vue +0 -6
- package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -12
- package/src/components/ui/breadcrumb/BreadcrumbItem.vue +0 -6
- package/src/components/ui/breadcrumb/BreadcrumbLink.vue +0 -20
- package/src/components/ui/breadcrumb/BreadcrumbList.vue +0 -6
- package/src/components/ui/breadcrumb/BreadcrumbPage.vue +0 -6
- package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -11
- package/src/components/ui/breadcrumb/index.ts +0 -7
- package/src/components/ui/button/Button.vue +0 -65
- package/src/components/ui/button/index.ts +0 -1
- package/src/components/ui/card/Card.vue +0 -13
- package/src/components/ui/card/CardContent.vue +0 -7
- package/src/components/ui/card/CardDescription.vue +0 -7
- package/src/components/ui/card/CardFooter.vue +0 -7
- package/src/components/ui/card/CardHeader.vue +0 -9
- package/src/components/ui/card/CardTitle.vue +0 -7
- package/src/components/ui/card/index.ts +0 -6
- package/src/components/ui/checkbox/Checkbox.vue +0 -25
- package/src/components/ui/checkbox/index.ts +0 -1
- package/src/components/ui/collapsible/Collapsible.vue +0 -13
- package/src/components/ui/collapsible/index.ts +0 -2
- package/src/components/ui/command/Command.vue +0 -16
- package/src/components/ui/command/CommandEmpty.vue +0 -5
- package/src/components/ui/command/CommandGroup.vue +0 -22
- package/src/components/ui/command/CommandInput.vue +0 -21
- package/src/components/ui/command/CommandItem.vue +0 -22
- package/src/components/ui/command/CommandList.vue +0 -17
- package/src/components/ui/command/CommandSeparator.vue +0 -5
- package/src/components/ui/command/index.ts +0 -7
- package/src/components/ui/context-menu/ContextMenuContent.vue +0 -24
- package/src/components/ui/context-menu/ContextMenuItem.vue +0 -16
- package/src/components/ui/context-menu/ContextMenuLabel.vue +0 -9
- package/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -9
- package/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -14
- package/src/components/ui/context-menu/index.ts +0 -9
- package/src/components/ui/dialog/Dialog.vue +0 -14
- package/src/components/ui/dialog/DialogClose.vue +0 -12
- package/src/components/ui/dialog/DialogContent.vue +0 -48
- package/src/components/ui/dialog/DialogDescription.vue +0 -23
- package/src/components/ui/dialog/DialogFooter.vue +0 -12
- package/src/components/ui/dialog/DialogHeader.vue +0 -12
- package/src/components/ui/dialog/DialogScrollContent.vue +0 -47
- package/src/components/ui/dialog/DialogTitle.vue +0 -23
- package/src/components/ui/dialog/DialogTrigger.vue +0 -12
- package/src/components/ui/dialog/index.ts +0 -9
- package/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -13
- package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -28
- package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -33
- package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
- package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -27
- package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -23
- package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -13
- package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -27
- package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -13
- package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -12
- package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -13
- package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -27
- package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -23
- package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -11
- package/src/components/ui/dropdown-menu/index.ts +0 -14
- package/src/components/ui/form/FormControl.vue +0 -3
- package/src/components/ui/form/FormDescription.vue +0 -6
- package/src/components/ui/form/FormItem.vue +0 -6
- package/src/components/ui/form/FormLabel.vue +0 -10
- package/src/components/ui/form/FormMessage.vue +0 -10
- package/src/components/ui/form/index.ts +0 -9
- package/src/components/ui/hover-card/HoverCard.vue +0 -13
- package/src/components/ui/hover-card/HoverCardContent.vue +0 -26
- package/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
- package/src/components/ui/hover-card/index.ts +0 -3
- package/src/components/ui/input/Input.vue +0 -23
- package/src/components/ui/input/index.ts +0 -1
- package/src/components/ui/label/Label.vue +0 -18
- package/src/components/ui/label/index.ts +0 -1
- package/src/components/ui/lib/utils.ts +0 -2
- package/src/components/ui/menubar/MenubarContent.vue +0 -15
- package/src/components/ui/menubar/MenubarItem.vue +0 -13
- package/src/components/ui/menubar/MenubarTrigger.vue +0 -13
- package/src/components/ui/menubar/index.ts +0 -5
- package/src/components/ui/navigation-menu/NavigationMenuContent.vue +0 -14
- package/src/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -15
- package/src/components/ui/navigation-menu/index.ts +0 -4
- package/src/components/ui/pagination/PaginationContent.vue +0 -13
- package/src/components/ui/pagination/PaginationEllipsis.vue +0 -12
- package/src/components/ui/pagination/PaginationNext.vue +0 -14
- package/src/components/ui/pagination/PaginationPrev.vue +0 -14
- package/src/components/ui/pagination/index.ts +0 -6
- package/src/components/ui/popover/Popover.vue +0 -13
- package/src/components/ui/popover/PopoverContent.vue +0 -27
- package/src/components/ui/popover/PopoverTrigger.vue +0 -11
- package/src/components/ui/popover/index.ts +0 -3
- package/src/components/ui/progress/Progress.vue +0 -21
- package/src/components/ui/progress/index.ts +0 -1
- package/src/components/ui/radio-group/RadioGroup.vue +0 -16
- package/src/components/ui/radio-group/RadioGroupItem.vue +0 -24
- package/src/components/ui/radio-group/index.ts +0 -2
- package/src/components/ui/scroll-area/ScrollArea.vue +0 -13
- package/src/components/ui/scroll-area/index.ts +0 -1
- package/src/components/ui/select/Select.vue +0 -13
- package/src/components/ui/select/SelectContent.vue +0 -40
- package/src/components/ui/select/SelectGroup.vue +0 -15
- package/src/components/ui/select/SelectItem.vue +0 -30
- package/src/components/ui/select/SelectLabel.vue +0 -15
- package/src/components/ui/select/SelectSeparator.vue +0 -13
- package/src/components/ui/select/SelectTrigger.vue +0 -23
- package/src/components/ui/select/SelectValue.vue +0 -11
- package/src/components/ui/select/index.ts +0 -8
- package/src/components/ui/separator/Separator.vue +0 -16
- package/src/components/ui/separator/index.ts +0 -1
- package/src/components/ui/sheet/Sheet.vue +0 -13
- package/src/components/ui/sheet/SheetClose.vue +0 -11
- package/src/components/ui/sheet/SheetContent.vue +0 -65
- package/src/components/ui/sheet/SheetDescription.vue +0 -15
- package/src/components/ui/sheet/SheetFooter.vue +0 -12
- package/src/components/ui/sheet/SheetHeader.vue +0 -12
- package/src/components/ui/sheet/SheetTitle.vue +0 -15
- package/src/components/ui/sheet/SheetTrigger.vue +0 -11
- package/src/components/ui/sheet/index.ts +0 -8
- package/src/components/ui/skeleton/Skeleton.vue +0 -9
- package/src/components/ui/skeleton/index.ts +0 -1
- package/src/components/ui/slider/Slider.vue +0 -26
- package/src/components/ui/slider/index.ts +0 -1
- package/src/components/ui/switch/Switch.vue +0 -24
- package/src/components/ui/switch/index.ts +0 -1
- package/src/components/ui/table/Table.vue +0 -13
- package/src/components/ui/table/TableBody.vue +0 -6
- package/src/components/ui/table/TableCaption.vue +0 -6
- package/src/components/ui/table/TableCell.vue +0 -6
- package/src/components/ui/table/TableFooter.vue +0 -6
- package/src/components/ui/table/TableHead.vue +0 -6
- package/src/components/ui/table/TableHeader.vue +0 -6
- package/src/components/ui/table/TableRow.vue +0 -6
- package/src/components/ui/table/index.ts +0 -8
- package/src/components/ui/tabs/Tabs.vue +0 -13
- package/src/components/ui/tabs/TabsContent.vue +0 -21
- package/src/components/ui/tabs/TabsList.vue +0 -21
- package/src/components/ui/tabs/TabsTrigger.vue +0 -21
- package/src/components/ui/tabs/index.ts +0 -4
- package/src/components/ui/textarea/Textarea.vue +0 -29
- package/src/components/ui/textarea/index.ts +0 -1
- package/src/components/ui/toggle/Toggle.vue +0 -40
- package/src/components/ui/toggle/index.ts +0 -1
- package/src/components/ui/toggle-group/ToggleGroup.vue +0 -16
- package/src/components/ui/toggle-group/ToggleGroupItem.vue +0 -21
- package/src/components/ui/toggle-group/index.ts +0 -2
- package/src/components/ui/tooltip/Tooltip.vue +0 -13
- package/src/components/ui/tooltip/TooltipContent.vue +0 -27
- package/src/components/ui/tooltip/TooltipProvider.vue +0 -12
- package/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
- package/src/components/ui/tooltip/index.ts +0 -4
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# App Type: E-Commerce
|
|
2
|
+
|
|
3
|
+
Product catalogs, shopping carts, checkout flows, buyer account tracking, and storefronts.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
- **Storefront / Buyer View**: `layouts/topbar.md` — top navigation with prominent category mega-menus, global search, and a persistent cart icon.
|
|
7
|
+
- **Admin / Seller View**: `layouts/sidebar.md` — sidebar focused on Inventory, Orders, Customers, and Settings.
|
|
8
|
+
|
|
9
|
+
## Key Screens
|
|
10
|
+
1. **Product Grid / Category List** — Filter sidebar on the left, responsive product grid on the right.
|
|
11
|
+
2. **Product Detail Page (PDP)** — High quality masonry or carousel imagery on the left, purchase actions and variants on the right.
|
|
12
|
+
3. **Cart Slide-out** — A `<Sheet>` (sidebar drawer) pattern for quick cart edits without leaving the shopping context.
|
|
13
|
+
4. **Checkout Flow** — Multi-step wizard layout focused purely on conversion (no top nav distractions).
|
|
14
|
+
|
|
15
|
+
## Component Composition Example
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
<!-- Storefront Category View -->
|
|
19
|
+
<div className="max-w-7xl mx-auto px-6 py-8">
|
|
20
|
+
|
|
21
|
+
<!-- Breadcrumbs & Title -->
|
|
22
|
+
<div className="mb-8">
|
|
23
|
+
<div className="text-sm text-muted-foreground flex gap-2 items-center mb-2">
|
|
24
|
+
Home <ChevronRight className="w-3 h-3" /> Electronics <ChevronRight className="w-3 h-3" /> Audio
|
|
25
|
+
</div>
|
|
26
|
+
<h1 className="text-3xl font-bold">Wireless Audio</h1>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div className="grid grid-cols-1 lg:grid-cols-4 gap-8">
|
|
30
|
+
<!-- Filters Sidebar -->
|
|
31
|
+
<aside className="space-y-6 hidden lg:block">
|
|
32
|
+
<div>
|
|
33
|
+
<h3 className="font-semibold mb-3">Categories</h3>
|
|
34
|
+
<div className="space-y-2 text-sm text-muted-foreground">
|
|
35
|
+
<div className="flex items-center justify-between cursor-pointer hover:text-foreground">
|
|
36
|
+
<span>Headphones</span> <span>(24)</span>
|
|
37
|
+
</div>
|
|
38
|
+
<div className="flex items-center justify-between cursor-pointer text-foreground font-medium">
|
|
39
|
+
<span>Earbuds</span> <span>(12)</span>
|
|
40
|
+
</div>
|
|
41
|
+
<div className="flex items-center justify-between cursor-pointer hover:text-foreground">
|
|
42
|
+
<span>Speakers</span> <span>(8)</span>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
<Separator />
|
|
47
|
+
<div>
|
|
48
|
+
<h3 className="font-semibold mb-3">Price Range</h3>
|
|
49
|
+
<Slider :defaultValue="[100, 500]" :max="1000" :step="10" />
|
|
50
|
+
<div className="flex justify-between text-xs text-muted-foreground mt-2">
|
|
51
|
+
<span>$100</span>
|
|
52
|
+
<span>$500</span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</aside>
|
|
56
|
+
|
|
57
|
+
<!-- Product Grid -->
|
|
58
|
+
<main className="lg:col-span-3">
|
|
59
|
+
<div className="flex items-center justify-between mb-6">
|
|
60
|
+
<span className="text-sm text-muted-foreground">Showing 44 products</span>
|
|
61
|
+
<Select>
|
|
62
|
+
<SelectTrigger className="w-40"><SelectValue placeholder="Sort by" /></SelectTrigger>
|
|
63
|
+
<SelectContent>
|
|
64
|
+
<SelectItem value="featured">Featured</SelectItem>
|
|
65
|
+
<SelectItem value="price-low">Price: Low to High</SelectItem>
|
|
66
|
+
<SelectItem value="price-high">Price: High to Low</SelectItem>
|
|
67
|
+
</SelectContent>
|
|
68
|
+
</Select>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
72
|
+
<Card v-for="product in products" :key="product.id" className="group cursor-pointer overflow-hidden border-transparent hover:border-border shadow-none hover:shadow-md transition-all">
|
|
73
|
+
<div className="aspect-square bg-gradient-to-br from-secondary to-secondary/50 relative overflow-hidden">
|
|
74
|
+
<Badge v-if="product.tag" className="absolute top-2 left-2" variant="secondary">{{ product.tag }}</Badge>
|
|
75
|
+
<!-- In mockups: use gradient replacement for images -->
|
|
76
|
+
</div>
|
|
77
|
+
<CardContent className="p-4">
|
|
78
|
+
<h3 className="font-medium text-sm truncate">{{ product.name }}</h3>
|
|
79
|
+
<div className="flex items-center gap-1 mt-1">
|
|
80
|
+
<Star className="w-3 h-3 fill-primary text-primary" v-for="i in 5" :key="i" />
|
|
81
|
+
<span className="text-xs text-muted-foreground ml-1">({{ product.reviews }})</span>
|
|
82
|
+
</div>
|
|
83
|
+
<div className="flex items-center justify-between mt-3">
|
|
84
|
+
<div className="flex gap-2 items-center">
|
|
85
|
+
<span className="font-bold text-lg">${{ product.price }}</span>
|
|
86
|
+
<span v-if="product.oldPrice" className="text-xs text-muted-foreground line-through">${{ product.oldPrice }}</span>
|
|
87
|
+
</div>
|
|
88
|
+
<Button size="icon" variant="ghost" className="h-8 w-8 opacity-0 group-hover:opacity-100 transition-opacity">
|
|
89
|
+
<ShoppingCart className="w-4 h-4" />
|
|
90
|
+
</Button>
|
|
91
|
+
</div>
|
|
92
|
+
</CardContent>
|
|
93
|
+
</Card>
|
|
94
|
+
</div>
|
|
95
|
+
</main>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## Anti-Patterns (DO NOT DO)
|
|
101
|
+
|
|
102
|
+
- ❌ **Do not use complicated tables for the product catalog display**: Consumers shop visually. Use grid systems using `<Card>` elements for storefronts.
|
|
103
|
+
- ❌ **Do not cram the checkout screen**: The checkout process should be a quiet, centered flow (`max-w-2xl` layout). Hide the main site navigation here.
|
|
104
|
+
- ❌ **Do not miss the active state variants (size/color chips)**: PDP mockups need interactive-looking chips for selecting colors or sizes, not just native `<select>` dropdowns.
|
|
105
|
+
|
|
106
|
+
## Design Notes
|
|
107
|
+
|
|
108
|
+
- **Product images**: In mockups, use `aspect-square` with CSS gradient backgrounds unless explicitly asked to generate placeholders via `ComponentPlaceholder`.
|
|
109
|
+
- **Cart Access**: Always include a cart button in the topbar with a numeric badge indicating item count. Clicking it should ideally open a sliding `<Sheet>` drawer overlay.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# App Type: Education / Learning Platform
|
|
2
|
+
|
|
3
|
+
Courses, lessons, quizzes, and student progress tracking.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/sidebar.md` for instructor dashboard. Use `layouts/topbar.md` for student-facing course browser.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
|
|
10
|
+
### 1. Course Browser (Student)
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
|
|
14
|
+
<Card v-for="course in courses" :key="course.id"
|
|
15
|
+
className="cursor-pointer hover:bg-accent/50 transition-colors overflow-hidden">
|
|
16
|
+
<div className="aspect-video bg-gradient-to-br from-primary/20 via-primary/5 to-transparent" />
|
|
17
|
+
<CardContent className="p-4 space-y-2">
|
|
18
|
+
<Badge variant="secondary" className="text-xs">{{ course.category }}</Badge>
|
|
19
|
+
<p className="text-sm font-medium line-clamp-2">{{ course.title }}</p>
|
|
20
|
+
<div className="flex items-center gap-2 text-xs text-muted-foreground">
|
|
21
|
+
<span>{{ course.lessonsCount }} lessons</span>
|
|
22
|
+
<span>·</span>
|
|
23
|
+
<span>{{ course.duration }}</span>
|
|
24
|
+
</div>
|
|
25
|
+
<Progress :model-value="course.progress" className="h-1" />
|
|
26
|
+
<p className="text-xs text-muted-foreground">{{ course.progress }}% complete</p>
|
|
27
|
+
</CardContent>
|
|
28
|
+
</Card>
|
|
29
|
+
</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Course Detail / Lesson View
|
|
33
|
+
|
|
34
|
+
Two-panel layout: lesson content (left, `lg:col-span-2`) + course outline sidebar (right, `lg:col-span-1`).
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
38
|
+
<!-- Lesson content -->
|
|
39
|
+
<div className="lg:col-span-2 space-y-6">
|
|
40
|
+
<div className="aspect-video rounded-lg bg-gradient-to-br from-muted to-muted/50" />
|
|
41
|
+
<div>
|
|
42
|
+
<h1 className="text-2xl font-bold">{{ lesson.title }}</h1>
|
|
43
|
+
<p className="text-muted-foreground">{{ lesson.description }}</p>
|
|
44
|
+
</div>
|
|
45
|
+
<!-- Lesson body content -->
|
|
46
|
+
</div>
|
|
47
|
+
<!-- Course outline sidebar -->
|
|
48
|
+
<Card>
|
|
49
|
+
<CardHeader>
|
|
50
|
+
<CardTitle className="text-sm">Course Outline</CardTitle>
|
|
51
|
+
<CardDescription>{{ completedLessons }}/{{ totalLessons }} complete</CardDescription>
|
|
52
|
+
</CardHeader>
|
|
53
|
+
<CardContent className="p-0">
|
|
54
|
+
<div v-for="lesson in lessons" :key="lesson.id"
|
|
55
|
+
className={cn('flex items-center gap-3 px-4 py-2 border-b last:border-b-0 transition-colors',
|
|
56
|
+
lesson.current ? 'bg-accent' : 'hover:bg-accent/50 cursor-pointer')}>
|
|
57
|
+
<div className={cn('w-5 h-5 rounded-full border-2 flex items-center justify-center shrink-0',
|
|
58
|
+
lesson.completed ? 'border-primary bg-primary' : 'border-border')}>
|
|
59
|
+
<Check v-if="lesson.completed" className="w-3 h-3 text-primary-foreground" />
|
|
60
|
+
</div>
|
|
61
|
+
<span className="text-sm" className={lesson.current ? 'font-medium' : ''}>{{ lesson.title }}</span>
|
|
62
|
+
</div>
|
|
63
|
+
</CardContent>
|
|
64
|
+
</Card>
|
|
65
|
+
</div>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 3. Instructor Dashboard
|
|
69
|
+
Standard dashboard layout (see `layouts/dashboard.md`):
|
|
70
|
+
- Stats: Total students, Course completions, Average rating, Revenue
|
|
71
|
+
- Table: Enrolled students with progress bars
|
|
72
|
+
- Recent activity feed
|
|
73
|
+
|
|
74
|
+
## Design Notes
|
|
75
|
+
- **Progress bars**: Use `Progress` component with `className="h-1"` for compact bars within cards
|
|
76
|
+
- **Lesson completion**: Checkmark circles using `border-2 border-primary bg-primary` for completed, `border-border` for pending
|
|
77
|
+
- **Course cards**: Always include category badge, lesson count, duration, and progress
|
|
78
|
+
- **Quiz/assessment**: Use Card with RadioGroup for multiple-choice questions
|
|
79
|
+
- **Ratings**: Use `Star` icons — `text-warning` for filled, `text-muted` for empty
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# App Type: Finance / Banking
|
|
2
|
+
|
|
3
|
+
Transaction management, budgets, accounts, and financial summaries.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/sidebar.md`. Nav items: Dashboard, Accounts, Transactions, Budgets, Reports. Use `layouts/topbar.md` for consumer banking apps.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
|
|
10
|
+
### 1. Account Dashboard
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
<div className="space-y-6">
|
|
14
|
+
<!-- Total balance -->
|
|
15
|
+
<Card>
|
|
16
|
+
<CardContent className="p-6">
|
|
17
|
+
<p className="text-sm text-muted-foreground">Total Balance</p>
|
|
18
|
+
<p className="text-3xl font-bold">$24,563.89</p>
|
|
19
|
+
<p className="text-xs text-muted-foreground">Across 3 accounts</p>
|
|
20
|
+
</CardContent>
|
|
21
|
+
</Card>
|
|
22
|
+
|
|
23
|
+
<!-- Account cards -->
|
|
24
|
+
<div className="grid grid-cols-1 sm:grid-cols-3 gap-4">
|
|
25
|
+
<Card v-for="account in accounts" :key="account.id"
|
|
26
|
+
className="cursor-pointer hover:bg-accent/50 transition-colors">
|
|
27
|
+
<CardContent className="p-4 space-y-1">
|
|
28
|
+
<div className="flex items-center justify-between">
|
|
29
|
+
<p className="text-sm font-medium">{{ account.name }}</p>
|
|
30
|
+
<Badge variant="outline" className="text-xs">{{ account.type }}</Badge>
|
|
31
|
+
</div>
|
|
32
|
+
<p className="text-xl font-bold">${{ account.balance.toLocaleString() }}</p>
|
|
33
|
+
<p className="text-xs text-muted-foreground">•••• {{ account.lastFour }}</p>
|
|
34
|
+
</CardContent>
|
|
35
|
+
</Card>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. Transaction List
|
|
41
|
+
Data table with columns:
|
|
42
|
+
- Date (`text-muted-foreground`)
|
|
43
|
+
- Description (name + category badge)
|
|
44
|
+
- Account
|
|
45
|
+
- Amount — right-aligned: positive in `text-foreground font-medium`, negative in `text-destructive font-medium`
|
|
46
|
+
|
|
47
|
+
### 3. Budget Overview
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
<div className="space-y-4">
|
|
51
|
+
<div v-for="budget in budgets" :key="budget.category" className="space-y-2">
|
|
52
|
+
<div className="flex items-center justify-between text-sm">
|
|
53
|
+
<span className="font-medium">{{ budget.category }}</span>
|
|
54
|
+
<span className="text-muted-foreground">${{ budget.spent }} / ${{ budget.limit }}</span>
|
|
55
|
+
</div>
|
|
56
|
+
<Progress :model-value="(budget.spent / budget.limit) * 100"
|
|
57
|
+
className={budget.spent > budget.limit * 0.9 ? 'bg-destructive/20' : ''} className="h-2" />
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Design Notes
|
|
63
|
+
- **Currency formatting**: Always right-aligned, `font-medium`. Use `text-destructive` for negative/expenses, `text-foreground` for positive/income
|
|
64
|
+
- **Account masking**: Show only last 4 digits: `•••• 4242`
|
|
65
|
+
- **Transaction categories**: Use `Badge variant="outline"` for category tags (Food, Transport, etc.)
|
|
66
|
+
- **Date grouping**: Group transactions by date with sticky date headers
|
|
67
|
+
- **Charts**: Revenue/expense trends, spending by category pie chart (use ComponentPlaceholder (Mockup Mode Only))
|
|
68
|
+
- **Security**: Never show full account numbers. Sensitive fields should be masked by default with a toggle to reveal
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# App Type: Health & Fitness
|
|
2
|
+
|
|
3
|
+
Workout tracking, health metrics, progress dashboards, and activity logging.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/topbar.md` for consumer apps. Use `layouts/sidebar.md` for professional/coach dashboards.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
|
|
10
|
+
### 1. Today's Summary
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
<div className="space-y-6">
|
|
14
|
+
<!-- Greeting + date -->
|
|
15
|
+
<div>
|
|
16
|
+
<h1 className="text-2xl font-bold">Good morning, Sarah</h1>
|
|
17
|
+
<p className="text-muted-foreground">Monday, March 15, 2024</p>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Activity rings / stats -->
|
|
21
|
+
<div className="grid grid-cols-3 gap-4">
|
|
22
|
+
<Card v-for="metric in dailyMetrics" :key="metric.label">
|
|
23
|
+
<CardContent className="p-4 text-center space-y-1">
|
|
24
|
+
<div className="mx-auto w-12 h-12 rounded-full border-4 flex items-center justify-center"
|
|
25
|
+
className={metric.progress >= 100 ? 'border-primary' : 'border-border'}>
|
|
26
|
+
<component :is="metric.icon" className="w-5 h-5" className={metric.progress >= 100 ? 'text-primary' : 'text-muted-foreground'} />
|
|
27
|
+
</div>
|
|
28
|
+
<p className="text-xl font-bold">{{ metric.value }}</p>
|
|
29
|
+
<p className="text-xs text-muted-foreground">{{ metric.label }}</p>
|
|
30
|
+
</CardContent>
|
|
31
|
+
</Card>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<!-- Today's workouts -->
|
|
35
|
+
<div className="space-y-3">
|
|
36
|
+
<h2 className="text-lg font-semibold">Today's Plan</h2>
|
|
37
|
+
<Card v-for="workout in todayPlan" :key="workout.id"
|
|
38
|
+
className="cursor-pointer hover:bg-accent/50 transition-colors">
|
|
39
|
+
<CardContent className="flex items-center gap-4 p-4">
|
|
40
|
+
<div className="w-10 h-10 rounded-lg bg-primary/10 flex items-center justify-center">
|
|
41
|
+
<component :is="workout.icon" className="w-5 h-5 text-primary" />
|
|
42
|
+
</div>
|
|
43
|
+
<div className="flex-1 min-w-0">
|
|
44
|
+
<p className="text-sm font-medium">{{ workout.name }}</p>
|
|
45
|
+
<p className="text-xs text-muted-foreground">{{ workout.duration }} · {{ workout.calories }} cal</p>
|
|
46
|
+
</div>
|
|
47
|
+
<Badge v-if="workout.completed" variant="default">Done</Badge>
|
|
48
|
+
<ChevronRight v-else className="w-4 h-4 text-muted-foreground" />
|
|
49
|
+
</CardContent>
|
|
50
|
+
</Card>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 2. Workout Detail
|
|
56
|
+
- Exercise list with sets × reps format
|
|
57
|
+
- Timer/stopwatch (use ComponentPlaceholder (Mockup Mode Only))
|
|
58
|
+
- Rest timer between sets
|
|
59
|
+
|
|
60
|
+
### 3. Progress Dashboard
|
|
61
|
+
Standard dashboard layout with:
|
|
62
|
+
- Stats: Current weight, Workouts this week, Streak, Total calories burned
|
|
63
|
+
- Weight trend chart (use ComponentPlaceholder (Mockup Mode Only))
|
|
64
|
+
- Weekly activity grid (7 day heatmap-style display)
|
|
65
|
+
|
|
66
|
+
## Design Notes
|
|
67
|
+
- **Metric rings**: Use `border-4` circles with `border-primary` when goal is met, `border-border` when pending
|
|
68
|
+
- **Activity streaks**: Use `bg-primary/20` for active days, `bg-muted` for inactive in a 7-day grid
|
|
69
|
+
- **Exercise sets**: Display as `3 × 12` in `text-sm font-medium`, with weight in `text-muted-foreground`
|
|
70
|
+
- **Rest timers**: Centered countdown display with `text-4xl font-bold`
|
|
71
|
+
- **Personal greeting**: Use time-of-day greeting ("Good morning", "Good afternoon") for consumer warmth
|
|
72
|
+
- **Color coding**: Use `text-primary` for achievements/completions, `text-muted-foreground` for pending
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# App Type: Marketplace
|
|
2
|
+
|
|
3
|
+
Listings, search with filters, seller profiles, and reviews.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/topbar.md` with category navigation. Search bar prominently in the top bar.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
|
|
10
|
+
### 1. Browse / Search Results
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
<div className="flex gap-6">
|
|
14
|
+
<!-- Filter sidebar -->
|
|
15
|
+
<aside className="w-56 shrink-0 space-y-6 hidden lg:block">
|
|
16
|
+
<div className="space-y-3">
|
|
17
|
+
<h3 className="text-sm font-semibold">Category</h3>
|
|
18
|
+
<div className="space-y-2">
|
|
19
|
+
<label v-for="cat in categories" :key="cat" className="flex items-center gap-2 text-sm">
|
|
20
|
+
<Checkbox /> {{ cat }}
|
|
21
|
+
</label>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
<Separator />
|
|
25
|
+
<div className="space-y-3">
|
|
26
|
+
<h3 className="text-sm font-semibold">Price Range</h3>
|
|
27
|
+
<div className="flex items-center gap-2">
|
|
28
|
+
<Input className="h-8" placeholder="Min" />
|
|
29
|
+
<span className="text-muted-foreground">–</span>
|
|
30
|
+
<Input className="h-8" placeholder="Max" />
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
<Separator />
|
|
34
|
+
<div className="space-y-3">
|
|
35
|
+
<h3 className="text-sm font-semibold">Rating</h3>
|
|
36
|
+
<RadioGroup>
|
|
37
|
+
<label className="flex items-center gap-2 text-sm">
|
|
38
|
+
<RadioGroupItem value="4" /> 4+ stars
|
|
39
|
+
</label>
|
|
40
|
+
<label className="flex items-center gap-2 text-sm">
|
|
41
|
+
<RadioGroupItem value="3" /> 3+ stars
|
|
42
|
+
</label>
|
|
43
|
+
</RadioGroup>
|
|
44
|
+
</div>
|
|
45
|
+
</aside>
|
|
46
|
+
|
|
47
|
+
<!-- Listing grid -->
|
|
48
|
+
<div className="flex-1">
|
|
49
|
+
<div className="flex items-center justify-between mb-4">
|
|
50
|
+
<p className="text-sm text-muted-foreground">{{ totalResults }} results</p>
|
|
51
|
+
<Select defaultValue="sortBy">
|
|
52
|
+
<SelectTrigger className="w-36">
|
|
53
|
+
<SelectValue placeholder="Sort by" />
|
|
54
|
+
</SelectTrigger>
|
|
55
|
+
<SelectContent>
|
|
56
|
+
<SelectItem value="newest">Newest</SelectItem>
|
|
57
|
+
<SelectItem value="price-low">Price: Low to High</SelectItem>
|
|
58
|
+
<SelectItem value="price-high">Price: High to Low</SelectItem>
|
|
59
|
+
<SelectItem value="rating">Highest Rated</SelectItem>
|
|
60
|
+
</SelectContent>
|
|
61
|
+
</Select>
|
|
62
|
+
</div>
|
|
63
|
+
<div className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-4">
|
|
64
|
+
<Card v-for="item in listings" :key="item.id"
|
|
65
|
+
className="cursor-pointer hover:bg-accent/50 transition-colors overflow-hidden">
|
|
66
|
+
<div className="aspect-square bg-gradient-to-br from-muted to-muted/50" />
|
|
67
|
+
<CardContent className="p-3 space-y-1">
|
|
68
|
+
<p className="text-sm font-medium line-clamp-2">{{ item.title }}</p>
|
|
69
|
+
<div className="flex items-center gap-1">
|
|
70
|
+
<Star className="w-3 h-3 text-warning fill-warning" />
|
|
71
|
+
<span className="text-xs">{{ item.rating }}</span>
|
|
72
|
+
<span className="text-xs text-muted-foreground">({{ item.reviewCount }})</span>
|
|
73
|
+
</div>
|
|
74
|
+
<div className="flex items-center gap-2">
|
|
75
|
+
<span className="text-sm font-bold">${{ item.price }}</span>
|
|
76
|
+
<span v-if="item.originalPrice" className="text-xs line-through text-muted-foreground">${{ item.originalPrice }}</span>
|
|
77
|
+
</div>
|
|
78
|
+
</CardContent>
|
|
79
|
+
</Card>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 2. Listing Detail
|
|
86
|
+
Full-width layout with:
|
|
87
|
+
- Image gallery (aspect-square grid or horizontal scroll)
|
|
88
|
+
- Title, price, seller info (avatar + name + rating)
|
|
89
|
+
- Description, specifications table
|
|
90
|
+
- Review list with star ratings
|
|
91
|
+
- Contact seller / Buy now action buttons
|
|
92
|
+
|
|
93
|
+
## Design Notes
|
|
94
|
+
- **Product grid**: `grid-cols-2 sm:grid-cols-3 lg:grid-cols-4` is standard
|
|
95
|
+
- **Price display**: `text-sm font-bold` for current price, `text-xs line-through text-muted-foreground` for original price
|
|
96
|
+
- **Star ratings**: Use `Star` icon — `text-warning fill-warning` for filled, `text-muted` for empty
|
|
97
|
+
- **Filter sidebar**: Left-aligned, `w-56`, hidden on mobile (`hidden lg:block`), use Sheet for mobile filters
|
|
98
|
+
- **Sort control**: Select dropdown aligned right above the grid
|
|
99
|
+
- **Seller badge**: Verified sellers get `Badge variant="default"` next to their name
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# App Type: Messaging
|
|
2
|
+
|
|
3
|
+
Chat applications, conversation threads, and real-time messaging interfaces.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/list-detail.md` — conversation list on the left, active chat on the right.
|
|
7
|
+
|
|
8
|
+
## Key Structure
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
<div className="flex h-screen">
|
|
12
|
+
<!-- Conversation List (left panel) -->
|
|
13
|
+
<div className="w-80 border-r flex flex-col">
|
|
14
|
+
<div className="h-14 flex items-center justify-between px-4 border-b">
|
|
15
|
+
<h2 className="text-sm font-semibold">Messages</h2>
|
|
16
|
+
<Button variant="ghost" size="icon" className="h-8 w-8"><PenSquare className="w-4 h-4" /></Button>
|
|
17
|
+
</div>
|
|
18
|
+
<ScrollArea className="flex-1">
|
|
19
|
+
<div className="p-2 space-y-0.5">
|
|
20
|
+
<button v-for="convo in conversations" :key="convo.id"
|
|
21
|
+
className={cn('w-full text-left p-3 rounded-md flex items-start gap-3 transition-colors',
|
|
22
|
+
activeId === convo.id ? 'bg-accent' : 'hover:bg-accent/50')}>
|
|
23
|
+
<div className="w-10 h-10 rounded-full shrink-0 bg-muted" />
|
|
24
|
+
<div className="flex-1 min-w-0">
|
|
25
|
+
<div className="flex items-center justify-between">
|
|
26
|
+
<p className="text-sm font-medium truncate">{{ convo.name }}</p>
|
|
27
|
+
<span className="text-xs text-muted-foreground">{{ convo.time }}</span>
|
|
28
|
+
</div>
|
|
29
|
+
<p className="text-xs text-muted-foreground truncate">{{ convo.lastMessage }}</p>
|
|
30
|
+
</div>
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
</ScrollArea>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<!-- Chat Area (right panel) -->
|
|
37
|
+
<div className="flex-1 flex flex-col">
|
|
38
|
+
<!-- Chat header -->
|
|
39
|
+
<div className="h-14 flex items-center justify-between px-4 border-b">
|
|
40
|
+
<div className="flex items-center gap-3">
|
|
41
|
+
<div className="w-8 h-8 rounded-full bg-gradient-to-br from-primary/60 to-primary" />
|
|
42
|
+
<div>
|
|
43
|
+
<p className="text-sm font-medium">Sarah Chen</p>
|
|
44
|
+
<p className="text-xs text-muted-foreground">Online</p>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
<Button variant="ghost" size="icon"><MoreHorizontal className="w-4 h-4" /></Button>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<!-- Messages -->
|
|
51
|
+
<ScrollArea className="flex-1 p-4">
|
|
52
|
+
<div className="space-y-4 max-w-2xl mx-auto">
|
|
53
|
+
<!-- Received message -->
|
|
54
|
+
<div className="flex items-end gap-2">
|
|
55
|
+
<div className="w-6 h-6 rounded-full shrink-0 bg-gradient-to-br from-primary/60 to-primary" />
|
|
56
|
+
<div className="bg-muted rounded-2xl rounded-bl-sm px-4 py-2 max-w-md">
|
|
57
|
+
<p className="text-sm">Hey, did you finish the design review?</p>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
<!-- Sent message -->
|
|
61
|
+
<div className="flex items-end gap-2 justify-end">
|
|
62
|
+
<div className="bg-primary text-primary-foreground rounded-2xl rounded-br-sm px-4 py-2 max-w-md">
|
|
63
|
+
<p className="text-sm">Yes! Just pushed the final changes.</p>
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</ScrollArea>
|
|
68
|
+
|
|
69
|
+
<!-- Input area -->
|
|
70
|
+
<div className="border-t p-4">
|
|
71
|
+
<div className="flex items-end gap-2 max-w-2xl mx-auto">
|
|
72
|
+
<Input className="flex-1" placeholder="Type a message..." />
|
|
73
|
+
<Button size="icon"><Send className="w-4 h-4" /></Button>
|
|
74
|
+
</div>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Design Notes
|
|
81
|
+
- **Chat bubbles**: Received = `bg-muted rounded-bl-sm`, Sent = `bg-primary rounded-br-sm`
|
|
82
|
+
- **Max bubble width**: `max-w-md`
|
|
83
|
+
- **Online indicator**: Small green dot or "Online" text
|
|
84
|
+
- **Input area**: Pinned to bottom with `border-t`
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# App Type: Portfolio / Personal Site
|
|
2
|
+
|
|
3
|
+
Personal websites, developer portfolios, freelancer profiles, and creative showcases.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/topbar.md` with minimal navigation (Home, Projects, About, Contact). Or `layouts/marketing.md` for single-page scrolling portfolios.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
|
|
10
|
+
### 1. Hero Section
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
<div className="max-w-3xl mx-auto px-6 py-16 text-center space-y-6">
|
|
14
|
+
<div className="w-20 h-20 rounded-2xl bg-primary mx-auto flex items-center justify-center">
|
|
15
|
+
<Code className="w-8 h-8 text-primary-foreground" />
|
|
16
|
+
</div>
|
|
17
|
+
<div className="space-y-2">
|
|
18
|
+
<h1 className="text-3xl font-bold">Sarah Chen</h1>
|
|
19
|
+
<p className="text-lg text-muted-foreground">Product Designer & Frontend Developer</p>
|
|
20
|
+
</div>
|
|
21
|
+
<p className="text-muted-foreground max-w-lg mx-auto">
|
|
22
|
+
I design and build beautiful, functional interfaces for startups and creative teams.
|
|
23
|
+
Based in San Francisco, available for freelance work.
|
|
24
|
+
</p>
|
|
25
|
+
<div className="flex items-center justify-center gap-3">
|
|
26
|
+
<Button>View Projects</Button>
|
|
27
|
+
<Button variant="outline"><Mail className="w-4 h-4" /> Contact</Button>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Project Grid
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<div className="max-w-5xl mx-auto px-6 py-12 space-y-8">
|
|
36
|
+
<div className="text-center space-y-1">
|
|
37
|
+
<h2 className="text-2xl font-bold">Selected Work</h2>
|
|
38
|
+
<p className="text-muted-foreground">Recent projects and case studies</p>
|
|
39
|
+
</div>
|
|
40
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 gap-6">
|
|
41
|
+
<Card v-for="project in projects" :key="project.id"
|
|
42
|
+
className="cursor-pointer hover:bg-accent/50 transition-colors overflow-hidden">
|
|
43
|
+
<div className="aspect-video bg-gradient-to-br from-primary/10 via-primary/5 to-transparent" />
|
|
44
|
+
<CardContent className="p-4 space-y-2">
|
|
45
|
+
<div className="flex items-center gap-2">
|
|
46
|
+
<Badge v-for="tag in project.tags" :key="tag" variant="secondary" className="text-xs">{{ tag }}</Badge>
|
|
47
|
+
</div>
|
|
48
|
+
<p className="text-sm font-semibold">{{ project.title }}</p>
|
|
49
|
+
<p className="text-xs text-muted-foreground line-clamp-2">{{ project.description }}</p>
|
|
50
|
+
</CardContent>
|
|
51
|
+
</Card>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### 3. Contact Section
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
<div className="max-w-md mx-auto px-6 py-12 space-y-6">
|
|
60
|
+
<div className="text-center space-y-1">
|
|
61
|
+
<h2 className="text-2xl font-bold">Get in Touch</h2>
|
|
62
|
+
<p className="text-muted-foreground">Have a project in mind? Let's talk.</p>
|
|
63
|
+
</div>
|
|
64
|
+
<Card>
|
|
65
|
+
<CardContent className="p-6 space-y-4">
|
|
66
|
+
<div className="space-y-2">
|
|
67
|
+
<Label for="name">Name</Label>
|
|
68
|
+
<Input id="name" placeholder="Your name" />
|
|
69
|
+
</div>
|
|
70
|
+
<div className="space-y-2">
|
|
71
|
+
<Label for="email">Email</Label>
|
|
72
|
+
<Input id="email" type="email" placeholder="you@example.com" />
|
|
73
|
+
</div>
|
|
74
|
+
<div className="space-y-2">
|
|
75
|
+
<Label for="message">Message</Label>
|
|
76
|
+
<Textarea id="message" placeholder="Tell me about your project..." rows="4" />
|
|
77
|
+
</div>
|
|
78
|
+
<Button className="w-full">Send Message</Button>
|
|
79
|
+
</CardContent>
|
|
80
|
+
</Card>
|
|
81
|
+
</div>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Design Notes
|
|
85
|
+
- **Content width**: Use `max-w-3xl` for text-heavy sections, `max-w-5xl` for grids — narrower than dashboard layouts
|
|
86
|
+
- **Centering**: Heavy use of `text-center` and `mx-auto` for focused, personal feel
|
|
87
|
+
- **Typography**: Can use `text-3xl font-bold` for hero heading (only place this is acceptable)
|
|
88
|
+
- **Social links**: Row of ghost icon buttons (GitHub, LinkedIn, Twitter, etc.)
|
|
89
|
+
- **Project tags**: Use `Badge variant="secondary"` for technology/category tags
|
|
90
|
+
- **Whitespace**: More generous than dashboard apps — `py-12` to `py-16` between sections for breathing room
|