Files
soorya-carpet/bootstrap/ssr/assets/app-layout-BFyUFda2.js
admin eba9e5f182
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
chore: frontend build
2025-10-27 15:27:26 +05:45

1399 lines
40 KiB
JavaScript

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
};