Yugen UI

SpinButton

SpinButton cho phép nhập số và tăng/giảm theo bước bằng nút hoặc bàn phím.

Hai nút mũi tên xếp chồng bên phải (nhấn giữ để chạy liên tục). Bàn phím: ↑/↓ theo step, PageUp/PageDown theo stepPage, Home/End về min/max, Enter để xác nhận số vừa gõ. Giá trị luôn được kẹp trong [min, max].

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.

TSX
// npm install yugen-uiimport { SpinButton } 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.

Bước thập phân

step={0.1}: số chữ số thập phân suy ra từ step.

Định dạng hiển thị

formatValue thêm đơn vị; khi gõ, ký tự không phải số được bỏ qua.

Phòng cho 2 khách

Controlled

value / onValueChange (null khi ô trống).

Appearance, kích thước & disabled

outline, underline, filled-darker, filled-lighter; size small / medium.

Cách dùng

Nên
  • Dùng cho số nhỏ, thay đổi theo bước nhỏ (số lượng, số khách, cỡ chữ).
  • Luôn đặt min/max hợp lý để tránh giá trị vô nghĩa.
  • Hiển thị đơn vị bằng formatValue thay vì ghi trong nhãn khi phù hợp.
Không nên
  • Không dùng cho số lớn hoặc không theo bước (số điện thoại, mã bưu chính) — dùng Input.
  • Không dùng khi giá trị tương đối quan trọng hơn con số chính xác — dùng Slider.

Props

Prop · KiểuMặc địnhMô tả
value / defaultValuenumber | nullMặc định: —Giá trị số (null = trống).
onValueChange(value: number | null) => voidMặc định: —Gọi khi giá trị đổi.
min / maxnumberMặc định: —Giới hạn; nút tương ứng bị khoá khi chạm biên.
step / stepPagenumberMặc định: 1 / step × 10Bước cho ↑↓ và PageUp/PageDown.
precisionnumberMặc định: —Số chữ số thập phân (mặc định suy từ step).
displayValuestringMặc định: —Chuỗi hiển thị thay cho số (controlled).
formatValue / parseValue(v: number) => string / (text: string) => number | nullMặc định: —Định dạng và đọc số tuỳ biến.
appearance"outline" | "underline" | "filled-darker" | "filled-lighter"Mặc định: "outline"Kiểu ô.
size"small" | "medium"Mặc định: "medium"Chiều cao 24 / 32px.

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.spinButton

Khoá · KiểuMặc định (tiếng Anh)messagesVi
incrementstring

aria-label nút tăng.

Mặc định (tiếng Anh)"Increment value"messagesVi"Tăng giá trị"
decrementstring

aria-label nút giảm.

Mặc định (tiếng Anh)"Decrement value"messagesVi"Giảm giá trị"