/*
THIS INFRAGISTICS ULTIMATE SOFTWARE LICENSE  AGREEMENT ("AGREEMENT") LOCATED HERE:
https://www.infragistics.com/legal/license/igultimate-la
https://www.infragistics.com/legal/license/igultimate-eula
GOVERNS THE LICENSING, INSTALLATION AND USE OF INFRAGISTICS SOFTWARE. BY DOWNLOADING AND/OR INSTALLING AND USING INFRAGISTICS SOFTWARE:  you are indicating that you have read and understand this Agreement, and agree to be legally bound by it on behalf of the yourself and your company.
*/
import { Output, EventEmitter, Component, Input } from '@angular/core';
import { Visibility_$type } from "igniteui-angular-core";
import { HorizontalAlignment_$type } from "igniteui-angular-core";
import { VerticalAlignment_$type } from "igniteui-angular-core";
import { AxisLabelsLocation_$type } from './AxisLabelsLocation';
import { AxisLabelSettings } from './AxisLabelSettings';
import { TitleSettings } from './TitleSettings';
import { AxisTitlePosition_$type } from './AxisTitlePosition';
import { fromDoubleCollection, toDoubleCollection, ensureEnum, arrayFindByName, brushToString, stringToBrush, ensureBool, toSpinal, initializePropertiesFromCss, NamePatcher } from "igniteui-angular-core";
import { delegateCombine } from "igniteui-angular-core";
import { IgxRenderRequestedEventArgs } from './igx-render-requested-event-args';
import { TypeRegistrar } from "igniteui-angular-core";
import { IgxAxisRangeChangedEventArgs } from './igx-axis-range-changed-event-args';
import { IgxAxisAnnotationCollection } from './igx-axis-annotation-collection';
import { AxisAnnotationCollection as AxisAnnotationCollection_internal } from './AxisAnnotationCollection';
import { SyncableObservableCollection$1 } from "igniteui-angular-core";
import { IAxisAnnotation_$type } from './IAxisAnnotation';
import * as i0 from "@angular/core";
/**
 * Represents the base class from which all axis types are derived.
*
* The `Axis` is an array of axis objects.
*
* ```html
* <igx-data-chart
*     [dataSource]="data" >
*     <igx-category-x-axis
* 		label="label"
* 		#xAxis>
*     </igx-category-x-axis>
*     <igx-numeric-y-axis
* 		#yAxis>
*     </igx-numeric-y-axis>
* </igx-data-chart>
* ```
*/
var IgxAxisComponent = /** @class */ /*@__PURE__*/ (function () {
    function IgxAxisComponent() {
        this._renderer = null;
        this._annotations = null;
        this.__p = null;
        this._hasUserValues = new Set();
        this._stylingContainer = null;
        this._stylingParent = null;
        this._inStyling = false;
        this._rangeChanged = null;
        this._renderRequested = null;
        this._zoneRunner = null;
        if (this._styling) {
            NamePatcher.ensureStylablePatched(Object.getPrototypeOf(this));
        }
        this._implementation = this.createImplementation();
        this._implementation.externalObject = this;
        this.onImplementationCreated();
    }
    Object.defineProperty(IgxAxisComponent.prototype, "i", {
        get: function () {
            return this._implementation;
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.onImplementationCreated = function () {
    };
    Object.defineProperty(IgxAxisComponent.prototype, "axisInternal", {
        get: function () {
            return this.i;
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.createImplementation = function () {
        return null;
    };
    IgxAxisComponent.prototype.ngOnInit = function () {
    };
    Object.defineProperty(IgxAxisComponent.prototype, "name", {
        get: function () {
            //console.log("getting axis anme: " + this.i.name)
            return this.i.name;
        },
        set: function (value) {
            //console.log("setting axis name: " + value);
            this.i.name = value;
            //console.log("checking axis anme: " + this.i.name)
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.provideData = function (data) {
    };
    // manually added because auto-gen doesn't create this function which is required by igx-data-chart-component-template.ts
    IgxAxisComponent.prototype.bindAxes = function (axes) {
    };
    IgxAxisComponent.prototype._provideRenderer = function (renderer) {
        this._renderer = renderer;
        this._zoneRunner = function (act) { return renderer._ngZone.run(act); };
    };
    IgxAxisComponent._createFromInternal = function (internal) {
        if (!internal) {
            return null;
        }
        if (!internal.$type) {
            return null;
        }
        var name = internal.$type.name;
        var externalName = "Igx" + name + "Component";
        if (!TypeRegistrar.isRegistered(externalName)) {
            return null;
        }
        return TypeRegistrar.create(externalName);
    };
    Object.defineProperty(IgxAxisComponent.prototype, "isCategory", {
        /**
     * Gets or sets if the current axis is of category axis type
    */
        get: function () {
            return this.i.c8;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isNumeric", {
        /**
         * Gets or sets if the current axis is of numeric axis type
        *
        *     Gets or sets if the current axis is of numeric axis type
        */
        get: function () {
            return this.i.dh;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isAngular", {
        /**
         * Gets if the current axis is of angular axis type
        */
        get: function () {
            return this.i.c5;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isRadial", {
        /**
         * Gets or sets if the current axis is of radial axis type
        */
        get: function () {
            return this.i.dl;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isVertical", {
        /**
         * Gets if the current axis is a vertical axis.
        */
        get: function () {
            return this.i.dq;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isSorting", {
        /**
         * Gets or sets if the current axis is sorting data items
        */
        get: function () {
            return this.i.dm;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isDateTime", {
        /**
         * Gets or sets if the current axis is of date time axis type
        */
        get: function () {
            return this.i.dc;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isOrdinal", {
        /**
         * Gets or sets if the current axis is of ordinal axis type
        */
        get: function () {
            return this.i.di;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isPiecewise", {
        /**
         * Gets or sets if the axis is a piecewise scaling function.
        */
        get: function () {
            return this.i.dj;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isCategoryDateTime", {
        /**
         * Gets if the current axis is of category date time axis type
        */
        get: function () {
            return this.i.c9;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isContinuous", {
        /**
         * Gets if the current axis is a continuous rather than a discrete scale
        */
        get: function () {
            return this.i.db;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "formatLabel", {
        /**
         * Sets or gets a function which takes an object that produces a formatted label for displaying in the chart.
        *
        * The `FormatLabel` function takes an object that produces a formatted label for displaying in the chart.
        *
        * ```html
        * <igx-data-chart [dataSource]="data" >
        *     <igx-category-x-axis
        * 		name="xAxis"
        * 		FormatLabel="xAxis_FormatLabel" />
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.ay;
        },
        set: function (v) {
            this.i.ay = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "title", {
        /**
         * Gets or sets the Title property.
        *
        * Use `Title` property to display the title of the component.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.jb;
        },
        set: function (v) {
            this.i.jb = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "stroke", {
        /**
         * Gets or sets the Stroke property.
         * Null is treated as auto. The axis stroke will be displayed or not based on the axis type and series used with it.
        *
        * Use `Stroke` property to set the stroke of the chart.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		stroke="blue"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return brushToString(this.i.nm);
        },
        set: function (v) {
            this.i.nm = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "actualStroke", {
        /**
         * Gets or sets the effective stroke used for the axis.
        */
        get: function () {
            return brushToString(this.i.nc);
        },
        set: function (v) {
            this.i.nc = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "strokeThickness", {
        /**
         * Gets or sets the StrokeThickness property.
        *
        * Use `StrokeThickness` property for the thickness of the stroke.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		strokeThickness= 5
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.gs;
        },
        set: function (v) {
            this.i.gs = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "strokeDashArray", {
        /**
         * Gets or sets the StrokeDashArray property.
        */
        get: function () {
            return fromDoubleCollection(this.i.nq);
        },
        set: function (v) {
            this.i.nq = toDoubleCollection(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "strip", {
        /**
         * Gets or sets the Strip property.
        *
        * Use `Strip` property to set the strip of the chart.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		 strip= "grey"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return brushToString(this.i.nl);
        },
        set: function (v) {
            this.i.nl = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "majorStroke", {
        /**
         * Gets or sets the MajorStroke property.
         * Null is treated as auto. Major lines will be displayed or not based on the axis type and series used with it.
        *
        * Gets or sets the `MajorStroke` using this property.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 	   majorStroke="black"
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return brushToString(this.i.ni);
        },
        set: function (v) {
            this.i.ni = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "actualMajorStroke", {
        /**
         * Gets or sets the ActualMajorStroke property.
        *
        * The `ActualMajorStroke` property is used for ActualMajorStroke of the axis.
        */
        get: function () {
            return brushToString(this.i.na);
        },
        set: function (v) {
            this.i.na = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "majorStrokeThickness", {
        /**
         * Gets or sets the MajorStrokeThickness property.
        *
        * Gets or sets the `MajorStrokeThickness` using this property.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 	  majorStrokeThickness="1"
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.f1;
        },
        set: function (v) {
            this.i.f1 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "majorStrokeDashArray", {
        /**
         * Gets or sets the MajorStrokeDashArray property.
        */
        get: function () {
            return fromDoubleCollection(this.i.no);
        },
        set: function (v) {
            this.i.no = toDoubleCollection(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "minorStroke", {
        /**
         * Gets or sets the MinorStroke property.
        *
        * Gets or sets the minorStroke thickness using `MinorStrokeThickness` property.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 	 minorStrokeThickness="1"
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return brushToString(this.i.nj);
        },
        set: function (v) {
            this.i.nj = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "actualMinorStroke", {
        /**
         * Gets or sets the ActualMinorStroke property.
        *
        * The `ActualMinorStroke` property is used for ActualMinorStroke of the axis.
        */
        get: function () {
            return brushToString(this.i.nb);
        },
        set: function (v) {
            this.i.nb = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "minorStrokeThickness", {
        /**
         * Gets or sets the MinorStrokeThickness property.
        */
        get: function () {
            return this.i.f4;
        },
        set: function (v) {
            this.i.f4 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "minorStrokeDashArray", {
        /**
         * Gets or sets the MinorStrokeDashArray property.
        */
        get: function () {
            return fromDoubleCollection(this.i.np);
        },
        set: function (v) {
            this.i.np = toDoubleCollection(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "tickStroke", {
        /**
         * Gets or sets the TickStroke property.
        *
        * Use `TickStroke` property for the color of the tickmarks.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		tickStroke="black"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return brushToString(this.i.nn);
        },
        set: function (v) {
            this.i.nn = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "tickStrokeThickness", {
        /**
         * Gets or sets the TickStrokeThickness property.
        *
        * Use `TickStrokeThickness` property for thickness of the stroke tickmarks.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		tickStrokeThicknes="2"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.gu;
        },
        set: function (v) {
            this.i.gu = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "tickStrokeDashArray", {
        /**
         * Gets or sets the TickStrokeDashArray property.
        */
        get: function () {
            return fromDoubleCollection(this.i.nr);
        },
        set: function (v) {
            this.i.nr = toDoubleCollection(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "tickLength", {
        /**
         * Gets or sets the TickLength property.
        *
        * Use `TickLength` property for The length of the tickmarks to display for this axis.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		tickLength="5"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.gt;
        },
        set: function (v) {
            this.i.gt = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isDisabled", {
        /**
         * Gets or sets the IsDisabled property. If true, the axis will not be rendered.
        *
        * The `IsDisabled` property is used to decide if the axis will not be rendered.
        */
        get: function () {
            return this.i.dd;
        },
        set: function (v) {
            this.i.dd = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "isInverted", {
        /**
         * Gets or sets the IsInverted property.
        *
        * Gets or sets the `IsInverted` property.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		isInverted= true
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.df;
        },
        set: function (v) {
            this.i.df = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "shouldAvoidAnnotationCollisions", {
        /**
         * Gets or sets whether annotations should be shifted to avoid collision, even if this would result in them appearing where they shouldn't be along the scale.
        */
        get: function () {
            return this.i.dv;
        },
        set: function (v) {
            this.i.dv = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "shouldKeepAnnotationsInView", {
        /**
         * ets or sets whether annotations should be kept in view, even if they aren't positioned where they should appear on the scale.
        */
        get: function () {
            return this.i.dx;
        },
        set: function (v) {
            this.i.dx = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "usePerLabelHeightMeasurement", {
        /**
         * Gets or sets whether to use label height measurement when determining the initial number of labels to render, before resolving collisions, etc.
        */
        get: function () {
            return this.i.d6;
        },
        set: function (v) {
            this.i.d6 = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "useEnhancedIntervalManagement", {
        /**
         * Gets or sets whether to use more advanced heuristics when determining the initial number of labels to render, before resolving collisions, etc.
        *
        * Use `UseEnhancedIntervalManagement` property to gets/sets whether to use more advanced heuristics when determining the initial number of labels to render,
        * before resolving collisions, etc.
        */
        get: function () {
            return this.i.d5;
        },
        set: function (v) {
            this.i.d5 = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "enhancedIntervalMinimumCharacters", {
        /**
         * Gets or sets the minimum desired characters to be displayed for horizontal axes when using advanced label heuristics. -1 will attempt to adjust the interval to precisely fit the horizontal labels.
        *
        * The `EnhancedIntervalMinimumCharacters` property is used to set the mininum desired characters to be displayed for horizontal axes when using advanced label heuristics.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		enhancedIntervalMinimumCharacters=5
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        *
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.g2;
        },
        set: function (v) {
            this.i.g2 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "enhancedIntervalPreferMoreCategoryLabels", {
        /**
         * Gets or sets whether the enhanced interval management should prefer to show all the labels if possible without collisions for supported types of category axes. This is for use with EnhancedIntervalMinimumCharacters = -1 and axes that have an integral interval.
        */
        get: function () {
            return this.i.cr;
        },
        set: function (v) {
            this.i.cr = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelTextStyle", {
        /**
         * Gets or sets the text style to use for axis labels.
        *
        * The `labelTextStyle` property Overrides the style of the text used for the axis labels.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.textStyle : null;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.textStyle = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelTextColor", {
        /**
         * The color of the {0}.
        *
        * The `labelTextColor` property Overrides the color of the text used for the axis labels.
        */
        get: function () {
            return brushToString(this.i.a3 ? this.i.a3.textColor : null);
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.textColor = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelLocation", {
        /**
         * Gets or sets the location of the {0}.
        *
        * The `Location` property is used for the location.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.location : 0;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.location = ensureEnum(AxisLabelsLocation_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelVisibility", {
        /**
         * Gets or sets the visibility of the {0}.
        *
        * The `Visibility` property is used for the visibility of the axis.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.visibility : 0;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.visibility = ensureEnum(Visibility_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelShowFirstLabel", {
        /**
         * Gets or sets whether the first label is displayed when the zoom level is set to 1.
        *
        * The `ShowFirstLabel` is used to check whether the first label is displayed when the zoom level is set to 1.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.showFirstLabel : false;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.showFirstLabel = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelAngle", {
        /**
         * Gets or sets the angle of the {0}.
        *
        * The `Angle` property is used to set the angle of the axis.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.angle : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.angle = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelExtent", {
        /**
         * Distance between the axis and the edge of the control.
        *
        * The `Extent` property is used for the extent.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.extent : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.extent = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelMaximumExtent", {
        /**
         * Maximum distance between the axis and the edge of the control.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.maximumExtent : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.maximumExtent = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelMaximumExtentPercentage", {
        /**
         * Maximum distance between the axis and the edge of the control, relative to Chart size.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.maximumExtentPercentage : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.maximumExtentPercentage = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelLeftMargin", {
        /**
         * Margin applied to the left of the {0}.
        *
        * The `labelLeftMargin` property is used for the left margin of the labels.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.leftMargin : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.leftMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelRightMargin", {
        /**
         * Margin applied to the right of the {0}.
        *
        * The `labelRightMargin` property is used for the right margin of the labels.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.rightMargin : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.rightMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelTopMargin", {
        /**
         * Margin applied above the {0}.
        *
        * The `labelTopMargin` property is used for the top margin of the labels.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.topMargin : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.topMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelBottomMargin", {
        /**
         * Margin applied below the {0}.
        *
        * The `labelBottomMargin` is used to set the bottom margin of the labels.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.bottomMargin : NaN;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.bottomMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelHorizontalAlignment", {
        /**
         * Gets or sets the horizontal alignment of the {0}.
        *
        * The `HorizontalAlignment` property is used for the horizontal alignment.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.horizontalAlignment : 0;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.horizontalAlignment = ensureEnum(HorizontalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelVerticalAlignment", {
        /**
         * Gets or sets the vertical alignment of the {0}.
        *
        * The `VerticalAlignment` property is used for the vertical alignment of the axis.
        */
        get: function () {
            return this.i.a3 ? this.i.a3.verticalAlignment : 0;
        },
        set: function (v) {
            this.ensureLabelSettings();
            this.i.a3.verticalAlignment = ensureEnum(VerticalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.ensureLabelSettings = function () {
        if (this.i.a3) {
            return;
        }
        this.i.a3 = new AxisLabelSettings();
        this.i.a3.location = this.i.a5();
        this.i.a3.angle = this.i.ff();
        this.i.a3.leftMargin = this.i.fh();
        this.i.a3.rightMargin = this.i.fi();
        this.i.a3.topMargin = this.i.fj();
        this.i.a3.bottomMargin = this.i.fg();
        this.i.a3.horizontalAlignment = this.i.m7();
        this.i.a3.verticalAlignment = this.i.n9();
    };
    Object.defineProperty(IgxAxisComponent.prototype, "crossingAxis", {
        /**
         * Gets or sets the CrossingAxis property.
        *
        * The `CrossingAxis` property is used for CrossingAxis .
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		crossingAxis= "xAxis"
        * 		crossingValue= 700
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            var r = this.i.am;
            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.am = null : this.i.am = v.i;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "crossingValue", {
        /**
         * Gets or sets the CrossingValue property.
        *
        * The `CrossingValue` property is used for CrossingValue of the axis.
        *
        * ```html
        * <igx-data-chart
        *     [dataSource]="data" >
        *     <igx-category-x-axis
        * 		label="label"
        * 		#xAxis>
        *     </igx-category-x-axis>
        *     <igx-numeric-y-axis
        * 		crossingAxis= "xAxis"
        * 		crossingValue= 700
        * 		#yAxis>
        *     </igx-numeric-y-axis>
        * </igx-data-chart>
        * ```
        */
        get: function () {
            return this.i.ha;
        },
        set: function (v) {
            this.i.ha = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titlePosition", {
        /**
         * Gets or sets the title position relative to the axis labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.position : 0;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.position = ensureEnum(AxisTitlePosition_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleTextStyle", {
        /**
         * Gets or sets the text style to use for axis labels.
        *
        * The `labelTextStyle` property Overrides the style of the text used for the axis labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.textStyle : null;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.textStyle = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleTextColor", {
        /**
         * The color of the {0}.
        *
        * The `labelTextColor` property Overrides the color of the text used for the axis labels.
        */
        get: function () {
            return brushToString(this.i.bx ? this.i.bx.textColor : null);
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.textColor = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleLocation", {
        /**
         * Gets or sets the location of the {0}.
        *
        * The `Location` property is used for the location.
        */
        get: function () {
            return this.i.bx ? this.i.bx.location : 0;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.location = ensureEnum(AxisLabelsLocation_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleVisibility", {
        /**
         * Gets or sets the visibility of the {0}.
        *
        * The `Visibility` property is used for the visibility of the axis.
        */
        get: function () {
            return this.i.bx ? this.i.bx.visibility : 0;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.visibility = ensureEnum(Visibility_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleShowFirstLabel", {
        /**
         * Gets or sets whether the first label is displayed when the zoom level is set to 1.
        *
        * The `ShowFirstLabel` is used to check whether the first label is displayed when the zoom level is set to 1.
        */
        get: function () {
            return this.i.bx ? this.i.bx.showFirstLabel : false;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.showFirstLabel = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleAngle", {
        /**
         * Gets or sets the angle of the {0}.
        *
        * The `Angle` property is used to set the angle of the axis.
        */
        get: function () {
            return this.i.bx ? this.i.bx.angle : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.angle = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleExtent", {
        /**
         * Distance between the axis and the edge of the control.
        *
        * The `Extent` property is used for the extent.
        */
        get: function () {
            return this.i.bx ? this.i.bx.extent : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.extent = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleMaximumExtent", {
        /**
         * Maximum distance between the axis and the edge of the control.
        */
        get: function () {
            return this.i.bx ? this.i.bx.maximumExtent : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.maximumExtent = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleMaximumExtentPercentage", {
        /**
         * Maximum distance between the axis and the edge of the control, relative to Chart size.
        */
        get: function () {
            return this.i.bx ? this.i.bx.maximumExtentPercentage : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.maximumExtentPercentage = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleLeftMargin", {
        /**
         * Margin applied to the left of the {0}.
        *
        * The `labelLeftMargin` property is used for the left margin of the labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.leftMargin : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.leftMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleRightMargin", {
        /**
         * Margin applied to the right of the {0}.
        *
        * The `labelRightMargin` property is used for the right margin of the labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.rightMargin : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.rightMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleTopMargin", {
        /**
         * Margin applied above the {0}.
        *
        * The `labelTopMargin` property is used for the top margin of the labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.topMargin : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.topMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleBottomMargin", {
        /**
         * Margin applied below the {0}.
        *
        * The `labelBottomMargin` is used to set the bottom margin of the labels.
        */
        get: function () {
            return this.i.bx ? this.i.bx.bottomMargin : NaN;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.bottomMargin = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleHorizontalAlignment", {
        /**
         * Gets or sets the horizontal alignment of the {0}.
        *
        * The `HorizontalAlignment` property is used for the horizontal alignment.
        */
        get: function () {
            return this.i.bx ? this.i.bx.horizontalAlignment : 0;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.horizontalAlignment = ensureEnum(HorizontalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "titleVerticalAlignment", {
        /**
         * Gets or sets the vertical alignment of the {0}.
        *
        * The `VerticalAlignment` property is used for the vertical alignment of the axis.
        */
        get: function () {
            return this.i.bx ? this.i.bx.verticalAlignment : 0;
        },
        set: function (v) {
            this.ensureTitleSettings();
            this.i.bx.verticalAlignment = ensureEnum(VerticalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.ensureTitleSettings = function () {
        if (this.i.bx) {
            return;
        }
        this.i.bx = new TitleSettings();
        this.i.bx.location = this.i.a6();
        this.i.bx.angle = this.i.fk();
        this.i.bx.leftMargin = this.i.fm();
        this.i.bx.rightMargin = this.i.fn();
        this.i.bx.topMargin = this.i.fo();
        this.i.bx.bottomMargin = this.i.fl();
        this.i.bx.horizontalAlignment = this.i.m8();
        this.i.bx.verticalAlignment = this.i.oa();
    };
    Object.defineProperty(IgxAxisComponent.prototype, "annotations", {
        /**
         * Gets the current annotations for the axis.
        */
        get: function () {
            if (this._annotations === null) {
                var coll = new IgxAxisAnnotationCollection();
                var innerColl = this.i.ar;
                if (!innerColl) {
                    innerColl = new AxisAnnotationCollection_internal();
                }
                this._annotations = coll._fromInner(innerColl);
            }
            return this._annotations;
        },
        set: function (v) {
            if (this._annotations !== null) {
                this._annotations._setSyncTarget(null);
                this._annotations = null;
            }
            var coll = new IgxAxisAnnotationCollection();
            this._annotations = coll._fromOuter(v);
            var syncColl = new SyncableObservableCollection$1(IAxisAnnotation_$type);
            var innerColl = this.i.ar;
            if (!innerColl) {
                innerColl = new AxisAnnotationCollection_internal();
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._annotations._setSyncTarget(syncColl);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "coercionMethods", {
        /**
         * Gets or sets the coercion methods to use when loading data from data sources.
         * Should be specified before setting any member paths, if being used. Setting it later
         * will not cause data to be re-imported into the chart.
        *
        * The	`coercionMethods` methods is to use when loading data from data sources. Should be specified before setting any member paths, if being used.
        * Setting it later will not cause data to be reimported into the chart.
        */
        get: function () {
            return this.i.coercionMethods;
        },
        set: function (v) {
            this.i.coercionMethods = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "expectFunctions", {
        /**
         * Gets or sets whether the series should expect that properties in its items source may be functions that need to be
         * evaluated to yield their value. This defaults to false, as there will be a subtle performance impact to using this feature.
         * This value must be set before assigning an item's source to take effect.
        */
        get: function () {
            return this.i.expectFunctions;
        },
        set: function (v) {
            this.i.expectFunctions = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "label", {
        /**
         * Gets or sets the axis label format string.
        *
        * The `Label` property is used for label mapping of the axis labels.
        */
        get: function () {
            return this.i.hg;
        },
        set: function (v) {
            this.i.hg = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelFormat", {
        /**
         * Gets or sets the label format string to use for the label.
        */
        get: function () {
            return this.i.ik;
        },
        set: function (v) {
            this.i.ik = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "labelFormatSpecifiers", {
        /**
         * Gets or sets the format specifiers to use with the LabelFormat string.
        */
        get: function () {
            return this.i.ah;
        },
        set: function (v) {
            if (v && !Array.isArray(v) && typeof (v) == "string") {
                var re = /\s*(?:,|\s|$)\s*/gm;
                v = v.split(re);
            }
            this.i.ah = v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisEnabled", {
        /**
         * Gets or sets whether or not the secondary axis enabled for this axis.
        */
        get: function () {
            return this.i.ck;
        },
        set: function (v) {
            this.i.ck = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelOpposite", {
        /**
         * Gets or sets whether or not the secondary axis has opposite location of this axis.
        */
        get: function () {
            return this.i.cn;
        },
        set: function (v) {
            this.i.cn = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisIsInverted", {
        /**
         * Gets or sets whether or not the secondary axis is inverted.
        */
        get: function () {
            return this.i.cm;
        },
        set: function (v) {
            this.i.cm = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisCrossingAxis", {
        /**
         * Gets or sets crossing axis for the secondary axis.
        */
        get: function () {
            var r = this.i.al;
            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.al = null : this.i.al = v.i;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisCrossingValue", {
        /**
         * Gets or sets crossing value for the secondary axis.
        */
        get: function () {
            return this.i.e4;
        },
        set: function (v) {
            this.i.e4 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelVisible", {
        /**
         * Gets or sets whether or not the secondary axis has visible labels.
        */
        get: function () {
            return this.i.co;
        },
        set: function (v) {
            this.i.co = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelAngle", {
        /**
         * Gets or sets label angle on the secondary axis.
        */
        get: function () {
            return this.i.e5;
        },
        set: function (v) {
            this.i.e5 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelExtent", {
        /**
         * Gets or sets extent of labels on the secondary axis.
        */
        get: function () {
            return this.i.e6;
        },
        set: function (v) {
            this.i.e6 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelLocation", {
        /**
         * Gets or sets location of labels on the secondary axis.
        */
        get: function () {
            return this.i.a4;
        },
        set: function (v) {
            this.i.a4 = ensureEnum(AxisLabelsLocation_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelVerticalAlignment", {
        /**
         * Gets or sets vertical alignment of the secondary axis.
        */
        get: function () {
            return this.i.n8;
        },
        set: function (v) {
            this.i.n8 = ensureEnum(VerticalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelHorizontalAlignment", {
        /**
         * Gets or sets horizontal alignment of labels on the secondary axis.
        */
        get: function () {
            return this.i.m6;
        },
        set: function (v) {
            this.i.m6 = ensureEnum(HorizontalAlignment_$type, v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisLabelColor", {
        /**
         * Gets or sets color of labels on the secondary axis.
        */
        get: function () {
            return brushToString(this.i.nd);
        },
        set: function (v) {
            this.i.nd = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisSyncronizedWithPrimaryAxis", {
        /**
         * Gets or sets whether or not the secondary axis is syncronized with properties of primary axis unless CompanionAxis* properties are set
         * In other words, secondary axis' LabelExtent will syncronize with primary axis' LabelExtent unless CompanionAxisLabelExtent is set
        */
        get: function () {
            return this.i.cp;
        },
        set: function (v) {
            this.i.cp = ensureBool(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisStrip", {
        /**
         * Gets or sets color of strips on the secondary axis.
        */
        get: function () {
            return brushToString(this.i.ng);
        },
        set: function (v) {
            this.i.ng = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisMajorStroke", {
        /**
         * Gets or sets stroke of major gridlines on the secondary axis.
        */
        get: function () {
            return brushToString(this.i.ne);
        },
        set: function (v) {
            this.i.ne = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisMajorStrokeThickness", {
        /**
         * Gets or sets thickness of major gridlines on the secondary axis.
        */
        get: function () {
            return this.i.e7;
        },
        set: function (v) {
            this.i.e7 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisMinorStroke", {
        /**
         * Gets or sets stroke of minior gridlines on the secondary axis.
        */
        get: function () {
            return brushToString(this.i.nf);
        },
        set: function (v) {
            this.i.nf = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisMinorStrokeThickness", {
        /**
         * Gets or sets thickness of minior gridlines on the secondary axis.
        */
        get: function () {
            return this.i.e8;
        },
        set: function (v) {
            this.i.e8 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisTickStroke", {
        /**
         * Gets or sets color of ticks on the secondary axis.
        */
        get: function () {
            return brushToString(this.i.nh);
        },
        set: function (v) {
            this.i.nh = stringToBrush(v);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisTickLength", {
        /**
         * Gets or sets length of ticks on the secondary axis.
        */
        get: function () {
            return this.i.e9;
        },
        set: function (v) {
            this.i.e9 = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisTickStrokeThickness", {
        /**
         * Gets or sets label angle on the secondary axis.
        */
        get: function () {
            return this.i.fa;
        },
        set: function (v) {
            this.i.fa = +v;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "companionAxisTitle", {
        /**
         * Gets or sets title on the secondary axis.
        */
        get: function () {
            return this.i.h8;
        },
        set: function (v) {
            this.i.h8 = v;
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.findByName = function (name) {
        if (this.findEphemera) {
            if (name && name.indexOf("@@e:") == 0) {
                return this.findEphemera(name);
            }
        }
        if (this.crossingAxis && this.crossingAxis.name && this.crossingAxis.name == name) {
            return this.crossingAxis;
        }
        if (this.annotations != null && this.annotations.findByName && this.annotations.findByName(name)) {
            return this.annotations.findByName(name);
        }
        if (this.labelFormatSpecifiers != null && arrayFindByName(this.labelFormatSpecifiers, name)) {
            return arrayFindByName(this.labelFormatSpecifiers, name);
        }
        if (this.companionAxisCrossingAxis && this.companionAxisCrossingAxis.name && this.companionAxisCrossingAxis.name == name) {
            return this.companionAxisCrossingAxis;
        }
        return null;
    };
    Object.defineProperty(IgxAxisComponent.prototype, "hasUserValues", {
        get: function () {
            return this._hasUserValues;
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype.__m = function (propertyName) {
        if (!this._inStyling) {
            this._hasUserValues.add(propertyName);
        }
    };
    IgxAxisComponent.prototype._styling = function (container, component, parent) {
        if (this._inStyling) {
            return;
        }
        this._inStyling = true;
        this._stylingContainer = container;
        this._stylingParent = component;
        var genericPrefix = "";
        var typeName = this.i.$type.name;
        if (typeName.indexOf("Xam") === 0) {
            typeName = typeName.substring(3);
        }
        genericPrefix = toSpinal("AxisComponent");
        var additionalPrefixes = [];
        var prefix = toSpinal(typeName);
        additionalPrefixes.push(prefix + "-");
        var b = this.i.$type.baseType;
        while (b && b.name != "Object" &&
            b.name != "Base" &&
            b.name != "Control" &&
            b.Name != "DependencyObject" &&
            b.Name != "FrameworkElement") {
            typeName = b.name;
            if (typeName.indexOf("Xam") === 0) {
                typeName = typeName.substring(3);
            }
            var basePrefix = toSpinal(typeName);
            additionalPrefixes.push(basePrefix + "-");
            b = b.baseType;
        }
        if (parent) {
            var parentTypeName = parent.i.$type.name;
            if (parentTypeName.indexOf("Xam") === 0) {
                parentTypeName = parentTypeName.substring(3);
            }
            var parentPrefix = toSpinal(parentTypeName);
            additionalPrefixes.push(parentPrefix + "-" + genericPrefix + "-");
            additionalPrefixes.push(parentPrefix + "-" + prefix + "-");
        }
        initializePropertiesFromCss(container, this, genericPrefix + "-", this.hasUserValues, false, additionalPrefixes);
        if (this.crossingAxis && this.crossingAxis._styling) {
            this.crossingAxis._styling(container, component, this);
        }
        if (this.companionAxisCrossingAxis && this.companionAxisCrossingAxis._styling) {
            this.companionAxisCrossingAxis._styling(container, component, this);
        }
        if (this._otherStyling) {
            this._otherStyling(container, component, parent);
        }
        this._inStyling = false;
    };
    IgxAxisComponent.prototype.getFullRange = function () {
        var iv = this.i.ag();
        return (iv);
    };
    /**
     * Renders the axis with no animation.
    
    */
    IgxAxisComponent.prototype.renderAxis = function () {
        this.i.k2();
    };
    /**
     * If using enhanced interval management and precise interval fitting, this will reset the cached maximum label width, and recalculate using the current labels.
    
    */
    IgxAxisComponent.prototype.resetCachedEnhancedInterval = function () {
        this.i.k6();
    };
    IgxAxisComponent.prototype.getItemValue = function (item, memberPathName) {
        var iv = this.i.hd(item, memberPathName);
        return (iv);
    };
    /**
     * Gets the label for a data item.
    
    * @param value  * The unscaled value to get a label for.
    */
    IgxAxisComponent.prototype.getValueLabel = function (value) {
        var iv = this.i.ih(value);
        return (iv);
    };
    /**
     * Scales a value from axis space into screen space.
    
    * @param unscaledValue  * The unscaled axis value to scale.
    */
    IgxAxisComponent.prototype.scaleValue = function (unscaledValue) {
        var iv = this.i.gg(unscaledValue);
        return (iv);
    };
    Object.defineProperty(IgxAxisComponent.prototype, "rangeChanged", {
        /**
         * Occurs when the axis range changes.
        */
        get: function () {
            var _this = this;
            if (this._rangeChanged == null) {
                this._rangeChanged = new EventEmitter();
                this.i.rangeChanged = delegateCombine(this.i.rangeChanged, function (o, e) {
                    _this._runInZone(function () {
                        var outerArgs = new IgxAxisRangeChangedEventArgs();
                        outerArgs._provideImplementation(e);
                        if (_this.beforeRangeChanged) {
                            _this.beforeRangeChanged(_this, outerArgs);
                        }
                        _this._rangeChanged.emit({
                            sender: _this,
                            args: outerArgs
                        });
                    });
                });
            }
            return this._rangeChanged;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(IgxAxisComponent.prototype, "renderRequested", {
        /**
         * This event is raised every time a render has been requested from a series.
        */
        get: function () {
            var _this = this;
            if (this._renderRequested == null) {
                this._renderRequested = new EventEmitter();
                this.i.renderRequested = delegateCombine(this.i.renderRequested, function (o, e) {
                    _this._runInZone(function () {
                        var outerArgs = new IgxRenderRequestedEventArgs();
                        outerArgs._provideImplementation(e);
                        if (_this.beforeRenderRequested) {
                            _this.beforeRenderRequested(_this, outerArgs);
                        }
                        _this._renderRequested.emit({
                            sender: _this,
                            args: outerArgs
                        });
                    });
                });
            }
            return this._renderRequested;
        },
        enumerable: false,
        configurable: true
    });
    IgxAxisComponent.prototype._runInZone = function (act) {
        if (this._zoneRunner != null) {
            this._zoneRunner(act);
        }
        else {
            act();
        }
    };
    IgxAxisComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IgxAxisComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
    IgxAxisComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: IgxAxisComponent, selector: "ng-component", inputs: { name: "name", formatLabel: "formatLabel", title: "title", stroke: "stroke", actualStroke: "actualStroke", strokeThickness: "strokeThickness", strokeDashArray: "strokeDashArray", strip: "strip", majorStroke: "majorStroke", actualMajorStroke: "actualMajorStroke", majorStrokeThickness: "majorStrokeThickness", majorStrokeDashArray: "majorStrokeDashArray", minorStroke: "minorStroke", actualMinorStroke: "actualMinorStroke", minorStrokeThickness: "minorStrokeThickness", minorStrokeDashArray: "minorStrokeDashArray", tickStroke: "tickStroke", tickStrokeThickness: "tickStrokeThickness", tickStrokeDashArray: "tickStrokeDashArray", tickLength: "tickLength", isDisabled: "isDisabled", isInverted: "isInverted", shouldAvoidAnnotationCollisions: "shouldAvoidAnnotationCollisions", shouldKeepAnnotationsInView: "shouldKeepAnnotationsInView", usePerLabelHeightMeasurement: "usePerLabelHeightMeasurement", useEnhancedIntervalManagement: "useEnhancedIntervalManagement", enhancedIntervalMinimumCharacters: "enhancedIntervalMinimumCharacters", enhancedIntervalPreferMoreCategoryLabels: "enhancedIntervalPreferMoreCategoryLabels", labelTextStyle: "labelTextStyle", labelTextColor: "labelTextColor", labelLocation: "labelLocation", labelVisibility: "labelVisibility", labelShowFirstLabel: "labelShowFirstLabel", labelAngle: "labelAngle", labelExtent: "labelExtent", labelMaximumExtent: "labelMaximumExtent", labelMaximumExtentPercentage: "labelMaximumExtentPercentage", labelLeftMargin: "labelLeftMargin", labelRightMargin: "labelRightMargin", labelTopMargin: "labelTopMargin", labelBottomMargin: "labelBottomMargin", labelHorizontalAlignment: "labelHorizontalAlignment", labelVerticalAlignment: "labelVerticalAlignment", crossingAxis: "crossingAxis", crossingValue: "crossingValue", titlePosition: "titlePosition", titleTextStyle: "titleTextStyle", titleTextColor: "titleTextColor", titleLocation: "titleLocation", titleVisibility: "titleVisibility", titleShowFirstLabel: "titleShowFirstLabel", titleAngle: "titleAngle", titleExtent: "titleExtent", titleMaximumExtent: "titleMaximumExtent", titleMaximumExtentPercentage: "titleMaximumExtentPercentage", titleLeftMargin: "titleLeftMargin", titleRightMargin: "titleRightMargin", titleTopMargin: "titleTopMargin", titleBottomMargin: "titleBottomMargin", titleHorizontalAlignment: "titleHorizontalAlignment", titleVerticalAlignment: "titleVerticalAlignment", annotations: "annotations", coercionMethods: "coercionMethods", expectFunctions: "expectFunctions", label: "label", labelFormat: "labelFormat", labelFormatSpecifiers: "labelFormatSpecifiers", companionAxisEnabled: "companionAxisEnabled", companionAxisLabelOpposite: "companionAxisLabelOpposite", companionAxisIsInverted: "companionAxisIsInverted", companionAxisCrossingAxis: "companionAxisCrossingAxis", companionAxisCrossingValue: "companionAxisCrossingValue", companionAxisLabelVisible: "companionAxisLabelVisible", companionAxisLabelAngle: "companionAxisLabelAngle", companionAxisLabelExtent: "companionAxisLabelExtent", companionAxisLabelLocation: "companionAxisLabelLocation", companionAxisLabelVerticalAlignment: "companionAxisLabelVerticalAlignment", companionAxisLabelHorizontalAlignment: "companionAxisLabelHorizontalAlignment", companionAxisLabelColor: "companionAxisLabelColor", companionAxisSyncronizedWithPrimaryAxis: "companionAxisSyncronizedWithPrimaryAxis", companionAxisStrip: "companionAxisStrip", companionAxisMajorStroke: "companionAxisMajorStroke", companionAxisMajorStrokeThickness: "companionAxisMajorStrokeThickness", companionAxisMinorStroke: "companionAxisMinorStroke", companionAxisMinorStrokeThickness: "companionAxisMinorStrokeThickness", companionAxisTickStroke: "companionAxisTickStroke", companionAxisTickLength: "companionAxisTickLength", companionAxisTickStrokeThickness: "companionAxisTickStrokeThickness", companionAxisTitle: "companionAxisTitle" }, outputs: { rangeChanged: "rangeChanged", renderRequested: "renderRequested" }, ngImport: i0, template: "", isInline: true });
    return IgxAxisComponent;
}());
export { IgxAxisComponent };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: IgxAxisComponent, decorators: [{
            type: Component,
            args: [{
                    template: "",
                }]
        }], ctorParameters: function () { return []; }, propDecorators: { name: [{
                type: Input
            }], formatLabel: [{
                type: Input
            }], title: [{
                type: Input
            }], stroke: [{
                type: Input
            }], actualStroke: [{
                type: Input
            }], strokeThickness: [{
                type: Input
            }], strokeDashArray: [{
                type: Input
            }], strip: [{
                type: Input
            }], majorStroke: [{
                type: Input
            }], actualMajorStroke: [{
                type: Input
            }], majorStrokeThickness: [{
                type: Input
            }], majorStrokeDashArray: [{
                type: Input
            }], minorStroke: [{
                type: Input
            }], actualMinorStroke: [{
                type: Input
            }], minorStrokeThickness: [{
                type: Input
            }], minorStrokeDashArray: [{
                type: Input
            }], tickStroke: [{
                type: Input
            }], tickStrokeThickness: [{
                type: Input
            }], tickStrokeDashArray: [{
                type: Input
            }], tickLength: [{
                type: Input
            }], isDisabled: [{
                type: Input
            }], isInverted: [{
                type: Input
            }], shouldAvoidAnnotationCollisions: [{
                type: Input
            }], shouldKeepAnnotationsInView: [{
                type: Input
            }], usePerLabelHeightMeasurement: [{
                type: Input
            }], useEnhancedIntervalManagement: [{
                type: Input
            }], enhancedIntervalMinimumCharacters: [{
                type: Input
            }], enhancedIntervalPreferMoreCategoryLabels: [{
                type: Input
            }], labelTextStyle: [{
                type: Input
            }], labelTextColor: [{
                type: Input
            }], labelLocation: [{
                type: Input
            }], labelVisibility: [{
                type: Input
            }], labelShowFirstLabel: [{
                type: Input
            }], labelAngle: [{
                type: Input
            }], labelExtent: [{
                type: Input
            }], labelMaximumExtent: [{
                type: Input
            }], labelMaximumExtentPercentage: [{
                type: Input
            }], labelLeftMargin: [{
                type: Input
            }], labelRightMargin: [{
                type: Input
            }], labelTopMargin: [{
                type: Input
            }], labelBottomMargin: [{
                type: Input
            }], labelHorizontalAlignment: [{
                type: Input
            }], labelVerticalAlignment: [{
                type: Input
            }], crossingAxis: [{
                type: Input
            }], crossingValue: [{
                type: Input
            }], titlePosition: [{
                type: Input
            }], titleTextStyle: [{
                type: Input
            }], titleTextColor: [{
                type: Input
            }], titleLocation: [{
                type: Input
            }], titleVisibility: [{
                type: Input
            }], titleShowFirstLabel: [{
                type: Input
            }], titleAngle: [{
                type: Input
            }], titleExtent: [{
                type: Input
            }], titleMaximumExtent: [{
                type: Input
            }], titleMaximumExtentPercentage: [{
                type: Input
            }], titleLeftMargin: [{
                type: Input
            }], titleRightMargin: [{
                type: Input
            }], titleTopMargin: [{
                type: Input
            }], titleBottomMargin: [{
                type: Input
            }], titleHorizontalAlignment: [{
                type: Input
            }], titleVerticalAlignment: [{
                type: Input
            }], annotations: [{
                type: Input
            }], coercionMethods: [{
                type: Input
            }], expectFunctions: [{
                type: Input
            }], label: [{
                type: Input
            }], labelFormat: [{
                type: Input
            }], labelFormatSpecifiers: [{
                type: Input
            }], companionAxisEnabled: [{
                type: Input
            }], companionAxisLabelOpposite: [{
                type: Input
            }], companionAxisIsInverted: [{
                type: Input
            }], companionAxisCrossingAxis: [{
                type: Input
            }], companionAxisCrossingValue: [{
                type: Input
            }], companionAxisLabelVisible: [{
                type: Input
            }], companionAxisLabelAngle: [{
                type: Input
            }], companionAxisLabelExtent: [{
                type: Input
            }], companionAxisLabelLocation: [{
                type: Input
            }], companionAxisLabelVerticalAlignment: [{
                type: Input
            }], companionAxisLabelHorizontalAlignment: [{
                type: Input
            }], companionAxisLabelColor: [{
                type: Input
            }], companionAxisSyncronizedWithPrimaryAxis: [{
                type: Input
            }], companionAxisStrip: [{
                type: Input
            }], companionAxisMajorStroke: [{
                type: Input
            }], companionAxisMajorStrokeThickness: [{
                type: Input
            }], companionAxisMinorStroke: [{
                type: Input
            }], companionAxisMinorStrokeThickness: [{
                type: Input
            }], companionAxisTickStroke: [{
                type: Input
            }], companionAxisTickLength: [{
                type: Input
            }], companionAxisTickStrokeThickness: [{
                type: Input
            }], companionAxisTitle: [{
                type: Input
            }], rangeChanged: [{
                type: Output
            }], renderRequested: [{
                type: Output
            }] } });
