import CoreRouter = require('../ojcorerouter');
import { ModuleElementAnimation, ModuleViewModel } from '../ojmodule-element';
import ModuleAnimations = require('../ojmoduleanimations');
declare class ModuleRouterAdapter<D extends {
    [key: string]: any;
} = {
    [key: string]: any;
}, P extends {
    [key: string]: any;
} = {
    [key: string]: any;
}> {
    animation: ModuleElementAnimation;
    koObservableConfig: {
        view: Node[];
        viewModel: ModuleViewModel;
    };
    constructor(router: CoreRouter<D, P>, options?: {
        viewPath?: string;
        viewModelPath?: string;
        pathKey?: string;
        require?: ((module: string) => any) | ((modules: string[], ready?: any, errback?: any) => void);
        animationCallback?: (animationContext: ModuleRouterAdapter.AnimationCallbackParameters) => ModuleAnimations.Animations | ModuleElementAnimation;
    });
}
declare namespace ModuleRouterAdapter {
    // tslint:disable-next-line interface-over-type-literal
    type AnimationCallbackParameters = {
        node: Element;
        previousState: any;
        previousViewModel: any;
        state: any;
        viewModel: any;
    };
    // tslint:disable-next-line interface-over-type-literal
    type ViewModelParameters<D, P> = {
        params: P;
        parentRouter: CoreRouter<D, P>;
        router: CoreRouter<D, P>;
        routerState: CoreRouter.CoreRouterState<D, P>;
    };
}
export = ModuleRouterAdapter;
