/// <reference path="types/url.d.ts" />
import { ContainerView, EventData, Property } from "@nativescript/core/ui/core/view";
export * from "@nativescript/core/ui/core/view";
export interface ViewPortProperties {
    width?: number | "device-width";
    height?: number | "device-height";
    initialScale?: number;
    maximumScale?: number;
    minimumScale?: number;
    userScalable?: boolean;
}
export declare type CacheMode = "default" | "cache_first" | "no_cache" | "cache_only" | "normal";
export declare const autoInjectJSBridgeProperty: Property<WebViewExtBase, boolean>;
export declare const builtInZoomControlsProperty: Property<WebViewExtBase, boolean>;
export declare const cacheModeProperty: Property<WebViewExtBase, CacheMode>;
export declare const databaseStorageProperty: Property<WebViewExtBase, boolean>;
export declare const domStorageProperty: Property<WebViewExtBase, boolean>;
export declare const debugModeProperty: Property<WebViewExtBase, boolean>;
export declare const displayZoomControlsProperty: Property<WebViewExtBase, boolean>;
export declare const supportZoomProperty: Property<WebViewExtBase, boolean>;
export declare const srcProperty: Property<WebViewExtBase, string>;
export declare const scrollBounceProperty: Property<WebViewExtBase, boolean>;
export declare type ViewPortValue = boolean | ViewPortProperties;
export declare const viewPortProperty: Property<WebViewExtBase, ViewPortValue>;
export declare enum EventNames {
    LoadFinished = "loadFinished",
    LoadProgress = "loadProgress",
    LoadStarted = "loadStarted",
    ShouldOverrideUrlLoading = "shouldOverrideUrlLoading",
    TitleChanged = "titleChange",
    WebAlert = "webAlert",
    WebConfirm = "webConfirm",
    WebConsole = "webConsole",
    EnterFullscreen = "enterFullscreen",
    ExitFullscreen = "exitFullscreen",
    WebPrompt = "webPrompt"
}
export interface LoadJavaScriptResource {
    resourceName: string;
    filepath: string;
}
export interface LoadStyleSheetResource {
    resourceName: string;
    filepath: string;
    insertBefore?: boolean;
}
export interface InjectExecuteJavaScript {
    scriptCode: string;
    name: string;
}
export interface WebViewExtEventData extends EventData {
    object: WebViewExtBase;
}
export interface LoadEventData extends WebViewExtEventData {
    url: string;
    navigationType?: NavigationType;
    error?: string;
}
export interface LoadStartedEventData extends LoadEventData {
    eventName: EventNames.LoadStarted;
}
export interface LoadFinishedEventData extends LoadEventData {
    eventName: EventNames.LoadFinished;
}
export interface ShouldOverrideUrlLoadEventData extends LoadEventData {
    eventName: EventNames.ShouldOverrideUrlLoading;
    httpMethod: string;
    cancel?: boolean;
}
export interface ShouldOverideUrlLoadEventData extends ShouldOverrideUrlLoadEventData {
}
export interface LoadProgressEventData extends WebViewExtEventData {
    eventName: EventNames.LoadProgress;
    url: string;
    progress: number;
}
export interface TitleChangedEventData extends WebViewExtEventData {
    eventName: EventNames.LoadProgress;
    url: string;
    title: string;
}
export interface WebAlertEventData extends WebViewExtEventData {
    eventName: EventNames.WebAlert;
    url: string;
    message: string;
    callback: () => void;
}
export interface WebPromptEventData extends WebViewExtEventData {
    eventName: EventNames.WebPrompt;
    url: string;
    message: string;
    defaultText?: string;
    callback: (response?: string) => void;
}
export interface WebConfirmEventData extends WebViewExtEventData {
    eventName: EventNames.WebConfirm;
    url: string;
    message: string;
    callback: (response: boolean) => void;
}
export interface WebConsoleEventData extends WebViewExtEventData {
    eventName: EventNames.WebConsole;
    url: string;
    data: {
        lineNo: number;
        message: string;
        level: string;
    };
}
export interface WebViewEventData extends WebViewExtEventData {
    data?: any;
}
export interface EnterFullscreenEventData extends WebViewExtEventData {
    eventName: EventNames.EnterFullscreen;
    url: string;
    exitFullscreen(): void;
}
export interface ExitFullscreenEventData extends WebViewExtEventData {
    eventName: EventNames.ExitFullscreen;
    url: string;
}
export declare type NavigationType = "linkClicked" | "formSubmitted" | "backForward" | "reload" | "formResubmitted" | "other" | void;
export declare class UnsupportedSDKError extends Error {
    constructor(minSdk: number);
}
export declare class WebViewExtBase extends ContainerView {
    static readonly supportXLocalScheme: boolean;
    static isFetchSupported: boolean;
    static isPromiseSupported: boolean;
    android: any;
    ios: any;
    readonly interceptScheme: string;
    static readonly loadStartedEvent: EventNames;
    static readonly loadFinishedEvent: EventNames;
    static readonly shouldOverrideUrlLoadingEvent: EventNames;
    static readonly loadProgressEvent: EventNames;
    static readonly titleChangedEvent: EventNames;
    static readonly webAlertEvent: EventNames;
    static readonly webConfirmEvent: EventNames;
    static readonly webPromptEvent: EventNames;
    static readonly webConsoleEvent: EventNames;
    static readonly enterFullscreenEvent: EventNames;
    static readonly exitFullscreenEvent: EventNames;
    readonly supportXLocalScheme: boolean;
    src: string;
    autoInjectJSBridge: boolean;
    debugMode: boolean;
    builtInZoomControls: boolean;
    displayZoomControls: boolean;
    databaseStorage: boolean;
    domStorage: boolean;
    supportZoom: boolean;
    scrollBounce: boolean;
    viewPortSize: ViewPortValue;
    cacheMode: "default" | "no_cache" | "cache_first" | "cache_only";
    protected autoInjectScriptFiles: LoadJavaScriptResource[];
    protected autoInjectStyleSheetFiles: LoadStyleSheetResource[];
    protected autoInjectJavaScriptBlocks: InjectExecuteJavaScript[];
    protected tempSuspendSrcLoading: boolean;
    _onLoadFinished(url: string, error?: string): Promise<LoadFinishedEventData>;
    _onLoadStarted(url: string, navigationType?: NavigationType): void;
    _onShouldOverrideUrlLoading(url: string, httpMethod: string, navigationType?: NavigationType): boolean | undefined;
    _loadProgress(progress: number): void;
    _titleChanged(title: string): void;
    _webAlert(message: string, callback: () => void): boolean;
    _webConfirm(message: string, callback: (response: boolean | null) => void): boolean;
    _webPrompt(message: string, defaultText: string, callback: (response: string | null) => void): boolean;
    _webConsole(message: string, lineNo: number, level: string): boolean;
    _onEnterFullscreen(exitFullscreen: () => void): boolean;
    _onExitFullscreen(): boolean;
    _loadUrl(src: string): void;
    _loadData(src: string): void;
    stopLoading(): void;
    readonly canGoBack: boolean;
    readonly canGoForward: boolean;
    goBack(): void;
    goForward(): void;
    reload(): void;
    resolveLocalResourceFilePath(filepath: string): string | void;
    registerLocalResource(name: string, filepath: string): void;
    unregisterLocalResource(name: string): void;
    getRegisteredLocalResource(name: string): string | void;
    loadUrl(src: string): Promise<LoadFinishedEventData>;
    loadJavaScriptFile(scriptName: string, filepath: string): Promise<void>;
    loadJavaScriptFiles(files: LoadStyleSheetResource[]): Promise<void>;
    loadStyleSheetFile(stylesheetName: string, filepath: string, insertBefore?: boolean): Promise<void>;
    loadStyleSheetFiles(files: LoadStyleSheetResource[]): Promise<void>;
    autoLoadJavaScriptFile(resourceName: string, filepath: string): void;
    removeAutoLoadJavaScriptFile(resourceName: string): void;
    autoLoadStyleSheetFile(resourceName: string, filepath: string, insertBefore?: boolean): void;
    removeAutoLoadStyleSheetFile(resourceName: string): void;
    autoExecuteJavaScript(scriptCode: string, name: string): void;
    removeAutoExecuteJavaScript(name: string): void;
    normalizeURL(url: string): string;
    protected ensureFetchSupport(): Promise<void>;
    protected loadFetchPolyfill(): Promise<void>;
    protected ensurePromiseSupport(): Promise<void>;
    protected loadPromisePolyfill(): Promise<void>;
    protected ensurePolyfills(): Promise<void>;
    executeJavaScript<T>(scriptCode: string, stringifyResult?: boolean): Promise<T>;
    executePromise<T>(scriptCode: string, timeout?: number): Promise<T>;
    executePromises<T>(scriptCodes: string[], timeout?: number): Promise<T | void>;
    generateLoadJavaScriptFileScriptCode(resourceName: string, path: string): Promise<string>;
    generateLoadCSSFileScriptCode(resourceName: string, path: string, insertBefore?: boolean): Promise<string>;
    protected injectWebViewBridge(): Promise<void>;
    protected injectViewPortMeta(): Promise<void>;
    generateViewPortCode(): Promise<string | null>;
    protected parseWebViewJavascriptResult(result: any): any;
    writeTrace(message: string, type?: number): void;
    emitToWebView(eventName: string, data: any): void;
    onWebViewEvent(eventName: string, data: any): void;
    getTitle(): Promise<string | void>;
    zoomIn(): boolean;
    zoomOut(): boolean;
    zoomBy(zoomFactor: number): void;
    fixLocalResourceName(resourceName: string): string;
}
export interface WebViewExtBase {
    on(eventNames: string, callback: (data: WebViewEventData) => void, thisArg?: any): any;
    once(eventNames: string, callback: (data: WebViewEventData) => void, thisArg?: any): any;
    on(event: EventNames.ShouldOverrideUrlLoading, callback: (args: ShouldOverrideUrlLoadEventData) => void, thisArg?: any): any;
    once(event: EventNames.ShouldOverrideUrlLoading, callback: (args: ShouldOverrideUrlLoadEventData) => void, thisArg?: any): any;
    on(event: EventNames.LoadStarted, callback: (args: LoadStartedEventData) => void, thisArg?: any): any;
    once(event: EventNames.LoadStarted, callback: (args: LoadStartedEventData) => void, thisArg?: any): any;
    on(event: EventNames.LoadFinished, callback: (args: LoadFinishedEventData) => void, thisArg?: any): any;
    once(event: EventNames.LoadFinished, callback: (args: LoadFinishedEventData) => void, thisArg?: any): any;
    on(event: EventNames.LoadProgress, callback: (args: LoadProgressEventData) => void, thisArg?: any): any;
    once(event: EventNames.LoadProgress, callback: (args: LoadProgressEventData) => void, thisArg?: any): any;
    on(event: EventNames.TitleChanged, callback: (args: TitleChangedEventData) => void, thisArg?: any): any;
    once(event: EventNames.TitleChanged, callback: (args: TitleChangedEventData) => void, thisArg?: any): any;
    on(event: EventNames.WebAlert, callback: (args: WebAlertEventData) => void, thisArg?: any): any;
    once(event: EventNames.WebAlert, callback: (args: WebAlertEventData) => void, thisArg?: any): any;
    on(event: EventNames.WebConfirm, callback: (args: WebConfirmEventData) => void, thisArg?: any): any;
    once(event: EventNames.WebConfirm, callback: (args: WebConfirmEventData) => void, thisArg?: any): any;
    on(event: EventNames.WebPrompt, callback: (args: WebPromptEventData) => void, thisArg?: any): any;
    once(event: EventNames.WebPrompt, callback: (args: WebPromptEventData) => void, thisArg?: any): any;
    on(event: EventNames.WebConsole, callback: (args: WebConsoleEventData) => void, thisArg?: any): any;
    once(event: EventNames.WebConsole, callback: (args: WebConsoleEventData) => void, thisArg?: any): any;
}
