BottomNavigation

نوار ناوبری ثابتِ پایینِ صفحه در چیدمان موبایل: هر مقصد یک آیکون روی یک برچسبِ کوتاه است. برخلاف Tabs که محتوای همان صفحه را عوض می‌کند، اینجا هر آیتم معمولاً یک مسیر جداست؛ برای همین value باید از بیرون (از مسیر فعلیِ روتر) بیاید، نه از state داخلیِ خودِ کامپوننت.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API و Reka UISvelte ۵ با runes و Bits UIانگولار با signals و Angular CDK

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگی‌ها و فایل‌ها خودکار اضافه می‌شوند.

نصب سریع با لینک سخت و دیسک مشترکپکیج‌منیجر پیش‌فرض Node.jsYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.json
npx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.json
yarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.json
bunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Reka UI در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Bits UI در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Angular CDK در دست کار است.

استفاده

import {
  BottomNavigation,
  BottomNavigationItem,
} from "@/components/ui/bottom-navigation"

// value از مسیرِ فعلیِ روتر می‌آید، نه از state داخلیِ صفحه
<BottomNavigation value={activeRoute} onValueChange={navigate}>
  <BottomNavigationItem value="home" icon={<Home />} label="خانه" />
</BottomNavigation>

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Reka UI در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Bits UI در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Angular CDK در دست کار است.

ترکیب اجزا

fixed پیش‌فرض روشن است و nav را با position: fixed به پایینِ viewport می‌چسباند، به‌همراه env(safe-area-inset-bottom) برای گوشی‌های notch‌دار. در محیط مستندات (که خودش باید اسکرول کند) نمونه‌ها با fixed={false} نشان داده شده‌اند تا صفحه را نپوشانند؛ در اپ واقعی معمولاً همان پیش‌فرض true درست است.

دسترس‌پذیری

  • هر آیتم role="tab" و aria-selected دارد؛ اگر آیتم‌ها واقعاً به مسیر دیگری می‌روند (نه تغییرِ محتوای همان صفحه)، از Link با asChild استفاده کنید تا کلیک راست/باز کردن در تب جدید هم کار کند.
  • برچسبِ متنی زیر هر آیکون همیشه نمایش داده می‌شود؛ آیکونِ تنها بدون متن برای موبایل خوانا نیست.
  • برای اعلانِ نخوانده از badge استفاده کنید، نه رنگِ صرف؛ صفحه‌خوان محتوای badge را هم می‌خواند.

مرجع API

BottomNavigation

ویژگینوعپیش‌فرضتوضیح
value / defaultValue / onValueChangestring / string / (value: string) => voidمقصدِ فعال؛ کنترل‌شده یا غیرکنترل‌شده.
fixedbooleantrueبه پایینِ صفحه بچسبد (position: fixed) با فاصلهٔ safe-area.

BottomNavigationItem

ویژگینوعپیش‌فرضتوضیح
valuestringشناسهٔ یکتای مقصد.
iconReact.ReactNodeآیکونِ حالتِ عادی.
activeIconReact.ReactNodeآیکونِ حالتِ فعال؛ نبودش یعنی همان icon با رنگِ فعال.
labelReact.ReactNodeبرچسبِ کوتاهِ زیرِ آیکون.
badgeReact.ReactNodeنشانِ عددی/نقطه‌ای روی گوشهٔ آیکون.

BottomNavigationFab

ویژگینوعپیش‌فرضتوضیح
valuestringاختیاری. بدهید تا مثل بقیهٔ آیتم‌ها مقصد/وضعیتِ فعال داشته باشد؛ نبودش یعنی فقط یک کنش (باز کردن مودال) بدون state=active.
iconReact.ReactNodeآیکونِ داخل دایره (معمولاً +).
labelReact.ReactNodeبرچسبِ اختیاری زیرِ دایره.

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Reka UI در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Bits UI در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک روی Angular CDK در دست کار است.