رفتن به محتوای اصلی

کامپوننت‌ها

جستجو و انتخاب

فیلد جستجو با فهرست پیشنهادها (Combobox)؛ برای فهرست‌های بلند مثل شهر، کاربر یا محصول.

import { Combobox } from "@kashi-ui/react";

وقتی گزینه‌ها بیشتر از ده‌تاست، به‌جای Select از Combobox استفاده کنید. جستجو متن فارسی را یکدست می‌کند: «ي» و «ی»، «ك» و «ک» و ارقام فارسی و انگلیسی یکی حساب می‌شوند.

نمونه

«علي» و «علی» یکی حساب می‌شوند.

هنوز انتخابی نشده.

const [city, setCity] = useState<string | null>(null);

<Combobox label="استان" placeholder="جستجو کنید…"
options={provinces.map((p) => ({ value: p, label: p }))}
value={city} onChange={setCity} />

گروه، توضیح و آیکون

<Combobox label="مسئول" options={[
{ value: "sara", label: "سارا محمدی", description: "طراح محصول", group: "طراحی", icon: <Avatar name="سارا محمدی" size="xs" /> },
{ value: "ali", label: "علی رضایی", group: "فنی", keywords: ["ali"] },
{ value: "mina", label: "مینا احمدی", group: "فنی", disabled: true },
]} />

برای جستجوی سمت سرور، onInputChange را بگیرید، options را از پاسخ سرور بسازید، loading را در زمان درخواست روشن کنید و filter={() => true} بدهید.

نامنوعپیش‌فرضتوضیح
options{ value, label, description?, icon?, group?, keywords?, disabled? }[]—گزینه‌ها؛ گزینه‌های هم‌گروه باید پشت سر هم باشند
value / defaultValuestring | nullnullمقدار انتخاب‌شده
onChange(value: string | null) => void—پس از انتخاب یا پاک کردن
onInputChange(query: string) => void—تغییر متن جستجو
filter(option, query) => booleandefaultFilterجستجوی سفارشی
loadingbooleanfalseاسپینر و متن «در حال جستجو…»
emptyMessageReactNode«نتیجه‌ای پیدا نشد.»متن فهرست خالی
namestring—فیلد پنهان برای ارسال فرم
label / hint / errorReactNode—مثل ورودی

ابزارهای defaultFilter، searchText و highlight هم صادر شده‌اند تا در جستجوهای خودتان استفاده کنید.

کیبورد

کلید عمل
↓ / ↑ باز کردن فهرست و رفتن به گزینهٔ بعد / قبل
Enter انتخاب گزینهٔ فعال
Esc بستن فهرست؛ اگر بسته است، پاک کردن مقدار
Home / End اولین / آخرین گزینه (وقتی فهرست باز است)

دسترس‌پذیری

الگوی Combobox در WAI-ARIA با aria-activedescendant: فوکوس همیشه در فیلد می‌ماند و صفحه‌خوان گزینهٔ فعال را می‌خواند. تعداد نتیجه‌ها پس از هر تایپ با یک ناحیهٔ aria-live اعلام می‌شود («۳ نتیجه») و گزینه‌های غیرفعال aria-disabled دارند.