import { ComponentType } from "@angular/cdk/portal";
import { TemplateRef } from "@angular/core";
import { MatSnackBarConfig } from "@angular/material/snack-bar";
import { TextMaskConfig } from "angular2-text-mask";
import { Observable } from "rxjs";
import { GridPeferences } from "./grid.interface";
export declare type onOff = {
    on: string;
    off: string;
};
export declare type snackBarExtraButtons = {
    label: string;
    class?: string;
    callback: (p?: any) => void;
};
export declare const ComponentLookupRegistry: Map<string, any>;
export declare const ComponentLookup: (key: string) => any;
export declare type notifColors = "success" | "danger" | "warn" | "primary" | "info";
export declare function getElementValue(tab: any, attr: string, params?: any): any;
export interface AnyPropertyFunc {
    (params?: any): any;
}
export interface StringPropertyFunc {
    (params?: any): string;
}
export interface NumberPropertyFunc {
    (params?: any): number;
}
export interface BooleanPropertyFunc {
    (params?: any): boolean;
}
export interface ArrayAnyPropertyFunc {
    (params?: any): any[];
}
export interface ArrayStringPropertyFunc {
    (params?: any): string[];
}
export interface ArrayNumberPropertyFunc {
    (params?: any): number[];
}
export interface ArrayBooleanPropertyFunc {
    (params?: any): boolean[];
}
export interface ApiCallParams {
    params?: any;
    api(params?: any): Observable<any>;
    callback?(result?: any, p?: any): void;
    failCallback?(e?: any, p?: any): void;
    executeAfterCallback?(result?: any, params?: any): void;
    executeAfterFailCallback?(e?: any, p?: any): void;
    finally?(p?: any): void;
}
export interface SnackBarOptions {
    message: string;
    action?: string;
    config?: MatSnackBarConfig;
}
/**
 * Custom Mat-Dialog, either of the three is mandatory: dialogTemplateRef, dialogComponent, componentClassName.
 *
 * If none of them is provided, the modal will not show. Check for console error.
 */
export interface MatDialogParams {
    /**
     * If opening a modal from an <ng-template> View Content
     */
    dialogTemplateRef?: TemplateRef<any>;
    /**
     * Normally, this is being supplied. The component class to be opened.
     */
    dialogComponent?: ComponentType<any>;
    /**
     * To avoid Cyclic dependency, instead of dialogComponent (ComponentClass), supply the component class name in "string" format instead.
     *
     * Beware of the existence of the class though, If not found, the modal will not show. Check for console warning.
     */
    componentClassName?: string;
    data?: any;
    disableClose?: boolean;
    /**
     * Use css class(es) instead of providing width or height. This is also useful to customize the entire modal with class decoration
     */
    panelClass?: string | string[];
    /**
     * Overriding the default width or the width provided by panelClass
     */
    width?: string;
    /**
     * Overriding the default height or the width provided by panelClass
     */
    height?: string;
    position?: any;
    callback?(result: any): void;
}
export interface ConfirmDialogResult {
    isConfirmed: boolean;
    newDate?: any;
    token?: string;
    newValue?: string;
    customOptionData?: any;
    additionalFormData?: any;
}
export interface OptionsAsyncParams {
    api: (params: any) => Observable<any>;
    params: any;
    mapFn?: (result: any, currentValue?: any) => any[];
    requiresQuery?: boolean;
}
export interface FormTemplate {
    key: string;
    value?: any;
    controlType: string;
    type?: "text" | "number";
    list?: any[];
    editable?: boolean;
    isDynamic?: boolean;
    toSave?: boolean;
    disabled?: boolean;
    min?: number;
    max?: number;
    minRows?: number;
    maxRows?: number;
    label?: string;
    required?: boolean;
    placeholder?: string;
    appearance?: string;
    displayKey?: string;
    valueKey?: string;
    options?: any[];
    isHidden?: boolean;
    style?: any;
    inputClass?: string;
    formClass?: any;
    emptyLabel?: string;
    optionsAsyncParams?: OptionsAsyncParams;
    requireSelection?: boolean;
    readonly?: boolean;
    filter?: (searchTerm: any) => any;
    oldValue?: any;
}
export declare enum CONFIRM_DIALOG_TYPE {
    YES_NO = "yesNo",
    DATE_PICKER = "datePicker",
    CUSTOM_OPTIONS = "customOptions",
    TOKEN = "confirmationToken",
    LARGE_TEXT = "largeText",
    GENERIC = "generic"
}
export interface CustomOptionButtons {
    label: string;
    value: any;
    icon?: string;
    isButtonDefault?: boolean;
    buttonColor?: string;
    buttonClass?: any;
}
export declare enum BOOLEAN_FILTER_MODE {
    /**
    * Defaault if not supplied.
    */
    TRUE_FALSE = "trueFalse",
    /**
     * Converts True/False label to Yes/No.
     */
    YES_NO = "yesNo"
}
export interface ITextMask extends TextMaskConfig {
    placeholderChar?: '_' | '\u2000';
    compose?: (rawValue: any) => ITextMask;
}
export interface UserPreferences {
    id: number;
    darkMode: boolean;
    theme: string;
    grid?: GridPeferences[];
}
export interface ValueFilterFunc {
    (params?: any): boolean;
}
export interface GenericResponse {
    myProp: any;
}
export interface UserModel {
    id: number | string;
    name: string;
    email: string;
    user_pref_id?: number;
}
export interface ResponseObj<T> {
    status: {
        code: number;
        message: any;
    };
    content: T;
    response: {
        code: number;
        message: string;
    };
}
export interface SideBarLoaderParams<T> {
    sideBarId: string;
    className: ComponentType<any>;
    data: T;
}
export interface ToolBarHeaderSettings {
    name: string;
    treeSideBar?: {
        enabled: boolean;
        opened: boolean;
    };
    logo?: {
        class: string;
        status: string;
    };
    homeLink?: string;
    rightIcons?: {
        notif: boolean;
        apps: boolean;
        contacts: boolean;
        user: boolean;
    };
}
export interface TabsData {
    path?: string | StringPropertyFunc;
    icon?: string;
    label: string;
    tooltip?: string;
    iconClass?: boolean | AnyPropertyFunc;
    disabled?: boolean | BooleanPropertyFunc;
    isActive?: boolean | BooleanPropertyFunc;
    onClick?: (p: any) => void;
    hidden?: boolean | BooleanPropertyFunc;
    badgeValue?: string | StringPropertyFunc;
    visited?: boolean | BooleanPropertyFunc;
}
