پرتوپرتو

داربست صفحه (Page*)

خانوادهٔ چیدمان صفحه به‌صورت اسلات‌محور — PageContainer، PageHeaderRoot، PageSection و کروم تمام‌عرض

معرفی

خانوادهٔ Page* مجموعهٔ ساختاریافته و اسلات‌محور چیدمان صفحه است، برگرفته از نسل جدید Page* سوپابیس و برای RTL امن‌شده (فقط خصوصیات منطقی، container-query محور). این خانواده سه لایه دارد: کانتینر عرض (PageContainerسربرگ ترکیبی صفحه (PageHeaderRoot + اجزایش) و بخش‌های صفحه (PageSection + اجزایش)، به‌علاوهٔ کرومِ تمام‌عرض (PageBreadcrumbs، PageNav).

PageHeaderRoot در مقابل PageHeader تخت

سیستم طراحی از قبل یک PageHeader تخت و prop-محور برای عنوان‌های ساده دارد (صفحهٔ PageHeader) که دست‌نخورده مانده — تغییر شکستن ندارد. ریشهٔ سربرگ ترکیبی این‌جا با نام PageHeaderRoot export می‌شود (دقیقاً همان نامی که سوپابیس داخلی استفاده می‌کند)، پس این دو بدون تداخل بارل کنار هم زندگی می‌کنند. برای ساختار icon/summary/aside/breadcrumb/nav از PageHeaderRoot استفاده کنید؛ برای یک عنوان یک‌خطی با اقدامات از PageHeader تخت.

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

  • برای ساختن صفحات کامل با ریتم فاصله‌گذاری، عرض و سازماندهی یکنواخت
  • وقتی به سربرگ ساخت‌یافته (آیکون، خلاصه، اقدامات، breadcrumb، تب‌های ناوبری) نیاز دارید
  • برای صفحاتی با چند بخش که هرکدام عنوان/توضیح/اقدامات و بدنه دارند

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

  • برای یک عنوان سادهٔ یک‌خطی — از PageHeader تخت استفاده کنید
  • برای چیدمان داخل یک کارت یا بخش کوچک — از Card/FormHeader استفاده کنید
  • برای صفحات مستندات یا محتوای متنی که فریم‌ورک خودش را دارد

گزارش کمپین تخفیف فصلی

نمای کلی عملکرد کمپین در شبکه‌های اجتماعی

پوشش انتشار

تعداد پست‌های منتشرشده به تفکیک پلتفرم
جایگاه جدول پوشش انتشار

بازخورد مخاطبان

خلاصه نظرات ثبت‌شده درباره بسته‌بندی جدید
جایگاه نمودار بازخورد

استفاده

import {
  PageContainer,
  PageHeaderRoot,
  PageHeaderMeta,
  PageHeaderSummary,
  PageHeaderTitle,
  PageHeaderDescription,
  PageHeaderAside,
  PageSection,
  PageSectionMeta,
  PageSectionSummary,
  PageSectionTitle,
  PageSectionDescription,
  PageSectionContent,
  Button,
} from '@partodata/ui'

export default function CampaignReport() {
  return (
    <>
      <PageHeaderRoot>
        <PageHeaderMeta>
          <PageHeaderSummary>
            <PageHeaderTitle>گزارش کمپین تخفیف فصلی</PageHeaderTitle>
            <PageHeaderDescription>نمای کلی عملکرد کمپین در شبکه‌های اجتماعی</PageHeaderDescription>
          </PageHeaderSummary>
          <PageHeaderAside>
            <Button variant="outline" size="sm">
              خروجی گزارش
            </Button>
          </PageHeaderAside>
        </PageHeaderMeta>
      </PageHeaderRoot>

      <PageContainer>
        <PageSection>
          <PageSectionMeta>
            <PageSectionSummary>
              <PageSectionTitle>پوشش انتشار</PageSectionTitle>
              <PageSectionDescription>تعداد پست‌های منتشرشده به تفکیک پلتفرم</PageSectionDescription>
            </PageSectionSummary>
          </PageSectionMeta>
          <PageSectionContent>{/* جدول یا نمودار */}</PageSectionContent>
        </PageSection>
      </PageContainer>
    </>
  )
}

PageHeaderRoot را داخل PageContainer نگذارید

PageHeaderRoot اندازهٔ size خود را از طریق context به اجزای فرزند می‌دهد و هر جزءِ خودبسته، خودش را در PageContainer مناسب می‌پیچد. پس آن را داخل PageContainer تودرتو نکنید. بخش‌های محتوا (PageSection) اما داخل یک PageContainer قرار می‌گیرند.

اجزا و ساختار

PageContainer — کانتینر عرض

عرض حداکثر و padding افقی محتوا را تعیین می‌کند و context @container است که هر container-query داخلی نسبت به آن حل می‌شود. اندازه‌ها: small (۷۶۸px)، default (۱۲۰۰px)، large (۱۶۰۰px)، full (بدون حد).

<PageContainer size="default">{/* محتوا */}</PageContainer>

PageHeaderRoot — سربرگ ترکیبی

ریشهٔ سربرگ که size را از طریق context پخش می‌کند. اجزای آن:

  • PageHeaderMeta — ردیف متا: چیدمان آیکون / خلاصه / aside
  • PageHeaderIcon — آیکون پیشرو
  • PageHeaderSummary — پشتهٔ عنوان + توضیح
  • PageHeaderTitle — عنوان صفحه (h1، ۲۴px، وزن متوسط)
  • PageHeaderDescription — متن پشتیبان زیر عنوان
  • PageHeaderAside — خوشهٔ اقدامات (دکمه، منو)
  • PageHeaderNavigationTabs — فوتر تب‌های ناوبری سربرگ
  • PageHeaderBreadcrumb — ردیف breadcrumb داخل سربرگ (زیرجزء legacy؛ برای صفحات جدید PageBreadcrumbs را ترجیح دهید)

PageSection — بخش صفحه

هر بخش ۴۸px ریتم بالا، ۲۴px فاصلهٔ داخلی و ۴۸px دنبالهٔ آخرین بخش دارد. با orientation="horizontal" به یک گرید ۱fr/۲fr (متا ⁄ محتوا) در @3xl تقسیم می‌شود. اجزای آن:

  • PageSectionMeta — ردیف متا: خلاصه + aside
  • PageSectionSummary — پشتهٔ عنوان + توضیح
  • PageSectionTitle — عنوان بخش (h2، ۲۰px، وزن متوسط)
  • PageSectionDescription — متن پشتیبان زیر عنوان بخش
  • PageSectionAside — خوشهٔ اقدامات بخش
  • PageSectionContent — بدنهٔ اصلی بخش (فرم، جدول، گرید)

PageSectionMain وجود ندارد

عمداً هیچ PageSectionMain وجود ندارد — محتوا در PageSectionContent می‌رود؛ و PageSectionAside یک خوشهٔ اقدامات است، نه یک ستون. برای چیدمان دو ستونی از orientation="horizontal" استفاده کنید (ستون اول متا/محتوای باریک، ستون دوم محتوای پهن).

کرومِ تمام‌عرض — PageBreadcrumbs و PageNav

این دو ردیفِ کرومِ تمام‌عرض‌اند که بالای PageHeaderRoot می‌نشینند، نه داخل آن:

import {
  PageBreadcrumbs,
  PageBreadcrumbsActions,
  PageNav,
  Breadcrumb,
  BreadcrumbList,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbPage,
  Button,
} from '@partodata/ui'
;<>
  <PageBreadcrumbs
    actions={
      <PageBreadcrumbsActions>
        <Button size="sm">اقدام</Button>
      </PageBreadcrumbsActions>
    }
  >
    <BreadcrumbList>
      <BreadcrumbItem>
        <BreadcrumbLink href="/campaigns">کمپین‌ها</BreadcrumbLink>
      </BreadcrumbItem>
      <BreadcrumbItem>
        <BreadcrumbPage>کمپین تخفیف فصلی</BreadcrumbPage>
      </BreadcrumbItem>
    </BreadcrumbList>
  </PageBreadcrumbs>

  <PageNav>{/* یک NavMenu یا nav تب‌ها */}</PageNav>
</>

چیدمان افقی (دو ستونی)

<PageContainer size="large">
  <PageSection orientation="horizontal">
    {/* ستون باریک (1fr): متا/خلاصه */}
    <PageSectionMeta>
      <PageSectionSummary>
        <PageSectionTitle>خلاصهٔ اینفلوئنسر</PageSectionTitle>
        <PageSectionDescription>اطلاعات کلی و پلتفرم‌ها</PageSectionDescription>
      </PageSectionSummary>
    </PageSectionMeta>
    {/* ستون پهن (2fr): محتوای اصلی */}
    <PageSectionContent>{/* نمودارها و آمار */}</PageSectionContent>
  </PageSection>
</PageContainer>

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

بکنید

  • size کانتینر و سربرگ را با هم هماهنگ نگه دارید (default با default) - محتوای بخش را در PageSectionContent بگذارید و عنوان/توضیح را در PageSectionSummary داخل PageSectionMeta - برای کرومِ بالای صفحه (breadcrumb، تب‌ها) از PageBreadcrumbs/PageNav استفاده کنید که خودشان تمام‌عرض‌اند

نکنید

  • PageHeaderRoot را داخل PageContainer تودرتو نکنید — خودش را می‌پیچد - از PageSectionMain استفاده نکنید؛ وجود ندارد — PageSectionContent را به کار ببرید - PageSectionAside را به‌عنوان ستون محتوا استفاده نکنید؛ یک خوشهٔ اقدامات است - فاصله‌گذاری دستی به بخش‌ها اضافه نکنید؛ ریتم داخلی خانواده از قبل تنظیم شده

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

PageContainer

Prop

Type

PageHeaderRoot

Prop

Type

PageSection

Prop

Type

PageSectionContent

Prop

Type

Prop

Type

Prop

Type

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

  • PageHeaderTitle یک h1 واقعی و PageSectionTitle یک h2 است، پس سلسله‌مراتب تیترها برای ناوبری صفحه‌خوان درست می‌ماند — در هر صفحه فقط یک PageHeaderTitle (h1) بگذارید
  • کل خانواده از خصوصیات منطقی CSS (ps/pe، start/end) استفاده می‌کند و به‌صورت خودکار RTL-صحیح است
  • چیدمان‌ها container-query محورند، پس در عرض‌های مختلف (نه فقط viewport) درست پاسخ می‌دهند؛ کرومِ تمام‌عرض ارتفاع ثابت ۴۸px دارد

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

  • PageHeader — برای یک عنوان تخت و prop-محور (بدون ساختار ترکیبی)، از PageHeader استفاده کنید
  • چیدمان (الگو) — الگوی کاملِ ساخت صفحات (تنظیمات، لیست، داشبورد، جزئیات) با این خانواده
  • صفحهٔ تحلیل — نمونهٔ کامل یک صفحهٔ تحلیل ساخته‌شده با Page*
  • Breadcrumb — عناصر breadcrumb که داخل PageBreadcrumbs قرار می‌گیرند