import { Layout } from './layout';
import * as i0 from "@angular/core";
/**
 * It defines the number of breakpoints that WAC currently support.
 * add more scenarios when WAC is going to support scenarios like tablet etc.
 */
export declare enum SmeResponsiveWindowBreakpointsValue {
    Reflow = 399.98,
    PhoneDown = 767.98,
    PhoneUp
}
/**
 * It defines the current supported scenario for window sizes.
 */
export declare enum SmeResponsiveWindowBreakpoints {
    Reflow = "Reflow",
    PhoneDown = "PhoneDown",
    PhoneUp = "PhoneUp"
}
/**
 * It defines an object to communicate among controls.
 */
export interface SmeResponsiveWindowData {
    width: number;
    height: number;
    size: SmeResponsiveWindowBreakpoints;
    reflowMode: boolean;
    phoneDown: boolean;
    phoneUp: boolean;
}
export declare class SmeResponsiveWindowManagerComponent {
    private layout?;
    /**
     * It defines whether the current window size is for super small window.
     */
    protected internalReflowMode: boolean;
    /**
     * It defines whether the current window size is phone down.
     */
    protected internalPhoneDown: boolean;
    /**
     * It defines whether the current window size is phone up.
     */
    protected internalPhoneUp: boolean;
    /**
     * It defines whether the current solution/tool is using css v2 to support responsive window.
     */
    protected internalCssV2: boolean;
    /**
     * the internal current window responsive mode.
     */
    private internalResponsiveWindowMode;
    /**
     * The array for subscription.
     */
    private subscriptions;
    /**
     * The most recent memory for the last known window information.
     */
    private internalPrevSize;
    /**
     * Gets the current window responsive state.
     */
    get responsiveWindowState(): SmeResponsiveWindowBreakpoints;
    /**
     * Sets the current window responsive state.
     */
    set responsiveWindowState(input: SmeResponsiveWindowBreakpoints);
    /**
     * Gets the value indicating whether css v2 should be used.
     */
    get cssV2(): boolean;
    /**
     * It sets the value for whether the current tool/solution is using css v2 for window responsiveness.
     */
    set cssV2(input: boolean);
    /**
     * Gets the phone down mode.
     */
    get phoneDown(): boolean;
    /**
     * Sets the phone down mode.
     */
    set phoneDown(input: boolean);
    /**
     * Gets the phone up mode.
     */
    get phoneUp(): boolean;
    /**
     * Set the phone up mode.
     */
    set phoneUp(input: boolean);
    /**
     * Gets the reflow mode.
     */
    get reflowMode(): boolean;
    /**
     * Sets the reflow mode.
     */
    set reflowMode(input: boolean);
    /**
     * Gets the width of the window from the window object.
     * Should only be called on layout or window size change.
     */
    get width(): number;
    /**
     * Gets the height of the window from the window object.
     * Should only be called on layout or window size change.
     */
    get height(): number;
    /**
     * Gets the last known window responsive data.
     */
    get prevSize(): SmeResponsiveWindowData;
    /**
     * Gets the window responsive break points.
     */
    get size(): SmeResponsiveWindowBreakpoints;
    /**
     * The manager supports layout component and in the meantime listening to the window size change event.
     * @param layout the layout component.
     */
    constructor(layout?: Layout);
    /**
     * It sets whether the current solution/tool is using the css v2 for window responsiveness.
     */
    setIsCssV2Enabled(): void;
    /**
     * The implementation for checking whether the styles are being set.
     * @returns true if the current tool/solution is using css v2 for window responsiveness.
     */
    private isUsingCssV2;
    /**
     * The functionality to update the core variables for window responsive data.
     * @returns The SmeResponsiveWindowData object
     */
    getSmeResponsiveWindowData(): SmeResponsiveWindowData;
    /**
     * On layout changed event handler, occurs every time the layout has been changed.
     */
    private onLayoutChanged;
    /**
     * The deferred layout changed handler.
     */
    deferredOnLayoutChanged(): void;
    /**
     * To respond to a layout breakpoint changed event.
     * @returns void
     */
    onWindowBreakpointChanged(): void;
    /**
     * Gets the parent element by html tag. By default, go up 10 levels for enhanced performance.
     * @param inputElement The input element.
     * @returns The targeted html element get by the html tag
     */
    getParentElementByTag(inputElement: HTMLElement, parentHtmlTags?: string[], levelExternal?: number, customKeywords?: string, untilTagName?: string): HTMLElement;
    /**
     * The core algorithm for adding and removing classes based on window size and window size settings.
     * @param settings the settings object
     * @param curSettings the current setting
     * @param element the html element for setting up classes.
     * @returns void.
     */
    updateClassArrayOnWindowSize(settings: any, curSettings: string, element: HTMLElement): void;
    /**
     * Merge two arrays with unique items.
     * @param arrayA the input array A
     * @param arrayB the input array B
     * @returns an array that contains unique items from array A and array B
     */
    private uniqueArray;
    /**
     * Guarantees will not remove the classes that needs to be added.
     * @param toBeRemovedClassList the list of classes that needs to be removed.
     * @param toBeAddedClassList the list of classes that needs to be added.
     * @returns the list of classes that needs to be removed and doesn't overlap with the classes that needs to be added.
     */
    private removeExistedItem;
    static ɵfac: i0.ɵɵFactoryDeclaration<SmeResponsiveWindowManagerComponent, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<SmeResponsiveWindowManagerComponent, never, never, {}, {}, never, never, false, never>;
}
