سربرگ صفحه (PageHeader)

جزء سطح پایینی که سرِ صفحهٔ هر قالب صفحه را می‌سازد — عنوان (تنها h1 صفحه)، توضیح، راه بازگشت، اقدام اصلی و اقدام‌های دیگر؛ صفحهٔ محصول آن را نمی‌نویسد، قالبش رندرش می‌کند.

معرفی

PageHeader سرِ صفحه‌ای است که قالب‌های صفحه رندر می‌کنند: عنوان (تنها h1 صفحه)، توضیح اختیاری، راه بازگشت و ناحیهٔ اقدام‌ها در انتهای ردیف. این صفحه رفتار آن را مستند می‌کند — شکستن عنوان، جای اقدام‌ها، فاصله در قاب — چون سرِ همهٔ قالب‌ها همین است؛ صفحهٔ محصول آن را خودش نمی‌نویسد.

در صفحهٔ محصول: قالب صفحه

سرِ صفحهٔ هر قالب صفحه همین PageHeader است و قالب آن را با عنوان، راه بازگشت، زبانه‌ها و اقدام‌ها خودش رندر می‌کند؛ صفحهٔ محصول PageHeader نمی‌نویسد. PageHeader جزء سطح پایین‌تر است.

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

  • در کد خود سیستم طراحی، برای ساختن سرِ یک قالب یا بلوک صفحه‌ای.

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

  • در صفحهٔ محصول — هر صفحه یک قالب است و قالب سرِ صفحه را با title، description، back، primaryAction و secondaryActions خودش می‌سازد (حتی CustomPage؛ قاعدهٔ ESLint parto/page-template این جزء را در صفحه نشان می‌دهد).
  • داخل modal یا dialog — header در overlay ها معمولاً ساده‌تر است
  • برای عنوان بخش‌های صفحه — بخش‌های قالب (DetailSection، SettingsSection، DashboardSection) عنوان خودشان را دارند

PageHeader تخت یا PageHeaderRoot ترکیبی؟

این PageHeader تخت و prop-محور همان سری است که قالب‌ها می‌سازند: title/description/onBack/breadcrumbs/ primaryAction/actions. عنوان نقش عنوان صفحه را دارد: text-display (22 / 32، وزن 600) و توضیح text-body (14). سربرگ ترکیبی PageHeaderRoot (داربست صفحه (Page*)) جزء سطح پایین دیگری است؛ صفحه‌ای که زبانه، ردیف متا یا راه بازگشت لازم دارد DetailPage است (tabs، meta، back)، نه سربرگی که خودتان بسازید.

زمین بازی

با تغییر تنظیمات زیر، پیش‌نمایش زنده را مشاهده کنید.

زمین بازی

گزارش‌های افکارسنجی

مرور بر همه گزارش‌های اخیر

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

استفاده

گزارش تعامل اینستاگرام

تحلیل نرخ تعامل در بازه زمانی انتخاب‌شده

صفحهٔ محصول این سر را از propهای قالبش می‌گیرد؛ همان سر در کد صفحه این‌طور نوشته می‌شود:

'use client'
import { Button } from '@partodata/ui'
import { DetailPage } from '@partodata/ui/templates'

declare function refresh(): void

export function EngagementReportScreen() {
  return (
    <DetailPage
      title="گزارش تعامل اینستاگرام"
      description="تحلیل نرخ تعامل در بازه زمانی انتخاب‌شده"
      back={{ href: '/reports', label: 'گزارش‌ها' }}
      secondaryActions={<Button variant="default">خروجی</Button>}
      primaryAction={<Button onClick={refresh}>به‌روزرسانی</Button>}
    >
      {/* DetailSectionها */}
    </DetailPage>
  )
}

و قالب آن را با همین جزء می‌سازد (مرجع جزء، برای کد خود سیستم طراحی):

<PageHeader
  title="گزارش تعامل اینستاگرام"
  description="تحلیل نرخ تعامل در بازه زمانی انتخاب‌شده"
  actions={<Button variant="default">خروجی</Button>}
  primaryAction={<Button onClick={refresh}>به‌روزرسانی</Button>}
/>

حالت‌ها و انواع

با Breadcrumb

تحلیل کمپین نوروز

گزارش جامع عملکرد کمپین از 1 فروردین تا 15 فروردین

جای اقدام اصلی صفحه

اقدام اصلی صفحه، یکی در هر صفحه، primaryAction همین سربرگ است: یک Button بدون variant که همیشه آخرِ خوشهٔ اقدام‌ها رندر می‌شود. مگر اینکه صفحه PageToolbar داشته باشد، یعنی جست‌وجو یا فیلتر؛ آن‌وقت اقدام اصلی primaryAction نوارابزار است و سربرگ primaryAction ندارد.

اقدام‌های دیگر در actions می‌آیند. actions همیشه جای اقدام‌های ثانوی است: دکمهٔ بدون variant در آن، مثل همه‌جا، همان default خنثی است، و فقط primaryAction دکمهٔ بدون variant را اصلی رندر می‌کند؛ پس صفحه دو دکمهٔ اصلی پیدا نمی‌کند. قانون ESLint parto/page-primary-action فقط variant="primary" صریح در actions را گزارش می‌کند. (تا 3٫x، سربرگی که primaryAction نداشت دکمهٔ بدون variant در actions را اصلی رندر می‌کرد؛ اگر آن دکمه اقدام اصلی صفحه است، به primaryAction ببریدش.)

