Disclosure Group
مجموعهای از بخشهای تاشوی (Collapsible) مستقل که باز/بستهبودنشان زیر یک state مشترک هماهنگ میشود. برخلاف Accordion، هیچ سیستم واریانتِ ظاهری (رنگ، سایه، جداکننده) ندارد: فقط منطق هماهنگسازیِ خالص است؛ اگر ظاهرِ آماده و variant لازم دارید، از Accordion با type «multiple» استفاده کنید.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/disclosure-group.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/disclosure-group.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/disclosure-group.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/disclosure-group.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import {
DisclosureGroup,
DisclosureGroupItem,
DisclosureGroupTrigger,
DisclosureGroupContent,
} from "@/components/ui/disclosure-group"
<DisclosureGroup allowsMultipleExpanded={false}>
<DisclosureGroupItem value="a">
<DisclosureGroupTrigger>عنوان بخش الف</DisclosureGroupTrigger>
<DisclosureGroupContent>محتوای بخش الف.</DisclosureGroupContent>
</DisclosureGroupItem>
</DisclosureGroup>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
هر DisclosureGroupItem داخلش یک Collapsible معمولی است که open/onOpenChange را از context گروه میگیرد، نه state داخلی خودش؛ یعنی هیچوقت این دو با هم قاطی نمیشوند.
DisclosureGroupTrigger/Content هم چیزی بیش از CollapsibleTrigger/Content با استایل پیشفرض (شورون چرخان، پدینگ، هاور) نیستند.
allowsMultipleExpanded پیشفرضش true است؛ روی false، باز شدن یک بخش بقیه را میبندد، دقیقاً معادل Accordion با type="single" و collapsible.
دسترسپذیری
- دکمهٔ هر تریگر aria-expanded و aria-controls خودکار از Collapsible دارد؛ محتوا با role ضمنیِ region از طریق id/aria-controls به تریگرش وصل است.
- چون هر Item یک Collapsible مستقل است، ناوبری Tab بین تریگرها طبیعی و خطی است: نیازی به roving-tabindex سفارشی نیست (برخلاف ListBox/Select).
مرجع API
DisclosureGroup
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| allowsMultipleExpanded | boolean | true | چند بخش همزمان باز بماند؛ روی false فقط یکی. |
| expandedKeys / defaultExpandedKeys | string[] | — | کلیدهای بازِ کنترلشده یا اولیه. |
| onExpandedChange | (keys: string[]) => void | — | فراخوانی با هر تغییرِ مجموعهٔ بازها. |
| disabled | boolean | — | غیرفعالکردن همهٔ آیتمها؛ روی هر Item هم جدا قابلoverride است. |
DisclosureGroupItem
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| value | string | — | کلید یکتای این بخش در مجموعهٔ expandedKeys. |
| disabled | boolean | — | غیرفعالکردن فقط همین بخش. |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
چند بخش همزمان باز (پیشفرض)
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
فقط یکی همزمان باز
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کنترلشده
expandedKeys/onExpandedChange برای وقتی state باید بیرون گروه هم قابل خواندن/نوشتن باشد.
باز: shipping
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
آیتم غیرفعال (Disabled)
آیتم را حذف نکنید؛ غیرفعالش کنید تا کاربر بداند این بخش وجود دارد و چرا الان بسته است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| چند بخش همزمان باز (پیشفرض) | صفحهٔ پرسشهای متداول که کاربر باید بتواند چند پاسخ را همزمان مقایسه کند |
| فقط یکی همزمان باز | تنظیمات پیشرفته که باز بودن چند بخش با هم صفحه را شلوغ میکند |
| کنترلشده | expandedKeys/onExpandedChange برای وقتی state باید بیرون گروه هم قابل خواندن/نوشتن باشد. |
| آیتم غیرفعال (Disabled) | بخشی که موقتاً در دسترس نیست |
دستورالعمل استفاده
برای FAQ و پنلهای مستقل، نه ناوبری اصلی
انجام بده
DisclosureGroup برای گروههای محتوایی مستقل (FAQ، تنظیمات پیشرفته) مناسب است.
انجام نده
برای منوی ناوبری اصلی سایت یا تبهای همتراز، Tabs یا Navigation Menu مناسبترند.