import { useState } from "react"; import { usePreviewViewport } from "@/components/editor/panels/preview/preview-viewport"; import { usePreviewInteraction } from "@/hooks/use-preview-interaction"; import type { SnapLine } from "@/lib/preview/preview-snap"; import { TransformHandles } from "./transform-handles"; import { MaskHandles } from "./mask-handles"; import { SnapGuides } from "./snap-guides"; import { TextEditOverlay } from "./text-edit-overlay"; import { usePropertiesStore } from "../properties/stores/properties-store"; import { useEditor } from "@/hooks/use-editor"; export function PreviewInteractionOverlay() { const [snapLines, setSnapLines] = useState([]); const editor = useEditor(); const viewport = usePreviewViewport(); const selectedElements = useEditor((e) => e.selection.getSelectedElements()); const activeTabPerType = usePropertiesStore((s) => s.activeTabPerType); const selectedRef = selectedElements.length === 1 ? selectedElements[0] : null; const activeTrack = selectedRef ? editor.timeline.getTrackById({ trackId: selectedRef.trackId }) : null; const activeElement = activeTrack?.elements.find( (element) => element.id === selectedRef?.elementId, ) ?? null; const isMaskMode = activeElement ? activeTabPerType[activeElement.type] === "masks" : false; const { onPointerDown, onPointerMove, onPointerUp, onDoubleClick, editingText, commitTextEdit, } = usePreviewInteraction({ onSnapLinesChange: setSnapLines, isMaskMode, }); const handlePointerDown = (event: React.PointerEvent) => { if (viewport.handlePanPointerDown({ event })) { return; } onPointerDown(event); }; const handlePointerMove = (event: React.PointerEvent) => { if (viewport.handlePanPointerMove({ event })) { return; } onPointerMove(event); }; const handlePointerUp = (event: React.PointerEvent) => { if (viewport.handlePanPointerUp({ event })) { return; } onPointerUp(event); }; const handleContextMenu = (e: React.MouseEvent) => { const x = e.nativeEvent.offsetX; const y = e.nativeEvent.offsetY; const outsideCanvas = x < viewport.sceneLeft || x > viewport.sceneLeft + viewport.sceneWidth || y < viewport.sceneTop || y > viewport.sceneTop + viewport.sceneHeight; if (outsideCanvas) { e.stopPropagation(); } }; return (
e.preventDefault()} onContextMenu={handleContextMenu} /> {editingText ? ( ) : isMaskMode ? ( ) : ( )}
); }