UNPKG

@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
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 {};