@bl33dz/fa814698dcde12f86a37ac31dd3aedf9 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 (387) hide show
  1. package/dist/perisai-ui.es.js +6402 -0
  2. package/dist/perisai-ui.umd.js +1 -0
  3. package/dist/ui.css +1 -0
  4. package/fix_imports.sh +38 -0
  5. package/generate_index.cjs +52 -0
  6. package/package.json +46 -0
  7. package/package.json.bak +42 -0
  8. package/src/index.css +7704 -0
  9. package/src/index.ts +179 -0
  10. package/src/lib/utils.ts +6 -0
  11. package/src/shadcn/accordion/Accordion.vue +19 -0
  12. package/src/shadcn/accordion/AccordionContent.vue +23 -0
  13. package/src/shadcn/accordion/AccordionItem.vue +23 -0
  14. package/src/shadcn/accordion/AccordionTrigger.vue +38 -0
  15. package/src/shadcn/accordion/index.ts +4 -0
  16. package/src/shadcn/avatar/Avatar.vue +18 -0
  17. package/src/shadcn/avatar/AvatarFallback.vue +21 -0
  18. package/src/shadcn/avatar/AvatarImage.vue +16 -0
  19. package/src/shadcn/avatar/index.ts +3 -0
  20. package/src/shadcn/breadcrumb/Breadcrumb.vue +8 -0
  21. package/src/shadcn/breadcrumb/BreadcrumbEllipsis.vue +9 -0
  22. package/src/shadcn/breadcrumb/BreadcrumbItem.vue +8 -0
  23. package/src/shadcn/breadcrumb/BreadcrumbLink.vue +8 -0
  24. package/src/shadcn/breadcrumb/BreadcrumbList.vue +8 -0
  25. package/src/shadcn/breadcrumb/BreadcrumbPage.vue +8 -0
  26. package/src/shadcn/breadcrumb/BreadcrumbSeparator.vue +8 -0
  27. package/src/shadcn/breadcrumb/index.ts +7 -0
  28. package/src/shadcn/button/Button.vue +29 -0
  29. package/src/shadcn/button/index.ts +38 -0
  30. package/src/shadcn/calendar/Calendar.vue +64 -0
  31. package/src/shadcn/calendar/CalendarCell.vue +23 -0
  32. package/src/shadcn/calendar/CalendarCellTrigger.vue +39 -0
  33. package/src/shadcn/calendar/CalendarGrid.vue +23 -0
  34. package/src/shadcn/calendar/CalendarGridBody.vue +15 -0
  35. package/src/shadcn/calendar/CalendarGridHead.vue +16 -0
  36. package/src/shadcn/calendar/CalendarGridRow.vue +22 -0
  37. package/src/shadcn/calendar/CalendarHeadCell.vue +23 -0
  38. package/src/shadcn/calendar/CalendarHeader.vue +23 -0
  39. package/src/shadcn/calendar/CalendarHeading.vue +30 -0
  40. package/src/shadcn/calendar/CalendarNextButton.vue +32 -0
  41. package/src/shadcn/calendar/CalendarPrevButton.vue +32 -0
  42. package/src/shadcn/calendar/index.ts +12 -0
  43. package/src/shadcn/card/Card.vue +8 -0
  44. package/src/shadcn/card/CardContent.vue +8 -0
  45. package/src/shadcn/card/CardDescription.vue +8 -0
  46. package/src/shadcn/card/CardHeader.vue +8 -0
  47. package/src/shadcn/card/CardTitle.vue +8 -0
  48. package/src/shadcn/card/index.ts +5 -0
  49. package/src/shadcn/checkbox/Checkbox.vue +38 -0
  50. package/src/shadcn/checkbox/index.ts +1 -0
  51. package/src/shadcn/command/Command.vue +87 -0
  52. package/src/shadcn/command/CommandDialog.vue +31 -0
  53. package/src/shadcn/command/CommandEmpty.vue +27 -0
  54. package/src/shadcn/command/CommandGroup.vue +45 -0
  55. package/src/shadcn/command/CommandInput.vue +39 -0
  56. package/src/shadcn/command/CommandItem.vue +76 -0
  57. package/src/shadcn/command/CommandList.vue +25 -0
  58. package/src/shadcn/command/CommandSeparator.vue +21 -0
  59. package/src/shadcn/command/CommandShortcut.vue +17 -0
  60. package/src/shadcn/command/index.ts +25 -0
  61. package/src/shadcn/context-menu/ContextMenu.vue +18 -0
  62. package/src/shadcn/context-menu/ContextMenuCheckboxItem.vue +38 -0
  63. package/src/shadcn/context-menu/ContextMenuContent.vue +34 -0
  64. package/src/shadcn/context-menu/ContextMenuGroup.vue +15 -0
  65. package/src/shadcn/context-menu/ContextMenuItem.vue +39 -0
  66. package/src/shadcn/context-menu/ContextMenuLabel.vue +22 -0
  67. package/src/shadcn/context-menu/ContextMenuPortal.vue +15 -0
  68. package/src/shadcn/context-menu/ContextMenuRadioGroup.vue +22 -0
  69. package/src/shadcn/context-menu/ContextMenuRadioItem.vue +38 -0
  70. package/src/shadcn/context-menu/ContextMenuSeparator.vue +22 -0
  71. package/src/shadcn/context-menu/ContextMenuShortcut.vue +17 -0
  72. package/src/shadcn/context-menu/ContextMenuSub.vue +22 -0
  73. package/src/shadcn/context-menu/ContextMenuSubContent.vue +33 -0
  74. package/src/shadcn/context-menu/ContextMenuSubTrigger.vue +33 -0
  75. package/src/shadcn/context-menu/ContextMenuTrigger.vue +17 -0
  76. package/src/shadcn/context-menu/index.ts +15 -0
  77. package/src/shadcn/dialog/Dialog.vue +18 -0
  78. package/src/shadcn/dialog/DialogClose.vue +15 -0
  79. package/src/shadcn/dialog/DialogContent.vue +46 -0
  80. package/src/shadcn/dialog/DialogDescription.vue +23 -0
  81. package/src/shadcn/dialog/DialogFooter.vue +15 -0
  82. package/src/shadcn/dialog/DialogHeader.vue +17 -0
  83. package/src/shadcn/dialog/DialogOverlay.vue +21 -0
  84. package/src/shadcn/dialog/DialogScrollContent.vue +56 -0
  85. package/src/shadcn/dialog/DialogTitle.vue +23 -0
  86. package/src/shadcn/dialog/DialogTrigger.vue +15 -0
  87. package/src/shadcn/dialog/index.ts +10 -0
  88. package/src/shadcn/dropdown-menu/DropdownMenu.vue +18 -0
  89. package/src/shadcn/dropdown-menu/DropdownMenuCheckboxItem.vue +38 -0
  90. package/src/shadcn/dropdown-menu/DropdownMenuContent.vue +36 -0
  91. package/src/shadcn/dropdown-menu/DropdownMenuGroup.vue +15 -0
  92. package/src/shadcn/dropdown-menu/DropdownMenuItem.vue +31 -0
  93. package/src/shadcn/dropdown-menu/DropdownMenuLabel.vue +23 -0
  94. package/src/shadcn/dropdown-menu/DropdownMenuRadioGroup.vue +22 -0
  95. package/src/shadcn/dropdown-menu/DropdownMenuRadioItem.vue +39 -0
  96. package/src/shadcn/dropdown-menu/DropdownMenuSeparator.vue +24 -0
  97. package/src/shadcn/dropdown-menu/DropdownMenuShortcut.vue +17 -0
  98. package/src/shadcn/dropdown-menu/DropdownMenuSub.vue +19 -0
  99. package/src/shadcn/dropdown-menu/DropdownMenuSubContent.vue +28 -0
  100. package/src/shadcn/dropdown-menu/DropdownMenuSubTrigger.vue +31 -0
  101. package/src/shadcn/dropdown-menu/DropdownMenuTrigger.vue +17 -0
  102. package/src/shadcn/dropdown-menu/index.ts +16 -0
  103. package/src/shadcn/menubar/Menubar.vue +33 -0
  104. package/src/shadcn/menubar/MenubarCheckboxItem.vue +38 -0
  105. package/src/shadcn/menubar/MenubarContent.vue +42 -0
  106. package/src/shadcn/menubar/MenubarGroup.vue +15 -0
  107. package/src/shadcn/menubar/MenubarItem.vue +37 -0
  108. package/src/shadcn/menubar/MenubarLabel.vue +20 -0
  109. package/src/shadcn/menubar/MenubarMenu.vue +15 -0
  110. package/src/shadcn/menubar/MenubarPortal.vue +5 -0
  111. package/src/shadcn/menubar/MenubarRadioGroup.vue +22 -0
  112. package/src/shadcn/menubar/MenubarRadioItem.vue +38 -0
  113. package/src/shadcn/menubar/MenubarSeparator.vue +21 -0
  114. package/src/shadcn/menubar/MenubarShortcut.vue +17 -0
  115. package/src/shadcn/menubar/MenubarSub.vue +23 -0
  116. package/src/shadcn/menubar/MenubarSubContent.vue +36 -0
  117. package/src/shadcn/menubar/MenubarSubTrigger.vue +28 -0
  118. package/src/shadcn/menubar/MenubarTrigger.vue +28 -0
  119. package/src/shadcn/menubar/index.ts +15 -0
  120. package/src/shadcn/navigation-menu/NavigationMenu.vue +35 -0
  121. package/src/shadcn/navigation-menu/NavigationMenuContent.vue +31 -0
  122. package/src/shadcn/navigation-menu/NavigationMenuIndicator.vue +23 -0
  123. package/src/shadcn/navigation-menu/NavigationMenuItem.vue +21 -0
  124. package/src/shadcn/navigation-menu/NavigationMenuLink.vue +26 -0
  125. package/src/shadcn/navigation-menu/NavigationMenuList.vue +28 -0
  126. package/src/shadcn/navigation-menu/NavigationMenuTrigger.vue +24 -0
  127. package/src/shadcn/navigation-menu/NavigationMenuViewport.vue +31 -0
  128. package/src/shadcn/navigation-menu/index.ts +14 -0
  129. package/src/shadcn/pagination/Pagination.vue +151 -0
  130. package/src/shadcn/pagination/PaginationContent.vue +22 -0
  131. package/src/shadcn/pagination/PaginationEllipsis.vue +25 -0
  132. package/src/shadcn/pagination/PaginationFirst.vue +33 -0
  133. package/src/shadcn/pagination/PaginationItem.vue +31 -0
  134. package/src/shadcn/pagination/PaginationLast.vue +33 -0
  135. package/src/shadcn/pagination/PaginationLink.vue +13 -0
  136. package/src/shadcn/pagination/PaginationNext.vue +22 -0
  137. package/src/shadcn/pagination/PaginationPrevious.vue +33 -0
  138. package/src/shadcn/pagination/index.ts +9 -0
  139. package/src/shadcn/popover/Popover.vue +18 -0
  140. package/src/shadcn/popover/PopoverAnchor.vue +15 -0
  141. package/src/shadcn/popover/PopoverContent.vue +46 -0
  142. package/src/shadcn/popover/PopoverTrigger.vue +15 -0
  143. package/src/shadcn/popover/index.ts +4 -0
  144. package/src/shadcn/radio-group/RadioGroup.vue +24 -0
  145. package/src/shadcn/radio-group/RadioGroupItem.vue +39 -0
  146. package/src/shadcn/radio-group/index.ts +2 -0
  147. package/src/shadcn/range-calendar/RangeCalendar.vue +71 -0
  148. package/src/shadcn/range-calendar/RangeCalendarCell.vue +23 -0
  149. package/src/shadcn/range-calendar/RangeCalendarCellTrigger.vue +41 -0
  150. package/src/shadcn/range-calendar/RangeCalendarGrid.vue +23 -0
  151. package/src/shadcn/range-calendar/RangeCalendarGridBody.vue +15 -0
  152. package/src/shadcn/range-calendar/RangeCalendarGridHead.vue +15 -0
  153. package/src/shadcn/range-calendar/RangeCalendarGridRow.vue +22 -0
  154. package/src/shadcn/range-calendar/RangeCalendarHeadCell.vue +23 -0
  155. package/src/shadcn/range-calendar/RangeCalendarHeader.vue +23 -0
  156. package/src/shadcn/range-calendar/RangeCalendarHeading.vue +30 -0
  157. package/src/shadcn/range-calendar/RangeCalendarNextButton.vue +32 -0
  158. package/src/shadcn/range-calendar/RangeCalendarPrevButton.vue +32 -0
  159. package/src/shadcn/range-calendar/index.ts +12 -0
  160. package/src/shadcn/select/Select.vue +18 -0
  161. package/src/shadcn/select/SelectContent.vue +52 -0
  162. package/src/shadcn/select/SelectGroup.vue +15 -0
  163. package/src/shadcn/select/SelectItem.vue +43 -0
  164. package/src/shadcn/select/SelectItemText.vue +15 -0
  165. package/src/shadcn/select/SelectLabel.vue +17 -0
  166. package/src/shadcn/select/SelectScrollDownButton.vue +26 -0
  167. package/src/shadcn/select/SelectScrollUpButton.vue +26 -0
  168. package/src/shadcn/select/SelectSeparator.vue +19 -0
  169. package/src/shadcn/select/SelectTrigger.vue +33 -0
  170. package/src/shadcn/select/SelectValue.vue +15 -0
  171. package/src/shadcn/select/index.ts +11 -0
  172. package/src/shadcn/separator/Separator.vue +31 -0
  173. package/src/shadcn/separator/index.ts +1 -0
  174. package/src/shadcn/sidebar/MenuGroup.vue +28 -0
  175. package/src/shadcn/sidebar/MenuItemRenderer.vue +23 -0
  176. package/src/shadcn/sidebar/Sidebar.vue +14 -0
  177. package/src/shadcn/sidebar/SidebarDemoContent.vue +26 -0
  178. package/src/shadcn/sidebar/SidebarMenuGroupWithLabel.vue +29 -0
  179. package/src/shadcn/sidebar/SidebarMenuItemWithIcon.vue +103 -0
  180. package/src/shadcn/sidebar/SidebarMenuSub.vue +10 -0
  181. package/src/shadcn/sidebar/SidebarMenuSubItemStyled.vue +38 -0
  182. package/src/shadcn/sidebar/SidebarTrigger.vue +8 -0
  183. package/src/shadcn/sidebar/index.ts +5 -0
  184. package/src/shadcn/slider/Slider.vue +43 -0
  185. package/src/shadcn/slider/index.ts +1 -0
  186. package/src/shadcn/sonner/Sonner.vue +19 -0
  187. package/src/shadcn/sonner/index.ts +1 -0
  188. package/src/shadcn/switch/Switch.vue +38 -0
  189. package/src/shadcn/switch/index.ts +1 -0
  190. package/src/shadcn/tabs/CardTabsContent.vue +16 -0
  191. package/src/shadcn/tabs/CornerCutTabsTrigger.vue +102 -0
  192. package/src/shadcn/tabs/GridTabsList.vue +30 -0
  193. package/src/shadcn/tabs/ScrollableTabsList.vue +8 -0
  194. package/src/shadcn/tabs/Tabs.vue +23 -0
  195. package/src/shadcn/tabs/TabsContent.vue +21 -0
  196. package/src/shadcn/tabs/TabsList.vue +24 -0
  197. package/src/shadcn/tabs/TabsTrigger.vue +30 -0
  198. package/src/shadcn/tabs/VerticalTabsList.vue +28 -0
  199. package/src/shadcn/tabs/VerticalTabsTrigger.vue +16 -0
  200. package/src/shadcn/tabs/index.ts +10 -0
  201. package/src/shadcn/toggle/Toggle.vue +35 -0
  202. package/src/shadcn/toggle/index.ts +28 -0
  203. package/src/shadcn/tooltip/Tooltip.vue +18 -0
  204. package/src/shadcn/tooltip/TooltipContent.vue +34 -0
  205. package/src/shadcn/tooltip/TooltipProvider.vue +14 -0
  206. package/src/shadcn/tooltip/TooltipTrigger.vue +15 -0
  207. package/src/shadcn/tooltip/index.ts +4 -0
  208. package/src/ui/InputOTP.vue +69 -0
  209. package/src/ui/InputOTPContext.ts +10 -0
  210. package/src/ui/InputOTPGroup.vue +7 -0
  211. package/src/ui/InputOTPSeparator.vue +8 -0
  212. package/src/ui/InputOTPSlot.vue +61 -0
  213. package/src/ui/PopoverContent.vue +27 -0
  214. package/src/ui/PopoverTrigger.vue +9 -0
  215. package/src/ui/SelectContent.vue +24 -0
  216. package/src/ui/SelectGroup.vue +22 -0
  217. package/src/ui/SelectItem.vue +25 -0
  218. package/src/ui/SelectLabel.vue +27 -0
  219. package/src/ui/SelectSeparator.vue +23 -0
  220. package/src/ui/SelectTrigger.vue +22 -0
  221. package/src/ui/SelectValue.vue +9 -0
  222. package/src/ui/SheetContent.vue +34 -0
  223. package/src/ui/SheetDescription.vue +9 -0
  224. package/src/ui/SheetHeader.vue +11 -0
  225. package/src/ui/SheetTitle.vue +9 -0
  226. package/src/ui/accordion-content.vue +21 -0
  227. package/src/ui/accordion-item.vue +18 -0
  228. package/src/ui/accordion-trigger.vue +14 -0
  229. package/src/ui/accordion.vue +9 -0
  230. package/src/ui/alert-actions.vue +13 -0
  231. package/src/ui/alert-description.vue +13 -0
  232. package/src/ui/alert-title.vue +13 -0
  233. package/src/ui/alert.vue +63 -0
  234. package/src/ui/avatar-fallback.vue +38 -0
  235. package/src/ui/avatar-group.vue +32 -0
  236. package/src/ui/avatar-image.vue +19 -0
  237. package/src/ui/avatar.vue +32 -0
  238. package/src/ui/badge.vue +90 -0
  239. package/src/ui/breadcrumb-item.vue +11 -0
  240. package/src/ui/breadcrumb-separator.vue +9 -0
  241. package/src/ui/breadcrumb.vue +11 -0
  242. package/src/ui/button.vue +76 -0
  243. package/src/ui/card-content.vue +16 -0
  244. package/src/ui/card-description.vue +16 -0
  245. package/src/ui/card-footer.vue +13 -0
  246. package/src/ui/card-header.vue +19 -0
  247. package/src/ui/card-title.vue +16 -0
  248. package/src/ui/card.vue +73 -0
  249. package/src/ui/category-breakdown-metric.vue +205 -0
  250. package/src/ui/checkbox.vue +84 -0
  251. package/src/ui/cn.ts +6 -0
  252. package/src/ui/dialog-body.vue +13 -0
  253. package/src/ui/dialog-close.vue +9 -0
  254. package/src/ui/dialog-content.vue +36 -0
  255. package/src/ui/dialog-description.vue +13 -0
  256. package/src/ui/dialog-footer.vue +13 -0
  257. package/src/ui/dialog-header.vue +13 -0
  258. package/src/ui/dialog-overlay.vue +14 -0
  259. package/src/ui/dialog-portal.vue +9 -0
  260. package/src/ui/dialog-title.vue +13 -0
  261. package/src/ui/dialog-trigger.vue +9 -0
  262. package/src/ui/dialog.vue +9 -0
  263. package/src/ui/dismissible-badges-demo.vue +94 -0
  264. package/src/ui/drawer-content.vue +53 -0
  265. package/src/ui/drawer-description.vue +23 -0
  266. package/src/ui/drawer-footer.vue +22 -0
  267. package/src/ui/drawer-header.vue +22 -0
  268. package/src/ui/drawer-title.vue +23 -0
  269. package/src/ui/drawer-trigger.vue +23 -0
  270. package/src/ui/drawer.vue +34 -0
  271. package/src/ui/dropdown-menu-checkbox-item.vue +27 -0
  272. package/src/ui/dropdown-menu-content.vue +23 -0
  273. package/src/ui/dropdown-menu-group.vue +7 -0
  274. package/src/ui/dropdown-menu-item.vue +19 -0
  275. package/src/ui/dropdown-menu-label.vue +17 -0
  276. package/src/ui/dropdown-menu-portal.vue +8 -0
  277. package/src/ui/dropdown-menu-radio-group.vue +14 -0
  278. package/src/ui/dropdown-menu-radio-item.vue +30 -0
  279. package/src/ui/dropdown-menu-separator.vue +13 -0
  280. package/src/ui/dropdown-menu-shortcut.vue +15 -0
  281. package/src/ui/dropdown-menu-sub-content.vue +8 -0
  282. package/src/ui/dropdown-menu-sub-trigger.vue +8 -0
  283. package/src/ui/dropdown-menu-sub.vue +8 -0
  284. package/src/ui/dropdown-menu-trigger.vue +8 -0
  285. package/src/ui/dropdown-menu.vue +9 -0
  286. package/src/ui/grouped-avatar.vue +19 -0
  287. package/src/ui/icons/Accessibility.vue +7 -0
  288. package/src/ui/icons/AlignLeft.vue +6 -0
  289. package/src/ui/icons/ArrowDown.vue +7 -0
  290. package/src/ui/icons/ArrowUp.vue +7 -0
  291. package/src/ui/icons/ArrowUpDown.vue +8 -0
  292. package/src/ui/icons/BookOpen.vue +6 -0
  293. package/src/ui/icons/Calendar.vue +9 -0
  294. package/src/ui/icons/Check.vue +6 -0
  295. package/src/ui/icons/ChevronRight.vue +6 -0
  296. package/src/ui/icons/Circle.vue +6 -0
  297. package/src/ui/icons/Copy.vue +7 -0
  298. package/src/ui/icons/Dot.vue +6 -0
  299. package/src/ui/icons/Edit.vue +6 -0
  300. package/src/ui/icons/FileText.vue +9 -0
  301. package/src/ui/icons/Folder.vue +6 -0
  302. package/src/ui/icons/FolderOpen.vue +7 -0
  303. package/src/ui/icons/Hash.vue +6 -0
  304. package/src/ui/icons/Home.vue +6 -0
  305. package/src/ui/icons/Minus.vue +6 -0
  306. package/src/ui/icons/MoreHorizontal.vue +8 -0
  307. package/src/ui/icons/Settings.vue +7 -0
  308. package/src/ui/icons/Slash.vue +6 -0
  309. package/src/ui/icons/Trash2.vue +6 -0
  310. package/src/ui/icons/Type.vue +6 -0
  311. package/src/ui/icons/User.vue +7 -0
  312. package/src/ui/input-otp.vue +52 -0
  313. package/src/ui/input.vue +98 -0
  314. package/src/ui/label.vue +19 -0
  315. package/src/ui/pagination.vue +41 -0
  316. package/src/ui/popover.vue +9 -0
  317. package/src/ui/progress.vue +67 -0
  318. package/src/ui/radio-group-item.vue +53 -0
  319. package/src/ui/radio-group.vue +27 -0
  320. package/src/ui/scrollable-tabs-list.vue +148 -0
  321. package/src/ui/select-multiple.vue +135 -0
  322. package/src/ui/select.vue +77 -0
  323. package/src/ui/separator.vue +60 -0
  324. package/src/ui/sheet.vue +50 -0
  325. package/src/ui/sidebar/BaseSidebar.vue +97 -0
  326. package/src/ui/sidebar/BasicSearch.vue +27 -0
  327. package/src/ui/sidebar/ResponsiveSearch.vue +54 -0
  328. package/src/ui/sidebar/Sidebar.vue +227 -0
  329. package/src/ui/sidebar/SidebarCollapseButton.vue +10 -0
  330. package/src/ui/sidebar/SidebarContent.vue +31 -0
  331. package/src/ui/sidebar/SidebarDescription.vue +10 -0
  332. package/src/ui/sidebar/SidebarExpandButton.vue +10 -0
  333. package/src/ui/sidebar/SidebarFooter.vue +10 -0
  334. package/src/ui/sidebar/SidebarGroup.vue +11 -0
  335. package/src/ui/sidebar/SidebarGroupContent.vue +10 -0
  336. package/src/ui/sidebar/SidebarGroupLabel.vue +7 -0
  337. package/src/ui/sidebar/SidebarHeader.vue +10 -0
  338. package/src/ui/sidebar/SidebarInset.vue +19 -0
  339. package/src/ui/sidebar/SidebarMenu.vue +7 -0
  340. package/src/ui/sidebar/SidebarMenuBadge.vue +7 -0
  341. package/src/ui/sidebar/SidebarMenuButton.vue +17 -0
  342. package/src/ui/sidebar/SidebarMenuItem.vue +10 -0
  343. package/src/ui/sidebar/SidebarMenuSub.vue +18 -0
  344. package/src/ui/sidebar/SidebarMenuSubContent.vue +10 -0
  345. package/src/ui/sidebar/SidebarMenuSubItem.vue +10 -0
  346. package/src/ui/sidebar/SidebarMenuSubTrigger.vue +10 -0
  347. package/src/ui/sidebar/SidebarProvider.vue +108 -0
  348. package/src/ui/sidebar/SidebarScrollArea.vue +10 -0
  349. package/src/ui/sidebar/SidebarSection.vue +10 -0
  350. package/src/ui/sidebar/SidebarSeparator.vue +8 -0
  351. package/src/ui/sidebar/SidebarShortcut.vue +10 -0
  352. package/src/ui/sidebar/SidebarTitle.vue +10 -0
  353. package/src/ui/sidebar/SidebarTrigger.vue +27 -0
  354. package/src/ui/sidebar/Wrapper.vue +12 -0
  355. package/src/ui/sidebar/context.ts +8 -0
  356. package/src/ui/sidebar/index.ts +27 -0
  357. package/src/ui/sidebar/sidebarStore.ts +40 -0
  358. package/src/ui/sidebar/types.ts +30 -0
  359. package/src/ui/sidebar/useAutoCollapse.ts +81 -0
  360. package/src/ui/sidebar.vue +24 -0
  361. package/src/ui/skeleton.vue +15 -0
  362. package/src/ui/slider.vue +32 -0
  363. package/src/ui/sonner.vue +67 -0
  364. package/src/ui/switch.vue +33 -0
  365. package/src/ui/tab-content.vue +28 -0
  366. package/src/ui/tab-list.vue +31 -0
  367. package/src/ui/tab-panel.vue +19 -0
  368. package/src/ui/tab-trigger.vue +34 -0
  369. package/src/ui/tab.vue +30 -0
  370. package/src/ui/table-body.vue +16 -0
  371. package/src/ui/table-caption.vue +20 -0
  372. package/src/ui/table-cell.vue +16 -0
  373. package/src/ui/table-footer.vue +16 -0
  374. package/src/ui/table-header.vue +132 -0
  375. package/src/ui/table-row.vue +16 -0
  376. package/src/ui/table.vue +55 -0
  377. package/src/ui/tabs.vue +33 -0
  378. package/src/ui/textarea.vue +91 -0
  379. package/src/ui/threat-gauge.vue +137 -0
  380. package/src/ui/toggle.vue +69 -0
  381. package/src/ui/tooltip-content.vue +52 -0
  382. package/src/ui/tooltip-provider.vue +13 -0
  383. package/src/ui/tooltip-root.vue +9 -0
  384. package/src/ui/tooltip-trigger.vue +13 -0
  385. package/src/ui/tooltip.vue +22 -0
  386. package/src/ui/utils.ts +6 -0
  387. package/vite.config.ts +39 -0
