Files
reui-blocks/blocks/feature266.tsx
T

165 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import type { Variants } from "framer-motion";
import { motion } from "framer-motion";
import { Card } from "@/components/ui/card";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
const SERVICES = [
{
id: "01",
number: "۱",
title: "گزارش‌ساز",
description:
"گزارش سفارشی را بدون SQL بسازید و سریع منتشر کنید.",
image: "/block-media/shadcnblocks/block/lummi/bw1.jpeg",
imageAlt: "گزارش‌ساز",
},
{
id: "02",
number: "۲",
title: "Pivot تعاملی",
description:
"ابعاد مختلف را بچرخانید و الگوی پنهان را پیدا کنید.",
image: "/block-media/shadcnblocks/block/lummi/bw3.jpeg",
imageAlt: "تحلیل داده سازمان",
},
{
id: "03",
number: "۰۳",
title: "داشبورد مدیریتی",
description:
"نمای اجرایی برای تصمیم‌های سریع طراحی کنید.",
image: "/block-media/shadcnblocks/block/lummi/bw11.jpeg",
imageAlt: "داشبورد هوش تجاری",
},
{
id: "04",
number: "۰۴",
title: "اتصال منبع",
description:
"داده پراکنده را در یک مدل واحد ساختاردهی کنید.",
image: "/block-media/shadcnblocks/block/lummi/bw5.jpeg",
imageAlt: "گزارش‌ساز",
},
{
id: "05",
number: "۰۵",
title: "سطح دسترسی",
description:
"گزارش سفارشی را بدون SQL بسازید و سریع منتشر کنید.",
image: "/block-media/shadcnblocks/block/lummi/bw7.jpeg",
imageAlt: "تحلیل داده سازمان",
},
{
id: "06",
number: "۰۶",
title: "تحلیل پیش‌بین",
description:
"ابعاد مختلف را بچرخانید و الگوی پنهان را پیدا کنید.",
image: "/block-media/shadcnblocks/block/lummi/person5.jpeg",
imageAlt: "داشبورد هوش تجاری",
},
] as const;
const containerVariants = {
hidden: { opacity: 0 },
visible: {
opacity: 1,
transition: { staggerChildren: 0.1 },
},
};
const cardVariants: Variants = {
hidden: { opacity: 0, y: 30 },
visible: { opacity: 1, y: 0, transition: { duration: 0.6, ease: "easeOut" } },
};
interface Feature266Props {
className?: string;
}
const Feature266 = ({ className }: Feature266Props) => {
return (
<section dir="rtl" lang="fa" className={cn("py-32", className)}>
<div className="container">
<motion.div
className="mb-16 text-center"
initial={{ opacity: 0, y: -20 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.8, ease: "easeOut" }}
>
<p className="mb-4 text-sm tracking-widest text-muted-foreground">
داشبوردهای تعاملی به تیم‌ها اجازه می‌دهد سؤال جدید بپرسند بدون اینکه هر بار به تیم داده وابسته باشند.
</p>
<h1 className="text-xl font-light tracking-wide text-balance md:text-2xll">
تصمیم استراتژیک را داده‌محور کنید
<br />
هر تیم داشبورد خودش را داشته باشد
</h1>
</motion.div>
<motion.div
className="grid grid-cols-1 gap-8 md:grid-cols-2 lg:grid-cols-3"
variants={containerVariants}
initial="hidden"
animate="visible"
>
{SERVICES.map((service) => (
<motion.div
key={service.id}
variants={cardVariants}
className="group cursor-pointer"
>
<Card className="border-border/20 bg-card/5 p-8 backdrop-blur-sm transition-colors duration-300 hover:bg-card/10">
<p className="mb-8 text-xs tracking-widest text-muted-foreground">
{service.number}
</p>
<div className="relative mb-8 flex h-40 items-center justify-center">
<TooltipProvider delayDuration={0}>
<Tooltip>
<TooltipTrigger asChild>
<div className="h-32 w-24 overflow-hidden rounded-lg border border-border/30 bg-linear-to-br from-primary/30 to-secondary/30 shadow-lg">
<img
src={service.image}
alt={service.imageAlt}
className="size-full object-cover"
/>
</div>
</TooltipTrigger>
<TooltipContent side="top" align="center" className="p-2">
<img
src={service.image}
alt={`${service.imageAlt} بزرگ`}
className="h-60 w-40 rounded-md object-cover"
/>
</TooltipContent>
</Tooltip>
</TooltipProvider>
</div>
<h3 className="mb-2 text-center text-lg font-light tracking-wide text-balance transition-colors duration-300 group-hover:text-primary">
{service.title}
</h3>
<p className="text-center text-sm text-pretty text-muted-foreground transition-colors duration-300 group-hover:text-foreground/80">
{service.description}
</p>
</Card>
</motion.div>
))}
</motion.div>
</div>
</section>
);
};
export { Feature266 };