پرتوپرتو

کارت مفهوم (ConceptCard)

کارت headline پایش برای کلاسترینگ نظرات — ترکیب وضعیت، شدت، توزیع گرایش، sentiment، sparkline، خلاصه AI، و چک‌باکس مقایسه

معرفی

ConceptCard کارت تک-مفهومی برای dashboardهای کلاسترینگ نظرات است: هر کارت یک خوشه (concept) از نظرات همگرا را نمایش می‌دهد. composition آن شامل وضعیت زنده (status pulse)، شدت (severity)، توزیع گرایش مخاطب (5-class)، توزیع sentiment (3-class)، trend sparkline، و یک خلاصه‌ی AI است. مناسب grid 3-ستونه در صفحه‌ی کلاسترها.

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

  • صفحه‌ی کلاسترها/خوشه‌ها که ده‌ها concept را به‌صورت grid قابل-مقایسه نشان می‌دهد
  • خروجی تحلیل ML که برای هر cluster signalهای متنوع تولید می‌کند (flow، emotion، trend)
  • صفحه‌ی انتخاب چندتایی برای مقایسهcomparison prop checkbox header را اضافه می‌کند

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

  • یک concept تکی در detail view → از MetricCard + Charts جداگانه برای هر signal استفاده کنید (نمایش بزرگ‌تر)
  • لیست خبر/پست با کاربرد متفاوت → PostCard یا PostList
  • وقتی فقط نام و یک متریک می‌خواهید → Card پایه

رونمایی گوشی جدید

بحرانیفوری

خوشه ۴ — ۱٬۲۴۰ پست

حجم نظرات منفی در ۲۴ ساعت اخیر سه برابر شده. تمرکز روی شهرهای بزرگ.

حامیان حکومت۶٪منتقدان داخلی۲۶٪مخالفان داخلی۴۴٪مخالفان خارجی۱۶٪قشر خاکستری۸٪
مثبت۱۰٪خنثی۱۶٪منفی۷۴٪
مجموع
۱۲۴۰

زمین بازی

زمین بازی

رونمایی گوشی جدید

بحرانیفوری

خوشه ۴ — ۱٬۲۴۰ پست

حجم نظرات منفی در ۲۴ ساعت اخیر سه برابر شده.

حامیان حکومت۶٪منتقدان داخلی۲۶٪مخالفان داخلی۴۴٪مخالفان خارجی۱۶٪قشر خاکستری۸٪
مثبت۱۰٪خنثی۱۶٪منفی۷۴٪
مجموع
۱۲۴۰
تنظیمات
ظاهر
محتوا
حالت
کد این نمونه به‌صورت خودکار قابل تولید نیست — برای کد آماده‌ی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.

استفاده

import { ConceptCard } from '@parto-system-design/ui'
;<ConceptCard
  title="رونمایی گوشی جدید"
  subtitle="خوشه ۴ — ۱٬۲۴۰ پست"
  status="critical"
  severity="urgent"
  flow={{ 'pro-gov': 80, 'internal-critic': 320, 'internal-opponent': 540, 'external-opponent': 200, grey: 100 }}
  sentiment={{ positive: 120, negative: 920, neutral: 200 }}
  trend={[8, 12, 15, 22, 35, 48, 56, 78]}
  totalCount={1240}
  aiSummary="حجم نظرات منفی در ۲۴ ساعت اخیر سه برابر شده."
/>

حالت‌ها

مقایسه

بازخورد بسته‌بندی جدید

بالا
حامیان حکومت۷٪منتقدان داخلی۴۲٪مخالفان داخلی۲۸٪مخالفان خارجی۱۴٪قشر خاکستری۹٪

با تنظیم comparison، یک checkbox در هدر کارت ظاهر می‌شود (با stopPropagation تا کلیک روی checkbox باعث activate شدن کل کارت نشود).

const [selected, setSelected] = React.useState(false)
<ConceptCard
  title="کمپین تخفیف فصلی"
  comparison={{ selected, onSelectionChange: setSelected, label: 'مقایسه' }}
  ...
/>

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

بکنید

  • برای کلاسترهای فوری از status="critical" + severity="urgent" ترکیبی استفاده کنید — pulse + رنگ قرمز با هم سیگنال قوی می‌سازند - aiSummary را به ۱-۲ جمله محدود کنید (line-clamp-2 خودکار اعمال می‌شود) - trend را با ۸-۱۴ نقطه پاس بدهید — sparkline ضد-noise است

نکنید

  • status و severity را اشتباه نگیرید: status برای حالت لحظه‌ای (در حال تشدید)، severity برای اولویت ثابت طبقه‌بندی‌شده - بیش از ۹ کارت در یک ردیف نگذارید — grid شلوغ و غیر-قابل‌اسکن می‌شود - flow را وقتی فقط ۲ گرایش غالب دارید پاس ندهید — distribution flat می‌شود و ارزش بصری ندارد

جدول ویژگی‌ها

Prop

Type

دسترسی‌پذیری

  • وقتی interactive=true پاس شود، کارت role="button" + tabIndex=0 می‌گیرد و با Enter/Space قابل فعال‌سازی است؛ در غیر این صورت role="article".
  • checkbox comparison با stopPropagation رفتار می‌کند — کلیک روی checkbox باعث activate شدن کل کارت نمی‌شود و focus order مستقل است.
  • status pulse با motion-safe:animate-pulse رندر می‌شود؛ در prefers-reduced-motion ساکن می‌ماند و معنا از رنگ + label status منتقل می‌شود.
  • توزیع flow و sentiment به‌صورت segmentهای رنگی نمایش داده می‌شوند ولی متن جداگانه (مثل subtitle یا total count) معنا را منتقل می‌کند تا کاربر color-blind محروم نماند.
  • aiSummary با line-clamp-2 کوتاه می‌شود؛ برای متن کامل، کارت را در حالت detail (مثلاً modal) نمایش دهید.

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

  • برای پروفایل اکانت/پیج به‌جای مفهومPageCard
  • برای کارت یک پست تکیPostCard
  • توزیع گرایش به‌صورت standaloneFlowDistribution
  • برای ترکیب چندتا کارت در یک گزارشReportComposer + ConceptCard به‌عنوان children