@bl33dz/fa814698dcde12f86a37ac31dd3aedf9 1.0.5 → 1.0.7

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 (388) hide show
  1. package/README.md +80 -95
  2. package/dist/fa814698dcde12f86a37ac31dd3aedf9.css +1 -1
  3. package/dist/perisai-ui.es.js +864 -847
  4. package/dist/perisai-ui.umd.js +1 -1
  5. package/package.json +45 -45
  6. package/src/{global.css → globals.css} +575 -575
  7. package/src/index.ts +178 -176
  8. package/src/lib/utils.ts +6 -6
  9. package/src/shadcn/accordion/Accordion.vue +19 -19
  10. package/src/shadcn/accordion/AccordionContent.vue +23 -23
  11. package/src/shadcn/accordion/AccordionItem.vue +23 -23
  12. package/src/shadcn/accordion/AccordionTrigger.vue +38 -38
  13. package/src/shadcn/accordion/index.ts +4 -4
  14. package/src/shadcn/avatar/Avatar.vue +18 -18
  15. package/src/shadcn/avatar/AvatarFallback.vue +21 -21
  16. package/src/shadcn/avatar/AvatarImage.vue +16 -16
  17. package/src/shadcn/avatar/index.ts +3 -3
  18. package/src/shadcn/breadcrumb/Breadcrumb.vue +8 -8
  19. package/src/shadcn/breadcrumb/BreadcrumbEllipsis.vue +9 -9
  20. package/src/shadcn/breadcrumb/BreadcrumbItem.vue +8 -8
  21. package/src/shadcn/breadcrumb/BreadcrumbLink.vue +8 -8
  22. package/src/shadcn/breadcrumb/BreadcrumbList.vue +8 -8
  23. package/src/shadcn/breadcrumb/BreadcrumbPage.vue +8 -8
  24. package/src/shadcn/breadcrumb/BreadcrumbSeparator.vue +8 -8
  25. package/src/shadcn/breadcrumb/index.ts +7 -7
  26. package/src/shadcn/button/Button.vue +29 -29
  27. package/src/shadcn/button/index.ts +38 -38
  28. package/src/shadcn/calendar/Calendar.vue +64 -64
  29. package/src/shadcn/calendar/CalendarCell.vue +23 -23
  30. package/src/shadcn/calendar/CalendarCellTrigger.vue +39 -39
  31. package/src/shadcn/calendar/CalendarGrid.vue +23 -23
  32. package/src/shadcn/calendar/CalendarGridBody.vue +15 -15
  33. package/src/shadcn/calendar/CalendarGridHead.vue +16 -16
  34. package/src/shadcn/calendar/CalendarGridRow.vue +22 -22
  35. package/src/shadcn/calendar/CalendarHeadCell.vue +23 -23
  36. package/src/shadcn/calendar/CalendarHeader.vue +23 -23
  37. package/src/shadcn/calendar/CalendarHeading.vue +30 -30
  38. package/src/shadcn/calendar/CalendarNextButton.vue +32 -32
  39. package/src/shadcn/calendar/CalendarPrevButton.vue +32 -32
  40. package/src/shadcn/calendar/index.ts +12 -12
  41. package/src/shadcn/card/Card.vue +8 -8
  42. package/src/shadcn/card/CardContent.vue +8 -8
  43. package/src/shadcn/card/CardDescription.vue +8 -8
  44. package/src/shadcn/card/CardHeader.vue +8 -8
  45. package/src/shadcn/card/CardTitle.vue +8 -8
  46. package/src/shadcn/card/index.ts +5 -5
  47. package/src/shadcn/checkbox/Checkbox.vue +38 -38
  48. package/src/shadcn/checkbox/index.ts +1 -1
  49. package/src/shadcn/command/Command.vue +87 -87
  50. package/src/shadcn/command/CommandDialog.vue +31 -31
  51. package/src/shadcn/command/CommandEmpty.vue +27 -27
  52. package/src/shadcn/command/CommandGroup.vue +45 -45
  53. package/src/shadcn/command/CommandInput.vue +39 -39
  54. package/src/shadcn/command/CommandItem.vue +76 -76
  55. package/src/shadcn/command/CommandList.vue +25 -25
  56. package/src/shadcn/command/CommandSeparator.vue +21 -21
  57. package/src/shadcn/command/CommandShortcut.vue +17 -17
  58. package/src/shadcn/command/index.ts +25 -25
  59. package/src/shadcn/context-menu/ContextMenu.vue +18 -18
  60. package/src/shadcn/context-menu/ContextMenuCheckboxItem.vue +38 -38
  61. package/src/shadcn/context-menu/ContextMenuContent.vue +34 -34
  62. package/src/shadcn/context-menu/ContextMenuGroup.vue +15 -15
  63. package/src/shadcn/context-menu/ContextMenuItem.vue +39 -39
  64. package/src/shadcn/context-menu/ContextMenuLabel.vue +22 -22
  65. package/src/shadcn/context-menu/ContextMenuPortal.vue +15 -15
  66. package/src/shadcn/context-menu/ContextMenuRadioGroup.vue +22 -22
  67. package/src/shadcn/context-menu/ContextMenuRadioItem.vue +38 -38
  68. package/src/shadcn/context-menu/ContextMenuSeparator.vue +22 -22
  69. package/src/shadcn/context-menu/ContextMenuShortcut.vue +17 -17
  70. package/src/shadcn/context-menu/ContextMenuSub.vue +22 -22
  71. package/src/shadcn/context-menu/ContextMenuSubContent.vue +33 -33
  72. package/src/shadcn/context-menu/ContextMenuSubTrigger.vue +33 -33
  73. package/src/shadcn/context-menu/ContextMenuTrigger.vue +17 -17
  74. package/src/shadcn/context-menu/index.ts +15 -15
  75. package/src/shadcn/dialog/Dialog.vue +18 -18
  76. package/src/shadcn/dialog/DialogClose.vue +15 -15
  77. package/src/shadcn/dialog/DialogContent.vue +46 -46
  78. package/src/shadcn/dialog/DialogDescription.vue +23 -23
  79. package/src/shadcn/dialog/DialogFooter.vue +15 -15
  80. package/src/shadcn/dialog/DialogHeader.vue +17 -17
  81. package/src/shadcn/dialog/DialogOverlay.vue +21 -21
  82. package/src/shadcn/dialog/DialogScrollContent.vue +56 -56
  83. package/src/shadcn/dialog/DialogTitle.vue +23 -23
  84. package/src/shadcn/dialog/DialogTrigger.vue +15 -15
  85. package/src/shadcn/dialog/index.ts +10 -10
  86. package/src/shadcn/dropdown-menu/DropdownMenu.vue +18 -18
  87. package/src/shadcn/dropdown-menu/DropdownMenuCheckboxItem.vue +38 -38
  88. package/src/shadcn/dropdown-menu/DropdownMenuContent.vue +36 -36
  89. package/src/shadcn/dropdown-menu/DropdownMenuGroup.vue +15 -15
  90. package/src/shadcn/dropdown-menu/DropdownMenuItem.vue +31 -31
  91. package/src/shadcn/dropdown-menu/DropdownMenuLabel.vue +23 -23
  92. package/src/shadcn/dropdown-menu/DropdownMenuRadioGroup.vue +22 -22
  93. package/src/shadcn/dropdown-menu/DropdownMenuRadioItem.vue +39 -39
  94. package/src/shadcn/dropdown-menu/DropdownMenuSeparator.vue +24 -24
  95. package/src/shadcn/dropdown-menu/DropdownMenuShortcut.vue +17 -17
  96. package/src/shadcn/dropdown-menu/DropdownMenuSub.vue +19 -19
  97. package/src/shadcn/dropdown-menu/DropdownMenuSubContent.vue +28 -28
  98. package/src/shadcn/dropdown-menu/DropdownMenuSubTrigger.vue +31 -31
  99. package/src/shadcn/dropdown-menu/DropdownMenuTrigger.vue +17 -17
  100. package/src/shadcn/dropdown-menu/index.ts +16 -16
  101. package/src/shadcn/menubar/Menubar.vue +33 -33
  102. package/src/shadcn/menubar/MenubarCheckboxItem.vue +38 -38
  103. package/src/shadcn/menubar/MenubarContent.vue +42 -42
  104. package/src/shadcn/menubar/MenubarGroup.vue +15 -15
  105. package/src/shadcn/menubar/MenubarItem.vue +37 -37
  106. package/src/shadcn/menubar/MenubarLabel.vue +20 -20
  107. package/src/shadcn/menubar/MenubarMenu.vue +15 -15
  108. package/src/shadcn/menubar/MenubarPortal.vue +5 -5
  109. package/src/shadcn/menubar/MenubarRadioGroup.vue +22 -22
  110. package/src/shadcn/menubar/MenubarRadioItem.vue +38 -38
  111. package/src/shadcn/menubar/MenubarSeparator.vue +21 -21
  112. package/src/shadcn/menubar/MenubarShortcut.vue +17 -17
  113. package/src/shadcn/menubar/MenubarSub.vue +23 -23
  114. package/src/shadcn/menubar/MenubarSubContent.vue +36 -36
  115. package/src/shadcn/menubar/MenubarSubTrigger.vue +28 -28
  116. package/src/shadcn/menubar/MenubarTrigger.vue +28 -28
  117. package/src/shadcn/menubar/index.ts +15 -15
  118. package/src/shadcn/navigation-menu/NavigationMenu.vue +35 -35
  119. package/src/shadcn/navigation-menu/NavigationMenuContent.vue +31 -31
  120. package/src/shadcn/navigation-menu/NavigationMenuIndicator.vue +23 -23
  121. package/src/shadcn/navigation-menu/NavigationMenuItem.vue +21 -21
  122. package/src/shadcn/navigation-menu/NavigationMenuLink.vue +26 -26
  123. package/src/shadcn/navigation-menu/NavigationMenuList.vue +28 -28
  124. package/src/shadcn/navigation-menu/NavigationMenuTrigger.vue +24 -24
  125. package/src/shadcn/navigation-menu/NavigationMenuViewport.vue +31 -31
  126. package/src/shadcn/navigation-menu/index.ts +14 -14
  127. package/src/shadcn/pagination/Pagination.vue +151 -151
  128. package/src/shadcn/pagination/PaginationContent.vue +22 -22
  129. package/src/shadcn/pagination/PaginationEllipsis.vue +25 -25
  130. package/src/shadcn/pagination/PaginationFirst.vue +33 -33
  131. package/src/shadcn/pagination/PaginationItem.vue +31 -31
  132. package/src/shadcn/pagination/PaginationLast.vue +33 -33
  133. package/src/shadcn/pagination/PaginationLink.vue +13 -13
  134. package/src/shadcn/pagination/PaginationNext.vue +22 -22
  135. package/src/shadcn/pagination/PaginationPrevious.vue +33 -33
  136. package/src/shadcn/pagination/index.ts +9 -9
  137. package/src/shadcn/popover/Popover.vue +18 -18
  138. package/src/shadcn/popover/PopoverAnchor.vue +15 -15
  139. package/src/shadcn/popover/PopoverContent.vue +46 -46
  140. package/src/shadcn/popover/PopoverTrigger.vue +15 -15
  141. package/src/shadcn/popover/index.ts +4 -4
  142. package/src/shadcn/radio-group/RadioGroup.vue +24 -24
  143. package/src/shadcn/radio-group/RadioGroupItem.vue +39 -39
  144. package/src/shadcn/radio-group/index.ts +2 -2
  145. package/src/shadcn/range-calendar/RangeCalendar.vue +71 -71
  146. package/src/shadcn/range-calendar/RangeCalendarCell.vue +23 -23
  147. package/src/shadcn/range-calendar/RangeCalendarCellTrigger.vue +41 -41
  148. package/src/shadcn/range-calendar/RangeCalendarGrid.vue +23 -23
  149. package/src/shadcn/range-calendar/RangeCalendarGridBody.vue +15 -15
  150. package/src/shadcn/range-calendar/RangeCalendarGridHead.vue +15 -15
  151. package/src/shadcn/range-calendar/RangeCalendarGridRow.vue +22 -22
  152. package/src/shadcn/range-calendar/RangeCalendarHeadCell.vue +23 -23
  153. package/src/shadcn/range-calendar/RangeCalendarHeader.vue +23 -23
  154. package/src/shadcn/range-calendar/RangeCalendarHeading.vue +30 -30
  155. package/src/shadcn/range-calendar/RangeCalendarNextButton.vue +32 -32
  156. package/src/shadcn/range-calendar/RangeCalendarPrevButton.vue +32 -32
  157. package/src/shadcn/range-calendar/index.ts +12 -12
  158. package/src/shadcn/select/Select.vue +18 -18
  159. package/src/shadcn/select/SelectContent.vue +52 -52
  160. package/src/shadcn/select/SelectGroup.vue +15 -15
  161. package/src/shadcn/select/SelectItem.vue +43 -43
  162. package/src/shadcn/select/SelectItemText.vue +15 -15
  163. package/src/shadcn/select/SelectLabel.vue +17 -17
  164. package/src/shadcn/select/SelectScrollDownButton.vue +26 -26
  165. package/src/shadcn/select/SelectScrollUpButton.vue +26 -26
  166. package/src/shadcn/select/SelectSeparator.vue +19 -19
  167. package/src/shadcn/select/SelectTrigger.vue +33 -33
  168. package/src/shadcn/select/SelectValue.vue +15 -15
  169. package/src/shadcn/select/index.ts +11 -11
  170. package/src/shadcn/separator/Separator.vue +31 -31
  171. package/src/shadcn/separator/index.ts +1 -1
  172. package/src/shadcn/sidebar/MenuGroup.vue +28 -28
  173. package/src/shadcn/sidebar/MenuItemRenderer.vue +23 -23
  174. package/src/shadcn/sidebar/Sidebar.vue +14 -14
  175. package/src/shadcn/sidebar/SidebarDemoContent.vue +26 -26
  176. package/src/shadcn/sidebar/SidebarMenuGroupWithLabel.vue +29 -29
  177. package/src/shadcn/sidebar/SidebarMenuItemWithIcon.vue +103 -103
  178. package/src/shadcn/sidebar/SidebarMenuSub.vue +10 -10
  179. package/src/shadcn/sidebar/SidebarMenuSubItemStyled.vue +38 -38
  180. package/src/shadcn/sidebar/SidebarTrigger.vue +8 -8
  181. package/src/shadcn/sidebar/index.ts +5 -5
  182. package/src/shadcn/slider/Slider.vue +43 -43
  183. package/src/shadcn/slider/index.ts +1 -1
  184. package/src/shadcn/sonner/Sonner.vue +19 -19
  185. package/src/shadcn/sonner/index.ts +1 -1
  186. package/src/shadcn/spinner/Spinner.vue +17 -0
  187. package/src/shadcn/spinner/index.ts +1 -0
  188. package/src/shadcn/switch/Switch.vue +38 -38
  189. package/src/shadcn/switch/index.ts +1 -1
  190. package/src/shadcn/tabs/CardTabsContent.vue +16 -16
  191. package/src/shadcn/tabs/CornerCutTabsTrigger.vue +102 -102
  192. package/src/shadcn/tabs/GridTabsList.vue +30 -30
  193. package/src/shadcn/tabs/ScrollableTabsList.vue +8 -8
  194. package/src/shadcn/tabs/Tabs.vue +23 -23
  195. package/src/shadcn/tabs/TabsContent.vue +21 -21
  196. package/src/shadcn/tabs/TabsList.vue +24 -24
  197. package/src/shadcn/tabs/TabsTrigger.vue +30 -30
  198. package/src/shadcn/tabs/VerticalTabsList.vue +28 -28
  199. package/src/shadcn/tabs/VerticalTabsTrigger.vue +16 -16
  200. package/src/shadcn/tabs/index.ts +10 -10
  201. package/src/shadcn/toggle/Toggle.vue +35 -35
  202. package/src/shadcn/toggle/index.ts +28 -28
  203. package/src/shadcn/tooltip/Tooltip.vue +18 -18
  204. package/src/shadcn/tooltip/TooltipContent.vue +34 -34
  205. package/src/shadcn/tooltip/TooltipProvider.vue +14 -14
  206. package/src/shadcn/tooltip/TooltipTrigger.vue +15 -15
  207. package/src/shadcn/tooltip/index.ts +4 -4
  208. package/src/shadcn/tree/index.ts +2 -0
  209. package/src/ui/InputOTP.vue +69 -69
  210. package/src/ui/InputOTPContext.ts +9 -9
  211. package/src/ui/InputOTPGroup.vue +7 -7
  212. package/src/ui/InputOTPSeparator.vue +8 -8
  213. package/src/ui/InputOTPSlot.vue +61 -61
  214. package/src/ui/PopoverContent.vue +27 -27
  215. package/src/ui/PopoverTrigger.vue +9 -9
  216. package/src/ui/SelectContent.vue +23 -23
  217. package/src/ui/SelectGroup.vue +12 -12
  218. package/src/ui/SelectItem.vue +25 -25
  219. package/src/ui/SelectLabel.vue +16 -16
  220. package/src/ui/SelectSeparator.vue +17 -17
  221. package/src/ui/SelectTrigger.vue +22 -22
  222. package/src/ui/SelectValue.vue +9 -9
  223. package/src/ui/SheetContent.vue +34 -34
  224. package/src/ui/SheetDescription.vue +9 -9
  225. package/src/ui/SheetHeader.vue +11 -11
  226. package/src/ui/SheetTitle.vue +9 -9
  227. package/src/ui/accordion-content.vue +21 -21
  228. package/src/ui/accordion-item.vue +18 -18
  229. package/src/ui/accordion-trigger.vue +14 -14
  230. package/src/ui/accordion.vue +9 -9
  231. package/src/ui/alert-actions.vue +13 -13
  232. package/src/ui/alert-description.vue +13 -13
  233. package/src/ui/alert-title.vue +13 -13
  234. package/src/ui/alert.vue +63 -63
  235. package/src/ui/avatar-fallback.vue +38 -38
  236. package/src/ui/avatar-group.vue +32 -32
  237. package/src/ui/avatar-image.vue +19 -19
  238. package/src/ui/avatar.vue +32 -32
  239. package/src/ui/badge.vue +90 -90
  240. package/src/ui/breadcrumb-item.vue +11 -11
  241. package/src/ui/breadcrumb-separator.vue +9 -9
  242. package/src/ui/breadcrumb.vue +11 -11
  243. package/src/ui/button.vue +76 -76
  244. package/src/ui/card-content.vue +16 -16
  245. package/src/ui/card-description.vue +16 -16
  246. package/src/ui/card-footer.vue +13 -13
  247. package/src/ui/card-header.vue +19 -19
  248. package/src/ui/card-title.vue +16 -16
  249. package/src/ui/card.vue +73 -73
  250. package/src/ui/category-breakdown-metric.vue +205 -205
  251. package/src/ui/checkbox.vue +84 -84
  252. package/src/ui/cn.ts +6 -6
  253. package/src/ui/dialog-body.vue +13 -13
  254. package/src/ui/dialog-close.vue +9 -9
  255. package/src/ui/dialog-content.vue +36 -36
  256. package/src/ui/dialog-description.vue +13 -13
  257. package/src/ui/dialog-footer.vue +13 -13
  258. package/src/ui/dialog-header.vue +13 -13
  259. package/src/ui/dialog-overlay.vue +14 -14
  260. package/src/ui/dialog-portal.vue +9 -9
  261. package/src/ui/dialog-title.vue +13 -13
  262. package/src/ui/dialog-trigger.vue +9 -9
  263. package/src/ui/dialog.vue +9 -9
  264. package/src/ui/dismissible-badges-demo.vue +94 -94
  265. package/src/ui/drawer-content.vue +53 -53
  266. package/src/ui/drawer-description.vue +23 -23
  267. package/src/ui/drawer-footer.vue +22 -22
  268. package/src/ui/drawer-header.vue +22 -22
  269. package/src/ui/drawer-title.vue +23 -23
  270. package/src/ui/drawer-trigger.vue +23 -23
  271. package/src/ui/drawer.vue +34 -34
  272. package/src/ui/dropdown-menu-checkbox-item.vue +27 -27
  273. package/src/ui/dropdown-menu-content.vue +23 -23
  274. package/src/ui/dropdown-menu-group.vue +7 -7
  275. package/src/ui/dropdown-menu-item.vue +19 -19
  276. package/src/ui/dropdown-menu-label.vue +17 -17
  277. package/src/ui/dropdown-menu-portal.vue +8 -8
  278. package/src/ui/dropdown-menu-radio-group.vue +14 -14
  279. package/src/ui/dropdown-menu-radio-item.vue +30 -30
  280. package/src/ui/dropdown-menu-separator.vue +13 -13
  281. package/src/ui/dropdown-menu-shortcut.vue +15 -15
  282. package/src/ui/dropdown-menu-sub-content.vue +8 -8
  283. package/src/ui/dropdown-menu-sub-trigger.vue +8 -8
  284. package/src/ui/dropdown-menu-sub.vue +8 -8
  285. package/src/ui/dropdown-menu-trigger.vue +8 -8
  286. package/src/ui/dropdown-menu.vue +9 -9
  287. package/src/ui/grouped-avatar.vue +19 -19
  288. package/src/ui/icons/Accessibility.vue +7 -7
  289. package/src/ui/icons/AlignLeft.vue +6 -6
  290. package/src/ui/icons/ArrowDown.vue +7 -7
  291. package/src/ui/icons/ArrowUp.vue +7 -7
  292. package/src/ui/icons/ArrowUpDown.vue +8 -8
  293. package/src/ui/icons/BookOpen.vue +6 -6
  294. package/src/ui/icons/Calendar.vue +9 -9
  295. package/src/ui/icons/Check.vue +6 -6
  296. package/src/ui/icons/ChevronRight.vue +6 -6
  297. package/src/ui/icons/Circle.vue +6 -6
  298. package/src/ui/icons/Copy.vue +7 -7
  299. package/src/ui/icons/Dot.vue +6 -6
  300. package/src/ui/icons/Edit.vue +6 -6
  301. package/src/ui/icons/FileText.vue +9 -9
  302. package/src/ui/icons/Folder.vue +6 -6
  303. package/src/ui/icons/FolderOpen.vue +7 -7
  304. package/src/ui/icons/Hash.vue +6 -6
  305. package/src/ui/icons/Home.vue +6 -6
  306. package/src/ui/icons/Minus.vue +6 -6
  307. package/src/ui/icons/MoreHorizontal.vue +8 -8
  308. package/src/ui/icons/Settings.vue +7 -7
  309. package/src/ui/icons/Slash.vue +6 -6
  310. package/src/ui/icons/Trash2.vue +6 -6
  311. package/src/ui/icons/Type.vue +6 -6
  312. package/src/ui/icons/User.vue +7 -7
  313. package/src/ui/input-otp.vue +52 -52
  314. package/src/ui/input.vue +98 -98
  315. package/src/ui/label.vue +19 -19
  316. package/src/ui/pagination.vue +41 -41
  317. package/src/ui/popover.vue +9 -9
  318. package/src/ui/progress.vue +67 -67
  319. package/src/ui/radio-group-item.vue +53 -53
  320. package/src/ui/radio-group.vue +27 -27
  321. package/src/ui/scrollable-tabs-list.vue +148 -148
  322. package/src/ui/select-multiple.vue +135 -135
  323. package/src/ui/select.vue +77 -77
  324. package/src/ui/separator.vue +60 -60
  325. package/src/ui/sheet.vue +50 -50
  326. package/src/ui/sidebar/BaseSidebar.vue +97 -97
  327. package/src/ui/sidebar/BasicSearch.vue +27 -27
  328. package/src/ui/sidebar/ResponsiveSearch.vue +54 -54
  329. package/src/ui/sidebar/Sidebar.vue +227 -227
  330. package/src/ui/sidebar/SidebarCollapseButton.vue +10 -10
  331. package/src/ui/sidebar/SidebarContent.vue +31 -31
  332. package/src/ui/sidebar/SidebarDescription.vue +10 -10
  333. package/src/ui/sidebar/SidebarExpandButton.vue +10 -10
  334. package/src/ui/sidebar/SidebarFooter.vue +10 -10
  335. package/src/ui/sidebar/SidebarGroup.vue +11 -11
  336. package/src/ui/sidebar/SidebarGroupContent.vue +10 -10
  337. package/src/ui/sidebar/SidebarGroupLabel.vue +7 -7
  338. package/src/ui/sidebar/SidebarHeader.vue +10 -10
  339. package/src/ui/sidebar/SidebarInset.vue +19 -19
  340. package/src/ui/sidebar/SidebarMenu.vue +7 -7
  341. package/src/ui/sidebar/SidebarMenuBadge.vue +7 -7
  342. package/src/ui/sidebar/SidebarMenuButton.vue +17 -17
  343. package/src/ui/sidebar/SidebarMenuItem.vue +10 -10
  344. package/src/ui/sidebar/SidebarMenuSub.vue +18 -18
  345. package/src/ui/sidebar/SidebarMenuSubContent.vue +10 -10
  346. package/src/ui/sidebar/SidebarMenuSubItem.vue +10 -10
  347. package/src/ui/sidebar/SidebarMenuSubTrigger.vue +10 -10
  348. package/src/ui/sidebar/SidebarProvider.vue +108 -108
  349. package/src/ui/sidebar/SidebarScrollArea.vue +10 -10
  350. package/src/ui/sidebar/SidebarSection.vue +10 -10
  351. package/src/ui/sidebar/SidebarSeparator.vue +8 -8
  352. package/src/ui/sidebar/SidebarShortcut.vue +10 -10
  353. package/src/ui/sidebar/SidebarTitle.vue +10 -10
  354. package/src/ui/sidebar/SidebarTrigger.vue +27 -27
  355. package/src/ui/sidebar/Wrapper.vue +12 -12
  356. package/src/ui/sidebar/context.ts +8 -8
  357. package/src/ui/sidebar/index.ts +27 -27
  358. package/src/ui/sidebar/sidebarStore.ts +40 -40
  359. package/src/ui/sidebar/types.ts +30 -30
  360. package/src/ui/sidebar/useAutoCollapse.ts +81 -81
  361. package/src/ui/sidebar.vue +24 -24
  362. package/src/ui/skeleton.vue +15 -15
  363. package/src/ui/slider.vue +32 -32
  364. package/src/ui/sonner.vue +67 -67
  365. package/src/ui/switch.vue +33 -33
  366. package/src/ui/tab-content.vue +28 -28
  367. package/src/ui/tab-list.vue +31 -31
  368. package/src/ui/tab-panel.vue +19 -19
  369. package/src/ui/tab-trigger.vue +34 -34
  370. package/src/ui/tab.vue +30 -30
  371. package/src/ui/table-body.vue +16 -16
  372. package/src/ui/table-caption.vue +20 -20
  373. package/src/ui/table-cell.vue +16 -16
  374. package/src/ui/table-footer.vue +16 -16
  375. package/src/ui/table-header.vue +132 -132
  376. package/src/ui/table-row.vue +16 -16
  377. package/src/ui/table.vue +55 -55
  378. package/src/ui/tabs.vue +33 -33
  379. package/src/ui/textarea.vue +91 -91
  380. package/src/ui/threat-gauge.vue +137 -137
  381. package/src/ui/toggle.vue +69 -69
  382. package/src/ui/tooltip-content.vue +52 -52
  383. package/src/ui/tooltip-provider.vue +13 -13
  384. package/src/ui/tooltip-root.vue +9 -9
  385. package/src/ui/tooltip-trigger.vue +13 -13
  386. package/src/ui/tooltip.vue +22 -22
  387. package/src/ui/utils.ts +6 -6
  388. package/vite.config.ts +39 -39
