ویژگیها در گرید
پیشنمایش تمامصفحهبخشِ ویژگیها: سرِ بخش با برچسب، تیتر و توضیحِ وسطچین، شش کارت با آیکونِ رنگی، تیتر و یک جمله؛ کارتها پلهپله نرم وارد میشوند.
۱. نصب کامپوننتها
این بلاک از ۳ آیتم دیگ استفاده میکند: control-sizeiconsreveal
پکیجمنیجر پیشفرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیجمنیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/reveal.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/reveal.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/reveal.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/control-size.json https://docs.digdesign.ir/r/icons.json https://docs.digdesign.ir/r/reveal.json۲. کد صفحه
کد را در app/<route>/page.tsx بگذارید و متنها، داده و هندلرها را با محصول خودتان عوض کنید.
features-grid.tsx
"use client"
import { BarChartIcon, BellIcon, BoltIcon, ReceiptIcon, ShieldCheckIcon, UsersIcon } from "@/components/icons"
import { ControlSizeProvider } from "@/components/ui/control-size"
import { Reveal } from "@/components/ui/reveal"
const FEATURES = [
{ icon: <ReceiptIcon />, tone: "violet", title: "فاکتور در یک دقیقه", text: "قالبِ رسمی، شمارهٔ خودکار و ارسالِ پیامکی برای مشتری." },
{ icon: <BarChartIcon />, tone: "blue", title: "گزارشِ زنده", text: "سود و زیانِ هر روز، بدونِ اکسل و فرمول." },
{ icon: <UsersIcon />, tone: "green", title: "حقوق و دستمزد", text: "فیشِ حقوقی، بیمه و مالیات با یک کلیک." },
{ icon: <BellIcon />, tone: "orange", title: "یادآورِ سررسید", text: "چک و قسط را یک روز قبل خبرت میکنیم." },
{ icon: <ShieldCheckIcon />, tone: "blue", title: "امن و پشتیباندار", text: "رمزگذاری و نسخهٔ پشتیبانِ روزانه روی سرورِ داخلی." },
{ icon: <BoltIcon />, tone: "violet", title: "اتصال به بانک", text: "تراکنشهای حساب خودش وارد و دستهبندی میشود." },
]
/**
* ویژگیها در گریدِ کارت: سرِ بخش با برچسب، تیتر و توضیح؛ شش کارت با آیکونِ رنگی
* (تهِ رنگ از تمِ هر ویژگی)، تیتر و یک جملهٔ کوتاه. کارتها پلهپله نرم وارد میشوند.
*/
export default function FeaturesGridBlock() {
return (
<ControlSizeProvider size="xl" asChild>
<section aria-labelledby="features-grid-title" className="mx-auto flex w-full max-w-6xl flex-col gap-12 px-4 py-24 sm:px-6">
<div className="mx-auto flex max-w-2xl flex-col items-center gap-3 text-center">
<span className="text-sm font-semibold text-brand-secondary">امکانات</span>
<h2 id="features-grid-title" className="text-3xl leading-snug font-black text-balance sm:text-4xl">هر چه برای حسابوکتاب لازم داری</h2>
<p className="text-lg leading-8 text-muted-foreground">از فاکتورِ اول تا گزارشِ آخرِ سال، بدونِ نرمافزارِ دوم.</p>
</div>
<ul className="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3">
{FEATURES.map((feature, index) => (
<Reveal asChild key={feature.title} delay={index * 80}>
<li className="flex flex-col gap-4 rounded-xl border border-border bg-card p-6 transition-[opacity,translate,box-shadow] hover:shadow-card">
<span
aria-hidden
className="flex size-11 items-center justify-center rounded-xl [&>svg]:size-5"
style={{ background: `color-mix(in oklab, var(--dig-${feature.tone}-500) 12%, var(--card))`, color: `var(--dig-${feature.tone}-600)` }}
>
{feature.icon}
</span>
<h3 className="text-lg font-bold">{feature.title}</h3>
<p className="leading-7 text-muted-foreground">{feature.text}</p>
</li>
</Reveal>
))}
</ul>
</section>
</ControlSizeProvider>
)
}