import { Rotor4 } from '@holotope/core'; export interface DragRotation4DOptions { /** Plane driven by horizontal pointer movement. Default [0, 3] (xw). */ horizontalPlane?: [number, number]; /** Plane driven by vertical pointer movement. Default [1, 3] (yw). */ verticalPlane?: [number, number]; /** Radians per pixel of pointer movement. Default 0.008. */ speed?: number; /** Modifier key that activates the 4D drag. Default 'alt'. */ modifier?: 'alt' | 'shift' | 'ctrl' | 'none'; } /** * Pointer controls for rotating an object in 4D planes the 3D camera * cannot reach: dragging (with a modifier key held, by default Alt) * accumulates a `Rotor4`, horizontal movement rotating in one plane and * vertical movement in another. * * This intentionally complements — rather than replaces — a 3D orbit * control on the same canvas: plain drags orbit the 3D view, modified * drags rotate through the hidden dimension. While a 4D drag is active, * `active` is true; use it to disable the 3D controls for that gesture. * * The pointer→rotor mapping lives in `applyDrag`, which is pure and * testable; `attach` wires it to DOM pointer events. */ export declare class DragRotation4D { /** Accumulated user rotation. Compose with your per-frame transform. */ rotor: Rotor4; /** True while a modified drag gesture is in progress. */ active: boolean; readonly horizontalPlane: [number, number]; readonly verticalPlane: [number, number]; speed: number; modifier: 'alt' | 'shift' | 'ctrl' | 'none'; private element; private pointerId; private lastX; private lastY; private readonly onPointerDown; private readonly onPointerMove; private readonly onPointerUp; constructor(options?: DragRotation4DOptions); /** Applies a drag delta in pixels, premultiplying onto the rotor. */ applyDrag(dxPixels: number, dyPixels: number): void; reset(): void; attach(element: HTMLElement): this; detach(): void; dispose(): void; private modifierHeld; private handleDown; private handleMove; private handleUp; } //# sourceMappingURL=drag-rotation4d.d.ts.map