import { jsx, jsxs, Fragment } from "react/jsx-runtime"; import * as React from "react"; import { useState, useEffect, useCallback, Fragment as Fragment$1 } from "react"; import { Slot } from "@radix-ui/react-slot"; import { cva } from "class-variance-authority"; import { PanelLeftIcon, Settings, LogOut, ChevronsUpDown, LayoutGrid, GalleryHorizontal, Package, TableOfContents, ChevronRight } from "lucide-react"; import { c as cn, B as Button, q as queryParams, b as logout } from "./index-CY6fYws-.js"; import { S as Sheet, e as SheetHeader, c as SheetTitle, d as SheetDescription, b as SheetContent } from "./sheet-Bq2cyJmx.js"; import * as TooltipPrimitive from "@radix-ui/react-tooltip"; import { usePage, Link, router } from "@inertiajs/react"; import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"; import * as AvatarPrimitive from "@radix-ui/react-avatar"; import { A as AppLogoIcon } from "./app-logo-icon-kpljnLMz.js"; const MOBILE_BREAKPOINT = 768; function useIsMobile() { const [isMobile, setIsMobile] = useState(); useEffect(() => { const mql = window.matchMedia( `(max-width: ${MOBILE_BREAKPOINT - 1}px)` ); const onChange = () => { setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); }; mql.addEventListener("change", onChange); setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); return () => mql.removeEventListener("change", onChange); }, []); return !!isMobile; } function TooltipProvider({ delayDuration = 0, ...props }) { return /* @__PURE__ */ jsx( TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delayDuration, ...props } ); } function Tooltip({ ...props }) { return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { "data-slot": "tooltip", ...props }) }); } function TooltipTrigger({ ...props }) { return /* @__PURE__ */ jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props }); } function TooltipContent({ className, sideOffset = 4, children, ...props }) { return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsxs( TooltipPrimitive.Content, { "data-slot": "tooltip-content", sideOffset, className: cn( "bg-primary text-primary-foreground 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 max-w-sm rounded-md px-3 py-1.5 text-xs", className ), ...props, children: [ children, /* @__PURE__ */ jsx(TooltipPrimitive.Arrow, { className: "bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" }) ] } ) }); } const SIDEBAR_COOKIE_NAME = "sidebar_state"; const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; const SIDEBAR_WIDTH = "16rem"; const SIDEBAR_WIDTH_MOBILE = "18rem"; const SIDEBAR_WIDTH_ICON = "3rem"; const SIDEBAR_KEYBOARD_SHORTCUT = "b"; const SidebarContext = React.createContext(null); function useSidebar() { const context = React.useContext(SidebarContext); if (!context) { throw new Error("useSidebar must be used within a SidebarProvider."); } return context; } function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: setOpenProp, className, style, children, ...props }) { const isMobile = useIsMobile(); const [openMobile, setOpenMobile] = React.useState(false); const [_open, _setOpen] = React.useState(defaultOpen); const open = openProp ?? _open; const setOpen = React.useCallback( (value) => { const openState = typeof value === "function" ? value(open) : value; if (setOpenProp) { setOpenProp(openState); } else { _setOpen(openState); } document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`; }, [setOpenProp, open] ); const toggleSidebar = React.useCallback(() => { return isMobile ? setOpenMobile((open2) => !open2) : setOpen((open2) => !open2); }, [isMobile, setOpen, setOpenMobile]); React.useEffect(() => { const handleKeyDown = (event) => { if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) { event.preventDefault(); toggleSidebar(); } }; window.addEventListener("keydown", handleKeyDown); return () => window.removeEventListener("keydown", handleKeyDown); }, [toggleSidebar]); const state = open ? "expanded" : "collapsed"; const contextValue = React.useMemo( () => ({ state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar }), [state, open, setOpen, isMobile, openMobile, setOpenMobile, toggleSidebar] ); return /* @__PURE__ */ jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(TooltipProvider, { delayDuration: 0, children: /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar-wrapper", style: { "--sidebar-width": SIDEBAR_WIDTH, "--sidebar-width-icon": SIDEBAR_WIDTH_ICON, ...style }, className: cn( "group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full", className ), ...props, children } ) }) }); } function Sidebar({ side = "left", variant = "sidebar", collapsible = "offcanvas", className, children, ...props }) { const { isMobile, state, openMobile, setOpenMobile } = useSidebar(); if (collapsible === "none") { return /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar", className: cn( "bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col", className ), ...props, children } ); } if (isMobile) { return /* @__PURE__ */ jsxs(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: [ /* @__PURE__ */ jsxs(SheetHeader, { className: "sr-only", children: [ /* @__PURE__ */ jsx(SheetTitle, { children: "Sidebar" }), /* @__PURE__ */ jsx(SheetDescription, { children: "Displays the mobile sidebar." }) ] }), /* @__PURE__ */ jsx( SheetContent, { "data-sidebar": "sidebar", "data-slot": "sidebar", "data-mobile": "true", className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", style: { "--sidebar-width": SIDEBAR_WIDTH_MOBILE }, side, children: /* @__PURE__ */ jsx("div", { className: "flex h-full w-full flex-col", children }) } ) ] }); } return /* @__PURE__ */ jsxs( "div", { className: "group peer text-sidebar-foreground hidden md:block", "data-state": state, "data-collapsible": state === "collapsed" ? collapsible : "", "data-variant": variant, "data-side": side, "data-slot": "sidebar", children: [ /* @__PURE__ */ jsx( "div", { className: cn( "relative h-svh w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear", "group-data-[collapsible=offcanvas]:w-0", "group-data-[side=right]:rotate-180", variant === "floating" || variant === "inset" ? "group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon)" ) } ), /* @__PURE__ */ jsx( "div", { className: cn( "fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex", side === "left" ? "left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]" : "right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]", // Adjust the padding for floating and inset variants. variant === "floating" || variant === "inset" ? "p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]" : "group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l", className ), ...props, children: /* @__PURE__ */ jsx( "div", { "data-sidebar": "sidebar", className: "bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm", children } ) } ) ] } ); } function SidebarTrigger({ className, onClick, ...props }) { const { toggleSidebar } = useSidebar(); return /* @__PURE__ */ jsxs( Button, { "data-sidebar": "trigger", "data-slot": "sidebar-trigger", variant: "ghost", size: "icon", className: cn("h-7 w-7", className), onClick: (event) => { onClick?.(event); toggleSidebar(); }, ...props, children: [ /* @__PURE__ */ jsx(PanelLeftIcon, {}), /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Toggle Sidebar" }) ] } ); } function SidebarInset({ className, ...props }) { return /* @__PURE__ */ jsx( "main", { "data-slot": "sidebar-inset", className: cn( "bg-background relative flex max-w-full min-h-svh flex-1 flex-col", "peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))] md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-0", className ), ...props } ); } function SidebarHeader({ className, ...props }) { return /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar-header", "data-sidebar": "header", className: cn("flex flex-col gap-2 p-2", className), ...props } ); } function SidebarFooter({ className, ...props }) { return /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar-footer", "data-sidebar": "footer", className: cn("flex flex-col gap-2 p-2", className), ...props } ); } function SidebarContent({ className, ...props }) { return /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar-content", "data-sidebar": "content", className: cn( "flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden", className ), ...props } ); } function SidebarGroup({ className, ...props }) { return /* @__PURE__ */ jsx( "div", { "data-slot": "sidebar-group", "data-sidebar": "group", className: cn("relative flex w-full min-w-0 flex-col p-2", className), ...props } ); } function SidebarGroupLabel({ className, asChild = false, ...props }) { const Comp = asChild ? Slot : "div"; return /* @__PURE__ */ jsx( Comp, { "data-slot": "sidebar-group-label", "data-sidebar": "group-label", className: cn( "text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0", "group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 group-data-[collapsible=icon]:select-none group-data-[collapsible=icon]:pointer-events-none", className ), ...props } ); } function SidebarMenu({ className, ...props }) { return /* @__PURE__ */ jsx( "ul", { "data-slot": "sidebar-menu", "data-sidebar": "menu", className: cn("flex w-full min-w-0 flex-col gap-1", className), ...props } ); } function SidebarMenuItem({ className, ...props }) { return /* @__PURE__ */ jsx( "li", { "data-slot": "sidebar-menu-item", "data-sidebar": "menu-item", className: cn("group/menu-item relative", className), ...props } ); } 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_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(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" } } ); function SidebarMenuButton({ asChild = false, isActive = false, variant = "default", size = "default", tooltip, className, ...props }) { const Comp = asChild ? Slot : "button"; const { isMobile, state } = useSidebar(); const button = /* @__PURE__ */ jsx( Comp, { "data-slot": "sidebar-menu-button", "data-sidebar": "menu-button", "data-size": size, "data-active": isActive, className: cn(sidebarMenuButtonVariants({ variant, size }), className), ...props } ); if (!tooltip) { return button; } if (typeof tooltip === "string") { tooltip = { children: tooltip }; } return /* @__PURE__ */ jsxs(Tooltip, { children: [ /* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }), /* @__PURE__ */ jsx( TooltipContent, { side: "right", align: "center", hidden: state !== "collapsed" || isMobile, ...tooltip } ) ] }); } function AppContent({ variant = "header", children, ...props }) { if (variant === "sidebar") { return /* @__PURE__ */ jsx(SidebarInset, { ...props, children }); } return /* @__PURE__ */ jsx( "main", { className: "mx-auto flex h-full w-full max-w-7xl flex-1 flex-col gap-4 rounded-xl", ...props, children } ); } function AppShell({ children, variant = "header" }) { const isOpen = usePage().props.sidebarOpen; if (variant === "header") { return /* @__PURE__ */ jsx("div", { className: "flex min-h-screen w-full flex-col", children }); } return /* @__PURE__ */ jsx(SidebarProvider, { defaultOpen: isOpen, children }); } function NavMain({ items = [] }) { const page = usePage(); return /* @__PURE__ */ jsxs(SidebarGroup, { className: "px-2 py-0", children: [ /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Platform" }), /* @__PURE__ */ jsx(SidebarMenu, { children: items.map((item) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx( SidebarMenuButton, { asChild: true, isActive: page.url.startsWith( typeof item.href === "string" ? item.href : item.href.url ), tooltip: { children: item.title }, children: /* @__PURE__ */ jsxs(Link, { href: item.href, prefetch: true, children: [ item.icon && /* @__PURE__ */ jsx(item.icon, {}), /* @__PURE__ */ jsx("span", { children: item.title }) ] }) } ) }, item.title)) }) ] }); } function DropdownMenu({ ...props }) { return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props }); } function DropdownMenuTrigger({ ...props }) { return /* @__PURE__ */ jsx( DropdownMenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props } ); } function DropdownMenuContent({ className, sideOffset = 4, ...props }) { return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx( DropdownMenuPrimitive.Content, { "data-slot": "dropdown-menu-content", sideOffset, className: cn( "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-md", className ), ...props } ) }); } function DropdownMenuGroup({ ...props }) { return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Group, { "data-slot": "dropdown-menu-group", ...props }); } function DropdownMenuItem({ className, inset, variant = "default", ...props }) { return /* @__PURE__ */ jsx( DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: cn( "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className ), ...props } ); } function DropdownMenuLabel({ className, inset, ...props }) { return /* @__PURE__ */ jsx( DropdownMenuPrimitive.Label, { "data-slot": "dropdown-menu-label", "data-inset": inset, className: cn( "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className ), ...props } ); } function DropdownMenuSeparator({ className, ...props }) { return /* @__PURE__ */ jsx( DropdownMenuPrimitive.Separator, { "data-slot": "dropdown-menu-separator", className: cn("bg-border -mx-1 my-1 h-px", className), ...props } ); } function Avatar({ className, ...props }) { return /* @__PURE__ */ jsx( AvatarPrimitive.Root, { "data-slot": "avatar", className: cn( "relative flex size-8 shrink-0 overflow-hidden rounded-full", className ), ...props } ); } function AvatarImage({ className, ...props }) { return /* @__PURE__ */ jsx( AvatarPrimitive.Image, { "data-slot": "avatar-image", className: cn("aspect-square size-full", className), ...props } ); } function AvatarFallback({ className, ...props }) { return /* @__PURE__ */ jsx( AvatarPrimitive.Fallback, { "data-slot": "avatar-fallback", className: cn( "bg-muted flex size-full items-center justify-center rounded-full", className ), ...props } ); } function useInitials() { return useCallback((fullName) => { const names = fullName.trim().split(" "); if (names.length === 0) return ""; if (names.length === 1) return names[0].charAt(0).toUpperCase(); const firstInitial = names[0].charAt(0); const lastInitial = names[names.length - 1].charAt(0); return `${firstInitial}${lastInitial}`.toUpperCase(); }, []); } function UserInfo({ user, showEmail = false }) { const getInitials = useInitials(); return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsxs(Avatar, { className: "h-8 w-8 overflow-hidden rounded-full", children: [ /* @__PURE__ */ jsx(AvatarImage, { src: user.avatar, alt: user.name }), /* @__PURE__ */ jsx(AvatarFallback, { className: "rounded-lg bg-neutral-200 text-black dark:bg-neutral-700 dark:text-white", children: getInitials(user.name) }) ] }), /* @__PURE__ */ jsxs("div", { className: "grid flex-1 text-left text-sm leading-tight", children: [ /* @__PURE__ */ jsx("span", { className: "truncate font-medium", children: user.name }), showEmail && /* @__PURE__ */ jsx("span", { className: "truncate text-xs text-muted-foreground", children: user.email }) ] }) ] }); } function useMobileNavigation() { return useCallback(() => { document.body.style.removeProperty("pointer-events"); }, []); } const edit = (options) => ({ url: edit.url(options), method: "get" }); edit.definition = { methods: ["get", "head"], url: "/settings/profile" }; edit.url = (options) => { return edit.definition.url + queryParams(options); }; edit.get = (options) => ({ url: edit.url(options), method: "get" }); edit.head = (options) => ({ url: edit.url(options), method: "head" }); const editForm = (options) => ({ action: edit.url(options), method: "get" }); editForm.get = (options) => ({ action: edit.url(options), method: "get" }); editForm.head = (options) => ({ action: edit.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); edit.form = editForm; const update = (options) => ({ url: update.url(options), method: "patch" }); update.definition = { methods: ["patch"], url: "/settings/profile" }; update.url = (options) => { return update.definition.url + queryParams(options); }; update.patch = (options) => ({ url: update.url(options), method: "patch" }); const updateForm = (options) => ({ action: update.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "PATCH", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "post" }); updateForm.patch = (options) => ({ action: update.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "PATCH", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "post" }); update.form = updateForm; const destroy = (options) => ({ url: destroy.url(options), method: "delete" }); destroy.definition = { methods: ["delete"], url: "/settings/profile" }; destroy.url = (options) => { return destroy.definition.url + queryParams(options); }; destroy.delete = (options) => ({ url: destroy.url(options), method: "delete" }); const destroyForm = (options) => ({ action: destroy.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "DELETE", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "post" }); destroyForm.delete = (options) => ({ action: destroy.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "DELETE", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "post" }); destroy.form = destroyForm; ({ edit: Object.assign(edit, edit), update: Object.assign(update, update), destroy: Object.assign(destroy, destroy) }); function UserMenuContent({ user }) { const cleanup = useMobileNavigation(); const handleLogout = () => { cleanup(); router.flushAll(); }; return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "p-0 font-normal", children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 px-1 py-1.5 text-left text-sm", children: /* @__PURE__ */ jsx(UserInfo, { user, showEmail: true }) }) }), /* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsx(DropdownMenuGroup, { children: /* @__PURE__ */ jsx(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ jsxs( Link, { className: "block w-full", href: edit(), as: "button", prefetch: true, onClick: cleanup, children: [ /* @__PURE__ */ jsx(Settings, { className: "mr-2" }), "Settings" ] } ) }) }), /* @__PURE__ */ jsx(DropdownMenuSeparator, {}), /* @__PURE__ */ jsx(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ jsxs( Link, { className: "block w-full", href: logout(), as: "button", onClick: handleLogout, "data-test": "logout-button", children: [ /* @__PURE__ */ jsx(LogOut, { className: "mr-2" }), "Log out" ] } ) }) ] }); } function NavUser() { const { auth } = usePage().props; const { state } = useSidebar(); const isMobile = useIsMobile(); return /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsxs(DropdownMenu, { children: [ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs( SidebarMenuButton, { size: "lg", className: "group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent", children: [ /* @__PURE__ */ jsx(UserInfo, { user: auth.user }), /* @__PURE__ */ jsx(ChevronsUpDown, { className: "ml-auto size-4" }) ] } ) }), /* @__PURE__ */ jsx( DropdownMenuContent, { className: "w-(--radix-dropdown-menu-trigger-width) min-w-56 rounded-lg", align: "end", side: isMobile ? "bottom" : state === "collapsed" ? "left" : "bottom", children: /* @__PURE__ */ jsx(UserMenuContent, { user: auth.user }) } ) ] }) }) }); } const show = (options) => ({ url: show.url(options), method: "get" }); show.definition = { methods: ["get", "head"], url: "/faq/show" }; show.url = (options) => { return show.definition.url + queryParams(options); }; show.get = (options) => ({ url: show.url(options), method: "get" }); show.head = (options) => ({ url: show.url(options), method: "head" }); const showForm = (options) => ({ action: show.url(options), method: "get" }); showForm.get = (options) => ({ action: show.url(options), method: "get" }); showForm.head = (options) => ({ action: show.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); show.form = showForm; const add$3 = (options) => ({ url: add$3.url(options), method: "get" }); add$3.definition = { methods: ["get", "head"], url: "/faq/add" }; add$3.url = (options) => { return add$3.definition.url + queryParams(options); }; add$3.get = (options) => ({ url: add$3.url(options), method: "get" }); add$3.head = (options) => ({ url: add$3.url(options), method: "head" }); const addForm$2 = (options) => ({ action: add$3.url(options), method: "get" }); addForm$2.get = (options) => ({ action: add$3.url(options), method: "get" }); addForm$2.head = (options) => ({ action: add$3.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); add$3.form = addForm$2; const addFaq = (options) => ({ url: addFaq.url(options), method: "post" }); addFaq.definition = { methods: ["post"], url: "/faq/add" }; addFaq.url = (options) => { return addFaq.definition.url + queryParams(options); }; addFaq.post = (options) => ({ url: addFaq.url(options), method: "post" }); const addFaqForm = (options) => ({ action: addFaq.url(options), method: "post" }); addFaqForm.post = (options) => ({ action: addFaq.url(options), method: "post" }); addFaq.form = addFaqForm; const faq = { show: Object.assign(show, show), add: Object.assign(add$3, add$3), addFaq: Object.assign(addFaq, addFaq) }; const post = (options) => ({ url: post.url(options), method: "post" }); post.definition = { methods: ["post"], url: "/product/add" }; post.url = (options) => { return post.definition.url + queryParams(options); }; post.post = (options) => ({ url: post.url(options), method: "post" }); const postForm = (options) => ({ action: post.url(options), method: "post" }); postForm.post = (options) => ({ action: post.url(options), method: "post" }); post.form = postForm; const add$2 = { post: Object.assign(post, post) }; const index$3 = (options) => ({ url: index$3.url(options), method: "get" }); index$3.definition = { methods: ["get", "head"], url: "/product/dashboard" }; index$3.url = (options) => { return index$3.definition.url + queryParams(options); }; index$3.get = (options) => ({ url: index$3.url(options), method: "get" }); index$3.head = (options) => ({ url: index$3.url(options), method: "head" }); const indexForm$3 = (options) => ({ action: index$3.url(options), method: "get" }); indexForm$3.get = (options) => ({ action: index$3.url(options), method: "get" }); indexForm$3.head = (options) => ({ action: index$3.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); index$3.form = indexForm$3; const add$1 = (options) => ({ url: add$1.url(options), method: "get" }); add$1.definition = { methods: ["get", "head"], url: "/product/add" }; add$1.url = (options) => { return add$1.definition.url + queryParams(options); }; add$1.get = (options) => ({ url: add$1.url(options), method: "get" }); add$1.head = (options) => ({ url: add$1.url(options), method: "head" }); const addForm$1 = (options) => ({ action: add$1.url(options), method: "get" }); addForm$1.get = (options) => ({ action: add$1.url(options), method: "get" }); addForm$1.head = (options) => ({ action: add$1.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); add$1.form = addForm$1; const product = { index: Object.assign(index$3, index$3), add: Object.assign(add$1, add$2) }; const index$2 = (options) => ({ url: index$2.url(options), method: "get" }); index$2.definition = { methods: ["get", "head"], url: "/carousel" }; index$2.url = (options) => { return index$2.definition.url + queryParams(options); }; index$2.get = (options) => ({ url: index$2.url(options), method: "get" }); index$2.head = (options) => ({ url: index$2.url(options), method: "head" }); const indexForm$2 = (options) => ({ action: index$2.url(options), method: "get" }); indexForm$2.get = (options) => ({ action: index$2.url(options), method: "get" }); indexForm$2.head = (options) => ({ action: index$2.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); index$2.form = indexForm$2; const add = (options) => ({ url: add.url(options), method: "get" }); add.definition = { methods: ["get", "head"], url: "/carousel/add" }; add.url = (options) => { return add.definition.url + queryParams(options); }; add.get = (options) => ({ url: add.url(options), method: "get" }); add.head = (options) => ({ url: add.url(options), method: "head" }); const addForm = (options) => ({ action: add.url(options), method: "get" }); addForm.get = (options) => ({ action: add.url(options), method: "get" }); addForm.head = (options) => ({ action: add.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); add.form = addForm; const store$1 = (options) => ({ url: store$1.url(options), method: "post" }); store$1.definition = { methods: ["post"], url: "/carousel" }; store$1.url = (options) => { return store$1.definition.url + queryParams(options); }; store$1.post = (options) => ({ url: store$1.url(options), method: "post" }); const storeForm$1 = (options) => ({ action: store$1.url(options), method: "post" }); storeForm$1.post = (options) => ({ action: store$1.url(options), method: "post" }); store$1.form = storeForm$1; const carousel = { index: Object.assign(index$2, index$2), add: Object.assign(add, add), store: Object.assign(store$1, store$1) }; const index$1 = (options) => ({ url: index$1.url(options), method: "get" }); index$1.definition = { methods: ["get", "head"], url: "/dashboard" }; index$1.url = (options) => { return index$1.definition.url + queryParams(options); }; index$1.get = (options) => ({ url: index$1.url(options), method: "get" }); index$1.head = (options) => ({ url: index$1.url(options), method: "head" }); const indexForm$1 = (options) => ({ action: index$1.url(options), method: "get" }); indexForm$1.get = (options) => ({ action: index$1.url(options), method: "get" }); indexForm$1.head = (options) => ({ action: index$1.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); index$1.form = indexForm$1; const dashboard = { index: Object.assign(index$1, index$1), faq: Object.assign(faq, faq), product: Object.assign(product, product), carousel: Object.assign(carousel, carousel) }; const index = (options) => ({ url: index.url(options), method: "get" }); index.definition = { methods: ["get", "head"], url: "/testimonial" }; index.url = (options) => { return index.definition.url + queryParams(options); }; index.get = (options) => ({ url: index.url(options), method: "get" }); index.head = (options) => ({ url: index.url(options), method: "head" }); const indexForm = (options) => ({ action: index.url(options), method: "get" }); indexForm.get = (options) => ({ action: index.url(options), method: "get" }); indexForm.head = (options) => ({ action: index.url({ [options?.mergeQuery ? "mergeQuery" : "query"]: { _method: "HEAD", ...options?.query ?? options?.mergeQuery ?? {} } }), method: "get" }); index.form = indexForm; const store = (options) => ({ url: store.url(options), method: "post" }); store.definition = { methods: ["post"], url: "/testimonial" }; store.url = (options) => { return store.definition.url + queryParams(options); }; store.post = (options) => ({ url: store.url(options), method: "post" }); const storeForm = (options) => ({ action: store.url(options), method: "post" }); storeForm.post = (options) => ({ action: store.url(options), method: "post" }); store.form = storeForm; const testimonial = { index: Object.assign(index, index), store: Object.assign(store, store) }; function AppLogo() { return /* @__PURE__ */ jsxs(Fragment, { children: [ /* @__PURE__ */ jsx("div", { className: "flex aspect-square size-8 items-center justify-center rounded-md bg-sidebar-primary text-sidebar-primary-foreground", children: /* @__PURE__ */ jsx(AppLogoIcon, { className: "size-5 fill-current text-white dark:text-black" }) }), /* @__PURE__ */ jsx("div", { className: "ml-1 grid flex-1 text-left text-sm", children: /* @__PURE__ */ jsx("span", { className: "mb-0.5 truncate leading-tight font-semibold", children: "Soorya Carpet" }) }) ] }); } const mainNavItems = [ { title: "Dashboard", href: dashboard.index(), icon: LayoutGrid }, { title: "Home Page Slider", href: carousel.index(), icon: GalleryHorizontal }, { title: "Products", href: dashboard.product.index(), icon: Package }, { title: "Testimonial", href: testimonial.index(), icon: GalleryHorizontal }, { title: "FAQs", href: dashboard.faq.show(), icon: TableOfContents } ]; function AppSidebar() { return /* @__PURE__ */ jsxs(Sidebar, { collapsible: "icon", variant: "inset", children: [ /* @__PURE__ */ jsx(SidebarHeader, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, { size: "lg", asChild: true, children: /* @__PURE__ */ jsx(Link, { href: dashboard.index(), prefetch: true, children: /* @__PURE__ */ jsx(AppLogo, {}) }) }) }) }) }), /* @__PURE__ */ jsx(SidebarContent, { children: /* @__PURE__ */ jsx(NavMain, { items: mainNavItems }) }), /* @__PURE__ */ jsx(SidebarFooter, { children: /* @__PURE__ */ jsx(NavUser, {}) }) ] }); } function Breadcrumb({ ...props }) { return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", ...props }); } function BreadcrumbList({ className, ...props }) { return /* @__PURE__ */ jsx( "ol", { "data-slot": "breadcrumb-list", className: cn( "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5", className ), ...props } ); } function BreadcrumbItem({ className, ...props }) { return /* @__PURE__ */ jsx( "li", { "data-slot": "breadcrumb-item", className: cn("inline-flex items-center gap-1.5", className), ...props } ); } function BreadcrumbLink({ asChild, className, ...props }) { const Comp = asChild ? Slot : "a"; return /* @__PURE__ */ jsx( Comp, { "data-slot": "breadcrumb-link", className: cn("hover:text-foreground transition-colors", className), ...props } ); } function BreadcrumbPage({ className, ...props }) { return /* @__PURE__ */ jsx( "span", { "data-slot": "breadcrumb-page", role: "link", "aria-disabled": "true", "aria-current": "page", className: cn("text-foreground font-normal", className), ...props } ); } function BreadcrumbSeparator({ children, className, ...props }) { return /* @__PURE__ */ jsx( "li", { "data-slot": "breadcrumb-separator", role: "presentation", "aria-hidden": "true", className: cn("[&>svg]:size-3.5", className), ...props, children: children ?? /* @__PURE__ */ jsx(ChevronRight, {}) } ); } function Breadcrumbs({ breadcrumbs }) { return /* @__PURE__ */ jsx(Fragment, { children: breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { children: breadcrumbs.map((item, index2) => { const isLast = index2 === breadcrumbs.length - 1; return /* @__PURE__ */ jsxs(Fragment$1, { children: [ /* @__PURE__ */ jsx(BreadcrumbItem, { children: isLast ? /* @__PURE__ */ jsx(BreadcrumbPage, { children: item.title }) : /* @__PURE__ */ jsx(BreadcrumbLink, { asChild: true, children: /* @__PURE__ */ jsx(Link, { href: item.href, children: item.title }) }) }), !isLast && /* @__PURE__ */ jsx(BreadcrumbSeparator, {}) ] }, index2); }) }) }) }); } function AppSidebarHeader({ breadcrumbs = [] }) { return /* @__PURE__ */ jsx("header", { className: "flex h-16 shrink-0 items-center gap-2 border-b border-sidebar-border/50 px-6 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12 md:px-4", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [ /* @__PURE__ */ jsx(SidebarTrigger, { className: "-ml-1" }), /* @__PURE__ */ jsx(Breadcrumbs, { breadcrumbs }) ] }) }); } function AppSidebarLayout({ children, breadcrumbs = [] }) { return /* @__PURE__ */ jsxs(AppShell, { variant: "sidebar", children: [ /* @__PURE__ */ jsx(AppSidebar, {}), /* @__PURE__ */ jsxs(AppContent, { variant: "sidebar", className: "overflow-x-hidden", children: [ /* @__PURE__ */ jsx(AppSidebarHeader, { breadcrumbs }), children ] }) ] }); } const AppLayout = ({ children, breadcrumbs, ...props }) => /* @__PURE__ */ jsx(AppSidebarLayout, { breadcrumbs, ...props, children }); export { AppLayout as A, index$1 as a, carousel as c, dashboard as d, edit as e, index as i };