/// <reference path="./sigApi.ApiBase.d.ts" />
/// <reference path="./sigApi.StyleClass.d.ts" />
/// <reference path="./sigApi.StyleClassList.d.ts" />

declare namespace SigApi {
    interface ApiDefaultStyleManager extends ApiBase {
        /**
         * Gets an Array of StyleClassList objects containing all default styles, as far as defined, for the controls used in this project.
         * 
         * @returns {StyleClassList[]} Array of StyleClassList Objects
         */
        getAllControlStyles(): StyleClassList[]
        /**
         * Gets an Array of StyleClassList objects containing all default styles, as far as defined, for a specific control.
         * 
         * @param {string} tagname HTML tag of the control
         * 
         * @returns {StyleClassList[]} Array of StyleClassList Objects for a specific control
         */
        getDefaultStyleListForControl(tagname: string): StyleClassList[]
        /**
         * Gets a StyleClass object containing all default styles, as far as defined, for a specific control and style class.
         * 
         * @param {string} controltagnameName HTML tag of the control
         * @param {string} [className=SIG_CONST.DEFAULT_STYLE_CLASS] The name of the style class
         * 
         * @returns {StyleClass} Containing the class name and a list of DefaultStyle Properties
         */
        getDefaultStyleByControlAndStyle(
            tagname: string,
            className?: string
        ): StyleClass | null
        /**
        * Gets the StyleClass definition as JSON object containing all default styles, as far as defined, for a specific control and style class
        *
        *  @param {string} tagname HTML tag of the control
        *  @param {string} [className=SIG_CONST.DEFAULT_STYLE_CLASS] The name of the style class
        * 
        *  @returns {object} Contains the default styles for a specific control / styleclass name
        */
        getDefaultStylingAsJson(tagname: string, className?: string): any
        /**
         * Gets an Array of StyleClass object containing all default styles, as far as defined, for the windows used in this project.
         * 
         * @returns {StyleClass[]} Containing all StyleClasses defined for windows
         */
        getWindowDefaultStyles(): StyleClass[]
        /**
         * Gets a JSON Object of StyleClass objects containing all default styles, as far as defined, for the windows used in this project.
         * 
         * @returns {object} Contains all StyleClasses defined for windows
         */
        getWindowDefaultStylesAsJson(): any
        /**
         * Gets a StyleClass object containing all default styles for a specific style class name, as far as defined, for the windows used in this project.
         * 
         * @param {string} [className=SIG_CONST.DEFAULT_STYLE_CLASS] The name of the style class
         * 
         * @returns {StyleClass} Containing the windows default styles as far as defined
         */
        getWindowDefaultStyle(className?: string): StyleClass | null
        /**
         * Gets a JSON object containing all default styles for a specific style class name, as far as defined, for the windows used in this project.
         * 
         * @param {string} [className=SIG_CONST.DEFAULT_STYLE_CLASS] The name of the style class
         * 
         * @returns {object} Contains the windows default styles as far as defined
         */
        getWindowDefaultStyleAsJson(className?: string): any
        /** 
         * Applies the default style class set at the property of the parent control to the given shadow dom elements in the parent control.
         * 
         * If no propName is specified the default style will be applied.
         * 
         * @param {string} [id=undefined] The Instance ID of the parent control
         * @param {NodeList|Node} [controls=undefined] Shadow dom control(s) that should be styled
         * @param {string} [propName = undefined] "publishName" of the property linked to the shadow dom elements at the parent control ("name" is used if no "publishName" is defined)
         * @param {string[]} [include=undefined] Filter which properties should be applied, ignored if empty or undefined (include "elementMainClass", if CSS class should be applied)
         * @param {string[]} [exclude=undefined] Filter which properties should not be applied, ignored if empty or undefined (include "elementMainClass", if CSS class should not be applied)
         * @param {boolean} [disableRuntimeUpdates=false] If set, properties will only be applied once at function call (may affect dynamic properties like dataPoint values, checkbits, schemes, ...)
         * 
         * @returns {boolean} Style has been applied = true, else false
         */
        setStylingByPropName(
            id?: string,
            controls?: NodeList | Node,
            propName?: string,
            include?: string[],
            exclude?: string[],
            disableRuntimeUpdates?: boolean
        ): boolean
        /** 
         * Applies the given style class to the given shadow dom elements in the parent control
         * 
         * If no className is specified the default style will be applied.
         * 
         * @param {string} [id=undefined] The Instance ID of the parent control
         * @param {NodeList|Node} [controls=undefined] Shadow dom control(s) that should be styled
         * @param {string} [className=sigAPI.SIG_CONST.DEFAULT_STYLE_CLASS] Name of the style class that should be applied to the shadow dom elements
         * @param {string[]} [include=undefined] Filter which properties should be applied, ignored if empty or undefined (include "elementMainClass", if CSS class should be applied)
         * @param {string[]} [exclude=undefined] Filter which properties should not be applied, ignored if empty or undefined (include "elementMainClass", if CSS class should not be applied)
         * @param {boolean} [disableRuntimeUpdates=false] If set, properties will only be applied once at function call (may affect dynamic properties like dataPoint values, checkbits, schemes, ...)
         * 
         * @returns {boolean} Style has been applied = true, else false
         */
        setStylingByClassName(
            id?: string,
            controls?: NodeList | Node,
            className?: string,
            include?: string[],
            exclude?: string[],
            disableRuntimeUpdates?: boolean
        ): boolean
        /**
         * Gets a JSON object containing the current state of the default styling for a given control and style class.
         * 
         * If no style class is specified the default style will be returned.
         * 
         * @param {string} tagname HTML tag of the control
         * @param {string} [className=SIG_CONST.DEFAULT_STYLE_CLASS] Style Class 
         * 
         * @returns {object} Contains the current state of the default styling for the given control and style class
         */
        getStylingByClassName(tagname: string, className?: string): any
        /**
         * Gets an Array of all style classes for a given control
         * 
         * @param {string} tagName HTML tag of the control
         * 
         * @returns {string[]} containing all Style Classes for a given control
         */
        getStyleClassesByTagname(tagname: string): string[]
        /**
         * Returns the name of the style class that should be applied to shadow dom elements linked to the property with the given publish name
         * 
         * @param {string} id The Instance ID of the parent control
         * @param {string} propName "publishName" of the property at the parent control ("name" is used if no "publishName" is defined)
         * 
         * @returns {string} Name of the style class that should be applied to shadow dom elements linked to the property with the given publish name
         */
        getStyleClassByPropName(id: string, propName: string): string
        /**
         * Gets a JSON object containing the current state of the default styling for all shadow dom controls linked to the given property at the parent control.
         * 
         * @param {string} id The Instance ID of the parent control
         * @param {string} propName "publishName" of the property at the parent control ("name" is used if no "publishName" is defined)
         * 
         * @returns {object} Contains the current state of the default styling for all shadow dom controls linked to the given property at the parent control
         */
        getStylingByPropName(id: string, propName: string): any
        /**
         * Function to check if parameter object is a instanceof StyleClassList.
         * This function can be used without importing the type StyleClassList to be used with the instanceof operator.
         * @param {*} object Any object to type check
         * @returns {boolean} Returns true if parameter object is instanceof StyleClassList, else false
         */
        instanceofStyleClassList(object: any): boolean
        /**
         * Function to check if parameter object is a instanceof StyleClass.
         * This function can be used without importing the type StyleClass to be used with the instanceof operator.
         * @param {*} object Any object to type check
         * @returns {boolean} Returns true if parameter object is instanceof StyleClass, else false
         */
        instanceofStyleClass(object: any): boolean
    }
}
