import { Module } from './module';
import { Application } from './Application';
declare interface Animate {
    el: Element;
    duration: Function;
    origin: Function;
}
declare interface ModuleStatus {
    init: boolean;
    preload: boolean;
    prefetch: boolean;
    prerender: boolean;
}
declare interface ModuleElements {
    container: HTMLElement;
}
declare interface ModuleResources {
    script?: Array<string>;
    image?: Array<string>;
    worker?: Array<string>;
    video?: Array<string>;
    audio?: Array<string>;
    font?: Array<string>;
    style?: Array<string>;
}
declare interface ModuleManifest {
    config: ModuleConfig;
    resources?: ModuleResources;
    events?: ModuleEvents;
}
declare interface ModuleTouchBorder {
    topHolder: HTMLElement;
    rightHolder: HTMLElement;
    bottomHolder: HTMLElement;
    leftHolder: HTMLElement;
    mainHolder: HTMLElement;
}
declare interface ModuleConfig {
    title: string;
    rel?: 'module' | 'frameworks' | 'system';
    level: number;
    source: {
        src?: string;
        html?: string;
    };
    timeout?: number;
    render?: (target: HTMLElement) => void;
    prerender?: Array<string>;
    free: boolean;
    animation?: string | boolean | Array<string> | Array<Function> | Function;
    background?: boolean | 'auto';
    singleFlow?: boolean;
    index?: string;
    limit?: number;
    notFind?: string;
    color?: string;
    portal?: boolean;
    events?: ModuleEvents;
    capture?: string | ((resolve: {
        path: string;
        origin: string;
        host: string;
        search: string;
    }, url: string) => boolean);
    transient?: boolean;
    allowHosts?: Array<string>;
    touchBorder?: (borders: ModuleTouchBorder, module: Module, application: Application) => void;
    apply?: Array<'smart-setTimeout' | 'smart-setInterval' | 'link-in-new-window' | 'tap-highlight' | ['tap-highlight', string]>;
    inject?: (w: Window, m: Module) => void;
    sandbox?: 'allow-same-origin' | 'allow-scripts' | 'allow-forms' | 'allow-modals' | 'allow-orientation-lock' | 'allow-popups' | 'allow-pointer-lock' | 'allow-popups-to-escape-sandbox' | 'allow-presentation' | 'allow-top-navigation' | 'allow-top-navigation-by-user-activation' | 'allow-downloads-without-user-activation' | 'allow-storage-access-by-user-activation' | 'allow-top-navigation-by-user-activation' | string;
}
declare interface ModuleEvents {
    transformStart: () => void | boolean;
    transformEnd: () => void;
    start: () => void;
    load: () => void;
    loadError: () => void;
    preload: () => void;
    destroy: () => void;
}
declare interface InjectBridgeData {
    config: ModuleConfig;
    application: Application;
    container: HTMLElement;
}
declare interface TransformAnimateEvent {
    x: number;
    y: number;
    in: Animate;
    out: Animate;
    view: Array<HTMLElement>;
    width: number;
    height: number;
    viewport: Array<HTMLElement>;
    modules: Array<Module>;
    reverse: boolean;
    direction: number;
    backset: number;
    origin: string | Array<number>;
    attach: string | Array<number>;
    touches: TouchEvent | undefined;
    callback: Function;
}
declare interface TransformOptions {
    index: string;
    defaultIndex: string;
    singleFlow?: boolean;
    singleLock?: boolean;
    notFound?: string;
    limit?: number;
    exists?: boolean;
    defaultAnimation?: ModuleConfig['animation'];
}
export { InjectBridgeData, TransformOptions, TransformAnimateEvent, Animate, ModuleStatus, ModuleElements, ModuleResources, ModuleManifest, ModuleEvents, ModuleConfig, Module, Application };
