import { ElementRef, IterableDiffers, KeyValueDiffers, Renderer2, DoCheck } from '@angular/core';
import * as i0 from "@angular/core";
/**
 * @usageNotes
 * ```
 *     <some-element [evoUiClass]="'first second'">...</some-element>
 *
 *     <some-element [evoUiClass]="['first', 'second']">...</some-element>
 *
 *     <some-element [evoUiClass]="{'first': true, 'second': true, 'third': false}">...</some-element>
 *
 *     <some-element [evoUiClass]="stringExp|arrayExp|objExp">...</some-element>
 *
 *     <some-element [evoUiClass]="{'class1 class2 class3' : true}">...</some-element>
 * ```
 *
 * @description
 *
 * Adds and removes CSS classes on an HTML element.
 *
 * The CSS classes are updated as follows, depending on the type of the expression evaluation:
 * - `string` - the CSS classes listed in the string (space delimited) are added,
 * - `Array` - the CSS classes declared as Array elements are added,
 * - `Object` - keys are CSS classes that get added when the expression given in the value
 *              evaluates to a truthy value, otherwise they are removed.
 */
export declare class EvoUiClassDirective implements DoCheck {
    private _iterableDiffers;
    private _keyValueDiffers;
    private _ngEl;
    private _renderer;
    private iterableDiffer;
    private keyValueDiffer;
    private initialClasses;
    private rawClass;
    constructor(_iterableDiffers: IterableDiffers, _keyValueDiffers: KeyValueDiffers, _ngEl: ElementRef, _renderer: Renderer2);
    set klass(value: string);
    set evoUiClass(value: string | string[] | Set<string> | {
        [klass: string]: any;
    });
    ngDoCheck(): void;
    private applyKeyValueChanges;
    private applyIterableChanges;
    /**
     * Applies a collection of CSS classes to the DOM element.
     *
     * For argument of type Set and Array CSS class names contained in those collections are always
     * added.
     * For argument of type Map CSS class name in the map's key is toggled based on the value (added
     * for truthy and removed for falsy).
     */
    private applyClasses;
    /**
     * Removes a collection of CSS classes from the DOM element. This is mostly useful for cleanup
     * purposes.
     */
    private removeClasses;
    private toggleClass;
    static ɵfac: i0.ɵɵFactoryDeclaration<EvoUiClassDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<EvoUiClassDirective, "[evoUiClass]", never, { "klass": "class"; "evoUiClass": "evoUiClass"; }, {}, never>;
}
