@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.
Files changed (439) hide show
  1. package/README.md +1 -1
  2. package/SKILL.md +214 -0
  3. package/package.json +58 -23
  4. package/skills/apps/analytics.md +103 -0
  5. package/skills/apps/booking-scheduling.md +97 -0
  6. package/skills/apps/content-management.md +52 -0
  7. package/skills/apps/crm.md +80 -0
  8. package/skills/apps/e-commerce.md +109 -0
  9. package/skills/apps/education.md +79 -0
  10. package/skills/apps/finance.md +68 -0
  11. package/skills/apps/health-fitness.md +72 -0
  12. package/skills/apps/marketplace.md +99 -0
  13. package/skills/apps/messaging.md +84 -0
  14. package/skills/apps/portfolio-personal.md +90 -0
  15. package/skills/apps/project-management.md +95 -0
  16. package/skills/apps/saas-dashboard.md +104 -0
  17. package/skills/apps/social-platform.md +50 -0
  18. package/skills/blocks/auth.md +106 -0
  19. package/skills/blocks/communication.md +98 -0
  20. package/skills/blocks/content.md +107 -0
  21. package/skills/blocks/data-management.md +109 -0
  22. package/skills/blocks/data-viz.md +92 -0
  23. package/skills/blocks/ecommerce.md +126 -0
  24. package/skills/blocks/feedback.md +97 -0
  25. package/skills/blocks/filtering.md +127 -0
  26. package/skills/blocks/marketing.md +136 -0
  27. package/skills/blocks/media.md +102 -0
  28. package/skills/blocks/navigation.md +136 -0
  29. package/skills/blocks/onboarding.md +75 -0
  30. package/skills/blocks/profiles.md +131 -0
  31. package/skills/blocks/scheduling.md +117 -0
  32. package/skills/blocks/settings.md +102 -0
  33. package/skills/components/advanced-components.md +142 -0
  34. package/skills/components/avatar.md +92 -0
  35. package/skills/components/badge.md +105 -0
  36. package/skills/components/button.md +87 -0
  37. package/skills/components/card.md +144 -0
  38. package/skills/components/chart.md +88 -0
  39. package/skills/components/dialog.md +109 -0
  40. package/skills/components/dropdown-menu.md +117 -0
  41. package/skills/components/extended-components.md +187 -0
  42. package/skills/components/feedback.md +165 -0
  43. package/skills/components/form.md +112 -0
  44. package/skills/components/input.md +107 -0
  45. package/skills/components/map.md +53 -0
  46. package/skills/components/navigation.md +73 -0
  47. package/skills/components/overlay.md +77 -0
  48. package/skills/components/page-header.md +51 -0
  49. package/skills/components/select.md +175 -0
  50. package/skills/components/table.md +102 -0
  51. package/skills/components/tabs.md +105 -0
  52. package/skills/components/utilities.md +138 -0
  53. package/skills/devices/desktop.md +43 -0
  54. package/skills/devices/mobile.md +77 -0
  55. package/skills/foundation/design-principles.md +77 -0
  56. package/skills/foundation/design-tokens.md +121 -0
  57. package/skills/foundation/mockup-generation.md +118 -0
  58. package/skills/foundation/rules.md +54 -0
  59. package/skills/foundation/tailwind-usage.md +204 -0
  60. package/skills/layouts/dashboard.md +71 -0
  61. package/skills/layouts/full-page-form.md +75 -0
  62. package/skills/layouts/list-detail.md +70 -0
  63. package/skills/layouts/marketing.md +70 -0
  64. package/skills/layouts/responsive.md +67 -0
  65. package/skills/layouts/settings-page.md +106 -0
  66. package/skills/layouts/sidebar.md +73 -0
  67. package/skills/layouts/topbar.md +68 -0
  68. package/skills/patterns/auth.md +131 -0
  69. package/skills/patterns/content-display.md +164 -0
  70. package/skills/patterns/dashboards.md +104 -0
  71. package/skills/patterns/data-tables.md +113 -0
  72. package/skills/patterns/empty-states.md +71 -0
  73. package/skills/patterns/error-states.md +73 -0
  74. package/skills/patterns/forms.md +136 -0
  75. package/skills/patterns/loading-states.md +92 -0
  76. package/skills/patterns/navigation.md +113 -0
  77. package/skills/patterns/notifications.md +91 -0
  78. package/skills/patterns/onboarding.md +42 -0
  79. package/skills/patterns/search.md +55 -0
  80. package/skills/patterns/settings.md +132 -0
  81. package/skills/patterns/user-profiles.md +67 -0
  82. package/skills/personas/business-operator.md +114 -0
  83. package/skills/personas/consumer-casual.md +60 -0
  84. package/skills/personas/consumer-power-user.md +109 -0
  85. package/skills/personas/creative-professional.md +109 -0
  86. package/skills/personas/enterprise-admin.md +134 -0
  87. package/skills/visual/color-usage.md +62 -0
  88. package/skills/visual/dark-mode.md +50 -0
  89. package/skills/visual/polish-techniques.md +101 -0
  90. package/skills/visual/spacing-composition.md +69 -0
  91. package/skills/visual/transitions-animations.md +66 -0
  92. package/skills/visual/typography-hierarchy.md +66 -0
  93. package/src/components/blocks/auth/auth-card/AuthCard.tsx +62 -0
  94. package/src/components/blocks/auth/auth-card/index.ts +1 -0
  95. package/src/components/blocks/auth/index.ts +3 -0
  96. package/src/components/blocks/auth/social-login/SocialLoginGroup.tsx +75 -0
  97. package/src/components/blocks/auth/social-login/index.ts +1 -0
  98. package/src/components/blocks/auth/two-factor/TwoFactorForm.tsx +59 -0
  99. package/src/components/blocks/auth/two-factor/index.ts +1 -0
  100. package/src/components/blocks/communication/activity-item/ActivityItem.tsx +17 -0
  101. package/src/components/blocks/communication/activity-item/ActivityItemAvatar.tsx +21 -0
  102. package/src/components/blocks/communication/activity-item/ActivityItemContent.tsx +16 -0
  103. package/src/components/blocks/communication/activity-item/index.ts +3 -0
  104. package/src/components/blocks/communication/chat-bubble/ChatBubble.tsx +21 -0
  105. package/src/components/blocks/communication/chat-bubble/ChatBubbleAvatar.tsx +19 -0
  106. package/src/components/blocks/communication/chat-bubble/ChatBubbleMessage.tsx +35 -0
  107. package/src/components/blocks/communication/chat-bubble/ChatBubbleTimestamp.tsx +15 -0
  108. package/src/components/blocks/communication/chat-bubble/index.ts +4 -0
  109. package/src/components/blocks/communication/index.ts +2 -0
  110. package/src/components/blocks/content/article-header/ArticleHeader.tsx +73 -0
  111. package/src/components/blocks/content/article-header/index.ts +1 -0
  112. package/src/components/blocks/content/author-card/AuthorCard.tsx +46 -0
  113. package/src/components/blocks/content/author-card/index.ts +1 -0
  114. package/src/components/blocks/content/index.ts +3 -0
  115. package/src/components/blocks/content/rich-text/RichTextContent.tsx +27 -0
  116. package/src/components/blocks/content/rich-text/index.ts +1 -0
  117. package/src/components/blocks/data-management/index.ts +2 -0
  118. package/src/components/blocks/data-management/kanban/KanbanBoard.tsx +10 -0
  119. package/src/components/blocks/data-management/kanban/KanbanCard.tsx +102 -0
  120. package/src/components/blocks/data-management/kanban/KanbanColumn.tsx +41 -0
  121. package/src/components/blocks/data-management/kanban/index.ts +3 -0
  122. package/src/components/blocks/data-management/tree-view/TreeItem.tsx +68 -0
  123. package/src/components/blocks/data-management/tree-view/TreeView.tsx +10 -0
  124. package/src/components/blocks/data-management/tree-view/index.ts +2 -0
  125. package/src/components/blocks/data-viz/financial-ticker/FinancialTicker.tsx +35 -0
  126. package/src/components/blocks/data-viz/financial-ticker/index.ts +1 -0
  127. package/src/components/blocks/data-viz/index.ts +3 -0
  128. package/src/components/blocks/data-viz/kpi-card/KpiCard.tsx +61 -0
  129. package/src/components/blocks/data-viz/kpi-card/index.ts +1 -0
  130. package/src/components/blocks/data-viz/stat-grid/StatGrid.tsx +28 -0
  131. package/src/components/blocks/data-viz/stat-grid/index.ts +1 -0
  132. package/src/components/blocks/ecommerce/index.ts +3 -0
  133. package/src/components/blocks/ecommerce/pricing-tier/PricingFeatureList.tsx +27 -0
  134. package/src/components/blocks/ecommerce/pricing-tier/PricingHeader.tsx +25 -0
  135. package/src/components/blocks/ecommerce/pricing-tier/PricingTier.tsx +31 -0
  136. package/src/components/blocks/ecommerce/pricing-tier/index.ts +3 -0
  137. package/src/components/blocks/ecommerce/product-card/ProductCard.tsx +17 -0
  138. package/src/components/blocks/ecommerce/product-card/ProductCardContent.tsx +15 -0
  139. package/src/components/blocks/ecommerce/product-card/ProductCardImage.tsx +20 -0
  140. package/src/components/blocks/ecommerce/product-card/ProductCardPrice.tsx +20 -0
  141. package/src/components/blocks/ecommerce/product-card/index.ts +4 -0
  142. package/src/components/blocks/ecommerce/rating-summary/RatingStars.tsx +32 -0
  143. package/src/components/blocks/ecommerce/rating-summary/index.ts +1 -0
  144. package/src/components/blocks/feedback/empty-state/EmptyState.tsx +53 -0
  145. package/src/components/blocks/feedback/empty-state/index.ts +1 -0
  146. package/src/components/blocks/feedback/error-state/ErrorState.tsx +50 -0
  147. package/src/components/blocks/feedback/error-state/index.ts +1 -0
  148. package/src/components/blocks/feedback/index.ts +3 -0
  149. package/src/components/blocks/feedback/not-found/NotFoundState.tsx +47 -0
  150. package/src/components/blocks/feedback/not-found/index.ts +1 -0
  151. package/src/components/blocks/filtering/faceted-sidebar/FacetedGroup.tsx +32 -0
  152. package/src/components/blocks/filtering/faceted-sidebar/FacetedSidebar.tsx +26 -0
  153. package/src/components/blocks/filtering/faceted-sidebar/index.ts +2 -0
  154. package/src/components/blocks/filtering/filter-bar/FilterBar.tsx +85 -0
  155. package/src/components/blocks/filtering/filter-bar/index.ts +1 -0
  156. package/src/components/blocks/filtering/index.ts +3 -0
  157. package/src/components/blocks/filtering/search-result/SearchResultItem.tsx +70 -0
  158. package/src/components/blocks/filtering/search-result/index.ts +1 -0
  159. package/src/components/blocks/index.ts +21 -0
  160. package/src/components/blocks/marketing/cta-block/CtaBlock.tsx +80 -0
  161. package/src/components/blocks/marketing/cta-block/index.ts +1 -0
  162. package/src/components/blocks/marketing/feature-grid/FeatureGrid.tsx +47 -0
  163. package/src/components/blocks/marketing/feature-grid/index.ts +1 -0
  164. package/src/components/blocks/marketing/hero-section/HeroSection.tsx +89 -0
  165. package/src/components/blocks/marketing/hero-section/index.ts +1 -0
  166. package/src/components/blocks/marketing/index.ts +4 -0
  167. package/src/components/blocks/marketing/testimonial-card/TestimonialCard.tsx +71 -0
  168. package/src/components/blocks/marketing/testimonial-card/index.ts +1 -0
  169. package/src/components/blocks/media/call-controls/CallControlButton.tsx +52 -0
  170. package/src/components/blocks/media/call-controls/CallControls.tsx +10 -0
  171. package/src/components/blocks/media/call-controls/index.ts +2 -0
  172. package/src/components/blocks/media/index.ts +2 -0
  173. package/src/components/blocks/media/media-player/MediaPlayer.tsx +20 -0
  174. package/src/components/blocks/media/media-player/MediaPlayerControls.tsx +16 -0
  175. package/src/components/blocks/media/media-player/MediaPlayerScrubber.tsx +29 -0
  176. package/src/components/blocks/media/media-player/MediaPlayerVideo.tsx +25 -0
  177. package/src/components/blocks/media/media-player/index.ts +4 -0
  178. package/src/components/blocks/navigation/app-sidebar/AppSidebar.tsx +32 -0
  179. package/src/components/blocks/navigation/app-sidebar/NavItem.tsx +43 -0
  180. package/src/components/blocks/navigation/app-sidebar/index.ts +2 -0
  181. package/src/components/blocks/navigation/context-switcher/ContextSwitcher.tsx +77 -0
  182. package/src/components/blocks/navigation/context-switcher/index.ts +1 -0
  183. package/src/components/blocks/navigation/index.ts +3 -0
  184. package/src/components/blocks/navigation/top-navbar/TopNavbar.tsx +47 -0
  185. package/src/components/blocks/navigation/top-navbar/index.ts +1 -0
  186. package/src/components/blocks/onboarding/index.ts +2 -0
  187. package/src/components/blocks/onboarding/onboarding-welcome/OnboardingWelcome.tsx +74 -0
  188. package/src/components/blocks/onboarding/onboarding-welcome/index.ts +1 -0
  189. package/src/components/blocks/onboarding/step-wizard/StepWizard.tsx +72 -0
  190. package/src/components/blocks/onboarding/step-wizard/index.ts +1 -0
  191. package/src/components/blocks/profiles/connection-list/ConnectionItem.tsx +35 -0
  192. package/src/components/blocks/profiles/connection-list/ConnectionList.tsx +16 -0
  193. package/src/components/blocks/profiles/connection-list/index.ts +2 -0
  194. package/src/components/blocks/profiles/index.ts +3 -0
  195. package/src/components/blocks/profiles/profile-header/ProfileHeader.tsx +88 -0
  196. package/src/components/blocks/profiles/profile-header/index.ts +1 -0
  197. package/src/components/blocks/profiles/profile-stats/ProfileStats.tsx +20 -0
  198. package/src/components/blocks/profiles/profile-stats/index.ts +1 -0
  199. package/src/components/blocks/scheduling/booking-slot/BookingSlot.tsx +44 -0
  200. package/src/components/blocks/scheduling/booking-slot/index.ts +1 -0
  201. package/src/components/blocks/scheduling/event-card/EventCard.tsx +85 -0
  202. package/src/components/blocks/scheduling/event-card/index.ts +1 -0
  203. package/src/components/blocks/scheduling/index.ts +3 -0
  204. package/src/components/blocks/scheduling/timeline-row/TimelineRow.tsx +82 -0
  205. package/src/components/blocks/scheduling/timeline-row/index.ts +1 -0
  206. package/src/components/blocks/settings/billing-usage/BillingUsage.tsx +49 -0
  207. package/src/components/blocks/settings/billing-usage/index.ts +1 -0
  208. package/src/components/blocks/settings/index.ts +3 -0
  209. package/src/components/blocks/settings/integration-card/IntegrationCard.tsx +62 -0
  210. package/src/components/blocks/settings/integration-card/index.ts +1 -0
  211. package/src/components/blocks/settings/settings-section/SettingsSection.tsx +23 -0
  212. package/src/components/blocks/settings/settings-section/index.ts +1 -0
  213. package/src/components/ui/accordion.tsx +56 -0
  214. package/src/components/ui/alert-dialog.tsx +141 -0
  215. package/src/components/ui/alert.tsx +59 -0
  216. package/src/components/ui/aspect-ratio.tsx +5 -0
  217. package/src/components/ui/avatar.tsx +50 -0
  218. package/src/components/ui/badge.tsx +36 -0
  219. package/src/components/ui/breadcrumb.tsx +115 -0
  220. package/src/components/ui/button.tsx +56 -0
  221. package/src/components/ui/calendar.tsx +211 -0
  222. package/src/components/ui/card.tsx +79 -0
  223. package/src/components/ui/carousel.tsx +262 -0
  224. package/src/components/ui/chart.tsx +367 -0
  225. package/src/components/ui/checkbox.tsx +28 -0
  226. package/src/components/ui/collapsible.tsx +11 -0
  227. package/src/components/ui/command.tsx +153 -0
  228. package/src/components/ui/component-placeholder.tsx +38 -0
  229. package/src/components/ui/context-menu.tsx +198 -0
  230. package/src/components/ui/dialog.tsx +122 -0
  231. package/src/components/ui/drawer.tsx +116 -0
  232. package/src/components/ui/dropdown-menu.tsx +200 -0
  233. package/src/components/ui/form.tsx +176 -0
  234. package/src/components/ui/hover-card.tsx +27 -0
  235. package/src/components/ui/input-otp.tsx +69 -0
  236. package/src/components/ui/input.tsx +22 -0
  237. package/src/components/ui/label.tsx +24 -0
  238. package/src/components/ui/menubar.tsx +256 -0
  239. package/src/components/ui/navigation-menu.tsx +128 -0
  240. package/src/components/ui/pagination.tsx +117 -0
  241. package/src/components/ui/popover.tsx +29 -0
  242. package/src/components/ui/progress.tsx +28 -0
  243. package/src/components/ui/radio-group.tsx +42 -0
  244. package/src/components/ui/resizable.tsx +45 -0
  245. package/src/components/ui/scroll-area.tsx +46 -0
  246. package/src/components/ui/select.tsx +160 -0
  247. package/src/components/ui/separator.tsx +29 -0
  248. package/src/components/ui/sheet.tsx +140 -0
  249. package/src/components/ui/skeleton.tsx +15 -0
  250. package/src/components/ui/slider.tsx +26 -0
  251. package/src/components/ui/sonner.tsx +45 -0
  252. package/src/components/ui/switch.tsx +27 -0
  253. package/src/components/ui/table.tsx +117 -0
  254. package/src/components/ui/tabs.tsx +53 -0
  255. package/src/components/ui/textarea.tsx +22 -0
  256. package/src/components/ui/toast.tsx +127 -0
  257. package/src/components/ui/toaster.tsx +33 -0
  258. package/src/components/ui/toggle-group.tsx +61 -0
  259. package/src/components/ui/toggle.tsx +45 -0
  260. package/src/components/ui/tooltip.tsx +28 -0
  261. package/src/hooks/use-toast.ts +194 -0
  262. package/src/index.ts +53 -56
  263. package/src/styles/tokens.css +30 -14
  264. package/tailwind.config.js +120 -98
  265. package/tsconfig.json +2 -2
  266. package/DESIGN_GUIDE.md +0 -148
  267. package/src/components/ui/accordion/Accordion.vue +0 -13
  268. package/src/components/ui/accordion/AccordionContent.vue +0 -20
  269. package/src/components/ui/accordion/AccordionItem.vue +0 -15
  270. package/src/components/ui/accordion/AccordionTrigger.vue +0 -25
  271. package/src/components/ui/accordion/index.ts +0 -4
  272. package/src/components/ui/alert/Alert.vue +0 -38
  273. package/src/components/ui/alert/AlertDescription.vue +0 -12
  274. package/src/components/ui/alert/AlertTitle.vue +0 -12
  275. package/src/components/ui/alert/index.ts +0 -3
  276. package/src/components/ui/alert-dialog/AlertDialog.vue +0 -13
  277. package/src/components/ui/alert-dialog/AlertDialogAction.vue +0 -21
  278. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +0 -21
  279. package/src/components/ui/alert-dialog/AlertDialogContent.vue +0 -39
  280. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +0 -15
  281. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +0 -12
  282. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +0 -12
  283. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +0 -15
  284. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -11
  285. package/src/components/ui/alert-dialog/index.ts +0 -9
  286. package/src/components/ui/avatar/Avatar.vue +0 -14
  287. package/src/components/ui/avatar/index.ts +0 -1
  288. package/src/components/ui/badge/Badge.vue +0 -27
  289. package/src/components/ui/badge/index.ts +0 -1
  290. package/src/components/ui/breadcrumb/Breadcrumb.vue +0 -6
  291. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -12
  292. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +0 -6
  293. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +0 -20
  294. package/src/components/ui/breadcrumb/BreadcrumbList.vue +0 -6
  295. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +0 -6
  296. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -11
  297. package/src/components/ui/breadcrumb/index.ts +0 -7
  298. package/src/components/ui/button/Button.vue +0 -65
  299. package/src/components/ui/button/index.ts +0 -1
  300. package/src/components/ui/card/Card.vue +0 -13
  301. package/src/components/ui/card/CardContent.vue +0 -7
  302. package/src/components/ui/card/CardDescription.vue +0 -7
  303. package/src/components/ui/card/CardFooter.vue +0 -7
  304. package/src/components/ui/card/CardHeader.vue +0 -9
  305. package/src/components/ui/card/CardTitle.vue +0 -7
  306. package/src/components/ui/card/index.ts +0 -6
  307. package/src/components/ui/checkbox/Checkbox.vue +0 -25
  308. package/src/components/ui/checkbox/index.ts +0 -1
  309. package/src/components/ui/collapsible/Collapsible.vue +0 -13
  310. package/src/components/ui/collapsible/index.ts +0 -2
  311. package/src/components/ui/command/Command.vue +0 -16
  312. package/src/components/ui/command/CommandEmpty.vue +0 -5
  313. package/src/components/ui/command/CommandGroup.vue +0 -22
  314. package/src/components/ui/command/CommandInput.vue +0 -21
  315. package/src/components/ui/command/CommandItem.vue +0 -22
  316. package/src/components/ui/command/CommandList.vue +0 -17
  317. package/src/components/ui/command/CommandSeparator.vue +0 -5
  318. package/src/components/ui/command/index.ts +0 -7
  319. package/src/components/ui/context-menu/ContextMenuContent.vue +0 -24
  320. package/src/components/ui/context-menu/ContextMenuItem.vue +0 -16
  321. package/src/components/ui/context-menu/ContextMenuLabel.vue +0 -9
  322. package/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -9
  323. package/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -14
  324. package/src/components/ui/context-menu/index.ts +0 -9
  325. package/src/components/ui/dialog/Dialog.vue +0 -14
  326. package/src/components/ui/dialog/DialogClose.vue +0 -12
  327. package/src/components/ui/dialog/DialogContent.vue +0 -48
  328. package/src/components/ui/dialog/DialogDescription.vue +0 -23
  329. package/src/components/ui/dialog/DialogFooter.vue +0 -12
  330. package/src/components/ui/dialog/DialogHeader.vue +0 -12
  331. package/src/components/ui/dialog/DialogScrollContent.vue +0 -47
  332. package/src/components/ui/dialog/DialogTitle.vue +0 -23
  333. package/src/components/ui/dialog/DialogTrigger.vue +0 -12
  334. package/src/components/ui/dialog/index.ts +0 -9
  335. package/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -13
  336. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -28
  337. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -33
  338. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
  339. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -27
  340. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -23
  341. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -13
  342. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -27
  343. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -13
  344. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -12
  345. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -13
  346. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -27
  347. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -23
  348. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -11
  349. package/src/components/ui/dropdown-menu/index.ts +0 -14
  350. package/src/components/ui/form/FormControl.vue +0 -3
  351. package/src/components/ui/form/FormDescription.vue +0 -6
  352. package/src/components/ui/form/FormItem.vue +0 -6
  353. package/src/components/ui/form/FormLabel.vue +0 -10
  354. package/src/components/ui/form/FormMessage.vue +0 -10
  355. package/src/components/ui/form/index.ts +0 -9
  356. package/src/components/ui/hover-card/HoverCard.vue +0 -13
  357. package/src/components/ui/hover-card/HoverCardContent.vue +0 -26
  358. package/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
  359. package/src/components/ui/hover-card/index.ts +0 -3
  360. package/src/components/ui/input/Input.vue +0 -23
  361. package/src/components/ui/input/index.ts +0 -1
  362. package/src/components/ui/label/Label.vue +0 -18
  363. package/src/components/ui/label/index.ts +0 -1
  364. package/src/components/ui/lib/utils.ts +0 -2
  365. package/src/components/ui/menubar/MenubarContent.vue +0 -15
  366. package/src/components/ui/menubar/MenubarItem.vue +0 -13
  367. package/src/components/ui/menubar/MenubarTrigger.vue +0 -13
  368. package/src/components/ui/menubar/index.ts +0 -5
  369. package/src/components/ui/navigation-menu/NavigationMenuContent.vue +0 -14
  370. package/src/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -15
  371. package/src/components/ui/navigation-menu/index.ts +0 -4
  372. package/src/components/ui/pagination/PaginationContent.vue +0 -13
  373. package/src/components/ui/pagination/PaginationEllipsis.vue +0 -12
  374. package/src/components/ui/pagination/PaginationNext.vue +0 -14
  375. package/src/components/ui/pagination/PaginationPrev.vue +0 -14
  376. package/src/components/ui/pagination/index.ts +0 -6
  377. package/src/components/ui/popover/Popover.vue +0 -13
  378. package/src/components/ui/popover/PopoverContent.vue +0 -27
  379. package/src/components/ui/popover/PopoverTrigger.vue +0 -11
  380. package/src/components/ui/popover/index.ts +0 -3
  381. package/src/components/ui/progress/Progress.vue +0 -21
  382. package/src/components/ui/progress/index.ts +0 -1
  383. package/src/components/ui/radio-group/RadioGroup.vue +0 -16
  384. package/src/components/ui/radio-group/RadioGroupItem.vue +0 -24
  385. package/src/components/ui/radio-group/index.ts +0 -2
  386. package/src/components/ui/scroll-area/ScrollArea.vue +0 -13
  387. package/src/components/ui/scroll-area/index.ts +0 -1
  388. package/src/components/ui/select/Select.vue +0 -13
  389. package/src/components/ui/select/SelectContent.vue +0 -40
  390. package/src/components/ui/select/SelectGroup.vue +0 -15
  391. package/src/components/ui/select/SelectItem.vue +0 -30
  392. package/src/components/ui/select/SelectLabel.vue +0 -15
  393. package/src/components/ui/select/SelectSeparator.vue +0 -13
  394. package/src/components/ui/select/SelectTrigger.vue +0 -23
  395. package/src/components/ui/select/SelectValue.vue +0 -11
  396. package/src/components/ui/select/index.ts +0 -8
  397. package/src/components/ui/separator/Separator.vue +0 -16
  398. package/src/components/ui/separator/index.ts +0 -1
  399. package/src/components/ui/sheet/Sheet.vue +0 -13
  400. package/src/components/ui/sheet/SheetClose.vue +0 -11
  401. package/src/components/ui/sheet/SheetContent.vue +0 -65
  402. package/src/components/ui/sheet/SheetDescription.vue +0 -15
  403. package/src/components/ui/sheet/SheetFooter.vue +0 -12
  404. package/src/components/ui/sheet/SheetHeader.vue +0 -12
  405. package/src/components/ui/sheet/SheetTitle.vue +0 -15
  406. package/src/components/ui/sheet/SheetTrigger.vue +0 -11
  407. package/src/components/ui/sheet/index.ts +0 -8
  408. package/src/components/ui/skeleton/Skeleton.vue +0 -9
  409. package/src/components/ui/skeleton/index.ts +0 -1
  410. package/src/components/ui/slider/Slider.vue +0 -26
  411. package/src/components/ui/slider/index.ts +0 -1
  412. package/src/components/ui/switch/Switch.vue +0 -24
  413. package/src/components/ui/switch/index.ts +0 -1
  414. package/src/components/ui/table/Table.vue +0 -13
  415. package/src/components/ui/table/TableBody.vue +0 -6
  416. package/src/components/ui/table/TableCaption.vue +0 -6
  417. package/src/components/ui/table/TableCell.vue +0 -6
  418. package/src/components/ui/table/TableFooter.vue +0 -6
  419. package/src/components/ui/table/TableHead.vue +0 -6
  420. package/src/components/ui/table/TableHeader.vue +0 -6
  421. package/src/components/ui/table/TableRow.vue +0 -6
  422. package/src/components/ui/table/index.ts +0 -8
  423. package/src/components/ui/tabs/Tabs.vue +0 -13
  424. package/src/components/ui/tabs/TabsContent.vue +0 -21
  425. package/src/components/ui/tabs/TabsList.vue +0 -21
  426. package/src/components/ui/tabs/TabsTrigger.vue +0 -21
  427. package/src/components/ui/tabs/index.ts +0 -4
  428. package/src/components/ui/textarea/Textarea.vue +0 -29
  429. package/src/components/ui/textarea/index.ts +0 -1
  430. package/src/components/ui/toggle/Toggle.vue +0 -40
  431. package/src/components/ui/toggle/index.ts +0 -1
  432. package/src/components/ui/toggle-group/ToggleGroup.vue +0 -16
  433. package/src/components/ui/toggle-group/ToggleGroupItem.vue +0 -21
  434. package/src/components/ui/toggle-group/index.ts +0 -2
  435. package/src/components/ui/tooltip/Tooltip.vue +0 -13
  436. package/src/components/ui/tooltip/TooltipContent.vue +0 -27
  437. package/src/components/ui/tooltip/TooltipProvider.vue +0 -12
  438. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
  439. package/src/components/ui/tooltip/index.ts +0 -4
