Chuyển tới nội dung

Pro đang mở bán trước. Cài đặt mở từ tháng 1/2027. Xem Pro

Component

Progress

Thanh cho biết một việc đã xong bao nhiêu khi biết được lượng: một lần tải lên, một lần nhập, các bước của một lần thiết lập. Không có value thì thanh cho thấy việc đang chạy mà không nói còn bao nhiêu. label đặt tên việc phía trên thanh, và showValue thêm phần trăm.

  • npm: 1 trực tiếp, 2 tổng
  • registry: 2 trực tiếp, 2 tổng

Xem trước

Đang tải report.pdf

Props

  • value
  • max
  • size
  • showValue
  • label
import { Progress } from "@/components/ui/progress"

<Progress label="Đang tải report.pdf" value={40} className="max-w-sm" />

Cách dùng

Khi nào dùng

  • Cho biết một việc đã xong bao nhiêu khi biết lượng: một lần tải lên, một lần nhập, các file của một lần đồng bộ.
  • Một việc đủ lâu để người dùng phải chờ, có tên phía trên thanh.

Khi nào không dùng

  • Việc không bao giờ biết lượng, như kiểm tra một giá trị. Dùng Spinner.
  • Nội dung mà bạn biết bố cục trong lúc tải, như một danh sách. Dùng Skeleton.
  • Các bước của một luồng mà người dùng đi qua, như một trình hướng dẫn thiết lập.

Biến thể

size

Độ dày của rãnh: md khi đứng một mình, sm trong một hàng đặc hoặc một card.

  • Đang tải report.pdf

    sm

  • Đang tải report.pdf

    mdmặc định

import { Progress } from "@/components/ui/progress"

<Progress label="Đang tải report.pdf" value={40} size="sm" className="max-w-sm" />
<Progress label="Đang tải report.pdf" value={40} className="max-w-sm" />

Ví dụ

Tải lên

Đang tải report.pdf
import { Progress } from "@/components/ui/progress"

<Progress label="Đang tải report.pdf" value={40} showValue />

Số lượng file

max là số đếm thật, nên thanh và phần trăm theo số file đã xong.

Đang nhập tệp
import { Progress } from "@/components/ui/progress"

<Progress label="Đang nhập tệp" value={3} max={12} showValue />

Không biết lượng

Không có value: thanh cho thấy việc đang chạy, không phải còn bao nhiêu.

Đang chuẩn bị bản xuất của bạn
import { Progress } from "@/components/ui/progress"

<Progress label="Đang chuẩn bị bản xuất của bạn" />

Đặt tên ở chỗ khác

Một thanh nhỏ trong hàng card mà tên đã có trên màn hình.

import { Progress } from "@/components/ui/progress"

<Progress size="sm" aria-label="Đồng bộ lưu trữ" value={75} />

Nên và không nên

Nên

  • Đặt tên việc trong label, và dùng số đếm thật làm max (12 file) khi có số đó.
  • Hiện phần trăm khi việc đủ lâu để người dùng phải chờ.
  • Nói bằng chữ khi một việc dài đã xong hoặc thất bại; thanh một mình không được thông báo.

Không nên

  • Đừng dùng khi không bao giờ biết lượng. Dùng Spinner.
  • Đừng hiện một thanh cho mỗi bước của một việc; một thanh bao trọn việc.
  • Đừng dùng cho các bước của một luồng mà người dùng đi qua.

Props

TênKiểuGiá trịMặc địnhMô tả
valuenumber--Phần đã xong, từ 0 đến max. Bỏ qua, hoặc truyền null, khi không biết lượng: thanh indeterminate.
maxnumber-100Giá trị khi việc xong. Dùng số đếm thật (12 file) và truyền số đã xong vào value.
sizeenumsm | mdmdĐộ dày của rãnh: md khi đứng một mình, sm trong một hàng đặc hoặc một card.
labelnode--Tên nhìn thấy phía trên thanh: việc đang chạy, Đang tải report.pdf. Không có label thì đặt aria-label hoặc aria-labelledby.
showValueboolean-falseHiện phần trăm ở cuối hàng label. Trình đọc màn hình vẫn nhận phần trăm dù có hiện hay không.

Cấu tạo

PhầnMô tả
rootRãnh: nền xám nhạt, radius-full, bằng chiều rộng của phần tử cha. Dày 4px (sm) hoặc 8px (md).
indicatorPhần tô accent từ đầu, dài bằng tỷ lệ việc đã xong. Không có value thì một phần ba rãnh nằm giữa (để không bị đọc thành một lượng) và nhấp.
wrapperKhi có label hoặc showValue: cột giữ hàng label phía trên rãnh, gap-xs.
headerHàng label: label, rồi phần trăm ở cuối, gap-sm.
labelChữ primary medium 14px đặt tên việc.
valueKhi có showValue: chữ secondary 14px với số tabular, ở cuối hàng label.

Khả năng truy cập

Role: progressbar

  • Luôn có tên: prop label (liên kết bằng aria-labelledby), hoặc aria-label hay aria-labelledby khi tên hiện ở chỗ khác. Type bắt buộc một trong các cách đó.
  • aria-valuenow, aria-valuemin và aria-valuemax theo value và max; aria-valuetext đọc phần trăm (40%). Không có value thì thanh indeterminate và không có các thuộc tính đó.
  • Phần trăm nhìn thấy (showValue) bị ẩn khỏi trình đọc màn hình, vì chúng đọc aria-valuetext trên thanh.
  • Phần tô chỉ dài ra khi người dùng cho phép chuyển động, và nhịp indeterminate dừng khi có prefers-reduced-motion.
  • Thanh progress không phải live region. Với việc dài, cũng nói bằng chữ khi việc xong.

Cài đặt

npx werewolf-ui add progress

Chạy npx werewolf-ui init một lần trong app trước khi thêm component. Init cài token, thêm CSS import và luật cho agent. Add cài component này cùng các dependency và giữ nguyên theme của bạn. Xem Cài đặt để biết yêu cầu và cách cài qua registry.