کنترل‌های actions و primaryAction که size ندارند یک ارتفاع می‌گیرند، sm (30 پیکسل)، فیلد هم (که تنها 38 پیکسل است) و به اندازهٔ محتوایشان؛ یک ControlSizeProvider بیرونی هنوز تصمیم می‌گیرد.

<PageHeader
  title="هشدارها"
  actions={<Button variant="default">خروجی</Button>}
  primaryAction={
    <Button onClick={createAlert} iconStart={<Plus />}>
      ساخت هشدار
    </Button>
  }
/>

اقدام اصلی‌ای که کاربر اجازه‌اش را ندارد پنهان نمی‌شود: همان‌جا غیرفعال با دلیلش می‌ماند، با GatedAction دور Button (<GatedAction allowed={canCreate} reason="…">)؛ نه canCreate && <Button/> (قاعدهٔ ESLint parto/page-primary-action آن را نشان می‌دهد). false و null هیچ خوشه‌ای رندر نمی‌کنند؛ actions در هر حال ثانوی است. دکمهٔ اصلی را به actions نبرید: آن‌جا دکمهٔ بدون variant خنثی است، نه اصلی. primaryAction همیشه یک Button است، نه fragment؛ در محیط توسعه fragment هشدار می‌دهد.

در عرض کم (موبایل، یا یک PeriodSelector پهن در actions) عنوان جای خودش را نگه می‌دارد: اقدام‌ها تا وقتی کل عنوان کنارشان جا می‌شود کنار آن می‌مانند (عنوان کوتاه با یک دکمه، حتی روی موبایل)، و وقتی جا نمی‌شود به خط خودشان زیر عنوان می‌روند و اگر از عرض صفحه پهن‌تر باشند، درون همان خط می‌شکنند. توضیح (description) در این حساب نیست و در عرض باقی‌مانده می‌شکند.

داخل ProductFrame

قالب‌ها PageHeader را با عنوان صفحه (تنها h1 آن) بالای محتوای خودشان رندر می‌کنند. داخل ProductFrame فاصلهٔ 48 پیکسلی تا نوار بالا (--layout-page-top) را خودش می‌گذارد، چون ناحیهٔ محتوای قاب padding ندارد؛ بیرون از قاب فاصله‌ای اضافه نمی‌کند. فاصلهٔ سرِ صفحه تا اولین بلوک را بخش بعدی قالب می‌دهد، نه className روی سر.

PageHeader فقط برای عنوان صفحه است. داخل Dialog، Sheet، Drawer یا Popover که از صفحه باز شود، این فاصله اعمال نمی‌شود (این سطوح دیگر «صفحهٔ قاب» نیستند)؛ عنوان بخش‌های صفحه را بخش‌های قالب (DetailSection، …) می‌دهند.

Props

Prop

Type

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

بکنید

  • صفحهٔ محصول را با یک قالب بسازید؛ سرِ صفحه (و تنها h1) را قالب با همین جزء می‌سازد - در کد خود سیستم طراحی، اقدام اصلی را در primaryAction بگذارید و اقدام‌های دیگر را variant="default" در actions - برای صفحه‌ای دو سطح یا بیشتر عمیق، breadcrumbs قالب را بدهید

نکنید

  • PageHeader را در صفحهٔ محصول ننویسید (قاعدهٔ ESLint parto/page-template)؛ قالب آن را رندر می‌کند - از PageHeader به عنوان جایگزین نوار بالای قاب استفاده نکنید — PageHeader برای سطح صفحه است؛ نوار بالای برنامه را ProductFrame می‌دهد - دو دکمهٔ اصلی نگذارید و اقدام اصلی را اول نگذارید؛ primaryAction یکی است و همیشه آخر - وقتی صفحه PageToolbar دارد، primaryAction سربرگ را خالی بگذارید - بیش از 3 دکمه در actions نگذارید — اقدامات اضافی را در DropdownMenu قرار دهید

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

  • دکمه برگشت دارای aria-label است که از locale سیستم خوانده می‌شود
  • عنوان صفحه با تگ <h1> رندر می‌شود که برای ساختار صفحه مهم است

اجزای سرِ صفحه (PageHeaderRoot)

اجزای تکه‌تکهٔ سرِ صفحه (PageHeaderRoot و تکه‌هایش) داخلی‌اند و در مرجع جداگانه آمده‌اند. در صفحهٔ محصول سرِ صفحه را قالب صفحه می‌سازد؛ این اجزا را مستقیم به کار نبرید.

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

  • Breadcrumb — اغلب در کنار PageHeader استفاده می‌شود تا مسیر ناوبری کاربر مشخص باشد
  • PageToolbar — صفحه‌ای که جست‌وجو یا فیلتر دارد اقدام اصلی‌اش را به primaryAction نوارابزار می‌دهد، نه به این سربرگ
  • ProductFrame — نوار بالای برنامه (هویت محصول و اقدام‌های سراسری)، نه سربرگ صفحه
  • داربست صفحه (Page*) — سربرگ ترکیبی PageHeaderRoot، جزء سطح پایین کد خود سیستم طراحی؛ صفحه‌ای که زبانه، متا یا راه بازگشت در سرش لازم دارد DetailPage است (tabs، meta، back)
  • چیدمان (الگو) — اسکلتی که قالب‌های صفحه رویش ساخته شده‌اند: PageContainer › PageHeader › PageSection