@@ -0,0 +1,91 @@
1
+ # Pattern: Notifications
2
+
3
+ Toast notifications, notification center, and badge indicators.
4
+
5
+ ## Notification Center
6
+
7
+ A dropdown showing recent notifications:
8
+
9
+ ```tsx
10
+ <DropdownMenu>
11
+ <DropdownMenuTrigger as-child>
12
+ <Button variant="ghost" size="icon" className="relative">
13
+ <Bell className="w-4 h-4" />
14
+ <span v-if="unreadCount > 0" className="absolute -top-0.5 -right-0.5 w-4 h-4 rounded-full bg-destructive text-xs font-medium text-destructive-foreground flex items-center justify-center">
15
+ {{ unreadCount }}
16
+ </span>
17
+ </Button>
18
+ </DropdownMenuTrigger>
19
+ <DropdownMenuContent align="end" className="w-80">
20
+ <DropdownMenuLabel className="flex items-center justify-between">
21
+ <span>Notifications</span>
22
+ <Button variant="ghost" size="sm" className="h-auto px-1 text-xs">Mark all read</Button>
23
+ </DropdownMenuLabel>
24
+ <DropdownMenuSeparator />
25
+ <div className="max-h-64 overflow-y-auto">
26
+ <DropdownMenuItem v-for="n in notifications" :key="n.id" className="flex-col items-start gap-1 py-3">
27
+ <div className="flex items-start gap-2 w-full">
28
+ <span v-if="!n.read" className="w-2 h-2 rounded-full bg-primary mt-1.5 shrink-0" />
29
+ <span v-else className="w-2 h-2 shrink-0" />
30
+ <div className="flex-1 min-w-0">
31
+ <p className="text-sm" className={!n.read ? 'font-medium' : ''}>{{ n.title }}</p>
32
+ <p className="text-xs text-muted-foreground">{{ n.time }}</p>
33
+ </div>
34
+ </div>
35
+ </DropdownMenuItem>
36
+ </div>
37
+ </DropdownMenuContent>
38
+ </DropdownMenu>
39
+ ```
40
+
41
+ ## Notification Badge
42
+
43
+ Small dot or count on icons:
44
+
45
+ ```tsx
46
+ <!-- Dot indicator -->
47
+ <div className="relative">
48
+ <Bell className="w-4 h-4" />
49
+ <span className="absolute -top-0.5 -right-0.5 w-2 h-2 rounded-full bg-destructive" />
50
+ </div>
51
+
52
+ <!-- Count badge -->
53
+ <div className="relative">
54
+ <Inbox className="w-4 h-4" />
55
+ <span className="absolute -top-1 -right-1.5 min-w-4 h-4 rounded-full bg-destructive text-xs font-medium text-destructive-foreground flex items-center justify-center px-1">
56
+ 5
57
+ </span>
58
+ </div>
59
+ ```
60
+
61
+ ## Toast Notifications
62
+
63
+ For action confirmations and transient feedback, use `toast()`:
64
+
65
+ ```ts
66
+ import { toast } from '@reinvented/design'
67
+
68
+ // Success (after a mutation)
69
+ toast({ title: 'Project created', description: 'Your new project is ready.' })
70
+
71
+ // Error (after a failed mutation)
72
+ toast({ title: 'Failed to save', description: 'Please try again.', variant: 'destructive' })
73
+
74
+ // With undo action
75
+ toast({
76
+ title: 'Message archived',
77
+ description: '1 conversation moved to archive.',
78
+ action: { label: 'Undo', onClick: () => handleUndo() }
79
+ })
80
+ ```
81
+
82
+ ### When to Use Toast vs Alert vs Dialog
83
+
84
+ | Feedback Type | Component | Persists? |
85
+ |--------------|-----------|-----------|
86
+ | Action confirmed (save, create, send) | `toast()` | No, auto-dismiss |
87
+ | Important warning (data limit reached) | `Alert` component | Yes, in-page |
88
+ | Destructive confirmation (delete) | `AlertDialog` | Yes, blocks UI |
89
+ | Form validation error | Inline `text-destructive` | Yes, per-field |
90
+
91
+ See also: `components/feedback.md` for Alert, Tooltip, and other feedback components.
@@ -0,0 +1,42 @@
1
+ # Pattern: Onboarding
2
+
3
+ Welcome screens, setup wizards, and first-run experiences.
4
+
5
+ ## Multi-Step Wizard
6
+
7
+ ```tsx
8
+ <div className="flex min-h-screen items-center justify-center px-4">
9
+ <Card className="w-full max-w-lg">
10
+ <CardHeader>
11
+ <div className="flex items-center justify-between mb-2">
12
+ <CardDescription>Step {{ currentStep }} of {{ totalSteps }}</CardDescription>
13
+ <span className="text-xs text-muted-foreground">{{ Math.round((currentStep / totalSteps) * 100) }}%</span>
14
+ </div>
15
+ <Progress :model-value="(currentStep / totalSteps) * 100" className="h-1" />
16
+ <CardTitle className="mt-4">{{ steps[currentStep - 1].title }}</CardTitle>
17
+ <CardDescription>{{ steps[currentStep - 1].description }}</CardDescription>
18
+ </CardHeader>
19
+ <CardContent className="space-y-4">
20
+ <!-- Step-specific fields -->
21
+ </CardContent>
22
+ <CardFooter className="justify-between">
23
+ <Button variant="ghost" v-if="currentStep > 1" onClick="currentStep--">
24
+ <ArrowLeft className="w-4 h-4" /> Back
25
+ </Button>
26
+ <div v-else></div>
27
+ <Button onClick="nextStep">
28
+ {{ currentStep === totalSteps ? 'Complete Setup' : 'Continue' }}
29
+ <ArrowRight v-if="currentStep < totalSteps" className="w-4 h-4" />
30
+ </Button>
31
+ </CardFooter>
32
+ </Card>
33
+ </div>
34
+ ```
35
+
36
+ ## Key Rules
37
+
38
+ - Show progress (Progress bar + "Step X of Y")
39
+ - Back button is `variant="ghost"`, forward is `default`
40
+ - Last step says "Complete Setup" or "Get Started"
41
+ - Keep each step to 2–4 fields maximum
42
+ - Center the wizard card like an auth page
@@ -0,0 +1,55 @@
1
+ # Pattern: Search
2
+
3
+ Global search, filtered search results, and command palette.
4
+
5
+ ## Search Input in Toolbar
6
+
7
+ ```tsx
8
+ <div className="relative flex-1 max-w-sm">
9
+ <Search className="absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground" />
10
+ <Input className="pl-9" placeholder="Search..." defaultValue="query" />
11
+ </div>
12
+ ```
13
+
14
+ ## Command Palette (⌘K)
15
+
16
+ Full-page searchable command menu:
17
+
18
+ ```tsx
19
+ <Dialog v-model:open="showSearch">
20
+ <DialogContent className="p-0 max-w-lg">
21
+ <Command>
22
+ <CommandInput placeholder="Search or type a command..." />
23
+ <CommandList>
24
+ <CommandEmpty>No results found.</CommandEmpty>
25
+ <CommandGroup heading="Recent">
26
+ <CommandItem v-for="item in recent" :key="item.id">
27
+ <Clock className="w-4 h-4" /> {{ item.title }}
28
+ </CommandItem>
29
+ </CommandGroup>
30
+ <CommandSeparator />
31
+ <CommandGroup heading="Actions">
32
+ <CommandItem><Plus className="w-4 h-4" /> Create new project</CommandItem>
33
+ <CommandItem><Settings className="w-4 h-4" /> Open settings</CommandItem>
34
+ </CommandGroup>
35
+ </CommandList>
36
+ </Command>
37
+ </DialogContent>
38
+ </Dialog>
39
+ ```
40
+
41
+ ## Search Results Page
42
+
43
+ ```tsx
44
+ <div className="space-y-4">
45
+ <p className="text-sm text-muted-foreground">{{ results.length }} results for "{{ query }}"</p>
46
+ <div className="space-y-2">
47
+ <Card v-for="result in results" :key="result.id" className="cursor-pointer hover:bg-accent/50 transition-colors">
48
+ <CardContent className="p-4">
49
+ <p className="text-sm font-medium">{{ result.title }}</p>
50
+ <p className="text-xs text-muted-foreground line-clamp-2">{{ result.excerpt }}</p>
51
+ </CardContent>
52
+ </Card>
53
+ </div>
54
+ </div>
55
+ ```
@@ -0,0 +1,132 @@
1
+ # Pattern: Settings
2
+
3
+ Grouped settings pages with section navigation and mixed control types.
4
+
5
+ ## Settings Page Layout
6
+
7
+ ```tsx
8
+ <div className="max-w-4xl mx-auto px-6 py-8 space-y-6">
9
+ <div>
10
+ <h1 className="text-2xl font-bold">Settings</h1>
11
+ <p className="text-muted-foreground">Manage your account and preferences.</p>
12
+ </div>
13
+
14
+ <div className="flex flex-col sm:flex-row gap-8">
15
+ <!-- Sidebar navigation -->
16
+ <nav className="w-full sm:w-48 shrink-0 space-y-1">
17
+ <button v-for="section in sections" :key="section.id"
18
+ className={cn(
19
+ 'w-full text-left px-3 py-2 text-sm rounded-md transition-colors',
20
+ activeSection === section.id ? 'bg-accent font-medium' : 'text-muted-foreground hover:bg-accent/50'
21
+ )}>
22
+ {{ section.label }}
23
+ </button>
24
+ </nav>
25
+
26
+ <!-- Content -->
27
+ <div className="flex-1 space-y-8">
28
+ <!-- Profile Section -->
29
+ <Card>
30
+ <CardHeader>
31
+ <CardTitle>Profile</CardTitle>
32
+ <CardDescription>Your public profile information.</CardDescription>
33
+ </CardHeader>
34
+ <CardContent className="space-y-4">
35
+ <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
36
+ <div className="space-y-2">
37
+ <Label>First Name</Label>
38
+ <Input defaultValue="form.firstName" />
39
+ </div>
40
+ <div className="space-y-2">
41
+ <Label>Last Name</Label>
42
+ <Input defaultValue="form.lastName" />
43
+ </div>
44
+ </div>
45
+ <div className="space-y-2">
46
+ <Label>Email</Label>
47
+ <Input defaultValue="form.email" type="email" />
48
+ </div>
49
+ </CardContent>
50
+ <CardFooter className="border-t pt-4 justify-end">
51
+ <Button>Save Changes</Button>
52
+ </CardFooter>
53
+ </Card>
54
+
55
+ <!-- Notifications Section -->
56
+ <Card>
57
+ <CardHeader>
58
+ <CardTitle>Notifications</CardTitle>
59
+ <CardDescription>Choose what you want to be notified about.</CardDescription>
60
+ </CardHeader>
61
+ <CardContent className="space-y-4">
62
+ <div className="flex items-center justify-between">
63
+ <div>
64
+ <p className="text-sm font-medium">Email Notifications</p>
65
+ <p className="text-xs text-muted-foreground">Receive emails for important updates.</p>
66
+ </div>
67
+ <Switch v-model:checked="notifications.email" />
68
+ </div>
69
+ <Separator />
70
+ <div className="flex items-center justify-between">
71
+ <div>
72
+ <p className="text-sm font-medium">Push Notifications</p>
73
+ <p className="text-xs text-muted-foreground">Receive push notifications on your device.</p>
74
+ </div>
75
+ <Switch v-model:checked="notifications.push" />
76
+ </div>
77
+ </CardContent>
78
+ </Card>
79
+
80
+ <!-- Danger Zone -->
81
+ <Card className="border-destructive/50">
82
+ <CardHeader>
83
+ <CardTitle className="text-destructive">Danger Zone</CardTitle>
84
+ <CardDescription>Irreversible actions for your account.</CardDescription>
85
+ </CardHeader>
86
+ <CardContent>
87
+ <div className="flex items-center justify-between">
88
+ <div>
89
+ <p className="text-sm font-medium">Delete Account</p>
90
+ <p className="text-xs text-muted-foreground">Permanently delete your account and all data.</p>
91
+ </div>
92
+ <Button variant="destructive" size="sm">Delete Account</Button>
93
+ </div>
94
+ </CardContent>
95
+ </Card>
96
+ </div>
97
+ </div>
98
+ </div>
99
+ ```
100
+
101
+ ## Expandable Setting Row (Switch & Reveal)
102
+
103
+ When toggling a switch should reveal additional advanced options beneath it, use Shadcn's `<Collapsible>` rather than manually toggling `overflow: hidden` and `max-height`. `<Collapsible>` manages overflow states correctly during animations, preventing interactive elements (like focus rings and drop-downs) from being clipped off inside the expanding panel.
104
+
105
+ ```tsx
106
+ <Collapsible v-model:open="advancedEnabled" className="p-4 rounded-lg border border-border bg-card">
107
+ <div className="flex items-center justify-between">
108
+ <div>
109
+ <h4 className="text-sm font-semibold tracking-tight">Advanced Filtering</h4>
110
+ <p className="text-xs text-muted-foreground mt-0.5">Filter incoming data by protocol rules.</p>
111
+ </div>
112
+ <Switch v-model:checked="advancedEnabled" />
113
+ </div>
114
+
115
+ <CollapsibleContent className="pt-4 mt-4 border-t border-border/60 space-y-3">
116
+ <Label className="text-xs font-bold text-muted-foreground uppercase tracking-widest">Protocol Type</Label>
117
+ <Select>
118
+ <SelectTrigger className="w-full"><SelectValue placeholder="TCP/UDP" /></SelectTrigger>
119
+ <!-- ... -->
120
+ </Select>
121
+ </CollapsibleContent>
122
+ </Collapsible>
123
+ ```
124
+
125
+ ## Key Rules
126
+
127
+ - Settings sidebar uses `w-48` with text nav items (not icons)
128
+ - Each settings section is its own Card
129
+ - Toggle settings use the `label/description (left) + Switch (right)` pattern
130
+ - Save buttons go in `CardFooter` with `border-t`
131
+ - Danger zone card uses `border-destructive/50` for visual warning
132
+ - On mobile, sidebar stacks above content (`flex-col sm:flex-row`)
@@ -0,0 +1,67 @@
1
+ # Pattern: User Profiles
2
+
3
+ Profile cards, account pages, and user detail views.
4
+
5
+ ## Profile Header
6
+
7
+ ```tsx
8
+ <div className="space-y-6">
9
+ <!-- Banner + Avatar -->
10
+ <div className="relative">
11
+ <div className="h-32 rounded-lg bg-gradient-to-br from-primary/20 via-primary/10 to-transparent" />
12
+ <div className="absolute -bottom-8 left-6 flex items-end gap-4">
13
+ <div className="w-20 h-20 rounded-2xl border-4 border-background bg-primary flex items-center justify-center text-xl font-bold text-primary-foreground">
14
+ SC
15
+ </div>
16
+ </div>
17
+ </div>
18
+
19
+ <!-- Info (below avatar offset) -->
20
+ <div className="pt-10 px-6 flex items-start justify-between">
21
+ <div>
22
+ <h1 className="text-2xl font-bold">Sarah Chen</h1>
23
+ <p className="text-muted-foreground">Engineering Lead · San Francisco, CA</p>
24
+ <p className="text-sm text-muted-foreground mt-1">Joined March 2023</p>
25
+ </div>
26
+ <div className="flex items-center gap-2">
27
+ <Button variant="outline"><Mail className="w-4 h-4" /> Message</Button>
28
+ <Button>Follow</Button>
29
+ </div>
30
+ </div>
31
+
32
+ <!-- Stats row -->
33
+ <div className="flex items-center gap-8 px-6">
34
+ <div>
35
+ <p className="text-xl font-bold">142</p>
36
+ <p className="text-xs text-muted-foreground">Projects</p>
37
+ </div>
38
+ <div>
39
+ <p className="text-xl font-bold">2.4k</p>
40
+ <p className="text-xs text-muted-foreground">Followers</p>
41
+ </div>
42
+ <div>
43
+ <p className="text-xl font-bold">891</p>
44
+ <p className="text-xs text-muted-foreground">Following</p>
45
+ </div>
46
+ </div>
47
+ </div>
48
+ ```
49
+
50
+ ## Compact Profile Card
51
+
52
+ For displaying a user in a list or sidebar:
53
+
54
+ ```tsx
55
+ <Card>
56
+ <CardContent className="flex items-center gap-4 p-4">
57
+ <div className="w-12 h-12 rounded-full shrink-0 flex items-center justify-center text-sm font-medium bg-muted text-muted-foreground">
58
+ {{ user.initials }}
59
+ </div>
60
+ <div className="flex-1 min-w-0">
61
+ <p className="text-sm font-medium truncate">{{ user.name }}</p>
62
+ <p className="text-xs text-muted-foreground truncate">{{ user.role }}</p>
63
+ </div>
64
+ <Button variant="outline" size="sm">View Profile</Button>
65
+ </CardContent>
66
+ </Card>
67
+ ```
@@ -0,0 +1,114 @@
1
+ # Persona: Business Operator
2
+
3
+ Back-office users managing operations, data, and workflows.
4
+
5
+ ## Characteristics
6
+ - Moderate technical proficiency
7
+ - Uses app during work hours as a core part of their job
8
+ - Needs to process many records efficiently (approvals, triage, routing)
9
+ - Desires data at a glance, actionable summaries
10
+ - Desktop primary
11
+
12
+ ## Design Adjustments
13
+
14
+ | Aspect | Adjustment |
15
+ |--------|-----------|
16
+ | **Density** | Medium-high — data tables as primary view, stat cards prominent (`gap-4` spacing) |
17
+ | **Dashboard** | Essential — always show KPIs and actionable metric cards at the top |
18
+ | **Tables** | Feature-rich — filters, search, sort, bulk actions, export (`<Table>`) |
19
+ | **Actions** | Clear workflow — step-by-step, status-based (Pending → Approved → Complete) |
20
+ | **Reporting** | Prominent — date range selectors, export buttons, summary stats |
21
+ | **Language** | Professional, clear — "Process", "Approve", "Archive" |
22
+ | **Permissions** | Assumes role-based views. Show read-only fields where they lack edit rights |
23
+ | **Badges** | Heavy use of `<Badge>` to indicate status (e.g. `variant="secondary"`, `variant="destructive"`) |
24
+
25
+ ## Component Composition Example
26
+
27
+ ```tsx
28
+ <!-- Back Office Operations Layout -->
29
+ <div className="space-y-6">
30
+ <!-- Page Header -->
31
+ <div className="flex flex-col sm:flex-row sm:items-center justify-between gap-4">
32
+ <div>
33
+ <h1 className="text-2xl font-bold tracking-tight">Order Fulfillment</h1>
34
+ <p className="text-muted-foreground">Process pending shipments and handle returns.</p>
35
+ </div>
36
+ <div className="flex items-center gap-2">
37
+ <!-- Date Picker Mockup -->
38
+ <Button variant="outline" className="w-60 justify-start text-left font-normal">
39
+ <CalendarIcon className="mr-2 h-4 w-4" />
40
+ <span>Oct 01, 2023 - Oct 31, 2023</span>
41
+ </Button>
42
+ </div>
43
+ </div>
44
+
45
+ <!-- Actionable KPIs -->
46
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
47
+ <Card>
48
+ <CardHeader className="flex flex-row items-center justify-between space-y-0 pb-2">
49
+ <CardTitle className="text-sm font-medium">Ready to Ship</CardTitle>
50
+ <PackageIcon className="h-4 w-4 text-muted-foreground" />
51
+ </CardHeader>
52
+ <CardContent>
53
+ <div className="text-2xl font-bold text-primary">145</div>
54
+ <p className="text-xs text-muted-foreground mt-1">Requires immediate processing</p>
55
+ </CardContent>
56
+ </Card>
57
+ <!-- More KPI cards... -->
58
+ </div>
59
+
60
+ <!-- Triage Table -->
61
+ <Card>
62
+ <CardHeader className="flex flex-row items-center justify-between pb-2">
63
+ <div className="space-y-1">
64
+ <CardTitle className="text-lg">Processing Queue</CardTitle>
65
+ </div>
66
+ <div className="flex items-center gap-2">
67
+ <div className="relative w-64">
68
+ <Search className="absolute left-2.5 top-2.5 h-4 w-4 text-muted-foreground" />
69
+ <Input pl="8" placeholder="Search orders..." />
70
+ </div>
71
+ <Button variant="outline">Filter</Button>
72
+ </div>
73
+ </CardHeader>
74
+ <CardContent>
75
+ <Table>
76
+ <TableHeader>
77
+ <TableRow>
78
+ <TableHead>Order #</TableHead>
79
+ <TableHead>Customer</TableHead>
80
+ <TableHead>Status</TableHead>
81
+ <TableHead className="text-right">Amount</TableHead>
82
+ <TableHead className="w-24"></TableHead>
83
+ </TableRow>
84
+ </TableHeader>
85
+ <TableBody>
86
+ <TableRow v-for="order in orders" :key="order.id">
87
+ <TableCell className="font-medium">#{{ order.id }}</TableCell>
88
+ <TableCell>{{ order.customerName }}</TableCell>
89
+ <TableCell>
90
+ <Badge variant="warning">
91
+ Pending Review
92
+ </Badge>
93
+ </TableCell>
94
+ <TableCell className="text-right">${{ order.total }}</TableCell>
95
+ <TableCell>
96
+ <Button size="sm">Process</Button>
97
+ </TableCell>
98
+ </TableRow>
99
+ </TableBody>
100
+ </Table>
101
+ </CardContent>
102
+ </Card>
103
+ </div>
104
+ ```
105
+
106
+ ## Anti-Patterns (DO NOT DO)
107
+
108
+ - ❌ **Do not bury the primary action**: A business operator's goal is to clear a queue. The "Process" or "Approve" button should be front and center on every row.
109
+ - ❌ **Do not use "mystery meat" navigation**: Don't rely on icons without text labels for sidebars or tabs. Operators need unambiguous labels.
110
+ - ❌ **Do not hide KPIs in reports**: Operational health (e.g., number of pending tickets) must be visible at a glance at the top of the workflow page.
111
+ - ❌ **Do not force page reloads**: Use sliding panels (`<Sheet>`) or `<Dialog>` for data entry instead of navigating the user entirely away from their list context.
112
+
113
+ ## Layout Preference
114
+ Always use `layouts/sidebar.md`. Back-office tooling requires jumping between modules constantly. The primary content area should follow a Dashboard (`layouts/dashboard.md`) or List/Detail (`layouts/list-detail.md`) structure depending on the task complexity.
@@ -0,0 +1,60 @@
1
+ # Persona: Consumer Casual
2
+
3
+ General consumers using the app casually. Prioritize simplicity and visual appeal.
4
+
5
+ ## Characteristics
6
+ - Low technical proficiency
7
+ - Uses app occasionally
8
+ - Wants tasks done quickly with minimal cognitive load
9
+ - Primarily mobile, some tablet/desktop
10
+
11
+ ## Design Adjustments
12
+
13
+ | Aspect | Adjustment |
14
+ |--------|-----------|
15
+ | **Density** | Lower — more whitespace (`gap-6`, `p-6`), larger touch targets |
16
+ | **Typography** | `text-sm` for body (standard), but use `text-lg text-muted-foreground` for intro text |
17
+ | **Navigation** | Simpler — 4-5 top-level items max, bottom tabs on mobile |
18
+ | **Actions** | Obvious — large primary CTA buttons (`size="lg"`), clear labels |
19
+ | **Feedback** | Immediate — success toast on every action, clear loading states |
20
+ | **Language** | Friendly, casual — "Got it!", "You're all set!", "Here's what's new" |
21
+ | **Visual** | High visual contrast — use cards with imagery, badges, and color |
22
+
23
+ ## Component Composition Example
24
+
25
+ ```tsx
26
+ <!-- Casual Consumer Header Pattern -->
27
+ <div className="space-y-6 text-center max-w-md mx-auto py-8">
28
+ <div className="space-y-2">
29
+ <h1 className="text-3xl font-bold tracking-tight">Welcome back!</h1>
30
+ <p className="text-lg text-muted-foreground">Ready to continue your journey today?</p>
31
+ </div>
32
+
33
+ <Button size="lg" className="w-full sm:w-auto rounded-full px-8">
34
+ Let's get started
35
+ </Button>
36
+ </div>
37
+
38
+ <!-- Simplified Content Cards -->
39
+ <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
40
+ <Card className="overflow-hidden hover:shadow-md transition-shadow">
41
+ <div className="aspect-video bg-muted border-b">
42
+ <!-- In mockups: <ComponentPlaceholder name="Image" description="Hero illustration" height="100%" /> (Mockup Mode Only) -->
43
+ </div>
44
+ <CardHeader className="p-4 text-center">
45
+ <CardTitle className="text-lg">Daily Challenge</CardTitle>
46
+ <CardDescription className="text-sm">Complete today's task to earn rewards.</CardDescription>
47
+ </CardHeader>
48
+ </Card>
49
+ </div>
50
+ ```
51
+
52
+ ## Anti-Patterns (DO NOT DO)
53
+
54
+ - ❌ **Do not use Data Tables (`<Table>`)**: Casual consumers don't read spreadsheets. Use grid layouts with visual `<Card>` elements instead.
55
+ - ❌ **Do not use dense forms**: Never put 10 inputs on a single screen. Use progressive disclosure or a wizard.
56
+ - ❌ **Do not rely on hover states**: Consumers are mobile-first. Crucial actions must be persistently visible.
57
+ - ❌ **Do not use `text-base` for standard body text**: The design system rules dictate `text-sm` for body. Size up headers (`text-xl`, `text-2xl`), not standard body paragraphs.
58
+
59
+ ## Layout Preference
60
+ Use `layouts/topbar.md` with simple, obvious navigation. Single-column, max-width centered layouts (`max-w-xl mx-auto`) work best.