UNPKG

ue-too

Version:

pan, zoom, and rotate your html canvas

132 lines (131 loc) 5.59 kB
import type { EventReactions, State, BaseContext } from "../../being"; import { TemplateState, TemplateStateMachine } from "../../being"; import { BoardCamera } from "../../board-camera"; /** * @description The states of the pan control state machine. * * @category Input Flow Control */ export type RotateControlStates = "ACCEPTING_USER_INPUT" | "TRANSITION" | "LOCKED_ON_OBJECT"; /** * @description The payload for the rotate by input event. * * @category Input Flow Control */ export type RotateByInputEventPayload = { diff: number; }; /** * @description The payload for the rotate to input event. * * @category Input Flow Control */ export type RotateToInputEventPayload = { target: number; }; type EmptyPayload = {}; /** * @description The payload mapping for the events of the rotate control state machine. * * @category Input Flow Control */ export type RotateEventPayloadMapping = { "userRotateByInput": RotateByInputEventPayload; "userRotateToInput": RotateToInputEventPayload; "transitionRotateByInput": RotateByInputEventPayload; "transitionRotateToInput": RotateToInputEventPayload; "lockedOnObjectRotateByInput": RotateByInputEventPayload; "lockedOnObjectRotateToInput": RotateToInputEventPayload; "unlock": EmptyPayload; "initateTransition": EmptyPayload; }; /** * @description The context for the rotate control state machine. * * @category Input Flow Control */ export interface RotateContext extends BaseContext { camera: BoardCamera; rotateBy: (delta: number) => void; rotateTo: (target: number) => void; } /** * @description The pan control state machine. * It's not created directly using the TemplateStateMachine class. * A few helper functions are in place to make it easier to use. (user don't have to memorize the event names) * * @category Input Flow Control */ export declare class RotateControlStateMachine extends TemplateStateMachine<RotateEventPayloadMapping, RotateContext, RotateControlStates> { constructor(states: Record<RotateControlStates, State<RotateEventPayloadMapping, RotateContext, RotateControlStates>>, initialState: RotateControlStates, context: RotateContext); /** * @description Notify the pan input event. * * @category Input Flow Control */ notifyRotateByInput(diff: number): void; /** * @description Notify the rotate to animation input event. * * @category Input Flow Control */ notifyRotateToAnimationInput(target: number): void; /** * @description Initate the transition. * * @category Input Flow Control */ initateTransition(): void; } /** * @description The accepting user input state of the rotate control state machine. * * @category Input Flow Control */ export declare class AcceptingUserInputState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> { constructor(); eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates>; userRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void; userRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void; lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void; lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void; } /** * @description The transition state of the rotate control state machine. * * @category Input Flow Control */ export declare class TransitionState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> { constructor(); eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates>; userRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates; userRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates; transitionRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates; transitionRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates; lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): RotateControlStates; lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): RotateControlStates; } /** * @description The locked on object state of the pan control state machine. * * @category Input Flow Control */ export declare class LockedOnObjectState extends TemplateState<RotateEventPayloadMapping, RotateContext, RotateControlStates> { constructor(); eventReactions: EventReactions<RotateEventPayloadMapping, RotateContext, RotateControlStates>; lockedOnObjectRotateByInputHandler(context: RotateContext, payload: RotateByInputEventPayload): void; lockedOnObjectRotateToInputHandler(context: RotateContext, payload: RotateToInputEventPayload): void; } /** * @description Create the object containing the default pan control states. * * @category Input Flow Control */ export declare function createDefaultRotateControlStates(): Record<RotateControlStates, State<RotateEventPayloadMapping, RotateContext, RotateControlStates>>; /** * @description Create the default rotate control state machine. * * @category Input Flow Control */ export declare function createDefaultRotateControlStateMachine(context: RotateContext): RotateControlStateMachine; export {};