Number Input
حقل رقمي بزرّي − و+. تبقى الأرقام من اليسار إلى اليمين ومعزولة، وتتحول الأرقام الهندية المكتوبة إلى أرقام غربية.
الإصدار 0.4.1 ·
التثبيت
bunx --bun shadcn@latest add @dga/number-inputالاستخدام
import { Field, FieldLabel } from "@/components/ui/field";
import { NumberInput } from "@/components/ui/number-input";
export function QuantityField() {
return (
<Field name="quantity">
<FieldLabel>الكمية</FieldLabel>
<NumberInput
defaultValue={1}
min={1}
max={10}
decrementLabel="إنقاص"
incrementLabel="زيادة"
/>
</Field>
);
}استخدم Number Input للكميات والمبالغ التي يزيدها المستخدم وينقصها. وللمعرّفات التي هي أرقام وليست كميات (رقم الهوية أو الهاتف) استخدم Input مع inputMode="numeric". وترجم دائمًا decrementLabel وincrementLabel في الصفحات العربية.
البنية
- الإطار: الحد والتعبئة نفسهما في Input.
- زر الإنقاص (
−): في جهة البداية. - الحقل: الرقم، في الوسط بين الزرين، بـ
dir="ltr"وunicode-bidi: isolate. - زر الزيادة (
+): في جهة النهاية.
أمثلة
الحد الأدنى والأقصى والخطوة
يوقف min وmax الزرين ومفتاحي السهمين عند الحدين، ويُعطَّل الزر عند الحد. ويحدد step مقدار تغيّر القيمة مع كل ضغطة. والقيمة التي تستلمها هي دائمًا number.
الحالات
الافتراضية والمعبأة وللقراءة فقط والمعطّلة وحالة الخطأ، والحجم المتوسط مع التعبئة الأغمق.
التنسيق
يقبل format خيارات Intl.NumberFormat للعملة والنسبة المئوية والوحدات. والقيمة الافتراضية لـ locale هي en-u-nu-latn، فالأرقام غربية في كل الصفحات.
<NumberInput
defaultValue={250}
format={{ style: "currency", currency: "SAR", currencyDisplay: "code" }}
/>RTL
يتبادل الزران الجهتين: − على اليمين (البداية) و+ على اليسار (النهاية). ولا تتحرك الأرقام ولا يُعاد ترتيبها: الحقل dir="ltr" ومعزول عن النص العربي حوله. كتابة ٣ تعطي 3، والفاصلة العشرية ٫ تعطي نقطة.
إمكانية الوصول
| المفتاح | الإجراء |
|---|---|
| Tab | ينقل التركيز إلى الحقل. ويُتخطى الزران؛ فمفتاحا السهمين يؤديان العمل نفسه. |
| ArrowUp / ArrowDown | يزيد أو ينقص بمقدار step. |
| Shift + ArrowUp / ArrowDown | يغيّر بمقدار 10 (largeStep). ومع Alt بمقدار 0.1 (smallStep). |
| Home / End | يقفز إلى min أو max عند ضبطهما. |
- الحقل إدخال نصي بالسمة
inputmode="numeric"وaria-roledescription="Number field"، فيعرض الهاتف لوحة أرقام وتعلنه قارئات الشاشة حقل رقم. - للزرين − و+ اسمان (
decrementLabelوincrementLabel) ومساحة نقر 24px، ويُعطَّلان عند الحدين. - يحافظ
dir="ltr"وunicode-bidi: isolateعلى ترتيب الأرقام والإشارات داخل النص العربي. - تُقبل الأرقام الهندية والفارسية عند الكتابة أو اللصق وتصبح أرقامًا غربية؛ وتقرأ قارئات الشاشة القيمة الغربية.
مرجع API
NumberInput
حقل رقمي بزرّي − و+. تُكتب الأرقام دائمًا من اليسار إلى اليمين، حتى في الصفحات العربية، وكتابة أرقام هندية (٣) تعطي أرقامًا غربية (3). سمّه بـ Field.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
"md" | "lg"الارتفاع: `md` 32px، و`lg` 40px. | لا توجد قيمة افتراضية | |
| ||
"default" | "lighter" | "darker"التعبئة: `default` (أبيض) أو `lighter` أو `darker`. وتحتفظ الثلاث بحد ظاهر. | لا توجد قيمة افتراضية | |
| ||
stringنص تلميحي يظهر والحقل فارغ. | لا توجد قيمة افتراضية | |
| ||
stringاسم الحقل عند إرسال النموذج. | لا توجد قيمة افتراضية | |
| ||
stringاسم زر الإنقاص لتقنيات المساعدة. ترجمه في الصفحات العربية. | "Decrease" | |
| ||
stringاسم زر الزيادة لتقنيات المساعدة. ترجمه في الصفحات العربية. | "Increase" | |
| ||
booleanيخفي زرّي − و+ ويترك حقلًا رقميًا بسيطًا. | false | |
| ||
stringأصناف CSS للعنصر `<input>` نفسه. أما `className` فيصمّم الإطار المحيط به. | لا توجد قيمة افتراضية | |
| ||
stringلغة التنسيق. الافتراضي `en-u-nu-latn`: أرقام غربية في كل الصفحات، ومنها العربية. | "en-u-nu-latn" | |
| ||
number | nullقيمة متحكَّم بها. و`null` تعني حقلًا فارغًا. | لا توجد قيمة افتراضية | |
| ||
numberمقدار التغيير عند زرّي − و+ ومفتاحي السهمين. الافتراضي 1. | لا توجد قيمة افتراضية | |
| ||
numberالقيمة الابتدائية عند عدم التحكم. | لا توجد قيمة افتراضية | |
| ||
booleanيعطّل الحقل وزرّيه. | لا توجد قيمة افتراضية | |
| ||
Intl.NumberFormatOptionsخيارات التنسيق: العملة والنسبة المئوية والوحدات والكسور. | لا توجد قيمة افتراضية | |
| ||
numberأكبر قيمة. | لا توجد قيمة افتراضية | |
| ||
numberأصغر قيمة. | لا توجد قيمة افتراضية | |
| ||
(value: number | null, details) => voidتُستدعى بالرقم بعد تحليله، وهو دائمًا `number` بأرقام غربية. من Base UI. | لا توجد قيمة افتراضية | |
| ||
booleanيمكن قراءة الرقم لكن لا يمكن تغييره. | لا توجد قيمة افتراضية | |
| ||
booleanلا يمكن إرسال النموذج والحقل فارغ. | لا توجد قيمة افتراضية | |
| ||
يقبل أيضًا جميع خصائص Base UI NumberField (يفتح في نافذة جديدة).
الاختلافات عن DGA
- الأرقام دائمًا غربية ومن اليسار إلى اليمين ومعزولة. ولا يصف Figma الصفحات العربية.
- زرّا − و+ زرّان حقيقيان في جهتي البداية والنهاية المنطقيتين.
| التغيير | السبب |
|---|---|
Number Input: digits and direction | Numbers are technical values (amounts, IDs, quantities) that must not be reordered or mixed with other digit systems in one field. |
عرض جميع الاختلافات (1) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.
التباين
282 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 47 حالةإخفاء
| النمط / الحالة | الفاتح | الداكن |
|---|---|---|
| filled text | 18.09:1 AAA | 15.87:1 AAA |
| hovered text | 18.09:1 AAA | 15.87:1 AAA |
| focused text | 10.17:1 AAA | 12.04:1 AAA |
| pressed text | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed | 18.74:1 3:1 | 16.80:1 3:1 |
| placeholder | 4.77:1 AA | 6.32:1 AA |
| prefix and suffix text | 10.17:1 AAA | 12.04:1 AAA |
| icon | 4.77:1 3:1 | 9.38:1 3:1 |
| border, default | 4.57:1 3:1 | 3.80:1 3:1 |
| border, hovered | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error | 4.62:1 3:1 | 4.65:1 3:1 |
| filled text (lighter) | 17.64:1 AAA | 14.42:1 AAA |
| hovered text (lighter) | 17.64:1 AAA | 14.42:1 AAA |
| focused text (lighter) | 10.17:1 AAA | 12.04:1 AAA |
| pressed text (lighter) | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder (lighter) | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text (lighter) | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed (lighter) | 18.28:1 3:1 | 15.27:1 3:1 |
| placeholder (lighter) | 4.65:1 AA | 5.75:1 AA |
| prefix and suffix text (lighter) | 9.92:1 AAA | 10.95:1 AAA |
| icon (lighter) | 4.65:1 3:1 | 8.52:1 3:1 |
| border, hovered (lighter) | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed (lighter) | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error (lighter) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error (lighter) | 4.62:1 3:1 | 4.65:1 3:1 |
| filled text (darker) | 16.44:1 AAA | 17.04:1 AAA |
| hovered text (darker) | 16.44:1 AAA | 17.04:1 AAA |
| focused text (darker) | 10.17:1 AAA | 12.04:1 AAA |
| pressed text (darker) | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder (darker) | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text (darker) | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed (darker) | 17.03:1 3:1 | 18.03:1 3:1 |
| placeholder (darker) | 6.69:1 AA | 6.79:1 AA |
| prefix and suffix text (darker) | 9.24:1 AAA | 12.93:1 AAA |
| icon (darker) | 4.34:1 3:1 | 10.07:1 3:1 |
| border, hovered (darker) | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed (darker) | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error (darker) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error (darker) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, hover and focus (lighter and darker) | 4.57:1 3:1 | 3.80:1 3:1 |
| read-only text | 18.09:1 AAA | 15.87:1 AAA |
| stepper icon | 18.09:1 3:1 | 15.87:1 3:1 |
| stepper icon, hovered | 16.44:1 3:1 | 12.71:1 3:1 |
يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل