Rating
Rating cho phép người dùng chấm điểm bằng sao; RatingDisplay hiển thị điểm chỉ đọc.
Import
Cài từ npm, chép mã nguồn vào dự án bằng @yugen-ui/cli hoặc shadcn CLI, hoặc import thẳng khi làm việc trong repo này.
// npm install yugen-uiimport { Rating, RatingDisplay } from "yugen-ui";Biến thể
Mỗi ô là một mẫu độc lập: hover để Copy, hoặc bấm Code để xem mã nguồn.
Màu
neutral (mặc định), brand, marigold.
Nửa sao (controlled)
step={0.5}: mỗi sao có hai vùng bấm.
RatingDisplay
Hiển thị chỉ đọc kèm giá trị, số lượt; compact chỉ hiện một sao.
Kích thước
small (12px), medium (16px), large (20px), extra-large (28px, mặc định).
Cách dùng
- Luôn có aria-label mô tả đối tượng được chấm điểm.
- Dùng RatingDisplay kèm số lượt để người dùng đánh giá độ tin cậy.
- Giữ một màu sao nhất quán trong toàn sản phẩm.
- Không dùng Rating cho lựa chọn không mang tính thang điểm — dùng RadioGroup.
- Không dùng màu sao làm tín hiệu duy nhất — hiện kèm giá trị số.
Props
| Prop · Kiểu | Mặc định | Mô tả |
|---|---|---|
| value / defaultValuenumber | Mặc định: 0 | Điểm hiện tại (0 = chưa chấm). |
| onValueChange(value: number) => void | Mặc định: — | Gọi khi chọn điểm. |
| maxnumber | Mặc định: 5 | Số sao. |
| step1 | 0.5 | Mặc định: 1 | Cho phép nửa sao. |
| color"neutral" | "brand" | "marigold" | Mặc định: "neutral" | Màu sao. |
| size"small" | "medium" | "large" | "extra-large" | Mặc định: "extra-large" | Cỡ sao 12 / 16 / 20 / 28px. |
| itemLabel(value: number) => string | Mặc định: — | Nhãn đọc cho từng mức điểm. |
| RatingDisplay | Mặc định: — | Số lượt; chỉ hiện một sao. |
| RatingDisplay | Mặc định: "medium" | Cỡ sao và chữ. |
| RatingDisplay | Mặc định: true | Hiện chữ giá trị cạnh các sao. Tên cũ hideValue đã lỗi thời (bỏ ở 1.0). |
Messages
Chữ có sẵn của component: nhãn, aria-label, thông báo cho trình đọc màn hình.
Mặc định là tiếng Anh. Đổi qua prop messages của YugenProvider, theo namespace bên dưới; messagesVi chứa bản tiếng Việt. Xem Ngôn ngữ giao diện.
messages.rating
| Khoá · Kiểu | Mặc định (tiếng Anh) | messagesVi |
|---|---|---|
| item(value: number, valueText: string) => string Nhãn đọc cho từng giá trị của Rating; | Mặc định (tiếng Anh)(value, valueText) => (value === 1 ? `${valueText} star` : `${valueText} stars`) | messagesVi(_value, valueText) => `${valueText} sao` |
| summary(valueText: string, max: number) => string Nhãn đọc của RatingDisplay; | Mặc định (tiếng Anh)(valueText, max) => `Rated ${valueText} out of ${max} stars` | messagesVi(valueText, max) => `Đánh giá ${valueText} trên ${max} sao` |
| count(count: number, countText: string) => string Số lượt đánh giá, nối sau | Mặc định (tiếng Anh)(count, countText) => (count === 1 ? `${countText} rating` : `${countText} ratings`) | messagesVi(_count, countText) => `${countText} lượt` |