انتقل إلى المحتوى
TopClass UI

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

رمز يُستخدم مرة واحدة، حرف في كل خانة. اللصق يملأ كل الخانات، وحقل مخفي واحد يحمل الرمز إلى النموذج.

client - الحجم لم يُقَس بعد

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

client - الحجم لم يُقَس بعد

رمز يُستخدم مرة واحدة، حرف في كل خانة. اللصق يملأ كل الخانات، وحقل مخفي واحد يحمل الرمز إلى النموذج.

تثبيت

جرّبه

length
size
invalid
groupSize

الشيفرة

otp-field.tsx
import { OTPField } from 'topclassui/otp-field'

<div className="grid justify-items-start gap-2">
  <label htmlFor="otp-playground-code" className="text-sm text-body">Verification code</label>
  <OTPField id="otp-playground-code" />
</div>

اسم التصدير هو OTPField. داخل نموذج يرسل الحقل المخفي ما كُتب حتى الآن، حتى لو كان الرمز ناقصًا.

كل الحالات، بدون تمرير الفأرة

6 حالات

أو استورده من الحزمة

topclassui/otp-field
import { OtpField } from 'topclassui/otp-field'

ثبّت مرة واحدة:npm i topclassui@beta zod

أمثلة

  • length قيمته 6 افتراضيًا، ومحصور في عدد صحيح من 1 إلى 12. وgroupSize يرسم فاصلًا بعد كل ذلك العدد من الخانات.
  • الأرقام هي الافتراضية: تُقبل الأرقام اللاتينية والهندية الشرقية والفارسية وتُخزَّن لاتينية، وتُحذف المسافات من اللصق.
  • بعد ثمانية عناصر، خانات وفواصل معًا، ينكسر الصف عند خانات كاملة، فتبقى الخانات الاثنتا عشرة بارتفاع 44px على الهاتف.
  • كل خانة مربع من مقياس العناصر، 40px عند md، وتتخلى عن العرض قبل الارتفاع. الخانات الست تحتاج 184px.
  • كائن التحكم الذي يمرره Field يُفرد عليه كما هو.
basic

Six digits from your authenticator app

grouped
form
sizes
Extra small
Small
Medium
Large
Extra large
long
بالعربية، من اليمين إلى اليسار

الخصائص

خصائص OtpField
الخاصيةالنوعالافتراضيالحدودالوصف
aria-labelledbystring--The id of the visible text that names the first cell.
idstring--The id of the first cell, which a <label htmlFor> points at; the others are <id>-2, <id>-3.
aria-describedbystring--On the first cell, beside its name: the id of a hint or an error text.
aria-invalidboolean | 'true' | 'false' | 'grammar' | 'spe...--On every cell; invalid sets it to true, and when invalid is off a Field's own value survives.
aria-labelundefined--Refused: Base UI drops it on the first cell. Name the field by id or aria-labelledby.
classNamestring--Merged last, so a consumer class wins a conflict with the group's own.
groupSizeinteger, min 0, max 120min 0, max 12Draws a separator after every this many cells; 0 draws none. Clamped between 0 and length.
invalidbooleanfalse-Marks the code as wrong: sets aria-invalid on every cell, whose line turns to danger and thickens.
lengthinteger, min 1, max 126min 1, max 12The number of cells, one character each. Clamped between 1 and 12; past eight items the row wraps.
refRef<HTMLDivElement>--The <div role="group"> around the cells.
sizexs | sm | md | lg | xl | custom"md"-The control scale of each square cell and its type step; custom emits no size classes.

لوحة المفاتيح وإمكانية الوصول

لوحة مفاتيح OtpField
المفاتيحما يفعله
Tabيدخل الحقل: المجموعة كلها محطة Tab واحدة.
0-9يملأ الخانة وينتقل إلى التالية؛ واللصق يملأ كل الخانات ابتداءً من الخانة الحالية.
Backspaceيمسح الخانة ويعود إلى السابقة.
ArrowLeftArrowRightينقلان إلى الخانة السابقة أو التالية، حتى أول خانة فارغة.
HomeEndينقلان إلى أول خانة أو آخر خانة يمكن للتركيز بلوغها.
  • سمِّه بـid (لتسمية <label htmlFor>) أو aria-labelledby؛ ويقع الاسم على الخانة الأولى. أما aria-label فمرفوض.
  • كل خانة بعدها تُسمّى بموقعها، «الخانة 2 من 6»، بلغة المزوّد. وaria-describedby يذهب إلى الخانة الأولى.
  • invalid يضبط aria-invalid على كل خانة، لا على المجموعة: يتحوّل كل خط إلى لون الخطر ويزداد سمكًا.

من اليمين إلى اليسار

الرمز يُقرأ من اليسار إلى اليمين، لذا تبقى الخانات في صفحة عربية من اليسار إلى اليمين؛ وتقع المجموعة في بداية السطر، بجانب تسميتها.

الخادم والمتصفح

مكوّن متصفح: يُعرض على الخادم ثم يُرطَّب في المتصفح.

الملفات: index.tsx, client.tsx.

على الشارة: client - الحجم لم يُقَس بعد.