/// <reference types="jquery" />
import { Type, NgModule, NgModuleRef, Provider } from '@angular/core';
import { JitCompiler } from '@angular/compiler';
import * as Models from '../../models';
import * as ICore from '../../models/Icore';
import { Enums, BundleTargets } from './Enums';
export declare module Application {
    function destroyAngularApp(container: any): void;
    function rebootstrapApp(hotReload?: boolean): void;
}
export declare module Core {
    function updateContextInfo(contextInfo: any): void;
    function getContextInfo(): Models.IContextInfo;
    function getLocalization(): any;
    function mergeLocalization(target: any, bundleTarget: BundleTargets): any;
    function refreshContextInfo(): void;
    function registerAotSummaries(ngsummaryPath: any): void;
    function clearAotSummaries(): void;
    function loadAotSummaries(compiler: JitCompiler, aotSummaries?: Array<string>): void;
    function getOmniaControl(controlId: string): ICore.IOmniaControlMetadataExtend;
    function getNgModule(omniaControlId: string): any;
    function getComponent(omniaControlId: string): Type<any>;
    function getRegisteredAdminControls(): Array<ICore.IOmniaAdminControlMetadataExtend>;
    function getRegisteredAdminModules(): Array<any>;
    function getExportsFromWebpackModulePath(modulePath: any, useCache?: boolean): any;
    function getAngularBootstrapMode(): Enums.AngularBootstrapMode;
    function getOmniaControlAllTemplates(controlId: string): Array<{
        id: string;
        title: string;
    }>;
    function getOmniaControlTemplate(controlId: string, templateId: string): {
        moduleTarget: Type<any>;
        ngfactoryModulePath: string;
        component: Type<any>;
    };
    function resourceLoader(): {
        js: (urls: Array<string>) => {
            wait: (callback: (status?: Enums.LoadResourceStatus) => void) => void;
        };
        css: (urls: Array<string>) => void;
    };
    function registerNg1Handler(handler: any): void;
}
export declare function isControlInGluePage(): boolean;
export declare function isGlueEditMode(): boolean;
/**
* Generic factory method for Angular directives
*/
export declare function directiveFactory(directiveClass: any, dependencies: Array<string>): any;
export declare function TemplateId(id: string): (target: any) => void;
export declare function OmniaControlTemplate(obj: ICore.IOmniaControlTemplate): (target: any) => void;
export declare function OmniaControl(obj: Models.IOmniaControlMetadata): (target?: any) => void;
export declare function OmniaAdminControl(obj: ICore.IOmniaAdminControlMetadata): (target: any) => void;
export declare function getNG1Provider(provider: string, callBack: (provider) => void): void;
export declare function getAdminAppSubNavigationNodes(): Array<Models.INavigationNode>;
export declare function getRegisteredAdminModuleMetadata(): NgModule;
export declare module UI {
    interface IImageOption {
        srcUrl: string;
        originalImage: string;
    }
    function toggleSearchbox(triggerButton: any): void;
    function openSPModalDialog(dialogOptions: any): void;
    function buildImageTag(options: IImageOption): string;
    function clearUndoOnTinymce(): void;
}
export declare module Notification {
    import NotificationMessage = Models.Notification.INotificationMessage;
    function setNotificationFunction(showFunction: (message: NotificationMessage) => any, clearFunction: (toasterId: string, toastId: string) => any): void;
    function showNotification(message: NotificationMessage): void;
    function clearNotification(toasterId?: string, toastId?: string): void;
}
export declare module Bootstrapper {
    interface IAsyncDeltaManager {
        add_endRequest: (callback: () => any) => void;
    }
    function resolveScriptViewControlsForMDS(): void;
    class ViewPortControlDictionary {
        [svcId: string]: ICore.IViewPortControl;
    }
    function init(step: number): void;
    function getSpTokenCookieName(): string;
    function ensureSPTokenProxy(force?: boolean): JQueryDeferred<{}>;
    /**
    * Gets the deferred spToken that will be resolved when ready
    */
    function getSPToken(): JQueryDeferred<{}>;
    /**
    * Gets the deferred _masterpageJsDeffered that will be resolved when ready
    */
    function ensureMasterPageJsLoaded(): JQueryDeferred<{}>;
    /**
    * Ensures that the token is loaded
    */
    function ensureSPToken(): void;
    function checkReadPermissionOnNavSrc(callback: () => any): void;
    /**
    * Register directive template
    */
    function registerTemplate(templateId: string): void;
    /**
    * Get directive template
    */
    function getTemplate(templateId: string): string;
    /**
    * Resolve all registered directive templates also for ng1
    */
    function cleanViewCacheIfNeed(): void;
    function loadTemplatesFromServer(templateIdsToLoad: string[], viewCacheKey: string): JQueryPromise<any>;
    function resolveTemplates(force?: boolean): JQueryDeferred<any>;
    function getLocalViews(): {
        then: (resolve?, reject?) => void;
    };
    function injectComponentsView(): void;
    /**
    * Set configuration for SVControl
    */
    function setOmcConfig(omcId: string, config: any): void;
    /**
    * Get configuration for SVControl
    */
    function getOmcConfig(id: string): any;
    /**
    * Reload a ScripView Control
    */
    function blockControl(instanceId: string): void;
    function isControlBlocked(instanceId: string): boolean;
    function isOmniaControlBlockedByFx(controlId: string): boolean;
    function enableGlueLayoutBuilder(editMode: boolean): void;
    function registerControl(control: Models.IOmniaControlMetadata): void;
    function getRegisteredControls(): {
        [id: string]: ICore.IOmniaControlMetadataExtend;
    };
    function getBootstrappedAngular2Modules(): {
        [id: string]: NgModuleRef<any>;
    };
    function resolveOmniaControlsUsingSelector(): void;
    function getOmniaControlSettings(omcDependecies: Array<any>): Promise<any>;
    /**
    * Resolves Omnia Controls
    */
    function resolveOmniaControls(panelContainer?: any, handleViewPortControlEventName?: string, handleBootstrap?: Function, selectorRegisteredControls?: Array<Models.OmniaControlSelectorInsertion>): void;
    function getCachedControls(): {
        controls: Array<any>;
        templates?: Array<string>;
    };
    function cacheControlsIfNeed(controls: Array<any>, templates?: {
        [id: string]: string;
    }, reloadControl?: boolean): void;
    function bootstrapAsyncUseQueue(queues?: Array<ICore.BootstrapQueue>): void;
    function buildBootstrapQueues(controls: Array<any>, templates: any): Array<ICore.BootstrapQueue>;
    function injectControlViewsAndConfigs(controls: any, templates: any): void;
    function getAllTemplates(): any;
    function deleteViewPort(containerId: any): void;
    function addOrUpdateViewPort(containerId: any, settings: any): void;
    function getViewPort(containerId: any): ICore.IViewPortControl;
    function getAllViewPorts(): ViewPortControlDictionary;
    function handleViewPortControlsVisibility(): void;
    function showAllViewPortControls(): void;
    function bootstrapViewPortControl(containerId: string, control: ICore.IViewPortControl): void;
    function bootstrapControl(containerId: string, container: JQuery, svc: any): void;
    function handleControlVisibilityEvent(eventName: string): void;
    module Callbacks {
        /** Registers a callback */
        function add(id: string, callback: (...args: any[]) => void): void;
        /** Calls all registered callbacks with the specified parameters. */
        function fire(id: string, ...args: any[]): void;
        /** Removes all registered callbacks on the specified id */
        function removeById(id: string): void;
    }
}
export declare function checkIfDisplayViewPort(windowWidth: number, viewPortSettings: Models.Control.IControlViewPortSettings): boolean;
export interface IViewPortComponent {
    viewPortSettings: Models.Control.IControlViewPortSettings;
    load: Function;
    destroy: Function;
    loaded: boolean;
}
export declare function registerViewPortComponent(id: string, viewPortSettings: Models.Control.IControlViewPortSettings, loaded: boolean, load: Function, destroy: Function): void;
export declare function handleViewPortComponent(): void;
export declare function LocalizePrefix(prefix?: string): Provider;
export declare module HttpRequestProxy {
    interface IHttpRequestProxyResult {
        then: (resolve?: (data?) => void, reject?: (err?) => void) => void;
    }
    function dispatcher(key: string, request: (resolve: any, reject: any) => void): IHttpRequestProxyResult;
    function loadQuicker(key: string, request: (resolve: any, reject?: any) => void, callBack: (...args: any[]) => void): void;
}
export declare function calculateHeightofScreen(): void;
