import { Type, ModuleWithProviders, SchemaMetadata, NgModule, NgModuleRef, Component, Provider } from '@angular/core';
import * as Models from '../../models';
export interface OmniaAngular2Bootstrapper {
    bootstrapAngular2HybridApp: (container, modules, configs) => void;
    bootstrapAngular2App: (component) => void;
}
export declare module Application {
    function bootstrapAngular(containerId: any, optionalCallback: Function): void;
    function destroyAngularApp(container: any): void;
}
export interface IContextInfo {
    masterpageScriptLoaded: boolean;
    tid: string;
    turl: string;
    cdnUrl: string;
    foundationUrl: string;
    appRedirectUrl: string;
    navigationSourceUrl: string;
    tokenKey: string;
    tokenExpireTime: number;
    apiBaseUrl: string;
    coreServicesUrl: string;
    language: string;
    featureResourceId: string;
    tadminurl: string;
    isOnPrem: boolean;
    authorizedRoles: string;
    customConfigurations: any;
    defaultTextAndIconColor: string;
    defaultBackgroundColor: string;
    hasReadPermissionOnNavSrc: boolean;
    siteCollectionRelativeUrl: string;
    siteRelativeUrl: string;
    siteUrl: string;
    siteCollectionUrl: string;
    pageUrl: string;
    pageItemId: string;
    userPermissions: IUserContext;
    isGluePage: boolean;
    defaultPageItemId?: number;
}
export interface IUserContext {
    hasFullPagePermission: boolean;
}
export interface ITokenCookie {
    loginName: string;
    token: string;
}
export interface INavSourcesPermissionCookie {
    navSourceUrl: string;
    hasReadPermission: boolean;
}
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: Function) => void;
export declare function getNgModule(controlId: string): any;
export declare function getComponent(controlId: string): any;
export interface BootstrapQueue {
    data?: any;
    priority: number;
    bootstrapFunction: (data) => void;
}
export interface OmniaControlSelectorInsertion {
    instanceId: string;
    cssClass?: string;
    insertTo: any;
    scope?: string;
    uiControl?: boolean;
    sequence?: number;
    priority?: number;
    controlContainer?: JQuery;
    delayBootstrap?: () => Promise<void>;
}
export interface OmniaControlMetadata extends Component {
    id: string;
    templateId?: string;
    enableSettings?: boolean;
    enableSkeletonLoading?: boolean;
    onBootstrapping?: () => void;
    title?: string;
    icon?: string;
    group?: string;
    showInPageDesigner?: boolean;
    showInLayoutDesigner?: boolean;
    insertUsingSelector?: OmniaControlSelectorInsertion | Array<OmniaControlSelectorInsertion>;
    modulePath?: string;
    enableAot?: boolean;
    providers?: Provider[];
    declarations?: Array<Type<any> | any[]>;
    imports?: Array<Type<any> | ModuleWithProviders | any[]>;
    schemas?: Array<SchemaMetadata | any[]>;
    exports?: Array<Type<any> | any[]>;
}
export declare function OmniaControl(obj: OmniaControlMetadata): (target: any) => void;
export interface IOmniaAdminControl {
    selector: string;
    componentTarget?: any;
    moduleTarget?: any;
}
export interface OmniaAdminControlMetadata extends Component {
    templateId?: string;
    navigation: Models.INavigationNode;
    providers?: Provider[];
    declarations?: Array<Type<any> | any[]>;
    imports?: Array<Type<any> | ModuleWithProviders | any[]>;
    schemas?: Array<SchemaMetadata | any[]>;
    exports?: Array<Type<any> | any[]>;
}
export declare function OmniaAdminControl(obj: OmniaAdminControlMetadata): (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 Logging {
    enum LogTypes {
        Info = 0,
        Warning = 1,
        Error = 2,
    }
    /**
   * Logs the text to the console
   */
    function Log(itemToLog: any, logType: LogTypes): void;
    function LogTime(message: any, start?: number): void;
    function LogTimeWithThresholds(message: string, start: number, maxTimeWarning: number, maxTimeError: number): void;
}
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 {
    import ControlViewPortSettings = Models.Control.IControlViewPortSettings;
    interface IAsyncDeltaManager {
        add_endRequest: (callback: () => any) => void;
    }
    function resolveScriptViewControlsForMDS(): void;
    interface IViewPortControl {
        viewPortSettings?: ControlViewPortSettings;
        svc?: any;
        html?: string;
        bootstrapped?: boolean;
    }
    class ViewPortControlDictionary {
        [svcId: string]: IViewPortControl;
    }
    function init(step: number): void;
    function getSpTokenCookieName(): string;
    function ensureSPTokenProxy(force?: boolean): any;
    /**
    * Gets the deferred spToken that will be resolved when ready
    */
    function getSPToken(): any;
    /**
    * Gets the deferred _masterpageJsDeffered that will be resolved when ready
    */
    function ensureMasterPageJsLoaded(): any;
    /**
    * Ensures that the token is loaded
    */
    function ensureSPToken(): any;
    /**
    * The jsonp callback to get token onprem
    */
    function setTokenKeyOnPrem(tokenKeyInfo: string): void;
    function checkReadPermissionOnNavSrc(callback: () => any): void;
    /**
    * Register directive template
    */
    function registerTemplate(templateId: string): void;
    /**
    * Get directive template
    */
    function getTemplate(templateId: string): any;
    /**
    * Resolve all registered directive templates
    */
    function resolveTemplates(force?: boolean): any;
    /**
    * 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 reloadScriptViewControl(container: JQuery): any;
    interface IOmniaControl {
        id: string;
        title: string;
        icon: string;
        group: string;
        selector: string;
        viewId?: string;
        enableSettings: boolean;
        priority?: number;
        enableSkeletonLoading: boolean;
        insertUsingSelector?: OmniaControlSelectorInsertion | Array<OmniaControlSelectorInsertion>;
        component?: any;
        showInPageDesigner?: boolean;
        showInLayoutDesigner?: boolean;
    }
    function blockControl(instanceId: string): void;
    function isControlBlocked(instanceId: string): any;
    function registerControl(control: IOmniaControl): void;
    function getRegisteredControls(): {
        [id: string]: IOmniaControl;
    };
    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<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<BootstrapQueue>): void;
    function buildBootstrapQueues(controls: Array<any>, templates: any): Array<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): IViewPortControl;
    function getAllViewPorts(): ViewPortControlDictionary;
    function handleViewPortControlsVisibility(): void;
    function showAllViewPortControls(): void;
    function bootstrapViewPortControl(containerId: string, control: IViewPortControl): void;
    function bootstrapControl(containerId: string, container: JQuery, svc: any): void;
    function handleControlVisibilityEvent(eventName: 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;
