Sonner
Sonner là thông báo ngắn xếp chồng ở góc màn hình: thông báo mới ở trước, thông báo cũ lùi ra sau, trỏ chuột vào thì xoè ra.
<Sonner /> một lần ở gốc ứng dụng, rồi gọi sonner("…"), sonner.success(…) hoặc sonner.promise(…) ở bất kỳ đâu. Gọi lại với cùng id sẽ thay nội dung tại chỗ. Trỏ chuột hoặc focus vào vùng thông báo thì chồng xoè thành danh sách và tạm dừng đếm giờ; vuốt để đóng; F8 để focus vùng thông báo. Toast vẫn dùng cho một danh sách thông báo cố định theo Fluent.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 { Sonner, sonner } 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.
Loại
Mặc định không có icon; success, info, warning, error dùng icon của MessageBar; loading không tự đóng.
Theo một promise
sonner.promise hiện loading, rồi đổi tại chỗ thành success hoặc error. success / error nhận hàm để dùng kết quả.
Xếp chồng & xoè
Tối đa visibleToasts (3) thông báo nhìn thấy; thông báo cũ hơn chờ phía sau. expand giữ chồng luôn xoè.
Vị trí, richColors & nút đóng
richColors tô nền và viền theo loại; closeButton thêm nút X; cancel là nút phụ đóng thông báo.
Cách dùng
- Dùng cho phản hồi ngắn sau thao tác: đã lưu, đã gửi, đã xoá kèm Hoàn tác.
- Dùng sonner.promise cho thao tác chạy nền để người dùng thấy kết quả mà không phải chờ.
- Đặt altText cho action khi label không phải chuỗi.
- Không đặt thông tin quan trọng duy nhất trong thông báo, nó sẽ biến mất.
- Không đặt cả Toaster và Sonner cùng vị trí trong một app.
- Không đặt form hay nhiều hơn hai nút trong một thông báo.
Props
| Prop · Kiểu | Mặc định | Mô tả |
|---|---|---|
| position"top-start" | "top" | "top-end" | "bottom-start" | "bottom" | "bottom-end" | Mặc định: "bottom-end" | Vị trí vùng thông báo; start / end đổi theo chiều đọc. |
| expandboolean | Mặc định: false | Luôn xoè thành danh sách. |
| visibleToastsnumber | Mặc định: 3 | Số thông báo nhìn thấy cùng lúc. |
| richColorsboolean | Mặc định: false | Nền và viền theo loại, như MessageBar. |
| closeButtonboolean | Mặc định: false | Nút đóng (X) trên mọi thông báo; từng thông báo có thể ghi đè. |
| durationnumber | Mặc định: 4000 | Thời gian tự đóng mặc định (ms). |
| gapnumber | Mặc định: 12 | Khoảng cách khi xoè và phần ló ra khi xếp chồng (px). |
| sonnerIdstring | Mặc định: — | Khi có nhiều Sonner: thông báo truyền cùng sonnerId mới hiện ở đây. |
| sonner | Mặc định: — | Hiện thông báo, trả về id. Có thêm .success, .info, .warning, .error, .loading. |
| sonner | Mặc định: — | data: { loading, success, error } cùng các tuỳ chọn khác; success / error nhận giá trị hoặc hàm. |
| sonner | Mặc định: — | Đóng một thông báo, hoặc tất cả khi bỏ trống id. |
| SonnerOptions | Mặc định: — | Dòng mô tả dưới tiêu đề. |
| SonnerOptions | Mặc định: — | Nút chính; gọi event.preventDefault() trong onClick để giữ thông báo mở. |
| SonnerOptions | Mặc định: — | Nút phụ, đóng thông báo. |
| SonnerOptions | Mặc định: — | Gọi lại với id của thông báo đang mở để thay nội dung tại chỗ. |
| SonnerOptions | Mặc định: — | Thay icon theo loại; null = không icon. |
| SonnerOptions | Mặc định: — | Ghi đè thời gian tự đóng; Infinity = không tự đóng. |
| SonnerOptions | Mặc định: — | Người dùng đóng (nút, vuốt, Esc) hoặc gọi sonner.dismiss. |
| SonnerOptions | Mặc định: — | Hết thời gian tự đóng. |
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.sonner
| Khoá · Kiểu | Mặc định (tiếng Anh) | messagesVi |
|---|---|---|
| regionstring Tên vùng thông báo cho trình đọc màn hình. | Mặc định (tiếng Anh)"Notifications" | messagesVi"Thông báo" |
| regionHotkeystring Tên vùng kèm phím tắt nhảy tới; | Mặc định (tiếng Anh)"Notifications ({hotkey})" | messagesVi"Thông báo ({hotkey})" |
| dismissstring Nhãn nút đóng từng thông báo. | Mặc định (tiếng Anh)"Dismiss notification" | messagesVi"Đóng thông báo" |