import { DTModel } from "../interface/model";
import { Component } from "../interface/component";
import { DefinedPlugin, PluginOptions } from "../interface/meta";
export declare function definePlugin<P, S extends Object | void, M>(name: string, plugin: PluginOptions<P, S, M>): DefinedPlugin<P, S, M>;
export type Animation<S> = S;
export type AnimationCreator<P, S, M extends DTModel> = {
    type: "animation";
    name: string | RegExp | ((target: Component<M>) => boolean);
    isMatch: (component: Component<M>) => boolean;
    apply: (component: Component<M>, props?: P) => Promise<Animation<S>>;
};
export type AnimationOptions<P, S, M extends DTModel> = (model: Component<M>, props: P) => Animation<S>;
export declare function defineAnimation<P, S extends Object, M extends DTModel>(name: string | RegExp | ((target: Component<M>) => boolean), animation: AnimationOptions<P, S, M>): AnimationCreator<P, S, M>;
