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

المكوّنات

مساحة العمل

لوحة الأوامر

إجراءات

↑↓ للتنقل · ↵ للاختيار · Esc للإغلاق

كل مكوّن بأشكاله وأحجامه وحالاته. غيّر المظهر هنا وستتبعه كل النماذج.

السمة

الكثافة

التخطيط

الاتجاه

يعكس التخطيط والظل الصلب والأيقونات الاتجاهية. تحدده اللغة؛ غيّره هنا لرؤية أي اتجاه بأي لغة.

الإجراءات

الزر

إجراء أساسي واحد لكل شاشة. أثناء التحميل يكون معطّلًا ومشغولًا ويقول ما يفعله.

الأشكال

افتراضي
أساسي
خطر
شفاف

الأحجام

عادي
صغير
أيقونة
أيقونة صغيرة

الحالات

مفعّل
معطّل
جارٍ التحميل
التركيز
الاستخدام في Next.js
<button type="button" className="or-btn or-btn--primary">
  <Icon name="save" size={16} />
  Save changes
</button>
<button type="button" className="or-btn or-btn--icon or-btn--sm" aria-label="Notifications">
  <Icon name="bell" size={16} />
</button>
{/* Loading: disabled and busy, the label says what is happening. */}
<button type="button" className="or-btn or-btn--primary" disabled aria-busy="true">
  <Icon name="loader-circle" size={16} className="or-spin" />
  Saving…
</button>

عنصر التحكم المقسّم

ثلاثة أو أربعة خيارات تُطبَّق فورًا، جنبًا إلى جنب.

الحالات

محدّد
التركيز
الاستخدام في Next.js
<Seg
  label={t('settings.theme.label')}
  value={theme}
  options={THEMES.map((value) => ({ value, label: t(`settings.theme.${value}`) }))}
  onChange={setTheme}
/>

القائمة

قائمة إجراءات خلف زر. يغلقها مفتاح Escape أو النقر خارجها.

الحالات

مغلق
مفتوح
الاستخدام في Next.js
<Menu
  trigger={({ open, toggle }) => (
    <button type="button" className="or-btn or-btn--ghost" aria-haspopup="true" aria-expanded={open} onClick={toggle}>
      Account
    </button>
  )}
>
  <Link className="or-menu__item" href="/profile">Profile</Link>
  <div className="or-menu__sep" role="separator" />
  <button type="button" className="or-menu__item" onClick={signOut}>Sign out</button>
</Menu>

شريحة التصفية

تفتح قيم عمود واحد. يبيّن العدد كم قيمة اختيرت.

شاهده في شاشة

الحالات

مغلق
مع عدد
مفتوح
التركيز
الاستخدام في Next.js
{/* A filter is a URL: each option is a link to the list with it toggled. */}
<FilterMenu path={path} query={query} keep={keep} field="status" label={t('table.status')} values={filterValues('orderStatus')} />

الحالة

الشارة

حالة. النقطة قناة ثانية، فلا يكون اللون الإشارة الوحيدة أبدًا.

الدرجات

قيد التجهيز
محايد
مدفوع
نجاح
قيد الانتظار
تحذير
مسترد
خطر
تم الشحن
معلومة
مؤرشف
خافت
الاستخدام في Next.js
<span className="or-badge or-badge--success">
  <span className="or-badge__dot" />
  Paid
</span>

التغيّر

ارتفاع أو انخفاض أو لا شيء للمقارنة. لا «‎+100%» من الصفر أبدًا.

الأشكال

‎+12.4‎%‎
ارتفاع
‎-3.1‎%‎
انخفاض
لا توجد مقارنة
بلا مقارنة
الاستخدام في Next.js
<span className="or-delta or-delta--up">
  <Icon name="trending-up" size={16} />
  +12.4%
</span>

الصورة الرمزية

أحرف أولى على لون من اللوحة. يحتفظ الشخص بالصورة نفسها في كل سمة.

الألوان

MO
كريمي
TR
غروب
ID
خردلي
KM
صبّاري
LV
سماوي
SH
وردي

الأحجام

LV
صغير
LV
عادي
LV
كبير
الاستخدام في Next.js
{/* Initials, never a photograph: a face is a licence problem and a request. */}
<span className="or-avatar or-avatar--sky or-avatar--lg">LV</span>

الوسم

قيمة مختارة يمكن إزالتها وحدها.

الحالات

هدايا
مفعّل
هدايا
التركيز
الاستخدام في Next.js
<span className="or-tag">
  Gifts
  <button type="button" aria-label="Remove Gifts">
    <Icon name="x" size={16} />
  </button>
</span>

الإشعارات

التنبيه

رسالة تخصّ الشاشة وتبقى حتى يتغيّر الوضع.

الدرجات

