import { AnimationController, AnimationDataTypeArray, AnimationTaskMapArray, ElementProp, TransitionAnimationType, TransitionResolver, TransitionTask } from "../../elements/transition/type";
import { GameState } from "../../../player/gameState";
export declare abstract class Transition<T extends HTMLElement = HTMLElement, U extends TransitionAnimationType[] = any> {
    static AnimationType: typeof TransitionAnimationType;
    /**
     * Create a transition task, this method shouldn't have any side effects
     */
    abstract createTask(gameState: GameState): TransitionTask<T, U>;
    abstract copy(): any;
    /**@package */
    requestAnimations(tasks: AnimationTaskMapArray<U>): AnimationController<U>;
    /**@package */
    toFinalStyle(task: TransitionTask<T, U>): ElementProp<T>[];
    /**
     * Mark the resolver as the current state
     *
     * any resolver that is marked as current will be applied to the current state
     * and be disposed of when the transition is completed
     */
    asPrev<U extends TransitionAnimationType[] = any>(resolver: (...args: AnimationDataTypeArray<U>) => ElementProp<T>): TransitionResolver<T, U>;
    /**
     * Mark the resolver as the target state
     *
     * any resolver that is marked as a target will be kept as the target state after the transition
     */
    asTarget<U extends TransitionAnimationType[] = any>(resolver: (...args: AnimationDataTypeArray<U>) => ElementProp<T>): TransitionResolver<T, U>;
    /**@package */
    private requestMotion;
}
