Files
reui-blocks/blocks/navbar7.tsx
T

477 lines
18 KiB
TypeScript

"use client";
import type { LucideIcon } from "lucide-react";
import {
Banknote,
BarChart,
BookOpen,
Brain,
Cloud,
Code,
CreditCard,
Database,
Factory,
Fingerprint,
Gamepad2,
Globe,
Home,
Lock,
Menu,
MessageSquare,
Plane,
Settings,
Shield,
ShoppingCart,
Sparkle,
Truck,
Users,
X,
} from "lucide-react";
import { useState } from "react";
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
import { Button } from "@/components/ui/button";
import {
NavigationMenu,
NavigationMenuContent,
NavigationMenuItem,
NavigationMenuLink,
NavigationMenuList,
NavigationMenuTrigger,
} from "@/components/ui/navigation-menu";
import { cn } from "@/lib/utils";
interface Solution {
title: string;
description: string;
href: string;
icon: LucideIcon;
}
const DATA_SOLUTIONS: Solution[] = [
{
title: "کوچینگ فروش",
description: "اسکریپت و بازخورد مکالمه برای نمایندگان در حال رشد.",
href: "#",
icon: Cloud,
},
{
title: "کتابخانه محتوا",
description: "محتوای فروش تأییدشده با کنترل دسترسی سازمانی.",
href: "#",
icon: Lock,
},
{
title: "تحلیل مکالمه",
description: "تحلیل تماس و شناسایی موانع بستن معامله.",
href: "#",
icon: Fingerprint,
},
{
title: "همسویی درآمد",
description: "همسویی بازاریابی و فروش روی یک منبع محتوا.",
href: "#",
icon: Cloud,
},
];
interface Platfrom {
title: string;
href: string;
icon: LucideIcon;
}
const DATA_PLATFORM_CASE: Platfrom[] = [
{ title: "SaaS", href: "#", icon: CreditCard },
{ title: "فین‌تک", href: "#", icon: Banknote },
{ title: "B2B خدمات", href: "#", icon: ShoppingCart },
{ title: "خدمات سازمانی", href: "#", icon: Plane },
{ title: "املاک تجاری", href: "#", icon: Home },
{ title: "رسانه", href: "#", icon: Gamepad2 },
{ title: "تولید", href: "#", icon: Factory },
{ title: "لجستیک", href: "#", icon: Truck },
];
interface Resource {
title: string;
description: string;
href: string;
icon: LucideIcon;
}
const DATA_RESOURCES: Resource[] = [
{
title: "هوش سیگنا",
description: "ابزارهای هوشمند توانمندسازی فروش را کشف کنید",
href: "#",
icon: Sparkle,
},
{
title: "امتیازدهی فرصت",
description: "مدل‌های پیشنهاد اقدام بعدی برای معامله",
href: "#",
icon: Code,
},
{
title: "پیش‌بینی برد",
description: "مدل‌های احتمال بستن بر اساس تاریخچه معامله",
href: "#",
icon: Brain,
},
{
title: "مدیریت دانش فروش",
description: "بهترین روش‌های نگهداری محتوای فروش",
href: "#",
icon: Database,
},
{
title: "تحلیل مکالمه ابری",
description: "تحلیل تماس و ایمیل در مقیاس تیم",
href: "#",
icon: Cloud,
},
{
title: "حریم خصوصی داده",
description: "داده مکالمات فروش را ایمن نگه دارید",
href: "#",
icon: Shield,
},
{
title: "پیکربندی مدل",
description: "مدل‌های کوچینگ را با قیف خود هم‌تراز کنید",
href: "#",
icon: Settings,
},
{
title: "گزارش اثرگذاری",
description: "اثر محتوا و کوچینگ روی نرخ برد را بسنجید",
href: "#",
icon: BarChart,
},
{
title: "روندهای فروش",
description: "با روندهای توانمندسازی فروش به‌روز بمانید",
href: "#",
icon: Globe,
},
{
title: "انجمن سیگنا",
description: "به انجمن رهبران فروش بپیوندید",
href: "#",
icon: Users,
},
{
title: "آکادمی فروش",
description: "از بهترین روش‌های تیم‌های درآمد بیاموزید",
href: "#",
icon: BookOpen,
},
{
title: "پشتیبانی",
description: "پشتیبانی برای استقرار و آموزش تیم",
href: "#",
icon: MessageSquare,
},
];
interface Navbar7Props {
contained?: boolean;
className?: string;
}
const mobileMenuOverlayClass = (contained: boolean) =>
cn(
"flex w-full flex-col overflow-scroll border-t border-border bg-background text-start lg:hidden",
contained
? "absolute inset-x-0 top-full z-50 max-h-[min(85vh,40rem)]"
: "absolute inset-0 top-[72px] h-[calc(100vh-72px)]",
);
const Navbar7 = ({ contained = false, className }: Navbar7Props) => {
const [open, setOpen] = useState(false);
return (
<section
lang="fa"
className={cn(
"bg-background text-start",
contained ? "relative z-30 overflow-visible" : "inset-x-0 top-0 z-20",
className,
)}
>
<div
className={cn(
"container px-4 sm:px-6 md:px-8",
!contained && "lg:px-40 xl:px-52",
)}
>
<NavigationMenu
dir="rtl"
viewport={false}
className="relative z-50 max-w-none overflow-visible text-start"
>
<div className="relative z-30 flex w-full items-center justify-between gap-12 overflow-visible py-4">
<a href="#" className="flex items-center gap-2">
<img
src="/block-media/shadcnblocks/block/logos/ShadcnBlockscom-icon.svg"
className="max-h-8 dark:invert"
alt="لوگو"
/>
<span className="text-lg font-semibold tracking-tighter">
سیگنا
</span>
</a>
<div className="relative hidden flex-1 justify-center overflow-visible lg:flex">
<NavigationMenuList>
<NavigationMenuItem className="static">
<NavigationMenuTrigger className="text-start [&_svg]:ms-1 [&_svg]:!ml-0">
پلتفرم
</NavigationMenuTrigger>
<NavigationMenuContent
dir="rtl"
className={cn(
"top-full start-auto end-auto left-1/2 right-auto z-[200] -translate-x-1/2 !overflow-visible p-4 text-start shadow-md",
"!w-[760px] !min-w-[760px] !max-w-[calc(100vw-2rem)] md:!w-[760px]",
contained &&
"!w-[min(760px,calc(100%-1rem))] !min-w-0",
)}
>
<div className="grid w-full grid-cols-2 gap-8">
<div className="min-w-[280px]">
<div className="text-start text-xs tracking-widest text-muted-foreground">
راه‌حل‌ها
</div>
<div className="mt-4 grid gap-4">
{DATA_SOLUTIONS.map((solution, index) => (
<NavigationMenuLink
key={index}
href={solution.href}
className="group flex min-w-0 flex-row items-center hover:bg-transparent"
>
<div className="me-4 rounded-lg bg-muted p-4 shadow-sm">
<solution.icon className="size-6 text-muted-foreground transition-all fade-in group-hover:text-foreground" />
</div>
<div className="flex min-w-0 flex-col gap-1 text-sm text-start">
<div className="font-medium text-foreground">
{solution.title}
</div>
<div className="text-sm font-normal text-muted-foreground">
{solution.description}
</div>
</div>
</NavigationMenuLink>
))}
</div>
</div>
<div className="min-w-[280px]">
<div className="text-start text-xs tracking-widest text-muted-foreground">
بر اساس صنعت
</div>
<div className="mt-4 grid grid-cols-2 gap-3">
{DATA_PLATFORM_CASE.map((solution, index) => (
<NavigationMenuLink
key={index}
href={solution.href}
className="group flex min-w-0 flex-row items-center hover:bg-transparent"
>
<div className="me-3 shrink-0 rounded-lg bg-muted p-2 shadow-sm">
<solution.icon className="size-4 text-muted-foreground transition-all fade-in group-hover:text-foreground" />
</div>
<div className="min-w-0 text-sm font-medium">
{solution.title}
</div>
</NavigationMenuLink>
))}
</div>
</div>
</div>
</NavigationMenuContent>
</NavigationMenuItem>
<NavigationMenuItem className="static">
<NavigationMenuTrigger className="text-start [&_svg]:ms-1 [&_svg]:!ml-0">
منابع
</NavigationMenuTrigger>
<NavigationMenuContent
dir="rtl"
className={cn(
"top-full start-auto end-auto left-1/2 right-auto z-[200] -translate-x-1/2 !overflow-visible p-4 text-start shadow-md",
"!w-[820px] !min-w-[820px] !max-w-[calc(100vw-2rem)] md:!w-[820px]",
contained &&
"!w-[min(820px,calc(100%-1rem))] !min-w-0",
)}
>
<div className="grid w-full grid-cols-3 gap-4">
{DATA_RESOURCES.map((solution, index) => (
<NavigationMenuLink
key={index}
href={solution.href}
className="group flex flex-row items-center hover:bg-transparent"
>
<div className="me-4 rounded-lg bg-muted p-4 shadow-sm">
<solution.icon className="size-6 text-muted-foreground transition-all fade-in group-hover:text-foreground" />
</div>
<div className="flex min-w-0 flex-col gap-1 text-start text-sm font-normal text-muted-foreground">
<div className="font-medium text-foreground">
{solution.title}
</div>
<div className="font-normal text-muted-foreground">
{solution.description}
</div>
</div>
</NavigationMenuLink>
))}
</div>
</NavigationMenuContent>
</NavigationMenuItem>
<Button variant="ghost" className="text-start">
API
</Button>
</NavigationMenuList>
</div>
<div className="hidden items-center gap-4 lg:flex">
<Button variant="ghost">ورود</Button>
<Button>شروع کنید</Button>
</div>
<div className="flex items-center gap-4 lg:hidden">
<Button
variant="outline"
size="icon"
aria-label="منوی اصلی"
onClick={() => setOpen(!open)}
>
{!open && <Menu className="size-4" />}
{open && <X className="size-4" />}
</Button>
</div>
</div>
{open && (
<div className={mobileMenuOverlayClass(contained)}>
<Accordion
type="single"
collapsible
dir="rtl"
className="w-full text-start"
>
<AccordionItem
value="platform"
className="border-b-2 border-dashed"
>
<AccordionTrigger className="px-2 py-4 text-start hover:no-underline">
پلتفرم
</AccordionTrigger>
<AccordionContent className="px-2 pb-4">
<div className="space-y-6">
<div>
<div className="mb-4 text-start text-xs tracking-widest text-muted-foreground uppercase">
راه‌حل‌ها
</div>
<div className="space-y-4">
{DATA_SOLUTIONS.map((solution, index) => (
<a
key={index}
href={solution.href}
className="group flex items-center gap-4 rounded-lg p-2 text-start hover:bg-muted"
>
<div className="rounded-lg bg-muted p-2 shadow-sm">
<solution.icon className="size-4 text-muted-foreground transition-all group-hover:text-foreground" />
</div>
<div className="min-w-0 flex-1">
<div className="text-sm font-medium text-foreground">
{solution.title}
</div>
<div className="text-xs text-muted-foreground">
{solution.description}
</div>
</div>
</a>
))}
</div>
</div>
<div>
<div className="mb-4 text-start text-xs tracking-widest text-muted-foreground uppercase">
بر اساس صنعت
</div>
<div className="grid grid-cols-2 gap-2">
{DATA_PLATFORM_CASE.map((useCase, index) => (
<a
key={index}
href={useCase.href}
className="group flex items-center gap-2 rounded-lg p-2 text-start hover:bg-muted"
>
<div className="rounded-lg bg-muted p-1.5 shadow-sm">
<useCase.icon className="size-3 text-muted-foreground transition-all group-hover:text-foreground" />
</div>
<div className="truncate text-sm font-medium">
{useCase.title}
</div>
</a>
))}
</div>
</div>
</div>
</AccordionContent>
</AccordionItem>
<AccordionItem
value="resources"
className="border-b-2 border-dashed"
>
<AccordionTrigger className="px-2 py-4 text-start hover:no-underline">
منابع
</AccordionTrigger>
<AccordionContent className="px-2 pb-4">
<div className="space-y-3">
{DATA_RESOURCES.map((resource, index) => (
<a
key={index}
href={resource.href}
className="group flex items-center gap-4 rounded-lg p-2 text-start hover:bg-muted"
>
<div className="rounded-lg bg-muted p-2 shadow-sm">
<resource.icon className="size-4 text-muted-foreground transition-all group-hover:text-foreground" />
</div>
<div className="min-w-0 flex-1">
<div className="text-sm font-medium text-foreground">
{resource.title}
</div>
<div className="text-xs text-muted-foreground">
{resource.description}
</div>
</div>
</a>
))}
</div>
</AccordionContent>
</AccordionItem>
</Accordion>
<a
href="#"
className="w-full border-y-2 border-dashed px-2 py-4 text-start text-sm font-medium"
>
API
</a>
<div className="mx-8 mt-auto flex flex-col gap-4 py-12">
<span className="text-center text-sm">
مشتری هستید؟ <b>ورود</b>
</span>
<Button className="relative" size="lg">
همین حالا شروع کنید
</Button>
</div>
</div>
)}
</NavigationMenu>
</div>
</section>
);
};
export { Navbar7 };