import { __extends } from "tslib";
import { Component, Input } from '@angular/core';
import { DataAnnotationDisplayMode_$type } from "./DataAnnotationDisplayMode";
import { AnnotationAppearanceMode_$type } from "./AnnotationAppearanceMode";
import { IgxAxisComponent } from "./igx-axis-component";
import { DataAnnotationTargetMode_$type } from "./DataAnnotationTargetMode";
import { IgxAnnotationLayerComponent } from "./igx-annotation-layer-component";
import { ensureEnum, ensureBool, brushToString, stringToBrush } from "igniteui-angular-core";
import { Thickness } from "igniteui-angular-core";
import * as i0 from "@angular/core";
/**
 * Represents a base annotation layer that displays annotations over an axis.
*/
var IgxDataAnnotationAxisLayerComponent = /** @class */ /*@__PURE__*/ (function (_super) {
    __extends(IgxDataAnnotationAxisLayerComponent, _super);
    function IgxDataAnnotationAxisLayerComponent() {
        return _super.call(this) || this;
    }
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "i", {
        /**
                                     * @hidden
                                     */
        get: function () {
            return this._implementation;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationLabelDisplayMode", {
        /**
         * Gets or sets display mode of label on axis annotation.
        */
        get: function () {
            return this.i.aaj;
        },
        set: function (v) {
            this.i.aaj = ensureEnum(DataAnnotationDisplayMode_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationLabelVisible", {
        /**
         * Gets or sets whether to show all annotations over target axis
        */
        get: function () {
            return this.i.aao;
        },
        set: function (v) {
            this.i.aao = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationTextColor", {
        /**
         * Gets or sets the text color used in the axis annotation.
        */
        get: function () {
            return brushToString(this.i.ab7);
        },
        set: function (v) {
            this.i.ab7 = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationTextColorMode", {
        /**
         * Gets or sets the mode used for shifting the text color in axis annotation.
        */
        get: function () {
            return this.i.aah;
        },
        set: function (v) {
            this.i.aah = ensureEnum(AnnotationAppearanceMode_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationTextColorShift", {
        /**
         * Gets or sets the percentage used to shift AnnotationTextColor. Value must range between -1.0 to 1.0, where 0 means no color shift.
        */
        get: function () {
            return this.i.aav;
        },
        set: function (v) {
            this.i.aav = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationTextColorMatchLayer", {
        /**
         * Gets or sets whether the annotation text color matches brush of the layer
        */
        get: function () {
            return this.i.aap;
        },
        set: function (v) {
            this.i.aap = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBackground", {
        /**
         * Gets or sets the color used for backing of the axis annotation.
        */
        get: function () {
            return brushToString(this.i.ab5);
        },
        set: function (v) {
            this.i.ab5 = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderRadius", {
        /**
         * Gets or sets the border radius used for displaying the axis annotation.
        */
        get: function () {
            return this.i.aas;
        },
        set: function (v) {
            this.i.aas = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBackgroundMode", {
        /**
         * Gets or sets the mode used for shifting the background of axis annotation.
        */
        get: function () {
            return this.i.aaf;
        },
        set: function (v) {
            this.i.aaf = ensureEnum(AnnotationAppearanceMode_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBackgroundShift", {
        /**
         * Gets or sets the percentage used to shift AnnotationBackground. Value must range between -1.0 to 1.0, where 0 means no color shift.
        */
        get: function () {
            return this.i.aar;
        },
        set: function (v) {
            this.i.aar = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBackgroundMatchLayer", {
        /**
         * Gets or sets whether the annotation background matches brush of the layer
        */
        get: function () {
            return this.i.aam;
        },
        set: function (v) {
            this.i.aam = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderMatchLayer", {
        /**
         * Gets or sets whether the annotation border matches outline of the layer (if it has a fill visual) otherwise brush of the layer
        */
        get: function () {
            return this.i.aan;
        },
        set: function (v) {
            this.i.aan = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderColor", {
        /**
         * Gets or sets the color used for border color of the axis annotation.
        */
        get: function () {
            return brushToString(this.i.ab6);
        },
        set: function (v) {
            this.i.ab6 = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderMode", {
        /**
         * Gets or sets the mode used for shifting border color of the axis annotation.
        */
        get: function () {
            return this.i.aag;
        },
        set: function (v) {
            this.i.aag = ensureEnum(AnnotationAppearanceMode_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderShift", {
        /**
         * Gets or sets the percentage amount used to shift AnnotationBorderColor. Value must range between -1.0 to 1.0, where 0 means no color shift.
        */
        get: function () {
            return this.i.aat;
        },
        set: function (v) {
            this.i.aat = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationPaddingBottom", {
        get: function () {
            return this.i.ab8 ? this.i.ab8.bottom : NaN;
        },
        set: function (v) {
            this.ensureAnnotationPadding();
            this.i.ab8.bottom = +v;
            this.i.ab8 = this.i.ab8;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationPaddingLeft", {
        get: function () {
            return this.i.ab8 ? this.i.ab8.left : NaN;
        },
        set: function (v) {
            this.ensureAnnotationPadding();
            this.i.ab8.left = +v;
            this.i.ab8 = this.i.ab8;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationPaddingRight", {
        get: function () {
            return this.i.ab8 ? this.i.ab8.right : NaN;
        },
        set: function (v) {
            this.ensureAnnotationPadding();
            this.i.ab8.right = +v;
            this.i.ab8 = this.i.ab8;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationPaddingTop", {
        get: function () {
            return this.i.ab8 ? this.i.ab8.top : NaN;
        },
        set: function (v) {
            this.ensureAnnotationPadding();
            this.i.ab8.top = +v;
            this.i.ab8 = this.i.ab8;
        },
        enumerable: false,
        configurable: true
    });
    IgxDataAnnotationAxisLayerComponent.prototype.ensureAnnotationPadding = function () {
        if (this.i.ab8) {
            return;
        }
        this.i.ab8 = new Thickness(2);
    };
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationBorderThickness", {
        /**
         * Gets or sets border thickness of the axis annotations.
        */
        get: function () {
            return this.i.aau;
        },
        set: function (v) {
            this.i.aau = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationValueMaxPrecision", {
        /**
         * Gets or sets maximum precision for displaying values on axis annotation.
        */
        get: function () {
            return this.i.aaw;
        },
        set: function (v) {
            this.i.aaw = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "annotationValueMinPrecision", {
        /**
         * Gets or sets minimum precision for displaying values on axis annotation.
        */
        get: function () {
            return this.i.aax;
        },
        set: function (v) {
            this.i.aax = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "targetAxis", {
        /**
         * Gets or sets the target axis for this annotation. If null, this annotation will use TargetMode to determine target axis.
        */
        get: function () {
            var r = this.i.aai;
            if (r == null) {
                return null;
            }
            if (!r.externalObject) {
                var e = IgxAxisComponent._createFromInternal(r);
                if (e) {
                    e._implementation = r;
                }
                r.externalObject = e;
            }
            return r.externalObject;
        },
        set: function (v) {
            if (v != null && this._stylingContainer && v._styling)
                v._styling(this._stylingContainer, this, this);
            v == null ? this.i.aai = null : this.i.aai = v.i;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxDataAnnotationAxisLayerComponent.prototype, "targetMode", {
        /**
         * Gets or sets the mode for targeting axes present in the chart. Defaults to targeting all category-axes present in the chart
        */
        get: function () {
            return this.i.aak;
        },
        set: function (v) {
            this.i.aak = ensureEnum(DataAnnotationTargetMode_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    IgxDataAnnotationAxisLayerComponent.prototype.findByName = function (name) {
        var baseResult = _super.prototype.findByName.call(this, name);
        if (baseResult) {
            return baseResult;
        }
        if (this.targetAxis && this.targetAxis.name && this.targetAxis.name == name) {
            return this.targetAxis;
        }
        return null;
    };
    IgxDataAnnotationAxisLayerComponent.prototype._styling = function (container, component, parent) {
        _super.prototype._styling.call(this, container, component, parent);
        this._inStyling = true;
        if (this.targetAxis && this.targetAxis._styling) {
            this.targetAxis._styling(container, component, this);
        }
        this._inStyling = false;
    };
    IgxDataAnnotationAxisLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IgxDataAnnotationAxisLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
    IgxDataAnnotationAxisLayerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: IgxDataAnnotationAxisLayerComponent, selector: "ng-component", inputs: { annotationLabelDisplayMode: "annotationLabelDisplayMode", annotationLabelVisible: "annotationLabelVisible", annotationTextColor: "annotationTextColor", annotationTextColorMode: "annotationTextColorMode", annotationTextColorShift: "annotationTextColorShift", annotationTextColorMatchLayer: "annotationTextColorMatchLayer", annotationBackground: "annotationBackground", annotationBorderRadius: "annotationBorderRadius", annotationBackgroundMode: "annotationBackgroundMode", annotationBackgroundShift: "annotationBackgroundShift", annotationBackgroundMatchLayer: "annotationBackgroundMatchLayer", annotationBorderMatchLayer: "annotationBorderMatchLayer", annotationBorderColor: "annotationBorderColor", annotationBorderMode: "annotationBorderMode", annotationBorderShift: "annotationBorderShift", annotationPaddingBottom: "annotationPaddingBottom", annotationPaddingLeft: "annotationPaddingLeft", annotationPaddingRight: "annotationPaddingRight", annotationPaddingTop: "annotationPaddingTop", annotationBorderThickness: "annotationBorderThickness", annotationValueMaxPrecision: "annotationValueMaxPrecision", annotationValueMinPrecision: "annotationValueMinPrecision", targetAxis: "targetAxis", targetMode: "targetMode" }, usesInheritance: true, ngImport: i0, template: "", isInline: true });
    return IgxDataAnnotationAxisLayerComponent;
}(IgxAnnotationLayerComponent));
export { IgxDataAnnotationAxisLayerComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IgxDataAnnotationAxisLayerComponent, decorators: [{
            type: Component,
            args: [{
                    template: "",
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { annotationLabelDisplayMode: [{
                type: Input
            }], annotationLabelVisible: [{
                type: Input
            }], annotationTextColor: [{
                type: Input
            }], annotationTextColorMode: [{
                type: Input
            }], annotationTextColorShift: [{
                type: Input
            }], annotationTextColorMatchLayer: [{
                type: Input
            }], annotationBackground: [{
                type: Input
            }], annotationBorderRadius: [{
                type: Input
            }], annotationBackgroundMode: [{
                type: Input
            }], annotationBackgroundShift: [{
                type: Input
            }], annotationBackgroundMatchLayer: [{
                type: Input
            }], annotationBorderMatchLayer: [{
                type: Input
            }], annotationBorderColor: [{
                type: Input
            }], annotationBorderMode: [{
                type: Input
            }], annotationBorderShift: [{
                type: Input
            }], annotationPaddingBottom: [{
                type: Input
            }], annotationPaddingLeft: [{
                type: Input
            }], annotationPaddingRight: [{
                type: Input
            }], annotationPaddingTop: [{
                type: Input
            }], annotationBorderThickness: [{
                type: Input
            }], annotationValueMaxPrecision: [{
                type: Input
            }], annotationValueMinPrecision: [{
                type: Input
            }], targetAxis: [{
                type: Input
            }], targetMode: [{
                type: Input
            }] } });
