Number Field
ورودی عدد با دکمههای افزایش/کاهش، محدودهٔ min/max، گام دلخواه و نمایش ارقام فارسی؛ با فلش بالا/پایین کیبورد هم قابل تغییر است.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/number-field.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/number-field.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/number-field.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/number-field.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import { NumberField } from "@/components/ui/number-field"
<NumberField
value={quantity}
onValueChange={setQuantity}
min={0}
max={99}
aria-label="تعداد"
/>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
NumberField یک عدد (نه رشته) نگه میدارد؛ onValueChange همیشه number میدهد.
مقدار روی صفحه با Intl.NumberFormat فارسیسازی میشود و هنگام تایپ، ارقام فارسی/عربی هم پذیرفته و به عدد واقعی تبدیل میشوند.
دسترسپذیری
- role=spinbutton با aria-valuenow/aria-valuemin/aria-valuemax دارد.
- فلش بالا/پایین کیبورد مقدار را بهاندازهٔ step تغییر میدهد؛ Enter مقدار تایپشده را تایید میکند.
- دکمههای افزایش/کاهش در محدودهٔ min/max خودکار غیرفعال میشوند.
- دکمهها tabIndex=-1 دارند تا فوکوس کیبورد مستقیم روی خودِ فیلد بماند و با فلشها کار کند؛ برای کاربر ماوس همچنان کلیکپذیرند.
مرجع API
NumberField
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value / defaultValue | number | — | مقدار کنترلشده یا اولیه. |
| onValueChange | (value: number) => void | — | فراخوانی هنگام تغییر مقدار. |
| min | number | — | کمینهٔ مجاز. |
| max | number | — | بیشینهٔ مجاز. |
| step | number | 1 | گام افزایش/کاهش. |
| formatOptions | Intl.NumberFormatOptions | — | قالب نمایش عدد. |
| size | "sm" | "default" | "lg" | "default" | اندازهٔ فیلد. |
| disabled | boolean | false | غیرفعال کردن کامل فیلد و دکمهها. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
با برچسب و گام
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
اندازهها
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
قالب واحد پول
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نامعتبر (Invalid)
aria-invalid را وقتی بگذارید که مقدار واقعاً نامعتبر است، نه وقتی فیلد هنوز خالی است. پیام باید بگوید سقف چقدر است و راهحل چیست، نه فقط «نامعتبر».
سقف پرداخت این طرح ۲۰۰٬۰۰۰٬۰۰۰ تومان است؛ طرح را ارتقا دهید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال در برابر مقدار قطعیشده
عددی که محاسبه شده و تغییر نمیکند، کنترل نیست؛ داده است. با NumberField غیرفعال، کاربر نمیتواند انتخاب و کپیاش کند. بهجایش متن نشان دهید.
غیرقابل کپی
قابل انتخاب و کپی
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
در حال محاسبه (Loading)
تا رسیدن مقدار، کنترل قفل و aria-busy روشن است. متن راهنما هم باید بگوید منتظر چیست، وگرنه کاربر فکر میکند فرم خراب شده.
در حال محاسبه بر اساس گزینههای انتخابی…
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
خالی در برابر صفر (Empty)
صفر یک مقدار است و «وارد نشده» نبودِ مقدار. اگر خالی را صفر بگیرید، فرم چیزی را ثبت میکند که کاربر نگفته. مقدار خالی را undefined نگه دارید و placeholder بگذارید.
مقدار فعلی: خالی (undefined)
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
عدد بزرگ (Overflow)
مبلغ بزرگ بدون جداکنندهٔ هزارگان عملاً خوانده نمیشود. formatOptions را با useGrouping بدهید؛ ارقام فارسی و همعرض میشوند و در ستون جدول هم نمیلرزند.
خواندنش سخت است
ارقام فارسی و همعرض، ستون نمیلرزد
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| با برچسب و گام | سفارش عمده که فقط با مضرب بسته (مثلاً ۵تایی) قابل ثبت است |
| اندازهها | هماهنگکردن اندازهٔ فیلد با سایر کنترلهای فرم یا جدول |
| قالب واحد پول | فیلد مبلغ در فرم پرداخت یا تراکنش مالی |
| غیرفعال | فیلدی که تا تکمیل مرحلهٔ قبلی فرم قابل ویرایش نیست |
| نامعتبر (Invalid) | مبلغی که از سقف طرح بیشتر است |
| غیرفعال در برابر مقدار قطعیشده | هزینهای که سیستم حساب کرده و کاربر باید بتواند کپیاش کند |
| در حال محاسبه (Loading) | هزینهای که با تغییر گزینهها از سرور میآید |
| خالی در برابر صفر (Empty) | فیلد اختیاری مثل تعداد اقلام یا تخفیف |
| عدد بزرگ (Overflow) | مبالغ بزرگ که به میلیارد میرسند |