summaryrefslogtreecommitdiff
path: root/apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx
blob: 4c33a1a1cd7594d380b4d514f715a6fd789b356b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { usePreviewInteraction } from "@/hooks/use-preview-interaction";
import { TransformHandles } from "./transform-handles";
import { SnapGuides } from "./snap-guides";
import { TextEditOverlay } from "./text-edit-overlay";

export function PreviewInteractionOverlay({
	canvasRef,
	containerRef,
}: {
	canvasRef: React.RefObject<HTMLCanvasElement | null>;
	containerRef: React.RefObject<HTMLDivElement | null>;
}) {
	const {
		onPointerDown,
		onPointerMove,
		onPointerUp,
		onDoubleClick,
		snapLines,
		editingText,
		commitTextEdit,
		cancelTextEdit,
	} = usePreviewInteraction({ canvasRef });

	return (
		<div className="absolute inset-0">
			{/* biome-ignore lint/a11y/noStaticElementInteractions: canvas overlay, pointer-only interaction */}
			<div
				className="absolute inset-0 pointer-events-auto"
				onPointerDown={onPointerDown}
				onPointerMove={onPointerMove}
				onPointerUp={onPointerUp}
				onDoubleClick={onDoubleClick}
			/>
			{editingText ? (
				<TextEditOverlay
					canvasRef={canvasRef}
					containerRef={containerRef}
					trackId={editingText.trackId}
					elementId={editingText.elementId}
					element={editingText.element}
					onCommit={commitTextEdit}
					onCancel={cancelTextEdit}
				/>
			) : (
				<TransformHandles canvasRef={canvasRef} containerRef={containerRef} />
			)}
			<SnapGuides
				lines={snapLines}
				canvasRef={canvasRef}
				containerRef={containerRef}
			/>
		</div>
	);
}