تشمل الأسعار ضريبة القيمة المضافة لعملاء الاتحاد الأوروبي.
معلومة
دفعتك البالغة 2480.00 € في الطريق.
نجاح
ثلاثة منتجات نفدت من المخزون.
تحذير
خطر
الاستخدام في Next.js
<div className="or-alert or-alert--warning" role="status">
  <Icon name="triangle-alert" size={18} />
  <div>Three products are out of stock.</div>
</div>

الإشعار المنبثق

نتيجة شيء فعله القارئ للتو. يختفي من تلقاء نفسه.

الدرجات

بدأ التصدير. سيكون جاهزًا خلال دقيقة.
معلومة
تم الحفظ
نجاح
لم يُحفظ أي شيء.
خطر
الاستخدام في Next.js
// Server actions answer in place: the island shows the result inline
// rather than in a toast, so it is still there after a redirect.
<p className="or-alert or-alert--success" role="status">{t('form.saved')}</p>

الهيكل المؤقت

شكل ما يُحمَّل، لتُقرأ الصفحة قبل وصول الأرقام.

الأشكال

نص
قيمة
كتلة
الاستخدام في Next.js
<Skeleton variant="value" />
<Skeleton width="40%" />

الحالة الفارغة

يشرح سبب خلوّ المكان ويقدّم طريق الخروج.

شاهده في شاشة

الأشكال

لا شيء يطابق عوامل التصفية

جرّب بحثًا آخر، أو امسح عوامل التصفية لعرض كل شيء من جديد.

مع إجراء
الاستخدام في Next.js
<EmptyState icon="search" title={t('table.noResults')} body={t('table.noResultsBody')}>
  <button type="button" className="or-btn" onClick={table.clearFilters}>{t('table.clearFilters')}</button>
</EmptyState>

شريط النموذج

ما لم يُحفظ والأمران الممكنان حياله، مثبّت أسفل النموذج.

شاهده في شاشة

الحالات

تم الحفظ

محفوظ

تغييرات غير محفوظة

غير محفوظ

حقلان يحتاجان مراجعة

خطأ

تغييرات غير محفوظة

جارٍ التحميل
الاستخدام في Next.js
<FormBar
  dirty={form.dirty}
  saving={save.isPending}
  errors={form.errorCount}
  onSave={() => form.submit(() => save.mutate())}
  onDiscard={form.discard}
/>

مربع التأكيد

يقف بين القارئ وضياع عمله. مفتاح Escape هو الإجابة الآمنة.

الأشكال

تغييرات غير محفوظة

مغادرة هذه الشاشة الآن ستفقدها.

تأكيد
الاستخدام في Next.js
<ConfirmDialog
  open={guard.pending !== null}
  title={t('form.unsaved')}
  body={t('form.unsavedBody')}
  confirmLabel={t('form.leave')}
  onConfirm={guard.leave}
  onCancel={guard.stay}
/>

الحقول

حقل النص

تسمية وعنصر تحكم وخطأ أو تلميح يشير إليه العنصر.

شاهده في شاشة

الحالات

مفعّل
فارغ

يظهر في الفواتير وفي الرسائل.

مع تلميح

مطلوب

خطأ
معطّل
التركيز

الأحجام

عادي
صغير
بحث
الاستخدام في Next.js
<Field label={t('settings.general.organisation')} error={form.errors.organisation}>
  {({ id, describedBy, invalid }) => (
    <TextInput
      id={id}
      describedBy={describedBy}
      invalid={invalid}
      field="organisation"
      value={form.values.organisation}
      onChange={(value) => form.set('organisation', value)}
      onBlur={() => form.blur('organisation')}
    />
  )}
</Field>

القائمة المنسدلة

قيمة واحدة من قائمة قصيرة ثابتة.

الحالات

مفعّل

هذه القيمة غير مسموح بها

خطأ
معطّل
التركيز

الأحجام

عادي
صغير
الاستخدام في Next.js
<Field label={t('table.status')} error={form.errors.status}>
  {({ id, describedBy, invalid }) => (
    <SelectInput id={id} describedBy={describedBy} invalid={invalid} field="status" value={form.values.status} options={STATUS_OPTIONS} onChange={(value) => form.set('status', value)} />
  )}
</Field>

منطقة النص

عدة أسطر من النص العادي.

شاهده في شاشة

الحالات

مفعّل

مطلوب

خطأ
معطّل
التركيز
الاستخدام في Next.js
<textarea className="or-textarea" rows="4" id="bio" aria-describedby="bio-hint"></textarea>
<p className="or-hint" id="bio-hint">280 characters left</p>

مربع الاختيار

ثلاث حالات، لأن مربع الرأس يجب أن يقول «بعض هذه الصفحة».

شاهده في شاشة

الحالات

