Files
reui-blocks/blocks/feature294.tsx
T

105 lines
3.8 KiB
TypeScript

import { AudioLines, Box, Globe, ShieldUser, Users } from "lucide-react";
import { SparklesCore } from "@/components/shadcnblocks/sparkles";
import { cn } from "@/lib/utils";
const FEATURES = [
{
id: "developer-friendly",
icon: Globe,
title: "گزارش‌ساز",
description:
"گزارش سفارشی را بدون SQL بسازید و سریع منتشر کنید.",
},
{
id: "fast",
icon: Box,
title: "Pivot تعاملی",
description: "ابعاد مختلف را بچرخانید و الگوی پنهان را پیدا کنید.",
},
{
id: "secure",
icon: ShieldUser,
title: "داشبورد مدیریتی",
description:
"نمای اجرایی برای تصمیم‌های سریع طراحی کنید.",
},
{
id: "collaboration",
icon: Users,
title: "اتصال منبع",
description:
"داده پراکنده را در یک مدل واحد ساختاردهی کنید.",
},
{
id: "voice",
icon: AudioLines,
title: "سطح دسترسی",
description: "دسترسی مبتنی بر نقش را برای هر گزارش و داشبورد تنظیم کنید.",
},
] as const;
interface Feature294Props {
className?: string;
}
const Feature294 = ({ className }: Feature294Props) => {
return (
<section
dir="rtl"
lang="fa"
className={cn(
"dark relative w-screen overflow-hidden bg-background py-32 text-foreground",
className,
)}
>
<div className="relative container flex h-full flex-col items-center justify-center">
<div className="w-full max-w-lg text-center">
<h1 className="relative z-20 text-center text-2xll font-semibold tracking-tighter text-balance md:text-2xll lg:text-2xll">
تصمیم استراتژیک را داده‌محور کنید
</h1>
<p className="mt-4 text-pretty text-muted-foreground/50">
داشبوردهای تعاملی به تیم‌ها اجازه می‌دهد سؤال جدید بپرسند بدون اینکه هر بار به تیم داده وابسته باشند.
</p>
</div>
<div className="relative mt-5 mb-10 h-40 w-[40rem]">
<div className="absolute inset-x-20 top-0 h-[2px] w-3/4 bg-gradient-to-r from-transparent via-indigo-500 to-transparent blur-sm" />
<div className="absolute inset-x-20 top-0 h-px w-3/4 bg-gradient-to-r from-transparent via-indigo-500 to-transparent" />
<div className="absolute inset-x-60 top-0 h-[5px] w-1/4 bg-gradient-to-r from-transparent via-sky-500 to-transparent blur-sm" />
<div className="absolute inset-x-60 top-0 h-px w-1/4 bg-gradient-to-r from-transparent via-sky-500 to-transparent" />
<SparklesCore
background="transparent"
minSize={0.4}
maxSize={1}
particleDensity={500}
className="h-full w-full"
particleColor="#FFFFFF"
/>
<div className="absolute inset-0 h-full w-full bg-background [mask-image:radial-gradient(350px_130px_at_top,transparent_20%,white)]" />
</div>
<div className="grid w-full max-w-5xl grid-cols-1 gap-15 md:grid-cols-2 lg:grid-cols-3">
{FEATURES.map((feature) => {
const IconComponent = feature.icon;
return (
<div key={feature.id} className="flex gap-4 text-start">
<IconComponent className="w-12 shrink-0 stroke-1 text-sky-500" />
<div className="space-y-2">
<h3 className="text-xl font-medium">{feature.title}</h3>
<p className="text-pretty text-muted-foreground/30">
{feature.description}
</p>
</div>
</div>
);
})}
</div>
</div>
</section>
);
};
export { Feature294 };