اسپارکلاین (Sparkline)
نمودار کوچک inline برای نمایش روند یک متریک در سلول جدول، کارت، یا ردیف — SVG ساده و بدون وابستگی
معرفی
Sparkline یک نمودار کوچک SVG است که در فضای محدود کنار متن یا عدد مینشیند و روند یک متریک را نشان میدهد. رنگ بر اساس مقایسهی اولین و آخرین نقطه خودکار انتخاب میشود (سبز/قرمز/خاکستری) — یا میتوانید دستی override کنید.
چه زمانی استفاده کنیم:
- سلول جدول — روند ۷/۳۰ روزه کنار ستون عددی (دنبالکننده، تعامل، بازدید)
- کارت متریک — خلاصهی روند پشت عدد اصلی
- کارت پروفایل / concept — نمایش سریع سلامت یک شاخص
چه زمانی استفاده نکنیم:
- محور زمانی مهم است (شما باید ببینید کدام روز اوج بود) —
LineChartیاAreaChartکامل - داده کمتر از ۲ نقطه دارد — یک عدد تنها کافی است
- نیاز به tooltip / hover — sparkline آگاهانه non-interactive طراحی شده؛ برای hover از
LineChartاستفاده کنید
دنبالکنندگان
۱۲۳٬۴۵۰
نرخ تعامل
۲٫۸٪
زمین بازی
استفاده
import { Sparkline } from '@parto-system-design/ui'
export function FollowersMetric() {
return (
<div className="flex items-center justify-between">
<span>دنبالکنندگان: ۱۲۳٬۴۵۰</span>
<Sparkline data={[18, 22, 19, 25, 28, 26, 31]} aria-label="روند ۷ روز اخیر" />
</div>
)
}Sparkline فقط یک آرایه از اعداد میگیرد؛ scale و padding را خودکار محاسبه میکند. رنگ در حالت پیشفرض trend="auto" از --sentiment-* استفاده میکند.
انواع
variant="line"— فقط خط (پیشفرض، سبکترین)variant="area"— خط + پرکردن زیر آن با ۱۸٪ شفافیتvariant="bars"— میلههای جداگانه (مناسب دادهی شمارشی روزانه)
رنگ — trend خودکار + سفارشی
trend="auto"(پیشفرض): اولین و آخرین نقطه مقایسه میشودtrend="up" | "down" | "neutral"— اگر میخواهید کنترل کنیدcolor="..."— هر مقدار CSS (توکن برند، hex، rgb) کهtrendرا نادیده میگیرد
رنگها از توکنهای --sentiment-* میآیند، پس در هر دو تم light/dark درست کار میکنند.
ترکیب با جدول
| حساب | دنبالکننده | روند ۷ روز |
|---|---|---|
| @tech_channel | ۴۵٬۲۱۰ | |
| @news_hub | ۱۸٬۳۴۰ | |
| @daily_quote | ۹۸٬۷۶۰ |
در ستونهای روند، showEndDot را فعال کنید تا نقطهی پایانی برجسته شود. ارتفاع 20px و عرض 80px در اکثر جدولها مناسب است.
Props
راهنمای استفاده
بکنید
- اگر sparkline اطلاعات معنادار دارد (نه صرفاً زینتی)
aria-labelبدهید — مثلاً"روند ۷ روز اخیر: ۳۰٪ رشد"- در ردیف جدول عرض ثابت (۸۰-۱۰۰px) و ارتفاع ۲۰-۲۴px استفاده کنید - برای متریکهای مهمvariant="area"مؤثرتر است — فضای پر بیشتر دیده میشود - اگر sparkline صرفاً زینتی است هیچaria-labelندهید؛ خودکارaria-hiddenمیشود
نکنید
- عرض کوچکتر از ۵۰px ندهید — نقاط داده روی هم میافتند و خوانا نیست - برای دادهی بیش از ۳۰ نقطه در
variant="bars"استفاده نکنید — هر میله تقریباً ۰ عرض میشود؛ از"line"یا"area"استفاده کنید - انتظار tooltip / hover نداشته باشید — sparkline با هدف خوانایی سریع non-interactive است. برای hover ازLineChartاستفاده کنید - رنگ را با متن semantic نامتناسب نکنید (مثلاً قرمز برای روند صعودی خوب) — اگر معنی متفاوت استcolorرا بگذارید، نهtrend
دسترسیپذیری
- بدون
aria-label—aria-hidden="true"(زینتی؛ screen reader رد میشود) - با
aria-label—role="img"و label بهعنوان توضیح خوانده میشود - فقط SVG — بدون JavaScript runtime، قابل رندر در SSR
vectorEffect="non-scaling-stroke"— ضخامت خط ثابت میماند حتی اگرwidthتغییر کند
کامپوننتهای مرتبط
- MetricCard — دارای
MetricCardSparklineداخلی اختصاصیتر (با lablel و tooltip) - LineChart — نسخهی کامل با axis، tooltip، legend — وقتی جزئیات مهم است
- TrendIndicator — فقط درصد تغییر با پیکان بالا/پایین — مناسب کنار sparkline