غير محدَّد
محدَّد
جزئي
معطّل
التركيز
الاستخدام في Next.js
{/* Selection is client state; the rows around it are server-rendered. */}
<HeaderCheck label={t('table.selectPage')} />
<RowCheck id={order.id} label={t('table.selectRow', { label: order.number })} />

المفتاح

نعم أو لا يسري عند حفظ النموذج.

شاهده في شاشة

الحالات

إيقاف
تشغيل

مرة يوميًا، قبل التاسعة صباحًا.

مع تلميح
معطّل
التركيز
الاستخدام في Next.js
<SwitchField
  field="productUpdates"
  label={t('settings.notifications.productUpdates')}
  checked={form.values.productUpdates}
  onChange={(value) => form.set('productUpdates', value)}
/>

الإكمال التلقائي

عدة قيم من قائمة طويلة، يُعثر عليها بالكتابة.

شاهده في شاشة

الحالات

فارغ
هداياالمنزل
معبّأ
المنزل
مفتوح
خطأ
المنزل
التركيز
الاستخدام في Next.js
<Combobox
  id={id}
  describedBy={describedBy}
  field="tags"
  invalid={invalid}
  values={form.values.tags}
  options={options('tag')}
  onChange={(values) => form.set('tags', values)}
/>

منتقي التاريخ

يُكتب بصيغة YYYY-MM-DD أو يُختار من شبكة الشهر بمفاتيح الأسهم.

شاهده في شاشة

الحالات

مغلق
فبراير 2026
الاثنينالثلاثاءالأربعاءالخميسالجمعةالسبتالأحد
مفتوح

مطلوب

خطأ
التركيز
الاستخدام في Next.js
<DateField
  id={id}
  describedBy={describedBy}
  field="publishAt"
  value={form.values.publishAt}
  today={TODAY}
  onChange={(value) => form.set('publishAt', value)}
/>

رفع الملفات

منطقة إفلات بداخلها حقل ملفات حقيقي، فتعمل من لوحة المفاتيح.

شاهده في شاشة

الحالات

أفلت الصور هنا

PNG أو JPG، حتى 2 ميغابايت لكل ملف، و6 كحد أقصى

فارغ

أفلت الصور هنا

PNG أو JPG، حتى 2 ميغابايت لكل ملف، و6 كحد أقصى

أثناء السحب

أفلت الصور هنا

PNG أو JPG، حتى 2 ميغابايت لكل ملف، و6 كحد أقصى

  • lamp-front.jpg412 kB
  • lamp-detail.png1280 kB
معبّأ
الاستخدام في Next.js
<FileField
  id={id}
  describedBy={describedBy}
  field="images"
  files={form.values.images}
  onChange={(files) => form.set('images', files)}
  onReject={(failure) => push(t(failure.key, failure.values), 'danger')}
/>

النص المنسّق

غامق ومائل وقوائم وروابط. يصل النص الملصق نظيفًا.

شاهده في شاشة

الحالات

مديرة العمليات. تدير مستودع لشبونة وتردّ على الرسائل الصعبة.

معبّأ
فارغ

مديرة العمليات. تدير مستودع لشبونة وتردّ على الرسائل الصعبة.

التركيز
الاستخدام في Next.js
<RichText
  id={id}
  describedBy={describedBy}
  label={t('product.descriptionIn', { language: t(`language.${locale}`) })}
  value={form.values.description[locale]}
  onChange={(html) => form.set(`description.${locale}`, html)}
/>

رمز لمرة واحدة

ستّ خانات تتصرّف كحقل واحد: الكتابة تتقدّم واللصق يملؤها كلها.

شاهده في شاشة

الحالات

رمز التحقق
فارغ
رمز التحقق
معبّأ
رمز التحقق
خطأ
الاستخدام في Next.js
<CodeInput code={code} legend={t('auth.verify.legend')} error={form.errors.code} onChange={setCode} />

قوة كلمة المرور

نصيحة لا حاجز. الطول وحده يمكن أن يرفض كلمة المرور.

شاهده في شاشة

الأشكال

قصيرة جدًا
قصيرة جدًا
ضعيفة
ضعيفة
مقبولة
مقبولة
جيدة
جيدة
قوية
قوية
الاستخدام في Next.js
<StrengthMeter password={form.values.password} />

التنقّل

علامات التبويب

أجزاء شاشة واحدة. التبويب في العنوان وتتنقّل الأسهم على الصف.

شاهده في شاشة

الحالات

محدّد
التركيز
الاستخدام في Next.js
<div className="or-tabs" role="tablist" aria-label={t('settings.title')} onKeyDown={onKeyDown}>
  {SETTINGS_TABS.map((name) => (
    <Link key={name} className="or-tabs__tab" role="tab" href={`/settings?tab=${name}`}
      aria-selected={name === tab} tabIndex={name === tab ? 0 : -1}>
      {t(`settings.tabs.${name}`)}
    </Link>
  ))}
