ue-too
Version:
pan, zoom, and rotate your html canvas
132 lines (131 loc) • 5.59 kB
TypeScript
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 {};