پرتوپرتو

نوار سهمیه (QuotaProgressBar)

نوار پیشرفت خودکار رنگی برای نمایش مصرف سهمیه — سبز → کهربایی → نارنجی → قرمز با آستانه‌های قابل تنظیم.

معرفی

QuotaProgressBar نوار پیشرفت مخصوص محدودیت‌های سهمیه‌ای است — کاری که ورکر Booster در ۲۴ ساعت اخیر انجام داده از کل مجاز، آپلود ساعتی کاربر CommentSanj، فراخوانی API تحلیل، و هر شمارنده‌ای که با نزدیک شدن به سقف باید هشدار بصری بدهد.

برخلاف Progress که variant ثابت می‌خواهد، QuotaProgressBar رنگ را خودکار از نسبت used / limit انتخاب می‌کند:

  • ۰–۷۰٪ → سبز (--sentiment-positive)
  • ۷۰–۹۰٪ → کهربایی (--warning-default)
  • ۹۰–۱۰۰٪ → نارنجی (--severity-high) + آیکون ⚠
  • ≥ ۱۰۰٪ → قرمز (--destructive-default) + آیکون ⚠ با pulse

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

  • سهمیه روزانه/ساعتی ورکر (لایک، کامنت، فالو) در داشبورد Booster
  • آپلود فایل «۳ از ۱۰ در ساعت گذشته»
  • فراخوانی API AI در هر دقیقه
  • هر شمارنده تجمعی که به سقف نزدیک می‌شود

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

  • پیشرفت کار async (تحلیل، کمپین) — از JobCardProgress استفاده کنید
  • متریک تک‌عدد بدون سقف — از MetricCard استفاده کنید
  • نمایش وضعیت rate-limit (وقتی به سقف خورده و باید منتظر بماند) — از RateLimitBanner استفاده کنید، این مکمل است
پسندیدن۴۳/۱۰۰
نظر۳۲/۵۰
دنبال کردن۲۷/۳۰
ذخیره۱۰۰/۱۰۰

زمین بازی

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

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

استفاده

'use client'
import { QuotaProgressBar } from '@parto-system-design/ui'

export function WorkerQuotas({ worker }) {
  return (
    <div className="flex flex-col gap-3">
      <QuotaProgressBar actionType="like" used={worker.likesToday} limit={100} />
      <QuotaProgressBar actionType="comment" used={worker.commentsToday} limit={50} />
      <QuotaProgressBar actionType="follow" used={worker.followsToday} limit={30} />
    </div>
  )
}

حالت ۴ سطحی

سطح سبز (<۷۰٪)۳۰/۱۰۰
سطح کهربایی (۷۰–۹۰٪)۷۵/۱۰۰
سطح نارنجی (۹۰–۱۰۰٪)۹۵/۱۰۰
سطح قرمز (۱۰۰٪)۱۰۰/۱۰۰

هر سطح رنگ و (در صورت فعال بودن showWarningIcon) آیکون هشدار خودش را دارد. attribute data-level روی root گذاشته می‌شود تا بتوانید CSS سفارشی هم اضافه کنید.

ترکیب با ActionTypeKey

پسندیدن۸۵/۱۰۰۸۵٪
نظر۱۸/۵۰۳۶٪
ذخیره۴۸/۵۰۹۶٪
پیام مستقیم۵/۲۰۲۵٪

با prop actionType، برچسب پیش‌فرض از actionTypeLabels خوانده می‌شود — «پسندیدن»، «نظر»، … . این کوتاه‌ترین راه برای رندر یک سهمیه مرتبط با عملیات است.

overflow (مصرف بیش از سقف)

بدون overflow۱۵۰/۱۰۰
با showOverflow۱۵۰/۱۰۰

با showOverflow، وقتی used > limit است، نوار به صورت بصری با الگوی راه‌راه نمایش داده می‌شود ولی عرض آن در ۱۰۰٪ clamp می‌شود. صفحه‌خوان مقدار واقعی (مثلاً ۱۵۰) را در aria-valuenow می‌بیند.

اندازه‌ها

xs۶۵/۱۰۰
sm (پیش‌فرض)۶۵/۱۰۰
md۶۵/۱۰۰
lg۶۵/۱۰۰

چهار اندازه: xs (h-1) / sm (h-1.5) / md (h-2) / lg (h-3). برای لیست‌های فشرده xs یا sm و برای کارت‌های detail md یا lg.

آستانه‌های سفارشی

<QuotaProgressBar used={50} limit={100} thresholds={{ amber: 0.4, orange: 0.8, red: 1 }} />

برای سناریوهایی که سیاست سختگیرانه‌تری دارند (مثلاً هشدار از ۴۰٪)، آستانه‌ها را override کنید. هر سه را می‌توانید partial بدهید — باقی از default استفاده می‌شود.

Props

Prop

Type

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

بکنید

  • برای سهمیه‌های قابل-اندازه‌گیری استفاده کنید (API calls/ساعت، آپلود/روز، like/follow worker) — جایی که نسبت used/limit معنادار است - وقتی مقدار از ۹۰٪ گذشت، کاربر باید RateLimitBanner را در کنار این بار آماده داشته باشد — این بار هشدار پیش‌رویداد است - با actionType ترکیب کنید تا برچسب پیش‌فرض از actionTypeLabels بیاید — دیگر نیاز به نوشتن label دستی نیست - showOverflow را در سناریوهایی که over-quota معنادار است (worker که بیش از سقف رفت) فعال کنید

نکنید

  • برای countdown زمان‌محور (مثل «۳۰ ثانیه تا انقضا») استفاده نکنید — این کامپوننت برای شمارنده‌ی تجمعی است نه زمان معکوس - برای پیشرفت کار async (تحلیل، کمپین) استفاده نکنید — JobCardProgress ابزار درست است - آستانه‌های پیش‌فرض را بدون دلیل تنظیمی override نکنید — ۷۰/۹۰/۱۰۰ بر اساس best-practice rate-limit پلتفرم‌ها انتخاب شده‌اند - limit صفر یا منفی پاس ندهید — کامپوننت به ۱ clamp می‌کند و ratio بی‌معنا می‌شود

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

  • نوار یک role="progressbar" با aria-valuenow/aria-valuemin=0/aria-valuemax=100 دارد. حتی در حالت overflow (ratio > 1)، valuenow مقدار حقیقی (مثلاً ۱۵۰) را منتقل می‌کند تا صفحه‌خوان «over-quota» را بفهمد.
  • aria-label از label یا actionType محاسبه می‌شود؛ اگر هیچ‌کدام نباشد «quota» پیش‌فرض است.
  • آیکون هشدار aria-hidden="true" است — اطلاعات بصری اضافه است، معنا با متن منتقل می‌شود.
  • در سطح red، pulse با motion-safe:animate-pulse است — در prefers-reduced-motion ساکن می‌ماند.

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

  • RateLimitBanner — مکمل این کامپوننت؛ وقتی سهمیه تمام شد و باید صبر کرد، این banner را نمایش دهید
  • Progress — نوار پیشرفت عمومی با variant ثابت
  • JobCardProgress — برای پیشرفت کار async (نه سهمیه)
  • ActionTypeChip — برای نمایش نوع عملیات به‌صورت chip جدا
  • MetricCard — متریک تک‌عدد بدون سقف