Pricing Cardv1.0.0
یک پلنِ کاملِ قیمتگذاری: عنوان، توضیح، قیمت، فهرستِ ویژگیها و دکمهٔ اقدام. Card و Badge و Button از قبل بودند و میشد این را دستی ساخت، اما الگوی «پلنِ وسط با هایلایتِ رنگی» — که رایجترین شکلِ جدولِ قیمتگذاری است — یک recipe آماده نداشت. چند PricingCard را کنار هم در یک grid بچینید تا جدولِ قیمتگذاری کامل شود.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
npx digdesign@latest add https://docs.digdesign.ir/r/pricing-card.jsonpnpm dlx digdesign@latest add https://docs.digdesign.ir/r/pricing-card.jsonyarn dlx digdesign@latest add https://docs.digdesign.ir/r/pricing-card.jsonbunx --bun digdesign@latest add https://docs.digdesign.ir/r/pricing-card.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
استفاده
import {
PricingCard,
PricingCardHeader,
PricingCardTitle,
PricingCardDescription,
PricingCardPrice,
PricingCardFeatures,
PricingCardFeature,
PricingCardFooter,
} from "@/components/ui/pricing-card"
import { Button } from "@/components/ui/button"این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
ترکیب اجزا
PricingCard خودش grid نیست؛ چیدمانِ کنارِهم چند پلن با یک grid grid-cols-3 gap-6 ساده در سمتِ مصرفکننده انجام میشود — دقیقاً مثلِ اینکه چند Card را کنارِ هم بگذارید.
highlighted حاشیهٔ رنگِ مکمل و تهرنگِ ملایمِ بالای کارت را اضافه میکند، بدونِ بزرگکردن؛ کارتها همتراز میمانند. badge فقط وقتی highlighted باشد، به شکلِ قرصِ توپر در گوشهٔ بالای کارت، همردیفِ PricingCardIcon نمایش داده میشود.
PricingCardFeature با included=false با دایرهٔ خالی و متنِ کمرنگ (بدونِ خطِ میانی) نشان میدهد، برای فهرستِ کامل و یکسانِ ویژگیها بین پلنهای مختلف. PricingCardSeparator بخشِ قیمت را از امکانات جدا میکند و PricingCardFeaturesHeader عنوانِ آن بخش است.
دسترسپذیری
- ترتیبِ DOM با ترتیبِ بصری یکی است؛ در چیدمانِ گرید هم پلنِ هایلایتشده در جای طبیعیِ خودش در فهرستِ پلنها میماند، نه اول یا آخر بهزور.
- دکمهٔ اقدامِ هر پلن باید متنِ مستقل و معنادار داشته باشد (مثلاً «شروع پلن حرفهای»)، نه یک «کلیک کنید» تکراری در همهٔ کارتها.
مرجع API
PricingCard
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| highlighted | boolean | false | برجستهسازیِ پلنِ پیشنهادی (حاشیه و تهرنگِ رنگِ مکمل). |
| badge | React.ReactNode | — | برچسبِ توپر در گوشهٔ بالا-پایانِ کارت؛ فقط با highlighted نمایش داده میشود. |
PricingCardPrice
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| amount | React.ReactNode | — | قیمتِ اصلی. |
| period | React.ReactNode | — | دورهٔ پرداخت، مثلاً «/ ماه». |
| originalAmount | React.ReactNode | — | قیمتِ قبلی با خطخورده، برای نمایشِ تخفیف. |
PricingCardFeature
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| included | boolean | true | false یعنی ویژگی در این پلن نیست؛ دایرهٔ خالی و متنِ کمرنگ، بدونِ خطِ میانی. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک در دست کار است.
نمونهها
جدولِ قیمتگذاریِ کامل
سه PricingCard در یک grid؛ پلنِ وسط highlighted است. این دقیقاً همان recipeِ رایجی است که در گزارشِ خلاها به آن اشاره شد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
با تخفیف
originalAmount قیمتِ قبلی را با خطخورده کنارِ قیمتِ جدید نشان میدهد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
ویژگیِ حذفشده
included={false} روی PricingCardFeature دایرهٔ خالی و متنِ کمرنگ نشان میدهد؛ برای مقایسهٔ فهرستِ یکسانِ ویژگیها بینِ پلنها.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| جدولِ قیمتگذاریِ کامل | بخشِ قیمتگذاری در صفحهٔ فرود |
| با تخفیف | originalAmount قیمتِ قبلی را با خطخورده کنارِ قیمتِ جدید نشان میدهد. |
| ویژگیِ حذفشده | included={false} روی PricingCardFeature دایرهٔ خالی و متنِ کمرنگ نشان میدهد؛ برای مقایسهٔ فهرستِ یکسانِ ویژگیها بینِ پلنها. |
دستورالعمل استفاده
حداکثر یک پلن هایلایتشده
انجام بده
فقط پلنی که واقعاً میخواهید بیشتر انتخاب شود را highlighted کنید؛ چشمِ کاربر باید بدونِ فکرکردن به همانجا برود.
انجام نده
چند پلنِ هایلایتشده کنارِ هم، تصمیم را به کاربر برنمیگرداند و اثرِ برجستهسازی را خنثی میکند.