@matta-trade/ui 0.0.0-stage → 0.2.2

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 (472) hide show
  1. package/DESIGN.md +217 -0
  2. package/README.md +91 -2
  3. package/dist/alert/Alert.vue.d.ts +19 -0
  4. package/dist/alert/AlertDescription.vue.d.ts +17 -0
  5. package/dist/alert/AlertTitle.vue.d.ts +17 -0
  6. package/dist/alert/index.d.ts +8 -0
  7. package/dist/alert/index.js +62 -0
  8. package/dist/alert-dialog/AlertDialog.vue.d.ts +18 -0
  9. package/dist/alert-dialog/AlertDialogAction.vue.d.ts +18 -0
  10. package/dist/alert-dialog/AlertDialogCancel.vue.d.ts +18 -0
  11. package/dist/alert-dialog/AlertDialogContent.vue.d.ts +32 -0
  12. package/dist/alert-dialog/AlertDialogDescription.vue.d.ts +18 -0
  13. package/dist/alert-dialog/AlertDialogFooter.vue.d.ts +17 -0
  14. package/dist/alert-dialog/AlertDialogHeader.vue.d.ts +17 -0
  15. package/dist/alert-dialog/AlertDialogTitle.vue.d.ts +18 -0
  16. package/dist/alert-dialog/AlertDialogTrigger.vue.d.ts +14 -0
  17. package/dist/alert-dialog/index.d.ts +9 -0
  18. package/dist/alert-dialog/index.js +177 -0
  19. package/dist/avatar/Avatar.vue.d.ts +27 -0
  20. package/dist/avatar/AvatarFallback.vue.d.ts +18 -0
  21. package/dist/avatar/AvatarImage.vue.d.ts +14 -0
  22. package/dist/avatar/index.d.ts +9 -0
  23. package/dist/avatar/index.js +120 -0
  24. package/dist/avatar-colors.d.ts +51 -0
  25. package/dist/badge/Badge.vue.d.ts +20 -0
  26. package/dist/badge/index.d.ts +6 -0
  27. package/dist/badge/index.js +58 -0
  28. package/dist/breadcrumb/Breadcrumb.vue.d.ts +17 -0
  29. package/dist/breadcrumb/BreadcrumbEllipsis.vue.d.ts +17 -0
  30. package/dist/breadcrumb/BreadcrumbItem.vue.d.ts +17 -0
  31. package/dist/breadcrumb/BreadcrumbLink.vue.d.ts +20 -0
  32. package/dist/breadcrumb/BreadcrumbList.vue.d.ts +17 -0
  33. package/dist/breadcrumb/BreadcrumbPage.vue.d.ts +17 -0
  34. package/dist/breadcrumb/BreadcrumbSeparator.vue.d.ts +17 -0
  35. package/dist/breadcrumb/index.d.ts +7 -0
  36. package/dist/breadcrumb/index.js +131 -0
  37. package/dist/button/Button.vue.d.ts +36 -0
  38. package/dist/button/index.d.ts +7 -0
  39. package/dist/button/index.js +2 -0
  40. package/dist/button-group/ButtonGroup.vue.d.ts +19 -0
  41. package/dist/button-group/ButtonGroupSeparator.vue.d.ts +10 -0
  42. package/dist/button-group/ButtonGroupText.vue.d.ts +22 -0
  43. package/dist/button-group/index.d.ts +8 -0
  44. package/dist/button-group/index.js +92 -0
  45. package/dist/calendar/Calendar.vue.d.ts +14 -0
  46. package/dist/calendar/CalendarCell.vue.d.ts +18 -0
  47. package/dist/calendar/CalendarCellTrigger.vue.d.ts +18 -0
  48. package/dist/calendar/CalendarGrid.vue.d.ts +18 -0
  49. package/dist/calendar/CalendarGridBody.vue.d.ts +14 -0
  50. package/dist/calendar/CalendarGridHead.vue.d.ts +14 -0
  51. package/dist/calendar/CalendarGridRow.vue.d.ts +18 -0
  52. package/dist/calendar/CalendarHeadCell.vue.d.ts +18 -0
  53. package/dist/calendar/CalendarHeader.vue.d.ts +18 -0
  54. package/dist/calendar/CalendarHeading.vue.d.ts +19 -0
  55. package/dist/calendar/CalendarNextButton.vue.d.ts +18 -0
  56. package/dist/calendar/CalendarPrevButton.vue.d.ts +18 -0
  57. package/dist/calendar/index.d.ts +12 -0
  58. package/dist/calendar/index.js +303 -0
  59. package/dist/card/Card.vue.d.ts +17 -0
  60. package/dist/card/CardContent.vue.d.ts +17 -0
  61. package/dist/card/CardDescription.vue.d.ts +17 -0
  62. package/dist/card/CardFooter.vue.d.ts +17 -0
  63. package/dist/card/CardHeader.vue.d.ts +17 -0
  64. package/dist/card/CardTitle.vue.d.ts +17 -0
  65. package/dist/card/index.d.ts +6 -0
  66. package/dist/card/index.js +2 -0
  67. package/dist/chart/ChartCrosshair.vue.d.ts +13 -0
  68. package/dist/chart/ChartLegend.vue.d.ts +15 -0
  69. package/dist/chart/ChartSingleTooltip.vue.d.ts +12 -0
  70. package/dist/chart/ChartTooltip.vue.d.ts +11 -0
  71. package/dist/chart/index.d.ts +6 -0
  72. package/dist/chart/index.js +177 -0
  73. package/dist/chart/interface.d.ts +63 -0
  74. package/dist/checkbox/Checkbox.vue.d.ts +22 -0
  75. package/dist/checkbox/index.d.ts +1 -0
  76. package/dist/checkbox/index.js +43 -0
  77. package/dist/chunks/avatar-colors-CCGh54Ve.js +37 -0
  78. package/dist/chunks/button-DcaKfSRM.js +100 -0
  79. package/dist/chunks/card-B9Fm3-hL.js +85 -0
  80. package/dist/chunks/dialog-Df5vNbNz.js +196 -0
  81. package/dist/chunks/input-BgkMak31.js +44 -0
  82. package/dist/chunks/scroll-area-COtrGbKj.js +68 -0
  83. package/dist/chunks/separator-DAL7ppX1.js +31 -0
  84. package/dist/chunks/sheet-tX6r4wAA.js +150 -0
  85. package/dist/chunks/tooltip-C80qPEs9.js +102 -0
  86. package/dist/chunks/utils-CX-Pz5p6.js +8 -0
  87. package/dist/combobox/Combobox.vue.d.ts +29 -0
  88. package/dist/combobox/ComboboxAnchor.vue.d.ts +18 -0
  89. package/dist/combobox/ComboboxEmpty.vue.d.ts +18 -0
  90. package/dist/combobox/ComboboxGroup.vue.d.ts +19 -0
  91. package/dist/combobox/ComboboxInput.vue.d.ts +22 -0
  92. package/dist/combobox/ComboboxItem.vue.d.ts +22 -0
  93. package/dist/combobox/ComboboxList.vue.d.ts +32 -0
  94. package/dist/combobox/ComboboxSeparator.vue.d.ts +18 -0
  95. package/dist/combobox/ComboboxTrigger.vue.d.ts +18 -0
  96. package/dist/combobox/index.d.ts +10 -0
  97. package/dist/combobox/index.js +262 -0
  98. package/dist/command/Command.vue.d.ts +36 -0
  99. package/dist/command/CommandDialog.vue.d.ts +18 -0
  100. package/dist/command/CommandEmpty.vue.d.ts +18 -0
  101. package/dist/command/CommandGroup.vue.d.ts +19 -0
  102. package/dist/command/CommandInput.vue.d.ts +8 -0
  103. package/dist/command/CommandItem.vue.d.ts +22 -0
  104. package/dist/command/CommandList.vue.d.ts +18 -0
  105. package/dist/command/CommandSeparator.vue.d.ts +18 -0
  106. package/dist/command/CommandShortcut.vue.d.ts +17 -0
  107. package/dist/command/index.d.ts +90 -0
  108. package/dist/command/index.js +297 -0
  109. package/dist/dialog/Dialog.vue.d.ts +18 -0
  110. package/dist/dialog/DialogClose.vue.d.ts +14 -0
  111. package/dist/dialog/DialogContent.vue.d.ts +32 -0
  112. package/dist/dialog/DialogDescription.vue.d.ts +18 -0
  113. package/dist/dialog/DialogFooter.vue.d.ts +17 -0
  114. package/dist/dialog/DialogHeader.vue.d.ts +17 -0
  115. package/dist/dialog/DialogScrollContent.vue.d.ts +32 -0
  116. package/dist/dialog/DialogTitle.vue.d.ts +18 -0
  117. package/dist/dialog/DialogTrigger.vue.d.ts +14 -0
  118. package/dist/dialog/index.d.ts +9 -0
  119. package/dist/dialog/index.js +2 -0
  120. package/dist/drawer/Drawer.vue.d.ts +30 -0
  121. package/dist/drawer/DrawerContent.vue.d.ts +32 -0
  122. package/dist/drawer/DrawerDescription.vue.d.ts +18 -0
  123. package/dist/drawer/DrawerFooter.vue.d.ts +17 -0
  124. package/dist/drawer/DrawerHeader.vue.d.ts +17 -0
  125. package/dist/drawer/DrawerOverlay.vue.d.ts +8 -0
  126. package/dist/drawer/DrawerTitle.vue.d.ts +18 -0
  127. package/dist/drawer/index.d.ts +8 -0
  128. package/dist/drawer/index.js +166 -0
  129. package/dist/dropdown-menu/DropdownMenu.vue.d.ts +18 -0
  130. package/dist/dropdown-menu/DropdownMenuContent.vue.d.ts +32 -0
  131. package/dist/dropdown-menu/DropdownMenuItem.vue.d.ts +22 -0
  132. package/dist/dropdown-menu/DropdownMenuLabel.vue.d.ts +18 -0
  133. package/dist/dropdown-menu/DropdownMenuSeparator.vue.d.ts +8 -0
  134. package/dist/dropdown-menu/DropdownMenuTrigger.vue.d.ts +14 -0
  135. package/dist/dropdown-menu/index.d.ts +6 -0
  136. package/dist/dropdown-menu/index.js +149 -0
  137. package/dist/index.d.ts +2 -0
  138. package/dist/index.js +3 -0
  139. package/dist/input/Input.vue.d.ts +19 -0
  140. package/dist/input/index.d.ts +1 -0
  141. package/dist/input/index.js +2 -0
  142. package/dist/label/Label.vue.d.ts +18 -0
  143. package/dist/label/index.d.ts +1 -0
  144. package/dist/label/index.js +29 -0
  145. package/dist/lib/utils.d.ts +2 -0
  146. package/dist/popover/Popover.vue.d.ts +18 -0
  147. package/dist/popover/PopoverContent.vue.d.ts +35 -0
  148. package/dist/popover/PopoverTrigger.vue.d.ts +14 -0
  149. package/dist/popover/index.d.ts +3 -0
  150. package/dist/popover/index.js +96 -0
  151. package/dist/range-calendar/RangeCalendar.vue.d.ts +18 -0
  152. package/dist/range-calendar/RangeCalendarCell.vue.d.ts +18 -0
  153. package/dist/range-calendar/RangeCalendarCellTrigger.vue.d.ts +18 -0
  154. package/dist/range-calendar/RangeCalendarGrid.vue.d.ts +18 -0
  155. package/dist/range-calendar/RangeCalendarGridBody.vue.d.ts +14 -0
  156. package/dist/range-calendar/RangeCalendarGridHead.vue.d.ts +14 -0
  157. package/dist/range-calendar/RangeCalendarGridRow.vue.d.ts +18 -0
  158. package/dist/range-calendar/RangeCalendarHeadCell.vue.d.ts +18 -0
  159. package/dist/range-calendar/RangeCalendarHeader.vue.d.ts +18 -0
  160. package/dist/range-calendar/RangeCalendarHeading.vue.d.ts +19 -0
  161. package/dist/range-calendar/RangeCalendarNextButton.vue.d.ts +18 -0
  162. package/dist/range-calendar/RangeCalendarPrevButton.vue.d.ts +18 -0
  163. package/dist/range-calendar/index.d.ts +12 -0
  164. package/dist/range-calendar/index.js +311 -0
  165. package/dist/scroll-area/ScrollArea.vue.d.ts +19 -0
  166. package/dist/scroll-area/ScrollBar.vue.d.ts +10 -0
  167. package/dist/scroll-area/index.d.ts +2 -0
  168. package/dist/scroll-area/index.js +2 -0
  169. package/dist/select/Select.vue.d.ts +21 -0
  170. package/dist/select/SelectContent.vue.d.ts +28 -0
  171. package/dist/select/SelectGroup.vue.d.ts +18 -0
  172. package/dist/select/SelectItem.vue.d.ts +18 -0
  173. package/dist/select/SelectItemText.vue.d.ts +14 -0
  174. package/dist/select/SelectLabel.vue.d.ts +18 -0
  175. package/dist/select/SelectScrollDownButton.vue.d.ts +18 -0
  176. package/dist/select/SelectScrollUpButton.vue.d.ts +18 -0
  177. package/dist/select/SelectSeparator.vue.d.ts +8 -0
  178. package/dist/select/SelectTrigger.vue.d.ts +18 -0
  179. package/dist/select/SelectValue.vue.d.ts +14 -0
  180. package/dist/select/index.d.ts +11 -0
  181. package/dist/select/index.js +276 -0
  182. package/dist/separator/Separator.vue.d.ts +11 -0
  183. package/dist/separator/index.d.ts +1 -0
  184. package/dist/separator/index.js +2 -0
  185. package/dist/sheet/Sheet.vue.d.ts +18 -0
  186. package/dist/sheet/SheetClose.vue.d.ts +14 -0
  187. package/dist/sheet/SheetContent.vue.d.ts +39 -0
  188. package/dist/sheet/SheetDescription.vue.d.ts +18 -0
  189. package/dist/sheet/SheetHeader.vue.d.ts +17 -0
  190. package/dist/sheet/SheetTitle.vue.d.ts +18 -0
  191. package/dist/sheet/SheetTrigger.vue.d.ts +14 -0
  192. package/dist/sheet/index.d.ts +7 -0
  193. package/dist/sheet/index.js +2 -0
  194. package/dist/sidebar/Sidebar.vue.d.ts +28 -0
  195. package/dist/sidebar/SidebarContent.vue.d.ts +17 -0
  196. package/dist/sidebar/SidebarFooter.vue.d.ts +17 -0
  197. package/dist/sidebar/SidebarGroup.vue.d.ts +17 -0
  198. package/dist/sidebar/SidebarGroupAction.vue.d.ts +20 -0
  199. package/dist/sidebar/SidebarGroupContent.vue.d.ts +17 -0
  200. package/dist/sidebar/SidebarGroupLabel.vue.d.ts +20 -0
  201. package/dist/sidebar/SidebarHeader.vue.d.ts +17 -0
  202. package/dist/sidebar/SidebarInput.vue.d.ts +17 -0
  203. package/dist/sidebar/SidebarInset.vue.d.ts +17 -0
  204. package/dist/sidebar/SidebarMenu.vue.d.ts +17 -0
  205. package/dist/sidebar/SidebarMenuAction.vue.d.ts +21 -0
  206. package/dist/sidebar/SidebarMenuBadge.vue.d.ts +17 -0
  207. package/dist/sidebar/SidebarMenuButton.vue.d.ts +29 -0
  208. package/dist/sidebar/SidebarMenuItem.vue.d.ts +17 -0
  209. package/dist/sidebar/SidebarMenuSub.vue.d.ts +17 -0
  210. package/dist/sidebar/SidebarMenuSubButton.vue.d.ts +23 -0
  211. package/dist/sidebar/SidebarMenuSubItem.vue.d.ts +17 -0
  212. package/dist/sidebar/SidebarProvider.vue.d.ts +26 -0
  213. package/dist/sidebar/SidebarRail.vue.d.ts +7 -0
  214. package/dist/sidebar/SidebarSeparator.vue.d.ts +7 -0
  215. package/dist/sidebar/SidebarTrigger.vue.d.ts +7 -0
  216. package/dist/sidebar/index.d.ts +45 -0
  217. package/dist/sidebar/index.js +595 -0
  218. package/dist/sonner/Sonner.vue.d.ts +4 -0
  219. package/dist/sonner/index.d.ts +1 -0
  220. package/dist/sonner/index.js +59 -0
  221. package/dist/stepper/Stepper.vue.d.ts +17 -0
  222. package/dist/stepper/index.d.ts +1 -0
  223. package/dist/stepper/index.js +57 -0
  224. package/dist/switch/Switch.vue.d.ts +12 -0
  225. package/dist/switch/index.d.ts +1 -0
  226. package/dist/switch/index.js +46 -0
  227. package/dist/table/Table.vue.d.ts +17 -0
  228. package/dist/table/TableBody.vue.d.ts +17 -0
  229. package/dist/table/TableCell.vue.d.ts +17 -0
  230. package/dist/table/TableHead.vue.d.ts +17 -0
  231. package/dist/table/TableHeader.vue.d.ts +17 -0
  232. package/dist/table/TableRow.vue.d.ts +17 -0
  233. package/dist/table/index.d.ts +6 -0
  234. package/dist/table/index.js +84 -0
  235. package/dist/tabs/Tabs.vue.d.ts +19 -0
  236. package/dist/tabs/TabsContent.vue.d.ts +18 -0
  237. package/dist/tabs/TabsList.vue.d.ts +18 -0
  238. package/dist/tabs/TabsTrigger.vue.d.ts +18 -0
  239. package/dist/tabs/index.d.ts +4 -0
  240. package/dist/tabs/index.js +93 -0
  241. package/dist/tags-input/TagsInput.vue.d.ts +28 -0
  242. package/dist/tags-input/TagsInputInput.vue.d.ts +8 -0
  243. package/dist/tags-input/TagsInputItem.vue.d.ts +18 -0
  244. package/dist/tags-input/TagsInputItemDelete.vue.d.ts +18 -0
  245. package/dist/tags-input/TagsInputItemText.vue.d.ts +8 -0
  246. package/dist/tags-input/index.d.ts +5 -0
  247. package/dist/tags-input/index.js +130 -0
  248. package/dist/textarea/Textarea.vue.d.ts +19 -0
  249. package/dist/textarea/index.d.ts +1 -0
  250. package/dist/textarea/index.js +43 -0
  251. package/dist/tooltip/Tooltip.vue.d.ts +18 -0
  252. package/dist/tooltip/TooltipContent.vue.d.ts +26 -0
  253. package/dist/tooltip/TooltipProvider.vue.d.ts +14 -0
  254. package/dist/tooltip/TooltipRoot.vue.d.ts +18 -0
  255. package/dist/tooltip/TooltipTrigger.vue.d.ts +14 -0
  256. package/dist/tooltip/index.d.ts +4 -0
  257. package/dist/tooltip/index.js +2 -0
  258. package/package.json +89 -5
  259. package/src/alert/Alert.vue +17 -0
  260. package/src/alert/AlertDescription.vue +14 -0
  261. package/src/alert/AlertTitle.vue +14 -0
  262. package/src/alert/index.ts +29 -0
  263. package/src/alert-dialog/AlertDialog.vue +15 -0
  264. package/src/alert-dialog/AlertDialogAction.vue +18 -0
  265. package/src/alert-dialog/AlertDialogCancel.vue +18 -0
  266. package/src/alert-dialog/AlertDialogContent.vue +33 -0
  267. package/src/alert-dialog/AlertDialogDescription.vue +17 -0
  268. package/src/alert-dialog/AlertDialogFooter.vue +14 -0
  269. package/src/alert-dialog/AlertDialogHeader.vue +14 -0
  270. package/src/alert-dialog/AlertDialogTitle.vue +17 -0
  271. package/src/alert-dialog/AlertDialogTrigger.vue +12 -0
  272. package/src/alert-dialog/index.ts +9 -0
  273. package/src/avatar/Avatar.vue +76 -0
  274. package/src/avatar/AvatarFallback.vue +18 -0
  275. package/src/avatar/AvatarImage.vue +12 -0
  276. package/src/avatar/index.ts +30 -0
  277. package/src/avatar-colors.ts +24 -0
  278. package/src/badge/Badge.vue +44 -0
  279. package/src/badge/index.ts +33 -0
  280. package/src/breadcrumb/Breadcrumb.vue +13 -0
  281. package/src/breadcrumb/BreadcrumbEllipsis.vue +18 -0
  282. package/src/breadcrumb/BreadcrumbItem.vue +14 -0
  283. package/src/breadcrumb/BreadcrumbLink.vue +16 -0
  284. package/src/breadcrumb/BreadcrumbList.vue +14 -0
  285. package/src/breadcrumb/BreadcrumbPage.vue +14 -0
  286. package/src/breadcrumb/BreadcrumbSeparator.vue +17 -0
  287. package/src/breadcrumb/index.ts +7 -0
  288. package/src/button/Button.vue +64 -0
  289. package/src/button/index.ts +40 -0
  290. package/src/button-group/ButtonGroup.vue +22 -0
  291. package/src/button-group/ButtonGroupSeparator.vue +21 -0
  292. package/src/button-group/ButtonGroupText.vue +34 -0
  293. package/src/button-group/index.ts +23 -0
  294. package/src/calendar/Calendar.vue +57 -0
  295. package/src/calendar/CalendarCell.vue +27 -0
  296. package/src/calendar/CalendarCellTrigger.vue +38 -0
  297. package/src/calendar/CalendarGrid.vue +19 -0
  298. package/src/calendar/CalendarGridBody.vue +12 -0
  299. package/src/calendar/CalendarGridHead.vue +12 -0
  300. package/src/calendar/CalendarGridRow.vue +19 -0
  301. package/src/calendar/CalendarHeadCell.vue +19 -0
  302. package/src/calendar/CalendarHeader.vue +19 -0
  303. package/src/calendar/CalendarHeading.vue +25 -0
  304. package/src/calendar/CalendarNextButton.vue +26 -0
  305. package/src/calendar/CalendarPrevButton.vue +26 -0
  306. package/src/calendar/index.ts +12 -0
  307. package/src/card/Card.vue +14 -0
  308. package/src/card/CardContent.vue +14 -0
  309. package/src/card/CardDescription.vue +14 -0
  310. package/src/card/CardFooter.vue +14 -0
  311. package/src/card/CardHeader.vue +14 -0
  312. package/src/card/CardTitle.vue +14 -0
  313. package/src/card/index.ts +6 -0
  314. package/src/chart/ChartCrosshair.vue +47 -0
  315. package/src/chart/ChartLegend.vue +63 -0
  316. package/src/chart/ChartSingleTooltip.vue +61 -0
  317. package/src/chart/ChartTooltip.vue +35 -0
  318. package/src/chart/index.ts +18 -0
  319. package/src/chart/interface.ts +64 -0
  320. package/src/checkbox/Checkbox.vue +33 -0
  321. package/src/checkbox/index.ts +1 -0
  322. package/src/combobox/Combobox.vue +15 -0
  323. package/src/combobox/ComboboxAnchor.vue +19 -0
  324. package/src/combobox/ComboboxEmpty.vue +17 -0
  325. package/src/combobox/ComboboxGroup.vue +33 -0
  326. package/src/combobox/ComboboxInput.vue +33 -0
  327. package/src/combobox/ComboboxItem.vue +28 -0
  328. package/src/combobox/ComboboxList.vue +36 -0
  329. package/src/combobox/ComboboxSeparator.vue +17 -0
  330. package/src/combobox/ComboboxTrigger.vue +23 -0
  331. package/src/combobox/index.ts +11 -0
  332. package/src/command/Command.vue +85 -0
  333. package/src/command/CommandDialog.vue +23 -0
  334. package/src/command/CommandEmpty.vue +22 -0
  335. package/src/command/CommandGroup.vue +50 -0
  336. package/src/command/CommandInput.vue +42 -0
  337. package/src/command/CommandItem.vue +79 -0
  338. package/src/command/CommandList.vue +25 -0
  339. package/src/command/CommandSeparator.vue +17 -0
  340. package/src/command/CommandShortcut.vue +14 -0
  341. package/src/command/index.ts +25 -0
  342. package/src/dialog/Dialog.vue +15 -0
  343. package/src/dialog/DialogClose.vue +12 -0
  344. package/src/dialog/DialogContent.vue +41 -0
  345. package/src/dialog/DialogDescription.vue +19 -0
  346. package/src/dialog/DialogFooter.vue +12 -0
  347. package/src/dialog/DialogHeader.vue +14 -0
  348. package/src/dialog/DialogScrollContent.vue +49 -0
  349. package/src/dialog/DialogTitle.vue +19 -0
  350. package/src/dialog/DialogTrigger.vue +12 -0
  351. package/src/dialog/index.ts +9 -0
  352. package/src/drawer/Drawer.vue +20 -0
  353. package/src/drawer/DrawerContent.vue +31 -0
  354. package/src/drawer/DrawerDescription.vue +17 -0
  355. package/src/drawer/DrawerFooter.vue +14 -0
  356. package/src/drawer/DrawerHeader.vue +14 -0
  357. package/src/drawer/DrawerOverlay.vue +15 -0
  358. package/src/drawer/DrawerTitle.vue +17 -0
  359. package/src/drawer/index.ts +8 -0
  360. package/src/dropdown-menu/DropdownMenu.vue +26 -0
  361. package/src/dropdown-menu/DropdownMenuContent.vue +28 -0
  362. package/src/dropdown-menu/DropdownMenuItem.vue +23 -0
  363. package/src/dropdown-menu/DropdownMenuLabel.vue +13 -0
  364. package/src/dropdown-menu/DropdownMenuSeparator.vue +11 -0
  365. package/src/dropdown-menu/DropdownMenuTrigger.vue +11 -0
  366. package/src/dropdown-menu/index.ts +6 -0
  367. package/src/index.ts +2 -0
  368. package/src/input/Input.vue +43 -0
  369. package/src/input/index.ts +1 -0
  370. package/src/label/Label.vue +16 -0
  371. package/src/label/index.ts +1 -0
  372. package/src/lib/utils.ts +6 -0
  373. package/src/popover/Popover.vue +15 -0
  374. package/src/popover/PopoverContent.vue +39 -0
  375. package/src/popover/PopoverTrigger.vue +11 -0
  376. package/src/popover/index.ts +3 -0
  377. package/src/range-calendar/RangeCalendar.vue +57 -0
  378. package/src/range-calendar/RangeCalendarCell.vue +27 -0
  379. package/src/range-calendar/RangeCalendarCellTrigger.vue +40 -0
  380. package/src/range-calendar/RangeCalendarGrid.vue +19 -0
  381. package/src/range-calendar/RangeCalendarGridBody.vue +12 -0
  382. package/src/range-calendar/RangeCalendarGridHead.vue +12 -0
  383. package/src/range-calendar/RangeCalendarGridRow.vue +19 -0
  384. package/src/range-calendar/RangeCalendarHeadCell.vue +19 -0
  385. package/src/range-calendar/RangeCalendarHeader.vue +19 -0
  386. package/src/range-calendar/RangeCalendarHeading.vue +25 -0
  387. package/src/range-calendar/RangeCalendarNextButton.vue +26 -0
  388. package/src/range-calendar/RangeCalendarPrevButton.vue +26 -0
  389. package/src/range-calendar/index.ts +12 -0
  390. package/src/scroll-area/ScrollArea.vue +22 -0
  391. package/src/scroll-area/ScrollBar.vue +29 -0
  392. package/src/scroll-area/index.ts +2 -0
  393. package/src/select/Select.vue +15 -0
  394. package/src/select/SelectContent.vue +43 -0
  395. package/src/select/SelectGroup.vue +17 -0
  396. package/src/select/SelectItem.vue +36 -0
  397. package/src/select/SelectItemText.vue +12 -0
  398. package/src/select/SelectLabel.vue +14 -0
  399. package/src/select/SelectScrollDownButton.vue +22 -0
  400. package/src/select/SelectScrollUpButton.vue +22 -0
  401. package/src/select/SelectSeparator.vue +15 -0
  402. package/src/select/SelectTrigger.vue +31 -0
  403. package/src/select/SelectValue.vue +12 -0
  404. package/src/select/index.ts +11 -0
  405. package/src/separator/Separator.vue +21 -0
  406. package/src/separator/index.ts +1 -0
  407. package/src/sheet/Sheet.vue +15 -0
  408. package/src/sheet/SheetClose.vue +11 -0
  409. package/src/sheet/SheetContent.vue +54 -0
  410. package/src/sheet/SheetDescription.vue +13 -0
  411. package/src/sheet/SheetHeader.vue +14 -0
  412. package/src/sheet/SheetTitle.vue +13 -0
  413. package/src/sheet/SheetTrigger.vue +11 -0
  414. package/src/sheet/index.ts +7 -0
  415. package/src/sidebar/Sidebar.vue +101 -0
  416. package/src/sidebar/SidebarContent.vue +21 -0
  417. package/src/sidebar/SidebarFooter.vue +16 -0
  418. package/src/sidebar/SidebarGroup.vue +16 -0
  419. package/src/sidebar/SidebarGroupAction.vue +31 -0
  420. package/src/sidebar/SidebarGroupContent.vue +16 -0
  421. package/src/sidebar/SidebarGroupLabel.vue +31 -0
  422. package/src/sidebar/SidebarHeader.vue +16 -0
  423. package/src/sidebar/SidebarInput.vue +20 -0
  424. package/src/sidebar/SidebarInset.vue +25 -0
  425. package/src/sidebar/SidebarMenu.vue +16 -0
  426. package/src/sidebar/SidebarMenuAction.vue +37 -0
  427. package/src/sidebar/SidebarMenuBadge.vue +29 -0
  428. package/src/sidebar/SidebarMenuButton.vue +64 -0
  429. package/src/sidebar/SidebarMenuItem.vue +16 -0
  430. package/src/sidebar/SidebarMenuSub.vue +25 -0
  431. package/src/sidebar/SidebarMenuSubButton.vue +39 -0
  432. package/src/sidebar/SidebarMenuSubItem.vue +16 -0
  433. package/src/sidebar/SidebarProvider.vue +74 -0
  434. package/src/sidebar/SidebarRail.vue +34 -0
  435. package/src/sidebar/SidebarSeparator.vue +15 -0
  436. package/src/sidebar/SidebarTrigger.vue +28 -0
  437. package/src/sidebar/index.ts +70 -0
  438. package/src/sonner/Sonner.vue +54 -0
  439. package/src/sonner/index.ts +1 -0
  440. package/src/stepper/Stepper.vue +58 -0
  441. package/src/stepper/index.ts +1 -0
  442. package/src/switch/Switch.vue +41 -0
  443. package/src/switch/index.ts +1 -0
  444. package/src/table/Table.vue +16 -0
  445. package/src/table/TableBody.vue +14 -0
  446. package/src/table/TableCell.vue +14 -0
  447. package/src/table/TableHead.vue +14 -0
  448. package/src/table/TableHeader.vue +14 -0
  449. package/src/table/TableRow.vue +14 -0
  450. package/src/table/index.ts +6 -0
  451. package/src/tabs/Tabs.vue +15 -0
  452. package/src/tabs/TabsContent.vue +16 -0
  453. package/src/tabs/TabsList.vue +16 -0
  454. package/src/tabs/TabsTrigger.vue +21 -0
  455. package/src/tabs/index.ts +4 -0
  456. package/src/tags-input/TagsInput.vue +23 -0
  457. package/src/tags-input/TagsInputInput.vue +17 -0
  458. package/src/tags-input/TagsInputItem.vue +27 -0
  459. package/src/tags-input/TagsInputItemDelete.vue +22 -0
  460. package/src/tags-input/TagsInputItemText.vue +17 -0
  461. package/src/tags-input/index.ts +5 -0
  462. package/src/textarea/Textarea.vue +41 -0
  463. package/src/textarea/index.ts +1 -0
  464. package/src/tooltip/Tooltip.vue +15 -0
  465. package/src/tooltip/TooltipContent.vue +37 -0
  466. package/src/tooltip/TooltipProvider.vue +12 -0
  467. package/src/tooltip/TooltipRoot.vue +14 -0
  468. package/src/tooltip/TooltipTrigger.vue +12 -0
  469. package/src/tooltip/index.ts +4 -0
  470. package/styles/kit.css +100 -0
  471. package/styles/theme.css +950 -0
  472. package/styles/typography.css +430 -0
