import { twMerge } from "tailwind-merge";
import {
HelpCircleIcon,
SendIcon,
ChevronRightIcon,
ConstructionIcon,
PlusIcon,
MinusIcon,
ReceiptTextIcon,
Grid2X2Icon,
NotebookPenIcon,
MessageCircleIcon,
SquareKanban,
Kanban,
} from "lucide-react";
import { Link as RouterLink, useLocation } from "react-router-dom";
import { Separator } from "react-aria-components";
import { Link } from "@ui/ui-library/link";
import { Icon } from "@ui/ui-library/icon";
import { Avatar, AvatarBadge } from "@ui/ui-library/avatar";
import { Dialog } from "@ui/ui-library/dialog";
import { Button } from "@ui/ui-library/button";
import {
DisclosurePanel,
DisclosureControl,
Disclosure,
} from "@ui/ui-library/disclosure";
import { LinkProps } from "react-aria-components";
import { Popover } from "@ui/ui-library/popover";
import { AvailableIcon } from "@ui/ui-library/icons";
import { useState, useRef } from "react";
import logo from "../assets/icon.jpg";
import { ThemeSwitcher } from "./ThemeSwitcher";
import { Text } from "@ui/ui-library/text";
import { SignOutButton } from "./SignOutButton";
import { useUser } from "@ui/providers/UserStoreProvider";
type NavLinkItem = {
isActive?: boolean;
} & LinkProps;
type NavLinkProps = NavLinkItem | { title: string; items: NavLinkItem[] };
function NavLink(props: NavLinkProps) {
if ("items" in props) {
return (
{props.title}{" "}
{props.items.map((item) => (
-
))}
);
}
const { isActive, ...rest } = props;
return (
[data-ui=icon]:not([class*=size-])]:size-4.5",
"[&>[data-ui=notification-badge]]:bg-navbar-darker",
"[&>[data-ui=notification-badge]]:rounded-md",
"[&>[data-ui=notification-badge]]:top-1/2",
"[&>[data-ui=notification-badge]]:right-1",
"[&>[data-ui=notification-badge]]:-translate-y-1/2",
"[&>[data-ui=notification-badge]]:bg-navbar-darker",
"[&>[data-ui=notification-badge]]:p-3",
"[&>[data-ui=nxotification-badge]]:text-xs/6",
"[&>[data-ui=notification-badge]]:font-semibold",
isActive
? "bg-navbar-darker font-semibold text-white [&>[data-ui=notification-badge]]:bg-transparent"
: [
"font-medium",
"text-gray-300/90 [&:not(:hover)>[data-ui=icon]]:bg-navbar-darker",
]
)}
>
{props.children}
);
}
export function UserMenuPopover({ isCollapsed }: { isCollapsed: boolean }) {
const user = useUser();
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
const ref = useRef(null);
return (
<>
>
);
}
export const SideNavigation = ({
isMobileMenuOpen,
}: {
isMobileMenuOpen: boolean;
}) => {
const isCollapsable = !isMobileMenuOpen;
const [isCollapsed, setIsCollapsed] = useState(isCollapsable ? false : true);
return (
);
};
export function MainNavigation({ isCollapsed }: { isCollapsed: boolean }) {
const location = useLocation();
const navItems: {
path: string;
label: string;
icon: React.ReactNode;
isDisabled?: boolean;
}[] = [
{
path: "/",
label: "Tableaux",
icon: ,
},
{
path: "/devis",
label: "Devis",
icon: ,
isDisabled: true,
},
{
path: "/factures",
label: "Factures",
icon: ,
isDisabled: true,
},
{
path: "/planning",
label: "Planning",
icon: ,
},
{
path: "/kanban",
label: "Kanban",
icon: ,
isDisabled: true,
},
{
path: "/chantiers",
label: "Chantiers",
icon: ,
isDisabled: true,
},
{
path: "/chat",
label: "Discussions",
icon: ,
},
];
return (
);
}