返回 presentation-ai
SlideEditor.tsx
根目录 / src / components / presentation / slides / SlideEditor.tsx
1 "use client";
2
3 import { DeleteConfirmDialog } from "./slide-editor/DeleteConfirmDialog";
4 import { MagicMenuDropdown } from "./slide-editor/MagicMenuDropdown";
5 import { MoreOptionsDropdown } from "./slide-editor/MoreOptionsDropdown";
6 import { PaletteDropdown } from "./slide-editor/PaletteDropdown";
7 import {
8 SlideEditorProvider,
9 useSlideEditorContext,
10 } from "./slide-editor/SlideEditorContext";
11
12 interface SlideEditorProps {
13 slideId: string;
14 dragListeners?: React.HTMLAttributes<HTMLElement>;
15 onDuplicate?: () => void;
16 onDelete?: () => void;
17 }
18
19 export function SlideEditor({
20 slideId,
21 dragListeners,
22 onDuplicate,
23 onDelete,
24 }: SlideEditorProps) {
25 return (
26 <SlideEditorProvider
27 slideId={slideId}
28 dragListeners={dragListeners}
29 onDuplicate={onDuplicate}
30 onDelete={onDelete}
31 >
32 <SlideEditorContent />
33 </SlideEditorProvider>
34 );
35 }
36
37 function SlideEditorContent() {
38 const { showDeleteConfirm, setShowDeleteConfirm, onDelete } =
39 useSlideEditorContext();
40
41 return (
42 <div className="flex items-center gap-1">
43 {/* More Options / Drag Handle Dropdown */}
44 <MoreOptionsDropdown />
45
46 {/* Delete Confirmation Dialog */}
47 <DeleteConfirmDialog
48 open={showDeleteConfirm}
49 onOpenChange={setShowDeleteConfirm}
50 onConfirm={onDelete}
51 />
52
53 {/* Palette / Styling Dropdown */}
54 <PaletteDropdown />
55
56 {/* Magic Menu Dropdown */}
57 <MagicMenuDropdown />
58 </div>
59 );
60 }
61
61 lines Plain Text