Autocomplete
فیلد متنی که هر چه تایپ میکنید، فهرست گزینهها را فیلتر میکند؛ ترکیب Input و ListBox در یک کامپوننت، با مدل combobox (فوکوس همیشه روی خودِ فیلد میماند).
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/autocomplete.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/autocomplete.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/autocomplete.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/autocomplete.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import { Autocomplete } from "@/components/ui/autocomplete"
<Autocomplete
items={cities}
value={city}
onValueChange={setCity}
placeholder="شهر را جستجو کنید…"
/>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
Autocomplete دیتا-محور است: فهرست items را بهعنوان آرایهٔ { value, label } میدهید، نه فرزند JSX (برخلاف ListBox).
فیلتر روی برچسبها با نرمالسازی حروف عربی/فارسی (ی/ك در برابر ی/ک) انجام میشود تا تایپ با هر دو صورت نویسهها کار کند.
دسترسپذیری
- role=combobox روی input با aria-expanded/aria-controls/aria-activedescendant؛ فهرست role=listbox و هر گزینه role=option است.
- فوکوس واقعیِ کیبورد همیشه روی input میماند؛ گزینهٔ هایلایتشده فقط با aria-activedescendant معرفی میشود، نه با جابهجایی فوکوس.
- فلش بالا/پایین بین گزینههای فیلترشده حرکت میکند، Enter گزینهٔ هایلایتشده را تایید میکند و Escape فهرست را میبندد و مقدار را به آخرین انتخاب برمیگرداند.
مرجع API
Autocomplete
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| items | { value: string; label: string; disabled?: boolean }[] | — | فهرست کامل گزینهها. |
| value / defaultValue | string | — | مقدار انتخابشدهٔ کنترلشده یا اولیه. |
| onValueChange | (value: string) => void | — | فراخوانی هنگام انتخاب یک گزینه. |
| placeholder | string | "جستجو…" | متن راهنمای فیلد. |
| emptyText | string | "چیزی پیدا نشد" | متن هنگام خالیبودن نتیجهٔ فیلتر. |
| disabled | boolean | false | غیرفعال کردن کل فیلد. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
با برچسب و مقدار اولیه
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
با گزینهٔ غیرفعال
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نامعتبر (Invalid)
Autocomplete پراپ invalid ندارد. حاشیهٔ خطا را با className روی input بگذارید و پیام را زیرش بنویسید. اگر فیلد اجباری است، پیش از اولین تلاشِ ثبت خطا نشان ندهید.
انتخاب شهر الزامی است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال در برابر مقدار قطعیشده
Autocomplete حالت فقطخواندنی ندارد و disabled جایش نیست: مقدار خاکستری و غیرقابل کپی میشود. اگر انتخاب قطعی شده، بهجای کنترل، متن نشان دهید.
غیرقابل انتخاب و کپی
داده است، نه کنترل
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
در حال دریافت گزینهها (Loading)
تا رسیدن گزینهها فیلد را قفل کنید و placeholder را گویا بگذارید. فیلد باز ولی خالی، کاربر را وادار میکند تایپ کند و نتیجه نبیند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نتیجهٔ خالی (Empty)
متن پیشفرض «چیزی پیدا نشد» است. با emptyText دقیقترش کنید تا کاربر بفهمد در چه چیزی جستجو شده و چه کند.
متن پیشفرض «چیزی پیدا نشد» است؛ با emptyText دقیقترش کنید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
عنوان بلند (Overflow)
عرض ثابت بدهید تا فیلد با محتوا کش نیاید. بدون آن، یک گزینهٔ بلند کل چیدمان فرم را جابهجا میکند.
عرض ثابت بدهید تا فیلد با محتوا کش نیاید و چیدمان فرم نشکند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| با برچسب و مقدار اولیه | فرم ویرایش سفر که شهر مبدا از قبل انتخاب شده |
| با گزینهٔ غیرفعال | شهری که ظرفیتش تکمیل شده و فعلاً قابل انتخاب نیست |
| غیرفعال | فیلد شهر مقصد که تا انتخابنشدن مبدا قفل است |
| نامعتبر (Invalid) | فیلد اجباری که کاربر بدون انتخاب، فرم را ثبت کرده |
| غیرفعال در برابر مقدار قطعیشده | فیلدی که بعد از ثبت قفل شده و فقط باید دیده شود |
| در حال دریافت گزینهها (Loading) | فهرستی که با باز شدن فرم از سرور میآید |
| نتیجهٔ خالی (Empty) | جستجویی که به هیچ گزینهای نمیخورد |
| عنوان بلند (Overflow) | نام کامل سازمانها و عنوانهای طولانی |