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.
*/
export let IgxDataAnnotationAxisLayerComponent = /*@__PURE__*/ (() => {
    class IgxDataAnnotationAxisLayerComponent extends IgxAnnotationLayerComponent {
        constructor() {
            super();
        }
        /**
                                     * @hidden
                                     */
        get i() {
            return this._implementation;
        }
        /**
         * Gets or sets display mode of label on axis annotation.
        */
        get annotationLabelDisplayMode() {
            return this.i.aaj;
        }
        set annotationLabelDisplayMode(v) {
            this.i.aaj = ensureEnum(DataAnnotationDisplayMode_$type, v);
        }
        /**
         * Gets or sets whether to show all annotations over target axis
        */
        get annotationLabelVisible() {
            return this.i.aao;
        }
        set annotationLabelVisible(v) {
            this.i.aao = ensureBool(v);
        }
        /**
         * Gets or sets the text color used in the axis annotation.
        */
        get annotationTextColor() {
            return brushToString(this.i.ab7);
        }
        set annotationTextColor(v) {
            this.i.ab7 = stringToBrush(v);
        }
        /**
         * Gets or sets the mode used for shifting the text color in axis annotation.
        */
        get annotationTextColorMode() {
            return this.i.aah;
        }
        set annotationTextColorMode(v) {
            this.i.aah = ensureEnum(AnnotationAppearanceMode_$type, v);
        }
        /**
         * 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 annotationTextColorShift() {
            return this.i.aav;
        }
        set annotationTextColorShift(v) {
            this.i.aav = +v;
        }
        /**
         * Gets or sets whether the annotation text color matches brush of the layer
        */
        get annotationTextColorMatchLayer() {
            return this.i.aap;
        }
        set annotationTextColorMatchLayer(v) {
            this.i.aap = ensureBool(v);
        }
        /**
         * Gets or sets the color used for backing of the axis annotation.
        */
        get annotationBackground() {
            return brushToString(this.i.ab5);
        }
        set annotationBackground(v) {
            this.i.ab5 = stringToBrush(v);
        }
        /**
         * Gets or sets the border radius used for displaying the axis annotation.
        */
        get annotationBorderRadius() {
            return this.i.aas;
        }
        set annotationBorderRadius(v) {
            this.i.aas = +v;
        }
        /**
         * Gets or sets the mode used for shifting the background of axis annotation.
        */
        get annotationBackgroundMode() {
            return this.i.aaf;
        }
        set annotationBackgroundMode(v) {
            this.i.aaf = ensureEnum(AnnotationAppearanceMode_$type, v);
        }
        /**
         * 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 annotationBackgroundShift() {
            return this.i.aar;
        }
        set annotationBackgroundShift(v) {
            this.i.aar = +v;
        }
        /**
         * Gets or sets whether the annotation background matches brush of the layer
        */
        get annotationBackgroundMatchLayer() {
            return this.i.aam;
        }
        set annotationBackgroundMatchLayer(v) {
            this.i.aam = ensureBool(v);
        }
        /**
         * Gets or sets whether the annotation border matches outline of the layer (if it has a fill visual) otherwise brush of the layer
        */
        get annotationBorderMatchLayer() {
            return this.i.aan;
        }
        set annotationBorderMatchLayer(v) {
            this.i.aan = ensureBool(v);
        }
        /**
         * Gets or sets the color used for border color of the axis annotation.
        */
        get annotationBorderColor() {
            return brushToString(this.i.ab6);
        }
        set annotationBorderColor(v) {
            this.i.ab6 = stringToBrush(v);
        }
        /**
         * Gets or sets the mode used for shifting border color of the axis annotation.
        */
        get annotationBorderMode() {
            return this.i.aag;
        }
        set annotationBorderMode(v) {
            this.i.aag = ensureEnum(AnnotationAppearanceMode_$type, v);
        }
        /**
         * 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 annotationBorderShift() {
            return this.i.aat;
        }
        set annotationBorderShift(v) {
            this.i.aat = +v;
        }
        get annotationPaddingBottom() {
            return this.i.ab8 ? this.i.ab8.bottom : NaN;
        }
        set annotationPaddingBottom(v) {
            this.ensureAnnotationPadding();
            this.i.ab8.bottom = +v;
            this.i.ab8 = this.i.ab8;
        }
        get annotationPaddingLeft() {
            return this.i.ab8 ? this.i.ab8.left : NaN;
        }
        set annotationPaddingLeft(v) {
            this.ensureAnnotationPadding();
            this.i.ab8.left = +v;
            this.i.ab8 = this.i.ab8;
        }
        get annotationPaddingRight() {
            return this.i.ab8 ? this.i.ab8.right : NaN;
        }
        set annotationPaddingRight(v) {
            this.ensureAnnotationPadding();
            this.i.ab8.right = +v;
            this.i.ab8 = this.i.ab8;
        }
        get annotationPaddingTop() {
            return this.i.ab8 ? this.i.ab8.top : NaN;
        }
        set annotationPaddingTop(v) {
            this.ensureAnnotationPadding();
            this.i.ab8.top = +v;
            this.i.ab8 = this.i.ab8;
        }
        ensureAnnotationPadding() {
            if (this.i.ab8) {
                return;
            }
            this.i.ab8 = new Thickness(2);
        }
        /**
         * Gets or sets border thickness of the axis annotations.
        */
        get annotationBorderThickness() {
            return this.i.aau;
        }
        set annotationBorderThickness(v) {
            this.i.aau = +v;
        }
        /**
         * Gets or sets maximum precision for displaying values on axis annotation.
        */
        get annotationValueMaxPrecision() {
            return this.i.aaw;
        }
        set annotationValueMaxPrecision(v) {
            this.i.aaw = +v;
        }
        /**
         * Gets or sets minimum precision for displaying values on axis annotation.
        */
        get annotationValueMinPrecision() {
            return this.i.aax;
        }
        set annotationValueMinPrecision(v) {
            this.i.aax = +v;
        }
        /**
         * Gets or sets the target axis for this annotation. If null, this annotation will use TargetMode to determine target axis.
        */
        get targetAxis() {
            const r = this.i.aai;
            if (r == null) {
                return null;
            }
            if (!r.externalObject) {
                let e = IgxAxisComponent._createFromInternal(r);
                if (e) {
                    e._implementation = r;
                }
                r.externalObject = e;
            }
            return r.externalObject;
        }
        set targetAxis(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;
        }
        /**
         * Gets or sets the mode for targeting axes present in the chart. Defaults to targeting all category-axes present in the chart
        */
        get targetMode() {
            return this.i.aak;
        }
        set targetMode(v) {
            this.i.aak = ensureEnum(DataAnnotationTargetMode_$type, v);
        }
        findByName(name) {
            var baseResult = super.findByName(name);
            if (baseResult) {
                return baseResult;
            }
            if (this.targetAxis && this.targetAxis.name && this.targetAxis.name == name) {
                return this.targetAxis;
            }
            return null;
        }
        _styling(container, component, parent) {
            super._styling(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;
})();
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
            }] } });