@@ -0,0 +1,76 @@
1
+ <script setup lang="ts">
2
+ import type { AvatarVariants } from ".";
3
+ import { avatarVariant } from ".";
4
+ import AvatarFallback from "./AvatarFallback.vue";
5
+ import AvatarImage from "./AvatarImage.vue";
6
+ import { type HTMLAttributes, computed } from "vue";
7
+ import { AvatarRoot } from "reka-ui";
8
+ import { getAvatarInitialsColor } from "../avatar-colors";
9
+ import { cn } from "../lib/utils";
10
+
11
+ export interface AvatarProps {
12
+ class?: HTMLAttributes["class"];
13
+ size?: AvatarVariants["size"];
14
+ shape?: AvatarVariants["shape"];
15
+ src?: string;
16
+ alt?: string;
17
+ initials?: string;
18
+ status?: "online" | "offline" | "busy" | "away";
19
+ }
20
+
21
+ const props = withDefaults(defineProps<AvatarProps>(), {
22
+ size: "md",
23
+ shape: "circle",
24
+ });
25
+
26
+ const colorScheme = computed(() => {
27
+ return getAvatarInitialsColor(props.alt || props.initials || "User");
28
+ });
29
+
30
+ const statusSizeClass = computed(() => {
31
+ switch (props.size) {
32
+ case "xs":
33
+ return "size-1.5 ring-1";
34
+ case "sm":
35
+ return "size-2 ring-1.5";
36
+ case "lg":
37
+ return "size-3 ring-2";
38
+ case "xl":
39
+ return "size-3.5 ring-2";
40
+ case "2xl":
41
+ return "size-4 ring-2";
42
+ case "md":
43
+ case "base":
44
+ default:
45
+ return "size-2.5 ring-2";
46
+ }
47
+ });
48
+
49
+ const statusColorClass = computed(() => {
50
+ switch (props.status) {
51
+ case "online":
52
+ return "bg-utility-success-500";
53
+ case "busy":
54
+ return "bg-utility-red-500";
55
+ case "away":
56
+ return "bg-utility-warning-500";
57
+ case "offline":
58
+ default:
59
+ return "bg-utility-gray-400";
60
+ }
61
+ });
62
+ </script>
63
+
64
+ <template>
65
+ <div class="relative inline-flex shrink-0">
66
+ <AvatarRoot :class="cn(avatarVariant({ size, shape }), props.class)">
67
+ <slot>
68
+ <AvatarImage v-if="src" :src="src" :alt="alt || initials" />
69
+ <AvatarFallback :class="cn(colorScheme.bg, colorScheme.text, 'font-semibold')">
70
+ {{ initials || (alt ? alt.slice(0, 2).toUpperCase() : "U") }}
71
+ </AvatarFallback>
72
+ </slot>
73
+ </AvatarRoot>
74
+ <span v-if="status" :class="cn('bottom-0 right-0 dark:ring-gray-950 absolute rounded-full ring-2 ring-white', statusSizeClass, statusColorClass)" />
75
+ </div>
76
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue";
3
+ import type { AvatarFallbackProps } from "reka-ui";
4
+ import { AvatarFallback } from "reka-ui";
5
+ import { cn } from "../lib/utils";
6
+
7
+ interface Props extends AvatarFallbackProps {
8
+ class?: HTMLAttributes["class"];
9
+ }
10
+
11
+ const props = defineProps<Props>();
12
+ </script>
13
+
14
+ <template>
15
+ <AvatarFallback v-bind="props" :class="cn('font-semibold flex size-full items-center justify-center text-secondary select-none', props.class)">
16
+ <slot />
17
+ </AvatarFallback>
18
+ </template>
@@ -0,0 +1,12 @@
1
+ <script setup lang="ts">
2
+ import type { AvatarImageProps } from "reka-ui";
3
+ import { AvatarImage } from "reka-ui";
4
+
5
+ const props = defineProps<AvatarImageProps>();
6
+ </script>
7
+
8
+ <template>
9
+ <AvatarImage v-bind="props" class="h-full w-full object-cover">
10
+ <slot />
11
+ </AvatarImage>
12
+ </template>
@@ -0,0 +1,30 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import { cva } from "class-variance-authority";
3
+
4
+ export { default as Avatar } from "./Avatar.vue";
5
+ export { default as AvatarFallback } from "./AvatarFallback.vue";
6
+ export { default as AvatarImage } from "./AvatarImage.vue";
7
+
8
+ export const avatarVariant = cva("font-medium relative inline-flex shrink-0 items-center justify-center overflow-hidden bg-secondary select-none", {
9
+ variants: {
10
+ size: {
11
+ xs: "size-6 text-[10px]",
12
+ sm: "size-8 text-xs",
13
+ md: "size-10 text-sm",
14
+ base: "size-10 text-sm",
15
+ lg: "size-12 text-base",
16
+ xl: "size-14 text-lg",
17
+ "2xl": "size-16 text-xl",
18
+ },
19
+ shape: {
20
+ circle: "rounded-full",
21
+ square: "rounded-xl",
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ size: "md",
26
+ shape: "circle",
27
+ },
28
+ });
29
+
30
+ export type AvatarVariants = VariantProps<typeof avatarVariant>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Accessible background/text pairs for identity avatars that fall back to initials.
3
+ * Reuses the same `utility-*` color tokens `Badge` uses (already carry correct dark-mode
4
+ * swaps), excluding gray/brand/error/warning/success since those carry semantic meaning
5
+ * elsewhere in the system.
6
+ */
7
+ export const AVATAR_INITIALS_COLORS = [
8
+ { bg: "bg-utility-slate-50", text: "text-utility-slate-700" },
9
+ { bg: "bg-utility-sky-50", text: "text-utility-sky-700" },
10
+ { bg: "bg-utility-blue-50", text: "text-utility-blue-700" },
11
+ { bg: "bg-utility-indigo-50", text: "text-utility-indigo-700" },
12
+ { bg: "bg-utility-purple-50", text: "text-utility-purple-700" },
13
+ { bg: "bg-utility-pink-50", text: "text-utility-pink-700" },
14
+ { bg: "bg-utility-orange-50", text: "text-utility-orange-700" },
15
+ ] as const;
16
+
17
+ /** Deterministic pick so the same identity always renders the same color, no flicker on re-render. */
18
+ export const getAvatarInitialsColor = (seed: string) => {
19
+ let hash = 0;
20
+ for (let i = 0; i < seed.length; i++) {
21
+ hash = (hash + seed.charCodeAt(i)) % AVATAR_INITIALS_COLORS.length;
22
+ }
23
+ return AVATAR_INITIALS_COLORS[hash];
24
+ };
@@ -0,0 +1,44 @@
1
+ <script setup lang="ts">
2
+ import type { BadgeVariants } from ".";
3
+ import { badgeVariants } from ".";
4
+ import { type HTMLAttributes, computed } from "vue";
5
+ import { cn } from "../lib/utils";
6
+
7
+ const props = defineProps<{
8
+ variant?: BadgeVariants["variant"];
9
+ class?: HTMLAttributes["class"];
10
+ dot?: boolean;
11
+ }>();
12
+
13
+ const dotColorClass = computed(() => {
14
+ switch (props.variant) {
15
+ case "brand":
16
+ return "bg-utility-brand-500";
17
+ case "success":
18
+ return "bg-utility-green-500";
19
+ case "warning":
20
+ return "bg-utility-orange-500";
21
+ case "error":
22
+ case "destructive":
23
+ return "bg-utility-red-500";
24
+ case "indigo":
25
+ return "bg-utility-indigo-500";
26
+ case "purple":
27
+ return "bg-utility-purple-500";
28
+ case "pink":
29
+ return "bg-utility-pink-500";
30
+ case "gray":
31
+ case "secondary":
32
+ return "bg-utility-gray-500";
33
+ default:
34
+ return "bg-primary";
35
+ }
36
+ });
37
+ </script>
38
+
39
+ <template>
40
+ <div :class="cn(badgeVariants({ variant }), props.class)">
41
+ <span v-if="dot" :class="cn('size-1.5 shrink-0 rounded-full', dotColorClass)" />
42
+ <slot />
43
+ </div>
44
+ </template>
@@ -0,0 +1,33 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import { cva } from "class-variance-authority";
3
+
4
+ export { default as Badge } from "./Badge.vue";
5
+
6
+ export const badgeVariants = cva(
7
+ "gap-1.5 px-2.5 py-0.5 font-semibold focus:ring-ring inline-flex items-center rounded-full border text-xs transition-colors focus:ring-2 focus:ring-offset-2 focus:outline-none",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "text-primary-foreground border-transparent bg-primary hover:bg-primary/80",
12
+ secondary: "text-secondary-foreground border-transparent bg-secondary hover:bg-secondary/80",
13
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/80 border-transparent",
14
+ outline: "text-foreground border-border-secondary",
15
+ brand: "dark:bg-utility-brand-950 border-border-brand/30 bg-utility-brand-50 text-utility-brand-700 dark:text-utility-brand-300",
16
+ success:
17
+ "dark:bg-utility-green-950 dark:border-utility-green-800 border-utility-green-200 bg-utility-green-50 text-utility-green-700 dark:text-utility-green-300",
18
+ warning:
19
+ "dark:bg-utility-orange-950 dark:border-utility-orange-800 border-utility-orange-200 bg-utility-orange-50 text-utility-orange-700 dark:text-utility-orange-300",
20
+ error: "dark:bg-utility-red-950 dark:border-utility-red-800 border-utility-red-200 bg-utility-red-50 text-utility-red-700 dark:text-utility-red-300",
21
+ indigo: "dark:bg-utility-indigo-950 dark:border-utility-indigo-800 border-utility-indigo-200 bg-utility-indigo-50 text-utility-indigo-700 dark:text-utility-indigo-300",
22
+ purple: "dark:bg-utility-purple-950 dark:border-utility-purple-800 border-utility-purple-200 bg-utility-purple-50 text-utility-purple-700 dark:text-utility-purple-300",
23
+ pink: "dark:bg-utility-pink-950 dark:border-utility-pink-800 border-utility-pink-200 bg-utility-pink-50 text-utility-pink-700 dark:text-utility-pink-300",
24
+ gray: "border-border-secondary bg-secondary text-secondary hover:bg-secondary/80",
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ variant: "default",
29
+ },
30
+ },
31
+ );
32
+
33
+ export type BadgeVariants = VariantProps<typeof badgeVariants>;
@@ -0,0 +1,13 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+
4
+ const props = defineProps<{
5
+ class?: HTMLAttributes["class"];
6
+ }>();
7
+ </script>
8
+
9
+ <template>
10
+ <nav aria-label="breadcrumb" :class="props.class">
11
+ <slot />
12
+ </nav>
13
+ </template>
@@ -0,0 +1,18 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import { MoreHorizontal } from "lucide-vue-next";
4
+ import { cn } from "../lib/utils";
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes["class"];
8
+ }>();
9
+ </script>
10
+
11
+ <template>
12
+ <span role="presentation" aria-hidden="true" :class="cn('h-9 w-9 flex items-center justify-center', props.class)">
13
+ <slot>
14
+ <MoreHorizontal class="h-4 w-4" />
15
+ </slot>
16
+ <span class="sr-only">More</span>
17
+ </span>
18
+ </template>
@@ -0,0 +1,14 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import { cn } from "../lib/utils";
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <li :class="cn('gap-1.5 inline-flex items-center', props.class)">
12
+ <slot />
13
+ </li>
14
+ </template>
@@ -0,0 +1,16 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import type { PrimitiveProps } from "reka-ui";
4
+ import { Primitive } from "reka-ui";
5
+ import { cn } from "../lib/utils";
6
+
7
+ const props = withDefaults(defineProps<PrimitiveProps & { class?: HTMLAttributes["class"] }>(), {
8
+ as: "a",
9
+ });
10
+ </script>
11
+
12
+ <template>
13
+ <Primitive :as="as" :as-child="asChild" :class="cn('hover:text-foreground transition-colors', props.class)">
14
+ <slot />
15
+ </Primitive>
16
+ </template>
@@ -0,0 +1,14 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import { cn } from "../lib/utils";
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <ol :class="cn('gap-1.5 text-muted-foreground sm:gap-2.5 flex flex-wrap items-center text-sm break-words', props.class)">
12
+ <slot />
13
+ </ol>
14
+ </template>
@@ -0,0 +1,14 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import { cn } from "../lib/utils";
4
+
5
+ const props = defineProps<{
6
+ class?: HTMLAttributes["class"];
7
+ }>();
8
+ </script>
9
+
10
+ <template>
11
+ <span role="link" aria-disabled="true" aria-current="page" :class="cn('font-medium text-gray-900 dark:text-gray-100', props.class)">
12
+ <slot />
13
+ </span>
14
+ </template>
@@ -0,0 +1,17 @@
1
+ <script lang="ts" setup>
2
+ import type { HTMLAttributes } from "vue";
3
+ import { ChevronRight } from "lucide-vue-next";
4
+ import { cn } from "../lib/utils";
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes["class"];
8
+ }>();
9
+ </script>
10
+
11
+ <template>
12
+ <li role="presentation" aria-hidden="true" :class="cn('[&>svg]:size-3.5 text-gray-400 dark:text-gray-500', props.class)">
13
+ <slot>
14
+ <ChevronRight />
15
+ </slot>
16
+ </li>
17
+ </template>
@@ -0,0 +1,7 @@
1
+ export { default as Breadcrumb } from "./Breadcrumb.vue";
2
+ export { default as BreadcrumbEllipsis } from "./BreadcrumbEllipsis.vue";
3
+ export { default as BreadcrumbItem } from "./BreadcrumbItem.vue";
4
+ export { default as BreadcrumbLink } from "./BreadcrumbLink.vue";
5
+ export { default as BreadcrumbList } from "./BreadcrumbList.vue";
6
+ export { default as BreadcrumbPage } from "./BreadcrumbPage.vue";
7
+ export { default as BreadcrumbSeparator } from "./BreadcrumbSeparator.vue";
@@ -0,0 +1,64 @@
1
+ <script setup lang="ts">
2
+ import { type HTMLAttributes, computed } from "vue";
3
+ import { type VariantProps, cva } from "class-variance-authority";
4
+ import { cn } from "../lib/utils";
5
+
6
+ const buttonVariants = cva(
7
+ "font-semibold inline-flex cursor-pointer items-center justify-center rounded-lg text-sm whitespace-nowrap transition-colors select-none focus-visible:ring-2 focus-visible:ring-brand-500/20 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ primary: "bg-brand-solid text-white shadow-xs hover:bg-brand-solid_hover",
12
+ secondary: "border border-border-primary bg-primary text-secondary shadow-xs hover:bg-secondary hover:text-primary",
13
+ tertiary: "text-tertiary hover:bg-secondary hover:text-primary",
14
+ destructive: "bg-error-solid text-white shadow-xs hover:bg-error-solid_hover",
15
+ outline: "border border-border-primary text-secondary hover:bg-secondary hover:text-primary",
16
+ ghost: "text-secondary hover:bg-secondary hover:text-primary",
17
+ link: "p-0 h-auto text-brand-secondary underline-offset-4 hover:underline",
18
+ },
19
+ size: {
20
+ sm: "h-8 px-3 gap-1.5 text-xs",
21
+ md: "h-9 px-3.5 gap-2 text-sm",
22
+ lg: "h-10 px-4 gap-2 text-sm",
23
+ xl: "h-11 px-4.5 text-base gap-2.5",
24
+ "icon-sm": "size-8 p-0",
25
+ "icon-md": "size-9 p-0",
26
+ "icon-lg": "size-10 p-0",
27
+ },
28
+ },
29
+ defaultVariants: {
30
+ variant: "primary",
31
+ size: "md",
32
+ },
33
+ },
34
+ );
35
+
36
+ export type ButtonVariants = VariantProps<typeof buttonVariants>;
37
+
38
+ interface Props {
39
+ variant?: ButtonVariants["variant"];
40
+ size?: ButtonVariants["size"];
41
+ class?: HTMLAttributes["class"];
42
+ as?: string;
43
+ disabled?: boolean;
44
+ type?: "button" | "submit" | "reset";
45
+ }
46
+
47
+ const props = withDefaults(defineProps<Props>(), {
48
+ as: "button",
49
+ type: "button",
50
+ disabled: false,
51
+ });
52
+
53
+ const emit = defineEmits<{
54
+ (e: "click", event: MouseEvent): void;
55
+ }>();
56
+
57
+ const classes = computed(() => cn(buttonVariants({ variant: props.variant, size: props.size }), props.class));
58
+ </script>
59
+
60
+ <template>
61
+ <component :is="props.as" :type="props.as === 'button' ? props.type : undefined" :disabled="props.disabled" :class="classes" @click="emit('click', $event)">
62
+ <slot />
63
+ </component>
64
+ </template>
@@ -0,0 +1,40 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import { cva } from "class-variance-authority";
3
+
4
+ export { default as Button } from "./Button.vue";
5
+
6
+ export const buttonVariants = cva(
7
+ "gap-2 font-semibold [&_svg]:size-4 inline-flex cursor-pointer items-center justify-center rounded-lg text-sm whitespace-nowrap transition-all select-none focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "border border-transparent bg-brand-600 text-white shadow-xs hover:bg-brand-700 active:scale-[0.98]",
12
+ primary: "border border-transparent bg-brand-600 text-white shadow-xs hover:bg-brand-700 active:scale-[0.98]",
13
+ secondary: "border border-border-secondary bg-primary text-secondary shadow-xs hover:bg-secondary active:scale-[0.98]",
14
+ outline: "border border-border-secondary bg-transparent text-secondary shadow-xs hover:bg-secondary hover:text-primary active:scale-[0.98]",
15
+ tertiary: "bg-transparent text-secondary hover:bg-secondary/60 hover:text-primary",
16
+ ghost: "bg-transparent text-secondary hover:bg-secondary/60 hover:text-primary",
17
+ destructive: "bg-red-600 hover:bg-red-700 border border-transparent text-white shadow-xs active:scale-[0.98]",
18
+ destructiveSecondary:
19
+ "bg-red-50 text-red-700 border-red-200 hover:bg-red-100 dark:bg-red-950 dark:text-red-300 dark:border-red-900 border shadow-xs active:scale-[0.98]",
20
+ link: "p-0 h-auto text-brand-600 underline-offset-4 hover:text-brand-700 hover:underline",
21
+ },
22
+ size: {
23
+ default: "h-9 px-4 py-2",
24
+ sm: "h-8 px-3 rounded-md text-xs",
25
+ md: "h-9 px-4 rounded-lg text-sm",
26
+ lg: "h-10 px-5 rounded-lg text-sm",
27
+ xl: "h-11 px-6 text-base rounded-lg",
28
+ icon: "size-9",
29
+ "icon-sm": "size-8",
30
+ "icon-lg": "size-10",
31
+ },
32
+ },
33
+ defaultVariants: {
34
+ variant: "primary",
35
+ size: "default",
36
+ },
37
+ },
38
+ );
39
+
40
+ export type ButtonVariants = VariantProps<typeof buttonVariants>;
@@ -0,0 +1,22 @@
1
+ <script setup lang="ts">
2
+ import type { ButtonGroupVariants } from ".";
3
+ import { buttonGroupVariants } from ".";
4
+ import type { HTMLAttributes } from "vue";
5
+ import { cn } from "../lib/utils";
6
+
7
+ const props = defineProps<{
8
+ class?: HTMLAttributes["class"];
9
+ orientation?: ButtonGroupVariants["orientation"];
10
+ }>();
11
+ </script>
12
+
13
+ <template>
14
+ <div
15
+ role="group"
16
+ data-slot="button-group"
17
+ :data-orientation="props.orientation"
18
+ :class="cn(buttonGroupVariants({ orientation: props.orientation }), props.class)"
19
+ >
20
+ <slot />
21
+ </div>
22
+ </template>
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue";
3
+ import { reactiveOmit } from "@vueuse/core";
4
+ import type { SeparatorProps } from "reka-ui";
5
+ import { cn } from "../lib/utils";
6
+ import { Separator } from "../separator";
7
+
8
+ const props = withDefaults(defineProps<SeparatorProps & { class?: HTMLAttributes["class"] }>(), {
9
+ orientation: "vertical",
10
+ });
11
+ const delegatedProps = reactiveOmit(props, "class");
12
+ </script>
13
+
14
+ <template>
15
+ <Separator
16
+ data-slot="button-group-separator"
17
+ v-bind="delegatedProps"
18
+ :orientation="props.orientation"
19
+ :class="cn('bg-input !m-0 relative self-stretch data-[orientation=vertical]:h-auto', props.class)"
20
+ />
21
+ </template>
@@ -0,0 +1,34 @@
1
+ <script setup lang="ts">
2
+ import type { ButtonGroupVariants } from ".";
3
+ import type { HTMLAttributes } from "vue";
4
+ import type { PrimitiveProps } from "reka-ui";
5
+ import { Primitive } from "reka-ui";
6
+ import { cn } from "../lib/utils";
7
+
8
+ interface Props extends PrimitiveProps {
9
+ class?: HTMLAttributes["class"];
10
+ orientation?: ButtonGroupVariants["orientation"];
11
+ }
12
+
13
+ const props = withDefaults(defineProps<Props>(), {
14
+ as: "div",
15
+ });
16
+ </script>
17
+
18
+ <template>
19
+ <Primitive
20
+ role="group"
21
+ data-slot="button-group"
22
+ :data-orientation="props.orientation"
23
+ :as="as"
24
+ :as-child="asChild"
25
+ :class="
26
+ cn(
27
+ 'bg-muted gap-2 px-4 font-medium [&_svg:not([class*=\'size-\'])]:size-4 flex items-center rounded-md border text-sm shadow-xs [&_svg]:pointer-events-none',
28
+ props.class,
29
+ )
30
+ "
31
+ >
32
+ <slot />
33
+ </Primitive>
34
+ </template>
@@ -0,0 +1,23 @@
1
+ import type { VariantProps } from "class-variance-authority";
2
+ import { cva } from "class-variance-authority";
3
+
4
+ export { default as ButtonGroup } from "./ButtonGroup.vue";
5
+ export { default as ButtonGroupSeparator } from "./ButtonGroupSeparator.vue";
6
+ export { default as ButtonGroupText } from "./ButtonGroupText.vue";
7
+
8
+ export const buttonGroupVariants = cva(
9
+ "has-[>[data-slot=button-group]]:gap-2 flex w-fit items-stretch [&>*:focus-visible]:relative [&>*:focus-visible]:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
10
+ {
11
+ variants: {
12
+ orientation: {
13
+ horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
14
+ vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none",
15
+ },
16
+ },
17
+ defaultVariants: {
18
+ orientation: "horizontal",
19
+ },
20
+ },
21
+ );
22
+
23
+ export type ButtonGroupVariants = VariantProps<typeof buttonGroupVariants>;
@@ -0,0 +1,57 @@
1
+ <script lang="ts" setup>
2
+ import {
3
+ CalendarCell,
4
+ CalendarCellTrigger,
5
+ CalendarGrid,
6
+ CalendarGridBody,
7
+ CalendarGridHead,
8
+ CalendarGridRow,
9
+ CalendarHeadCell,
10
+ CalendarHeader,
11
+ CalendarHeading,
12
+ CalendarNextButton,
13
+ CalendarPrevButton,
14
+ } from ".";
15
+ import type { HTMLAttributes } from "vue";
16
+ import { reactiveOmit } from "@vueuse/core";
17
+ import type { CalendarRootEmits, CalendarRootProps } from "reka-ui";
18
+ import { CalendarRoot, useForwardPropsEmits } from "reka-ui";
19
+ import { cn } from "../lib/utils";
20
+
21
+ const props = defineProps<CalendarRootProps & { class?: HTMLAttributes["class"] }>();
22
+
23
+ const emits = defineEmits<CalendarRootEmits>();
24
+
25
+ const delegatedProps = reactiveOmit(props, "class");
26
+
27
+ const forwarded = useForwardPropsEmits(delegatedProps, emits);
28
+ </script>
29
+
30
+ <template>
31
+ <CalendarRoot v-slot="{ grid, weekDays }" :class="cn('p-3', props.class)" v-bind="forwarded">
32
+ <CalendarHeader>
33
+ <CalendarPrevButton />
34
+ <CalendarHeading />
35
+ <CalendarNextButton />
36
+ </CalendarHeader>
37
+
38
+ <div class="gap-y-4 mt-4 sm:flex-row sm:gap-x-4 sm:gap-y-0 flex flex-col">
39
+ <CalendarGrid v-for="month in grid" :key="month.value.toString()">
40
+ <CalendarGridHead>
41
+ <CalendarGridRow>
42
+ <CalendarHeadCell v-for="day in weekDays" :key="day">
43
+ {{ day }}
44
+ </CalendarHeadCell>
45
+ </CalendarGridRow>
46
+ </CalendarGridHead>
47
+ <CalendarGridBody>
48
+ <CalendarGridRow v-for="(weekDates, index) in month.rows" :key="`weekDate-${index}`" class="mt-2 w-full">
49
+ <CalendarCell v-for="weekDate in weekDates" :key="weekDate.toString()" :date="weekDate">
50
+ <CalendarCellTrigger :day="weekDate" :month="month.value" />
51
+ </CalendarCell>
52
+ </CalendarGridRow>
53
+ </CalendarGridBody>
54
+ </CalendarGrid>
55
+ </div>
56
+ </CalendarRoot>
57
+ </template>