import { type PointerEvent as ReactPointerEvent, type RefObject } from 'react'; import type { OfficeKernelPresentationSnapGuide } from '../../../kernel/office-kernel-protocol'; import type { WorkSlideElement } from '../work-types'; import type { PresentationGeometryController } from './use-presentation-geometry'; export interface PresentationTransformDrag { element: WorkSlideElement; elements?: readonly WorkSlideElement[]; frame?: WorkSlideElement; mode: 'move' | 'resize'; pointerId: number; startX: number; startY: number; } export interface PresentationTransformPoint { clientX: number; clientY: number; } export interface PresentationTransformBounds { width: number; height: number; } export interface PresentationTransformPatch { x: number; y: number; width: number; height: number; borderWidth?: number; fontSize?: number; textRuns?: WorkSlideElement['textRuns']; } export interface PresentationTransformCommit { elementId: string; patch: PresentationTransformPatch; } export interface PresentationTransformController { cancelDrag: () => void; displayElements: WorkSlideElement[]; dragging: boolean; guides: OfficeKernelPresentationSnapGuide[]; beginDrag: (event: ReactPointerEvent, element: WorkSlideElement, mode: 'move' | 'resize') => void; continueDrag: (event: ReactPointerEvent) => void; endDrag: (event: ReactPointerEvent) => void; } export declare function usePresentationTransform({ canvasRef, elements, geometry, onCommit, onSelect, selectedElementIds, snapTargets, }: { canvasRef: RefObject; elements: WorkSlideElement[]; geometry: PresentationGeometryController; onCommit: (changes: readonly PresentationTransformCommit[]) => void; onSelect: (elementId: string) => void; selectedElementIds: readonly string[]; snapTargets: WorkSlideElement[]; }): PresentationTransformController; export declare function presentationTransformCandidate(drag: PresentationTransformDrag, point: PresentationTransformPoint, bounds: PresentationTransformBounds): WorkSlideElement;