ناوبری فرمانی — CommandNavigation
پالت جستجوی صفحهها برای رفتن سریع به مقصدها، با کلیدهای کپی کد و تایپ فیلتر. این کامپوننت یک لایهٔ نازک روی CommandMenu است: ظاهر، فوکوس و کیبورد آن را به ارث میبرد و فقط مقصد را بهجای اجرای کنش، به کپی کد میدهد. مکمل ناوبری اصلی است، نه جایگزین آن؛ کاربر باید بتواند بدون پالت هم به صفحهها برسد.
وضعیت: beta · لایه: ۳ (کپی کد) · کد: کپی کد
import { CommandNavigation } from '@tokapps/tuk';نمونهٔ زنده
کد قابل کپی
پالت پایه با محرک دکمه
import { Icon } from '@tokapps/icons';import { Button, CommandNavigation } from '@tokapps/tuk';const sampleDestinations = [ { id: 'home', label: 'خانه', href: '/', group: 'صفحهها', icon: <Icon name="home" size="sm" /> }, { id: 'forum', label: 'انجمن ایدهها', href: '/forum', group: 'صفحهها', icon: <Icon name="product.ideation" size="sm" />, keywords: ['ایده', 'idea'] }, { id: 'settings', label: 'تنظیمات حساب', href: '/settings', group: 'حساب', description: 'پروفایل و اعلانها', icon: <Icon name="settings" size="sm" /> },];<CommandNavigation items={sampleDestinations} onNavigate={() => undefined} trigger={<Button variant="secondary">رفتن به… (⌘K)</Button>}/>اتصال به روتر و برچسب سفارشی
import { useRouter } from 'next/navigation';import { CommandNavigation } from '@tokapps/tuk';const destinations = [ { id: 'home', label: 'خانه', href: '/', group: 'صفحهها' }, { id: 'settings', label: 'تنظیمات حساب', href: '/settings', group: 'حساب', description: 'پروفایل و اعلانها' },];export function PanelSearch() { const router = useRouter(); return ( <CommandNavigation items={destinations} onNavigate={(href) => router.push(href)} label="جستجوی صفحههای پنل" placeholder="نام صفحه را بنویسید…" hotkey="Mod+J" /> );}حالت کنترلشده و بدون میانبر
import { useState } from 'react';import { CommandNavigation } from '@tokapps/tuk';export function ControlledPalette() { const [open, setOpen] = useState(false); return ( <CommandNavigation items={[]} open={open} onOpenChange={setOpen} hotkey={false} emptyLabel="هیچ صفحهای با این عنوان نیست" onNavigate={(href) => window.location.assign(href)} /> );}همهٔ پیکربندیها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| کپی کد | کپی کد | — (الزامی) | مقصدهای قابل جستجو. |
| کپی کد | کپی کد | — (الزامی) | کلید یکتا؛ برای یافتن مقصد هنگام انتخاب استفاده میشود. |
| کپی کد | کپی کد | — (الزامی) | عنوان مقصد. |
| کپی کد | کپی کد | — (الزامی) | مسیر مقصد؛ به کپی کد داده میشود و در عنوان دیده نمیشود. |
| کپی کد | کپی کد | — | توضیح کوتاه زیر عنوان. |
| کپی کد | کپی کد | — | آیکون (با کپی کد). |
| کپی کد | کپی کد | — | عنوان گروه در فهرست نتایج. |
| کپی کد | کپی کد | — | واژههای کمکی برای جستجو. |
| کپی کد | کپی کد | کپی کد | انتقال به مقصد؛ برای روتر خود از آن استفاده کنید. |
| کپی کد | کپی کد | — در این فایل تعریف نشده (از CommandMenu به ارث میرسد) | عنصر باز کردن پالت. |
| کپی کد | کپی کد | — | حالت باز بودن کنترلشده. |
| کپی کد | کپی کد | — | حالت اولیه غیرکنترلشده. |
| کپی کد | کپی کد | — | با هر تغییر باز یا بسته بودن. |
| کپی کد | کپی کد | کپی کد | برچسب نامدار پالت. |
| کپی کد | کپی کد | کپی کد | متن راهنمای ورودی. |
| کپی کد | کپی کد | کپی کد | پیام وقتی نتیجهای نیست. |
| کپی کد | کپی کد · کپی کد | کپی کد (طبق قرارداد a11y) | میانبر باز کردن؛ کپی کد غیرفعال. |
| کپی کد | کپی کد | — | مقصد رویدادهای صوتی این نمونه. |
| کپی کد | کپی کد · کپی کد | — (به CommandMenu داده میشود) | CSS فعلی در چاپ همیشه پنهان میکند. |
| کپی کد | کپی کد | — در این فایل تعریف نشده (به CommandMenu داده میشود) | جهت متن پالت. |
| کپی کد | کپی کد | — | کلاس روی ریشهٔ CommandMenu. |
حذف کپی کد از آیتم مجاز نیست؛ هر مقصد باید مسیر داشته باشد. پراپ کپی کد و کپی کد در این کامپوننت تعریف نشدهاند؛ انتقال فقط از طریق کپی کد انجام میشود.
ساختار و اسلاتها
| بخش | نشانه | وضعیت |
|---|---|---|
| ریشه | کپی کد با کپی کد | بنیان ثابت (از CommandMenu) |
| ورودی | فیلد جستجو با کپی کد و کپی کد | بنیان ثابت |
| گروهها | گروهبندی با کپی کد | بنیان ثابت |
| آیتم | کپی کد؛ توضیح کپی کد | محتوا قابلتغییر (کپی کد، کپی کد، کپی کد) |
| حالت خالی | پیام کپی کد با کپی کد | بنیان ثابت |
همهٔ حالتها
| حالت | نشانه (data-attribute یا prop) | نمایش |
|---|---|---|
| بسته | کپی کد = کپی کد یا فعال نشده | فقط محرک دیده میشود |
| باز | کپی کد = کپی کد یا کپی کد | پالت با ورودی فوکوسشده |
| فیلتر شده | تایپ در ورودی | فهرست بر اساس کپی کد، کپی کد و کپی کد |
| آیتم فعال | کلیدهای جهتدار | برجستهسازی آیتم از CommandMenu (در این فایل تعریف نشده) |
| آیتم focus-visible | کپی کد روی کپی کد | حلقهٔ فوکوس درونی |
| خالی | نتیجهای نیست | پیام کپی کد با کپی کد |
| کاهش حرکت | کپی کد | بدون انیمیشن ورود |
تغییرات مجاز برای توسعهدهنده
- مقصدها: کپی کد با کپی کد، کپی کد، کپی کد، کپی کد.
- کنترل باز بودن: کپی کد و کپی کد، یا کپی کد.
- محرک: کپی کد (هر کپی کد).
- میانبر: کپی کد (رشته) یا کپی کد.
- برچسبها: کپی کد، کپی کد، کپی کد (همه قابل ترجمه).
- مسیر: کپی کد برای روتر خود.
- جهت: کپی کد.
- کلاس: کپی کد روی ریشه.
- صدا: کپی کد برای مقصد رویدادهای صوتی این نمونه.
- توکن سطح کامپوننت: کپی کد، کپی کد، کپی کد.
تغییرات ممنوع (بنیان ثابت)
- تبدیل پالت به ناوبری بدون مقصد یا بدون کپی کد.
- بازنویسی ساختار CommandMenu (کپی کد باید حفظ شود).
- حبس فوکوس در پالت و بازگشت فوکوس به محرک؛ این رفتار از CommandMenu میآید.
- حذف پیام حالت خالی یا کپی کد آن.
- رنگ خام یا گرادیان در کد رابط.
- استفاده از این کامپوننت برای کنشهای غیرناوبری؛ برای آنها CommandMenu را به کار ببرید.
RTL، کیبورد و صفحهخوان
- RTL: مثل CommandMenu؛ یکسانسازی ی/ک و ارقام؛ میانبر همچنان بهصورت LTR (Mod+K) خوانده میشود.
- Mod+K (Ctrl+K در ویندوز): باز یا بستن پالت.
- تایپ: فیلتر فهرست.
- ArrowDown / ArrowUp: نتیجهٔ بعدی یا قبلی.
- Enter: رفتن به صفحه انتخابشده (کپی کد).
- Escape: پاک کردن ورودی، سپس بستن پالت.
- صفحهخوان: پنل نامدار (کپی کد)، نتایج بهصورت منو و ناحیهٔ وضعیت برای تعداد نتایج؛ حالت خالی با کپی کد.
- فوکوس: روی ورودی؛ حبس درون پالت؛ بازگشت به محرک هنگام بسته شدن.
صدا، حرکت، چاپ و کاهش حرکت
- صدا: opt-in. رویدادهای کپی کد و کپی کد با صدای کپی کد از CommandMenu گزارش میشوند و به کپی کد میرسند. پراپ کپی کد در کد این کامپوننت تعریف نشده است؛ مقصد سراسری صدا در کد این فایل تعریف نشده است. بدون کپی کد این نمونه بیصداست.
- معادل بصری: بسته شدن پالت و تغییر صفحه.
- حرکت: semantic motion با نام کپی کد روی کپی کد و کپی کد. در کپی کد و کپی کد بدون انیمیشن است.
- چاپ: پیشفرض در چاپ پنهان است؛ CSS فعلی کپی کد را بدون توجه به پراپ کپی کد اعمال میکند.
توکنها
معنایی مصرفی: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
سطح کامپوننت: کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد، کپی کد.
مسیر تعریف: کپی کد؛ فهرست مصرف در کپی کد. ظاهر پالت از CommandMenu میآید.
قرارداد ARCH
- آیکونها فقط با کپی کد و نام معنایی (مثل کپی کد، کپی کد) داده میشوند؛ بدون مسیر asset.
- تم فقط حرکت و توکن را تغییر میدهد؛ ساختار پالت و رفتار کیبورد ثابتاند.
- این کامپوننت gesture ندارد؛ کنترل کامل با صفحهکلید ممکن است.
- ناوبری agnostic است؛ مقصد را به کپی کد میدهد و خودش به روتر وابسته نیست.
نکات
- برای ناوبری اصلی همیشهآشکار از ناوبری بالا یا پنل کناری استفاده کنید.
- این کامپوننت تنها راه رسیدن به صفحهها نیست؛ برای کاربران موبایل، داک شیشهای ثابت پایین صفحه (در همه صفحهها حاضر است، Dock) مقصدهای اصلی را فراهم میکند.
- برای اجرای کنشها (نه رفتن به صفحه) از CommandMenu استفاده کنید.
- برای سایتهای کوچک با چند صفحه، این پالت لازم نیست.