Search Box
حقل بحث فيه أيقونة بحث وزر مسح. حجمان وثلاث تعبئات وكل الحالات.
الإصدار 0.4.1 ·
التثبيت
bunx --bun shadcn@latest add @dga/search-boxالاستخدام
import { useState } from "react";
import { Field, FieldLabel } from "@/components/ui/field";
import { SearchBox } from "@/components/ui/search-box";
export function ServiceSearch() {
const [query, setQuery] = useState("");
return (
<Field>
<FieldLabel>البحث في الخدمات</FieldLabel>
<SearchBox
value={query}
onValueChange={setQuery}
placeholder="ابحث في الخدمات"
clearLabel="مسح البحث"
/>
</Field>
);
}استخدم Search Box للعثور على عناصر في قائمة أو جدول أو الموقع كله. أعطه تسمية ظاهرة أو aria-label، ونصًا تلميحيًا يوضح ما يُبحث عنه. ترجم clearLabel في الصفحات العربية. والنتائج من عندك: يجمع هذا المكوّن عبارة البحث فقط.
البنية
- الإطار: الحد والتعبئة نفسهما في Input.
- أيقونة البحث: في جهة البداية، زخرفية.
- الحقل (
type="search"): عبارة البحث. - زر المسح: في جهة النهاية، يظهر عند وجود نص.
أمثلة
زر المسح
اكتب لإظهار زر المسح. يفرغ الحقل ويعيد التركيز إليه ويستدعي onValueChange بنص فارغ. ويفعل Esc الشيء نفسه.
الحالات
الافتراضية والمعبأة مع زر المسح وللقراءة فقط والمعطّلة، والحجم المتوسط مع التعبئة الأغمق.
RTL
تقع أيقونة البحث على اليمين (البداية) وزر المسح على اليسار (النهاية). والأيقونتان غير اتجاهيتين فلا تُعكسان. ويُحاذى النص التلميحي وعبارة البحث العربيان إلى اليمين.
إمكانية الوصول
| المفتاح | الإجراء |
|---|---|
| Tab | ينقل التركيز إلى الحقل، ثم إلى زر المسح عند وجود نص. |
| Esc | يمسح النص. |
| Enter | يرسل النموذج الذي يوجد فيه. |
- حقل
type="search"أصلي، تُعلنه قارئات الشاشة حقل بحث. - لزر المسح اسم (
clearLabel) ومساحة نقر 24px وحد تركيز خاص به. - ضع الحقل داخل
<form role="search">أو معلمsearchليتمكن المستخدمون من القفز إليه. - أعلن عدد النتائج في منطقة حيّة (
role="status") عند تحديثها.
مرجع API
SearchBox
حقل بحث فيه أيقونة بحث في جهة البداية وزر مسح في جهة النهاية يظهر عند وجود نص. نوعه `type="search"`، فيمسحه Escape أيضًا.
| الخاصية | النوع | القيمة الافتراضية |
|---|---|---|
"md" | "lg"الارتفاع: `md` 32px، و`lg` 40px. | لا توجد قيمة افتراضية | |
| ||
(value: string) => voidتُستدعى بالنص الجديد كلما تغيّر، ومنه عند المسح. | لا توجد قيمة افتراضية | |
| ||
"default" | "lighter" | "darker"التعبئة: `default` (أبيض) أو `lighter` أو `darker`. وتحتفظ الثلاث بحد ظاهر. | لا توجد قيمة افتراضية | |
| ||
stringنص متحكَّم به. | لا توجد قيمة افتراضية | |
| ||
stringاسم زر المسح لتقنيات المساعدة. ترجمه في الصفحات العربية. | "Clear search" | |
| ||
stringأصناف CSS للعنصر `<input>` نفسه. أما `className` فيصمّم الإطار المحيط به. | لا توجد قيمة افتراضية | |
| ||
stringالنص الابتدائي عند عدم التحكم. | لا توجد قيمة افتراضية | |
| ||
booleanيعطّل الحقل. | لا توجد قيمة افتراضية | |
| ||
booleanيمكن قراءة النص لكن لا يمكن تغييره. ويُخفى زر المسح. | لا توجد قيمة افتراضية | |
| ||
stringنص تلميحي يظهر والحقل فارغ. | لا توجد قيمة افتراضية | |
| ||
يقبل أيضًا جميع خصائص Base UI Input (يفتح في نافذة جديدة).
الاختلافات عن DGA
- نسخة الأيقونة اللاحقة في Figma (المسح أو الصوت) صارت زر مسح حقيقيًا باسم، ويعيد التركيز إلى الحقل.
- الحالات كما في Input: لا حد خارجي، وخط سفلي ينمو من الوسط، ولا حدّ للتعبئتين الأفتح والأغمق في حالة السكون.
| التغيير | السبب |
|---|---|
Search Box: clear button | Icon-only controls need a name and a keyboard path. |
عرض جميع الاختلافات (1) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.
التباين
282 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 47 حالةإخفاء
| النمط / الحالة | الفاتح | الداكن |
|---|---|---|
| filled text | 18.09:1 AAA | 15.87:1 AAA |
| hovered text | 18.09:1 AAA | 15.87:1 AAA |
| focused text | 10.17:1 AAA | 12.04:1 AAA |
| pressed text | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed | 18.74:1 3:1 | 16.80:1 3:1 |
| placeholder | 4.77:1 AA | 6.32:1 AA |
| prefix and suffix text | 10.17:1 AAA | 12.04:1 AAA |
| icon | 4.77:1 3:1 | 9.38:1 3:1 |
| border, default | 4.57:1 3:1 | 3.80:1 3:1 |
| border, hovered | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error | 4.62:1 3:1 | 4.65:1 3:1 |
| filled text (lighter) | 17.64:1 AAA | 14.42:1 AAA |
| hovered text (lighter) | 17.64:1 AAA | 14.42:1 AAA |
| focused text (lighter) | 10.17:1 AAA | 12.04:1 AAA |
| pressed text (lighter) | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder (lighter) | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text (lighter) | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed (lighter) | 18.28:1 3:1 | 15.27:1 3:1 |
| placeholder (lighter) | 4.65:1 AA | 5.75:1 AA |
| prefix and suffix text (lighter) | 9.92:1 AAA | 10.95:1 AAA |
| icon (lighter) | 4.65:1 3:1 | 8.52:1 3:1 |
| border, hovered (lighter) | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed (lighter) | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error (lighter) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error (lighter) | 4.62:1 3:1 | 4.65:1 3:1 |
| filled text (darker) | 16.44:1 AAA | 17.04:1 AAA |
| hovered text (darker) | 16.44:1 AAA | 17.04:1 AAA |
| focused text (darker) | 10.17:1 AAA | 12.04:1 AAA |
| pressed text (darker) | 9.24:1 AAA | 9.64:1 AAA |
| pressed placeholder (darker) | 6.69:1 AA | 5.06:1 AA |
| pressed prefix and suffix text (darker) | 9.24:1 AAA | 9.64:1 AAA |
| underline, focused and pressed (darker) | 17.03:1 3:1 | 18.03:1 3:1 |
| placeholder (darker) | 6.69:1 AA | 6.79:1 AA |
| prefix and suffix text (darker) | 9.24:1 AAA | 12.93:1 AAA |
| icon (darker) | 4.34:1 3:1 | 10.07:1 3:1 |
| border, hovered (darker) | 9.73:1 3:1 | 12.04:1 3:1 |
| border, focused and pressed (darker) | 17.93:1 3:1 | 16.80:1 3:1 |
| underline, error (darker) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, error (darker) | 4.62:1 3:1 | 4.65:1 3:1 |
| border, hover and focus (lighter and darker) | 4.57:1 3:1 | 3.80:1 3:1 |
| read-only text | 18.09:1 AAA | 15.87:1 AAA |
| clear button icon | 4.77:1 3:1 | 9.38:1 3:1 |
| clear button icon, hovered | 16.44:1 3:1 | 12.71:1 3:1 |
يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل