@motion-core/motion-gpu
Version:
Framework-agnostic WebGPU runtime for fullscreen WGSL shaders with explicit Svelte, React, and Vue adapter entrypoints.
195 lines • 5.67 kB
TypeScript
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