کارت مفهوم (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)
- صفحهی انتخاب چندتایی برای مقایسه —
comparisonprop checkbox header را اضافه میکند
چه زمانی استفاده نکنیم:
- یک concept تکی در detail view → از
MetricCard+ Charts جداگانه برای هر signal استفاده کنید (نمایش بزرگتر) - لیست خبر/پست با کاربرد متفاوت →
PostCardیاPostList - وقتی فقط نام و یک متریک میخواهید →
Cardپایه
رونمایی گوشی جدید
بحرانیفوریخوشه ۴ — ۱٬۲۴۰ پست
حجم نظرات منفی در ۲۴ ساعت اخیر سه برابر شده. تمرکز روی شهرهای بزرگ.
زمین بازی
رونمایی گوشی جدید
بحرانیفوریخوشه ۴ — ۱٬۲۴۰ پست
حجم نظرات منفی در ۲۴ ساعت اخیر سه برابر شده.
استفاده
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 میشود و ارزش بصری ندارد
جدول ویژگیها
دسترسیپذیری
- وقتی
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ساکن میماند و معنا از رنگ + labelstatusمنتقل میشود. - توزیع flow و sentiment بهصورت segmentهای رنگی نمایش داده میشوند ولی متن جداگانه (مثل subtitle یا total count) معنا را منتقل میکند تا کاربر color-blind محروم نماند.
aiSummaryباline-clamp-2کوتاه میشود؛ برای متن کامل، کارت را در حالت detail (مثلاً modal) نمایش دهید.
کامپوننتهای مرتبط
- برای پروفایل اکانت/پیج بهجای مفهوم →
PageCard - برای کارت یک پست تکی →
PostCard - توزیع گرایش بهصورت standalone →
FlowDistribution - برای ترکیب چندتا کارت در یک گزارش →
ReportComposer+ConceptCardبهعنوان children