@reinvented/design 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. package/package.json +55 -21
  2. package/src/components/blocks/auth/auth-card/AuthCard.tsx +62 -0
  3. package/src/components/blocks/auth/auth-card/index.ts +1 -0
  4. package/src/components/blocks/auth/index.ts +3 -0
  5. package/src/components/blocks/auth/social-login/SocialLoginGroup.tsx +75 -0
  6. package/src/components/blocks/auth/social-login/index.ts +1 -0
  7. package/src/components/blocks/auth/two-factor/TwoFactorForm.tsx +59 -0
  8. package/src/components/blocks/auth/two-factor/index.ts +1 -0
  9. package/src/components/blocks/communication/activity-item/ActivityItem.tsx +17 -0
  10. package/src/components/blocks/communication/activity-item/ActivityItemAvatar.tsx +21 -0
  11. package/src/components/blocks/communication/activity-item/ActivityItemContent.tsx +16 -0
  12. package/src/components/blocks/communication/activity-item/index.ts +3 -0
  13. package/src/components/blocks/communication/chat-bubble/ChatBubble.tsx +21 -0
  14. package/src/components/blocks/communication/chat-bubble/ChatBubbleAvatar.tsx +19 -0
  15. package/src/components/blocks/communication/chat-bubble/ChatBubbleMessage.tsx +35 -0
  16. package/src/components/blocks/communication/chat-bubble/ChatBubbleTimestamp.tsx +15 -0
  17. package/src/components/blocks/communication/chat-bubble/index.ts +4 -0
  18. package/src/components/blocks/communication/index.ts +2 -0
  19. package/src/components/blocks/content/article-header/ArticleHeader.tsx +73 -0
  20. package/src/components/blocks/content/article-header/index.ts +1 -0
  21. package/src/components/blocks/content/author-card/AuthorCard.tsx +46 -0
  22. package/src/components/blocks/content/author-card/index.ts +1 -0
  23. package/src/components/blocks/content/index.ts +3 -0
  24. package/src/components/blocks/content/rich-text/RichTextContent.tsx +27 -0
  25. package/src/components/blocks/content/rich-text/index.ts +1 -0
  26. package/src/components/blocks/data-management/index.ts +2 -0
  27. package/src/components/blocks/data-management/kanban/KanbanBoard.tsx +10 -0
  28. package/src/components/blocks/data-management/kanban/KanbanCard.tsx +102 -0
  29. package/src/components/blocks/data-management/kanban/KanbanColumn.tsx +41 -0
  30. package/src/components/blocks/data-management/kanban/index.ts +3 -0
  31. package/src/components/blocks/data-management/tree-view/TreeItem.tsx +68 -0
  32. package/src/components/blocks/data-management/tree-view/TreeView.tsx +10 -0
  33. package/src/components/blocks/data-management/tree-view/index.ts +2 -0
  34. package/src/components/blocks/data-viz/financial-ticker/FinancialTicker.tsx +35 -0
  35. package/src/components/blocks/data-viz/financial-ticker/index.ts +1 -0
  36. package/src/components/blocks/data-viz/index.ts +3 -0
  37. package/src/components/blocks/data-viz/kpi-card/KpiCard.tsx +61 -0
  38. package/src/components/blocks/data-viz/kpi-card/index.ts +1 -0
  39. package/src/components/blocks/data-viz/stat-grid/StatGrid.tsx +28 -0
  40. package/src/components/blocks/data-viz/stat-grid/index.ts +1 -0
  41. package/src/components/blocks/ecommerce/index.ts +3 -0
  42. package/src/components/blocks/ecommerce/pricing-tier/PricingFeatureList.tsx +27 -0
  43. package/src/components/blocks/ecommerce/pricing-tier/PricingHeader.tsx +25 -0
  44. package/src/components/blocks/ecommerce/pricing-tier/PricingTier.tsx +31 -0
  45. package/src/components/blocks/ecommerce/pricing-tier/index.ts +3 -0
  46. package/src/components/blocks/ecommerce/product-card/ProductCard.tsx +17 -0
  47. package/src/components/blocks/ecommerce/product-card/ProductCardContent.tsx +15 -0
  48. package/src/components/blocks/ecommerce/product-card/ProductCardImage.tsx +20 -0
  49. package/src/components/blocks/ecommerce/product-card/ProductCardPrice.tsx +20 -0
  50. package/src/components/blocks/ecommerce/product-card/index.ts +4 -0
  51. package/src/components/blocks/ecommerce/rating-summary/RatingStars.tsx +32 -0
  52. package/src/components/blocks/ecommerce/rating-summary/index.ts +1 -0
  53. package/src/components/blocks/feedback/empty-state/EmptyState.tsx +53 -0
  54. package/src/components/blocks/feedback/empty-state/index.ts +1 -0
  55. package/src/components/blocks/feedback/error-state/ErrorState.tsx +50 -0
  56. package/src/components/blocks/feedback/error-state/index.ts +1 -0
  57. package/src/components/blocks/feedback/index.ts +3 -0
  58. package/src/components/blocks/feedback/not-found/NotFoundState.tsx +47 -0
  59. package/src/components/blocks/feedback/not-found/index.ts +1 -0
  60. package/src/components/blocks/filtering/faceted-sidebar/FacetedGroup.tsx +32 -0
  61. package/src/components/blocks/filtering/faceted-sidebar/FacetedSidebar.tsx +26 -0
  62. package/src/components/blocks/filtering/faceted-sidebar/index.ts +2 -0
  63. package/src/components/blocks/filtering/filter-bar/FilterBar.tsx +85 -0
  64. package/src/components/blocks/filtering/filter-bar/index.ts +1 -0
  65. package/src/components/blocks/filtering/index.ts +3 -0
  66. package/src/components/blocks/filtering/search-result/SearchResultItem.tsx +70 -0
  67. package/src/components/blocks/filtering/search-result/index.ts +1 -0
  68. package/src/components/blocks/index.ts +21 -0
  69. package/src/components/blocks/marketing/cta-block/CtaBlock.tsx +80 -0
  70. package/src/components/blocks/marketing/cta-block/index.ts +1 -0
  71. package/src/components/blocks/marketing/feature-grid/FeatureGrid.tsx +47 -0
  72. package/src/components/blocks/marketing/feature-grid/index.ts +1 -0
  73. package/src/components/blocks/marketing/hero-section/HeroSection.tsx +89 -0
  74. package/src/components/blocks/marketing/hero-section/index.ts +1 -0
  75. package/src/components/blocks/marketing/index.ts +4 -0
  76. package/src/components/blocks/marketing/testimonial-card/TestimonialCard.tsx +71 -0
  77. package/src/components/blocks/marketing/testimonial-card/index.ts +1 -0
  78. package/src/components/blocks/media/call-controls/CallControlButton.tsx +52 -0
  79. package/src/components/blocks/media/call-controls/CallControls.tsx +10 -0
  80. package/src/components/blocks/media/call-controls/index.ts +2 -0
  81. package/src/components/blocks/media/index.ts +2 -0
  82. package/src/components/blocks/media/media-player/MediaPlayer.tsx +20 -0
  83. package/src/components/blocks/media/media-player/MediaPlayerControls.tsx +16 -0
  84. package/src/components/blocks/media/media-player/MediaPlayerScrubber.tsx +29 -0
  85. package/src/components/blocks/media/media-player/MediaPlayerVideo.tsx +25 -0
  86. package/src/components/blocks/media/media-player/index.ts +4 -0
  87. package/src/components/blocks/navigation/app-sidebar/AppSidebar.tsx +32 -0
  88. package/src/components/blocks/navigation/app-sidebar/NavItem.tsx +43 -0
  89. package/src/components/blocks/navigation/app-sidebar/index.ts +2 -0
  90. package/src/components/blocks/navigation/context-switcher/ContextSwitcher.tsx +77 -0
  91. package/src/components/blocks/navigation/context-switcher/index.ts +1 -0
  92. package/src/components/blocks/navigation/index.ts +3 -0
  93. package/src/components/blocks/navigation/top-navbar/TopNavbar.tsx +47 -0
  94. package/src/components/blocks/navigation/top-navbar/index.ts +1 -0
  95. package/src/components/blocks/onboarding/index.ts +2 -0
  96. package/src/components/blocks/onboarding/onboarding-welcome/OnboardingWelcome.tsx +74 -0
  97. package/src/components/blocks/onboarding/onboarding-welcome/index.ts +1 -0
  98. package/src/components/blocks/onboarding/step-wizard/StepWizard.tsx +72 -0
  99. package/src/components/blocks/onboarding/step-wizard/index.ts +1 -0
  100. package/src/components/blocks/profiles/connection-list/ConnectionItem.tsx +35 -0
  101. package/src/components/blocks/profiles/connection-list/ConnectionList.tsx +16 -0
  102. package/src/components/blocks/profiles/connection-list/index.ts +2 -0
  103. package/src/components/blocks/profiles/index.ts +3 -0
  104. package/src/components/blocks/profiles/profile-header/ProfileHeader.tsx +88 -0
  105. package/src/components/blocks/profiles/profile-header/index.ts +1 -0
  106. package/src/components/blocks/profiles/profile-stats/ProfileStats.tsx +20 -0
  107. package/src/components/blocks/profiles/profile-stats/index.ts +1 -0
  108. package/src/components/blocks/scheduling/booking-slot/BookingSlot.tsx +44 -0
  109. package/src/components/blocks/scheduling/booking-slot/index.ts +1 -0
  110. package/src/components/blocks/scheduling/event-card/EventCard.tsx +85 -0
  111. package/src/components/blocks/scheduling/event-card/index.ts +1 -0
  112. package/src/components/blocks/scheduling/index.ts +3 -0
  113. package/src/components/blocks/scheduling/timeline-row/TimelineRow.tsx +82 -0
  114. package/src/components/blocks/scheduling/timeline-row/index.ts +1 -0
  115. package/src/components/blocks/settings/billing-usage/BillingUsage.tsx +49 -0
  116. package/src/components/blocks/settings/billing-usage/index.ts +1 -0
  117. package/src/components/blocks/settings/index.ts +3 -0
  118. package/src/components/blocks/settings/integration-card/IntegrationCard.tsx +62 -0
  119. package/src/components/blocks/settings/integration-card/index.ts +1 -0
  120. package/src/components/blocks/settings/settings-section/SettingsSection.tsx +23 -0
  121. package/src/components/blocks/settings/settings-section/index.ts +1 -0
  122. package/src/components/ui/accordion.tsx +56 -0
  123. package/src/components/ui/alert-dialog.tsx +141 -0
  124. package/src/components/ui/alert.tsx +59 -0
  125. package/src/components/ui/aspect-ratio.tsx +5 -0
  126. package/src/components/ui/avatar.tsx +50 -0
  127. package/src/components/ui/badge.tsx +36 -0
  128. package/src/components/ui/breadcrumb.tsx +115 -0
  129. package/src/components/ui/button.tsx +56 -0
  130. package/src/components/ui/calendar.tsx +211 -0
  131. package/src/components/ui/card.tsx +79 -0
  132. package/src/components/ui/carousel.tsx +262 -0
  133. package/src/components/ui/chart.tsx +367 -0
  134. package/src/components/ui/checkbox.tsx +28 -0
  135. package/src/components/ui/collapsible.tsx +11 -0
  136. package/src/components/ui/command.tsx +153 -0
  137. package/src/components/ui/component-placeholder.tsx +38 -0
  138. package/src/components/ui/context-menu.tsx +198 -0
  139. package/src/components/ui/dialog.tsx +122 -0
  140. package/src/components/ui/drawer.tsx +116 -0
  141. package/src/components/ui/dropdown-menu.tsx +200 -0
  142. package/src/components/ui/form.tsx +176 -0
  143. package/src/components/ui/hover-card.tsx +27 -0
  144. package/src/components/ui/input-otp.tsx +69 -0
  145. package/src/components/ui/input.tsx +22 -0
  146. package/src/components/ui/label.tsx +24 -0
  147. package/src/components/ui/menubar.tsx +256 -0
  148. package/src/components/ui/navigation-menu.tsx +128 -0
  149. package/src/components/ui/pagination.tsx +117 -0
  150. package/src/components/ui/popover.tsx +29 -0
  151. package/src/components/ui/progress.tsx +28 -0
  152. package/src/components/ui/radio-group.tsx +42 -0
  153. package/src/components/ui/resizable.tsx +45 -0
  154. package/src/components/ui/scroll-area.tsx +46 -0
  155. package/src/components/ui/select.tsx +160 -0
  156. package/src/components/ui/separator.tsx +29 -0
  157. package/src/components/ui/sheet.tsx +140 -0
  158. package/src/components/ui/skeleton.tsx +15 -0
  159. package/src/components/ui/slider.tsx +26 -0
  160. package/src/components/ui/sonner.tsx +45 -0
  161. package/src/components/ui/switch.tsx +27 -0
  162. package/src/components/ui/table.tsx +117 -0
  163. package/src/components/ui/tabs.tsx +53 -0
  164. package/src/components/ui/textarea.tsx +22 -0
  165. package/src/components/ui/toast.tsx +127 -0
  166. package/src/components/ui/toaster.tsx +33 -0
  167. package/src/components/ui/toggle-group.tsx +61 -0
  168. package/src/components/ui/toggle.tsx +45 -0
  169. package/src/components/ui/tooltip.tsx +28 -0
  170. package/src/hooks/use-toast.ts +194 -0
  171. package/src/index.ts +53 -56
  172. package/src/styles/index.css +6 -0
  173. package/src/styles/tokens.css +30 -18
  174. package/tailwind.config.js +120 -98
  175. package/tsconfig.json +2 -2
  176. package/src/components/ui/accordion/Accordion.vue +0 -13
  177. package/src/components/ui/accordion/AccordionContent.vue +0 -20
  178. package/src/components/ui/accordion/AccordionItem.vue +0 -15
  179. package/src/components/ui/accordion/AccordionTrigger.vue +0 -25
  180. package/src/components/ui/accordion/index.ts +0 -4
  181. package/src/components/ui/alert/Alert.vue +0 -38
  182. package/src/components/ui/alert/AlertDescription.vue +0 -12
  183. package/src/components/ui/alert/AlertTitle.vue +0 -12
  184. package/src/components/ui/alert/index.ts +0 -3
  185. package/src/components/ui/alert-dialog/AlertDialog.vue +0 -13
  186. package/src/components/ui/alert-dialog/AlertDialogAction.vue +0 -21
  187. package/src/components/ui/alert-dialog/AlertDialogCancel.vue +0 -21
  188. package/src/components/ui/alert-dialog/AlertDialogContent.vue +0 -39
  189. package/src/components/ui/alert-dialog/AlertDialogDescription.vue +0 -15
  190. package/src/components/ui/alert-dialog/AlertDialogFooter.vue +0 -12
  191. package/src/components/ui/alert-dialog/AlertDialogHeader.vue +0 -12
  192. package/src/components/ui/alert-dialog/AlertDialogTitle.vue +0 -15
  193. package/src/components/ui/alert-dialog/AlertDialogTrigger.vue +0 -11
  194. package/src/components/ui/alert-dialog/index.ts +0 -9
  195. package/src/components/ui/avatar/Avatar.vue +0 -14
  196. package/src/components/ui/avatar/index.ts +0 -1
  197. package/src/components/ui/badge/Badge.vue +0 -27
  198. package/src/components/ui/badge/index.ts +0 -1
  199. package/src/components/ui/breadcrumb/Breadcrumb.vue +0 -6
  200. package/src/components/ui/breadcrumb/BreadcrumbEllipsis.vue +0 -12
  201. package/src/components/ui/breadcrumb/BreadcrumbItem.vue +0 -6
  202. package/src/components/ui/breadcrumb/BreadcrumbLink.vue +0 -20
  203. package/src/components/ui/breadcrumb/BreadcrumbList.vue +0 -6
  204. package/src/components/ui/breadcrumb/BreadcrumbPage.vue +0 -6
  205. package/src/components/ui/breadcrumb/BreadcrumbSeparator.vue +0 -11
  206. package/src/components/ui/breadcrumb/index.ts +0 -7
  207. package/src/components/ui/button/Button.vue +0 -65
  208. package/src/components/ui/button/index.ts +0 -1
  209. package/src/components/ui/card/Card.vue +0 -13
  210. package/src/components/ui/card/CardContent.vue +0 -7
  211. package/src/components/ui/card/CardDescription.vue +0 -7
  212. package/src/components/ui/card/CardFooter.vue +0 -7
  213. package/src/components/ui/card/CardHeader.vue +0 -9
  214. package/src/components/ui/card/CardTitle.vue +0 -7
  215. package/src/components/ui/card/index.ts +0 -6
  216. package/src/components/ui/checkbox/Checkbox.vue +0 -25
  217. package/src/components/ui/checkbox/index.ts +0 -1
  218. package/src/components/ui/collapsible/Collapsible.vue +0 -13
  219. package/src/components/ui/collapsible/index.ts +0 -2
  220. package/src/components/ui/command/Command.vue +0 -16
  221. package/src/components/ui/command/CommandEmpty.vue +0 -5
  222. package/src/components/ui/command/CommandGroup.vue +0 -22
  223. package/src/components/ui/command/CommandInput.vue +0 -21
  224. package/src/components/ui/command/CommandItem.vue +0 -22
  225. package/src/components/ui/command/CommandList.vue +0 -17
  226. package/src/components/ui/command/CommandSeparator.vue +0 -5
  227. package/src/components/ui/command/index.ts +0 -7
  228. package/src/components/ui/context-menu/ContextMenuContent.vue +0 -24
  229. package/src/components/ui/context-menu/ContextMenuItem.vue +0 -16
  230. package/src/components/ui/context-menu/ContextMenuLabel.vue +0 -9
  231. package/src/components/ui/context-menu/ContextMenuSeparator.vue +0 -9
  232. package/src/components/ui/context-menu/ContextMenuSubContent.vue +0 -14
  233. package/src/components/ui/context-menu/index.ts +0 -9
  234. package/src/components/ui/dialog/Dialog.vue +0 -14
  235. package/src/components/ui/dialog/DialogClose.vue +0 -12
  236. package/src/components/ui/dialog/DialogContent.vue +0 -48
  237. package/src/components/ui/dialog/DialogDescription.vue +0 -23
  238. package/src/components/ui/dialog/DialogFooter.vue +0 -12
  239. package/src/components/ui/dialog/DialogHeader.vue +0 -12
  240. package/src/components/ui/dialog/DialogScrollContent.vue +0 -47
  241. package/src/components/ui/dialog/DialogTitle.vue +0 -23
  242. package/src/components/ui/dialog/DialogTrigger.vue +0 -12
  243. package/src/components/ui/dialog/index.ts +0 -9
  244. package/src/components/ui/dropdown-menu/DropdownMenu.vue +0 -13
  245. package/src/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +0 -28
  246. package/src/components/ui/dropdown-menu/DropdownMenuContent.vue +0 -33
  247. package/src/components/ui/dropdown-menu/DropdownMenuGroup.vue +0 -11
  248. package/src/components/ui/dropdown-menu/DropdownMenuItem.vue +0 -27
  249. package/src/components/ui/dropdown-menu/DropdownMenuLabel.vue +0 -23
  250. package/src/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +0 -13
  251. package/src/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +0 -27
  252. package/src/components/ui/dropdown-menu/DropdownMenuSeparator.vue +0 -13
  253. package/src/components/ui/dropdown-menu/DropdownMenuShortcut.vue +0 -12
  254. package/src/components/ui/dropdown-menu/DropdownMenuSub.vue +0 -13
  255. package/src/components/ui/dropdown-menu/DropdownMenuSubContent.vue +0 -27
  256. package/src/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +0 -23
  257. package/src/components/ui/dropdown-menu/DropdownMenuTrigger.vue +0 -11
  258. package/src/components/ui/dropdown-menu/index.ts +0 -14
  259. package/src/components/ui/form/FormControl.vue +0 -3
  260. package/src/components/ui/form/FormDescription.vue +0 -6
  261. package/src/components/ui/form/FormItem.vue +0 -6
  262. package/src/components/ui/form/FormLabel.vue +0 -10
  263. package/src/components/ui/form/FormMessage.vue +0 -10
  264. package/src/components/ui/form/index.ts +0 -9
  265. package/src/components/ui/hover-card/HoverCard.vue +0 -13
  266. package/src/components/ui/hover-card/HoverCardContent.vue +0 -26
  267. package/src/components/ui/hover-card/HoverCardTrigger.vue +0 -11
  268. package/src/components/ui/hover-card/index.ts +0 -3
  269. package/src/components/ui/input/Input.vue +0 -23
  270. package/src/components/ui/input/index.ts +0 -1
  271. package/src/components/ui/label/Label.vue +0 -18
  272. package/src/components/ui/label/index.ts +0 -1
  273. package/src/components/ui/lib/utils.ts +0 -2
  274. package/src/components/ui/menubar/MenubarContent.vue +0 -15
  275. package/src/components/ui/menubar/MenubarItem.vue +0 -13
  276. package/src/components/ui/menubar/MenubarTrigger.vue +0 -13
  277. package/src/components/ui/menubar/index.ts +0 -5
  278. package/src/components/ui/navigation-menu/NavigationMenuContent.vue +0 -14
  279. package/src/components/ui/navigation-menu/NavigationMenuTrigger.vue +0 -15
  280. package/src/components/ui/navigation-menu/index.ts +0 -4
  281. package/src/components/ui/pagination/PaginationContent.vue +0 -13
  282. package/src/components/ui/pagination/PaginationEllipsis.vue +0 -12
  283. package/src/components/ui/pagination/PaginationNext.vue +0 -14
  284. package/src/components/ui/pagination/PaginationPrev.vue +0 -14
  285. package/src/components/ui/pagination/index.ts +0 -6
  286. package/src/components/ui/popover/Popover.vue +0 -13
  287. package/src/components/ui/popover/PopoverContent.vue +0 -27
  288. package/src/components/ui/popover/PopoverTrigger.vue +0 -11
  289. package/src/components/ui/popover/index.ts +0 -3
  290. package/src/components/ui/progress/Progress.vue +0 -21
  291. package/src/components/ui/progress/index.ts +0 -1
  292. package/src/components/ui/radio-group/RadioGroup.vue +0 -16
  293. package/src/components/ui/radio-group/RadioGroupItem.vue +0 -24
  294. package/src/components/ui/radio-group/index.ts +0 -2
  295. package/src/components/ui/scroll-area/ScrollArea.vue +0 -13
  296. package/src/components/ui/scroll-area/index.ts +0 -1
  297. package/src/components/ui/select/Select.vue +0 -13
  298. package/src/components/ui/select/SelectContent.vue +0 -40
  299. package/src/components/ui/select/SelectGroup.vue +0 -15
  300. package/src/components/ui/select/SelectItem.vue +0 -30
  301. package/src/components/ui/select/SelectLabel.vue +0 -15
  302. package/src/components/ui/select/SelectSeparator.vue +0 -13
  303. package/src/components/ui/select/SelectTrigger.vue +0 -23
  304. package/src/components/ui/select/SelectValue.vue +0 -11
  305. package/src/components/ui/select/index.ts +0 -8
  306. package/src/components/ui/separator/Separator.vue +0 -16
  307. package/src/components/ui/separator/index.ts +0 -1
  308. package/src/components/ui/sheet/Sheet.vue +0 -13
  309. package/src/components/ui/sheet/SheetClose.vue +0 -11
  310. package/src/components/ui/sheet/SheetContent.vue +0 -65
  311. package/src/components/ui/sheet/SheetDescription.vue +0 -15
  312. package/src/components/ui/sheet/SheetFooter.vue +0 -12
  313. package/src/components/ui/sheet/SheetHeader.vue +0 -12
  314. package/src/components/ui/sheet/SheetTitle.vue +0 -15
  315. package/src/components/ui/sheet/SheetTrigger.vue +0 -11
  316. package/src/components/ui/sheet/index.ts +0 -8
  317. package/src/components/ui/skeleton/Skeleton.vue +0 -9
  318. package/src/components/ui/skeleton/index.ts +0 -1
  319. package/src/components/ui/slider/Slider.vue +0 -26
  320. package/src/components/ui/slider/index.ts +0 -1
  321. package/src/components/ui/switch/Switch.vue +0 -24
  322. package/src/components/ui/switch/index.ts +0 -1
  323. package/src/components/ui/table/Table.vue +0 -13
  324. package/src/components/ui/table/TableBody.vue +0 -6
  325. package/src/components/ui/table/TableCaption.vue +0 -6
  326. package/src/components/ui/table/TableCell.vue +0 -6
  327. package/src/components/ui/table/TableFooter.vue +0 -6
  328. package/src/components/ui/table/TableHead.vue +0 -6
  329. package/src/components/ui/table/TableHeader.vue +0 -6
  330. package/src/components/ui/table/TableRow.vue +0 -6
  331. package/src/components/ui/table/index.ts +0 -8
  332. package/src/components/ui/tabs/Tabs.vue +0 -13
  333. package/src/components/ui/tabs/TabsContent.vue +0 -21
  334. package/src/components/ui/tabs/TabsList.vue +0 -21
  335. package/src/components/ui/tabs/TabsTrigger.vue +0 -21
  336. package/src/components/ui/tabs/index.ts +0 -4
  337. package/src/components/ui/textarea/Textarea.vue +0 -29
  338. package/src/components/ui/textarea/index.ts +0 -1
  339. package/src/components/ui/toggle/Toggle.vue +0 -40
  340. package/src/components/ui/toggle/index.ts +0 -1
  341. package/src/components/ui/toggle-group/ToggleGroup.vue +0 -16
  342. package/src/components/ui/toggle-group/ToggleGroupItem.vue +0 -21
  343. package/src/components/ui/toggle-group/index.ts +0 -2
  344. package/src/components/ui/tooltip/Tooltip.vue +0 -13
  345. package/src/components/ui/tooltip/TooltipContent.vue +0 -27
  346. package/src/components/ui/tooltip/TooltipProvider.vue +0 -12
  347. package/src/components/ui/tooltip/TooltipTrigger.vue +0 -11
  348. package/src/components/ui/tooltip/index.ts +0 -4
