المحتوى
النص النائب يصف الهدف
المكونات
حقل إدخال مملوء بشكل حبّة للبحث والتصفية الفورية. أيقونة بحث ونص نائب خافت، مبني بالكامل من رموز الأساس.
حقل البحث هو مدخل التصفية الفورية: يكتب المستخدم فتُرشّح النتائج مباشرة. سطحه مملوء وحوافه حبّة، بحدّ خفيف يبقيه ظاهرا على أي سطح ويشتدّ عند التركيز.
نوعان بحسب السياق: الحقل المملوء الهادئ لأدوات العمل (المذاخر والمكتب)، وبحث السوق الزجاجي المتدرّج للواجهة الاستهلاكية (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 |
النص النائب يصف الهدف
حقل البحث يُستورد من حزمة المكوّنات، ويُنسّق بالكامل من الرموز الدلالية، لا من قيم خام. الاستخدام في React أولا، ثم عقد CSS للنوع المملوء الذي يربط السطح والحدّ والتركيز برمزه.
import { SearchField } from "@mercato/components";
<SearchField placeholder="ابحث عن زبون" />
<SearchField placeholder="ابحث عن زبون" defaultValue="صيدلية النور" />
<SearchField placeholder="ابحث عن زبون" disabled />
// The gradient marketplace type, with filter + barcode built in:
<GlassSearch placeholder="ابحث عن علاج، او حتى اعراض" />/* 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 |