Ratingv1.0.0

امتیاز با ستاره، عدد یا چهره، هم برای گرفتن نظر کاربر (فرم ثبت نظر) و هم برای نمایش میانگین امتیاز (کارت محصول). ستاره‌ها در RTL از راست شروع می‌شوند و مقدار با name مثل یک فیلد معمولی همراه فرم ارسال می‌شود.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API — هنوز برای این کامپوننت پورت نشدهSvelte ۵ با runes — هنوز برای این کامپوننت پورت نشدهانگولار با signals و دایرکتیوهای standalone — هنوز برای این کامپوننت پورت نشده

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگی‌ها و فایل‌ها خودکار اضافه می‌شوند.

پکیج‌منیجر پیش‌فرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/rating.json
pnpm dlx digdesign@latest add https://docs.digdesign.ir/r/rating.json
yarn dlx digdesign@latest add https://docs.digdesign.ir/r/rating.json
bunx --bun digdesign@latest add https://docs.digdesign.ir/r/rating.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

استفاده

import { Rating } from "@/components/ui/rating"

<Rating defaultValue={4} aria-label="امتیاز شما" />

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

ترکیب اجزا

Rating دو حالت دارد. در حالت عادی هر ستاره یک گزینهٔ رادیویی است و کل ستاره‌ها یک radiogroup‌اند. با readOnly هیچ دکمه‌ای ساخته نمی‌شود؛ ستاره‌ها یک تصویر با برچسب «۴٫۵ از ۵» می‌شوند و مقدار اعشاری به نزدیک‌ترین نیم گرد می‌شود.

ستارهٔ پر رنگ warning و ستارهٔ خالی فقط خط دور می‌گیرد؛ هیچ‌کدام شفافیت ندارند. برای ارسال با فرم name بدهید تا یک input مخفی هم‌نام مقدار را بفرستد.

دسترس‌پذیری

  • کل ستاره‌ها role="radiogroup" و هر ستاره role="radio" با برچسب «۳ از ۵» است؛ برای گروه aria-label یا aria-labelledby بدهید.
  • فقط ستارهٔ انتخاب‌شده در چرخهٔ Tab است. جهت‌نماها امتیاز را کم و زیاد می‌کنند؛ در RTL ArrowLeft بیشتر می‌کند، مثل جهت خود ستاره‌ها. Home و End اولین و آخرین ستاره‌اند.
  • حالت readOnly یک تصویر (role="img") با برچسب کامل است، نه پنج دکمهٔ غیرفعال که صفحه‌خوان یکی‌یکی بخواند.
  • رنگ تنها نشانه نیست: ستارهٔ پر، توپر است و ستارهٔ خالی فقط خط دور دارد.

مرجع API

Rating

ویژگینوعپیش‌فرضتوضیح
valuenumber—امتیاز کنترل‌شده؛ ۰ یعنی بدون امتیاز.
defaultValuenumber0امتیاز اولیه در حالت کنترل‌نشده.
onValueChange(value: number) => void—با هر تغییر امتیاز صدا زده می‌شود.
maxnumber5تعداد ستاره‌ها.
size"sm" | "default" | "lg""default"اندازهٔ ستاره‌ها.
readOnlybooleanfalseفقط نمایش؛ مقدار اعشاری به نزدیک‌ترین نیم گرد می‌شود و دکمه‌ای ساخته نمی‌شود.
disabledbooleanfalseغیرفعال با رنگ غیرفعال، بدون شفافیت.
clearablebooleanfalseکلیک دوباره روی همان ستاره امتیاز را صفر کند.
namestring—نام فیلد در فرم؛ یک input مخفی هم‌نام مقدار را می‌فرستد.
variant"star" | "number" | "emoji""star"ستاره، دکمه‌های عددی ۱ تا max، یا چهره از ناراحت تا خوشحال (emoji برای ۳ یا ۵ گزینه).
showLabelbooleanfalseمعنای گزینهٔ زیر اشاره یا انتخاب‌شده («خوب») زیر امتیاز دیده شود.
getLabel(value: number, max: number) => string—برچسب هر گزینه؛ پیش‌فرض «۳ از ۵»، و در emoji «خیلی بد» تا «عالی».

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.