@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,95 @@
|
|
|
1
|
+
# App Type: Project Management
|
|
2
|
+
|
|
3
|
+
Task boards, timelines, issue trackers, sprint views, and team collaboration setups.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/sidebar.md`. Each project appears in the sidebar as a collapsible group. Main content often stretches the full width bounds depending on the view type (e.g. Kanban boards require horizontal scrolling).
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
1. **Kanban Board** — Horizontal scrolling columns containing draggable cards.
|
|
10
|
+
2. **List/Backlog View** — Dense data table showing hierarchy and issue properties.
|
|
11
|
+
3. **Issue Detail Modal/Page** — Split view with main description on the left, metadata (assignees, labels, dates) on the right.
|
|
12
|
+
|
|
13
|
+
## Component Composition Example
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<!-- Project Header & Board Layout -->
|
|
17
|
+
<div className="h-full flex flex-col h-screen overflow-hidden">
|
|
18
|
+
<!-- Project Topbar -->
|
|
19
|
+
<div className="flex flex-col sm:flex-row sm:items-center justify-between p-6 border-b shrink-0">
|
|
20
|
+
<div className="flex items-center gap-4">
|
|
21
|
+
<div className="w-10 h-10 rounded-md bg-primary/10 flex items-center justify-center">
|
|
22
|
+
<FolderKanban className="w-5 h-5 text-primary" />
|
|
23
|
+
</div>
|
|
24
|
+
<div>
|
|
25
|
+
<h1 className="text-xl font-semibold">Frontend Redesign</h1>
|
|
26
|
+
<p className="text-sm text-muted-foreground">Q3 Engineering Sprint</p>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<div className="flex items-center gap-3">
|
|
31
|
+
<!-- Team Avatars Array -->
|
|
32
|
+
<div className="flex -space-x-2 mr-4">
|
|
33
|
+
<Avatar className="border-2 border-background w-8 h-8" />
|
|
34
|
+
<Avatar className="border-2 border-background w-8 h-8" />
|
|
35
|
+
<Avatar className="border-2 border-background w-8 h-8" />
|
|
36
|
+
</div>
|
|
37
|
+
<div className="flex items-center rounded-md bg-muted p-1">
|
|
38
|
+
<Button variant="secondary" size="sm" className="h-7 text-xs shadow-sm">Board</Button>
|
|
39
|
+
<Button variant="ghost" size="sm" className="h-7 text-xs">List</Button>
|
|
40
|
+
</div>
|
|
41
|
+
<Button size="sm"><Plus className="w-4 h-4 mr-1" /> Add Task</Button>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<!-- Horizontal Scrolling Board Area -->
|
|
46
|
+
<div className="flex-1 overflow-x-auto p-6 bg-muted/20">
|
|
47
|
+
<div className="flex gap-4 h-full pb-4">
|
|
48
|
+
|
|
49
|
+
<!-- Kanban Column -->
|
|
50
|
+
<div v-for="column in columns" :key="column.id" className="w-80 shrink-0 flex flex-col max-h-full">
|
|
51
|
+
<div className="flex items-center justify-between mb-3 px-1">
|
|
52
|
+
<h3 className="text-sm font-medium flex items-center gap-2">
|
|
53
|
+
{{ column.title }}
|
|
54
|
+
<Badge variant="secondary" className="font-normal">{{ column.tasks.length }}</Badge>
|
|
55
|
+
</h3>
|
|
56
|
+
<Button variant="ghost" size="icon" className="h-6 w-6"><MoreHorizontal className="w-4 h-4" /></Button>
|
|
57
|
+
</div>
|
|
58
|
+
|
|
59
|
+
<!-- Draggable Area Wrapper -->
|
|
60
|
+
<ScrollArea className="flex-1">
|
|
61
|
+
<div className="space-y-3 pr-3">
|
|
62
|
+
<Card v-for="task in column.tasks" :key="task.id" className="cursor-pointer hover:border-primary/50 transition-colors shadow-sm">
|
|
63
|
+
<CardContent className="p-4 space-y-3">
|
|
64
|
+
<div className="flex gap-2">
|
|
65
|
+
<Badge variant="outline" className="text-[10px] uppercase font-medium">{{ task.projectKey }}</Badge>
|
|
66
|
+
<Badge v-if="task.priority === 'High'" variant="destructive" className="text-[10px] uppercase font-medium">Urgent</Badge>
|
|
67
|
+
</div>
|
|
68
|
+
<p className="text-sm font-medium leading-tight">{{ task.title }}</p>
|
|
69
|
+
<div className="flex items-center justify-between pt-2">
|
|
70
|
+
<div className="flex items-center gap-2 text-muted-foreground">
|
|
71
|
+
<MessageSquare className="w-3 h-3" /> <span className="text-xs">{{ task.comments }}</span>
|
|
72
|
+
</div>
|
|
73
|
+
<Avatar className="w-6 h-6" />
|
|
74
|
+
</div>
|
|
75
|
+
</CardContent>
|
|
76
|
+
</Card>
|
|
77
|
+
</div>
|
|
78
|
+
</ScrollArea>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Anti-Patterns (DO NOT DO)
|
|
87
|
+
|
|
88
|
+
- ❌ **Do not use heavy, padded cards for tasks**: Task cards need to be compact (`p-3` or `p-4`). Do not use full `CardHeader` and `CardFooter` elements inside Kanban cards.
|
|
89
|
+
- ❌ **Do not limit the horizontal scroll of the board**: Kanban boards must use `overflow-x-auto` on the parent container, and columns should be fixed width (`w-80` or `w-72`) with `shrink-0`.
|
|
90
|
+
- ❌ **Do not ignore the metadata**: Issue trackers require priority colored badges (`variant="destructive"` for high, `variant="outline"` for low), status icons, and assignee avatars on every row or card.
|
|
91
|
+
|
|
92
|
+
## Design Notes
|
|
93
|
+
|
|
94
|
+
- **Task IDs**: Usually displayed in small muted text (e.g. `PROJ-123`) to identify tasks.
|
|
95
|
+
- **Filters**: Highly important. Always place a filter bar above the content (Assignee, Label, Status, Search).
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# App Type: SaaS Dashboard
|
|
2
|
+
|
|
3
|
+
Admin panels, web-app hubs, and B2B SaaS applications.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/sidebar.md` with a full sidebar navigation. The layout must handle deeply nested settings and multi-tenant organization switchers.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
1. **Dashboard/Overview** — Stats row (4 KPI cards) + chart area + activity feed + recent table.
|
|
10
|
+
2. **List Views** — Data tables with search, filters, pagination, and row actions.
|
|
11
|
+
3. **Detail Views** — Entity detail with tabs (Overview, Activity, Settings).
|
|
12
|
+
4. **Settings** — Grouped configurations with left-hand section nav (`layouts/settings-page.md`).
|
|
13
|
+
|
|
14
|
+
## Nav Structure & Tenant Switcher
|
|
15
|
+
B2B apps frequently switch contexts. The sidebar should include an organization selector at the very top:
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
<!-- SaaS Sidebar Top Header -->
|
|
19
|
+
<div className="flex items-center justify-between p-4 border-b">
|
|
20
|
+
<div className="flex flex-col">
|
|
21
|
+
<span className="text-sm font-semibold truncate">Acme Corp</span>
|
|
22
|
+
<span className="text-xs text-muted-foreground truncate">Free Plan</span>
|
|
23
|
+
</div>
|
|
24
|
+
<Button variant="ghost" size="icon" className="h-8 w-8">
|
|
25
|
+
<ChevronsUpDown className="w-4 h-4 text-muted-foreground" />
|
|
26
|
+
</Button>
|
|
27
|
+
</div>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Component Composition Example
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<!-- SaaS Workspace Dashboard -->
|
|
34
|
+
<div className="space-y-8">
|
|
35
|
+
<!-- Context Header -->
|
|
36
|
+
<div className="flex items-center justify-between">
|
|
37
|
+
<div>
|
|
38
|
+
<h1 className="text-2xl font-bold">Workspace Overview</h1>
|
|
39
|
+
<p className="text-muted-foreground">Monitor your team's usage and activity.</p>
|
|
40
|
+
</div>
|
|
41
|
+
<div className="flex items-center gap-3">
|
|
42
|
+
<Button variant="outline">Invite Team</Button>
|
|
43
|
+
<Button>Create Project</Button>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<!-- Quick Stats -->
|
|
48
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
|
|
49
|
+
<!-- Typical KPI Card -->
|
|
50
|
+
<Card>
|
|
51
|
+
<CardHeader className="flex flex-row items-center justify-between pb-2">
|
|
52
|
+
<CardTitle className="text-sm font-medium">Active Seats</CardTitle>
|
|
53
|
+
<Users className="h-4 w-4 text-muted-foreground" />
|
|
54
|
+
</CardHeader>
|
|
55
|
+
<CardContent>
|
|
56
|
+
<div className="text-2xl font-bold">12 / 15</div>
|
|
57
|
+
<p className="text-xs text-muted-foreground mt-1 text-warning">80% of limit reached</p>
|
|
58
|
+
</CardContent>
|
|
59
|
+
</Card>
|
|
60
|
+
<!-- Repeat for other KPIs: API Requests, Storage Used, etc -->
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<!-- Split View: Insights & Activity -->
|
|
64
|
+
<div className="grid grid-cols-1 lg:grid-cols-7 gap-6">
|
|
65
|
+
<Card className="lg:col-span-4">
|
|
66
|
+
<CardHeader>
|
|
67
|
+
<CardTitle>Usage Over Time</CardTitle>
|
|
68
|
+
</CardHeader>
|
|
69
|
+
<CardContent>
|
|
70
|
+
<ComponentPlaceholder name="LineChart" description="Line chart comparing API calls vs Storage limits over 30 days" height="300px" /> <!-- (Mockup Mode Only) -->
|
|
71
|
+
</CardContent>
|
|
72
|
+
</Card>
|
|
73
|
+
|
|
74
|
+
<Card className="lg:col-span-3">
|
|
75
|
+
<CardHeader>
|
|
76
|
+
<CardTitle>Recent Activity</CardTitle>
|
|
77
|
+
</CardHeader>
|
|
78
|
+
<CardContent className="space-y-6">
|
|
79
|
+
<div v-for="i in 4" :key="i" className="flex gap-4">
|
|
80
|
+
<Avatar className="w-8 h-8 rounded-full" />
|
|
81
|
+
<div className="space-y-1">
|
|
82
|
+
<p className="text-sm">
|
|
83
|
+
<span className="font-medium">Sarah Jenkins</span> deployed to production
|
|
84
|
+
</p>
|
|
85
|
+
<p className="text-xs text-muted-foreground">2 hours ago</p>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
</CardContent>
|
|
89
|
+
</Card>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Anti-Patterns (DO NOT DO)
|
|
95
|
+
|
|
96
|
+
- ❌ **Do not bury the 'Create' action**: Every primary SaaS list view needs a clear "Create [Entity]" or "New [Entity]" button in the top right.
|
|
97
|
+
- ❌ **Do not design flat detail pages**: Detail pages should use `<Tabs>` to segment Overview, History/Logs, and Settings, otherwise they become noisy.
|
|
98
|
+
- ❌ **Do not stretch forms across the screen**: SaaS configuration forms look terrible at 1200px wide. Constrain form layouts to `max-w-2xl` inside cards.
|
|
99
|
+
|
|
100
|
+
## Design Notes
|
|
101
|
+
|
|
102
|
+
- **Settings**: Use `layouts/settings-page.md` for organization, billing, and team settings.
|
|
103
|
+
- **Empty States**: B2B apps often launch empty. Every list view MUST design the empty state showing the value proposition and a "Create" button.
|
|
104
|
+
- **Plan Limits**: Usage progress bars (`<Progress>`) are very common in SaaS headers/sidebars to upsell users.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# App Type: Social Platform
|
|
2
|
+
|
|
3
|
+
Feeds, profiles, interactions, and discovery interfaces.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
Use `layouts/topbar.md` for consumer social, or `layouts/sidebar.md` for community platforms.
|
|
7
|
+
|
|
8
|
+
## Key Screens
|
|
9
|
+
1. **Feed** — Vertical list of post cards with author, content, interactions
|
|
10
|
+
2. **Profile** — User header + stats + tabbed content (see `patterns/user-profiles.md`)
|
|
11
|
+
3. **Discover** — Card grid of suggested content/people
|
|
12
|
+
|
|
13
|
+
## Post Card
|
|
14
|
+
```tsx
|
|
15
|
+
<Card>
|
|
16
|
+
<CardContent className="p-4 space-y-3">
|
|
17
|
+
<!-- Author -->
|
|
18
|
+
<div className="flex items-center gap-3">
|
|
19
|
+
<div className="w-10 h-10 rounded-full shrink-0 bg-muted" />
|
|
20
|
+
<div className="flex-1 min-w-0">
|
|
21
|
+
<p className="text-sm font-medium">{{ post.author }}</p>
|
|
22
|
+
<p className="text-xs text-muted-foreground">{{ post.time }}</p>
|
|
23
|
+
</div>
|
|
24
|
+
<Button variant="ghost" size="icon" className="h-8 w-8"><MoreHorizontal className="w-4 h-4" /></Button>
|
|
25
|
+
</div>
|
|
26
|
+
<!-- Content -->
|
|
27
|
+
<p className="text-sm">{{ post.content }}</p>
|
|
28
|
+
<!-- Image (optional) -->
|
|
29
|
+
<div v-if="post.hasImage" className="aspect-video rounded-lg bg-gradient-to-br from-secondary to-secondary/50" />
|
|
30
|
+
<!-- Interactions -->
|
|
31
|
+
<div className="flex items-center gap-4 pt-1">
|
|
32
|
+
<Button variant="ghost" size="sm" className="gap-1.5 text-muted-foreground">
|
|
33
|
+
<Heart className="w-4 h-4" /> {{ post.likes }}
|
|
34
|
+
</Button>
|
|
35
|
+
<Button variant="ghost" size="sm" className="gap-1.5 text-muted-foreground">
|
|
36
|
+
<MessageCircle className="w-4 h-4" /> {{ post.comments }}
|
|
37
|
+
</Button>
|
|
38
|
+
<Button variant="ghost" size="sm" className="gap-1.5 text-muted-foreground">
|
|
39
|
+
<Share2 className="w-4 h-4" /> Share
|
|
40
|
+
</Button>
|
|
41
|
+
</div>
|
|
42
|
+
</CardContent>
|
|
43
|
+
</Card>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Design Notes
|
|
47
|
+
- **Feed layout**: `max-w-2xl mx-auto` for optimal reading width
|
|
48
|
+
- **Post images**: `aspect-video` with gradient placeholders
|
|
49
|
+
- **Interaction buttons**: `variant="ghost"` with `text-muted-foreground`
|
|
50
|
+
- **5–8 feed items** for a realistic mockup
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Identity & Auth Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Authentication flows such as Login, Signup, SSO, Password Reset, and Two-Factor Authentication (2FA).
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the app requires authentication interfaces. DO NOT build login cards manually using raw `<Card>` or raw pin inputs. These blocks provide standardized spacing, SSO aesthetic boundaries, and interaction layouts out-of-the-box.
|
|
8
|
+
|
|
9
|
+
## 1. AuthCard
|
|
10
|
+
|
|
11
|
+
The `AuthCard` block is the fundamental wrapper container for authentication screens.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { Input } from '@reinvented/design'
|
|
17
|
+
import { Label } from '@reinvented/design'
|
|
18
|
+
import { Button } from '@reinvented/design'
|
|
19
|
+
import { AuthCard } from '@reinvented/design'
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
export default function Component() {
|
|
23
|
+
return (
|
|
24
|
+
<>
|
|
25
|
+
<AuthCard
|
|
26
|
+
title="Create an account"
|
|
27
|
+
description="Enter your email below to create your account"
|
|
28
|
+
footerText="Already have an account?"
|
|
29
|
+
footerLinkText="Sign in"
|
|
30
|
+
footerLinkHref="/login"
|
|
31
|
+
>
|
|
32
|
+
<div className="grid gap-4">
|
|
33
|
+
<div className="grid gap-2">
|
|
34
|
+
<Label for="email">Email</Label>
|
|
35
|
+
<Input id="email" type="email" placeholder="m@example.com" />
|
|
36
|
+
</div>
|
|
37
|
+
<div className="grid gap-2">
|
|
38
|
+
<Label for="password">Password</Label>
|
|
39
|
+
<Input id="password" type="password" />
|
|
40
|
+
</div>
|
|
41
|
+
<Button className="w-full">Create account</Button>
|
|
42
|
+
</div>
|
|
43
|
+
</AuthCard>
|
|
44
|
+
</>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Usage Rules
|
|
50
|
+
- `<AuthCard>` binds Shadcn's `<Card>` into a perfectly sized semantic login wrapper out of the box (centers content, strict `max-w-md` constraints).
|
|
51
|
+
- Use `footerText` and `footerLinkText` to automatically add standard bottom links (e.g. "Don't have an account? Sign up").
|
|
52
|
+
|
|
53
|
+
## 2. SocialLoginGroup
|
|
54
|
+
|
|
55
|
+
The `SocialLoginGroup` provides a standard block of SSO buttons along with the "Or continue with" HTML divider.
|
|
56
|
+
|
|
57
|
+
### Anatomy
|
|
58
|
+
```tsx
|
|
59
|
+
// React Component
|
|
60
|
+
import { SocialLoginGroup } from '@reinvented/design'
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
export default function Component() {
|
|
64
|
+
return (
|
|
65
|
+
<>
|
|
66
|
+
<div className="grid gap-6">
|
|
67
|
+
<SocialLoginGroup :providers="['github', 'google']" layout="row" />
|
|
68
|
+
|
|
69
|
+
<!-- Email/Password form goes here -->
|
|
70
|
+
</div>
|
|
71
|
+
</>
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Usage Rules
|
|
77
|
+
- `providers` defaults to `['github', 'google']`.
|
|
78
|
+
- `layout` can be `'row'` (which places icons side-by-side using Grid) or `'column'` (which stacks them vertically).
|
|
79
|
+
- Always place it above or below the primary email/password authentication block. The trailing divider is built-in.
|
|
80
|
+
|
|
81
|
+
## 3. TwoFactorForm
|
|
82
|
+
|
|
83
|
+
The `TwoFactorForm` block provides a unified 6-digit pin UI using the design system's `PinInput` API.
|
|
84
|
+
|
|
85
|
+
### Anatomy
|
|
86
|
+
```tsx
|
|
87
|
+
// React Component
|
|
88
|
+
import { TwoFactorForm } from '@reinvented/design'
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
export default function Component() {
|
|
92
|
+
return (
|
|
93
|
+
<>
|
|
94
|
+
<TwoFactorForm
|
|
95
|
+
email="user@reinvented.inc"
|
|
96
|
+
@complete="(code) => handleVerification(code)"
|
|
97
|
+
/>
|
|
98
|
+
</>
|
|
99
|
+
)
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Usage Rules
|
|
104
|
+
- Emits a `@complete` payload string uniquely when exactly 6 digits have been entered by the user.
|
|
105
|
+
- Disables the "Verify" button automatically until length constraints are met.
|
|
106
|
+
- Accepts an optional `email` prop to display where the code was dispatched.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Communication & Chat Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for messaging, activity feeds, and comment threads.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the app requires displaying messages or activity logs. DO NOT build these flows from scratch using raw `<Card>`, `<Avatar>`, or `<div>` elements. These blocks provide strict layout, spacing, and state alignments out-of-the-box.
|
|
8
|
+
|
|
9
|
+
## 1. ChatBubble
|
|
10
|
+
|
|
11
|
+
The `ChatBubble` block is a composite for rendering a single message in a chat UI. It supports sent/received states to control alignment and colors.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import {
|
|
17
|
+
ChatBubble,
|
|
18
|
+
ChatBubbleAvatar,
|
|
19
|
+
ChatBubbleMessage,
|
|
20
|
+
ChatBubbleTimestamp
|
|
21
|
+
} from '@reinvented/design'
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
export default function Component() {
|
|
25
|
+
return (
|
|
26
|
+
<>
|
|
27
|
+
<div className="flex flex-col gap-4 p-4">
|
|
28
|
+
<!-- Received Message (Aligned Left) -->
|
|
29
|
+
<ChatBubble variant="received">
|
|
30
|
+
<ChatBubbleAvatar src="/avatars/user1.png" fallback="JD" />
|
|
31
|
+
<ChatBubbleMessage variant="received">
|
|
32
|
+
Hey, did you review the final PR?
|
|
33
|
+
<ChatBubbleTimestamp timestamp="10:42 AM" />
|
|
34
|
+
</ChatBubbleMessage>
|
|
35
|
+
</ChatBubble>
|
|
36
|
+
|
|
37
|
+
<!-- Sent Message (Aligned Right) -->
|
|
38
|
+
<ChatBubble variant="sent">
|
|
39
|
+
<ChatBubbleAvatar fallback="ME" />
|
|
40
|
+
<ChatBubbleMessage variant="sent">
|
|
41
|
+
Looking at it right now!
|
|
42
|
+
<ChatBubbleTimestamp timestamp="10:44 AM" />
|
|
43
|
+
</ChatBubbleMessage>
|
|
44
|
+
</ChatBubble>
|
|
45
|
+
</div>
|
|
46
|
+
</>
|
|
47
|
+
)
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Props
|
|
52
|
+
- `variant` (`"sent" | "received"` default: `"received"`): Controls layout direction. `"sent"` aligns items right and swaps the bubble color to the primary token. Both `<ChatBubble>` and `<ChatBubbleMessage>` accept this prop and it MUST match.
|
|
53
|
+
|
|
54
|
+
## 2. ActivityItem
|
|
55
|
+
|
|
56
|
+
The `ActivityItem` block builds timeline-based activity feeds with relative connecting lines between items.
|
|
57
|
+
|
|
58
|
+
### Anatomy
|
|
59
|
+
```tsx
|
|
60
|
+
// React Component
|
|
61
|
+
import {
|
|
62
|
+
ActivityItem,
|
|
63
|
+
ActivityItemAvatar,
|
|
64
|
+
ActivityItemContent
|
|
65
|
+
} from '@reinvented/design'
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export default function Component() {
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<div className="flex flex-col">
|
|
72
|
+
<ActivityItem>
|
|
73
|
+
<ActivityItemAvatar fallback="JD" />
|
|
74
|
+
<ActivityItemContent>
|
|
75
|
+
<p className="text-sm font-medium">Jane Doe commented on Task #104</p>
|
|
76
|
+
<p className="text-sm text-muted-foreground mt-1">
|
|
77
|
+
"Can we get this merged before EOD?"
|
|
78
|
+
</p>
|
|
79
|
+
<span className="text-xs text-muted-foreground mt-2">2 hours ago</span>
|
|
80
|
+
</ActivityItemContent>
|
|
81
|
+
</ActivityItem>
|
|
82
|
+
|
|
83
|
+
<ActivityItem>
|
|
84
|
+
<ActivityItemAvatar fallback="SS" />
|
|
85
|
+
<ActivityItemContent>
|
|
86
|
+
<p className="text-sm font-medium">System merged PR #42</p>
|
|
87
|
+
<span className="text-xs text-muted-foreground mt-1">Yesterday</span>
|
|
88
|
+
</ActivityItemContent>
|
|
89
|
+
</ActivityItem>
|
|
90
|
+
</div>
|
|
91
|
+
</>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Usage Rules
|
|
97
|
+
- Wrap a list of `ActivityItem`s in a flex column container.
|
|
98
|
+
- The `ActivityItem` automatically handles the rendering of the chronological connecting line between avatars. The last item naturally hides the line.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Knowledge & Content Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for Articles, Blog Headers, Wikis, and Rich Text Viewers.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever the app renders long-form editorial content. DO NOT build Article headers by stacking avatars and headings manually. These blocks strictly adhere to optimal reading widths (`max-w-3xl`) and semantic typography scales.
|
|
8
|
+
|
|
9
|
+
## 1. ArticleHeader
|
|
10
|
+
|
|
11
|
+
The `ArticleHeader` block establishes the core typography hierarchy for the start of any editorial view.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import { ArticleHeader } from '@reinvented/design'
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
export default function Component() {
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<ArticleHeader
|
|
23
|
+
title="The Future of Serverless Computing"
|
|
24
|
+
description="Exploring the next wave of edge functions and how they eliminate cold starts entirely."
|
|
25
|
+
authorName="Sarah Drasner"
|
|
26
|
+
authorAvatar="/avatars/sarah.jpg"
|
|
27
|
+
date="Nov 24, 2024"
|
|
28
|
+
readTime="5 min read"
|
|
29
|
+
:tags="['Engineering', 'Architecture', 'Edge']"
|
|
30
|
+
/>
|
|
31
|
+
</>
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Usage Rules
|
|
37
|
+
- `title` is rendering as a massive semibold `h1`.
|
|
38
|
+
- `description` acts as the optional sub-leadin paragraph.
|
|
39
|
+
- The block automatically scales the Avatar and groups the author meta-data horizontally.
|
|
40
|
+
|
|
41
|
+
## 2. RichTextContent
|
|
42
|
+
|
|
43
|
+
The `RichTextContent` block is a layout wrapper designed specifically to ingest unsanitized HTML, markdown, or rich-text editor output. It applies the `@tailwindcss/typography` "prose" layer and binds it firmly to Shadcn CSS variables automatically.
|
|
44
|
+
|
|
45
|
+
### Anatomy
|
|
46
|
+
```tsx
|
|
47
|
+
// React Component
|
|
48
|
+
import { RichTextContent } from '@reinvented/design'
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
export default function Component() {
|
|
52
|
+
return (
|
|
53
|
+
<>
|
|
54
|
+
<RichTextContent>
|
|
55
|
+
<h2>Introduction</h2>
|
|
56
|
+
<p>This is standard HTML that will be beautifully formatted because it's caught inside the RichTextContent block.</p>
|
|
57
|
+
<blockquote>The future is already here — it's just not very evenly distributed.</blockquote>
|
|
58
|
+
<p>Code chunks look great too: <code>npm run build</code></p>
|
|
59
|
+
</RichTextContent>
|
|
60
|
+
</>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Usage Rules
|
|
66
|
+
- The component does not take props other than `class`.
|
|
67
|
+
- Wrap it entirely around either a `v-html` dump or semantic HTML.
|
|
68
|
+
- It automatically forces `max-w-3xl` to keep reading line lengths optimal.
|
|
69
|
+
|
|
70
|
+
## 3. AuthorCard
|
|
71
|
+
|
|
72
|
+
The `AuthorCard` block is an end-of-article credit box.
|
|
73
|
+
|
|
74
|
+
### Anatomy
|
|
75
|
+
```tsx
|
|
76
|
+
// React Component
|
|
77
|
+
import { AuthorCard } from '@reinvented/design'
|
|
78
|
+
import { Button } from '@reinvented/design'
|
|
79
|
+
import { Twitter } from 'lucide-react'
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
export default function Component() {
|
|
83
|
+
return (
|
|
84
|
+
<>
|
|
85
|
+
<AuthorCard
|
|
86
|
+
name="Sarah Drasner"
|
|
87
|
+
role="VP of Developer Experience at Netlify"
|
|
88
|
+
bio="Sarah is an award-winning Speaker, Engineering Manager, and author of SVG Animations. She's a Vue Core team member and an organizer of the Vue.js meetup."
|
|
89
|
+
avatar="/avatars/sarah.jpg"
|
|
90
|
+
>
|
|
91
|
+
<template #action>
|
|
92
|
+
<Button variant="outline">
|
|
93
|
+
<Twitter className="mr-2 h-4 w-4" />
|
|
94
|
+
Follow
|
|
95
|
+
</Button>
|
|
96
|
+
</>
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
</AuthorCard>
|
|
100
|
+
</>
|
|
101
|
+
)
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Usage Rules
|
|
106
|
+
- Usually appended immediately beneath the `RichTextContent`.
|
|
107
|
+
- Leverages the `<slot name="action">` to allow custom buttons (e.g. "Follow on Twitter", "View Profile", or standard Outline button).
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Data Management Blocks
|
|
2
|
+
|
|
3
|
+
This document covers composite UI blocks designed for complex structural data interfaces like Kanban boards and nested Tree Views.
|
|
4
|
+
|
|
5
|
+
## When to use Blocks vs Primitives
|
|
6
|
+
|
|
7
|
+
Use these blocks whenever building advanced data-manipulation views often found in project management, CMS admin layouts, or IDE-like software. DO NOT build Kanban lanes or collapsible trees manually using raw DOM iterations, as maintaining state and strict overflow interactions is highly repetitive.
|
|
8
|
+
|
|
9
|
+
## 1. Kanban Board
|
|
10
|
+
|
|
11
|
+
The `KanbanBoard` block set provides a horizontal scrolling pipeline divided into columns and stackable cards.
|
|
12
|
+
|
|
13
|
+
### Anatomy
|
|
14
|
+
```tsx
|
|
15
|
+
// React Component
|
|
16
|
+
import {
|
|
17
|
+
KanbanBoard,
|
|
18
|
+
KanbanColumn,
|
|
19
|
+
KanbanCard
|
|
20
|
+
} from '@reinvented/design'
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
export default function Component() {
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
<KanbanBoard className="h-[calc(100vh-140px)]">
|
|
27
|
+
<!-- To Do -->
|
|
28
|
+
<KanbanColumn title="To Do" :count="3">
|
|
29
|
+
<KanbanCard
|
|
30
|
+
title="Design system color tokens"
|
|
31
|
+
id="TSK-412"
|
|
32
|
+
priority="high"
|
|
33
|
+
:labels="['Design', 'System']"
|
|
34
|
+
:comments="4"
|
|
35
|
+
:attachments="2"
|
|
36
|
+
:assignee="{ name: 'Alice Adams', avatar: '/avatars/alice.png' }"
|
|
37
|
+
/>
|
|
38
|
+
<KanbanCard
|
|
39
|
+
title="Audit dependency tree"
|
|
40
|
+
id="TSK-413"
|
|
41
|
+
priority="low"
|
|
42
|
+
:labels="['Engineering']"
|
|
43
|
+
/>
|
|
44
|
+
</KanbanColumn>
|
|
45
|
+
|
|
46
|
+
<!-- In Progress -->
|
|
47
|
+
<KanbanColumn title="In Progress" :count="1">
|
|
48
|
+
<KanbanCard
|
|
49
|
+
title="Implement Kanban UI block"
|
|
50
|
+
id="TSK-408"
|
|
51
|
+
priority="high"
|
|
52
|
+
:comments="12"
|
|
53
|
+
:assignee="{ name: 'Janakan', avatar: '/avatars/janakan.png' }"
|
|
54
|
+
/>
|
|
55
|
+
</KanbanColumn>
|
|
56
|
+
</KanbanBoard>
|
|
57
|
+
</>
|
|
58
|
+
)
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Usage Rules
|
|
63
|
+
- `<KanbanBoard>` sets up the core horizontal timeline. Usually needs a firm `height` constraint (like `h-[calc(100vh-200px)]`) so the columns can scroll vertically independent of the page.
|
|
64
|
+
- `<KanbanColumn>` builds a solid column constraint of `300px` width. The `title` and `count` drive the top header.
|
|
65
|
+
- `<KanbanCard>` handles hover, grab, and metadata visualizations. Use `priority`, `labels`, and numerical summaries (`comments`, `attachments`) to inject rich data pills automatically.
|
|
66
|
+
|
|
67
|
+
## 2. TreeView
|
|
68
|
+
|
|
69
|
+
The `TreeView` block constructs collapsible file or folder hierarchies natively using Shadcn `Collapsible`.
|
|
70
|
+
|
|
71
|
+
### Anatomy
|
|
72
|
+
```tsx
|
|
73
|
+
// React Component
|
|
74
|
+
import {
|
|
75
|
+
TreeView,
|
|
76
|
+
TreeItem
|
|
77
|
+
} from '@reinvented/design'
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
export default function Component() {
|
|
81
|
+
return (
|
|
82
|
+
<>
|
|
83
|
+
<TreeView className="max-w-xs">
|
|
84
|
+
<TreeItem title="src" isFolder defaultExpanded :level="0">
|
|
85
|
+
<TreeItem title="assets" isFolder :level="1" />
|
|
86
|
+
<TreeItem title="components" isFolder defaultExpanded :level="1">
|
|
87
|
+
<TreeItem title="ui" isFolder :level="2" />
|
|
88
|
+
<TreeItem title="blocks" isFolder defaultExpanded :level="2">
|
|
89
|
+
<TreeItem title="data-management" isFolder defaultExpanded :level="3">
|
|
90
|
+
<TreeItem title="TreeView.tsx" :level="4" />
|
|
91
|
+
<TreeItem title="TreeItem.tsx" :level="4" />
|
|
92
|
+
</TreeItem>
|
|
93
|
+
</TreeItem>
|
|
94
|
+
</TreeItem>
|
|
95
|
+
<TreeItem title="App.tsx" :level="1" />
|
|
96
|
+
<TreeItem title="main.ts" :level="1" />
|
|
97
|
+
</TreeItem>
|
|
98
|
+
<TreeItem title="package.json" :level="0" />
|
|
99
|
+
<TreeItem title="README.md" :level="0" />
|
|
100
|
+
</TreeView>
|
|
101
|
+
</>
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Usage Rules
|
|
107
|
+
- Nest `<TreeItem>` inside a parent `<TreeItem isFolder>`.
|
|
108
|
+
- Pass `:level="X"` explicitly to each item, increasing the depth iteratively. This physically sets the `padding-left` natively so deeply nested lines do not misalign. `0` is the root indentation.
|
|
109
|
+
- Uses `defaultExpanded` boolean modifier on folders to start opened.
|