Tag Group
فهرستی از Chipهای قابلحذف (مثل فیلترهای فعال یا برچسبهای انتخابشده) با roving-tabindex بین برچسبها و حذف با کلید Backspace/Delete.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/tag-group.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/tag-group.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/tag-group.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/tag-group.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import { TagGroup, TagGroupItem } from "@/components/ui/tag-group"
<TagGroup aria-label="برچسبها">
<TagGroupItem value="react" label="React" onRemove={handleRemove} />
<TagGroupItem value="vue" label="Vue" onRemove={handleRemove} />
</TagGroup>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
TagGroupItem خودش روی Chip سوار است و onRemove را به یک ChipCloseButton داخلی وصل میکند؛ اگر onRemove ندهید، دکمهٔ حذف اصلاً رندر نمیشود و آیتم فقط یک برچسبِ غیرقابلحذف است.
حذف واقعیِ آیتم از آرایه بر عهدهٔ کد مصرفکننده است، خودِ TagGroup state نگه نمیدارد.
دسترسپذیری
- ظرف role=list دارد و هر آیتم role=listitem؛ فقط یکی از آیتمها هر لحظه tabIndex=0 دارد (roving-tabindex).
- فلش راست/چپ (جهتآگاه) بین آیتمها میچرخد؛ Home/End به اول/آخر میپرد.
- Backspace یا Delete روی آیتمِ فوکوسشده آن را حذف میکند و فوکوس را به آیتم بعدی (یا قبلی اگر آخری بود) میبرد.
- دکمهٔ حذف خودش aria-label معنادار (شامل نام تگ) دارد.
مرجع API
TagGroup
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| children | React.ReactNode | — | چند TagGroupItem. |
TagGroupItem
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value | string | — | مقدار یکتای برچسب. |
| label | React.ReactNode | — | متن نمایشی. |
| onRemove | (value: string) => void | — | اگر بدهید دکمهٔ حذف رندر میشود. |
| disabled | boolean | false | غیرفعال کردن (بدون امکان فوکوس/حذف). |
| variant / color / size | همان پراپهای Chip | — | چون TagGroupItem روی Chip سوار است. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
بدون امکان حذف
بدون onRemove، TagGroupItem فقط یک برچسب است، بدون دکمهٔ ضربدر.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
رنگها
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
غیرفعال
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
در حال دریافت (Loading)
جای خالیِ همشکل با تگ واقعی بگذارید تا با رسیدن داده، چیدمان نپرد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| بدون امکان حذف | بدون onRemove، TagGroupItem فقط یک برچسب است، بدون دکمهٔ ضربدر. |
| رنگها | نشاندادن وضعیت هر تگ در فهرستی از موارد (پیشنویس، تأییدشده، خطا) |
| غیرفعال | تگی که در حال حذفشدن است و نباید دوباره برداشته شود |
| در حال دریافت (Loading) | برچسبهایی که از سرور میآیند |