src/azurechat/components/menu.tsx (58 lines of code) (raw):
import * as React from "react";
import { cn } from "@/lib/utils";
import Link from "next/link";
const Menu = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div ref={ref} className={cn("w-80 flex flex-col", className)} {...props} />
));
Menu.displayName = "Menu";
const MenuHeader = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={cn("flex pb-2 justify-between items-center", className)}
{...props}
/>
));
MenuHeader.displayName = "MenuHeader";
const MenuContent = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div
ref={ref}
className={cn(
"flex flex-col flex-1 overflow-y-auto py-2 gap-0.5",
className
)}
{...props}
/>
));
MenuContent.displayName = "MenuContent";
interface MenuItemProps extends React.HTMLAttributes<HTMLLinkElement> {
href: string;
isSelected?: boolean;
}
const MenuItem: React.FC<MenuItemProps> = (props) => {
return (
<Link
className={cn(
props.className,
"items-center text-sm font-medium flex gap-2 p-2 py-1 rounded-md hover:bg-primary/25",
props.isSelected && "bg-primary/25"
)}
href={props.href}
>
{props.children}
</Link>
);
};
const MenuFooter = React.forwardRef<
HTMLDivElement,
React.HTMLAttributes<HTMLDivElement>
>(({ className, ...props }, ref) => (
<div ref={ref} className={cn("flex flex-col", className)} {...props} />
));
MenuFooter.displayName = "MenuFooter";
export { Menu, MenuContent, MenuFooter, MenuHeader, MenuItem };