import { AttributeUpdateType } from '../../common/enums';
import type { IAnimateConfig } from '../../interface/graphic';
export interface IStateTransitionPlan<T> {
    targetAttrs: Partial<T>;
    animateAttrs: Partial<T>;
    noAnimateAttrs: Partial<T>;
}
export interface IStateTransitionAnalysisOptions {
    noWorkAnimateAttr?: Record<string, number>;
    isClear?: boolean;
    getDefaultAttribute?: (key: string) => unknown;
    shouldSkipDefaultAttribute?: (key: string, targetAttrs: Record<string, unknown>) => boolean;
    animateConfig?: IAnimateConfig;
    extraAnimateAttrs?: Record<string, unknown>;
}
export interface IStateTransitionApplyOptions {
    animateConfig?: IAnimateConfig;
    extraAnimateAttrs?: Record<string, unknown>;
    shouldSkipDefaultAttribute?: (key: string, targetAttrs: Record<string, unknown>) => boolean;
}
export interface IStateTransitionGraphic<T> {
    finalAttribute?: Record<string, any>;
    applyAnimationState?: (state: string[], animations: Array<Record<string, any>>) => void;
    setAttributesAndPreventAnimate: (attrs: Partial<T>, forceUpdateTag?: boolean, context?: {
        type: AttributeUpdateType;
    }) => void;
    stopStateAnimates: () => void;
    _emitCustomEvent: (type: string, context?: {
        type: AttributeUpdateType;
    }) => void;
    getNoWorkAnimateAttr: () => Record<string, number>;
    getDefaultAttribute: (key: string) => unknown;
    shouldSkipStateTransitionDefaultAttribute: (key: string, targetAttrs?: Partial<T>) => boolean;
}
export interface IStateTransitionOrchestrator<T> {
    analyzeTransition: (targetAttrs: Partial<T>, hasAnimation?: boolean, options?: IStateTransitionAnalysisOptions) => IStateTransitionPlan<T>;
    applyTransition: (graphic: IStateTransitionGraphic<T>, plan: IStateTransitionPlan<T>, hasAnimation?: boolean, options?: IStateTransitionApplyOptions) => IStateTransitionPlan<T>;
    applyClearTransition: (graphic: IStateTransitionGraphic<T>, targetAttrs: Partial<T>, hasAnimation?: boolean, options?: IStateTransitionApplyOptions) => IStateTransitionPlan<T>;
}
export declare class StateTransitionOrchestrator<T extends Record<string, any> = Record<string, any>> implements IStateTransitionOrchestrator<T> {
    analyzeTransition(targetAttrs: Partial<T>, hasAnimation?: boolean, options?: IStateTransitionAnalysisOptions): IStateTransitionPlan<T>;
    applyTransition(graphic: IStateTransitionGraphic<T>, plan: IStateTransitionPlan<T>, hasAnimation?: boolean, options?: IStateTransitionApplyOptions): IStateTransitionPlan<T>;
    applyClearTransition(graphic: IStateTransitionGraphic<T>, targetAttrs: Partial<T>, hasAnimation?: boolean, options?: IStateTransitionApplyOptions): IStateTransitionPlan<T>;
}
