index.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import type { VariantProps } from "class-variance-authority"
  2. import type { HTMLAttributes } from "vue"
  3. import { cva } from "class-variance-authority"
  4. export interface SidebarProps {
  5. side?: "left" | "right"
  6. variant?: "sidebar" | "floating" | "inset"
  7. collapsible?: "offcanvas" | "icon" | "none"
  8. class?: HTMLAttributes["class"]
  9. }
  10. export { default as Sidebar } from "./Sidebar.vue"
  11. export { default as SidebarContent } from "./SidebarContent.vue"
  12. export { default as SidebarFooter } from "./SidebarFooter.vue"
  13. export { default as SidebarGroup } from "./SidebarGroup.vue"
  14. export { default as SidebarGroupAction } from "./SidebarGroupAction.vue"
  15. export { default as SidebarGroupContent } from "./SidebarGroupContent.vue"
  16. export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue"
  17. export { default as SidebarHeader } from "./SidebarHeader.vue"
  18. export { default as SidebarInput } from "./SidebarInput.vue"
  19. export { default as SidebarInset } from "./SidebarInset.vue"
  20. export { default as SidebarMenu } from "./SidebarMenu.vue"
  21. export { default as SidebarMenuAction } from "./SidebarMenuAction.vue"
  22. export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue"
  23. export { default as SidebarMenuButton } from "./SidebarMenuButton.vue"
  24. export { default as SidebarMenuItem } from "./SidebarMenuItem.vue"
  25. export { default as SidebarMenuSkeleton } from "./SidebarMenuSkeleton.vue"
  26. export { default as SidebarMenuSub } from "./SidebarMenuSub.vue"
  27. export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue"
  28. export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue"
  29. export { default as SidebarProvider } from "./SidebarProvider.vue"
  30. export { default as SidebarRail } from "./SidebarRail.vue"
  31. export { default as SidebarSeparator } from "./SidebarSeparator.vue"
  32. export { default as SidebarTrigger } from "./SidebarTrigger.vue"
  33. export { useSidebar } from "./utils"
  34. export const sidebarMenuButtonVariants = cva(
  35. "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",
  36. {
  37. variants: {
  38. variant: {
  39. default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
  40. outline:
  41. "bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]",
  42. },
  43. size: {
  44. default: "h-8 text-sm",
  45. sm: "h-7 text-xs",
  46. lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
  47. },
  48. },
  49. defaultVariants: {
  50. variant: "default",
  51. size: "default",
  52. },
  53. },
  54. )
  55. export type SidebarMenuButtonVariants = VariantProps<typeof sidebarMenuButtonVariants>