@niuee/board
Version:
<h1 align="center"> board </h1> <p align="center"> board supercharges your html canvas element giving it the capabilities to pan, zoom, rotate, and much more. </p> <p align="center"> <a href="https://www.npmjs.com/package/@niuee/board">
136 lines (135 loc) • 5.41 kB
TypeScript
import { Point } from "../util/misc";
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 PanControlStates = "ACCEPTING_USER_INPUT" | "TRANSITION" | "LOCKED_ON_OBJECT";
/**
* @description The payload for the pan by input event.
*
* @category Input Flow Control
*/
export type PanByInputEventPayload = {
diff: Point;
};
/**
* @description The payload for the pan to input event.
*
* @category Input Flow Control
*/
export type PanToInputEventPayload = {
target: Point;
};
type EmptyPayload = {};
/**
* @description The payload mapping for the events of the pan control state machine.
*
* @category Input Flow Control
*/
export type PanEventPayloadMapping = {
"userPanByInput": PanByInputEventPayload;
"userPanToInput": PanToInputEventPayload;
"transitionPanByInput": PanByInputEventPayload;
"transitionPanToInput": PanToInputEventPayload;
"lockedOnObjectPanByInput": PanByInputEventPayload;
"lockedOnObjectPanToInput": PanToInputEventPayload;
"unlock": EmptyPayload;
"initateTransition": EmptyPayload;
};
/**
* @description The context for the pan control state machine.
*
* @category Input Flow Control
*/
export interface PanContext extends BaseContext {
camera: BoardCamera;
limitEntireViewPort: boolean;
panBy: (delta: Point) => void;
panTo: (target: Point) => 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 PanControlStateMachine extends TemplateStateMachine<PanEventPayloadMapping, PanContext, PanControlStates> {
constructor(states: Record<PanControlStates, State<PanEventPayloadMapping, PanContext, PanControlStates>>, initialState: PanControlStates, context: PanContext);
/**
* @description Notify the pan input event.
*
* @category Input Flow Control
*/
notifyPanInput(diff: Point): void;
/**
* @description Notify the pan to animation input event.
*
* @category Input Flow Control
*/
notifyPanToAnimationInput(target: Point): void;
/**
* @description Initate the transition.
*
* @category Input Flow Control
*/
initateTransition(): void;
set limitEntireViewPort(limit: boolean);
get limitEntireViewPort(): boolean;
}
/**
* @description The accepting user input state of the pan control state machine.
*
* @category Input Flow Control
*/
export declare class AcceptingUserInputState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {
constructor();
eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates>;
userPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void;
userPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void;
lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void;
lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void;
}
/**
* @description The transition state of the pan control state machine.
*
* @category Input Flow Control
*/
export declare class TransitionState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {
constructor();
eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates>;
userPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates;
userPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates;
transitionPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates;
transitionPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates;
lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): PanControlStates;
lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): PanControlStates;
}
/**
* @description The locked on object state of the pan control state machine.
*
* @category Input Flow Control
*/
export declare class LockedOnObjectState extends TemplateState<PanEventPayloadMapping, PanContext, PanControlStates> {
constructor();
eventReactions: EventReactions<PanEventPayloadMapping, PanContext, PanControlStates>;
lockedOnObjectPanByInputHandler(context: PanContext, payload: PanByInputEventPayload): void;
lockedOnObjectPanToInputHandler(context: PanContext, payload: PanToInputEventPayload): void;
}
/**
* @description Create the object containing the default pan control states.
*
* @category Input Flow Control
*/
export declare function createDefaultPanControlStates(): Record<PanControlStates, State<PanEventPayloadMapping, PanContext, PanControlStates>>;
/**
* @description Create the default pan control state machine.
*
* @category Input Flow Control
*/
export declare function createDefaultPanControlStateMachine(context: PanContext): PanControlStateMachine;
export {};