Bỏ qua tới nội dung
Component / 034 / NEXOFRAME

Progress

Mẫu chuẩn

Mức hoàn thành của một việc có bắt đầu và có kết thúc — không phải một chỉ báo bận vô định.

role="progressbar"1 variant5 brand themesLight & dark

Playground

Đổi brand, theme, value, max và nhãn truy cập. Fill co theo transform, không đổi width.

LIVE PREVIEW

Đồng bộ danh bạ: 45% (45 / 100).

import { Progress } from "@nexobox/ui";

<Progress value={45} max={100} aria-label="Đồng bộ danh bạ" />

Khi nào sử dụng

Nên dùng

Báo cáo mức hoàn thành của một việc có điểm bắt đầu và điểm kết thúc đo được — tải tệp lên, hoàn tất một chuỗi bước, nạp dữ liệu có tổng số biết trước.

Khi nào không dùng

Tránh dùng

Không biết còn bao lâu hoặc còn bao nhiêu — dùng spinner của Button. Để người dùng đặt một giá trị (âm lượng, ngưỡng) — đó là Slider, Progress chỉ báo cáo, không nhận tương tác.

Anatomy

#PhầnGhi chú
1Root<div role="progressbar">. Rộng 100%, cao cố định, bọc Track và Fill.
2TrackChính là nền của Root — --nf-semantic-surface-subtle, bo viên thuốc.
3FillLớp phủ trong Track, co theo scaleX(value / max) từ mép trái, màu --nf-semantic-action-primary-background.

Variants

DEFAULT

Biến thể duy nhất. Không có biến thể theo status kind (success, danger…) — chưa có lý do nghiệp vụ viết ra để tách màu.

States

0%

scale = 0, Fill không hiển thị; chỉ thấy nền Track.

45%

Fill phủ đúng tỉ lệ value / max, cạnh phải dừng giữa Track.

100%

scale = 1, Fill phủ toàn bộ Track.

disabled, loading, error, empty, hover, focus, vô định: không có — Progress không nhận tương tác và không tự tải dữ liệu. Xem lý do trong progress.md.

Accessibility

Không có phím tắt. Progress không đặt tabIndex, không vào thứ tự Tab, không nhận focus bàn phím.
Tên truy cập bắt buộc: aria-label hoặc aria-labelledby, không tự sinh.
role="progressbar" cùng aria-valuenow/-valuemin/-valuemax do wrapper tự đặt từ value/max đã kẹp.
Không dùng màu là kênh truyền đạt duy nhất — phần trăm đọc được qua giá trị ARIA, không chỉ qua màu Fill.

API & triển khai

PropMặc địnhQuy ước
value—Bắt buộc. Kẹp về [0, max] trước khi tính tỉ lệ.
max100Mốc kết thúc. max ≤ 0 render Track rỗng, không chia cho 0.
aria-label—Bắt buộc trừ khi có aria-labelledby.
aria-labelledby—Thay thế cho aria-label.
id, className, style—Truyền thẳng xuống Root, ghép chứ không ghi đè.

Design tokens

Giá trị theo NexoCrew / light đang chọn trong playground. Track đọc --nf-semantic-surface-subtle, Fill đọc --nf-semantic-action-primary-background; transition qua --nf-component-transition-duration / -easing. Track cao/bo theo --nf-component-progress-track-height và -track-radius, hai alias có mặt trong component.tokens.json.

Do / Don't

NênTránh
Gắn aria-label mô tả việc đang đo ("Đồng bộ danh bạ")Để Progress không có tên truy cập — trình đọc màn hình chỉ đọc "progressbar, 45%" vô nghĩa
Dùng khi có tổng số hoặc mốc kết thúc biết trướcDùng khi không biết còn bao lâu — đổi sang spinner của Button
Cập nhật value mỗi khi có tiến triển thậtCho value nhảy giật để "trông sống động" — Fill chỉ nên đổi khi tiến độ thật đổi
Dùng Progress để báo cáo một tiến độGắn xử lý kéo/onChange lên Progress mong đợi hành vi như Slider