منوی کشویی (Dropdown Menu)
نمایش منو برای کاربر شامل مجموعهای از اقدامات یا عملکردها که با کلیک روی دکمه فعال میشود
نصب (Installation)
1npx @quark-lab/rad-ui add dropdown-menuنمونهها (Examples)
استفاده پایه (Basic)
منوی ساده با گروهبندی و جداکننده
مشاهده کد
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuGroup,
6 DropdownMenuItem,
7 DropdownMenuLabel,
8 DropdownMenuSeparator,
9 DropdownMenuTrigger,
10} from "@/components/ui/dropdown-menu";
11
12export default function BasicExample() {
13 return (
14 <DropdownMenu>
15 <DropdownMenuTrigger asChild>
16 <Button variant="outline">باز کردن</Button>
17 </DropdownMenuTrigger>
18 <DropdownMenuContent>
19 <DropdownMenuGroup>
20 <DropdownMenuLabel>حساب کاربری من</DropdownMenuLabel>
21 <DropdownMenuItem>پروفایل</DropdownMenuItem>
22 <DropdownMenuItem>صورتحساب</DropdownMenuItem>
23 </DropdownMenuGroup>
24 <DropdownMenuSeparator />
25 <DropdownMenuGroup>
26 <DropdownMenuItem>تیم</DropdownMenuItem>
27 <DropdownMenuItem>اشتراک</DropdownMenuItem>
28 </DropdownMenuGroup>
29 </DropdownMenuContent>
30 </DropdownMenu>
31 );
32}زیرمنو (Submenu)
استفاده از DropdownMenuSub برای ایجاد زیرمنوهای تودرتو
مشاهده کد
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuItem,
6 DropdownMenuSub,
7 DropdownMenuSubContent,
8 DropdownMenuSubTrigger,
9 DropdownMenuTrigger,
10} from "@/components/ui/dropdown-menu";
11
12export default function SubmenuExample() {
13 return (
14 <DropdownMenu>
15 <DropdownMenuTrigger asChild>
16 <Button variant="outline">باز کردن</Button>
17 </DropdownMenuTrigger>
18 <DropdownMenuContent>
19 <DropdownMenuItem>پروفایل</DropdownMenuItem>
20 <DropdownMenuItem>صورتحساب</DropdownMenuItem>
21 <DropdownMenuSub>
22 <DropdownMenuSubTrigger>زیرمنو</DropdownMenuSubTrigger>
23 <DropdownMenuSubContent>
24 <DropdownMenuItem>آیتم زیرمنو ۱</DropdownMenuItem>
25 <DropdownMenuItem>آیتم زیرمنو ۲</DropdownMenuItem>
26 </DropdownMenuSubContent>
27 </DropdownMenuSub>
28 <DropdownMenuItem>تنظیمات</DropdownMenuItem>
29 </DropdownMenuContent>
30 </DropdownMenu>
31 );
32}کلیدهای میانبر (Shortcuts)
اضافه کردن DropdownMenuShortcut برای نمایش راهنمای کیبورد
مشاهده کد
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuItem,
6 DropdownMenuShortcut,
7 DropdownMenuTrigger,
8} from "@/components/ui/dropdown-menu";
9
10export default function ShortcutsExample() {
11 return (
12 <DropdownMenu>
13 <DropdownMenuTrigger asChild>
14 <Button variant="outline">باز کردن</Button>
15 </DropdownMenuTrigger>
16 <DropdownMenuContent>
17 <DropdownMenuItem>
18 پروفایل
19 <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
20 </DropdownMenuItem>
21 <DropdownMenuItem>
22 صورتحساب
23 <DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
24 </DropdownMenuItem>
25 <DropdownMenuItem>
26 تنظیمات
27 <DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
28 </DropdownMenuItem>
29 </DropdownMenuContent>
30 </DropdownMenu>
31 );
32}آیکونها (Icons)
ترکیب آیکونها با برچسبها برای اسکن سریع
مشاهده کد
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuItem,
6 DropdownMenuTrigger,
7} from "@/components/ui/dropdown-menu";
8import { User, CreditCard, Settings, LogOut } from "lucide-react";
9
10export default function IconsExample() {
11 return (
12 <DropdownMenu>
13 <DropdownMenuTrigger asChild>
14 <Button variant="outline">باز کردن</Button>
15 </DropdownMenuTrigger>
16 <DropdownMenuContent>
17 <DropdownMenuItem>
18 <User className="me-2 h-4 w-4" />
19 <span>پروفایل</span>
20 </DropdownMenuItem>
21 <DropdownMenuItem>
22 <CreditCard className="me-2 h-4 w-4" />
23 <span>صورتحساب</span>
24 </DropdownMenuItem>
25 <DropdownMenuItem>
26 <Settings className="me-2 h-4 w-4" />
27 <span>تنظیمات</span>
28 </DropdownMenuItem>
29 <DropdownMenuItem>
30 <LogOut className="me-2 h-4 w-4" />
31 <span>خروج</span>
32 </DropdownMenuItem>
33 </DropdownMenuContent>
34 </DropdownMenu>
35 );
36}چکباکسها (Checkboxes)
استفاده از DropdownMenuCheckboxItem برای گزینههای قابل تغییر
مشاهده کد
1"use client";
2
3import * as React from "react";
4import { Button } from "@/components/ui/button";
5import {
6 DropdownMenu,
7 DropdownMenuCheckboxItem,
8 DropdownMenuContent,
9 DropdownMenuLabel,
10 DropdownMenuSeparator,
11 DropdownMenuTrigger,
12} from "@/components/ui/dropdown-menu";
13
14export default function CheckboxesExample() {
15 const [showStatusBar, setShowStatusBar] = React.useState(true);
16 const [showActivityBar, setShowActivityBar] = React.useState(false);
17 const [showPanel, setShowPanel] = React.useState(false);
18
19 return (
20 <DropdownMenu>
21 <DropdownMenuTrigger asChild>
22 <Button variant="outline">باز کردن</Button>
23 </DropdownMenuTrigger>
24 <DropdownMenuContent>
25 <DropdownMenuLabel>نمایش</DropdownMenuLabel>
26 <DropdownMenuSeparator />
27 <DropdownMenuCheckboxItem
28 checked={showStatusBar}
29 onCheckedChange={setShowStatusBar}
30 >
31 نوار وضعیت
32 </DropdownMenuCheckboxItem>
33 <DropdownMenuCheckboxItem
34 checked={showActivityBar}
35 onCheckedChange={setShowActivityBar}
36 >
37 نوار فعالیت
38 </DropdownMenuCheckboxItem>
39 <DropdownMenuCheckboxItem
40 checked={showPanel}
41 onCheckedChange={setShowPanel}
42 >
43 پنل
44 </DropdownMenuCheckboxItem>
45 </DropdownMenuContent>
46 </DropdownMenu>
47 );
48}چکباکس با آیکون (Checkbox Icons)
اضافه کردن آیکون به آیتمهای checkbox
مشاهده کد
1"use client";
2
3import * as React from "react";
4import { Button } from "@/components/ui/button";
5import {
6 DropdownMenu,
7 DropdownMenuCheckboxItem,
8 DropdownMenuContent,
9 DropdownMenuLabel,
10 DropdownMenuSeparator,
11 DropdownMenuTrigger,
12} from "@/components/ui/dropdown-menu";
13import { Bell, Mail, MessageSquare } from "lucide-react";
14
15export default function CheckboxIconsExample() {
16 const [notifications, setNotifications] = React.useState(true);
17 const [emails, setEmails] = React.useState(false);
18 const [messages, setMessages] = React.useState(true);
19
20 return (
21 <DropdownMenu>
22 <DropdownMenuTrigger asChild>
23 <Button variant="outline">اعلانها</Button>
24 </DropdownMenuTrigger>
25 <DropdownMenuContent>
26 <DropdownMenuLabel>تنظیمات اعلان</DropdownMenuLabel>
27 <DropdownMenuSeparator />
28 <DropdownMenuCheckboxItem
29 checked={notifications}
30 onCheckedChange={setNotifications}
31 >
32 <Bell className="me-2 h-4 w-4" />
33 <span>اعلانها</span>
34 </DropdownMenuCheckboxItem>
35 <DropdownMenuCheckboxItem
36 checked={emails}
37 onCheckedChange={setEmails}
38 >
39 <Mail className="me-2 h-4 w-4" />
40 <span>ایمیلها</span>
41 </DropdownMenuCheckboxItem>
42 <DropdownMenuCheckboxItem
43 checked={messages}
44 onCheckedChange={setMessages}
45 >
46 <MessageSquare className="me-2 h-4 w-4" />
47 <span>پیامها</span>
48 </DropdownMenuCheckboxItem>
49 </DropdownMenuContent>
50 </DropdownMenu>
51 );
52}گروه رادیویی (Radio Group)
استفاده از DropdownMenuRadioGroup برای انتخابهای انحصاری
مشاهده کد
1"use client";
2
3import * as React from "react";
4import { Button } from "@/components/ui/button";
5import {
6 DropdownMenu,
7 DropdownMenuContent,
8 DropdownMenuLabel,
9 DropdownMenuRadioGroup,
10 DropdownMenuRadioItem,
11 DropdownMenuSeparator,
12 DropdownMenuTrigger,
13} from "@/components/ui/dropdown-menu";
14
15export default function RadioGroupExample() {
16 const [position, setPosition] = React.useState("bottom");
17
18 return (
19 <DropdownMenu>
20 <DropdownMenuTrigger asChild>
21 <Button variant="outline">باز کردن</Button>
22 </DropdownMenuTrigger>
23 <DropdownMenuContent>
24 <DropdownMenuLabel>موقعیت پنل</DropdownMenuLabel>
25 <DropdownMenuSeparator />
26 <DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
27 <DropdownMenuRadioItem value="top">بالا</DropdownMenuRadioItem>
28 <DropdownMenuRadioItem value="bottom">پایین</DropdownMenuRadioItem>
29 <DropdownMenuRadioItem value="right">راست</DropdownMenuRadioItem>
30 </DropdownMenuRadioGroup>
31 </DropdownMenuContent>
32 </DropdownMenu>
33 );
34}رادیو با آیکون (Radio Icons)
نمایش گزینههای رادیویی با آیکون
مشاهده کد
1"use client";
2
3import * as React from "react";
4import { Button } from "@/components/ui/button";
5import {
6 DropdownMenu,
7 DropdownMenuContent,
8 DropdownMenuLabel,
9 DropdownMenuRadioGroup,
10 DropdownMenuRadioItem,
11 DropdownMenuSeparator,
12 DropdownMenuTrigger,
13} from "@/components/ui/dropdown-menu";
14import { CreditCard, Wallet, Smartphone } from "lucide-react";
15
16export default function RadioIconsExample() {
17 const [method, setMethod] = React.useState("card");
18
19 return (
20 <DropdownMenu>
21 <DropdownMenuTrigger asChild>
22 <Button variant="outline">روش پرداخت</Button>
23 </DropdownMenuTrigger>
24 <DropdownMenuContent>
25 <DropdownMenuLabel>انتخاب روش پرداخت</DropdownMenuLabel>
26 <DropdownMenuSeparator />
27 <DropdownMenuRadioGroup value={method} onValueChange={setMethod}>
28 <DropdownMenuRadioItem value="card">
29 <CreditCard className="me-2 h-4 w-4" />
30 <span>کارت اعتباری</span>
31 </DropdownMenuRadioItem>
32 <DropdownMenuRadioItem value="wallet">
33 <Wallet className="me-2 h-4 w-4" />
34 <span>کیف پول</span>
35 </DropdownMenuRadioItem>
36 <DropdownMenuRadioItem value="mobile">
37 <Smartphone className="me-2 h-4 w-4" />
38 <span>پرداخت موبایل</span>
39 </DropdownMenuRadioItem>
40 </DropdownMenuRadioGroup>
41 </DropdownMenuContent>
42 </DropdownMenu>
43 );
44}اقدام مخرب (Destructive)
استفاده از رنگ destructive برای اقدامات برگشتناپذیر
مشاهده کد
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuItem,
6 DropdownMenuSeparator,
7 DropdownMenuTrigger,
8} from "@/components/ui/dropdown-menu";
9
10export default function DestructiveExample() {
11 return (
12 <DropdownMenu>
13 <DropdownMenuTrigger asChild>
14 <Button variant="outline">اقدامات</Button>
15 </DropdownMenuTrigger>
16 <DropdownMenuContent>
17 <DropdownMenuItem>ویرایش</DropdownMenuItem>
18 <DropdownMenuItem>کپی</DropdownMenuItem>
19 <DropdownMenuSeparator />
20 <DropdownMenuItem className="text-destructive focus:text-destructive">
21 حذف
22 </DropdownMenuItem>
23 </DropdownMenuContent>
24 </DropdownMenu>
25 );
26}آواتار (Avatar)
منوی تعویض حساب کاربری با آواتار
مشاهده کد
1import { Avatar, AvatarFallback, AvatarImage, Button } from "@/components/ui";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuGroup,
6 DropdownMenuItem,
7 DropdownMenuLabel,
8 DropdownMenuSeparator,
9 DropdownMenuTrigger,
10} from "@/components/ui/dropdown-menu";
11import { User, Settings, LogOut } from "lucide-react";
12
13export default function AvatarExample() {
14 return (
15 <DropdownMenu>
16 <DropdownMenuTrigger asChild>
17 <Button variant="ghost" className="relative h-10 w-10 rounded-full">
18 <Avatar>
19 <AvatarImage src="/avatars/01.png" alt="@username" />
20 <AvatarFallback>ل ر</AvatarFallback>
21 </Avatar>
22 </Button>
23 </DropdownMenuTrigger>
24 <DropdownMenuContent className="w-56" align="end">
25 <DropdownMenuLabel className="font-normal">
26 <div className="flex flex-col space-y-1">
27 <p className="text-sm font-medium leading-none">لیلا رضایی</p>
28 <p className="text-xs leading-none text-muted-foreground">
29 leila@example.com
30 </p>
31 </div>
32 </DropdownMenuLabel>
33 <DropdownMenuSeparator />
34 <DropdownMenuGroup>
35 <DropdownMenuItem>
36 <User className="me-2 h-4 w-4" />
37 <span>پروفایل</span>
38 </DropdownMenuItem>
39 <DropdownMenuItem>
40 <Settings className="me-2 h-4 w-4" />
41 <span>تنظیمات</span>
42 </DropdownMenuItem>
43 </DropdownMenuGroup>
44 <DropdownMenuSeparator />
45 <DropdownMenuItem>
46 <LogOut className="me-2 h-4 w-4" />
47 <span>خروج</span>
48 </DropdownMenuItem>
49 </DropdownMenuContent>
50 </DropdownMenu>
51 );
52}پیچیده (Complex)
مثال پیچیده با ترکیب گروهها، آیکونها و زیرمنوها
مشاهده کد
1"use client";
2
3import * as React from "react";
4import { Button } from "@/components/ui/button";
5import {
6 DropdownMenu,
7 DropdownMenuCheckboxItem,
8 DropdownMenuContent,
9 DropdownMenuGroup,
10 DropdownMenuItem,
11 DropdownMenuLabel,
12 DropdownMenuSeparator,
13 DropdownMenuShortcut,
14 DropdownMenuSub,
15 DropdownMenuSubContent,
16 DropdownMenuSubTrigger,
17 DropdownMenuTrigger,
18} from "@/components/ui/dropdown-menu";
19import {
20 User,
21 CreditCard,
22 Settings,
23 Users,
24 Mail,
25 MessageSquare,
26 Plus,
27 Github,
28 LifeBuoy,
29 Cloud,
30 LogOut,
31} from "lucide-react";
32
33export default function ComplexExample() {
34 const [showStatusBar, setShowStatusBar] = React.useState(true);
35 const [showPanel, setShowPanel] = React.useState(false);
36
37 return (
38 <DropdownMenu>
39 <DropdownMenuTrigger asChild>
40 <Button variant="outline">منوی پیچیده</Button>
41 </DropdownMenuTrigger>
42 <DropdownMenuContent className="w-56">
43 <DropdownMenuLabel>حساب کاربری من</DropdownMenuLabel>
44 <DropdownMenuSeparator />
45 <DropdownMenuGroup>
46 <DropdownMenuItem>
47 <User className="me-2 h-4 w-4" />
48 <span>پروفایل</span>
49 <DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
50 </DropdownMenuItem>
51 <DropdownMenuItem>
52 <CreditCard className="me-2 h-4 w-4" />
53 <span>صورتحساب</span>
54 <DropdownMenuShortcut>⌘B</DropdownMenuShortcut>
55 </DropdownMenuItem>
56 <DropdownMenuItem>
57 <Settings className="me-2 h-4 w-4" />
58 <span>تنظیمات</span>
59 <DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
60 </DropdownMenuItem>
61 </DropdownMenuGroup>
62 <DropdownMenuSeparator />
63 <DropdownMenuGroup>
64 <DropdownMenuItem>
65 <Users className="me-2 h-4 w-4" />
66 <span>تیم</span>
67 </DropdownMenuItem>
68 <DropdownMenuSub>
69 <DropdownMenuSubTrigger>
70 <Plus className="me-2 h-4 w-4" />
71 <span>دعوت کاربران</span>
72 </DropdownMenuSubTrigger>
73 <DropdownMenuSubContent>
74 <DropdownMenuItem>
75 <Mail className="me-2 h-4 w-4" />
76 <span>ایمیل</span>
77 </DropdownMenuItem>
78 <DropdownMenuItem>
79 <MessageSquare className="me-2 h-4 w-4" />
80 <span>پیام</span>
81 </DropdownMenuItem>
82 </DropdownMenuSubContent>
83 </DropdownMenuSub>
84 </DropdownMenuGroup>
85 <DropdownMenuSeparator />
86 <DropdownMenuCheckboxItem
87 checked={showStatusBar}
88 onCheckedChange={setShowStatusBar}
89 >
90 نوار وضعیت
91 </DropdownMenuCheckboxItem>
92 <DropdownMenuCheckboxItem
93 checked={showPanel}
94 onCheckedChange={setShowPanel}
95 >
96 پنل
97 </DropdownMenuCheckboxItem>
98 <DropdownMenuSeparator />
99 <DropdownMenuItem>
100 <Github className="me-2 h-4 w-4" />
101 <span>GitHub</span>
102 </DropdownMenuItem>
103 <DropdownMenuItem>
104 <LifeBuoy className="me-2 h-4 w-4" />
105 <span>پشتیبانی</span>
106 </DropdownMenuItem>
107 <DropdownMenuItem disabled>
108 <Cloud className="me-2 h-4 w-4" />
109 <span>API</span>
110 </DropdownMenuItem>
111 <DropdownMenuSeparator />
112 <DropdownMenuItem>
113 <LogOut className="me-2 h-4 w-4" />
114 <span>خروج</span>
115 <DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
116 </DropdownMenuItem>
117 </DropdownMenuContent>
118 </DropdownMenu>
119 );
120}مرجع API (API Reference)
DropdownMenu
کامپوننت اصلی منوی کشویی
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
open | boolean | undefined | وضعیت باز/بسته بودن منو (کنترلشده) |
defaultOpen | boolean | false | وضعیت پیشفرض (غیرکنترلشده) |
onOpenChange | (open: boolean) => void | undefined | تابع فراخوانی هنگام تغییر وضعیت |
modal | boolean | true | حالت مودال (بلاک کردن تعامل با پسزمینه) |
DropdownMenuTrigger
دکمهای که منو را باز و بسته میکند
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
asChild | boolean | false | ترکیب با فرزند به عنوان trigger |
DropdownMenuContent
محتوای منو که هنگام باز شدن نمایش داده میشود
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
className | string | undefined | کلاسهای CSS سفارشی |
sideOffset | number | 4 | فاصله از trigger (پیکسل) |
align | "start" | "center" | "end" | "center" | تراز کردن نسبت به trigger |
side | "top" | "right" | "bottom" | "left" | "bottom" | سمت نمایش منو |
DropdownMenuItem
آیتم قابل انتخاب در منو
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
disabled | boolean | false | غیرفعال کردن آیتم |
onSelect | (event: Event) => void | undefined | تابع فراخوانی هنگام انتخاب |
inset | boolean | false | اضافه کردن padding برای تراز با آیتمهای دارای آیکون |
DropdownMenuCheckboxItem
آیتمی که میتواند چک شود
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
checked | boolean | 'indeterminate' | false | وضعیت چک شده |
onCheckedChange | (checked: boolean) => void | undefined | تابع فراخوانی هنگام تغییر وضعیت |
disabled | boolean | false | غیرفعال کردن آیتم |
DropdownMenuRadioGroup
گروهی از آیتمهای رادیویی
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
value | string | undefined | مقدار انتخاب شده |
onValueChange | (value: string) => void | undefined | تابع فراخوانی هنگام تغییر مقدار |
DropdownMenuRadioItem
آیتم رادیویی در گروه
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
value | string | - | مقدار آیتم (الزامی) |
disabled | boolean | false | غیرفعال کردن آیتم |
DropdownMenuLabel
برچسب برای گروهبندی آیتمها
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
inset | boolean | false | اضافه کردن padding برای تراز با آیتمهای دارای آیکون |
DropdownMenuSub
زیرمنو تودرتو
| پراپ (Prop) | نوع (Type) | پیشفرض (Default) | توضیحات (Description) |
|---|---|---|---|
open | boolean | undefined | وضعیت باز/بسته بودن زیرمنو (کنترلشده) |
defaultOpen | boolean | false | وضعیت پیشفرض زیرمنو |
onOpenChange | (open: boolean) => void | undefined | تابع فراخوانی هنگام تغییر وضعیت زیرمنو |
دسترسیپذیری (Accessibility)
کیبورد (Keyboard)
SpaceیاEnter- باز کردن منو یا فعال کردن آیتمArrow Down- حرکت به آیتم بعدیArrow Up- حرکت به آیتم قبلیArrow Right/Arrow Left- باز یا بستن زیرمنوEsc- بستن منو
فوکوس (Focus)
منو دارای مدیریت فوکوس کامل است و میتوان با کیبورد به راحتی در آیتمها حرکت کرد. فوکوس به صورت خودکار به اولین آیتم منتقل میشود
ARIA (Roles & Attributes)
کامپوننت از الگوی Menu Button WAI-ARIA پیروی میکند و از roving tabindex برای مدیریت حرکت فوکوس استفاده میکند
بهترین شیوهها (Best Practices)
گروهبندی آیتمها
از DropdownMenuGroup و DropdownMenuLabel برای سازماندهی آیتمهای مرتبط استفاده کنید. این کار باعث میشود کاربران راحتتر بتوانند گزینه مورد نظر خود را پیدا کنند.
استفاده از آیکونها
آیکونها به کاربران کمک میکنند تا سریعتر گزینهها را شناسایی کنند. همیشه آیکون را قبل از متن قرار دهید و از کلاس me-2 برای فاصلهگذاری استفاده کنید.
اقدامات مخرب
برای اقدامات برگشتناپذیر مانند حذف، از رنگ destructive استفاده کنید و آنها را در انتهای منو قرار دهید. همچنین میتوانید یک جداکننده قبل از آنها اضافه کنید.
کلیدهای میانبر
از DropdownMenuShortcut برای نمایش کلیدهای میانبر استفاده کنید. این کار به کاربران پیشرفته کمک میکند تا سریعتر با برنامه شما کار کنند.
زیرمنوها
از زیرمنوها برای سازماندهی گزینههای مرتبط استفاده کنید، اما از تودرتو شدن بیش از حد آنها خودداری کنید. معمولاً یک یا دو سطح زیرمنو کافی است.
تعداد آیتمها
سعی کنید تعداد آیتمهای منو را محدود نگه دارید. اگر منوی شما بیش از ۱۰-۱۲ آیتم دارد، به گروهبندی بهتر یا استفاده از زیرمنوها فکر کنید.
نحوه استفاده (Usage)
1import { Button } from "@/components/ui/button";
2import {
3 DropdownMenu,
4 DropdownMenuContent,
5 DropdownMenuGroup,
6 DropdownMenuItem,
7 DropdownMenuLabel,
8 DropdownMenuSeparator,
9 DropdownMenuTrigger,
10} from "@/components/ui/dropdown-menu";
11
12export default function Example() {
13 return (
14 <DropdownMenu>
15 <DropdownMenuTrigger asChild>
16 <Button variant="outline">باز کردن</Button>
17 </DropdownMenuTrigger>
18 <DropdownMenuContent>
19 <DropdownMenuGroup>
20 <DropdownMenuLabel>حساب کاربری من</DropdownMenuLabel>
21 <DropdownMenuItem>پروفایل</DropdownMenuItem>
22 <DropdownMenuItem>صورتحساب</DropdownMenuItem>
23 </DropdownMenuGroup>
24 <DropdownMenuSeparator />
25 <DropdownMenuGroup>
26 <DropdownMenuItem>تیم</DropdownMenuItem>
27 <DropdownMenuItem>اشتراک</DropdownMenuItem>
28 </DropdownMenuGroup>
29 </DropdownMenuContent>
30 </DropdownMenu>
31 );
32}