</div>

ترقيم الصفحات

موضع القارئ في قائمة طويلة، وعدد الصفوف في الصفحة.

شاهده في شاشة

الحالات

عرض 1–25 من 287
الصفحة الأولى
عرض 126–150 من 287
صفحة وسطى
عرض 276–287 من 287
الصفحة الأخيرة
الاستخدام في Next.js
{/* Links rather than buttons: every page is a URL the server renders. */}
<Link className="or-pager__page" href={hrefFor(path, query, { page: page + 1 }, keep)} aria-label={t('table.nextPage')}>
  <Icon name="chevron-right" size={16} />
</Link>

شريط الإجراءات الجماعية

يظهر مع أول صف محدّد، ضمن التدفّق لا فوق الجدول.

شاهده في شاشة

الأشكال

3 عناصر محددة
مع تحديد
الاستخدام في Next.js
{/* The selection is client state; the action is a server action. */}
<BulkBar>
  <BulkActions />
</BulkBar>

عرض البيانات

البطاقة

حاوية لموضوع واحد، مع رأس اختياري.

الأشكال

أحدث الطلبات

تحمل البطاقة موضوعًا واحدًا: قائمة أو رسمًا بيانيًا أو قسمًا من نموذج.

مع حشوة

أحدث الطلبات

الطلبالعميلالحالة
#10482Maya Okaforمدفوع‏184.50 €
#10481Tomás Reyesقيد الانتظار‏62.00 €
#10480Ines Duarteمسترد‏129.90 €
بلا حشوة
الاستخدام في Next.js
<section className="or-card">
  <div className="or-card__head">
    <h3>Recent orders</h3>
    <a className="or-btn or-btn--ghost or-btn--sm" href="orders.html">View all</a>
  </div>
  <div className="or-card__body">…</div>
  {/* or-card__body--flush when the body is a table that runs to the edges */}
</section>

المؤشّر

رقم واحد وما يقيسه وكيف تغيّر.

شاهده في شاشة

الحالات

الإيرادات‏48,290.00 €‎+12.4‎%‎
معبّأ
الإيرادات
جارٍ التحميل
الاستخدام في Next.js
<div className="or-card">
  <div className="or-stat">
    <span className="or-stat__label">Revenue</span>
    <span className="or-stat__value">€48,290.00</span>
    <span className="or-stat__foot"><span className="or-delta or-delta--up">+12.4%</span></span>
  </div>
</div>

الجدول

رؤوس قابلة للترتيب وصفوف قابلة للتحديد وأرقام محاذاة على الفاصلة العشرية.

شاهده في شاشة

الحالات

الطلبالعميلالحالة
#10482Maya Okaforمدفوع‏184.50 €
#10481Tomás Reyesقيد الانتظار‏62.00 €
#10480Ines Duarteمسترد‏129.90 €
مفعّل
الطلبالعميلالحالة
#10482Maya Okaforمدفوع‏184.50 €
#10481Tomás Reyesقيد الانتظار‏62.00 €
#10480Ines Duarteمسترد‏129.90 €
محدّد
الاستخدام في Next.js
{/* Sorting is a link to the same list, sorted: the server renders it. */}
<th scope="col" aria-sort={sort} className="or-num">
  <Link className="or-table__sort" href={hrefFor(path, nextSort(query, 'totalCents'), {}, keep)}>
    {t('table.total')}
    <Icon name={ARROW[sort]} size={16} />
  </Link>
</th>

الخط الزمني

ما فعله حساب واحد، الأحدث أولًا، كقائمة مرتّبة.

شاهده في شاشة

الأشكال

  1. قدّم الطلب ‎#1048218‏/02‏/2026، 10:24 ص
  2. فتح النشرة الربيعية11‏/02‏/2026، 4:02 م
  3. أنشأ حسابًا03‏/11‏/2025، 9:15 ص
السجل
الاستخدام في Next.js
<ol className="or-timeline">
  <li className="or-timeline__item">
    <span className="or-timeline__mark" aria-hidden="true">
      <Icon name="shopping-cart" size={16} />
    </span>
    <div className="or-timeline__body">
      <span>Placed order #10482</span>
      <span className="or-timeline__when">18 Feb 2026, 10:24</span>
    </div>
  </li>
</ol>

قائمة الوصف

أزواج تسمية وقيمة، مرتبطة في الترميز لا في التخطيط فقط.

شاهده في شاشة

الأشكال

البريد الإلكتروني
maya@example.com
البلد
البرتغال
إجمالي الإنفاق
‏2,489.00 €
تسمية وقيمة
الاستخدام في Next.js
<dl className="or-facts">
  <div className="or-facts__row">
    <dt>Email</dt>
    <dd><a href="mailto:maya@example.com">maya@example.com</a></dd>
  </div>
</dl>