Command
فهرست دستورهای قابل جستجو با فیلتر زنده و ناوبری کامل با صفحهکلید. یا مستقیم داخل صفحه مینشیند (مثل جستجوی یک پنل) یا داخل دیالوگ بهصورت پالت Ctrl+K.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/command.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/command.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/command.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/command.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import {
Command,
CommandEmpty,
CommandGroup,
CommandInput,
CommandItem,
CommandList,
} from "@/components/ui/command"
<Command>
<CommandInput placeholder="جستجو کنید…" />
<CommandList>
<CommandEmpty>نتیجهای پیدا نشد.</CommandEmpty>
<CommandGroup heading="پیشنهادها">
<CommandItem onSelect={() => router.push("/profile")}>پروفایل</CommandItem>
</CommandGroup>
</CommandList>
</Command>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
دسترسپذیری
- ورودی نقش combobox و فهرست نقش listbox دارد؛ آیتم فعال با aria-selected و data-selected مشخص میشود.
- ناوبری با کلیدهای بالا و پایین است و Enter آیتم فعال را انتخاب میکند؛ Escape دیالوگ را میبندد.
- CommandEmpty را همیشه بگذارید تا وقتی نتیجهای نیست، کاربر صفحهخوان هم بفهمد جستجو خالی است.
- میانبر Ctrl+K را خودتان با شنوندهٔ keydown وصل کنید و آن را در رابط نشان دهید تا کشفشدنی باشد.
- CommandShortcut فقط نمایشی است و با dir=ltr رندر میشود تا ترتیب کلیدها در متن فارسی بههم نریزد.
مرجع API
Command
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value / onValueChange | string / (value: string) => void | — | کنترل آیتمی که هماکنون فعال است. |
| shouldFilter | boolean | true | خاموش کردن فیلتر داخلی وقتی نتیجهها را خودتان از سرور میگیرید. |
| loop | boolean | false | برگشت از آخرین آیتم به اولی با کلید جهتدار. |
CommandDialog
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| open / onOpenChange | boolean / (open: boolean) => void | — | باز و بسته بودن دیالوگ. |
| title | string | "پالت دستورها" | عنوان پنهان برای صفحهخوان. |
| description | string | — | توضیح پنهان برای صفحهخوان. |
| showCloseButton | boolean | true | نمایش دکمهٔ بستن دیالوگ. |
CommandItem / CommandGroup
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| CommandItem value | string | — | متنی که فیلتر روی آن اجرا میشود؛ برای مترادفها صریح بدهید. |
| CommandItem onSelect | (value: string) => void | — | هنگام انتخاب با کلیک یا Enter صدا زده میشود. |
| CommandItem disabled | boolean | false | آیتم دیده میشود ولی انتخاب نمیشود. |
| CommandGroup heading | React.ReactNode | — | عنوان دسته؛ اگر همهٔ آیتمهای گروه فیلتر شوند، خودکار پنهان میشود. |
CommandInput / CommandList / CommandEmpty
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| CommandInput value / onValueChange | string / (value: string) => void | — | کنترل متن جستجو، مثلاً برای جستجوی سمت سرور. |
| CommandList | Component | — | ناحیهٔ اسکرول نتایج؛ ارتفاع بیشینهاش پیشفرض ۳۰۰ پیکسل است. |
| CommandEmpty | Component | — | فقط وقتی هیچ نتیجهای نیست رندر میشود. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
Command Dialog
همان پالت Ctrl+K؛ حالت باز بودن را در state نگه دارید و میانبر را به آن وصل کنید.
یا کلیدهای Ctrl+K را بزنید.
پالت دستورها
برای جستجو تایپ کنید یا با کلیدهای بالا و پایین حرکت کنید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Searchable Values
با value مترادفها را به آیتم اضافه کنید تا جستجوی «کاربر» هم «پروفایل» را پیدا کند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
Disabled Item
آیتم غیرفعال در فهرست میماند ولی انتخاب نمیشود؛ برای قابلیتهایی که هنوز فعال نیستند.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نتیجهٔ خالی (Empty)
CommandEmpty متن پیشفرض دارد؛ آن را با متنِ مخصوصِ برنامهتان جایگزین کنید تا بگوید دقیقاً در چه چیزی جستجو شده.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
جستجوی سرور (Loading)
فیلترِ محلیِ Command برای فهرستهای آماده است. اگر نتیجه از سرور میآید، فیلتر داخلی را با shouldFilter={false} خاموش کنید و خودتان وضعیت بارگذاری، نتیجه و خالی را مدیریت کنید.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| Command Dialog | همان پالت Ctrl+K؛ حالت باز بودن را در state نگه دارید و میانبر را به آن وصل کنید. |
| Searchable Values | با value مترادفها را به آیتم اضافه کنید تا جستجوی «کاربر» هم «پروفایل» را پیدا کند. |
| Disabled Item | آیتم غیرفعال در فهرست میماند ولی انتخاب نمیشود؛ برای قابلیتهایی که هنوز فعال نیستند. |
| نتیجهٔ خالی (Empty) | جستجویی که به هیچ دستور یا صفحهای نمیخورد |
| جستجوی سرور (Loading) | پالت دستوری که نتایجش از سرور میآید، نه فهرست محلی |
دستورالعمل استفاده
حالت خالی را همیشه بگذارید
انجام بده
CommandEmpty به کاربر میگوید جستجو نتیجهای نداشت؛ بدون آن فهرست بیصدا خالی میشود و کاربر فکر میکند چیزی خراب است.
انجام نده
فهرست بدون CommandEmpty، هنگام بینتیجه بودنِ جستجو فقط یک کادر خالی است، نه توضیحی برای کاربر دیداری، نه اعلامی برای صفحهخوان.
دستهبندی نتیجهها
انجام بده
آیتمها را در گروههای عنواندار بچینید؛ کاربر با یک نگاه میفهمد هر دستور مربوط به کدام بخش است.
انجام نده
فهرست بلندِ بدون گروه، مرور بصری را سخت میکند و کاربر مجبور است همه را بخواند تا مورد درست را پیدا کند.