تخطَّ إلى المحتوى

Number Input

حقل رقمي بزرّي − و+. تبقى الأرقام من اليسار إلى اليمين ومعزولة، وتتحول الأرقام الهندية المكتوبة إلى أرقام غربية.

الإصدار 0.4.1 ·

حالات حقل الرقم

التثبيت

bunx --bun shadcn@latest add @dga/number-input

ويثبّت Input وField أيضًا.

الاستخدام

page.tsx
tsx
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، فالأرقام غربية في كل الصفحات.

page.tsx
tsx
<NumberInput
  defaultValue={250}
  format={{ style: "currency", currency: "SAR", currencyDisplay: "code" }}
/>

RTL

يتبادل الزران الجهتين: − على اليمين (البداية) و+ على اليسار (النهاية). ولا تتحرك الأرقام ولا يُعاد ترتيبها: الحقل dir="ltr" ومعزول عن النص العربي حوله. كتابة ٣ تعطي 3، والفاصلة العشرية ٫ تعطي نقطة.

LTR (الإنجليزية)
RTL (العربية)

إمكانية الوصول

المفتاحالإجراء
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.

خصائص NumberInput
الخاصيةالنوعالقيمة الافتراضية
"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 directionNumbers 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 text18.09:1 AAA15.87:1 AAA
hovered text18.09:1 AAA15.87:1 AAA
focused text10.17:1 AAA12.04:1 AAA
pressed text9.24:1 AAA9.64:1 AAA
pressed placeholder6.69:1 AA5.06:1 AA
pressed prefix and suffix text9.24:1 AAA9.64:1 AAA
underline, focused and pressed18.74:1 3:116.80:1 3:1
placeholder4.77:1 AA6.32:1 AA
prefix and suffix text10.17:1 AAA12.04:1 AAA
icon4.77:1 3:19.38:1 3:1
border, default4.57:1 3:13.80:1 3:1
border, hovered9.73:1 3:112.04:1 3:1
border, focused and pressed17.93:1 3:116.80:1 3:1
underline, error4.62:1 3:14.65:1 3:1
border, error4.62:1 3:14.65:1 3:1
filled text (lighter)17.64:1 AAA14.42:1 AAA
hovered text (lighter)17.64:1 AAA14.42:1 AAA
focused text (lighter)10.17:1 AAA12.04:1 AAA
pressed text (lighter)9.24:1 AAA9.64:1 AAA
pressed placeholder (lighter)6.69:1 AA5.06:1 AA
pressed prefix and suffix text (lighter)9.24:1 AAA9.64:1 AAA
underline, focused and pressed (lighter)18.28:1 3:115.27:1 3:1
placeholder (lighter)4.65:1 AA5.75:1 AA
prefix and suffix text (lighter)9.92:1 AAA10.95:1 AAA
icon (lighter)4.65:1 3:18.52:1 3:1
border, hovered (lighter)9.73:1 3:112.04:1 3:1
border, focused and pressed (lighter)17.93:1 3:116.80:1 3:1
underline, error (lighter)4.62:1 3:14.65:1 3:1
border, error (lighter)4.62:1 3:14.65:1 3:1
filled text (darker)16.44:1 AAA17.04:1 AAA
hovered text (darker)16.44:1 AAA17.04:1 AAA
focused text (darker)10.17:1 AAA12.04:1 AAA
pressed text (darker)9.24:1 AAA9.64:1 AAA
pressed placeholder (darker)6.69:1 AA5.06:1 AA
pressed prefix and suffix text (darker)9.24:1 AAA9.64:1 AAA
underline, focused and pressed (darker)17.03:1 3:118.03:1 3:1
placeholder (darker)6.69:1 AA6.79:1 AA
prefix and suffix text (darker)9.24:1 AAA12.93:1 AAA
icon (darker)4.34:1 3:110.07:1 3:1
border, hovered (darker)9.73:1 3:112.04:1 3:1
border, focused and pressed (darker)17.93:1 3:116.80:1 3:1
underline, error (darker)4.62:1 3:14.65:1 3:1
border, error (darker)4.62:1 3:14.65:1 3:1
border, hover and focus (lighter and darker)4.57:1 3:13.80:1 3:1
read-only text18.09:1 AAA15.87:1 AAA
stepper icon18.09:1 3:115.87:1 3:1
stepper icon, hovered16.44:1 3:112.71:1 3:1

يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل