diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php new file mode 100644 index 0000000..3bb774d --- /dev/null +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -0,0 +1,15 @@ +user()?->update(['last_login_at' => now()]); return redirect() - ->intended(route('home')) + ->intended(route('admin.dashboard')) ->with('success', 'Berhasil masuk. Selamat datang kembali!'); } } diff --git a/app/Http/Controllers/Auth/LogoutController.php b/app/Http/Controllers/Auth/LogoutController.php new file mode 100644 index 0000000..998eeee --- /dev/null +++ b/app/Http/Controllers/Auth/LogoutController.php @@ -0,0 +1,23 @@ +session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect() + ->route('login') + ->with('success', 'Anda berhasil keluar.'); + } +} diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index e03b7cd..3bbf7d8 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -45,6 +45,8 @@ public function share(Request $request): array 'success' => $request->session()->get('success'), 'error' => $request->session()->get('error'), ], + 'sidebarOpen' => ! $request->hasCookie('sidebar_state') + || $request->cookie('sidebar_state') === 'true', ]; } } diff --git a/resources/js/components/AppSidebar.vue b/resources/js/components/AppSidebar.vue new file mode 100644 index 0000000..6ad3e3f --- /dev/null +++ b/resources/js/components/AppSidebar.vue @@ -0,0 +1,57 @@ + + + + + + + + + + + {{ page.props.name }} + + + + + + + + + Menu + + + + + + + Dashboard + + + + + + + + + + diff --git a/resources/js/components/UserNav.vue b/resources/js/components/UserNav.vue new file mode 100644 index 0000000..62a3e87 --- /dev/null +++ b/resources/js/components/UserNav.vue @@ -0,0 +1,58 @@ + + + + + + + + {{ initials }} + + + + + + + + {{ user.username }} + + + {{ user.email }} + + + + + + + Keluar + + + + diff --git a/resources/js/components/ui/avatar/Avatar.vue b/resources/js/components/ui/avatar/Avatar.vue new file mode 100644 index 0000000..bb7e669 --- /dev/null +++ b/resources/js/components/ui/avatar/Avatar.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/avatar/AvatarFallback.vue b/resources/js/components/ui/avatar/AvatarFallback.vue new file mode 100644 index 0000000..16b588a --- /dev/null +++ b/resources/js/components/ui/avatar/AvatarFallback.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/avatar/AvatarImage.vue b/resources/js/components/ui/avatar/AvatarImage.vue new file mode 100644 index 0000000..24a8166 --- /dev/null +++ b/resources/js/components/ui/avatar/AvatarImage.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/resources/js/components/ui/avatar/index.ts b/resources/js/components/ui/avatar/index.ts new file mode 100644 index 0000000..cf0e003 --- /dev/null +++ b/resources/js/components/ui/avatar/index.ts @@ -0,0 +1,3 @@ +export { default as Avatar } from "./Avatar.vue" +export { default as AvatarFallback } from "./AvatarFallback.vue" +export { default as AvatarImage } from "./AvatarImage.vue" diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenu.vue b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue new file mode 100644 index 0000000..e1c9ee3 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenu.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue new file mode 100644 index 0000000..b73b18d --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue new file mode 100644 index 0000000..7c43014 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuContent.vue @@ -0,0 +1,39 @@ + + + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue new file mode 100644 index 0000000..da634ec --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuGroup.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue new file mode 100644 index 0000000..f56cae3 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuItem.vue @@ -0,0 +1,31 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue new file mode 100644 index 0000000..8bca83c --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuLabel.vue @@ -0,0 +1,23 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue new file mode 100644 index 0000000..fe82cad --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue new file mode 100644 index 0000000..503fa0c --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuRadioItem.vue @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue new file mode 100644 index 0000000..1b936c3 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSeparator.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue new file mode 100644 index 0000000..60be75c --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuShortcut.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue new file mode 100644 index 0000000..7472e77 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSub.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue new file mode 100644 index 0000000..d7c6b08 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSubContent.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue new file mode 100644 index 0000000..79a6479 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue new file mode 100644 index 0000000..75cd747 --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/DropdownMenuTrigger.vue @@ -0,0 +1,17 @@ + + + + + + + diff --git a/resources/js/components/ui/dropdown-menu/index.ts b/resources/js/components/ui/dropdown-menu/index.ts new file mode 100644 index 0000000..955fe3a --- /dev/null +++ b/resources/js/components/ui/dropdown-menu/index.ts @@ -0,0 +1,16 @@ +export { default as DropdownMenu } from "./DropdownMenu.vue" + +export { default as DropdownMenuCheckboxItem } from "./DropdownMenuCheckboxItem.vue" +export { default as DropdownMenuContent } from "./DropdownMenuContent.vue" +export { default as DropdownMenuGroup } from "./DropdownMenuGroup.vue" +export { default as DropdownMenuItem } from "./DropdownMenuItem.vue" +export { default as DropdownMenuLabel } from "./DropdownMenuLabel.vue" +export { default as DropdownMenuRadioGroup } from "./DropdownMenuRadioGroup.vue" +export { default as DropdownMenuRadioItem } from "./DropdownMenuRadioItem.vue" +export { default as DropdownMenuSeparator } from "./DropdownMenuSeparator.vue" +export { default as DropdownMenuShortcut } from "./DropdownMenuShortcut.vue" +export { default as DropdownMenuSub } from "./DropdownMenuSub.vue" +export { default as DropdownMenuSubContent } from "./DropdownMenuSubContent.vue" +export { default as DropdownMenuSubTrigger } from "./DropdownMenuSubTrigger.vue" +export { default as DropdownMenuTrigger } from "./DropdownMenuTrigger.vue" +export { DropdownMenuPortal } from "reka-ui" diff --git a/resources/js/components/ui/sheet/Sheet.vue b/resources/js/components/ui/sheet/Sheet.vue new file mode 100644 index 0000000..8522f84 --- /dev/null +++ b/resources/js/components/ui/sheet/Sheet.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetClose.vue b/resources/js/components/ui/sheet/SheetClose.vue new file mode 100644 index 0000000..39a942c --- /dev/null +++ b/resources/js/components/ui/sheet/SheetClose.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetContent.vue b/resources/js/components/ui/sheet/SheetContent.vue new file mode 100644 index 0000000..77fd5d4 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetContent.vue @@ -0,0 +1,62 @@ + + + + + + + + + + + Close + + + + diff --git a/resources/js/components/ui/sheet/SheetDescription.vue b/resources/js/components/ui/sheet/SheetDescription.vue new file mode 100644 index 0000000..6c8ba0a --- /dev/null +++ b/resources/js/components/ui/sheet/SheetDescription.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetFooter.vue b/resources/js/components/ui/sheet/SheetFooter.vue new file mode 100644 index 0000000..5fcf751 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetFooter.vue @@ -0,0 +1,16 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetHeader.vue b/resources/js/components/ui/sheet/SheetHeader.vue new file mode 100644 index 0000000..b6305ab --- /dev/null +++ b/resources/js/components/ui/sheet/SheetHeader.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetOverlay.vue b/resources/js/components/ui/sheet/SheetOverlay.vue new file mode 100644 index 0000000..220452a --- /dev/null +++ b/resources/js/components/ui/sheet/SheetOverlay.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetTitle.vue b/resources/js/components/ui/sheet/SheetTitle.vue new file mode 100644 index 0000000..889ae54 --- /dev/null +++ b/resources/js/components/ui/sheet/SheetTitle.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/SheetTrigger.vue b/resources/js/components/ui/sheet/SheetTrigger.vue new file mode 100644 index 0000000..41b121d --- /dev/null +++ b/resources/js/components/ui/sheet/SheetTrigger.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/resources/js/components/ui/sheet/index.ts b/resources/js/components/ui/sheet/index.ts new file mode 100644 index 0000000..7c70e5d --- /dev/null +++ b/resources/js/components/ui/sheet/index.ts @@ -0,0 +1,8 @@ +export { default as Sheet } from "./Sheet.vue" +export { default as SheetClose } from "./SheetClose.vue" +export { default as SheetContent } from "./SheetContent.vue" +export { default as SheetDescription } from "./SheetDescription.vue" +export { default as SheetFooter } from "./SheetFooter.vue" +export { default as SheetHeader } from "./SheetHeader.vue" +export { default as SheetTitle } from "./SheetTitle.vue" +export { default as SheetTrigger } from "./SheetTrigger.vue" diff --git a/resources/js/components/ui/sidebar/Sidebar.vue b/resources/js/components/ui/sidebar/Sidebar.vue new file mode 100644 index 0000000..b4699f8 --- /dev/null +++ b/resources/js/components/ui/sidebar/Sidebar.vue @@ -0,0 +1,96 @@ + + + + + + + + + + + Sidebar + Displays the mobile sidebar. + + + + + + + + + + + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarContent.vue b/resources/js/components/ui/sidebar/SidebarContent.vue new file mode 100644 index 0000000..bb6d9f1 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarContent.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarFooter.vue b/resources/js/components/ui/sidebar/SidebarFooter.vue new file mode 100644 index 0000000..20dd72f --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroup.vue b/resources/js/components/ui/sidebar/SidebarGroup.vue new file mode 100644 index 0000000..fbb4887 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupAction.vue b/resources/js/components/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 0000000..f5fa5eb --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,27 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupContent.vue b/resources/js/components/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 0000000..06e1a92 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarGroupLabel.vue b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 0000000..f5da130 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarHeader.vue b/resources/js/components/ui/sidebar/SidebarHeader.vue new file mode 100644 index 0000000..79cf883 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarInput.vue b/resources/js/components/ui/sidebar/SidebarInput.vue new file mode 100644 index 0000000..3afc5da --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarInput.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarInset.vue b/resources/js/components/ui/sidebar/SidebarInset.vue new file mode 100644 index 0000000..f46b43a --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarInset.vue @@ -0,0 +1,21 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenu.vue b/resources/js/components/ui/sidebar/SidebarMenu.vue new file mode 100644 index 0000000..e1dd39e --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuAction.vue b/resources/js/components/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 0000000..bdffdb7 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,35 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuBadge.vue b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 0000000..4321618 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,26 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuButton.vue b/resources/js/components/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 0000000..502d395 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + {{ tooltip }} + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 0000000..4b4ca3b --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuItem.vue b/resources/js/components/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 0000000..e2fda5b --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 0000000..b33812c --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,35 @@ + + + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSub.vue b/resources/js/components/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 0000000..81c2dab --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,22 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 0000000..457cfb6 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,36 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 0000000..d4374f6 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,18 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarProvider.vue b/resources/js/components/ui/sidebar/SidebarProvider.vue new file mode 100644 index 0000000..04ed975 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,82 @@ + + + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarRail.vue b/resources/js/components/ui/sidebar/SidebarRail.vue new file mode 100644 index 0000000..6d97202 --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarRail.vue @@ -0,0 +1,33 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarSeparator.vue b/resources/js/components/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 0000000..91170bc --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/resources/js/components/ui/sidebar/SidebarTrigger.vue b/resources/js/components/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 0000000..001478a --- /dev/null +++ b/resources/js/components/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,27 @@ + + + + + + Toggle Sidebar + + diff --git a/resources/js/components/ui/sidebar/index.ts b/resources/js/components/ui/sidebar/index.ts new file mode 100644 index 0000000..c865573 --- /dev/null +++ b/resources/js/components/ui/sidebar/index.ts @@ -0,0 +1,60 @@ +import type { VariantProps } from "class-variance-authority" +import type { HTMLAttributes } from "vue" +import { cva } from "class-variance-authority" + +export interface SidebarProps { + side?: "left" | "right" + variant?: "sidebar" | "floating" | "inset" + collapsible?: "offcanvas" | "icon" | "none" + class?: HTMLAttributes["class"] +} + +export { default as Sidebar } from "./Sidebar.vue" +export { default as SidebarContent } from "./SidebarContent.vue" +export { default as SidebarFooter } from "./SidebarFooter.vue" +export { default as SidebarGroup } from "./SidebarGroup.vue" +export { default as SidebarGroupAction } from "./SidebarGroupAction.vue" +export { default as SidebarGroupContent } from "./SidebarGroupContent.vue" +export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue" +export { default as SidebarHeader } from "./SidebarHeader.vue" +export { default as SidebarInput } from "./SidebarInput.vue" +export { default as SidebarInset } from "./SidebarInset.vue" +export { default as SidebarMenu } from "./SidebarMenu.vue" +export { default as SidebarMenuAction } from "./SidebarMenuAction.vue" +export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue" +export { default as SidebarMenuButton } from "./SidebarMenuButton.vue" +export { default as SidebarMenuItem } from "./SidebarMenuItem.vue" +export { default as SidebarMenuSkeleton } from "./SidebarMenuSkeleton.vue" +export { default as SidebarMenuSub } from "./SidebarMenuSub.vue" +export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue" +export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue" +export { default as SidebarProvider } from "./SidebarProvider.vue" +export { default as SidebarRail } from "./SidebarRail.vue" +export { default as SidebarSeparator } from "./SidebarSeparator.vue" +export { default as SidebarTrigger } from "./SidebarTrigger.vue" + +export { useSidebar } from "./utils" + +export const sidebarMenuButtonVariants = cva( + "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", + { + variants: { + variant: { + default: "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground", + outline: + "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]", + }, + size: { + default: "h-8 text-sm", + sm: "h-7 text-xs", + lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +) + +export type SidebarMenuButtonVariants = VariantProps diff --git a/resources/js/components/ui/sidebar/utils.ts b/resources/js/components/ui/sidebar/utils.ts new file mode 100644 index 0000000..6e57eeb --- /dev/null +++ b/resources/js/components/ui/sidebar/utils.ts @@ -0,0 +1,19 @@ +import type { ComputedRef, Ref } from "vue" +import { createContext } from "reka-ui" + +export const SIDEBAR_COOKIE_NAME = "sidebar_state" +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7 +export const SIDEBAR_WIDTH = "16rem" +export const SIDEBAR_WIDTH_MOBILE = "18rem" +export const SIDEBAR_WIDTH_ICON = "3rem" +export const SIDEBAR_KEYBOARD_SHORTCUT = "b" + +export const [useSidebar, provideSidebarContext] = createContext<{ + state: ComputedRef<"expanded" | "collapsed"> + open: Ref + setOpen: (value: boolean) => void + isMobile: Ref + openMobile: Ref + setOpenMobile: (value: boolean) => void + toggleSidebar: () => void +}>("Sidebar") diff --git a/resources/js/components/ui/skeleton/Skeleton.vue b/resources/js/components/ui/skeleton/Skeleton.vue new file mode 100644 index 0000000..0dadcef --- /dev/null +++ b/resources/js/components/ui/skeleton/Skeleton.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/resources/js/components/ui/skeleton/index.ts b/resources/js/components/ui/skeleton/index.ts new file mode 100644 index 0000000..e5ce72c --- /dev/null +++ b/resources/js/components/ui/skeleton/index.ts @@ -0,0 +1 @@ +export { default as Skeleton } from "./Skeleton.vue" diff --git a/resources/js/components/ui/tooltip/Tooltip.vue b/resources/js/components/ui/tooltip/Tooltip.vue new file mode 100644 index 0000000..2a393d6 --- /dev/null +++ b/resources/js/components/ui/tooltip/Tooltip.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/resources/js/components/ui/tooltip/TooltipContent.vue b/resources/js/components/ui/tooltip/TooltipContent.vue new file mode 100644 index 0000000..7954b14 --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipContent.vue @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/resources/js/components/ui/tooltip/TooltipProvider.vue b/resources/js/components/ui/tooltip/TooltipProvider.vue new file mode 100644 index 0000000..395927d --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipProvider.vue @@ -0,0 +1,14 @@ + + + + + + + diff --git a/resources/js/components/ui/tooltip/TooltipTrigger.vue b/resources/js/components/ui/tooltip/TooltipTrigger.vue new file mode 100644 index 0000000..3332950 --- /dev/null +++ b/resources/js/components/ui/tooltip/TooltipTrigger.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/resources/js/components/ui/tooltip/index.ts b/resources/js/components/ui/tooltip/index.ts new file mode 100644 index 0000000..8f8d514 --- /dev/null +++ b/resources/js/components/ui/tooltip/index.ts @@ -0,0 +1,4 @@ +export { default as Tooltip } from "./Tooltip.vue" +export { default as TooltipContent } from "./TooltipContent.vue" +export { default as TooltipProvider } from "./TooltipProvider.vue" +export { default as TooltipTrigger } from "./TooltipTrigger.vue" diff --git a/resources/js/layouts/AdminLayout.vue b/resources/js/layouts/AdminLayout.vue new file mode 100644 index 0000000..7993268 --- /dev/null +++ b/resources/js/layouts/AdminLayout.vue @@ -0,0 +1,38 @@ + + + + + + + + + + + {{ title }} + + + + + + + + + + + diff --git a/resources/js/pages/admin/Dashboard.vue b/resources/js/pages/admin/Dashboard.vue new file mode 100644 index 0000000..f5d6fdb --- /dev/null +++ b/resources/js/pages/admin/Dashboard.vue @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + diff --git a/resources/js/types/auth.ts b/resources/js/types/auth.ts index f72009c..c1a5b56 100644 --- a/resources/js/types/auth.ts +++ b/resources/js/types/auth.ts @@ -10,5 +10,5 @@ export type User = { }; export type Auth = { - user: User; + user: User | null; }; diff --git a/routes/web.php b/routes/web.php index 6dc73ea..3d4091d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,8 @@ name('home'); @@ -9,3 +11,11 @@ Route::get('/auth/login', [LoginController::class, 'index'])->name('login'); Route::post('/auth/login', [LoginController::class, 'store']); }); + +Route::middleware('auth')->group(function () { + Route::post('/auth/logout', [LogoutController::class, 'store'])->name('logout'); + + Route::prefix('admin')->name('admin.')->group(function () { + Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard'); + }); +});
+ {{ user.username }} +
+ {{ user.email }} +