پرتوپرتو

PostSignals (سیگنال‌های پست)

ردیف چیپ‌های دامین‌اسپسیفیک — sentiment، emotion (۹-کلاسه)، گرایش مخاطب (۵-کلاسه)، severity، cluster، language. درون فوتر PostCard.

معرفی

<PostSignals> همه‌ی سیگنال‌های دامین افکارسنجی را در یک ردیف چیپ‌های فشرده نمایش می‌دهد. در فوتر <PostCard> (و در tabهای <PostDetailsDrawer>) استفاده می‌شود.

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

  • زیر متن/مدیا/متریک‌های هر پست، برای نمایش طبقه‌بندی‌های NLP و خوشه‌بندی
  • در فوتر <PostCard> یا tabهای <PostDetailsDrawer>، جایی که چند سیگنال باید هم‌زمان کنار هم دیده شوند
  • وقتی تحلیل‌گر باید با یک نگاه sentiment، شدت و خوشه‌ی پست را اسکن کند (مثلاً در triage روزانه)

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

  • اگر فقط یک سیگنال نمایش می‌دهید — به‌جای آن از <EmotionBadge> / <FlowBadge> / <SentimentBadge> تکی استفاده کنید
  • برای نمایش توزیع سیگنال‌ها روی مجموعه‌ای از پست‌ها — از <EmotionDistribution> / <FlowDistribution> استفاده کنید
  • به‌عنوان نوار فیلتر مستقل — این کامپوننت خروجی طبقه‌بندی همان پست را نمایش می‌دهد و تنها چیپ خوشه (با onClusterClick) تعاملی است

زمین بازی

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

استفاده

import { PostSignals } from '@partodata/ui'
;<PostSignals
  sentiment="negative"
  emotion="anger"
  flow="grey"
  severity="high"
  cluster={{ id: 'crisis-service', label: 'بحران خدمات', tone: 'warning' }}
  language="fa"
  onClusterClick={(c) => addFilter(c.id)}
/>

حالت‌ها

  • compact={true} — فقط sentiment و severity (برای density compact)
  • compact={false} (پیش‌فرض) — تمام چیپ‌ها همراه با emotion + flow + cluster + language

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

بکنید

  • در فیدهای با چگالی فشرده (مثل حالت compact در PostList) مقدار compact را فعال کنید تا فقط sentiment و severity بماند و ردیف اسکن‌پذیر باشد.
  • onClusterClick را متصل کنید تا چیپ خوشه به دکمه‌ی فیلتر تبدیل شود — کامپوننت خودش stopPropagation می‌کند تا کلیک روی چیپ، کارتِ والد را باز نکند.
  • کد زبان را همیشه از خروجی تشخیص زبان پاس بدهید — برای «fa» چیپی رندر نمی‌شود و فقط پست‌های غیرفارسی برجسته می‌شوند.
  • سیگنال‌ها را فقط وقتی تنظیم کنید که خروجی واقعی تحلیل موجود است — همه‌ی propها اختیاری‌اند و بدون هیچ سیگنالی، کامپوننت اصلاً رندر نمی‌شود.

نکنید

  • برای severity="low" چیپ جداگانه نسازید — این مقدار به‌عمد رندر نمی‌شود تا فقط شدت‌های قابل‌توجه دیده شوند.
  • چیپ‌ها را با Badge عمومی بازسازی نکنید — رنگ‌ها از توکن‌های دامنه (--sentiment-*، --severity-*) می‌آیند و باید در کل محصول یکپارچه بمانند.
  • در حالت compact سیگنال‌های مخفی‌شده (emotion، flow، cluster، language) را جداگانه کنار کامپوننت رندر نکنید — برای یک پست دو منبع حقیقت می‌سازد.
  • از چیپ‌های غیرتعاملی انتظار کلیک نداشته باشید — تنها چیپ خوشه (با onClusterClick) تعاملی است؛ برای فیلتر بر اساس sentiment از کنترل‌های فیلتر سطح لیست استفاده کنید.

Props

PostSignals

علاوه بر propهای زیر، همه‌ی React.HTMLAttributes<HTMLDivElement> (مثل className) پشتیبانی می‌شود. اگر هیچ سیگنالی تنظیم نشده باشد (یا تنها سیگنال، language="fa" باشد)، کامپوننت null برمی‌گرداند.

Prop

Type

PostCluster

Prop

Type

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

  • ریشه‌ی کامپوننت یک div ساده (بدون role) است؛ چیپ‌های غیرتعاملی span هستند و اسکرین‌ریدر متن آن‌ها را به ترتیب می‌خواند.
  • معنا فقط با رنگ منتقل نمی‌شود — هر چیپ برچسب متنی فارسی دارد («مثبت»، «شدت بالا»، «بحرانی»، …) و رنگ صرفاً تقویت‌کننده است.
  • چیپ خوشه تنها عنصر تعاملی است: یک <button type="button"> واقعی که با Tab فوکوس می‌گیرد، با Enter یا Space فعال می‌شود و حلقه‌ی focus-visible با رنگ برند دارد. وقتی onClusterClick تنظیم نشده باشد disabled است و از ترتیب فوکوس خارج می‌شود.
  • کلیک روی چیپ خوشه با stopPropagation از رسیدن رویداد به کارتِ قابل‌کلیک والد جلوگیری می‌کند — فعال‌سازی فیلتر، پست را باز نمی‌کند.
  • چیپ زبان Tooltip توضیحی دارد («زبان شناسایی‌شده برای متن پست») که روی hover ظاهر می‌شود؛ trigger آن یک span غیرقابل‌فوکوس است، بنابراین محتوای Tooltip با کیبورد در دسترس نیست — اما متن خود چیپ (نام زبان) همیشه خوانده می‌شود و اطلاعات اصلی را حمل می‌کند.
  • آیکن‌ها (Activity، Layers، Languages) تزئینی‌اند و معنای هر چیپ در متن مجاور آن است.
  • اگر هیچ سیگنالی موجود نباشد، کامپوننت null برمی‌گرداند — هیچ عنصر خالی در درخت دسترسی‌پذیری باقی نمی‌ماند.

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

  • برای تک sentiment روی header → <SentimentBadge>
  • برای توزیع emotion (نمودار) → <EmotionDistribution>
  • برای توزیع flow → <FlowDistribution>