@@ -0,0 +1,79 @@
1
+ import * as React from "react"
2
+
3
+ import { cn } from "@/lib/utils"
4
+
5
+ const Card = React.forwardRef<
6
+ HTMLDivElement,
7
+ React.HTMLAttributes<HTMLDivElement>
8
+ >(({ className, ...props }, ref) => (
9
+ <div
10
+ ref={ref}
11
+ className={cn(
12
+ "rounded-lg border bg-card text-card-foreground shadow-sm",
13
+ className
14
+ )}
15
+ {...props}
16
+ />
17
+ ))
18
+ Card.displayName = "Card"
19
+
20
+ const CardHeader = React.forwardRef<
21
+ HTMLDivElement,
22
+ React.HTMLAttributes<HTMLDivElement>
23
+ >(({ className, ...props }, ref) => (
24
+ <div
25
+ ref={ref}
26
+ className={cn("flex flex-col space-y-1.5 p-6", className)}
27
+ {...props}
28
+ />
29
+ ))
30
+ CardHeader.displayName = "CardHeader"
31
+
32
+ const CardTitle = React.forwardRef<
33
+ HTMLDivElement,
34
+ React.HTMLAttributes<HTMLDivElement>
35
+ >(({ className, ...props }, ref) => (
36
+ <div
37
+ ref={ref}
38
+ className={cn(
39
+ "text-2xl font-semibold leading-none tracking-tight",
40
+ className
41
+ )}
42
+ {...props}
43
+ />
44
+ ))
45
+ CardTitle.displayName = "CardTitle"
46
+
47
+ const CardDescription = React.forwardRef<
48
+ HTMLDivElement,
49
+ React.HTMLAttributes<HTMLDivElement>
50
+ >(({ className, ...props }, ref) => (
51
+ <div
52
+ ref={ref}
53
+ className={cn("text-sm text-muted-foreground", className)}
54
+ {...props}
55
+ />
56
+ ))
57
+ CardDescription.displayName = "CardDescription"
58
+
59
+ const CardContent = React.forwardRef<
60
+ HTMLDivElement,
61
+ React.HTMLAttributes<HTMLDivElement>
62
+ >(({ className, ...props }, ref) => (
63
+ <div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
64
+ ))
65
+ CardContent.displayName = "CardContent"
66
+
67
+ const CardFooter = React.forwardRef<
68
+ HTMLDivElement,
69
+ React.HTMLAttributes<HTMLDivElement>
70
+ >(({ className, ...props }, ref) => (
71
+ <div
72
+ ref={ref}
73
+ className={cn("flex items-center p-6 pt-0", className)}
74
+ {...props}
75
+ />
76
+ ))
77
+ CardFooter.displayName = "CardFooter"
78
+
79
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
@@ -0,0 +1,262 @@
1
+ "use client"
2
+
3
+ import * as React from "react"
4
+ import useEmblaCarousel, {
5
+ type UseEmblaCarouselType,
6
+ } from "embla-carousel-react"
7
+ import { ArrowLeft, ArrowRight } from "lucide-react"
8
+
9
+ import { cn } from "@/lib/utils"
10
+ import { Button } from "@/components/ui/button"
11
+
12
+ type CarouselApi = UseEmblaCarouselType[1]
13
+ type UseCarouselParameters = Parameters<typeof useEmblaCarousel>
14
+ type CarouselOptions = UseCarouselParameters[0]
15
+ type CarouselPlugin = UseCarouselParameters[1]
16
+
17
+ type CarouselProps = {
18
+ opts?: CarouselOptions
19
+ plugins?: CarouselPlugin
20
+ orientation?: "horizontal" | "vertical"
21
+ setApi?: (api: CarouselApi) => void
22
+ }
23
+
24
+ type CarouselContextProps = {
25
+ carouselRef: ReturnType<typeof useEmblaCarousel>[0]
26
+ api: ReturnType<typeof useEmblaCarousel>[1]
27
+ scrollPrev: () => void
28
+ scrollNext: () => void
29
+ canScrollPrev: boolean
30
+ canScrollNext: boolean
31
+ } & CarouselProps
32
+
33
+ const CarouselContext = React.createContext<CarouselContextProps | null>(null)
34
+
35
+ function useCarousel() {
36
+ const context = React.useContext(CarouselContext)
37
+
38
+ if (!context) {
39
+ throw new Error("useCarousel must be used within a <Carousel />")
40
+ }
41
+
42
+ return context
43
+ }
44
+
45
+ const Carousel = React.forwardRef<
46
+ HTMLDivElement,
47
+ React.HTMLAttributes<HTMLDivElement> & CarouselProps
48
+ >(
49
+ (
50
+ {
51
+ orientation = "horizontal",
52
+ opts,
53
+ setApi,
54
+ plugins,
55
+ className,
56
+ children,
57
+ ...props
58
+ },
59
+ ref
60
+ ) => {
61
+ const [carouselRef, api] = useEmblaCarousel(
62
+ {
63
+ ...opts,
64
+ axis: orientation === "horizontal" ? "x" : "y",
65
+ },
66
+ plugins
67
+ )
68
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false)
69
+ const [canScrollNext, setCanScrollNext] = React.useState(false)
70
+
71
+ const onSelect = React.useCallback((api: CarouselApi) => {
72
+ if (!api) {
73
+ return
74
+ }
75
+
76
+ setCanScrollPrev(api.canScrollPrev())
77
+ setCanScrollNext(api.canScrollNext())
78
+ }, [])
79
+
80
+ const scrollPrev = React.useCallback(() => {
81
+ api?.scrollPrev()
82
+ }, [api])
83
+
84
+ const scrollNext = React.useCallback(() => {
85
+ api?.scrollNext()
86
+ }, [api])
87
+
88
+ const handleKeyDown = React.useCallback(
89
+ (event: React.KeyboardEvent<HTMLDivElement>) => {
90
+ if (event.key === "ArrowLeft") {
91
+ event.preventDefault()
92
+ scrollPrev()
93
+ } else if (event.key === "ArrowRight") {
94
+ event.preventDefault()
95
+ scrollNext()
96
+ }
97
+ },
98
+ [scrollPrev, scrollNext]
99
+ )
100
+
101
+ React.useEffect(() => {
102
+ if (!api || !setApi) {
103
+ return
104
+ }
105
+
106
+ setApi(api)
107
+ }, [api, setApi])
108
+
109
+ React.useEffect(() => {
110
+ if (!api) {
111
+ return
112
+ }
113
+
114
+ onSelect(api)
115
+ api.on("reInit", onSelect)
116
+ api.on("select", onSelect)
117
+
118
+ return () => {
119
+ api?.off("select", onSelect)
120
+ }
121
+ }, [api, onSelect])
122
+
123
+ return (
124
+ <CarouselContext.Provider
125
+ value={{
126
+ carouselRef,
127
+ api: api,
128
+ opts,
129
+ orientation:
130
+ orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
131
+ scrollPrev,
132
+ scrollNext,
133
+ canScrollPrev,
134
+ canScrollNext,
135
+ }}
136
+ >
137
+ <div
138
+ ref={ref}
139
+ onKeyDownCapture={handleKeyDown}
140
+ className={cn("relative", className)}
141
+ role="region"
142
+ aria-roledescription="carousel"
143
+ {...props}
144
+ >
145
+ {children}
146
+ </div>
147
+ </CarouselContext.Provider>
148
+ )
149
+ }
150
+ )
151
+ Carousel.displayName = "Carousel"
152
+
153
+ const CarouselContent = React.forwardRef<
154
+ HTMLDivElement,
155
+ React.HTMLAttributes<HTMLDivElement>
156
+ >(({ className, ...props }, ref) => {
157
+ const { carouselRef, orientation } = useCarousel()
158
+
159
+ return (
160
+ <div ref={carouselRef} className="overflow-hidden">
161
+ <div
162
+ ref={ref}
163
+ className={cn(
164
+ "flex",
165
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
166
+ className
167
+ )}
168
+ {...props}
169
+ />
170
+ </div>
171
+ )
172
+ })
173
+ CarouselContent.displayName = "CarouselContent"
174
+
175
+ const CarouselItem = React.forwardRef<
176
+ HTMLDivElement,
177
+ React.HTMLAttributes<HTMLDivElement>
178
+ >(({ className, ...props }, ref) => {
179
+ const { orientation } = useCarousel()
180
+
181
+ return (
182
+ <div
183
+ ref={ref}
184
+ role="group"
185
+ aria-roledescription="slide"
186
+ className={cn(
187
+ "min-w-0 shrink-0 grow-0 basis-full",
188
+ orientation === "horizontal" ? "pl-4" : "pt-4",
189
+ className
190
+ )}
191
+ {...props}
192
+ />
193
+ )
194
+ })
195
+ CarouselItem.displayName = "CarouselItem"
196
+
197
+ const CarouselPrevious = React.forwardRef<
198
+ HTMLButtonElement,
199
+ React.ComponentProps<typeof Button>
200
+ >(({ className, variant = "outline", size = "icon", ...props }, ref) => {
201
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel()
202
+
203
+ return (
204
+ <Button
205
+ ref={ref}
206
+ variant={variant}
207
+ size={size}
208
+ className={cn(
209
+ "absolute h-8 w-8 rounded-full",
210
+ orientation === "horizontal"
211
+ ? "-left-12 top-1/2 -translate-y-1/2"
212
+ : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
213
+ className
214
+ )}
215
+ disabled={!canScrollPrev}
216
+ onClick={scrollPrev}
217
+ {...props}
218
+ >
219
+ <ArrowLeft className="h-4 w-4" />
220
+ <span className="sr-only">Previous slide</span>
221
+ </Button>
222
+ )
223
+ })
224
+ CarouselPrevious.displayName = "CarouselPrevious"
225
+
226
+ const CarouselNext = React.forwardRef<
227
+ HTMLButtonElement,
228
+ React.ComponentProps<typeof Button>
229
+ >(({ className, variant = "outline", size = "icon", ...props }, ref) => {
230
+ const { orientation, scrollNext, canScrollNext } = useCarousel()
231
+
232
+ return (
233
+ <Button
234
+ ref={ref}
235
+ variant={variant}
236
+ size={size}
237
+ className={cn(
238
+ "absolute h-8 w-8 rounded-full",
239
+ orientation === "horizontal"
240
+ ? "-right-12 top-1/2 -translate-y-1/2"
241
+ : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
242
+ className
243
+ )}
244
+ disabled={!canScrollNext}
245
+ onClick={scrollNext}
246
+ {...props}
247
+ >
248
+ <ArrowRight className="h-4 w-4" />
249
+ <span className="sr-only">Next slide</span>
250
+ </Button>
251
+ )
252
+ })
253
+ CarouselNext.displayName = "CarouselNext"
254
+
255
+ export {
256
+ type CarouselApi,
257
+ Carousel,
258
+ CarouselContent,
259
+ CarouselItem,
260
+ CarouselPrevious,
261
+ CarouselNext,
262
+ }
@@ -0,0 +1,367 @@
1
+ import * as React from "react"
2
+ import * as RechartsPrimitive from "recharts"
3
+
4
+ import { cn } from "@/lib/utils"
5
+
6
+ // Format: { THEME_NAME: CSS_SELECTOR }
7
+ const THEMES = { light: "", dark: ".dark" } as const
8
+
9
+ export type ChartConfig = {
10
+ [k in string]: {
11
+ label?: React.ReactNode
12
+ icon?: React.ComponentType
13
+ } & (
14
+ | { color?: string; theme?: never }
15
+ | { color?: never; theme: Record<keyof typeof THEMES, string> }
16
+ )
17
+ }
18
+
19
+ type ChartContextProps = {
20
+ config: ChartConfig
21
+ }
22
+
23
+ const ChartContext = React.createContext<ChartContextProps | null>(null)
24
+
25
+ function useChart() {
26
+ const context = React.useContext(ChartContext)
27
+
28
+ if (!context) {
29
+ throw new Error("useChart must be used within a <ChartContainer />")
30
+ }
31
+
32
+ return context
33
+ }
34
+
35
+ const ChartContainer = React.forwardRef<
36
+ HTMLDivElement,
37
+ React.ComponentProps<"div"> & {
38
+ config: ChartConfig
39
+ children: React.ComponentProps<
40
+ typeof RechartsPrimitive.ResponsiveContainer
41
+ >["children"]
42
+ }
43
+ >(({ id, className, children, config, ...props }, ref) => {
44
+ const uniqueId = React.useId()
45
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`
46
+
47
+ return (
48
+ <ChartContext.Provider value={{ config }}>
49
+ <div
50
+ data-chart={chartId}
51
+ ref={ref}
52
+ className={cn(
53
+ "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",
54
+ className
55
+ )}
56
+ {...props}
57
+ >
58
+ <ChartStyle id={chartId} config={config} />
59
+ <RechartsPrimitive.ResponsiveContainer>
60
+ {children}
61
+ </RechartsPrimitive.ResponsiveContainer>
62
+ </div>
63
+ </ChartContext.Provider>
64
+ )
65
+ })
66
+ ChartContainer.displayName = "Chart"
67
+
68
+ const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
69
+ const colorConfig = Object.entries(config).filter(
70
+ ([, config]) => config.theme || config.color
71
+ )
72
+
73
+ if (!colorConfig.length) {
74
+ return null
75
+ }
76
+
77
+ return (
78
+ <style
79
+ dangerouslySetInnerHTML={{
80
+ __html: Object.entries(THEMES)
81
+ .map(
82
+ ([theme, prefix]) => `
83
+ ${prefix} [data-chart=${id}] {
84
+ ${colorConfig
85
+ .map(([key, itemConfig]) => {
86
+ const color =
87
+ itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||
88
+ itemConfig.color
89
+ return color ? ` --color-${key}: ${color};` : null
90
+ })
91
+ .join("\n")}
92
+ }
93
+ `
94
+ )
95
+ .join("\n"),
96
+ }}
97
+ />
98
+ )
99
+ }
100
+
101
+ const ChartTooltip = RechartsPrimitive.Tooltip
102
+
103
+ const ChartTooltipContent = React.forwardRef<
104
+ HTMLDivElement,
105
+ React.ComponentProps<typeof RechartsPrimitive.Tooltip> &
106
+ React.ComponentProps<"div"> & {
107
+ hideLabel?: boolean
108
+ hideIndicator?: boolean
109
+ indicator?: "line" | "dot" | "dashed"
110
+ nameKey?: string
111
+ labelKey?: string
112
+ }
113
+ >(
114
+ (
115
+ {
116
+ active,
117
+ payload,
118
+ className,
119
+ indicator = "dot",
120
+ hideLabel = false,
121
+ hideIndicator = false,
122
+ label,
123
+ labelFormatter,
124
+ labelClassName,
125
+ formatter,
126
+ color,
127
+ nameKey,
128
+ labelKey,
129
+ },
130
+ ref
131
+ ) => {
132
+ const { config } = useChart()
133
+
134
+ const tooltipLabel = React.useMemo(() => {
135
+ if (hideLabel || !payload?.length) {
136
+ return null
137
+ }
138
+
139
+ const [item] = payload
140
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`
141
+ const itemConfig = getPayloadConfigFromPayload(config, item, key)
142
+ const value =
143
+ !labelKey && typeof label === "string"
144
+ ? config[label as keyof typeof config]?.label || label
145
+ : itemConfig?.label
146
+
147
+ if (labelFormatter) {
148
+ return (
149
+ <div className={cn("font-medium", labelClassName)}>
150
+ {labelFormatter(value, payload)}
151
+ </div>
152
+ )
153
+ }
154
+
155
+ if (!value) {
156
+ return null
157
+ }
158
+
159
+ return <div className={cn("font-medium", labelClassName)}>{value}</div>
160
+ }, [
161
+ label,
162
+ labelFormatter,
163
+ payload,
164
+ hideLabel,
165
+ labelClassName,
166
+ config,
167
+ labelKey,
168
+ ])
169
+
170
+ if (!active || !payload?.length) {
171
+ return null
172
+ }
173
+
174
+ const nestLabel = payload.length === 1 && indicator !== "dot"
175
+
176
+ return (
177
+ <div
178
+ ref={ref}
179
+ className={cn(
180
+ "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
181
+ className
182
+ )}
183
+ >
184
+ {!nestLabel ? tooltipLabel : null}
185
+ <div className="grid gap-1.5">
186
+ {payload
187
+ .filter((item) => item.type !== "none")
188
+ .map((item, index) => {
189
+ const key = `${nameKey || item.name || item.dataKey || "value"}`
190
+ const itemConfig = getPayloadConfigFromPayload(config, item, key)
191
+ const indicatorColor = color || item.payload.fill || item.color
192
+
193
+ return (
194
+ <div
195
+ key={item.dataKey}
196
+ className={cn(
197
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
198
+ indicator === "dot" && "items-center"
199
+ )}
200
+ >
201
+ {formatter && item?.value !== undefined && item.name ? (
202
+ formatter(item.value, item.name, item, index, item.payload)
203
+ ) : (
204
+ <>
205
+ {itemConfig?.icon ? (
206
+ <itemConfig.icon />
207
+ ) : (
208
+ !hideIndicator && (
209
+ <div
210
+ className={cn(
211
+ "shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",
212
+ {
213
+ "h-2.5 w-2.5": indicator === "dot",
214
+ "w-1": indicator === "line",
215
+ "w-0 border-[1.5px] border-dashed bg-transparent":
216
+ indicator === "dashed",
217
+ "my-0.5": nestLabel && indicator === "dashed",
218
+ }
219
+ )}
220
+ style={
221
+ {
222
+ "--color-bg": indicatorColor,
223
+ "--color-border": indicatorColor,
224
+ } as React.CSSProperties
225
+ }
226
+ />
227
+ )
228
+ )}
229
+ <div
230
+ className={cn(
231
+ "flex flex-1 justify-between leading-none",
232
+ nestLabel ? "items-end" : "items-center"
233
+ )}
234
+ >
235
+ <div className="grid gap-1.5">
236
+ {nestLabel ? tooltipLabel : null}
237
+ <span className="text-muted-foreground">
238
+ {itemConfig?.label || item.name}
239
+ </span>
240
+ </div>
241
+ {item.value && (
242
+ <span className="font-mono font-medium tabular-nums text-foreground">
243
+ {item.value.toLocaleString()}
244
+ </span>
245
+ )}
246
+ </div>
247
+ </>
248
+ )}
249
+ </div>
250
+ )
251
+ })}
252
+ </div>
253
+ </div>
254
+ )
255
+ }
256
+ )
257
+ ChartTooltipContent.displayName = "ChartTooltip"
258
+
259
+ const ChartLegend = RechartsPrimitive.Legend
260
+
261
+ const ChartLegendContent = React.forwardRef<
262
+ HTMLDivElement,
263
+ React.ComponentProps<"div"> &
264
+ Pick<RechartsPrimitive.LegendProps, "payload" | "verticalAlign"> & {
265
+ hideIcon?: boolean
266
+ nameKey?: string
267
+ }
268
+ >(
269
+ (
270
+ { className, hideIcon = false, payload, verticalAlign = "bottom", nameKey },
271
+ ref
272
+ ) => {
273
+ const { config } = useChart()
274
+
275
+ if (!payload?.length) {
276
+ return null
277
+ }
278
+
279
+ return (
280
+ <div
281
+ ref={ref}
282
+ className={cn(
283
+ "flex items-center justify-center gap-4",
284
+ verticalAlign === "top" ? "pb-3" : "pt-3",
285
+ className
286
+ )}
287
+ >
288
+ {payload
289
+ .filter((item) => item.type !== "none")
290
+ .map((item) => {
291
+ const key = `${nameKey || item.dataKey || "value"}`
292
+ const itemConfig = getPayloadConfigFromPayload(config, item, key)
293
+
294
+ return (
295
+ <div
296
+ key={item.value}
297
+ className={cn(
298
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
299
+ )}
300
+ >
301
+ {itemConfig?.icon && !hideIcon ? (
302
+ <itemConfig.icon />
303
+ ) : (
304
+ <div
305
+ className="h-2 w-2 shrink-0 rounded-[2px]"
306
+ style={{
307
+ backgroundColor: item.color,
308
+ }}
309
+ />
310
+ )}
311
+ {itemConfig?.label}
312
+ </div>
313
+ )
314
+ })}
315
+ </div>
316
+ )
317
+ }
318
+ )
319
+ ChartLegendContent.displayName = "ChartLegend"
320
+
321
+ // Helper to extract item config from a payload.
322
+ function getPayloadConfigFromPayload(
323
+ config: ChartConfig,
324
+ payload: unknown,
325
+ key: string
326
+ ) {
327
+ if (typeof payload !== "object" || payload === null) {
328
+ return undefined
329
+ }
330
+
331
+ const payloadPayload =
332
+ "payload" in payload &&
333
+ typeof payload.payload === "object" &&
334
+ payload.payload !== null
335
+ ? payload.payload
336
+ : undefined
337
+
338
+ let configLabelKey: string = key
339
+
340
+ if (
341
+ key in payload &&
342
+ typeof payload[key as keyof typeof payload] === "string"
343
+ ) {
344
+ configLabelKey = payload[key as keyof typeof payload] as string
345
+ } else if (
346
+ payloadPayload &&
347
+ key in payloadPayload &&
348
+ typeof payloadPayload[key as keyof typeof payloadPayload] === "string"
349
+ ) {
350
+ configLabelKey = payloadPayload[
351
+ key as keyof typeof payloadPayload
352
+ ] as string
353
+ }
354
+
355
+ return configLabelKey in config
356
+ ? config[configLabelKey]
357
+ : config[key as keyof typeof config]
358
+ }
359
+
360
+ export {
361
+ ChartContainer,
362
+ ChartTooltip,
363
+ ChartTooltipContent,
364
+ ChartLegend,
365
+ ChartLegendContent,
366
+ ChartStyle,
367
+ }