دکمه تقسیمی — SplitButton
کپی کد یک کنش اصلی را کنار دکمهٔ منو قرار میدهد. کنش اصلی با کپی کد اجرا میشود و دکمهٔ منو گزینههای جانبی را نشان میدهد، مثل «ذخیره» در کنار «خروجی PDF / CSV». منو با React Aria ساخته شده و کلیدهای فلش، Home و End، Escape و بازگشت فوکوس را دارد. ساختار دودکمهای و منو ثابت است؛ هویت فقط توکن و حرکت را عوض میکند.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { SplitButton } from '@tokapps/tuk';نمونهٔ زنده
کد قابل کپی
کنش اصلی با گزینههای خروجی
import { SplitButton } from '@tokapps/tuk';import { Icon } from '@tokapps/icons';// exportAs و copyLink را خودتان پیادهسازی کنید.declare function exportAs(format: 'pdf' | 'csv'): void;declare function copyLink(): void;export function ExportMenu() { return ( <SplitButton menuLabel="گزینههای بیشتر" onPress={() => exportAs('pdf')} options={[ { id: 'pdf', label: 'خروجی PDF', icon: <Icon name="download" size="sm" />, onAction: () => exportAs('pdf') }, { id: 'csv', label: 'خروجی CSV', icon: <Icon name="download" size="sm" />, onAction: () => exportAs('csv') }, { id: 'copy', label: 'کپی پیوند', icon: <Icon name="copy" size="sm" />, onAction: copyLink }, ]} > ذخیره </SplitButton> );}واریانت ثانویه، اندازه و آیکون
import { SplitButton } from '@tokapps/tuk';import { Icon } from '@tokapps/icons';export function SendMenu({ onSend, onSchedule }: { onSend: () => void; onSchedule: () => void }) { return ( <SplitButton variant="secondary" size="lg" icon={<Icon name="send" size="sm" mirror />} menuLabel="زمانبندی ارسال" onPress={onSend} options={[{ id: 'later', label: 'زمانبندی', onAction: onSchedule }]} > ارسال </SplitButton> );}غیرفعال و گزینهٔ غیرفعال
import { SplitButton } from '@tokapps/tuk';export function LockedSave() { return ( <SplitButton isDisabled menuLabel="گزینههای بیشتر" options={[ { id: 'pdf', label: 'خروجی PDF', onAction: () => undefined }, { id: 'csv', label: 'خروجی CSV', disabled: true, onAction: () => undefined }, ]} > ذخیره </SplitButton> );}همهٔ پیکربندیها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — (الزامی) | برچسب کنش اصلی. |
| کپی کد | کپی کد | — | آیکون کنش اصلی. |
| کپی کد | کپی کد | — (الزامی) | گزینههای منو. هر گزینه: کپی کد (الزامی)، کپی کد (الزامی، کپی کد)، کپی کد، کپی کد، کپی کد. |
| کپی کد | کپی کد | — | کنش اصلی؛ با کلیک روی بخش اصلی اجرا میشود. |
| کپی کد | کپی کد | — (الزامی) | نام دسترسی دکمهٔ باز کردن منو، مثلاً «گزینههای بیشتر». |
| کپی کد | کپی کد · کپی کد | کپی کد | کپی کد پسزمینهٔ کنش دارد؛ کپی کد پسزمینهٔ سطح. |
| کپی کد | کپی کد · کپی کد · کپی کد | کپی کد | ارتفاع هر دو بخش از کپی کد. |
| کپی کد | کپی کد | کپی کد | هر دو بخش را غیرفعال و منو را بسته نگه میدارد. |
| کپی کد | رویداد کپی کد · کپی کد | کپی کد | رویداد صوتی کنش اصلی. باز شدن منو بیصداست. |
| کپی کد | کپی کد | — | مقصد اختصاصی صدا برای همین نمونه. |
| کپی کد | کپی کد · کپی کد | کپی کد | کپی کد یعنی در چاپ پنهان. |
| کپی کد | کپی کد | — | کلاس روی ریشه، برای چیدمان. |
ساختار و اسلاتها
div[data-tds="split-button"][data-variant][data-size][data-print][data-disabled]? ├─ button[data-part="main"] کنش اصلی (icon + children) └─ button[data-part="toggle"] دکمهٔ منو، aria-label = menuLabel، aria-expanded └─ (پورتال) div[data-tds="split-button-menu"] └─ Menu (role=menu) └─ div[data-tds="split-button-item"] × N- ریشه یک کپی کد است که دو دکمهٔ بومی را در خود دارد؛ منو در پورتال باز میشود.
- کپی کد و کپی کد بنیان ثابتاند؛ کپی کد و کپی کد هم از بنیاناند.
- محتوای کنش اصلی، آیکونها و برچسب گزینهها قابلتغییرند؛ ترتیب دو بخش ثابت است.
همهٔ حالتها
| حالت | نشانه | نمایش |
|---|---|---|
| پیشفرض | واریانت و اندازه | دو بخش کنار هم با جداکنندهٔ کپی کد |
| hover | کپی کد روی هر بخش | کپی کد: کپی کد؛ کپی کد: کپی کد |
| pressed | کپی کد روی هر بخش | مقیاس کپی کد |
| focus-visible | کپی کد روی هر بخش | حلقهٔ فوکوس درونتراز با کپی کد |
| menu-open | کپی کد روی دکمهٔ منو | منو در پورتال باز است |
| disabled | کپی کد روی ریشه و کپی کد روی هر دو بخش | کدری کپی کد؛ کپی کد |
| گزینهٔ focused | کپی کد روی آیتم | پسزمینهٔ کپی کد |
| گزینهٔ disabled | کپی کد روی آیتم | کدری و کپی کد |
| کپی کد | در کپی کد پنهان |
تغییرات مجاز برای توسعهدهنده
- واریانت: کپی کد، کپی کد.
- اندازه: کپی کد، کپی کد، کپی کد.
- آیکون: کپی کد برای کنش اصلی؛ کپی کد جدا برای هر گزینه.
- گزینهها: تعداد و محتوا از کپی کد؛ هر گزینه کپی کد و کپی کد دارد.
- وضعیت: کپی کد برای کل کامپوننت.
- صدا: کپی کد و کپی کد؛ پیشفرض opt-in است.
- چاپ: کپی کد اگر باید روی کاغذ بماند.
- نقاط توسعه: کپی کد، کپی کد (متن دسترسی منو) و برچسب گزینهها (کپی کد). متن منو از این پراپها میآید؛ کامپوننت متن داخلی ندارد.
- توکن در سطح کامپوننت: کپی کد (شعاع، جداکننده، زمان گذار، کدری، ابعاد و سایهٔ منو و آیتمها) در کپی کد.
تغییرات ممنوع (بنیان ثابت)
- ساختار دو دکمهای با کپی کد و کپی کد. دکمهٔ منو کنار کنش اصلی و منو با React Aria میماند.
- دکمهٔ منو بدون کپی کد نیست؛ نام دسترسی الزامی است.
- رفتار کیبورد منو: فلشها، Home و End، Escape و بازگشت فوکوس به دکمهٔ منو (React Aria).
- هر دو بخش همزمان غیرفعال میشوند؛ منو در حالت غیرفعال باز نمیشود.
- رنگ خام یا گرادیان. رنگ از توکن معنایی میآید.
- حرکت در کپی کد: بدون حرکت، فقط تغییر رنگ.
- هدف لمسی: هر بخش باید به اندازهٔ کافی بزرگ باشد. اندازهٔ کپی کد از کپی کد میآید؛ در موبایل کپی کد یا کپی کد بدهید.
RTL، کیبورد و صفحهخوان
- RTL: منو با کپی کد (منطقی) باز میشود و در جهت خوانش قرار میگیرد. ترتیب کلیدهای فلش در RTL معکوس است.
- کیبورد: کپی کد بین کنش اصلی و دکمهٔ منو. کپی کد یا کپی کد کنش را اجرا یا منو را باز میکند. در منو کپی کد و کپی کد حرکت میکنند، کپی کد و کپی کد اولین و آخرین گزینه را فوکوس میکنند و کپی کد منو را میبندد و فوکوس را به دکمهٔ منو برمیگرداند.
- فوکوس: حلقهٔ فوکوس روی هر دو بخش و هر آیتم مرئی است؛ کنتراست حداقل ۳:۱.
- صفحهخوان: کنش اصلی از متن خودش نام میگیرد. دکمهٔ منو از کپی کد نام میگیرد و کپی کد را اعلام میکند. گزینهها با کپی کد (برچسب متنی) خوانده میشوند.
صدا، حرکت، چاپ و کاهش حرکت
- صدا: پیشفرض کپی کد و opt-in است. فقط کنش اصلی صدا دارد؛ باز شدن منو بیصداست. معادل بصری: نشانگر کپی کد و فوکوس.
- حرکت: فشردن با کپی کد و تغییر رنگ با کپی کد. باز شدن منو همان حرکت پاپاور (کپی کد) را دارد.
- کاهش حرکت: بدون حرکت، فقط تغییر رنگ.
- چاپ: پیشفرض کپی کد است؛ کنش تعاملی روی کاغذ معنا ندارد.
توکنها
- معنایی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
- کامپوننتی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد (حداقل عرض، شعاع، فاصله، سایه)، کپی کد (ارتفاع، فاصلهها، گپ).
- مشترک: کپی کد برای گپ، فونت و مقیاس فشردن.
- مسیر: مقدارها در کپی کد؛ فهرست مصرفی در کپی کد.
قرارداد ARCH
- آیکون فقط با کپی کد و نام معنایی داده میشود؛ مسیر فایل تصویری در کد نمیآید.
- تم فقط حرکت و توکن را عوض میکند؛ ساختار دو دکمهای، منو و رفتار کیبورد ثابتاند.
- gesture ندارد؛ معادل کیبوردی فلشها و کپی کد است.
نکات
- برای کنش تکی بدون گزینه از Button استفاده کنید.
- برای منوی زمینهای روی یک عنصر از ContextMenu استفاده کنید.
- برای انتخاب بین گزینههای هموزن بدون کنش اصلی، از Select استفاده کنید.
- برای جستجو در تعداد زیاد گزینه از CommandMenu استفاده کنید.