package/src/index.ts ADDED
@@ -0,0 +1,179 @@
1
+ // Auto-generated — DO NOT EDIT MANUALLY
2
+
3
+ import './index.css'
4
+
5
+ // Default shadcn
6
+ export * from './shadcn/breadcrumb';
7
+ export * from './shadcn/accordion'
8
+
9
+ export { default as InputOTP } from './ui/InputOTP.vue';
10
+ export { default as InputOTPGroup } from './ui/InputOTPGroup.vue';
11
+ export { default as InputOTPSeparator } from './ui/InputOTPSeparator.vue';
12
+ export { default as InputOTPSlot } from './ui/InputOTPSlot.vue';
13
+ export { default as PopoverContent } from './ui/PopoverContent.vue';
14
+ export { default as PopoverTrigger } from './ui/PopoverTrigger.vue';
15
+ export { default as SelectContent } from './ui/SelectContent.vue';
16
+ export { default as SelectGroup } from './ui/SelectGroup.vue';
17
+ export { default as SelectItem } from './ui/SelectItem.vue';
18
+ export { default as SelectLabel } from './ui/SelectLabel.vue';
19
+ export { default as SelectSeparator } from './ui/SelectSeparator.vue';
20
+ export { default as SelectTrigger } from './ui/SelectTrigger.vue';
21
+ export { default as SelectValue } from './ui/SelectValue.vue';
22
+ export { default as SheetContent } from './ui/SheetContent.vue';
23
+ export { default as SheetDescription } from './ui/SheetDescription.vue';
24
+ export { default as SheetHeader } from './ui/SheetHeader.vue';
25
+ export { default as SheetTitle } from './ui/SheetTitle.vue';
26
+ export { default as AccordionContent } from './ui/accordion-content.vue';
27
+ export { default as AccordionItem } from './ui/accordion-item.vue';
28
+ export { default as AccordionTrigger } from './ui/accordion-trigger.vue';
29
+ export { default as Accordion } from './ui/accordion.vue';
30
+ export { default as AlertActions } from './ui/alert-actions.vue';
31
+ export { default as AlertDescription } from './ui/alert-description.vue';
32
+ export { default as AlertTitle } from './ui/alert-title.vue';
33
+ export { default as Alert } from './ui/alert.vue';
34
+ export { default as AvatarFallback } from './ui/avatar-fallback.vue';
35
+ export { default as AvatarGroup } from './ui/avatar-group.vue';
36
+ export { default as AvatarImage } from './ui/avatar-image.vue';
37
+ export { default as Avatar } from './ui/avatar.vue';
38
+ export { default as Badge } from './ui/badge.vue';
39
+ export { default as BreadcrumbItem } from './ui/breadcrumb-item.vue';
40
+ export { default as BreadcrumbSeparator } from './ui/breadcrumb-separator.vue';
41
+ export { default as Breadcrumb } from './ui/breadcrumb.vue';
42
+ export { default as Button } from './ui/button.vue';
43
+ export { default as CardContent } from './ui/card-content.vue';
44
+ export { default as CardDescription } from './ui/card-description.vue';
45
+ export { default as CardFooter } from './ui/card-footer.vue';
46
+ export { default as CardHeader } from './ui/card-header.vue';
47
+ export { default as CardTitle } from './ui/card-title.vue';
48
+ export { default as Card } from './ui/card.vue';
49
+ export { default as CategoryBreakdownMetric } from './ui/category-breakdown-metric.vue';
50
+ export { default as Checkbox } from './ui/checkbox.vue';
51
+ export { default as DialogBody } from './ui/dialog-body.vue';
52
+ export { default as DialogClose } from './ui/dialog-close.vue';
53
+ export { default as DialogContent } from './ui/dialog-content.vue';
54
+ export { default as DialogDescription } from './ui/dialog-description.vue';
55
+ export { default as DialogFooter } from './ui/dialog-footer.vue';
56
+ export { default as DialogHeader } from './ui/dialog-header.vue';
57
+ export { default as DialogOverlay } from './ui/dialog-overlay.vue';
58
+ export { default as DialogPortal } from './ui/dialog-portal.vue';
59
+ export { default as DialogTitle } from './ui/dialog-title.vue';
60
+ export { default as DialogTrigger } from './ui/dialog-trigger.vue';
61
+ export { default as Dialog } from './ui/dialog.vue';
62
+ export { default as DismissibleBadgesDemo } from './ui/dismissible-badges-demo.vue';
63
+ export { default as DrawerContent } from './ui/drawer-content.vue';
64
+ export { default as DrawerDescription } from './ui/drawer-description.vue';
65
+ export { default as DrawerFooter } from './ui/drawer-footer.vue';
66
+ export { default as DrawerHeader } from './ui/drawer-header.vue';
67
+ export { default as DrawerTitle } from './ui/drawer-title.vue';
68
+ export { default as DrawerTrigger } from './ui/drawer-trigger.vue';
69
+ export { default as Drawer } from './ui/drawer.vue';
70
+ export { default as DropdownMenuCheckboxItem } from './ui/dropdown-menu-checkbox-item.vue';
71
+ export { default as DropdownMenuContent } from './ui/dropdown-menu-content.vue';
72
+ export { default as DropdownMenuGroup } from './ui/dropdown-menu-group.vue';
73
+ export { default as DropdownMenuItem } from './ui/dropdown-menu-item.vue';
74
+ export { default as DropdownMenuLabel } from './ui/dropdown-menu-label.vue';
75
+ export { default as DropdownMenuPortal } from './ui/dropdown-menu-portal.vue';
76
+ export { default as DropdownMenuRadioGroup } from './ui/dropdown-menu-radio-group.vue';
77
+ export { default as DropdownMenuRadioItem } from './ui/dropdown-menu-radio-item.vue';
78
+ export { default as DropdownMenuSeparator } from './ui/dropdown-menu-separator.vue';
79
+ export { default as DropdownMenuShortcut } from './ui/dropdown-menu-shortcut.vue';
80
+ export { default as DropdownMenuSubContent } from './ui/dropdown-menu-sub-content.vue';
81
+ export { default as DropdownMenuSubTrigger } from './ui/dropdown-menu-sub-trigger.vue';
82
+ export { default as DropdownMenuSub } from './ui/dropdown-menu-sub.vue';
83
+ export { default as DropdownMenuTrigger } from './ui/dropdown-menu-trigger.vue';
84
+ export { default as DropdownMenu } from './ui/dropdown-menu.vue';
85
+ export { default as GroupedAvatar } from './ui/grouped-avatar.vue';
86
+ export { default as Accessibility } from './ui/icons/Accessibility.vue';
87
+ export { default as AlignLeft } from './ui/icons/AlignLeft.vue';
88
+ export { default as ArrowDown } from './ui/icons/ArrowDown.vue';
89
+ export { default as ArrowUp } from './ui/icons/ArrowUp.vue';
90
+ export { default as ArrowUpDown } from './ui/icons/ArrowUpDown.vue';
91
+ export { default as BookOpen } from './ui/icons/BookOpen.vue';
92
+ export { default as Calendar } from './ui/icons/Calendar.vue';
93
+ export { default as Check } from './ui/icons/Check.vue';
94
+ export { default as ChevronRight } from './ui/icons/ChevronRight.vue';
95
+ export { default as Circle } from './ui/icons/Circle.vue';
96
+ export { default as Copy } from './ui/icons/Copy.vue';
97
+ export { default as Dot } from './ui/icons/Dot.vue';
98
+ export { default as Edit } from './ui/icons/Edit.vue';
99
+ export { default as FileText } from './ui/icons/FileText.vue';
100
+ export { default as Folder } from './ui/icons/Folder.vue';
101
+ export { default as FolderOpen } from './ui/icons/FolderOpen.vue';
102
+ export { default as Hash } from './ui/icons/Hash.vue';
103
+ export { default as Home } from './ui/icons/Home.vue';
104
+ export { default as Minus } from './ui/icons/Minus.vue';
105
+ export { default as MoreHorizontal } from './ui/icons/MoreHorizontal.vue';
106
+ export { default as Settings } from './ui/icons/Settings.vue';
107
+ export { default as Slash } from './ui/icons/Slash.vue';
108
+ export { default as Trash2 } from './ui/icons/Trash2.vue';
109
+ export { default as Type } from './ui/icons/Type.vue';
110
+ export { default as User } from './ui/icons/User.vue';
111
+ export { default as InputOtp } from './ui/input-otp.vue';
112
+ export { default as Input } from './ui/input.vue';
113
+ export { default as Label } from './ui/label.vue';
114
+ export { default as Pagination } from './ui/pagination.vue';
115
+ export { default as Popover } from './ui/popover.vue';
116
+ export { default as Progress } from './ui/progress.vue';
117
+ export { default as RadioGroupItem } from './ui/radio-group-item.vue';
118
+ export { default as RadioGroup } from './ui/radio-group.vue';
119
+ export { default as ScrollableTabsList } from './ui/scrollable-tabs-list.vue';
120
+ export { default as SelectMultiple } from './ui/select-multiple.vue';
121
+ export { default as Select } from './ui/select.vue';
122
+ export { default as Separator } from './ui/separator.vue';
123
+ export { default as Sheet } from './ui/sheet.vue';
124
+ export { default as BaseSidebar } from './ui/sidebar/BaseSidebar.vue';
125
+ export { default as BasicSearch } from './ui/sidebar/BasicSearch.vue';
126
+ export { default as ResponsiveSearch } from './ui/sidebar/ResponsiveSearch.vue';
127
+ export { default as Sidebar } from './ui/sidebar/Sidebar.vue';
128
+ export { default as SidebarCollapseButton } from './ui/sidebar/SidebarCollapseButton.vue';
129
+ export { default as SidebarContent } from './ui/sidebar/SidebarContent.vue';
130
+ export { default as SidebarDescription } from './ui/sidebar/SidebarDescription.vue';
131
+ export { default as SidebarExpandButton } from './ui/sidebar/SidebarExpandButton.vue';
132
+ export { default as SidebarFooter } from './ui/sidebar/SidebarFooter.vue';
133
+ export { default as SidebarGroup } from './ui/sidebar/SidebarGroup.vue';
134
+ export { default as SidebarGroupContent } from './ui/sidebar/SidebarGroupContent.vue';
135
+ export { default as SidebarGroupLabel } from './ui/sidebar/SidebarGroupLabel.vue';
136
+ export { default as SidebarHeader } from './ui/sidebar/SidebarHeader.vue';
137
+ export { default as SidebarInset } from './ui/sidebar/SidebarInset.vue';
138
+ export { default as SidebarMenu } from './ui/sidebar/SidebarMenu.vue';
139
+ export { default as SidebarMenuBadge } from './ui/sidebar/SidebarMenuBadge.vue';
140
+ export { default as SidebarMenuButton } from './ui/sidebar/SidebarMenuButton.vue';
141
+ export { default as SidebarMenuItem } from './ui/sidebar/SidebarMenuItem.vue';
142
+ export { default as SidebarMenuSub } from './ui/sidebar/SidebarMenuSub.vue';
143
+ export { default as SidebarMenuSubContent } from './ui/sidebar/SidebarMenuSubContent.vue';
144
+ export { default as SidebarMenuSubItem } from './ui/sidebar/SidebarMenuSubItem.vue';
145
+ export { default as SidebarMenuSubTrigger } from './ui/sidebar/SidebarMenuSubTrigger.vue';
146
+ export { default as SidebarProvider } from './ui/sidebar/SidebarProvider.vue';
147
+ export { default as SidebarScrollArea } from './ui/sidebar/SidebarScrollArea.vue';
148
+ export { default as SidebarSection } from './ui/sidebar/SidebarSection.vue';
149
+ export { default as SidebarSeparator } from './ui/sidebar/SidebarSeparator.vue';
150
+ export { default as SidebarShortcut } from './ui/sidebar/SidebarShortcut.vue';
151
+ export { default as SidebarTitle } from './ui/sidebar/SidebarTitle.vue';
152
+ export { default as SidebarTrigger } from './ui/sidebar/SidebarTrigger.vue';
153
+ export { default as Wrapper } from './ui/sidebar/Wrapper.vue';
154
+ // export { default as Sidebar } from './ui/sidebar.vue';
155
+ export { default as Skeleton } from './ui/skeleton.vue';
156
+ export { default as Slider } from './ui/slider.vue';
157
+ export { default as Sonner } from './ui/sonner.vue';
158
+ export { default as Switch } from './ui/switch.vue';
159
+ export { default as TabContent } from './ui/tab-content.vue';
160
+ export { default as TabList } from './ui/tab-list.vue';
161
+ export { default as TabPanel } from './ui/tab-panel.vue';
162
+ export { default as TabTrigger } from './ui/tab-trigger.vue';
163
+ export { default as Tab } from './ui/tab.vue';
164
+ export { default as TableBody } from './ui/table-body.vue';
165
+ export { default as TableCaption } from './ui/table-caption.vue';
166
+ export { default as TableCell } from './ui/table-cell.vue';
167
+ export { default as TableFooter } from './ui/table-footer.vue';
168
+ export { default as TableHeader } from './ui/table-header.vue';
169
+ export { default as TableRow } from './ui/table-row.vue';
170
+ export { default as Table } from './ui/table.vue';
171
+ export { default as Tabs } from './ui/tabs.vue';
172
+ export { default as Textarea } from './ui/textarea.vue';
173
+ export { default as ThreatGauge } from './ui/threat-gauge.vue';
174
+ export { default as Toggle } from './ui/toggle.vue';
175
+ export { default as TooltipContent } from './ui/tooltip-content.vue';
176
+ export { default as TooltipProvider } from './ui/tooltip-provider.vue';
177
+ export { default as TooltipRoot } from './ui/tooltip-root.vue';
178
+ export { default as TooltipTrigger } from './ui/tooltip-trigger.vue';
179
+ export { default as Tooltip } from './ui/tooltip.vue';
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,19 @@
1
+ <script setup lang="ts">
2
+ import type { AccordionRootEmits, AccordionRootProps } from "reka-ui"
3
+ import {
4
+ AccordionRoot,
5
+
6
+ useForwardPropsEmits,
7
+ } from "reka-ui"
8
+
9
+ const props = defineProps<AccordionRootProps>()
10
+ const emits = defineEmits<AccordionRootEmits>()
11
+
12
+ const forwarded = useForwardPropsEmits(props, emits)
13
+ </script>
14
+
15
+ <template>
16
+ <AccordionRoot data-slot="accordion" v-bind="forwarded">
17
+ <slot />
18
+ </AccordionRoot>
19
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { AccordionContentProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { AccordionContent } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const props = defineProps<AccordionContentProps & { class?: HTMLAttributes["class"] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, "class")
11
+ </script>
12
+
13
+ <template>
14
+ <AccordionContent
15
+ data-slot="accordion-content"
16
+ v-bind="delegatedProps"
17
+ class="data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm"
18
+ >
19
+ <div :class="cn('pt-0 pb-4', props.class)">
20
+ <slot />
21
+ </div>
22
+ </AccordionContent>
23
+ </template>
@@ -0,0 +1,23 @@
1
+ <script setup lang="ts">
2
+ import type { AccordionItemProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { AccordionItem, useForwardProps } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const props = defineProps<AccordionItemProps & { class?: HTMLAttributes["class"] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, "class")
11
+
12
+ const forwardedProps = useForwardProps(delegatedProps)
13
+ </script>
14
+
15
+ <template>
16
+ <AccordionItem
17
+ data-slot="accordion-item"
18
+ v-bind="forwardedProps"
19
+ :class="cn('border-b last:border-b-0', props.class)"
20
+ >
21
+ <slot />
22
+ </AccordionItem>
23
+ </template>
@@ -0,0 +1,38 @@
1
+ <script setup lang="ts">
2
+ import type { AccordionTriggerProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { ChevronDown } from "lucide-vue-next"
6
+ import {
7
+ AccordionHeader,
8
+ AccordionTrigger,
9
+
10
+ } from "reka-ui"
11
+ import { cn } from "@/lib/utils"
12
+
13
+ const props = defineProps<AccordionTriggerProps & { class?: HTMLAttributes["class"] }>()
14
+
15
+ const delegatedProps = reactiveOmit(props, "class")
16
+ </script>
17
+
18
+ <template>
19
+ <AccordionHeader class="flex">
20
+ <AccordionTrigger
21
+ data-slot="accordion-trigger"
22
+ v-bind="delegatedProps"
23
+ :class="
24
+ cn(
25
+ 'focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',
26
+ props.class,
27
+ )
28
+ "
29
+ >
30
+ <slot />
31
+ <slot name="icon">
32
+ <ChevronDown
33
+ class="text-muted-foreground pointer-events-none size-4 shrink-0 translate-y-0.5 transition-transform duration-200"
34
+ />
35
+ </slot>
36
+ </AccordionTrigger>
37
+ </AccordionHeader>
38
+ </template>
@@ -0,0 +1,4 @@
1
+ export { default as Accordion } from "./Accordion.vue"
2
+ export { default as AccordionContent } from "./AccordionContent.vue"
3
+ export { default as AccordionItem } from "./AccordionItem.vue"
4
+ export { default as AccordionTrigger } from "./AccordionTrigger.vue"
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import type { HTMLAttributes } from "vue"
3
+ import { AvatarRoot } from "reka-ui"
4
+ import { cn } from "@/lib/utils"
5
+
6
+ const props = defineProps<{
7
+ class?: HTMLAttributes["class"]
8
+ }>()
9
+ </script>
10
+
11
+ <template>
12
+ <AvatarRoot
13
+ data-slot="avatar"
14
+ :class="cn('relative flex size-8 shrink-0 overflow-hidden rounded-full', props.class)"
15
+ >
16
+ <slot />
17
+ </AvatarRoot>
18
+ </template>
@@ -0,0 +1,21 @@
1
+ <script setup lang="ts">
2
+ import type { AvatarFallbackProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { AvatarFallback } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const props = defineProps<AvatarFallbackProps & { class?: HTMLAttributes["class"] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, "class")
11
+ </script>
12
+
13
+ <template>
14
+ <AvatarFallback
15
+ data-slot="avatar-fallback"
16
+ v-bind="delegatedProps"
17
+ :class="cn('bg-muted flex size-full items-center justify-center rounded-full', props.class)"
18
+ >
19
+ <slot />
20
+ </AvatarFallback>
21
+ </template>
@@ -0,0 +1,16 @@
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
10
+ data-slot="avatar-image"
11
+ v-bind="props"
12
+ class="aspect-square size-full"
13
+ >
14
+ <slot />
15
+ </AvatarImage>
16
+ </template>
@@ -0,0 +1,3 @@
1
+ export { default as Avatar } from "./Avatar.vue"
2
+ export { default as AvatarFallback } from "./AvatarFallback.vue"
3
+ export { default as AvatarImage } from "./AvatarImage.vue"
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <nav aria-label="breadcrumb" data-slot="breadcrumb">
3
+ <slot />
4
+ </nav>
5
+ </template>
6
+ <script setup lang="ts">
7
+ // No props needed
8
+ </script>
@@ -0,0 +1,9 @@
1
+ <template>
2
+ <span data-slot="breadcrumb-ellipsis" role="presentation" aria-hidden="true" class="flex size-9 items-center justify-center">
3
+ <MoreHorizontal class="size-4" />
4
+ <span class="sr-only">More</span>
5
+ </span>
6
+ </template>
7
+ <script setup lang="ts">
8
+ import { MoreHorizontal } from 'lucide-vue-next';
9
+ </script>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <li data-slot="breadcrumb-item" class="inline-flex items-center gap-1.5">
3
+ <slot />
4
+ </li>
5
+ </template>
6
+ <script setup lang="ts">
7
+ // No props needed
8
+ </script>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <a data-slot="breadcrumb-link" class="hover:text-foreground transition-colors">
3
+ <slot />
4
+ </a>
5
+ </template>
6
+ <script setup lang="ts">
7
+ // No props needed
8
+ </script>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <ol data-slot="breadcrumb-list" class="text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5">
3
+ <slot />
4
+ </ol>
5
+ </template>
6
+ <script setup lang="ts">
7
+ // No props needed
8
+ </script>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <span data-slot="breadcrumb-page" role="link" aria-disabled="true" aria-current="page" class="text-foreground font-normal">
3
+ <slot />
4
+ </span>
5
+ </template>
6
+ <script setup lang="ts">
7
+ // No props needed
8
+ </script>
@@ -0,0 +1,8 @@
1
+ <template>
2
+ <li data-slot="breadcrumb-separator" role="presentation" aria-hidden="true" class="[&>svg]:size-3.5">
3
+ <slot><ChevronRight class="size-3.5" /></slot>
4
+ </li>
5
+ </template>
6
+ <script setup lang="ts">
7
+ import { ChevronRight } from 'lucide-vue-next';
8
+ </script>
@@ -0,0 +1,7 @@
1
+ export { default as Breadcrumb } from './Breadcrumb.vue';
2
+ export { default as BreadcrumbList } from './BreadcrumbList.vue';
3
+ export { default as BreadcrumbItem } from './BreadcrumbItem.vue';
4
+ export { default as BreadcrumbLink } from './BreadcrumbLink.vue';
5
+ export { default as BreadcrumbPage } from './BreadcrumbPage.vue';
6
+ export { default as BreadcrumbSeparator } from './BreadcrumbSeparator.vue';
7
+ export { default as BreadcrumbEllipsis } from './BreadcrumbEllipsis.vue';
@@ -0,0 +1,29 @@
1
+ <script setup lang="ts">
2
+ import type { PrimitiveProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import type { ButtonVariants } from "."
5
+ import { Primitive } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+ import { buttonVariants } from "."
8
+
9
+ interface Props extends PrimitiveProps {
10
+ variant?: ButtonVariants["variant"]
11
+ size?: ButtonVariants["size"]
12
+ class?: HTMLAttributes["class"]
13
+ }
14
+
15
+ const props = withDefaults(defineProps<Props>(), {
16
+ as: "button",
17
+ })
18
+ </script>
19
+
20
+ <template>
21
+ <Primitive
22
+ data-slot="button"
23
+ :as="as"
24
+ :as-child="asChild"
25
+ :class="cn(buttonVariants({ variant, size }), props.class)"
26
+ >
27
+ <slot />
28
+ </Primitive>
29
+ </template>
@@ -0,0 +1,38 @@
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
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default:
12
+ "bg-primary text-primary-foreground hover:bg-primary/90",
13
+ destructive:
14
+ "bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
15
+ outline:
16
+ "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
17
+ secondary:
18
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80",
19
+ ghost:
20
+ "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
21
+ link: "text-primary underline-offset-4 hover:underline",
22
+ },
23
+ size: {
24
+ "default": "h-9 px-4 py-2 has-[>svg]:px-3",
25
+ "sm": "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
26
+ "lg": "h-10 rounded-md px-6 has-[>svg]:px-4",
27
+ "icon": "size-9",
28
+ "icon-sm": "size-8",
29
+ "icon-lg": "size-10",
30
+ },
31
+ },
32
+ defaultVariants: {
33
+ variant: "default",
34
+ size: "default",
35
+ },
36
+ },
37
+ )
38
+ export type ButtonVariants = VariantProps<typeof buttonVariants>
@@ -0,0 +1,64 @@
1
+ <script lang="ts" setup>
2
+ import type { CalendarRootEmits, CalendarRootProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { CalendarRoot, useForwardPropsEmits } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+ import { CalendarCell, CalendarCellTrigger, CalendarGrid, CalendarGridBody, CalendarGridHead, CalendarGridRow, CalendarHeadCell, CalendarHeader, CalendarHeading, CalendarNextButton, CalendarPrevButton } from "."
8
+
9
+ const props = defineProps<CalendarRootProps & { class?: HTMLAttributes["class"]; calendarHeaderClass?: HTMLAttributes["class"]; calendarPrevButtonClass?: HTMLAttributes["class"]; calendarNextButtonClass?: HTMLAttributes["class"]; calendarHeaderStyle?: HTMLAttributes["style"] }>()
10
+ const emits = defineEmits<CalendarRootEmits>()
11
+
12
+ const delegatedProps = reactiveOmit(props, "class")
13
+
14
+ const forwarded = useForwardPropsEmits(delegatedProps, emits)
15
+ </script>
16
+
17
+ <template>
18
+ <CalendarRoot
19
+ v-slot="{ grid }"
20
+ data-slot="calendar"
21
+ :class="cn('p-3', props.class)"
22
+ v-bind="forwarded"
23
+ >
24
+ <CalendarHeader :class="props.calendarHeaderClass" :style="props.calendarHeaderStyle">
25
+ <CalendarHeading />
26
+
27
+ <div class="flex items-center gap-1">
28
+ <CalendarPrevButton :class="props.calendarPrevButtonClass" />
29
+ <CalendarNextButton :class="props.calendarNextButtonClass" />
30
+ </div>
31
+ </CalendarHeader>
32
+
33
+ <div class="flex flex-col gap-y-4 mt-4 sm:flex-row sm:gap-x-4 sm:gap-y-0">
34
+ <CalendarGrid v-for="month in grid" :key="month.value.toString()">
35
+ <CalendarGridHead>
36
+ <CalendarGridRow>
37
+ <CalendarHeadCell
38
+ v-for="day in ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']" :key="day"
39
+ >
40
+ {{ day }}
41
+ </CalendarHeadCell>
42
+ </CalendarGridRow>
43
+ </CalendarGridHead>
44
+ <CalendarGridBody>
45
+ <CalendarGridRow v-for="(weekDates, index) in month.rows" :key="`weekDate-${index}`" class="mt-2 w-full">
46
+ <CalendarCell
47
+ v-for="weekDate in weekDates"
48
+
49
+ class="rounded-md aria-selected:bg-primary aria-selected:text-primary-foreground aria-selected:hover:bg-primary aria-selected:hover:text-primary-foreground aria-selected:focus:bg-primary aria-selected:focus:text-primary-foreground"
50
+
51
+ :key="weekDate.toString()"
52
+ :date="weekDate"
53
+ >
54
+ <CalendarCellTrigger
55
+ :day="weekDate"
56
+ :month="month.value"
57
+ />
58
+ </CalendarCell>
59
+ </CalendarGridRow>
60
+ </CalendarGridBody>
61
+ </CalendarGrid>
62
+ </div>
63
+ </CalendarRoot>
64
+ </template>
@@ -0,0 +1,23 @@
1
+ <script lang="ts" setup>
2
+ import type { CalendarCellProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { CalendarCell, useForwardProps } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+
8
+ const props = defineProps<CalendarCellProps & { class?: HTMLAttributes["class"] }>()
9
+
10
+ const delegatedProps = reactiveOmit(props, "class")
11
+
12
+ const forwardedProps = useForwardProps(delegatedProps)
13
+ </script>
14
+
15
+ <template>
16
+ <CalendarCell
17
+ data-slot="calendar-cell"
18
+ :class="cn('relative p-0 text-center text-sm focus-within:relative focus-within:z-20 [&:has([data-selected])]:rounded-md [&:has([data-selected])]:bg-accent', props.class)"
19
+ v-bind="forwardedProps"
20
+ >
21
+ <slot />
22
+ </CalendarCell>
23
+ </template>
@@ -0,0 +1,39 @@
1
+ <script lang="ts" setup>
2
+ import type { CalendarCellTriggerProps } from "reka-ui"
3
+ import type { HTMLAttributes } from "vue"
4
+ import { reactiveOmit } from "@vueuse/core"
5
+ import { CalendarCellTrigger, useForwardProps } from "reka-ui"
6
+ import { cn } from "@/lib/utils"
7
+ import { buttonVariants } from '@/shadcn/button'
8
+
9
+ const props = withDefaults(defineProps<CalendarCellTriggerProps & { class?: HTMLAttributes["class"] }>(), {
10
+ as: "button",
11
+ })
12
+
13
+ const delegatedProps = reactiveOmit(props, "class")
14
+
15
+ const forwardedProps = useForwardProps(delegatedProps)
16
+ </script>
17
+
18
+ <template>
19
+ <CalendarCellTrigger
20
+ data-slot="calendar-cell-trigger"
21
+ :class="cn(
22
+ buttonVariants({ variant: 'ghost' }),
23
+ 'size-8 p-0 font-normal aria-selected:opacity-100 cursor-default',
24
+ '[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground',
25
+ // Selected
26
+ 'data-[selected]:bg-primary data-[selected]:text-primary-foreground data-[selected]:opacity-100 data-[selected]:hover:bg-primary data-[selected]:hover:text-primary-foreground data-[selected]:focus:bg-primary data-[selected]:focus:text-primary-foreground',
27
+ // Disabled
28
+ 'data-[disabled]:text-muted-foreground data-[disabled]:opacity-50',
29
+ // Unavailable
30
+ 'data-[unavailable]:text-destructive-foreground data-[unavailable]:line-through',
31
+ // Outside months
32
+ 'data-[outside-view]:text-muted-foreground',
33
+ props.class,
34
+ )"
35
+ v-bind="forwardedProps"
36
+ >
37
+ <slot />
38
+ </CalendarCellTrigger>
39
+ </template>