پرتوپرتو

اسپارک‌لاین (Sparkline)

نمودار کوچک inline برای نمایش روند یک متریک در سلول جدول، کارت، یا ردیف — SVG ساده و بدون وابستگی

معرفی

Sparkline یک نمودار کوچک SVG است که در فضای محدود کنار متن یا عدد می‌نشیند و روند یک متریک را نشان می‌دهد. رنگ بر اساس مقایسه‌ی اولین و آخرین نقطه خودکار انتخاب می‌شود (سبز/قرمز/خاکستری) — یا می‌توانید دستی override کنید.

چه زمانی استفاده کنیم:

  • سلول جدول — روند ۷/۳۰ روزه کنار ستون عددی (دنبال‌کننده، تعامل، بازدید)
  • کارت متریک — خلاصه‌ی روند پشت عدد اصلی
  • کارت پروفایل / concept — نمایش سریع سلامت یک شاخص

چه زمانی استفاده نکنیم:

  • محور زمانی مهم است (شما باید ببینید کدام روز اوج بود) — LineChart یا AreaChart کامل
  • داده کمتر از ۲ نقطه دارد — یک عدد تنها کافی است
  • نیاز به tooltip / hover — sparkline آگاهانه non-interactive طراحی شده؛ برای hover از LineChart استفاده کنید

دنبال‌کنندگان

۱۲۳٬۴۵۰

نرخ تعامل

۲٫۸٪

زمین بازی

زمین بازی
تنظیمات
ظاهر
داده
محتوا
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

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-* استفاده می‌کند.

انواع

line
area
bars
  • 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

Prop

Type

راهنمای استفاده

بکنید

  • اگر 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-labelaria-hidden="true" (زینتی؛ screen reader رد می‌شود)
  • با aria-labelrole="img" و label به‌عنوان توضیح خوانده می‌شود
  • فقط SVG — بدون JavaScript runtime، قابل رندر در SSR
  • vectorEffect="non-scaling-stroke" — ضخامت خط ثابت می‌ماند حتی اگر width تغییر کند

کامپوننت‌های مرتبط

  • MetricCard — دارای MetricCardSparkline داخلی اختصاصی‌تر (با lablel و tooltip)
  • LineChart — نسخه‌ی کامل با axis، tooltip، legend — وقتی جزئیات مهم است
  • TrendIndicator — فقط درصد تغییر با پیکان بالا/پایین — مناسب کنار sparkline