کاستومایز
منوی درختیBranched Menu
یه منوی تودرتو که بخشهاش مثل شاخههای درخت باز و بسته میشن و خطِ مسیر تا گزینهی انتخابشده کشیده میشه.
وابستگیها
نوع تعامل
روی عنوانِ هر بخش بزن تا شاخههاش باز یا بسته بشن؛ هر فرزندی که انتخاب شه، خطِ رنگی از تنه تا همون گزینه کشیده میشه و نشانگرِ کنارِ عنوان به سمتش میلغزه. دکمههای بخش `aria-expanded` دارن و فرزندهای بسته از مسیرِ tab بیرونان، پس با صفحهکلید و صفحهخوان هم درست کار میکنه.
پراپها
گزینههایی که میتونی به کامپوننت بدی؛ ستارهدارها اجباریاند.
itemsBranchedMenuItem[]پیشفرض: DEFAULT_ITEMSبخشها. هر بخش یه `label` و یه فهرستِ فرزند داره (`value`، `label`، `icon`)، یا خودش یه برگ با `value`ـه.
defaultOpennumber | number[]پیشفرض: 0کدوم بخشها اول باز باشن. عددِ منفی یعنی هیچکدوم.
defaultActivestringپیشفرض: ""مقدارِ انتخابشدهی اولیه. خالی بذار تا اولین فرزندِ بخشِ باز انتخاب شه.
onSelect(value, item) => voidوقتی یه فرزند یا برگ انتخاب میشه صدا زده میشه.
onToggle(index, open) => voidوقتی بخشی باز یا بسته میشه صدا زده میشه.
colorstringپیشفرض: "#f5f5f5"رنگِ جوهر. خطوط و متنِ بیحالت، آمیزههایی از همین رنگان.
نصب
۱. این آدرس رو یکبار توی components.json بذار تا shadcn مخزن فارسیفای رو بشناسه.
{
"registries": {
"@farsify": "https://farsify.ir/r/{name}.json"
}
}۲. بعد با دستورِ زیر کامپوننت رو نصب کن.
npx shadcn@latest add @farsify/branched-menuپیشنیاز: Tailwind CSS v4 و صفحهٔ راستبهچپ dir="rtl".
نمونه
"use client";
import BranchedMenu from "@/components/farsify/branched-menu";
export function DocsNav() {
return (
<BranchedMenu
defaultOpen={[0, 1]}
defaultActive="quick"
accentColor="var(--color-brand)"
items={[
{
label: "شروع کار",
children: [
{ value: "install", label: "نصب" },
{ value: "quick", label: "شروع سریع" },
{ value: "config", label: "پیکربندی" },
],
},
{
label: "کامپوننتها",
children: [
{ value: "buttons", label: "دکمهها" },
{ value: "forms", label: "فرمها" },
],
},
]}
onSelect={(value) => console.log(value)}
/>
);
}
// بخشِ تکبرگ — بدون فرزند، خودش یک گزینه است
<BranchedMenu
items={[
{ label: "راهنما", value: "help" },
{ label: "درباره", value: "about" },
]}
defaultActive="about"
/>نکتهها
- رنگها رو با متغیرِ CSS هم میتونی بدی: `accentColor="var(--color-brand)"` تا خطِ فعال با برندِ سایتت یکی شه.
- برای منوی کنارِ صفحه `defaultOpen` رو آرایه بده تا چند بخش همزمان باز باشن.
- iconِ هر فرزند یه عنصرِ Reactـه (`icon`)، پس آیکنهای پروژهی خودت رو مستقیم بده — وابستگیِ بیرونی نداره.
مجوز
کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژهی خودت نگهش دار. برای پروژههای شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسیفای رو یه جا توی پروژه نگه دار.