import { type CurrentReadable } from './current-value.js';
import type { RenderMode } from './types.js';
/**
 * Pointer kind normalized from DOM `PointerEvent.pointerType`.
 */
export type PointerKind = 'mouse' | 'pen' | 'touch';
/**
 * 2D tuple used by pointer coordinate payloads.
 */
export type PointerVec2 = [number, number];
/**
 * Normalized pointer coordinates exposed to runtime hooks.
 */
export interface PointerPoint {
    /**
     * CSS pixel coordinates relative to canvas top-left corner.
     */
    px: PointerVec2;
    /**
     * UV coordinates in shader-friendly orientation (`y` grows upward).
     */
    uv: PointerVec2;
    /**
     * Normalized device coordinates (`-1..1`, `y` grows upward).
     */
    ndc: PointerVec2;
}
/**
 * Mutable pointer state snapshot exposed by `usePointer`.
 */
export interface PointerState extends PointerPoint {
    inside: boolean;
    pressed: boolean;
    dragging: boolean;
    pointerType: PointerKind | null;
    pointerId: number | null;
    button: number | null;
    buttons: number;
    time: number;
    downPx: PointerVec2 | null;
    downUv: PointerVec2 | null;
    deltaPx: PointerVec2;
    deltaUv: PointerVec2;
    velocityPx: PointerVec2;
    velocityUv: PointerVec2;
}
/**
 * Modifier key snapshot attached to pointer click events.
 */
export interface PointerModifiers {
    alt: boolean;
    ctrl: boolean;
    shift: boolean;
    meta: boolean;
}
/**
 * Click/tap payload produced by `usePointer`.
 */
export interface PointerClick extends PointerPoint {
    id: number;
    time: number;
    pointerType: PointerKind;
    pointerId: number;
    button: number;
    modifiers: PointerModifiers;
}
/**
 * Frame wake-up strategy for pointer-driven interactions.
 */
export type PointerFrameRequestMode = 'advance' | 'auto' | 'invalidate' | 'none';
/**
 * Returns a monotonic timestamp in seconds.
 */
export declare function getPointerNowSeconds(): number;
/**
 * Creates the initial pointer state snapshot.
 */
export declare function createInitialPointerState(): PointerState;
/**
 * Normalized coordinate payload for a pointer position against a canvas rect.
 */
export interface PointerCoordinates extends PointerPoint {
    inside: boolean;
}
/**
 * Converts client coordinates to canvas-relative pointer coordinates.
 */
export declare function getPointerCoordinates(clientX: number, clientY: number, rect: Pick<DOMRectReadOnly, 'height' | 'left' | 'top' | 'width'>): PointerCoordinates;
/**
 * Resolves frame wake-up strategy for pointer-driven updates.
 */
export declare function resolvePointerFrameRequestMode(mode: PointerFrameRequestMode, renderMode: RenderMode): Exclude<PointerFrameRequestMode, 'auto'>;
/**
 * Normalizes unknown pointer kind values to the public `PointerKind`.
 */
export declare function normalizePointerKind(pointerType: string): PointerKind;
/**
 * Framework-neutral options consumed by the pointer controller.
 */
export interface PointerControllerOptions {
    /**
     * Enables pointer listeners.
     *
     * @default true
     */
    enabled?: boolean;
    /**
     * Frame wake-up strategy for pointer-driven state changes.
     *
     * @default 'auto'
     */
    requestFrame?: PointerFrameRequestMode;
    /**
     * Requests pointer capture on pointer down.
     *
     * @default true
     */
    capturePointer?: boolean;
    /**
     * Tracks pointer movement outside canvas while pointer is pressed.
     * Pointer release/cancellation is still observed to keep press state consistent.
     *
     * @default true
     */
    trackWhilePressedOutsideCanvas?: boolean;
    /**
     * Enables click/tap synthesis on pointer up.
     *
     * @default true
     */
    clickEnabled?: boolean;
    /**
     * Maximum press duration to consider pointer up a click (milliseconds).
     *
     * @default 350
     */
    clickMaxDurationMs?: number;
    /**
     * Maximum pointer travel from down to up to consider pointer up a click (pixels).
     *
     * @default 8
     */
    clickMaxMovePx?: number;
    /**
     * Allowed pointer buttons for click synthesis.
     *
     * @default [0]
     */
    clickButtons?: number[];
    /**
     * Called after pointer move state update.
     */
    onMove?: (state: PointerState, event: PointerEvent) => void;
    /**
     * Called after pointer down state update.
     */
    onDown?: (state: PointerState, event: PointerEvent) => void;
    /**
     * Called after pointer up/cancel state update.
     */
    onUp?: (state: PointerState, event: PointerEvent) => void;
    /**
     * Called when click/tap is synthesized.
     */
    onClick?: (click: PointerClick, state: PointerState, event: PointerEvent) => void;
}
/**
 * Framework runtime operations required by the pointer controller.
 */
export interface PointerControllerRuntime {
    advance: () => void;
    getRenderMode: () => RenderMode;
    invalidate: () => void;
}
/**
 * Public pointer values shared by all framework adapters.
 */
export interface PointerControllerResult {
    state: CurrentReadable<PointerState>;
    lastClick: CurrentReadable<PointerClick | null>;
    resetClick: () => void;
}
/**
 * Framework-neutral pointer lifecycle controller.
 */
export interface PointerController extends PointerControllerResult {
    destroy: () => void;
    mount: (canvas: HTMLCanvasElement) => void;
    updateOptions: (options: PointerControllerOptions) => void;
}
/**
 * Creates the shared pointer controller used by every framework adapter.
 */
export declare function createPointerController(runtime: PointerControllerRuntime, initialOptions?: PointerControllerOptions): PointerController;
//# sourceMappingURL=pointer.d.ts.map