تصاویر حالت خالی (EmptyIllustrations)
۵ illustration SVG برای حالات خالی — NoResults، NoData، FirstRun، Error، Forbidden — همگی currentColor و RTL-safe
معرفی
پنج illustration SVG inline برای حالات خالی متداول. همه با currentColor رندر میشوند، پس consumer رنگ را با utility class تنظیم میکند (مثل text-foreground-muted پیشفرض). هیچکدام جهت-وابسته نیستند، تم Light/Dark خودکار تطبیق مییابد، و چون stroke-only هستند هر کدام ~600 بایت بعد gzip است.
چه زمانی استفاده کنیم:
- تکمیل
<Empty>primitive با یک visual که scan-time را کم کند - error-state کلی صفحه (مثل 500 یا 403)
- onboarding cards در حالت first-run
چه زمانی استفاده نکنیم:
- در table cells / button labels — اینها برای container-level empty states اند
- وقتی illustration اختصاصی برند نیاز است (سفارش طراحی) — اینها generic هستند
بدون نتیجه
بدون داده
اولین اجرا
خطا
دسترسی ندارد
زمین بازی
با انتخاب نوع تصویر، گالری حالتهای خالی را بهصورت زنده مشاهده کنید.
زمین بازی
تنظیمات
ظاهر
کد این نمونه بهصورت خودکار قابل تولید نیست — برای کد آمادهی copy/paste به بخش «استفاده» در بالای صفحه مراجعه کنید.
۵ Illustration
import {
Empty,
EmptyTitle,
EmptyDescription,
EmptyAction,
Button,
NoResultsIllustration,
NoDataIllustration,
FirstRunIllustration,
ErrorIllustration,
ForbiddenIllustration,
} from '@parto-system-design/ui'NoResultsIllustration — جستجو بدون نتیجه
<Empty>
<NoResultsIllustration className="size-32 text-foreground-muted" />
<EmptyTitle>نتیجهای یافت نشد</EmptyTitle>
<EmptyDescription>عبارت دیگری امتحان کنید یا فیلترها را پاک کنید</EmptyDescription>
<EmptyAction>
<Button variant="outline" onClick={clearFilters}>
پاک کردن فیلترها
</Button>
</EmptyAction>
</Empty>NoDataIllustration — مجموعهدادهی خالی
<Empty>
<NoDataIllustration className="size-32 text-foreground-muted" />
<EmptyTitle>هنوز دادهای ثبت نشده</EmptyTitle>
<EmptyDescription>پس از اولین جمعآوری، این صفحه پر میشود</EmptyDescription>
</Empty>FirstRunIllustration — onboarding اولیه
<Empty>
<FirstRunIllustration className="size-32 text-brand" />
<EmptyTitle>به Parto خوش آمدید</EmptyTitle>
<EmptyDescription>برای شروع، اولین موضوع ردیابی خود را تعریف کنید</EmptyDescription>
<EmptyAction>
<Button onClick={startOnboarding}>شروع</Button>
</EmptyAction>
</Empty>ErrorIllustration — خطای generic
<Empty>
<ErrorIllustration className="size-32 text-destructive" />
<EmptyTitle>خطایی رخ داد</EmptyTitle>
<EmptyDescription>لطفاً دوباره تلاش کنید یا با پشتیبانی تماس بگیرید</EmptyDescription>
<EmptyAction>
<Button variant="outline" onClick={retry}>
تلاش مجدد
</Button>
</EmptyAction>
</Empty>ForbiddenIllustration — عدم دسترسی
<Empty>
<ForbiddenIllustration className="size-32 text-foreground-muted" />
<EmptyTitle>دسترسی ندارید</EmptyTitle>
<EmptyDescription>این صفحه محدود به ادمینهاست</EmptyDescription>
</Empty>راهنمای استفاده
بکنید
- با
text-foreground-muted(پیشفرض) برای حالات neutral استفاده کنید — sub-pixel weight visual بدون پر-کردن صفحه - برای error state ازtext-destructiveو برای first-run ازtext-brandاستفاده کنید — رنگ خود معنا را پر میکند - اندازهی پیشنهادی:size-32(128px) برای صفحهی full-page empty،size-16(64px) برای کارتها/پنلهای کوچکتر
نکنید
- illustration-ها را در button-icon یا inline-text استفاده نکنید — برای آن
Lucideicon ها هستند - رنگ را باstyleinline override نکنید — همیشه از token class استفاده کنید
جدول ویژگیها
هر پنج illustration React.SVGProps<SVGSVGElement> میگیرند. مهمترین:
دسترسیپذیری
- هر پنج illustration بهصورت پیشفرض
aria-hidden="true"دارند — بهعنوان decoration در نظر گرفته میشوند و معنا از طریقEmptyTitle+EmptyDescriptionکنار آن منتقل میشود. - اگر illustration بهتنهایی اطلاعاتی منتقل میکند (که توصیه نمیشود)، با پاس دادن
aria-labelآن را override کنید. currentColorاز token-class والد ارث میبرد، پس کنتراست رنگ توسط token (مثلtext-foreground-muted) تضمین میشود — رنگ inline ندهید.- خطوط stroke-only هستند پس در
prefers-reduced-motionو themeهای high-contrast بدون مشکل رندر میشوند.
کامپوننتهای مرتبط
- wrapper container →
Empty+EmptyIcon+EmptyTitle+EmptyDescription+EmptyAction - برای chart خالی →
EmptyChart(با variants خاص chart) - error catching component-level →
ErrorBoundary - error با full-screen →
ErrorState