قالبهای بخش گزارش (ReportSections)
شش template آماده برای بخشهای بولتن — Executive Summary، Sentiment، Flow، Top Posts، Timeline، Source Breakdown
معرفی
ReportComposer خود primitive container است؛ این مجموعه شش section template آماده است که 90٪ بخشهای یک بولتن افکارسنجی را پوشش میدهند. هر template یک composition نازک از primitive های موجود (sentiment-distribution، flow-distribution، PostList، PartoLineChart، SocialPlatformBadge) داخل ReportSection shell است.
چه زمانی استفاده کنیم:
- وقتی بخشهای استاندارد یک بولتن (خلاصه اجرایی، توزیع احساسات، روند زمانی، پستهای برتر، منابع) را میسازید و نمیخواهید layout هر بخش را از صفر بنویسید
- وقتی بخشها داخل
ReportComposerیاBulletinViewerقرار میگیرند و به قابلیتهای shell (فعال/غیرفعال، collapse، drag) نیاز دارید - وقتی گزارش باید locale-aware باشد — عنوان پیشفرض هر بخش و فرمت اعداد بر اساس prop
locale(fa/ar/en) خودکار تنظیم میشوند
چه زمانی استفاده نکنیم:
- برای نمایش standalone یک نمودار خارج از بولتن — مستقیماً از
SentimentDistribution،FlowDistributionیاPartoLineChartاستفاده کنید - وقتی layout بخش موردنظر با هیچکدام از شش template منطبق نیست — بهجای دور زدن props، یک
ReportSectionخام با محتوای سفارشی بسازید - برای داشبوردهای تعاملی با فیلتر و drill-down — این templateها برای گزارشهای ایستا و قابل چاپ طراحی شدهاند
بولتن هفتگی — هفته ۱۴
نمونه ترکیب چند template آماده در یک بولتن
خلاصه اجرایی
توزیع احساسات
توزیع جریانها
منابع
زمین بازی
توزیع جریانها
استفاده
import { ReportComposer, ExecutiveSummarySection } from '@partodata/ui'<ReportComposer title="بولتن هفتگی">
<ExecutiveSummarySection
summary="حجم گفتوگو درباره کمپین تخفیف فصلی نسبت به هفته گذشته رشد داشت."
metrics={[{ label: 'تعداد پست', value: 4820, delta: 12.4 }]}
/>
</ReportComposer>ترکیب کامل شش template کنار هم:
import {
ReportComposer,
ExecutiveSummarySection,
SentimentBreakdownSection,
FlowDistributionSection,
TopPostsSection,
TimelineSection,
SourceBreakdownSection,
} from '@partodata/ui'
;<ReportComposer title="بولتن هفتگی">
<ExecutiveSummarySection
summary="نظرات مثبت روند صعودی داشت..."
metrics={[
{ label: 'تعداد پست', value: 4820, delta: 12.4 },
{ label: 'سهم مثبت', value: 78, unit: '٪' },
]}
/>
<SentimentBreakdownSection sentiment={sentiment} emotions={emotions} />
<FlowDistributionSection flow={flow} />
<TimelineSection data={dailyVolume} dataKeys={['volume']} summary={{ seriesKey: 'volume', from: 1240, to: 4820 }} />
<TopPostsSection posts={topPosts} topN={5} />
<SourceBreakdownSection
sources={[
{ platform: 'instagram', count: 600 },
{ platform: 'twitter', count: 300 },
{ platform: 'telegram', count: 80 },
]}
/>
</ReportComposer>شش Template
ExecutiveSummarySection
عنوان + پاراگراف AI/analyst-written + تا ۴ tile متریک (با delta و unit). برای بالای هر بولتن که خواننده در ۵ ثانیه context بگیرد.
SentimentBreakdownSection
SentimentDistribution + (اختیاری) EmotionDistribution کنار هم در lg+ breakpoint. اگر emotions نگذارید، فقط 3-class.
FlowDistributionSection
FlowDistribution افقی stacked از ۵ گرایش مخاطب.
TopPostsSection
PostList در حالت compact، با topN cap (پیشفرض 5). برای پستهای شاخص هفته.
TimelineSection
PartoLineChart با chartHeight تنظیمپذیر + اختیاری summary tile زیر آن (sparkline + delta percent). axisها locale-aware.
SourceBreakdownSection
Grid از platform badge ها با count + درصد محاسبهشده — مناسب نمایش سهم رسانهها در پوشش یک موضوع.
ویژگی مشترک
هر شش template از ReportSectionShellProps ارث میبرند، یعنی همه prop های slot ای ReportSection را پشتیبانی میکنند: enabled / onEnabledChange / collapsed / onCollapsedChange / draggable / onDragHandlePointerDown / onSettingsClick / headerActions. این اجازه میدهد در composer ادیتور هم استفاده شوند:
<ExecutiveSummarySection
summary="..."
enabled={summaryOn}
onEnabledChange={setSummaryOn}
collapsed={summaryCollapsed}
onCollapsedChange={setSummaryCollapsed}
draggable
onDragHandlePointerDown={handleDragStart}
/>عنوان پیشفرض هر template بهصورت locale-aware: مثلاً ExecutiveSummarySection بدون title پاسدادن «خلاصه اجرایی» (fa) / «الملخص التنفيذي» (ar) / «Executive Summary» (en) رندر میکند. title prop آن را override میکند.
جدول ویژگیها
تمام شش template از ReportSectionShellProps ارث میبرند، یعنی این props مشترکاند:
پراپهای مشترک (همهی templates)
ExecutiveSummarySection
SentimentBreakdownSection
FlowDistributionSection
TopPostsSection
TimelineSection
SourceBreakdownSection
دسترسیپذیری
- هر بخش با
ReportSectionshell wrap میشود که heading<h3>معنادار، landmark structure و کنترلهای keyboard-accessible (Switch enable، Button collapse، drag handle) را تأمین میکند. - چارتهای داخلی (
SentimentDistribution،FlowDistribution،EmotionDistribution،PartoLineChart) خود ARIA labels و توضیحات text-summary مناسب رندر میکنند —<title>و<desc>در SVG. TrendIndicatorدر summary tile باaria-labelمناسب (مثل «دلتا ۱۲٪») جهت screen reader آماده میشود.- در حالت چاپ، header actions (
print:hidden) مخفی میشوند و sectionهاbreak-inside-avoidمیگیرند تا روی صفحه نصف نشوند. - ترتیب tab روی sections از بالا به پایین RTL-aware است؛ drag handle قبل از Switch enable در tab order قرار میگیرد.
راهنمای استفاده
بکنید
- ترتیب پیشنهادی: ExecutiveSummary → Sentiment → Flow → Timeline → Top Posts → Sources. این ترتیب از بالا-به-پایین
scan-ablity بهینه است - برای print، sections را در
BulletinViewerبپوشانید — هر section خودکارbreak-inside-avoidمیگیرد - برای metric tile بیش از ۴ تا، یکMetricCardgrid مستقل بسازید — این template برای headline KPI است
نکنید
- sectionها را بهعنوان detail view مستقل استفاده نکنید — اینها داخل ReportComposer/BulletinViewer container
طراحیشدهاند -
topNبیش از ۱۰ روی TopPostsSection نگذارید — هدف «شاخصترینها» است نه فهرست کامل
کامپوننتهای مرتبط
- container و shell → ReportComposer + ReportSection + BulletinViewer
- اگر template خودتان میخواهید →
ReportSectionخام بسازید - پستهای full بهجای compact list →
PostCard - توزیع بهصورت standalone (نه داخل bulletin) →
SentimentDistribution+FlowDistribution