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

Search Box

حقل بحث فيه أيقونة بحث وزر مسح. حجمان وثلاث تعبئات وكل الحالات.

الإصدار 0.4.1 ·

حالات مربع البحث

التثبيت

bunx --bun shadcn@latest add @dga/search-box

ويثبّت Input وField أيضًا.

الاستخدام

page.tsx
tsx
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

تقع أيقونة البحث على اليمين (البداية) وزر المسح على اليسار (النهاية). والأيقونتان غير اتجاهيتين فلا تُعكسان. ويُحاذى النص التلميحي وعبارة البحث العربيان إلى اليمين.

LTR (الإنجليزية)
RTL (العربية)

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

المفتاحالإجراء
Tabينقل التركيز إلى الحقل، ثم إلى زر المسح عند وجود نص.
Escيمسح النص.
Enterيرسل النموذج الذي يوجد فيه.
  • حقل type="search" أصلي، تُعلنه قارئات الشاشة حقل بحث.
  • لزر المسح اسم (clearLabel) ومساحة نقر 24px وحد تركيز خاص به.
  • ضع الحقل داخل <form role="search"> أو معلم search ليتمكن المستخدمون من القفز إليه.
  • أعلن عدد النتائج في منطقة حيّة (role="status") عند تحديثها.

مرجع API

حقل بحث فيه أيقونة بحث في جهة البداية وزر مسح في جهة النهاية يظهر عند وجود نص. نوعه `type="search"`، فيمسحه Escape أيضًا.

خصائص SearchBox
الخاصيةالنوعالقيمة الافتراضية
"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 buttonIcon-only controls need a name and a keyboard path.

عرض جميع الاختلافات (1) لهذا المكوّن أسباب الاختلافات مكتوبة بالإنجليزية.

التباين

282 زوجًا لونيًا فُحص · جميعها تجتاز WCAG 2.1 AAعرض 47 حالة
النمط / الحالةالفاتحالداكن
filled text18.09:1 AAA15.87:1 AAA
hovered text18.09:1 AAA15.87:1 AAA
focused text10.17:1 AAA12.04:1 AAA
pressed text9.24:1 AAA9.64:1 AAA
pressed placeholder6.69:1 AA5.06:1 AA
pressed prefix and suffix text9.24:1 AAA9.64:1 AAA
underline, focused and pressed18.74:1 3:116.80:1 3:1
placeholder4.77:1 AA6.32:1 AA
prefix and suffix text10.17:1 AAA12.04:1 AAA
icon4.77:1 3:19.38:1 3:1
border, default4.57:1 3:13.80:1 3:1
border, hovered9.73:1 3:112.04:1 3:1
border, focused and pressed17.93:1 3:116.80:1 3:1
underline, error4.62:1 3:14.65:1 3:1
border, error4.62:1 3:14.65:1 3:1
filled text (lighter)17.64:1 AAA14.42:1 AAA
hovered text (lighter)17.64:1 AAA14.42:1 AAA
focused text (lighter)10.17:1 AAA12.04:1 AAA
pressed text (lighter)9.24:1 AAA9.64:1 AAA
pressed placeholder (lighter)6.69:1 AA5.06:1 AA
pressed prefix and suffix text (lighter)9.24:1 AAA9.64:1 AAA
underline, focused and pressed (lighter)18.28:1 3:115.27:1 3:1
placeholder (lighter)4.65:1 AA5.75:1 AA
prefix and suffix text (lighter)9.92:1 AAA10.95:1 AAA
icon (lighter)4.65:1 3:18.52:1 3:1
border, hovered (lighter)9.73:1 3:112.04:1 3:1
border, focused and pressed (lighter)17.93:1 3:116.80:1 3:1
underline, error (lighter)4.62:1 3:14.65:1 3:1
border, error (lighter)4.62:1 3:14.65:1 3:1
filled text (darker)16.44:1 AAA17.04:1 AAA
hovered text (darker)16.44:1 AAA17.04:1 AAA
focused text (darker)10.17:1 AAA12.04:1 AAA
pressed text (darker)9.24:1 AAA9.64:1 AAA
pressed placeholder (darker)6.69:1 AA5.06:1 AA
pressed prefix and suffix text (darker)9.24:1 AAA9.64:1 AAA
underline, focused and pressed (darker)17.03:1 3:118.03:1 3:1
placeholder (darker)6.69:1 AA6.79:1 AA
prefix and suffix text (darker)9.24:1 AAA12.93:1 AAA
icon (darker)4.34:1 3:110.07:1 3:1
border, hovered (darker)9.73:1 3:112.04:1 3:1
border, focused and pressed (darker)17.93:1 3:116.80:1 3:1
underline, error (darker)4.62:1 3:14.65:1 3:1
border, error (darker)4.62:1 3:14.65:1 3:1
border, hover and focus (lighter and darker)4.57:1 3:13.80:1 3:1
read-only text18.09:1 AAA15.87:1 AAA
clear button icon4.77:1 3:19.38:1 3:1
clear button icon, hovered16.44:1 3:112.71:1 3:1

يحتاج النص إلى تباين 4.5:1، والأيقونات وحلقات التركيز إلى 3:1. الحالات المعطّلة مستثناة. تقرير التباين الكامل