返回 presentation-ai
AlignmentControl.tsx
根目录 / src / components / presentation / floating-toolbar / AlignmentControl.tsx
1 "use client";
2
3 import { AlignCenter, AlignLeft, AlignRight } from "lucide-react";
4
5 import { ToolbarButton, ToolbarGroup } from "@/components/plate/ui/toolbar";
6 import { useToolbarContext } from "./ToolbarContext";
7
8 export function AlignmentControl() {
9 const {
10 supportsAlignmentControl,
11 currentAlignment,
12 alignmentOptions,
13 handleNodePropertyUpdate,
14 isCurrentElementChart,
15 } = useToolbarContext();
16
17 // Don't show alignment controls for charts
18 if (isCurrentElementChart) {
19 return null;
20 }
21
22 // If element supports specific alignment options, use those
23 if (supportsAlignmentControl) {
24 return (
25 <ToolbarGroup>
26 {alignmentOptions.includes("left") && (
27 <ToolbarButton
28 onClick={() => {
29 handleNodePropertyUpdate("alignment", "left");
30 }}
31 pressed={currentAlignment === "left"}
32 tooltip="Align Left"
33 size="sm"
34 >
35 <AlignLeft className="size-4" />
36 </ToolbarButton>
37 )}
38 {alignmentOptions.includes("center") && (
39 <ToolbarButton
40 onClick={() => {
41 handleNodePropertyUpdate("alignment", "center");
42 }}
43 pressed={currentAlignment === "center"}
44 tooltip="Align Center"
45 size="sm"
46 >
47 <AlignCenter className="size-4" />
48 </ToolbarButton>
49 )}
50 {alignmentOptions.includes("right") && (
51 <ToolbarButton
52 onClick={() => {
53 handleNodePropertyUpdate("alignment", "right");
54 }}
55 pressed={currentAlignment === "right"}
56 tooltip="Align Right"
57 size="sm"
58 >
59 <AlignRight className="size-4" />
60 </ToolbarButton>
61 )}
62 </ToolbarGroup>
63 );
64 }
65
66 // Default alignment controls for all elements
67 return (
68 <ToolbarGroup>
69 <ToolbarButton
70 onClick={() => {
71 handleNodePropertyUpdate("alignment", "left");
72 }}
73 pressed={currentAlignment === "left"}
74 tooltip="Align Left"
75 size="sm"
76 >
77 <AlignLeft className="size-4" />
78 </ToolbarButton>
79 <ToolbarButton
80 onClick={() => {
81 handleNodePropertyUpdate("alignment", "center");
82 }}
83 pressed={currentAlignment === "center"}
84 tooltip="Align Center"
85 size="sm"
86 >
87 <AlignCenter className="size-4" />
88 </ToolbarButton>
89 <ToolbarButton
90 onClick={() => {
91 handleNodePropertyUpdate("alignment", "right");
92 }}
93 pressed={currentAlignment === "right"}
94 tooltip="Align Right"
95 size="sm"
96 >
97 <AlignRight className="size-4" />
98 </ToolbarButton>
99 </ToolbarGroup>
100 );
101 }
102
102 lines Plain Text