app-sidebar.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. "use client"
  2. import { ChevronUp, Home, FileText, Settings } from "lucide-react"
  3. import {
  4. DropdownMenu,
  5. DropdownMenuContent,
  6. DropdownMenuItem,
  7. DropdownMenuTrigger,
  8. } from "@/components/ui/dropdown-menu"
  9. import {
  10. Sidebar,
  11. SidebarContent,
  12. SidebarFooter,
  13. SidebarGroup,
  14. SidebarGroupContent,
  15. SidebarGroupLabel,
  16. SidebarHeader,
  17. SidebarMenu,
  18. SidebarMenuButton,
  19. SidebarMenuItem,
  20. SidebarProvider,
  21. SidebarTrigger,
  22. } from "@/components/ui/sidebar"
  23. import { ModeToggle } from "@/components/mode-toggle"
  24. // Menu items
  25. const items = [
  26. {
  27. title: "Inicio",
  28. url: "/",
  29. icon: Home,
  30. },
  31. {
  32. title: "Factura",
  33. url: "/factura",
  34. icon: FileText,
  35. },
  36. {
  37. title: "Configuración",
  38. url: "#",
  39. icon: Settings,
  40. },
  41. ]
  42. export function AppSidebar() {
  43. return (
  44. <Sidebar>
  45. <SidebarHeader>
  46. <SidebarMenu>
  47. <SidebarMenuItem>
  48. <SidebarMenuButton size="lg" className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground">
  49. <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
  50. <FileText className="size-4" />
  51. </div>
  52. <div className="grid flex-1 text-left text-sm leading-tight">
  53. <span className="truncate font-semibold">Sumire</span>
  54. <span className="truncate text-xs">Sistema de Facturación</span>
  55. </div>
  56. </SidebarMenuButton>
  57. </SidebarMenuItem>
  58. </SidebarMenu>
  59. </SidebarHeader>
  60. <SidebarContent>
  61. <SidebarGroup>
  62. <SidebarGroupLabel>Navegación</SidebarGroupLabel>
  63. <SidebarGroupContent>
  64. <SidebarMenu>
  65. {items.map((item) => (
  66. <SidebarMenuItem key={item.title}>
  67. <SidebarMenuButton asChild>
  68. <a href={item.url}>
  69. <item.icon />
  70. <span>{item.title}</span>
  71. </a>
  72. </SidebarMenuButton>
  73. </SidebarMenuItem>
  74. ))}
  75. </SidebarMenu>
  76. </SidebarGroupContent>
  77. </SidebarGroup>
  78. </SidebarContent>
  79. <SidebarFooter>
  80. <SidebarMenu>
  81. <SidebarMenuItem>
  82. <div className="flex items-center justify-between w-full px-2 py-1">
  83. <div className="grid flex-1 text-left text-sm leading-tight">
  84. <span className="truncate font-semibold">Tema</span>
  85. <span className="truncate text-xs">Cambiar modo</span>
  86. </div>
  87. <ModeToggle />
  88. </div>
  89. </SidebarMenuItem>
  90. <SidebarMenuItem>
  91. <DropdownMenu>
  92. <DropdownMenuTrigger asChild>
  93. <SidebarMenuButton
  94. size="sm"
  95. className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
  96. >
  97. <div className="grid flex-1 text-left text-sm leading-tight">
  98. <span className="truncate font-semibold">Usuario</span>
  99. <span className="truncate text-xs">usuario@ejemplo.com</span>
  100. </div>
  101. <ChevronUp className="ml-auto transition-transform group-data-[state=open]/dropdown-menu:rotate-180" />
  102. </SidebarMenuButton>
  103. </DropdownMenuTrigger>
  104. <DropdownMenuContent
  105. side="top"
  106. className="w-[--radix-popper-anchor-width]"
  107. >
  108. <DropdownMenuItem>
  109. <span>Mi Cuenta</span>
  110. </DropdownMenuItem>
  111. <DropdownMenuItem>
  112. <span>Configuración</span>
  113. </DropdownMenuItem>
  114. <DropdownMenuItem>
  115. <span>Cerrar Sesión</span>
  116. </DropdownMenuItem>
  117. </DropdownMenuContent>
  118. </DropdownMenu>
  119. </SidebarMenuItem>
  120. </SidebarMenu>
  121. </SidebarFooter>
  122. </Sidebar>
  123. )
  124. }