@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,92 @@
|
|
|
1
|
+
# Data Visualization Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Metric Cards, KPIs, and Financial Tickers.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the user needs a dashboard-like view of numbers, metrics, or live data feeds. DO NOT build KPI cards manually using raw `<Card>` or `<p>` elements. These data-viz blocks handle responsive column reflowing and strict trend color mapping (e.g., green for positive, red for negative).
|
|
8
|
+
|
|
9
|
+
## 1. KpiCard
|
|
10
|
+
|
|
11
|
+
The `KpiCard` block is the fundamental building block of any dashboard.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { Users, DollarSign, Activity } from 'lucide-react'
|
|
17
|
+
import { KpiCard, StatGrid } from '@reinvented/design'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export default function Component() {
|
|
21
|
+
return (
|
|
22
|
+
<>
|
|
23
|
+
<StatGrid :columns="3">
|
|
24
|
+
<KpiCard
|
|
25
|
+
title="Total Revenue"
|
|
26
|
+
metric="$45,231.89"
|
|
27
|
+
:trend="20.1"
|
|
28
|
+
trendLabel="from last month"
|
|
29
|
+
:icon="DollarSign"
|
|
30
|
+
/>
|
|
31
|
+
<KpiCard
|
|
32
|
+
title="Active Users"
|
|
33
|
+
metric="+2350"
|
|
34
|
+
:trend="180.1"
|
|
35
|
+
trendLabel="from last month"
|
|
36
|
+
:icon="Users"
|
|
37
|
+
/>
|
|
38
|
+
<KpiCard
|
|
39
|
+
title="Server Load"
|
|
40
|
+
metric="84%"
|
|
41
|
+
:trend="-4.3"
|
|
42
|
+
trendLabel="from last hour"
|
|
43
|
+
:icon="Activity"
|
|
44
|
+
/>
|
|
45
|
+
</StatGrid>
|
|
46
|
+
</>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Usage Rules
|
|
52
|
+
- `metric` is the massive string (e.g., "$12,000", "42%"). Do NOT pass numbers here; format the string first.
|
|
53
|
+
- `trend` expects a Number (e.g., `20.5`, `-4.2`, `0`). The card automatically mounts a `TrendingUp` or `TrendingDown` icon and applies `text-emerald-500` or `text-rose-500` accordingly.
|
|
54
|
+
- `icon` is a raw Vue component import (typically from `lucide-react`).
|
|
55
|
+
|
|
56
|
+
## 2. StatGrid
|
|
57
|
+
|
|
58
|
+
The `StatGrid` block intelligently mounts KPI cards in a responsive CSS Grid.
|
|
59
|
+
|
|
60
|
+
### Anatomy
|
|
61
|
+
*(See KpiCard anatomy for typical usage)*
|
|
62
|
+
|
|
63
|
+
### Usage Rules
|
|
64
|
+
- Takes an optional `columns` prop (`2`, `3`, or `4`). Defaults to `3`.
|
|
65
|
+
- Automatically responds to mobile by stacking into a single column.
|
|
66
|
+
|
|
67
|
+
## 3. FinancialTicker
|
|
68
|
+
|
|
69
|
+
The `FinancialTicker` block models a live-data feed typically seen in trading, crypto, or forex interfaces.
|
|
70
|
+
|
|
71
|
+
### Anatomy
|
|
72
|
+
```tsx
|
|
73
|
+
// React Component
|
|
74
|
+
import { FinancialTicker } from '@reinvented/design'
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
export default function Component() {
|
|
78
|
+
return (
|
|
79
|
+
<>
|
|
80
|
+
<div className="flex items-center gap-6 overflow-x-auto whitespace-nowrap p-4 border bg-background/50 rounded-xl">
|
|
81
|
+
<FinancialTicker symbol="AAPL" price="$174.22" :change="1.45" :changePercent="0.84" />
|
|
82
|
+
<FinancialTicker symbol="MSFT" price="$412.01" :change="-3.12" :changePercent="-0.75" />
|
|
83
|
+
<FinancialTicker symbol="NVDA" price="$892.50" :change="42.10" :changePercent="4.95" />
|
|
84
|
+
</div>
|
|
85
|
+
</>
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Usage Rules
|
|
91
|
+
- It automatically handles the `<TrendingUp/Down>` colors on both the text and the micro-badge based on whether `change` is positive or negative.
|
|
92
|
+
- Wrapping the tickers in a scrolling flex container is recommended.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# E-Commerce & Catalog Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Product Catalogs, Marketplaces, and SaaS Pricing grids.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the app requires displaying products, selling software tiers, or aggregating user review scores. DO NOT build these specific data structures from scratch (e.g. manually aligning stars or creating pricing card borders). These blocks provide structural layout and state interactions.
|
|
8
|
+
|
|
9
|
+
## 1. ProductCard
|
|
10
|
+
|
|
11
|
+
The `ProductCard` block is highly versatile for grid-based inventory displays. It automatically handles hover transforms and image aspect ratios.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { Button } from '@reinvented/design'
|
|
17
|
+
import { Badge } from '@reinvented/design'
|
|
18
|
+
import { Plus } from 'lucide-react'
|
|
19
|
+
import {
|
|
20
|
+
ProductCard,
|
|
21
|
+
ProductCardImage,
|
|
22
|
+
ProductCardContent,
|
|
23
|
+
ProductCardPrice
|
|
24
|
+
} from '@reinvented/design'
|
|
25
|
+
import { RatingStars } from '@reinvented/design'
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
export default function Component() {
|
|
29
|
+
return (
|
|
30
|
+
<>
|
|
31
|
+
<ProductCard className="w-[300px]">
|
|
32
|
+
<ProductCardImage src="/products/headphones.jpg" alt="Wireless Headphones">
|
|
33
|
+
<Badge className="absolute top-3 right-3 bg-red-500">Sale -20%</Badge>
|
|
34
|
+
</ProductCardImage>
|
|
35
|
+
|
|
36
|
+
<ProductCardContent>
|
|
37
|
+
<div className="flex justify-between items-start">
|
|
38
|
+
<div>
|
|
39
|
+
<h3 className="font-bold text-lg leading-tight">Pro Audio Max</h3>
|
|
40
|
+
<p className="text-sm text-muted-foreground mt-1">Over-ear active noise cancelling</p>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<div className="mt-2 flex items-center gap-2">
|
|
45
|
+
<RatingStars :rating="4.5" />
|
|
46
|
+
<span className="text-xs text-muted-foreground">(128)</span>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div className="mt-4 flex items-end justify-between">
|
|
50
|
+
<ProductCardPrice price="$199.00" originalPrice="$249.00" />
|
|
51
|
+
<Button size="icon" className="h-8 w-8 rounded-full">
|
|
52
|
+
<Plus className="h-4 w-4" />
|
|
53
|
+
</Button>
|
|
54
|
+
</div>
|
|
55
|
+
</ProductCardContent>
|
|
56
|
+
</ProductCard>
|
|
57
|
+
</>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Usage Rules
|
|
63
|
+
- The outer `ProductCard` wraps a standard Shadcn `Card`.
|
|
64
|
+
- `ProductCardImage` forces a standard `4/3` aspect ratio, handling crop and scale-on-hover logic. It accepts slots (for absolute badges/buttons).
|
|
65
|
+
- Build the inner grid using Flexbox classes within `ProductCardContent`.
|
|
66
|
+
|
|
67
|
+
## 2. PricingTier
|
|
68
|
+
|
|
69
|
+
The `PricingTier` block models a classic SaaS or tier-based billing card. It includes built-in highlight mechanics for "Most Popular" selections.
|
|
70
|
+
|
|
71
|
+
### Anatomy
|
|
72
|
+
```tsx
|
|
73
|
+
// React Component
|
|
74
|
+
import { Button } from '@reinvented/design'
|
|
75
|
+
import {
|
|
76
|
+
PricingTier,
|
|
77
|
+
PricingHeader,
|
|
78
|
+
PricingFeatureList
|
|
79
|
+
} from '@reinvented/design'
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
export default function Component() {
|
|
83
|
+
return (
|
|
84
|
+
<>
|
|
85
|
+
<div className="grid md:grid-cols-3 gap-8 max-w-5xl mx-auto py-8">
|
|
86
|
+
<!-- Standard Tier -->
|
|
87
|
+
<PricingTier>
|
|
88
|
+
<PricingHeader
|
|
89
|
+
title="Starter"
|
|
90
|
+
description="For small hobby teams"
|
|
91
|
+
price="$15"
|
|
92
|
+
period="/mo"
|
|
93
|
+
/>
|
|
94
|
+
<PricingFeatureList :features="['Up to 3 users', 'Basic analytics', '24hr Support response']">
|
|
95
|
+
<Button variant="outline" className="w-full mt-6">Get Started</Button>
|
|
96
|
+
</PricingFeatureList>
|
|
97
|
+
</PricingTier>
|
|
98
|
+
|
|
99
|
+
<!-- Featured Tier -->
|
|
100
|
+
<PricingTier featured>
|
|
101
|
+
<PricingHeader
|
|
102
|
+
title="Professional"
|
|
103
|
+
description="Everything you need to scale"
|
|
104
|
+
price="$49"
|
|
105
|
+
period="/mo"
|
|
106
|
+
/>
|
|
107
|
+
<PricingFeatureList :features="['Unlimited users', 'Advanced analytics', '1hr Support response', 'Custom domain']">
|
|
108
|
+
<Button className="w-full mt-6">Start Free Trial</Button>
|
|
109
|
+
</PricingFeatureList>
|
|
110
|
+
</PricingTier>
|
|
111
|
+
</div>
|
|
112
|
+
</>
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Usage Rules
|
|
118
|
+
- `PricingTier` cards should be placed side-by-side in a responsive Grid.
|
|
119
|
+
- To emphasize a specific tier (usually the middle option), simply attach the Boolean `featured` prop to `<PricingTier>`. It will automatically add a primary border, a top "Most Popular" badge, and scale it up slightly via z-index.
|
|
120
|
+
- Place a CTA `<Button>` inside the `PricingFeatureList` slot; it will append below the checked rows.
|
|
121
|
+
|
|
122
|
+
## 3. RatingSummary
|
|
123
|
+
|
|
124
|
+
The `RatingStars` component handles iterative star loop rendering with half-star parsing based on a numeric average.
|
|
125
|
+
- It takes a `rating` (Number) and an optional `max` (Number, default 5).
|
|
126
|
+
- It handles rendering visually accurate Lucide star shapes internally without manual `v-for` boilerplate.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Feedback & Status Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Error Boundaries, Empty States, and 404 screens.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks anytime dynamic data fails to load or no data exists yet. DO NOT render blank screens or generic `<div>No data</div>` text. These blocks apply the design system's standardized alerting colors and fallback illustrations to keep the user oriented.
|
|
8
|
+
|
|
9
|
+
## 1. EmptyState
|
|
10
|
+
|
|
11
|
+
The `EmptyState` block provides a unified placeholder whenever a list, table, or grid has zero items to display.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { EmptyState } from '@reinvented/design'
|
|
17
|
+
import { FolderOpen } from 'lucide-react'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
export default function Component() {
|
|
21
|
+
return (
|
|
22
|
+
<>
|
|
23
|
+
<EmptyState
|
|
24
|
+
title="No projects found"
|
|
25
|
+
description="Get started by creating a new project to organize your team's work."
|
|
26
|
+
:icon="FolderOpen"
|
|
27
|
+
actionLabel="Create Project"
|
|
28
|
+
@action="openCreateModal"
|
|
29
|
+
/>
|
|
30
|
+
</>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Usage Rules
|
|
36
|
+
- Natively bound within a dashed border layout (`border-dashed bg-muted/20`) to visually communicate "placeholder".
|
|
37
|
+
- The `actionLabel` will automatically render a primary `<Button>` centered at the bottom, emitting an `@action` event when clicked. Leave `actionLabel` undefined to render a read-only empty state.
|
|
38
|
+
- `icon` accepts a raw Vue component import (typically from `lucide-react`).
|
|
39
|
+
|
|
40
|
+
## 2. ErrorState
|
|
41
|
+
|
|
42
|
+
The `ErrorState` block provides a visually defensive error boundary layout.
|
|
43
|
+
|
|
44
|
+
### Anatomy
|
|
45
|
+
```tsx
|
|
46
|
+
// React Component
|
|
47
|
+
import { ErrorState } from '@reinvented/design'
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
export default function Component() {
|
|
51
|
+
return (
|
|
52
|
+
<>
|
|
53
|
+
<ErrorState
|
|
54
|
+
title="Failed to load metrics"
|
|
55
|
+
description="The analytics backend is currently unreachable. Our team has been notified."
|
|
56
|
+
retryLabel="Refresh Data"
|
|
57
|
+
@retry="fetchMetrics"
|
|
58
|
+
/>
|
|
59
|
+
</>
|
|
60
|
+
)
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Usage Rules
|
|
65
|
+
- Natively forces the background, borders, and icon ring into `rose-500` shades. The icon is permanently locked to `<AlertTriangle>`.
|
|
66
|
+
- Emits a `@retry` event intended fully to hook into async reloading functions.
|
|
67
|
+
|
|
68
|
+
## 3. NotFoundState
|
|
69
|
+
|
|
70
|
+
A massive structural page intended for explicit 404 views.
|
|
71
|
+
|
|
72
|
+
### Anatomy
|
|
73
|
+
```tsx
|
|
74
|
+
// React Component
|
|
75
|
+
import { NotFoundState } from '@reinvented/design'
|
|
76
|
+
import { useRouter } from 'react-router-dom'
|
|
77
|
+
|
|
78
|
+
const router = useRouter()
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
export default function Component() {
|
|
82
|
+
return (
|
|
83
|
+
<>
|
|
84
|
+
<NotFoundState
|
|
85
|
+
title="Page not found"
|
|
86
|
+
description="The workspace or document you are trying to view does not exist or you lack permissions."
|
|
87
|
+
@back="router.back()"
|
|
88
|
+
@home="router.push('/')"
|
|
89
|
+
/>
|
|
90
|
+
</>
|
|
91
|
+
)
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Usage Rules
|
|
96
|
+
- This block is designed to take over the entire content area of a layout. It features a massive `404` background typography watermark layered elegantly behind a Search icon.
|
|
97
|
+
- It forces two standard button events: `@back` and `@home`. This provides optimal wayfinding for stranded users without forcing the developer to rebuild standard routing logic.
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Filtering & Search Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Advanced Search Bars, Faceted Filtering, and iterating Search Results.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks anytime the app requires complex querying, e-commerce catalog filtering, or dense search results. DO NOT build heavy filtering sidebars using raw `<Accordion>` and raw `<ScrollArea>` components independently. These blocks resolve fixed heights and desktop/mobile splitting.
|
|
8
|
+
|
|
9
|
+
## 1. FilterBar
|
|
10
|
+
|
|
11
|
+
The `FilterBar` establishes the core horizontal header for a search experience.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { FilterBar } from '@reinvented/design'
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export default function Component() {
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<FilterBar
|
|
23
|
+
placeholder="Search repositories..."
|
|
24
|
+
:activeFilters="[
|
|
25
|
+
{ key: 'lang', label: 'Language: TypeScript' },
|
|
26
|
+
{ key: 'status', label: 'Status: Public' }
|
|
27
|
+
]"
|
|
28
|
+
:resultsCount="42"
|
|
29
|
+
@removeFilter="(f) => handleRemove(f)"
|
|
30
|
+
@clearFilters="clearAll"
|
|
31
|
+
/>
|
|
32
|
+
</>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Usage Rules
|
|
38
|
+
- Composes a `<Search>` prepended `<Input>` along with a flexible appended `#controls` slot for mounting "Filter" buttons.
|
|
39
|
+
- Iterates `activeFilters` as interactive tags natively containing `<X>` dismiss icons. Emits `@removeFilter` passing back the exact object clicked.
|
|
40
|
+
- Displays a `resultsCount` subtle label on the bottom-left if provided.
|
|
41
|
+
|
|
42
|
+
## 2. FacetedSidebar
|
|
43
|
+
|
|
44
|
+
The `FacetedSidebar` is a vertical panel layout designed to stick to the left-hand side of desktop layouts (and often placed in a Drawer on mobile).
|
|
45
|
+
|
|
46
|
+
### Anatomy
|
|
47
|
+
```tsx
|
|
48
|
+
// React Component
|
|
49
|
+
import { FacetedSidebar, FacetedGroup } from '@reinvented/design'
|
|
50
|
+
import { Checkbox } from '@reinvented/design'
|
|
51
|
+
import { Label } from '@reinvented/design'
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
export default function Component() {
|
|
55
|
+
return (
|
|
56
|
+
<>
|
|
57
|
+
<FacetedSidebar title="Filters">
|
|
58
|
+
<FacetedGroup title="Category" defaultExpanded>
|
|
59
|
+
<div className="flex items-center space-x-2">
|
|
60
|
+
<Checkbox id="cat-design" />
|
|
61
|
+
<Label for="cat-design">Design Systems</Label>
|
|
62
|
+
</div>
|
|
63
|
+
<div className="flex items-center space-x-2">
|
|
64
|
+
<Checkbox id="cat-web" />
|
|
65
|
+
<Label for="cat-web">Web Development</Label>
|
|
66
|
+
</div>
|
|
67
|
+
</FacetedGroup>
|
|
68
|
+
|
|
69
|
+
<FacetedGroup title="Status">
|
|
70
|
+
<div className="flex items-center space-x-2">
|
|
71
|
+
<Checkbox id="st-active" />
|
|
72
|
+
<Label for="st-active">Active</Label>
|
|
73
|
+
</div>
|
|
74
|
+
</FacetedGroup>
|
|
75
|
+
</FacetedSidebar>
|
|
76
|
+
</>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Usage Rules
|
|
82
|
+
- Natively locks `w-full md:w-64` and utilizes a `<ScrollArea>` so the container does not infinitely push the footer down the page as filters expand.
|
|
83
|
+
- Uses `FacetedGroup` internally which binds native Shadcn `<Collapsible>` components, creating smooth, staggered dropdown groupings.
|
|
84
|
+
|
|
85
|
+
## 3. SearchResultItem
|
|
86
|
+
|
|
87
|
+
The `SearchResultItem` block creates perfectly aligned horizontal list cards optimized for scanning queries.
|
|
88
|
+
|
|
89
|
+
### Anatomy
|
|
90
|
+
```tsx
|
|
91
|
+
// React Component
|
|
92
|
+
import { SearchResultItem } from '@reinvented/design'
|
|
93
|
+
import { Star, GitCommit } from 'lucide-react'
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
export default function Component() {
|
|
97
|
+
return (
|
|
98
|
+
<>
|
|
99
|
+
<SearchResultItem
|
|
100
|
+
title="reinvented/design-system"
|
|
101
|
+
subtitle="Updated 2 days ago"
|
|
102
|
+
description="The core Vue implementation of the Reinvented UI capabilities perfectly layered over Shadcn components."
|
|
103
|
+
tag="Public"
|
|
104
|
+
url="/repo/ri-design"
|
|
105
|
+
image="/repo-cover.png"
|
|
106
|
+
>
|
|
107
|
+
<template #meta>
|
|
108
|
+
<div className="flex items-center gap-1">
|
|
109
|
+
<Star className="h-3 w-3" /> 1.2k
|
|
110
|
+
</div>
|
|
111
|
+
<div className="flex items-center gap-1">
|
|
112
|
+
<GitCommit className="h-3 w-3" /> 452 Commits
|
|
113
|
+
</div>
|
|
114
|
+
</>
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
</SearchResultItem>
|
|
118
|
+
</>
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Usage Rules
|
|
124
|
+
- Wraps the `title` natively in an `<a>` tag pointing to `url`.
|
|
125
|
+
- Uses defensive CSS (`line-clamp-2 md:line-clamp-3`) on the description so extreme string lengths do not randomly snap layouts.
|
|
126
|
+
- Replaces the `<Avatar>` norm with a distinct `<image>` square thumbnail representing posts, products, or apps.
|
|
127
|
+
- Features a flexible `#meta` slot at the bottom specifically tuned for micro-stats (stars, forks, dates, views) using small text.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Marketing & Landing Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Public Websites, Landing Pages, and Conversion Funnels.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks anytime the simulated app requires an unauthenticated, public-facing view meant to drive sign-ups. DO NOT build marketing layouts using raw cards or padding grids. Marketing requires immense vertical rhythm, massive typography, and specific semantic HTML structures (`<section>`, `<article>`) which these blocks provide out-of-the-box.
|
|
8
|
+
|
|
9
|
+
## 1. HeroSection
|
|
10
|
+
|
|
11
|
+
The `HeroSection` powers the massive header that users see immediately upon visiting a landing page.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { HeroSection } from '@reinvented/design'
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export default function Component() {
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<HeroSection
|
|
23
|
+
badge="New Version 2.0"
|
|
24
|
+
title="Build better AI agents, faster than ever."
|
|
25
|
+
description="The complete design system tailored for autonomous LLM coding and generative UI workflows."
|
|
26
|
+
primaryAction="Start Building For Free"
|
|
27
|
+
secondaryAction="Read The Documentation"
|
|
28
|
+
image="/hero-dashboard.webp"
|
|
29
|
+
@primary="handleSignup"
|
|
30
|
+
@secondary="handleDocs"
|
|
31
|
+
/>
|
|
32
|
+
</>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Usage Rules
|
|
38
|
+
- Integrates a built-in abstract background aesthetic using a subtle dot-matrix grid and a blurred `primary` radial glow out of the box.
|
|
39
|
+
- The `image` is passed as a string. It automatically wraps in a massively shadowed `max-w-6xl` rounded frame floating below the typography. It completely hides itself on mobile.
|
|
40
|
+
- `title` is heavily tuned for desktop `text-7xl` scaling.
|
|
41
|
+
|
|
42
|
+
## 2. FeatureGrid
|
|
43
|
+
|
|
44
|
+
The `FeatureGrid` is a robust section used to highlight three to four core selling points.
|
|
45
|
+
|
|
46
|
+
### Anatomy
|
|
47
|
+
```tsx
|
|
48
|
+
// React Component
|
|
49
|
+
import { FeatureGrid } from '@reinvented/design'
|
|
50
|
+
import { Rocket, Shield, Zap } from 'lucide-react'
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
export default function Component() {
|
|
54
|
+
return (
|
|
55
|
+
<>
|
|
56
|
+
<section className="container py-24 mx-auto px-6">
|
|
57
|
+
<h2 className="text-3xl font-bold mb-12 text-center">Why choose us?</h2>
|
|
58
|
+
|
|
59
|
+
<FeatureGrid
|
|
60
|
+
:columns="3"
|
|
61
|
+
:features="[
|
|
62
|
+
{ title: 'Blazing Fast', description: 'Runs natively on modern engines.', icon: Zap },
|
|
63
|
+
{ title: 'Secure', description: 'Enterprise-grade endpoints.', icon: Shield },
|
|
64
|
+
{ title: 'Scalable', description: 'Deploy across the globe.', icon: Rocket }
|
|
65
|
+
]"
|
|
66
|
+
/>
|
|
67
|
+
</section>
|
|
68
|
+
</>
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Usage Rules
|
|
74
|
+
- Pass an array of `features` objects. The component seamlessly maps the `icon` into a heavily styled `primary/10` nested rounded-box.
|
|
75
|
+
- Control the breakpoint math natively by passing `columns` (2, 3, or 4).
|
|
76
|
+
|
|
77
|
+
## 3. TestimonialCard
|
|
78
|
+
|
|
79
|
+
The `TestimonialCard` creates a distinct quote-box designed for social proof layouts.
|
|
80
|
+
|
|
81
|
+
### Anatomy
|
|
82
|
+
```tsx
|
|
83
|
+
// React Component
|
|
84
|
+
import { TestimonialCard } from '@reinvented/design'
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
export default function Component() {
|
|
88
|
+
return (
|
|
89
|
+
<>
|
|
90
|
+
<TestimonialCard
|
|
91
|
+
quote="This system completely changed how our AI agents output Vue components. Flawless execution every time."
|
|
92
|
+
name="Jane Doe"
|
|
93
|
+
role="Lead Developer"
|
|
94
|
+
company="Acme Corp"
|
|
95
|
+
avatar="/avatar.jpg"
|
|
96
|
+
:rating="5"
|
|
97
|
+
/>
|
|
98
|
+
</>
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Usage Rules
|
|
104
|
+
- Uses a muted inset background (`bg-muted/30`) by default, popping to `/50` on hover.
|
|
105
|
+
- Passing a `rating` integer automatically generates SVG Star icons using `currentColor`.
|
|
106
|
+
|
|
107
|
+
## 4. CtaBlock
|
|
108
|
+
|
|
109
|
+
The `CtaBlock` (Call-to-Action) is the final, massive layout trigger typically placed at the bottom of a marketing page.
|
|
110
|
+
|
|
111
|
+
### Anatomy
|
|
112
|
+
```tsx
|
|
113
|
+
// React Component
|
|
114
|
+
import { CtaBlock } from '@reinvented/design'
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
export default function Component() {
|
|
118
|
+
return (
|
|
119
|
+
<>
|
|
120
|
+
<div className="container mx-auto px-4 py-12">
|
|
121
|
+
<CtaBlock
|
|
122
|
+
title="Ready to dive in?"
|
|
123
|
+
description="Join thousands of developers building the next generation of software."
|
|
124
|
+
primaryAction="Get Started to 100% Free"
|
|
125
|
+
secondaryAction="Talk to Sales"
|
|
126
|
+
/>
|
|
127
|
+
</div>
|
|
128
|
+
</>
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Usage Rules
|
|
134
|
+
- Reverses the color hierarchy entirely. The container assumes `bg-primary` natively and forces all text to `text-primary-foreground`.
|
|
135
|
+
- Contains a massive SVG ambient pattern injected silently into the right edge of the bounding box.
|
|
136
|
+
- The `primaryAction` button automatically swaps to a `variant="secondary"` style to maintain high contrast against the `primary` background container.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Media & Realtime Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Audio/Video players and Realtime Voice/Video calls.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the user needs a video player, an audio player, or a call interface. DO NOT build media players or call controls from scratch using raw `<Button>` or `<Slider>` elements, as aligning the components correctly to standard media expectations is complex and error-prone. These blocks provide strict layout, spacing, and state alignments.
|
|
8
|
+
|
|
9
|
+
## 1. MediaPlayer
|
|
10
|
+
|
|
11
|
+
The `MediaPlayer` block is a composite for rendering audio or video playback along with proper scrubbers and controls.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { Play, Pause, Volume2, Maximize } from 'lucide-react'
|
|
17
|
+
import { Button } from '@reinvented/design'
|
|
18
|
+
import {
|
|
19
|
+
MediaPlayer,
|
|
20
|
+
MediaPlayerVideo,
|
|
21
|
+
MediaPlayerControls,
|
|
22
|
+
MediaPlayerScrubber
|
|
23
|
+
} from '@reinvented/design'
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
export default function Component() {
|
|
27
|
+
return (
|
|
28
|
+
<>
|
|
29
|
+
<MediaPlayer className="max-w-2xl">
|
|
30
|
+
<MediaPlayerVideo poster="/placeholders/video-cover.jpg" />
|
|
31
|
+
<MediaPlayerControls>
|
|
32
|
+
<MediaPlayerScrubber :defaultValue="[30]" currentTime="1:24" totalTime="4:30" />
|
|
33
|
+
<div className="flex items-center justify-between mt-1 text-foreground">
|
|
34
|
+
<div className="flex items-center gap-2">
|
|
35
|
+
<Button size="icon" variant="ghost" className="h-8 w-8 rounded-full">
|
|
36
|
+
<Play className="h-4 w-4" />
|
|
37
|
+
</Button>
|
|
38
|
+
<Button size="icon" variant="ghost" className="h-8 w-8 rounded-full">
|
|
39
|
+
<Volume2 className="h-4 w-4" />
|
|
40
|
+
</Button>
|
|
41
|
+
</div>
|
|
42
|
+
<Button size="icon" variant="ghost" className="h-8 w-8 rounded-full">
|
|
43
|
+
<Maximize className="h-4 w-4" />
|
|
44
|
+
</Button>
|
|
45
|
+
</div>
|
|
46
|
+
</MediaPlayerControls>
|
|
47
|
+
</MediaPlayer>
|
|
48
|
+
</>
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Usage Rules
|
|
54
|
+
- `MediaPlayer` acts as a rounded container (usually black).
|
|
55
|
+
- `MediaPlayerVideo` expects a `poster` prop. If it's an audio player, omit `MediaPlayerVideo` entirely or replace it with a smaller visualization area.
|
|
56
|
+
- `MediaPlayerControls` houses the scrubber and timeline action buttons.
|
|
57
|
+
- `MediaPlayerScrubber` requires `defaultValue`, `currentTime`, and `totalTime` strings.
|
|
58
|
+
|
|
59
|
+
## 2. CallControls
|
|
60
|
+
|
|
61
|
+
The `CallControls` block provides standard realtime conferencing actions (Mic, Video, Screen Share, Hang Up).
|
|
62
|
+
|
|
63
|
+
### Anatomy
|
|
64
|
+
```tsx
|
|
65
|
+
// React Component
|
|
66
|
+
import { Mic, MicOff, Video, PhoneOff, MonitorUp } from 'lucide-react'
|
|
67
|
+
import {
|
|
68
|
+
CallControls,
|
|
69
|
+
CallControlButton
|
|
70
|
+
} from '@reinvented/design'
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
export default function Component() {
|
|
74
|
+
return (
|
|
75
|
+
<>
|
|
76
|
+
<CallControls>
|
|
77
|
+
<CallControlButton tooltip="Mute Microphone" active>
|
|
78
|
+
<Mic className="h-5 w-5" />
|
|
79
|
+
</CallControlButton>
|
|
80
|
+
|
|
81
|
+
<CallControlButton tooltip="Stop Video">
|
|
82
|
+
<Video className="h-5 w-5" />
|
|
83
|
+
</CallControlButton>
|
|
84
|
+
|
|
85
|
+
<CallControlButton tooltip="Share Screen">
|
|
86
|
+
<MonitorUp className="h-5 w-5" />
|
|
87
|
+
</CallControlButton>
|
|
88
|
+
|
|
89
|
+
<CallControlButton tooltip="Leave Call" destructive>
|
|
90
|
+
<PhoneOff className="h-5 w-5" />
|
|
91
|
+
</CallControlButton>
|
|
92
|
+
</CallControls>
|
|
93
|
+
</>
|
|
94
|
+
)
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Usage Rules
|
|
99
|
+
- Place `CallControls` inside a relative container where you can center them either via Flexbox or absolute positioning (e.g. `absolute bottom-6 left-1/2 -translate-x-1/2`).
|
|
100
|
+
- Use the `active` prop on `CallControlButton` to represent toggled-on states (e.g., Mic enabled vs Mic muted).
|
|
101
|
+
- Use `destructive` for high-severity actions like ending a call.
|
|
102
|
+
- Always provide a `tooltip` string for accessibility.
|