@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,137 +1,137 @@
1
- <template>
2
- <div :class="['relative', $attrs.class]" :style="{ width: `${size}px`, height: `${size}px` }">
3
- <svg
4
- :width="size"
5
- :height="size"
6
- :viewBox="`0 0 ${size} ${size}`"
7
- class="overflow-visible"
8
- >
9
- <!-- Colored segments with FLAT ends and visible gaps -->
10
- <path
11
- v-for="seg in segments"
12
- :key="seg.key"
13
- :d="createArcPath(seg.tRange[0], seg.tRange[1])"
14
- fill="none"
15
- :stroke="seg.color"
16
- :stroke-width="strokeWidth"
17
- stroke-linecap="butt"
18
- />
19
- <!-- Indicator circle on the active segment -->
20
- <circle
21
- :cx="indicatorX"
22
- :cy="indicatorY"
23
- :r="indicatorRadius"
24
- fill="#ffffff"
25
- :stroke="activeSeg.color"
26
- :stroke-width="indicatorStroke"
27
- />
28
- </svg>
29
- <!-- LEVEL text centered inside the gauge box -->
30
- <div
31
- class="absolute left-1/2 font-semibold text-center"
32
- :style="{
33
- top: '50%',
34
- transform: 'translate(-50%, -50%)',
35
- color: colors[level],
36
- fontSize: `${levelSize}px`,
37
- lineHeight: 1.1,
38
- }"
39
- >
40
- {{ level }}
41
- </div>
42
- </div>
43
- </template>
44
-
45
- <script setup lang="ts">
46
- import { computed, defineProps, toRefs } from 'vue';
47
-
48
- type Level = 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
49
-
50
- const props = defineProps({
51
- value: { type: Number, required: true },
52
- level: { type: String as () => Level, required: true },
53
- size: { type: Number, default: 240 },
54
- gapDegrees: { type: Number, default: 10 },
55
- thicknessRatio: { type: Number, default: 0.09 },
56
- snapToSegmentCenter: { type: Boolean, default: false },
57
- });
58
-
59
- const { value, level, size, gapDegrees, thicknessRatio, snapToSegmentCenter } = toRefs(props);
60
-
61
- const colors: Record<Level, string> = {
62
- LOW: 'var(--success-500)',
63
- MEDIUM: 'var(--warning-400)',
64
- HIGH: 'var(--warning-600)',
65
- CRITICAL: 'var(--error-500)',
66
- };
67
-
68
- const order: Level[] = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
69
- const valueRanges: [number, number][] = [
70
- [0, 25],
71
- [25, 50],
72
- [50, 75],
73
- [75, 100.0001],
74
- ];
75
-
76
- const n = 4;
77
- const gapT = computed(() => Math.max(0, Math.min(gapDegrees.value, 30)) / 180);
78
- const totalGapT = computed(() => gapT.value * (n - 1));
79
- const segT = computed(() => (1 - totalGapT.value) / n);
80
-
81
- const segments = computed(() =>
82
- order.map((key, i) => {
83
- const startT = i * (segT.value + gapT.value);
84
- const endT = startT + segT.value;
85
- return {
86
- key,
87
- color: colors[key],
88
- range: valueRanges[i],
89
- tRange: [startT, endT],
90
- };
91
- })
92
- );
93
-
94
- const strokeWidth = computed(() => Math.max(4, size.value * thicknessRatio.value));
95
- const radius = computed(() => size.value * 0.45);
96
- const centerX = computed(() => size.value / 2);
97
- const centerY = computed(() => size.value * 0.65);
98
-
99
- const pct = computed(() => Math.min(Math.max(value.value, 0), 100));
100
-
101
- const activeSeg = computed(() =>
102
- segments.value.find((s) => s.key === level.value) ||
103
- segments.value.find((s) => pct.value >= s.range[0] && pct.value < s.range[1]) ||
104
- segments.value[0]
105
- );
106
-
107
- function createArcPath(startT: number, endT: number, segmentsCount = 42) {
108
- const pts: string[] = [];
109
- const span = Math.max(0, Math.min(1, endT) - Math.max(0, startT));
110
- const steps = Math.max(2, Math.round(segmentsCount * span));
111
- for (let i = 0; i <= steps; i++) {
112
- const t = startT + ((endT - startT) * i) / steps;
113
- const ang = Math.PI * (1 - t);
114
- const x = centerX.value + radius.value * Math.cos(ang);
115
- const y = centerY.value - radius.value * Math.sin(ang);
116
- pts.push(`${x} ${y}`);
117
- }
118
- return `M ${pts[0]} L ${pts.slice(1).join(' ')}`;
119
- }
120
-
121
- const [vMin, vMax] = computed(() => activeSeg.value.range).value;
122
- const pctForIndicator = computed(() =>
123
- snapToSegmentCenter.value
124
- ? (vMin + vMax) / 2
125
- : Math.min(Math.max(pct.value, vMin), vMax)
126
- );
127
- const local = computed(() => (pctForIndicator.value - vMin) / (vMax - vMin));
128
- const [tMin, tMax] = computed(() => activeSeg.value.tRange).value;
129
- const tIndicator = computed(() => tMin + (tMax - tMin) * local.value);
130
- const angIndicator = computed(() => Math.PI * (1 - tIndicator.value));
131
- const indicatorX = computed(() => centerX.value + radius.value * Math.cos(angIndicator.value));
132
- const indicatorY = computed(() => centerY.value - radius.value * Math.sin(angIndicator.value));
133
-
134
- const levelSize = computed(() => size.value * 0.12);
135
- const indicatorRadius = computed(() => Math.max(8, size.value * 0.04));
136
- const indicatorStroke = computed(() => Math.max(2.5, size.value * 0.015));
137
- </script>
1
+ <template>
2
+ <div :class="['relative', $attrs.class]" :style="{ width: `${size}px`, height: `${size}px` }">
3
+ <svg
4
+ :width="size"
5
+ :height="size"
6
+ :viewBox="`0 0 ${size} ${size}`"
7
+ class="overflow-visible"
8
+ >
9
+ <!-- Colored segments with FLAT ends and visible gaps -->
10
+ <path
11
+ v-for="seg in segments"
12
+ :key="seg.key"
13
+ :d="createArcPath(seg.tRange[0], seg.tRange[1])"
14
+ fill="none"
15
+ :stroke="seg.color"
16
+ :stroke-width="strokeWidth"
17
+ stroke-linecap="butt"
18
+ />
19
+ <!-- Indicator circle on the active segment -->
20
+ <circle
21
+ :cx="indicatorX"
22
+ :cy="indicatorY"
23
+ :r="indicatorRadius"
24
+ fill="#ffffff"
25
+ :stroke="activeSeg.color"
26
+ :stroke-width="indicatorStroke"
27
+ />
28
+ </svg>
29
+ <!-- LEVEL text centered inside the gauge box -->
30
+ <div
31
+ class="absolute left-1/2 font-semibold text-center"
32
+ :style="{
33
+ top: '50%',
34
+ transform: 'translate(-50%, -50%)',
35
+ color: colors[level],
36
+ fontSize: `${levelSize}px`,
37
+ lineHeight: 1.1,
38
+ }"
39
+ >
40
+ {{ level }}
41
+ </div>
42
+ </div>
43
+ </template>
44
+
45
+ <script setup lang="ts">
46
+ import { computed, defineProps, toRefs } from 'vue';
47
+
48
+ type Level = 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
49
+
50
+ const props = defineProps({
51
+ value: { type: Number, required: true },
52
+ level: { type: String as () => Level, required: true },
53
+ size: { type: Number, default: 240 },
54
+ gapDegrees: { type: Number, default: 10 },
55
+ thicknessRatio: { type: Number, default: 0.09 },
56
+ snapToSegmentCenter: { type: Boolean, default: false },
57
+ });
58
+
59
+ const { value, level, size, gapDegrees, thicknessRatio, snapToSegmentCenter } = toRefs(props);
60
+
61
+ const colors: Record<Level, string> = {
62
+ LOW: 'var(--success-500)',
63
+ MEDIUM: 'var(--warning-400)',
64
+ HIGH: 'var(--warning-600)',
65
+ CRITICAL: 'var(--error-500)',
66
+ };
67
+
68
+ const order: Level[] = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
69
+ const valueRanges: [number, number][] = [
70
+ [0, 25],
71
+ [25, 50],
72
+ [50, 75],
73
+ [75, 100.0001],
74
+ ];
75
+
76
+ const n = 4;
77
+ const gapT = computed(() => Math.max(0, Math.min(gapDegrees.value, 30)) / 180);
78
+ const totalGapT = computed(() => gapT.value * (n - 1));
79
+ const segT = computed(() => (1 - totalGapT.value) / n);
80
+
81
+ const segments = computed(() =>
82
+ order.map((key, i) => {
83
+ const startT = i * (segT.value + gapT.value);
84
+ const endT = startT + segT.value;
85
+ return {
86
+ key,
87
+ color: colors[key],
88
+ range: valueRanges[i],
89
+ tRange: [startT, endT],
90
+ };
91
+ })
92
+ );
93
+
94
+ const strokeWidth = computed(() => Math.max(4, size.value * thicknessRatio.value));
95
+ const radius = computed(() => size.value * 0.45);
96
+ const centerX = computed(() => size.value / 2);
97
+ const centerY = computed(() => size.value * 0.65);
98
+
99
+ const pct = computed(() => Math.min(Math.max(value.value, 0), 100));
100
+
101
+ const activeSeg = computed(() =>
102
+ segments.value.find((s) => s.key === level.value) ||
103
+ segments.value.find((s) => pct.value >= s.range[0] && pct.value < s.range[1]) ||
104
+ segments.value[0]
105
+ );
106
+
107
+ function createArcPath(startT: number, endT: number, segmentsCount = 42) {
108
+ const pts: string[] = [];
109
+ const span = Math.max(0, Math.min(1, endT) - Math.max(0, startT));
110
+ const steps = Math.max(2, Math.round(segmentsCount * span));
111
+ for (let i = 0; i <= steps; i++) {
112
+ const t = startT + ((endT - startT) * i) / steps;
113
+ const ang = Math.PI * (1 - t);
114
+ const x = centerX.value + radius.value * Math.cos(ang);
115
+ const y = centerY.value - radius.value * Math.sin(ang);
116
+ pts.push(`${x} ${y}`);
117
+ }
118
+ return `M ${pts[0]} L ${pts.slice(1).join(' ')}`;
119
+ }
120
+
121
+ const [vMin, vMax] = computed(() => activeSeg.value.range).value;
122
+ const pctForIndicator = computed(() =>
123
+ snapToSegmentCenter.value
124
+ ? (vMin + vMax) / 2
125
+ : Math.min(Math.max(pct.value, vMin), vMax)
126
+ );
127
+ const local = computed(() => (pctForIndicator.value - vMin) / (vMax - vMin));
128
+ const [tMin, tMax] = computed(() => activeSeg.value.tRange).value;
129
+ const tIndicator = computed(() => tMin + (tMax - tMin) * local.value);
130
+ const angIndicator = computed(() => Math.PI * (1 - tIndicator.value));
131
+ const indicatorX = computed(() => centerX.value + radius.value * Math.cos(angIndicator.value));
132
+ const indicatorY = computed(() => centerY.value - radius.value * Math.sin(angIndicator.value));
133
+
134
+ const levelSize = computed(() => size.value * 0.12);
135
+ const indicatorRadius = computed(() => Math.max(8, size.value * 0.04));
136
+ const indicatorStroke = computed(() => Math.max(2.5, size.value * 0.015));
137
+ </script>
package/src/ui/toggle.vue CHANGED
@@ -1,69 +1,69 @@
1
- <script setup lang="ts">
2
- import { computed, useAttrs } from 'vue';
3
- import { useVModel } from '@vueuse/core';
4
- import { cn } from './utils';
5
- import Label from './label.vue';
6
- import { Toggle } from '@/shadcn/toggle';
7
-
8
- const props = defineProps({
9
- modelValue: Boolean,
10
- variant: {
11
- type: String,
12
- default: 'default',
13
- validator: (v: string) => ['default', 'outline'].includes(v),
14
- },
15
- size: {
16
- type: String,
17
- default: 'default',
18
- validator: (v: string) => ['default', 'sm', 'lg'].includes(v),
19
- },
20
- label: String,
21
- id: String,
22
- disabled: Boolean,
23
- ariaLabel: String,
24
- class: String,
25
- })
26
-
27
- const emit = defineEmits(['update:modelValue']);
28
- const attrs = useAttrs();
29
- const pressed = useVModel(props, 'modelValue', emit);
30
-
31
- const baseClass =
32
- 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap';
33
-
34
- const variantClasses = {
35
- default: 'bg-transparent',
36
- outline: 'border bg-border bg-transparent hover:bg-accent hover:text-accent-foreground',
37
- };
38
- const sizeClasses = {
39
- default: 'h-9 px-2 min-w-9',
40
- sm: 'h-8 px-1.5 min-w-8',
41
- lg: 'h-10 px-2.5 min-w-10',
42
- };
43
-
44
- const toggleClass = computed(() =>
45
- cn(
46
- baseClass,
47
- variantClasses[props.variant],
48
- sizeClasses[props.size],
49
- props.class,
50
- ),
51
- );
52
- </script>
53
-
54
- <template>
55
- <div class="flex items-center gap-2">
56
- <Toggle
57
- :id="id"
58
- data-slot="toggle"
59
- :class="toggleClass"
60
- :aria-label="ariaLabel"
61
- :disabled="disabled"
62
- v-bind="attrs"
63
- v-model="pressed"
64
- >
65
- <slot />
66
- </Toggle>
67
- <Label v-if="label" :for="id">{{ label }}</Label>
68
- </div>
69
- </template>
1
+ <script setup lang="ts">
2
+ import { computed, useAttrs } from 'vue';
3
+ import { useVModel } from '@vueuse/core';
4
+ import { cn } from './utils';
5
+ import Label from './label.vue';
6
+ import { Toggle } from '@/shadcn/toggle';
7
+
8
+ const props = defineProps({
9
+ modelValue: Boolean,
10
+ variant: {
11
+ type: String,
12
+ default: 'default',
13
+ validator: (v: string) => ['default', 'outline'].includes(v),
14
+ },
15
+ size: {
16
+ type: String,
17
+ default: 'default',
18
+ validator: (v: string) => ['default', 'sm', 'lg'].includes(v),
19
+ },
20
+ label: String,
21
+ id: String,
22
+ disabled: Boolean,
23
+ ariaLabel: String,
24
+ class: String,
25
+ })
26
+
27
+ const emit = defineEmits(['update:modelValue']);
28
+ const attrs = useAttrs();
29
+ const pressed = useVModel(props, 'modelValue', emit);
30
+
31
+ const baseClass =
32
+ 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*=\'size-\'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap';
33
+
34
+ const variantClasses = {
35
+ default: 'bg-transparent',
36
+ outline: 'border bg-border bg-transparent hover:bg-accent hover:text-accent-foreground',
37
+ };
38
+ const sizeClasses = {
39
+ default: 'h-9 px-2 min-w-9',
40
+ sm: 'h-8 px-1.5 min-w-8',
41
+ lg: 'h-10 px-2.5 min-w-10',
42
+ };
43
+
44
+ const toggleClass = computed(() =>
45
+ cn(
46
+ baseClass,
47
+ variantClasses[props.variant],
48
+ sizeClasses[props.size],
49
+ props.class,
50
+ ),
51
+ );
52
+ </script>
53
+
54
+ <template>
55
+ <div class="flex items-center gap-2">
56
+ <Toggle
57
+ :id="id"
58
+ data-slot="toggle"
59
+ :class="toggleClass"
60
+ :aria-label="ariaLabel"
61
+ :disabled="disabled"
62
+ v-bind="attrs"
63
+ v-model="pressed"
64
+ >
65
+ <slot />
66
+ </Toggle>
67
+ <Label v-if="label" :for="id">{{ label }}</Label>
68
+ </div>
69
+ </template>
@@ -1,52 +1,52 @@
1
- <script setup lang="ts">
2
- import { defineProps, useSlots } from 'vue';
3
- import { cn } from './utils';
4
- import { TooltipContent } from '@/shadcn/tooltip';
5
-
6
- const props = defineProps({
7
- sideOffset: { type: Number, default: 0 },
8
- variant: { type: String, default: 'default' },
9
- class: { type: String, default: '' },
10
- });
11
- const slots = useSlots();
12
-
13
- const tooltipVariants = {
14
- default: 'bg-primary text-primary-foreground',
15
- secondary: 'bg-secondary text-secondary-foreground',
16
- outline: 'bg-popover text-popover-foreground border border-border shadow-md',
17
- 'soft-success': 'bg-green-50 text-green-700 border border-green-200 dark:bg-green-950 dark:text-green-300 dark:border-green-800',
18
- 'soft-warning': 'bg-yellow-50 text-yellow-700 border border-yellow-200 dark:bg-yellow-950 dark:text-yellow-300 dark:border-yellow-800',
19
- 'soft-danger': 'bg-red-50 text-red-700 border border-red-200 dark:bg-red-950 dark:text-red-300 dark:border-red-800',
20
- 'soft-info': 'bg-blue-50 text-blue-700 border border-blue-200 dark:bg-blue-950 dark:text-blue-300 dark:border-blue-800',
21
- 'soft-primary': 'bg-cyan-50 text-cyan-700 border border-cyan-200 dark:bg-cyan-950 dark:text-cyan-300 dark:border-cyan-800',
22
- 'soft-purple': 'bg-purple-50 text-purple-700 border border-purple-200 dark:bg-purple-950 dark:text-purple-300 dark:border-purple-800',
23
- 'soft-pink': 'bg-pink-50 text-pink-700 border border-pink-200 dark:bg-pink-950 dark:text-pink-300 dark:border-pink-800',
24
- 'soft-indigo': 'bg-indigo-50 text-indigo-700 border border-indigo-200 dark:bg-indigo-950 dark:text-indigo-300 dark:border-indigo-800',
25
- 'soft-orange': 'bg-orange-50 text-orange-700 border border-orange-200 dark:bg-orange-950 dark:text-orange-300 dark:border-orange-800',
26
- 'soft-teal': 'bg-teal-50 text-teal-700 border border-teal-200 dark:bg-teal-950 dark:text-teal-300 dark:border-teal-800',
27
- 'soft-neutral': 'bg-stone-50 text-stone-700 border border-stone-200 dark:bg-stone-900 dark:text-stone-300 dark:border-stone-700',
28
- };
29
- const tooltipArrowVariants = {
30
- default: 'bg-primary fill-primary',
31
- secondary: 'bg-secondary fill-secondary',
32
- outline: 'bg-popover fill-popover border border-border',
33
- 'soft-success': 'bg-green-50 fill-green-50 border border-green-200 dark:bg-green-950 dark:fill-green-950 dark:border-green-800',
34
- 'soft-warning': 'bg-yellow-50 fill-yellow-50 border border-yellow-200 dark:bg-yellow-950 dark:fill-yellow-950 dark:border-yellow-800',
35
- 'soft-danger': 'bg-red-50 fill-red-50 border border-red-200 dark:bg-red-950 dark:fill-red-950 dark:border-red-800',
36
- 'soft-info': 'bg-blue-50 fill-blue-50 border border-blue-200 dark:bg-blue-950 dark:fill-blue-950 dark:border-blue-800',
37
- 'soft-primary': 'bg-cyan-50 fill-cyan-50 border border-cyan-200 dark:bg-cyan-950 dark:fill-cyan-950 dark:border-cyan-800',
38
- 'soft-purple': 'bg-purple-50 fill-purple-50 border border-purple-200 dark:bg-purple-950 dark:fill-purple-950 dark:border-purple-800',
39
- 'soft-pink': 'bg-pink-50 fill-pink-50 border border-pink-200 dark:bg-pink-950 dark:fill-pink-950 dark:border-pink-800',
40
- 'soft-indigo': 'bg-indigo-50 fill-indigo-50 border border-indigo-200 dark:bg-indigo-950 dark:fill-indigo-950 dark:border-indigo-800',
41
- 'soft-orange': 'bg-orange-50 fill-orange-50 border border-orange-200 dark:bg-orange-950 dark:fill-orange-950 dark:border-orange-800',
42
- 'soft-teal': 'bg-teal-50 fill-teal-50 border border-teal-200 dark:bg-teal-950 dark:fill-teal-950 dark:border-teal-800',
43
- 'soft-neutral': 'bg-stone-50 fill-stone-50 border border-stone-200 dark:bg-stone-900 dark:fill-stone-900 dark:border-stone-700',
44
- };
45
- </script>
46
- <template>
47
- <TooltipContent data-slot="tooltip-content" :side-offset="props.sideOffset"
48
- :class="cn(tooltipVariants[props.variant] || tooltipVariants.default, props.class, 'p-3 animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance')"
49
- v-bind="props">
50
- <slot />
51
- </TooltipContent>
52
- </template>
1
+ <script setup lang="ts">
2
+ import { defineProps, useSlots } from 'vue';
3
+ import { cn } from './utils';
4
+ import { TooltipContent } from '@/shadcn/tooltip';
5
+
6
+ const props = defineProps({
7
+ sideOffset: { type: Number, default: 0 },
8
+ variant: { type: String, default: 'default' },
9
+ class: { type: String, default: '' },
10
+ });
11
+ const slots = useSlots();
12
+
13
+ const tooltipVariants = {
14
+ default: 'bg-primary text-primary-foreground',
15
+ secondary: 'bg-secondary text-secondary-foreground',
16
+ outline: 'bg-popover text-popover-foreground border border-border shadow-md',
17
+ 'soft-success': 'bg-green-50 text-green-700 border border-green-200 dark:bg-green-950 dark:text-green-300 dark:border-green-800',
18
+ 'soft-warning': 'bg-yellow-50 text-yellow-700 border border-yellow-200 dark:bg-yellow-950 dark:text-yellow-300 dark:border-yellow-800',
19
+ 'soft-danger': 'bg-red-50 text-red-700 border border-red-200 dark:bg-red-950 dark:text-red-300 dark:border-red-800',
20
+ 'soft-info': 'bg-blue-50 text-blue-700 border border-blue-200 dark:bg-blue-950 dark:text-blue-300 dark:border-blue-800',
21
+ 'soft-primary': 'bg-cyan-50 text-cyan-700 border border-cyan-200 dark:bg-cyan-950 dark:text-cyan-300 dark:border-cyan-800',
22
+ 'soft-purple': 'bg-purple-50 text-purple-700 border border-purple-200 dark:bg-purple-950 dark:text-purple-300 dark:border-purple-800',
23
+ 'soft-pink': 'bg-pink-50 text-pink-700 border border-pink-200 dark:bg-pink-950 dark:text-pink-300 dark:border-pink-800',
24
+ 'soft-indigo': 'bg-indigo-50 text-indigo-700 border border-indigo-200 dark:bg-indigo-950 dark:text-indigo-300 dark:border-indigo-800',
25
+ 'soft-orange': 'bg-orange-50 text-orange-700 border border-orange-200 dark:bg-orange-950 dark:text-orange-300 dark:border-orange-800',
26
+ 'soft-teal': 'bg-teal-50 text-teal-700 border border-teal-200 dark:bg-teal-950 dark:text-teal-300 dark:border-teal-800',
27
+ 'soft-neutral': 'bg-stone-50 text-stone-700 border border-stone-200 dark:bg-stone-900 dark:text-stone-300 dark:border-stone-700',
28
+ };
29
+ const tooltipArrowVariants = {
30
+ default: 'bg-primary fill-primary',
31
+ secondary: 'bg-secondary fill-secondary',
32
+ outline: 'bg-popover fill-popover border border-border',
33
+ 'soft-success': 'bg-green-50 fill-green-50 border border-green-200 dark:bg-green-950 dark:fill-green-950 dark:border-green-800',
34
+ 'soft-warning': 'bg-yellow-50 fill-yellow-50 border border-yellow-200 dark:bg-yellow-950 dark:fill-yellow-950 dark:border-yellow-800',
35
+ 'soft-danger': 'bg-red-50 fill-red-50 border border-red-200 dark:bg-red-950 dark:fill-red-950 dark:border-red-800',
36
+ 'soft-info': 'bg-blue-50 fill-blue-50 border border-blue-200 dark:bg-blue-950 dark:fill-blue-950 dark:border-blue-800',
37
+ 'soft-primary': 'bg-cyan-50 fill-cyan-50 border border-cyan-200 dark:bg-cyan-950 dark:fill-cyan-950 dark:border-cyan-800',
38
+ 'soft-purple': 'bg-purple-50 fill-purple-50 border border-purple-200 dark:bg-purple-950 dark:fill-purple-950 dark:border-purple-800',
39
+ 'soft-pink': 'bg-pink-50 fill-pink-50 border border-pink-200 dark:bg-pink-950 dark:fill-pink-950 dark:border-pink-800',
40
+ 'soft-indigo': 'bg-indigo-50 fill-indigo-50 border border-indigo-200 dark:bg-indigo-950 dark:fill-indigo-950 dark:border-indigo-800',
41
+ 'soft-orange': 'bg-orange-50 fill-orange-50 border border-orange-200 dark:bg-orange-950 dark:fill-orange-950 dark:border-orange-800',
42
+ 'soft-teal': 'bg-teal-50 fill-teal-50 border border-teal-200 dark:bg-teal-950 dark:fill-teal-950 dark:border-teal-800',
43
+ 'soft-neutral': 'bg-stone-50 fill-stone-50 border border-stone-200 dark:bg-stone-900 dark:fill-stone-900 dark:border-stone-700',
44
+ };
45
+ </script>
46
+ <template>
47
+ <TooltipContent data-slot="tooltip-content" :side-offset="props.sideOffset"
48
+ :class="cn(tooltipVariants[props.variant] || tooltipVariants.default, props.class, 'p-3 animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-fit rounded-md px-3 py-1.5 text-xs text-balance')"
49
+ v-bind="props">
50
+ <slot />
51
+ </TooltipContent>
52
+ </template>
@@ -1,13 +1,13 @@
1
- <script setup lang="ts">
2
- import { useAttrs, defineProps } from 'vue';
3
- import { TooltipProvider } from '@/shadcn/tooltip';
4
- const props = defineProps({
5
- delayDuration: { type: Number, default: 0 },
6
- });
7
- const attrs = useAttrs();
8
- </script>
9
- <template>
10
- <TooltipProvider :delay-duration="props.delayDuration" v-bind="attrs">
11
- <slot />
12
- </TooltipProvider>
13
- </template>
1
+ <script setup lang="ts">
2
+ import { useAttrs, defineProps } from 'vue';
3
+ import { TooltipProvider } from '@/shadcn/tooltip';
4
+ const props = defineProps({
5
+ delayDuration: { type: Number, default: 0 },
6
+ });
7
+ const attrs = useAttrs();
8
+ </script>
9
+ <template>
10
+ <TooltipProvider :delay-duration="props.delayDuration" v-bind="attrs">
11
+ <slot />
12
+ </TooltipProvider>
13
+ </template>
@@ -1,9 +1,9 @@
1
- <script setup lang="ts">
2
- import { useAttrs } from 'vue';
3
- const attrs = useAttrs();
4
- </script>
5
- <template>
6
- <div data-slot="tooltip" v-bind="attrs">
7
- <slot />
8
- </div>
9
- </template>
1
+ <script setup lang="ts">
2
+ import { useAttrs } from 'vue';
3
+ const attrs = useAttrs();
4
+ </script>
5
+ <template>
6
+ <div data-slot="tooltip" v-bind="attrs">
7
+ <slot />
8
+ </div>
9
+ </template>
@@ -1,13 +1,13 @@
1
-
2
- <script setup lang="ts">
3
- import TooltipTrigger from "@/shadcn/tooltip/TooltipTrigger.vue";
4
- import { defineProps } from "vue";
5
- const props = defineProps<{ asChild?: boolean }>();
6
- </script>
7
-
8
- <template>
9
- <slot v-if="props.asChild" />
10
- <TooltipTrigger v-else data-slot="tooltip-trigger" v-bind="props">
11
- <slot />
12
- </TooltipTrigger>
13
- </template>
1
+
2
+ <script setup lang="ts">
3
+ import TooltipTrigger from "@/shadcn/tooltip/TooltipTrigger.vue";
4
+ import { defineProps } from "vue";
5
+ const props = defineProps<{ asChild?: boolean }>();
6
+ </script>
7
+
8
+ <template>
9
+ <slot v-if="props.asChild" />
10
+ <TooltipTrigger v-else data-slot="tooltip-trigger" v-bind="props">
11
+ <slot />
12
+ </TooltipTrigger>
13
+ </template>
@@ -1,22 +1,22 @@
1
- <script setup lang="ts">
2
- import { defineProps, useSlots } from 'vue';
3
- import TooltipProvider from './tooltip-provider.vue';
4
- import { Tooltip } from '@/shadcn/tooltip';
5
- import { cn } from './utils';
6
-
7
- const props = defineProps({
8
- sideOffset: { type: Number, default: 0 },
9
- variant: { type: String, default: 'default' },
10
- class: { type: String, default: '' },
11
- delayDuration: { type: Number, default: 0 },
12
- });
13
- const slots = useSlots();
14
- </script>
15
-
16
- <template>
17
- <TooltipProvider :delay-duration="props.delayDuration">
18
- <Tooltip data-slot="tooltip" v-bind="props">
19
- <slot />
20
- </Tooltip>
21
- </TooltipProvider>
22
- </template>
1
+ <script setup lang="ts">
2
+ import { defineProps, useSlots } from 'vue';
3
+ import TooltipProvider from './tooltip-provider.vue';
4
+ import { Tooltip } from '@/shadcn/tooltip';
5
+ import { cn } from './utils';
6
+
7
+ const props = defineProps({
8
+ sideOffset: { type: Number, default: 0 },
9
+ variant: { type: String, default: 'default' },
10
+ class: { type: String, default: '' },
11
+ delayDuration: { type: Number, default: 0 },
12
+ });
13
+ const slots = useSlots();
14
+ </script>
15
+
16
+ <template>
17
+ <TooltipProvider :delay-duration="props.delayDuration">
18
+ <Tooltip data-slot="tooltip" v-bind="props">
19
+ <slot />
20
+ </Tooltip>
21
+ </TooltipProvider>
22
+ </template>