返回 presentation-ai
AlignmentSection.tsx
1 "use client";
2
3 import { AlignCenter, ArrowUpFromLine, FoldVertical } from "lucide-react";
4
5 import { Label } from "@/components/ui/label";
6 import { ToggleGroup, ToggleGroupItem } from "@/components/ui/toggle-group";
7 import { cn } from "@/lib/utils";
8 import { useCommonValues } from "../hooks/useCommonValues";
9 import { useUpdateAllSlides } from "../hooks/useUpdateAllSlides";
10
11 export function AlignmentSection() {
12 const { currentAlignment } = useCommonValues();
13 const updateAllSlides = useUpdateAllSlides();
14
15 return (
16 <div className="space-y-2">
17 <Label
18 htmlFor="content-alignment"
19 className="flex items-center gap-2 text-sm font-semibold text-foreground"
20 >
21 <AlignCenter className="size-4 text-muted-foreground" />
22 Content Alignment
23 </Label>
24 <ToggleGroup
25 id="content-alignment"
26 type="single"
27 value={currentAlignment}
28 onValueChange={(val) =>
29 val &&
30 updateAllSlides({ alignment: val as "start" | "center" | "end" })
31 }
32 className="w-full gap-2 rounded-full"
33 >
34 <ToggleGroupItem
35 value="start"
36 variant="outline"
37 size="sm"
38 className={cn(
39 "flex-1 border-border transition-all",
40 currentAlignment === "start" &&
41 "border-primary bg-primary text-primary-foreground",
42 )}
43 title="Align start"
44 >
45 <ArrowUpFromLine className="size-4" />
46 </ToggleGroupItem>
47 <ToggleGroupItem
48 value="center"
49 variant="outline"
50 size="sm"
51 className={cn(
52 "flex-1 border-border transition-all",
53 currentAlignment === "center" &&
54 "border-primary bg-primary text-primary-foreground",
55 )}
56 title="Align center"
57 >
58 <FoldVertical className="size-4" />
59 </ToggleGroupItem>
60 <ToggleGroupItem
61 value="end"
62 variant="outline"
63 size="sm"
64 className={cn(
65 "flex-1 border-border transition-all",
66 currentAlignment === "end" &&
67 "border-primary bg-primary text-primary-foreground",
68 )}
69 title="Align end"
70 >
71 <ArrowUpFromLine className="size-4 rotate-180" />
72 </ToggleGroupItem>
73 </ToggleGroup>
74 </div>
75 );
76 }
77
77 lines Plain Text