返回 presentation-ai
OrientationControl.tsx
根目录 / src / components / presentation / floating-toolbar / OrientationControl.tsx
1 "use client";
2
3 import { ArrowUpDown } from "lucide-react";
4 import * as React from "react";
5
6 import {
7 DropdownMenu,
8 DropdownMenuContent,
9 DropdownMenuRadioItem,
10 DropdownMenuTrigger,
11 } from "@/components/plate/ui/dropdown-menu";
12 import {
13 ToolbarButton,
14 ToolbarGroup,
15 ToolbarMenuGroup,
16 } from "@/components/plate/ui/toolbar";
17 import { useToolbarContext } from "./ToolbarContext";
18
19 export function OrientationControl() {
20 const [open, setOpen] = React.useState(false);
21 const {
22 supportsOrientationControl,
23 currentOrientation,
24 orientationOptions,
25 handleNodePropertyUpdate,
26 } = useToolbarContext();
27
28 if (!supportsOrientationControl) {
29 return null;
30 }
31
32 return (
33 <ToolbarGroup>
34 <DropdownMenu open={open} onOpenChange={setOpen} modal={false}>
35 <DropdownMenuTrigger asChild>
36 <ToolbarButton
37 className="min-w-25"
38 pressed={open}
39 tooltip="Change Orientation"
40 isDropdown
41 >
42 <ArrowUpDown className="size-4" />
43 <span className="capitalize">{currentOrientation}</span>
44 </ToolbarButton>
45 </DropdownMenuTrigger>
46 <DropdownMenuContent
47 className="ignore-click-outside/toolbar min-w-0"
48 align="start"
49 >
50 <ToolbarMenuGroup
51 value={currentOrientation}
52 onValueChange={(orientation) => {
53 handleNodePropertyUpdate("orientation", orientation);
54 }}
55 label="Orientation"
56 >
57 {orientationOptions.map((option) => (
58 <DropdownMenuRadioItem key={option} value={option}>
59 <span className="capitalize">{option}</span>
60 </DropdownMenuRadioItem>
61 ))}
62 </ToolbarMenuGroup>
63 </DropdownMenuContent>
64 </DropdownMenu>
65 </ToolbarGroup>
66 );
67 }
68
68 lines Plain Text