Mercato

المكونات

حقل البحث

حقل إدخال مملوء بشكل حبّة للبحث والتصفية الفورية. أيقونة بحث ونص نائب خافت، مبني بالكامل من رموز الأساس.

جاهز، مؤكّد من فيغماإدخالاتجاه منطقي
النضج
جاهز
الإصدار
1.0
المالك
فريق نظام التصميم
المنصّة
الويب، React Native

نظرة عامة

حقل البحث هو مدخل التصفية الفورية: يكتب المستخدم فتُرشّح النتائج مباشرة. سطحه مملوء وحوافه حبّة، بحدّ خفيف يبقيه ظاهرا على أي سطح ويشتدّ عند التركيز.

جرّبه
النوع
النص النائب
معطّل

النوعان

نوعان بحسب السياق: الحقل المملوء الهادئ لأدوات العمل (المذاخر والمكتب)، وبحث السوق الزجاجي المتدرّج للواجهة الاستهلاكية (B2B) مع أزرار التصفية والباركود مدمجة. كلاهما حيّ.

مملوء · أدوات العمل

زجاجي · واجهة السوق (B2B)

الحالات

أربع حالات حيّة: فارغ، مكتوب فيه (مع زر مسح)، مركّز عليه (حلقة تركيز)، ومعطّل. جرّبها.

فارغ

مكتوب فيه

معطّل

ركّز بلوحة المفاتيح

السلوك

يركّز المستخدم الحقل بلوحة المفاتيح فتحيطه حلقة تركيز واضحة، ثم يكتب فتُرشّح النتائج فوريا. يظهر زر المسح فور وجود نص ويفرّغ الحقل بنقرة واحدة، والضغط على Enter يؤكّد البحث. حين لا نتيجة تُطابق يقود الحقل إلى حالة فارغة تشرح السبب وتقترح خطوة تالية بدل ترك الشاشة فارغة.

التركيب

كل خاصية بصرية تأتي من طبقة أساس: التعبئة والنص (الألوان)، والشكل حبّة (الاستدارة)، والحشو والفجوة (المسافات)، والخط (الطباعة)، والحدّ عند التركيز (الحدود)، والانتقال (الحركة).

الجزءالطبقة والرمز
التعبئةColor · bg.base.section
النصColor · fg.base.primary
النص النائب والأيقونةColor · fg.base.tertiary
الشكلRadius · shape.rounded
الحشو والفجوةSpacing · inset + inline
الخطTypography · body / md
حدّ التركيزBorder · intent.accent + focus

المحتوى

النص النائب يصف الهدف

اجعل النص النائب يصف ما يُبحث عنه: "ابحث عن زبون"، لا "ابحث" وحدها. لا تستخدمه بديلا عن تسمية وصول.

افعل ولا تفعل

افعل
  • رشّح النتائج فوريا أثناء الكتابة.
  • أظهر زر المسح حين يوجد نص.
لا تفعل
  • لا تحذف النص النائب فيصبح الحقل غامضا.
  • لا تستخدمه لإدخال نموذج عادي؛ هذا حقل بحث.

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

  • تسمية وصول عربية مطلوبة (aria-label) حتى مع وجود نص نائب.
  • نوع الإدخال search، وزر المسح له تسمية وصول.
  • حلقة تركيز واضحة تحيط الحقل كاملا عند التركيز بلوحة المفاتيح.

الشيفرة

حقل البحث يُستورد من حزمة المكوّنات، ويُنسّق بالكامل من الرموز الدلالية، لا من قيم خام. الاستخدام في React أولا، ثم عقد CSS للنوع المملوء الذي يربط السطح والحدّ والتركيز برمزه.

React
import { SearchField } from "@mercato/components";

<SearchField placeholder="ابحث عن زبون" />
<SearchField placeholder="ابحث عن زبون" defaultValue="صيدلية النور" />
<SearchField placeholder="ابحث عن زبون" disabled />

// The gradient marketplace type, with filter + barcode built in:
<GlassSearch placeholder="ابحث عن علاج، او حتى اعراض" />
CSS
/* Filled search field, authored from semantic tokens only. */
.field {
  display: flex;
  align-items: center;
  gap: var(--spacing-inline-md);
  min-height: 44px;                               /* accessible touch target */
  padding: var(--spacing-inset-xs) var(--spacing-inset-md);
  background: var(--color-bg-base-section);
  border: var(--border-base) solid var(--color-border-base-medium); /* always-on edge so it stays visible on any surface */
  border-radius: var(--shape-rounded);            /* Mercato search is a pill */
  color: var(--color-fg-base-primary);
  transition: border-color var(--motion-feedback-duration) var(--motion-feedback-easing);
}
.field:focus-within {
  border-color: var(--color-border-intent-accent);
  outline: var(--border-focus) solid var(--color-focus-default);
  outline-offset: 2px;
}
.field[data-disabled="true"] { background: var(--color-bg-base-disabled); color: var(--color-fg-base-disabled); cursor: not-allowed; }

.field input {
  flex: 1;
  min-width: 0;
  background: transparent;
  border: 0;
  outline: 0;
  color: inherit;
  font-family: var(--type-body-md-base-family);
  font-size: var(--type-body-md-base-size);
  line-height: var(--type-body-md-base-line-height);
}
.field input::placeholder { color: var(--color-fg-base-tertiary); }
.field .field-icon        { color: var(--color-fg-base-tertiary); }

لا يحمل الحقل قيمة لون أو استدارة أو مسافة مباشرة: تبديل الوضع الداكن أو إعادة العلامة يسري تلقائيا لأن كل شيء يمرّ عبر الرموز.

الخطأما يفسدالصواب
خلفية رمادية ثابتة (#F2F4F8)يكسر الوضع الداكن وإعادة العلامةvar(--color-bg-base-section)
border-radius: 999px مباشرةينحرف عن سلّم الأشكالvar(--shape-rounded)
الاكتفاء بالنص النائب بلا aria-labelيفقد قارئ الشاشة اسم الحقلمرّر aria-label عربيا دائما
إزالة حلقة :focus-withinيفشل الوصول بلوحة المفاتيحأبقِ الحلقة بـ --color-focus-default