Files
shadcn-ui/apps/v4/examples/radix/dropdown-menu-rtl.tsx
shadcn 5317ae8a70 feat
2026-01-21 13:24:09 +04:00

199 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client"
import * as React from "react"
import { Button } from "@/examples/radix/ui-rtl/button"
import {
DropdownMenu,
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
DropdownMenuItem,
DropdownMenuLabel,
DropdownMenuPortal,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
DropdownMenuSubContent,
DropdownMenuSubTrigger,
DropdownMenuTrigger,
} from "@/examples/radix/ui-rtl/dropdown-menu"
import {
useTranslation,
type Translations,
} from "@/components/language-selector"
const translations: Translations = {
en: {
dir: "ltr",
values: {
open: "Open",
team: "Team",
inviteUsers: "Invite users",
email: "Email",
message: "Message",
more: "More",
calendar: "Calendar",
chat: "Chat",
webhook: "Webhook",
advanced: "Advanced...",
newTeam: "New Team",
view: "View",
statusBar: "Status Bar",
activityBar: "Activity Bar",
panel: "Panel",
position: "Position",
top: "Top",
bottom: "Bottom",
right: "Right",
left: "Left",
},
},
ar: {
dir: "rtl",
values: {
open: "افتح القائمة",
team: "الفريق",
inviteUsers: "دعوة المستخدمين",
email: "البريد الإلكتروني",
message: "رسالة",
more: "المزيد",
calendar: "تقويم",
chat: "دردشة",
webhook: "خطاف ويب",
advanced: "متقدم...",
newTeam: "فريق جديد",
view: "عرض",
statusBar: "شريط الحالة",
activityBar: "شريط النشاط",
panel: "اللوحة",
position: "الموضع",
top: "أعلى",
bottom: "أسفل",
right: "يمين",
left: "يسار",
},
},
he: {
dir: "rtl",
values: {
open: "פתח תפריט",
team: "הצוות",
inviteUsers: "הזמן משתמשים",
email: "אימייל",
message: "הודעה",
more: "עוד",
calendar: "יומן",
chat: "צ'אט",
webhook: "Webhook",
advanced: "מתקדם...",
newTeam: "צוות חדש",
view: "תצוגה",
statusBar: "שורת סטטוס",
activityBar: "שורת פעילות",
panel: "לוח",
position: "מיקום",
top: "למעלה",
bottom: "למטה",
right: "ימין",
left: "שמאל",
},
},
}
export function DropdownMenuRtl() {
const { dir, t } = useTranslation(translations, "ar")
const [showStatusBar, setShowStatusBar] = React.useState(true)
const [showActivityBar, setShowActivityBar] = React.useState(false)
const [showPanel, setShowPanel] = React.useState(false)
const [position, setPosition] = React.useState("bottom")
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline">{t.open}</Button>
</DropdownMenuTrigger>
<DropdownMenuContent
align={dir === "rtl" ? "end" : "start"}
dir={dir}
className="w-36"
>
<DropdownMenuGroup>
<DropdownMenuLabel>{t.team}</DropdownMenuLabel>
<DropdownMenuItem>{t.team}</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>{t.inviteUsers}</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent
dir={dir}
side={dir === "rtl" ? "left" : "right"}
>
<DropdownMenuItem>{t.email}</DropdownMenuItem>
<DropdownMenuItem>{t.message}</DropdownMenuItem>
<DropdownMenuSub>
<DropdownMenuSubTrigger>{t.more}</DropdownMenuSubTrigger>
<DropdownMenuPortal>
<DropdownMenuSubContent
dir={dir}
side={dir === "rtl" ? "left" : "right"}
>
<DropdownMenuItem>{t.calendar}</DropdownMenuItem>
<DropdownMenuItem>{t.chat}</DropdownMenuItem>
<DropdownMenuSeparator />
<DropdownMenuItem>{t.webhook}</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuSeparator />
<DropdownMenuItem>{t.advanced}</DropdownMenuItem>
</DropdownMenuSubContent>
</DropdownMenuPortal>
</DropdownMenuSub>
<DropdownMenuItem>
{t.newTeam}
<DropdownMenuShortcut>+T</DropdownMenuShortcut>
</DropdownMenuItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuLabel>{t.view}</DropdownMenuLabel>
<DropdownMenuCheckboxItem
checked={showStatusBar}
onCheckedChange={setShowStatusBar}
>
{t.statusBar}
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showActivityBar}
onCheckedChange={setShowActivityBar}
>
{t.activityBar}
</DropdownMenuCheckboxItem>
<DropdownMenuCheckboxItem
checked={showPanel}
onCheckedChange={setShowPanel}
>
{t.panel}
</DropdownMenuCheckboxItem>
</DropdownMenuGroup>
<DropdownMenuSeparator />
<DropdownMenuGroup>
<DropdownMenuLabel>{t.position}</DropdownMenuLabel>
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
<DropdownMenuRadioItem value="top">{t.top}</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="bottom">
{t.bottom}
</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="right">
{t.right}
</DropdownMenuRadioItem>
<DropdownMenuRadioItem value="left">{t.left}</DropdownMenuRadioItem>
</DropdownMenuRadioGroup>
</DropdownMenuGroup>
</DropdownMenuContent>
</DropdownMenu>
)
}