@@ -1,38 +1,38 @@
1
- <template>
2
- <AvatarFallback
3
- data-slot="avatar-fallback"
4
- :class="fallbackClass"
5
- v-bind="$attrs"
6
- >
7
- <slot />
8
- </AvatarFallback>
9
- </template>
10
-
11
- <script setup lang="ts">
12
- import { cn } from './utils';
13
- import { AvatarFallback } from '@/shadcn/avatar';
14
- const props = defineProps({
15
- class: {
16
- type: String,
17
- default: '',
18
- },
19
- });
20
- const fallbackClass = cn(
21
- 'bg-muted flex size-full items-center justify-center rounded-full',
22
- // Text sizing based on parent avatar size
23
- '[.size-6_&]:text-xs', // xs avatar
24
- '[.size-8_&]:text-xs', // sm avatar
25
- '[.size-10_&]:text-sm', // md avatar (default)
26
- '[.size-12_&]:text-base', // lg avatar
27
- '[.size-16_&]:text-lg', // xl avatar
28
- '[.size-20_&]:text-xl', // 2xl avatar
29
- '[.size-6_&_svg]:size-3', // xs avatar - 12px icon
30
- '[.size-8_&_svg]:size-3.5', // sm avatar - 14px icon
31
- '[.size-10_&_svg]:size-4', // md avatar - 16px icon (default)
32
- '[.size-12_&_svg]:size-5', // lg avatar - 20px icon
33
- '[.size-16_&_svg]:size-6', // xl avatar - 24px icon
34
- '[.size-20_&_svg]:size-8', // 2xl avatar - 32px icon
35
- '[&_svg]:pointer-events-none [&_svg]:shrink-0',
36
- props.class
37
- );
38
- </script>
1
+ <template>
2
+ <AvatarFallback
3
+ data-slot="avatar-fallback"
4
+ :class="fallbackClass"
5
+ v-bind="$attrs"
6
+ >
7
+ <slot />
8
+ </AvatarFallback>
9
+ </template>
10
+
11
+ <script setup lang="ts">
12
+ import { cn } from './utils';
13
+ import { AvatarFallback } from '@/shadcn/avatar';
14
+ const props = defineProps({
15
+ class: {
16
+ type: String,
17
+ default: '',
18
+ },
19
+ });
20
+ const fallbackClass = cn(
21
+ 'bg-muted flex size-full items-center justify-center rounded-full',
22
+ // Text sizing based on parent avatar size
23
+ '[.size-6_&]:text-xs', // xs avatar
24
+ '[.size-8_&]:text-xs', // sm avatar
25
+ '[.size-10_&]:text-sm', // md avatar (default)
26
+ '[.size-12_&]:text-base', // lg avatar
27
+ '[.size-16_&]:text-lg', // xl avatar
28
+ '[.size-20_&]:text-xl', // 2xl avatar
29
+ '[.size-6_&_svg]:size-3', // xs avatar - 12px icon
30
+ '[.size-8_&_svg]:size-3.5', // sm avatar - 14px icon
31
+ '[.size-10_&_svg]:size-4', // md avatar - 16px icon (default)
32
+ '[.size-12_&_svg]:size-5', // lg avatar - 20px icon
33
+ '[.size-16_&_svg]:size-6', // xl avatar - 24px icon
34
+ '[.size-20_&_svg]:size-8', // 2xl avatar - 32px icon
35
+ '[&_svg]:pointer-events-none [&_svg]:shrink-0',
36
+ props.class
37
+ );
38
+ </script>
@@ -1,32 +1,32 @@
1
- <template>
2
- <div :class="groupClass" v-bind="$attrs">
3
- <slot />
4
- </div>
5
- </template>
6
-
7
- <script setup lang="ts">
8
- import { computed } from 'vue';
9
- import { cn } from './utils';
10
-
11
- const props = defineProps({
12
- spacing: {
13
- type: String,
14
- default: 'normal',
15
- validator: (val: string) => ['tight', 'normal', 'loose'].includes(val),
16
- },
17
- class: {
18
- type: String,
19
- default: '',
20
- },
21
- });
22
-
23
- const groupClass = computed(() =>
24
- cn(
25
- 'flex',
26
- props.spacing === 'tight' && '-space-x-1',
27
- props.spacing === 'normal' && '-space-x-2',
28
- props.spacing === 'loose' && '-space-x-3',
29
- props.class
30
- )
31
- );
32
- </script>
1
+ <template>
2
+ <div :class="groupClass" v-bind="$attrs">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script setup lang="ts">
8
+ import { computed } from 'vue';
9
+ import { cn } from './utils';
10
+
11
+ const props = defineProps({
12
+ spacing: {
13
+ type: String,
14
+ default: 'normal',
15
+ validator: (val: string) => ['tight', 'normal', 'loose'].includes(val),
16
+ },
17
+ class: {
18
+ type: String,
19
+ default: '',
20
+ },
21
+ });
22
+
23
+ const groupClass = computed(() =>
24
+ cn(
25
+ 'flex',
26
+ props.spacing === 'tight' && '-space-x-1',
27
+ props.spacing === 'normal' && '-space-x-2',
28
+ props.spacing === 'loose' && '-space-x-3',
29
+ props.class
30
+ )
31
+ );
32
+ </script>
@@ -1,19 +1,19 @@
1
- <template>
2
- <AvatarImage
3
- as="img"
4
- data-slot="avatar-image"
5
- :src="src"
6
- :alt="alt"
7
- :class="cn('aspect-square size-full', $attrs.class)"
8
- v-bind="$attrs"
9
- />
10
- </template>
11
-
12
- <script setup lang="ts">
13
- import { cn } from './utils';
14
- import { AvatarImage } from '@/shadcn/avatar';
15
- const props = defineProps({
16
- src: String,
17
- alt: String,
18
- });
19
- </script>
1
+ <template>
2
+ <AvatarImage
3
+ as="img"
4
+ data-slot="avatar-image"
5
+ :src="src"
6
+ :alt="alt"
7
+ :class="cn('aspect-square size-full', $attrs.class)"
8
+ v-bind="$attrs"
9
+ />
10
+ </template>
11
+
12
+ <script setup lang="ts">
13
+ import { cn } from './utils';
14
+ import { AvatarImage } from '@/shadcn/avatar';
15
+ const props = defineProps({
16
+ src: String,
17
+ alt: String,
18
+ });
19
+ </script>
package/src/ui/avatar.vue CHANGED
@@ -1,32 +1,32 @@
1
- <template>
2
- <Avatar
3
- data-slot="avatar"
4
- :class="[
5
- 'relative flex shrink-0 overflow-hidden rounded-full',
6
- size === 'xs' ? 'size-6' : '',
7
- size === 'sm' ? 'size-8' : '',
8
- size === 'md' ? 'size-10' : '',
9
- size === 'lg' ? 'size-12' : '',
10
- size === 'xl' ? 'size-16' : '',
11
- size === '2xl' ? 'size-20' : '',
12
- $attrs.class || ''
13
- ]"
14
- v-bind="$attrs"
15
- >
16
- <slot />
17
- </Avatar>
18
- </template>
19
-
20
- <script setup>
21
- import { defineProps, useAttrs } from 'vue';
22
- import { Avatar } from '@/shadcn/avatar';
23
-
24
- const { size } = defineProps({
25
- size: {
26
- type: String,
27
- default: 'md',
28
- validator: v => ['xs','sm','md','lg','xl','2xl'].includes(v)
29
- }
30
- });
31
- const $attrs = useAttrs();
32
- </script>
1
+ <template>
2
+ <Avatar
3
+ data-slot="avatar"
4
+ :class="[
5
+ 'relative flex shrink-0 overflow-hidden rounded-full',
6
+ size === 'xs' ? 'size-6' : '',
7
+ size === 'sm' ? 'size-8' : '',
8
+ size === 'md' ? 'size-10' : '',
9
+ size === 'lg' ? 'size-12' : '',
10
+ size === 'xl' ? 'size-16' : '',
11
+ size === '2xl' ? 'size-20' : '',
12
+ $attrs.class || ''
13
+ ]"
14
+ v-bind="$attrs"
15
+ >
16
+ <slot />
17
+ </Avatar>
18
+ </template>
19
+
20
+ <script setup>
21
+ import { defineProps, useAttrs } from 'vue';
22
+ import { Avatar } from '@/shadcn/avatar';
23
+
24
+ const { size } = defineProps({
25
+ size: {
26
+ type: String,
27
+ default: 'md',
28
+ validator: v => ['xs','sm','md','lg','xl','2xl'].includes(v)
29
+ }
30
+ });
31
+ const $attrs = useAttrs();
32
+ </script>
package/src/ui/badge.vue CHANGED
@@ -1,90 +1,90 @@
1
-
2
- <script setup lang="ts">
3
- import { computed, defineProps, useAttrs } from 'vue';
4
- import { cn } from './utils';
5
- import { X } from 'lucide-vue-next';
6
-
7
- const props = defineProps({
8
- variant: {
9
- type: String,
10
- default: 'default',
11
- validator: v => [
12
- 'default', 'secondary', 'destructive', 'outline',
13
- 'soft-primary', 'soft-secondary', 'soft-success', 'soft-warning', 'soft-danger', 'soft-info', 'soft-purple', 'soft-pink', 'soft-indigo', 'soft-orange', 'soft-teal', 'soft-neutral'
14
- ].includes(v),
15
- },
16
- size: {
17
- type: String,
18
- default: 'md',
19
- validator: v => ['sm', 'md', 'lg'].includes(v),
20
- },
21
- dismissible: Boolean,
22
- onDismiss: Function,
23
- });
24
-
25
- const $attrs = useAttrs();
26
-
27
- const variantClasses: Record<string, string> = {
28
- default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/90',
29
- secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/90',
30
- destructive: 'border-transparent bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
31
- outline: 'text-foreground hover:bg-accent hover:text-accent-foreground',
32
- 'soft-primary': 'border-blue-200 bg-blue-50 text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-300 dark:hover:bg-blue-900',
33
- 'soft-secondary': 'border-gray-200 bg-gray-50 text-gray-700 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 dark:hover:bg-gray-800',
34
- 'soft-success': 'border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300 dark:hover:bg-green-900',
35
- 'soft-warning': 'border-yellow-200 bg-yellow-50 text-yellow-700 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-300 dark:hover:bg-yellow-900',
36
- 'soft-danger': 'border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300 dark:hover:bg-red-900',
37
- 'soft-info': 'border-cyan-200 bg-cyan-50 text-cyan-700 hover:bg-cyan-100 dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-300 dark:hover:bg-cyan-900',
38
- 'soft-purple': 'border-purple-200 bg-purple-50 text-purple-700 hover:bg-purple-100 dark:border-purple-800 dark:bg-purple-950 dark:text-purple-300 dark:hover:bg-purple-900',
39
- 'soft-pink': 'border-pink-200 bg-pink-50 text-pink-700 hover:bg-pink-100 dark:border-pink-800 dark:bg-pink-950 dark:text-pink-300 dark:hover:bg-pink-900',
40
- 'soft-indigo': 'border-indigo-200 bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:border-indigo-800 dark:bg-indigo-950 dark:text-indigo-300 dark:hover:bg-indigo-900',
41
- 'soft-orange': 'border-orange-200 bg-orange-50 text-orange-700 hover:bg-orange-100 dark:border-orange-800 dark:bg-orange-950 dark:text-orange-300 dark:hover:bg-orange-900',
42
- 'soft-teal': 'border-teal-200 bg-teal-50 text-teal-700 hover:bg-teal-100 dark:border-teal-800 dark:bg-teal-950 dark:text-teal-300 dark:hover:bg-teal-900',
43
- 'soft-neutral': 'border-stone-200 bg-stone-50 text-stone-700 hover:bg-stone-100 dark:border-stone-700 dark:bg-stone-900 dark:text-stone-300 dark:hover:bg-stone-800',
44
- };
45
-
46
- const sizeClasses: Record<string, string> = {
47
- sm: 'text-[12px] px-[4px] py-[2px] rounded-[4px] [&>svg:not(.dismiss-icon)]:size-[10px] gap-1',
48
- md: 'text-[14px] px-[6px] py-[2px] rounded-[4px] [&>svg:not(.dismiss-icon)]:size-[12px] gap-1',
49
- lg: 'text-[16px] px-[8px] py-[4px] rounded-[6px] [&>svg:not(.dismiss-icon)]:size-[14px] gap-1',
50
- };
51
-
52
- function getDismissIconClasses(size: string) {
53
- switch (size) {
54
- case 'sm':
55
- return { iconClass: 'h-3 w-3', buttonClass: 'p-0.5' };
56
- case 'lg':
57
- return { iconClass: 'h-4 w-4', buttonClass: 'p-1' };
58
- default:
59
- return { iconClass: 'h-3.5 w-3.5', buttonClass: 'p-0.5' };
60
- }
61
- }
62
-
63
- const { iconClass, buttonClass } = getDismissIconClasses(props.size);
64
- </script>
65
-
66
- <template>
67
- <span
68
- data-slot="badge"
69
- :class="cn(
70
- 'inline-flex items-center justify-center border font-medium w-fit whitespace-nowrap shrink-0 [&>svg:not(.dismiss-icon)]:pointer-events-none [&>svg:not(.dismiss-icon)]:shrink-0 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 transition-[color,box-shadow] overflow-hidden',
71
- variantClasses[props.variant],
72
- sizeClasses[props.size],
73
- props.dismissible ? 'pr-0.5 mr-0' : '',
74
- $attrs.class,
75
- )"
76
- v-bind="$attrs"
77
- >
78
- <slot />
79
- <template v-if="props.dismissible && props.onDismiss">
80
- <button
81
- type="button"
82
- @click.stop="props.onDismiss()"
83
- :class="cn('dismiss-icon rounded-sm opacity-70 hover:opacity-100 focus:opacity-100 focus:outline-none focus:ring-1 focus:ring-ring transition-opacity', buttonClass)"
84
- aria-label="Remove"
85
- >
86
- <X :class="iconClass" />
87
- </button>
88
- </template>
89
- </span>
90
- </template>
1
+
2
+ <script setup lang="ts">
3
+ import { computed, defineProps, useAttrs } from 'vue';
4
+ import { cn } from './utils';
5
+ import { X } from 'lucide-vue-next';
6
+
7
+ const props = defineProps({
8
+ variant: {
9
+ type: String,
10
+ default: 'default',
11
+ validator: v => [
12
+ 'default', 'secondary', 'destructive', 'outline',
13
+ 'soft-primary', 'soft-secondary', 'soft-success', 'soft-warning', 'soft-danger', 'soft-info', 'soft-purple', 'soft-pink', 'soft-indigo', 'soft-orange', 'soft-teal', 'soft-neutral'
14
+ ].includes(v),
15
+ },
16
+ size: {
17
+ type: String,
18
+ default: 'md',
19
+ validator: v => ['sm', 'md', 'lg'].includes(v),
20
+ },
21
+ dismissible: Boolean,
22
+ onDismiss: Function,
23
+ });
24
+
25
+ const $attrs = useAttrs();
26
+
27
+ const variantClasses: Record<string, string> = {
28
+ default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/90',
29
+ secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/90',
30
+ destructive: 'border-transparent bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60',
31
+ outline: 'text-foreground hover:bg-accent hover:text-accent-foreground',
32
+ 'soft-primary': 'border-blue-200 bg-blue-50 text-blue-700 hover:bg-blue-100 dark:border-blue-800 dark:bg-blue-950 dark:text-blue-300 dark:hover:bg-blue-900',
33
+ 'soft-secondary': 'border-gray-200 bg-gray-50 text-gray-700 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 dark:hover:bg-gray-800',
34
+ 'soft-success': 'border-green-200 bg-green-50 text-green-700 hover:bg-green-100 dark:border-green-800 dark:bg-green-950 dark:text-green-300 dark:hover:bg-green-900',
35
+ 'soft-warning': 'border-yellow-200 bg-yellow-50 text-yellow-700 hover:bg-yellow-100 dark:border-yellow-800 dark:bg-yellow-950 dark:text-yellow-300 dark:hover:bg-yellow-900',
36
+ 'soft-danger': 'border-red-200 bg-red-50 text-red-700 hover:bg-red-100 dark:border-red-800 dark:bg-red-950 dark:text-red-300 dark:hover:bg-red-900',
37
+ 'soft-info': 'border-cyan-200 bg-cyan-50 text-cyan-700 hover:bg-cyan-100 dark:border-cyan-800 dark:bg-cyan-950 dark:text-cyan-300 dark:hover:bg-cyan-900',
38
+ 'soft-purple': 'border-purple-200 bg-purple-50 text-purple-700 hover:bg-purple-100 dark:border-purple-800 dark:bg-purple-950 dark:text-purple-300 dark:hover:bg-purple-900',
39
+ 'soft-pink': 'border-pink-200 bg-pink-50 text-pink-700 hover:bg-pink-100 dark:border-pink-800 dark:bg-pink-950 dark:text-pink-300 dark:hover:bg-pink-900',
40
+ 'soft-indigo': 'border-indigo-200 bg-indigo-50 text-indigo-700 hover:bg-indigo-100 dark:border-indigo-800 dark:bg-indigo-950 dark:text-indigo-300 dark:hover:bg-indigo-900',
41
+ 'soft-orange': 'border-orange-200 bg-orange-50 text-orange-700 hover:bg-orange-100 dark:border-orange-800 dark:bg-orange-950 dark:text-orange-300 dark:hover:bg-orange-900',
42
+ 'soft-teal': 'border-teal-200 bg-teal-50 text-teal-700 hover:bg-teal-100 dark:border-teal-800 dark:bg-teal-950 dark:text-teal-300 dark:hover:bg-teal-900',
43
+ 'soft-neutral': 'border-stone-200 bg-stone-50 text-stone-700 hover:bg-stone-100 dark:border-stone-700 dark:bg-stone-900 dark:text-stone-300 dark:hover:bg-stone-800',
44
+ };
45
+
46
+ const sizeClasses: Record<string, string> = {
47
+ sm: 'text-[12px] px-[4px] py-[2px] rounded-[4px] [&>svg:not(.dismiss-icon)]:size-[10px] gap-1',
48
+ md: 'text-[14px] px-[6px] py-[2px] rounded-[4px] [&>svg:not(.dismiss-icon)]:size-[12px] gap-1',
49
+ lg: 'text-[16px] px-[8px] py-[4px] rounded-[6px] [&>svg:not(.dismiss-icon)]:size-[14px] gap-1',
50
+ };
51
+
52
+ function getDismissIconClasses(size: string) {
53
+ switch (size) {
54
+ case 'sm':
55
+ return { iconClass: 'h-3 w-3', buttonClass: 'p-0.5' };
56
+ case 'lg':
57
+ return { iconClass: 'h-4 w-4', buttonClass: 'p-1' };
58
+ default:
59
+ return { iconClass: 'h-3.5 w-3.5', buttonClass: 'p-0.5' };
60
+ }
61
+ }
62
+
63
+ const { iconClass, buttonClass } = getDismissIconClasses(props.size);
64
+ </script>
65
+
66
+ <template>
67
+ <span
68
+ data-slot="badge"
69
+ :class="cn(
70
+ 'inline-flex items-center justify-center border font-medium w-fit whitespace-nowrap shrink-0 [&>svg:not(.dismiss-icon)]:pointer-events-none [&>svg:not(.dismiss-icon)]:shrink-0 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 transition-[color,box-shadow] overflow-hidden',
71
+ variantClasses[props.variant],
72
+ sizeClasses[props.size],
73
+ props.dismissible ? 'pr-0.5 mr-0' : '',
74
+ $attrs.class,
75
+ )"
76
+ v-bind="$attrs"
77
+ >
78
+ <slot />
79
+ <template v-if="props.dismissible && props.onDismiss">
80
+ <button
81
+ type="button"
82
+ @click.stop="props.onDismiss()"
83
+ :class="cn('dismiss-icon rounded-sm opacity-70 hover:opacity-100 focus:opacity-100 focus:outline-none focus:ring-1 focus:ring-ring transition-opacity', buttonClass)"
84
+ aria-label="Remove"
85
+ >
86
+ <X :class="iconClass" />
87
+ </button>
88
+ </template>
89
+ </span>
90
+ </template>
@@ -1,11 +1,11 @@
1
- <template>
2
- <li>
3
- <span :class="['transition-colors hover:text-foreground', $attrs.class || '']" v-bind="$attrs">
4
- <slot />
5
- </span>
6
- </li>
7
- </template>
8
-
9
- <script setup>
10
- // No props needed for base BreadcrumbItem
11
- </script>
1
+ <template>
2
+ <li>
3
+ <span :class="['transition-colors hover:text-foreground', $attrs.class || '']" v-bind="$attrs">
4
+ <slot />
5
+ </span>
6
+ </li>
7
+ </template>
8
+
9
+ <script setup>
10
+ // No props needed for base BreadcrumbItem
11
+ </script>
@@ -1,9 +1,9 @@
1
- <template>
2
- <li aria-hidden="true">
3
- <span class="mx-1 select-none text-muted-foreground">/</span>
4
- </li>
5
- </template>
6
-
7
- <script setup>
8
- // No props needed for base BreadcrumbSeparator
9
- </script>
1
+ <template>
2
+ <li aria-hidden="true">
3
+ <span class="mx-1 select-none text-muted-foreground">/</span>
4
+ </li>
5
+ </template>
6
+
7
+ <script setup>
8
+ // No props needed for base BreadcrumbSeparator
9
+ </script>
@@ -1,11 +1,11 @@
1
- <template>
2
- <nav class="w-full" aria-label="breadcrumb">
3
- <ol class="flex flex-wrap items-center gap-1 text-sm text-muted-foreground">
4
- <slot />
5
- </ol>
6
- </nav>
7
- </template>
8
-
9
- <script setup>
10
- // No props needed for base Breadcrumb
11
- </script>
1
+ <template>
2
+ <nav class="w-full" aria-label="breadcrumb">
3
+ <ol class="flex flex-wrap items-center gap-1 text-sm text-muted-foreground">
4
+ <slot />
5
+ </ol>
6
+ </nav>
7
+ </template>
8
+
9
+ <script setup>
10
+ // No props needed for base Breadcrumb
11
+ </script>
package/src/ui/button.vue CHANGED
@@ -1,76 +1,76 @@
1
- <template>
2
- <component
3
- :is="asChild ? 'span' : 'button'"
4
- data-slot="button"
5
- :class="cn(baseClass, variantClass, sizeClass, $attrs.class)"
6
- v-bind="$attrs"
7
- :type="asChild ? undefined : type"
8
- :disabled="disabled"
9
- @click="$emit('click', $event)"
10
- >
11
- <slot />
12
- </component>
13
- </template>
14
-
15
- <script setup>
16
- import { computed, defineProps, useAttrs, defineEmits } from 'vue';
17
- import { cn } from '@/lib/utils';
18
-
19
- const props = defineProps({
20
- variant: {
21
- type: String,
22
- default: 'default',
23
- },
24
- size: {
25
- type: String,
26
- default: 'default',
27
- },
28
- type: {
29
- type: String,
30
- default: 'button',
31
- },
32
- disabled: {
33
- type: Boolean,
34
- default: false,
35
- },
36
- asChild: {
37
- type: Boolean,
38
- default: false,
39
- },
40
- });
41
-
42
- const $attrs = useAttrs();
43
- const emit = defineEmits(['click']);
44
-
45
- const baseClass = '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]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4 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';
46
-
47
- const variantClass = computed(() => {
48
- switch (props.variant) {
49
- case 'destructive':
50
- return 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60';
51
- case 'outline':
52
- return 'border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground dark:bg-transparent dark:border-border dark:hover:bg-accent';
53
- case 'secondary':
54
- return 'bg-secondary text-secondary-foreground hover:bg-secondary/80';
55
- case 'ghost':
56
- return 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50';
57
- case 'link':
58
- return 'text-primary underline-offset-4 hover:underline';
59
- default:
60
- return 'bg-primary text-primary-foreground hover:bg-primary/90';
61
- }
62
- });
63
-
64
- const sizeClass = computed(() => {
65
- switch (props.size) {
66
- case 'sm':
67
- return 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5';
68
- case 'lg':
69
- return 'h-10 rounded-md px-6 has-[>svg]:px-4';
70
- case 'icon':
71
- return 'size-9 rounded-md';
72
- default:
73
- return 'h-9 px-4 py-2 has-[>svg]:px-3';
74
- }
75
- });
76
- </script>
1
+ <template>
2
+ <component
3
+ :is="asChild ? 'span' : 'button'"
4
+ data-slot="button"
5
+ :class="cn(baseClass, variantClass, sizeClass, $attrs.class)"
6
+ v-bind="$attrs"
7
+ :type="asChild ? undefined : type"
8
+ :disabled="disabled"
9
+ @click="$emit('click', $event)"
10
+ >
11
+ <slot />
12
+ </component>
13
+ </template>
14
+
15
+ <script setup>
16
+ import { computed, defineProps, useAttrs, defineEmits } from 'vue';
17
+ import { cn } from '@/lib/utils';
18
+
19
+ const props = defineProps({
20
+ variant: {
21
+ type: String,
22
+ default: 'default',
23
+ },
24
+ size: {
25
+ type: String,
26
+ default: 'default',
27
+ },
28
+ type: {
29
+ type: String,
30
+ default: 'button',
31
+ },
32
+ disabled: {
33
+ type: Boolean,
34
+ default: false,
35
+ },
36
+ asChild: {
37
+ type: Boolean,
38
+ default: false,
39
+ },
40
+ });
41
+
42
+ const $attrs = useAttrs();
43
+ const emit = defineEmits(['click']);
44
+
45
+ const baseClass = 'cursor-pointer 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]:shrink-0 [&_svg:not([class*=\'size-\'])]:size-4 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';
46
+
47
+ const variantClass = computed(() => {
48
+ switch (props.variant) {
49
+ case 'destructive':
50
+ return 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60';
51
+ case 'outline':
52
+ return 'border border-border bg-background text-foreground hover:bg-accent hover:text-accent-foreground dark:bg-transparent dark:border-border dark:hover:bg-accent';
53
+ case 'secondary':
54
+ return 'bg-secondary text-secondary-foreground hover:bg-secondary/80';
55
+ case 'ghost':
56
+ return 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50';
57
+ case 'link':
58
+ return 'text-primary underline-offset-4 hover:underline';
59
+ default:
60
+ return 'bg-primary text-primary-foreground hover:bg-primary/90';
61
+ }
62
+ });
63
+
64
+ const sizeClass = computed(() => {
65
+ switch (props.size) {
66
+ case 'sm':
67
+ return 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5';
68
+ case 'lg':
69
+ return 'h-10 rounded-md px-6 has-[>svg]:px-4';
70
+ case 'icon':
71
+ return 'size-9 rounded-md';
72
+ default:
73
+ return 'h-9 px-4 py-2 has-[>svg]:px-3';
74
+ }
75
+ });
76
+ </script>