آکاردئون — Accordion
آکاردئون برای نمایش محتوای ثانویه یا مرحلهبندیشده در پنلهای تاشو استفاده میشود؛ مثل پرسشهای متداول یا مراحل یک راهنما. منطق باز و بسته شدن، کیبورد و وضعیت کپی کد از react-aria (کپی کد و کپی کد) میآید و ظاهر فقط با صفتهای کپی کد و توکن تعیین میشود. ساختار heading و دکمهٔ trigger ثابت است؛ سطح heading با کپی کد با ساختار صفحه همخوان میشود.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { Accordion, AccordionItem } from '@tokapps/tuk';نمونهٔ زنده
از منوی «ایدهٔ جدید» فرم را پر کنید.
کد قابل کپی
تکباز با یک گزینهٔ غیرفعال
import { Accordion, AccordionItem } from '@tokapps/tuk';export function FaqSingle() { return ( <Accordion defaultExpandedKeys={['a']}> <AccordionItem id="a" title="چگونه ایده ثبت کنم؟"> از منوی «ایدهٔ جدید» فرم را پر کنید. </AccordionItem> <AccordionItem id="b" title="هزینهٔ ثبت چقدر است؟"> ثبت ایده رایگان است. </AccordionItem> <AccordionItem id="c" title="غیرفعال" isDisabled> در دسترس نیست. </AccordionItem> </Accordion> );}چندباز با سطح heading دلخواه
import { Accordion, AccordionItem } from '@tokapps/tuk';export function ProcessSteps() { return ( <Accordion allowsMultiple print="show"> <AccordionItem id="1" title="مرحلهٔ ۱: ثبت" headingLevel={2}> توضیح مرحلهٔ اول. </AccordionItem> <AccordionItem id="2" title="مرحلهٔ ۲: بررسی" headingLevel={2}> توضیح مرحلهٔ دوم. </AccordionItem> </Accordion> );}کنترلشده با گزینهٔ غیرفعال
import { useState } from 'react';import { Accordion, AccordionItem } from '@tokapps/tuk';export function ControlledAccordion() { const [open, setOpen] = useState<string[]>(['shipping']); return ( <Accordion allowsMultiple expandedKeys={open} onExpandedChange={(keys) => setOpen([...keys].map(String))} > <AccordionItem id="shipping" title="زمان تحویل"> ارسال ظرف ۲ تا ۵ روز کاری. </AccordionItem> <AccordionItem id="refund" title="بازگشت وجه" isDisabled> این بخش در حال حاضر در دسترس نیست. </AccordionItem> </Accordion> );}همهٔ پیکربندیها
کپی کد
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — | آیتمهای کپی کد. |
| کپی کد | کپی کد | کپی کد | چند پنل همزمان باز بمانند. پیشفرض تکباز است. |
| کپی کد | کپی کد | — | کلیدهای باز در بار اول (حالت غیرکنترلی). |
| کپی کد | کپی کد | — | کلیدهای باز (حالت کنترلشده). |
| کپی کد | کپی کد | — | با هر تغییر باز یا بسته شدن صدا زده میشود. |
| کپی کد | کپی کد | — | کل گروه غیرفعال میشود. |
| کپی کد | کپی کد · کپی کد | کپی کد | کپی کد کل آکاردئون را در چاپ پنهان میکند. |
| کپی کد | کپی کد | — | کلاس روی ریشه. |
کپی کد
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — (الزامی) | شناسهٔ یکتا داخل گروه. |
| کپی کد | کپی کد | — (الزامی) | عنوان قابلکلیک (trigger). |
| کپی کد | کپی کد | — | محتوای پنل. |
| کپی کد | کپی کد · کپی کد · کپی کد · کپی کد · کپی کد | کپی کد | سطح heading عنوان؛ بر اساس ساختار صفحه انتخاب کنید. |
| کپی کد | کپی کد | — | همین آیتم غیرفعال میشود. |
| کپی کد | کپی کد | — | کلاس روی ریشهٔ آیتم. |
تمام پراپهای بالا در کپی کد تعریف شدهاند. در کد، پراپ کپی کد یا کپی کد تعریف نشده است.
ساختار و اسلاتها
ترتیب DOM (با کپی کد و کپی کد):
Accordion data-tds="accordion" [data-print]└─ AccordionItem data-tds="accordion-item" [data-expanded] ├─ heading (h با headingLevel) data-part="heading" │ └─ button (trigger) data-part="trigger" │ ├─ span data-part="title" │ └─ Icon «expand» data-part="chevron" └─ DisclosurePanel data-part="panel" └─ div data-part="content"بخش ثابت (بنیان): ترتیب بالا، heading واقعی، دکمهٔ trigger و پنل. بخش قابلتغییر: کپی کد روی ریشه و آیتم، محتوای کپی کد و کپی کد، و توکنهای کپی کد.
همهٔ حالتها
| حالت | نشانه | نمایش |
|---|---|---|
| بسته (پیشفرض) | کپی کد روی trigger | فلش در حالت عادی؛ محتوای پنل از درخت دسترسی حذف میشود. |
| باز | کپی کد روی آیتم و کپی کد | فلش ۱۸۰ درجه میچرخد و پنل نمایان است. |
| hover | کپی کد روی trigger | پسزمینه با کپی کد. |
| focus-visible | کپی کد روی trigger | حلقهٔ فوکوس داخلی با کپی کد. |
| غیرفعال | کپی کد یا کپی کد روی trigger (از کپی کد) | کدری با کپی کد و نشانگر کپی کد. |
| چاپ | کپی کد | همهٔ پنلها باز و فلشها پنهان. |
| چاپ پنهان | کپی کد روی ریشه | کل آکاردئون در چاپ پنهان. |
در کد حالت خطا (کپی کد) یا بارگذاری (کپی کد) تعریف نشده است.
تغییرات مجاز برای توسعهدهنده
- تعداد پنلهای باز: تکباز (پیشفرض) یا چندباز با کپی کد.
- مدیریت وضعیت: غیرکنترلی با کپی کد یا کنترلشده با کپی کد و کپی کد.
- سطح heading: کپی کد از کپی کد تا کپی کد.
- غیرفعالسازی: روی کل گروه با کپی کد در کپی کد یا روی یک آیتم با کپی کد در کپی کد.
- چاپ: کپی کد (پیشفرض) یا کپی کد.
- نقاط توسعه: کپی کد روی ریشه و آیتم؛ توکنهای سطح کامپوننت کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد و کپی کد؛ محتوای متنی از طریق پراپهای کپی کد و کپی کد؛ handler کپی کد.
- variant و size: در کد تعریف نشدهاند. اندازهٔ ظاهری با توکنهای بالا تنظیم میشود.
تغییرات ممنوع (بنیان ثابت)
- trigger باید داخل heading واقعی باشد؛ تبدیل heading به کپی کد یا حذف آن ممنوع است.
- نقشها و کپی کد فقط از react-aria میآیند؛ دستکاری دستی آنها ممنوع است.
- حداقل ارتفاع trigger برابر کپی کد است؛ کوچککردن یا حذفش ممنوع است.
- کیبورد: کپی کد و کپی کد باید پنل را باز و بسته کنند و ترتیب کپی کد حفظ شود.
- پنل بسته باید از درخت دسترسی حذف شود.
- رنگ خام، گرادیان یا وابستهکردن وضعیت فقط به رنگ ممنوع است؛ جهت فلش و کپی کد وضعیت را میرسانند.
- در کاهش حرکت گذار باید ۱ms شود؛ حذف این قاعده ممنوع است.
RTL، کیبورد و صفحهخوان
- فلش در لبهٔ انتهایی خط قرار میگیرد (در RTL سمت چپ)؛ متن با کپی کد تراز میشود.
- کپی کد و کپی کد: باز و بسته کردن پنل. کپی کد: حرکت بین triggerها و محتوای باز.
- کلیدهای کپی کد و کپی کد در قرارداد دسترسیپذیری «در صورت پیادهسازی مرورگر» ثبت شدهاند و در کد handler اضافهای ندارند؛ ترتیب کپی کد معیار است.
- نام trigger از متن عنوان گرفته میشود. سطح heading را با کپی کد مطابق ساختار صفحه تنظیم کنید.
- صفحهخوان وضعیت باز یا بسته را اعلام میکند؛ پنل بسته از درخت دسترسی حذف میشود.
صدا، حرکت، چاپ و کاهش حرکت
- صدا: در کد پراپ کپی کد تعریف نشده و کامپوننت بیصداست. معادل بصری آن چرخش فلش است.
- حرکت: چرخش فلش (کپی کد) و رنگ پسزمینهٔ hover با نام معنایی کپی کد (کپی کد). در کپی کد یا سوییچ کاهش حرکت، زمان گذار ۱ms میشود.
- چاپ: پیشفرض کپی کد؛ رنگ تکرنگ، همهٔ پنلها باز، فلش پنهان، کپی کد روی ریشه.
توکنها
- معنایی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
- کامپوننتی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
- تایپوگرافی: کپی کد، کپی کد، کپی کد.
- کنترل: کپی کد، کپی کد، کپی کد، کپی کد.
- فایل توکن: کپی کد؛ فهرست مصرفی در کپی کد.
قرارداد ARCH
- آیکون فلش فقط از طریق کامپوننت کپی کد با نام معنایی کپی کد رسم میشود؛ مسیر فایل آیکون در کد مستند نمیشود.
- تم فقط حرکت و توکنها را تغییر میدهد؛ ساختار DOM و ARIA ثابت میماند.
- Gesture ندارد؛ تعامل فقط با ماوس، لمس و کیبورد است.