import { Point } from "../../utils/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; panByViewPort: (delta: Point) => void; panToViewPort: (target: Point) => void; panByWorld: (delta: Point) => void; panToWorld: (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 { constructor(states: Record>, 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 { constructor(); eventReactions: EventReactions; 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 { constructor(); eventReactions: EventReactions; 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 { constructor(); eventReactions: EventReactions; 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>; /** * @description Create the default pan control state machine. * * @category Input Flow Control */ export declare function createDefaultPanControlStateMachine(context: PanContext): PanControlStateMachine; export {};