import { HorizontalAlignment_$type } from "igniteui-react-core";
import { VerticalAlignment_$type } from "igniteui-react-core";
import { Visibility_$type } from "igniteui-react-core";
import { ValueAxisLabelLocation_$type } from "./ValueAxisLabelLocation";
import { AngleAxisLabelLocation_$type } from "./AngleAxisLabelLocation";
import { IgrDomainChart } from "./igr-domain-chart";
import { brushToString, stringToBrush, ensureBool, ensureEnum, arrayFindByName } from "igniteui-react-core";
/**
 * Represents a base class for domain charts with X/Y axes
*/
export class IgrRadialBaseChart extends IgrDomainChart {
    /**
                                 * @hidden
                                 */
    get i() {
        return this._implementation;
    }
    constructor(props) {
        super(props);
    }
    /**
     * Gets or sets function which takes an context object and returns a formatted label for the X-axis.
    */
    get angleAxisFormatLabel() {
        return this.i.zq;
    }
    set angleAxisFormatLabel(v) {
        this.i.zq = v;
    }
    /**
     * Gets or sets function which takes a context object and returns a formatted label for the Y-axis.
    */
    get valueAxisFormatLabel() {
        return this.i.zr;
    }
    set valueAxisFormatLabel(v) {
        this.i.zr = v;
    }
    /**
     * Gets or sets the left margin of labels on the X-axis
    */
    get angleAxisLabelLeftMargin() {
        return this.i.aa1;
    }
    set angleAxisLabelLeftMargin(v) {
        this.i.aa1 = +v;
    }
    /**
     * Gets or sets the top margin of labels on the X-axis
    */
    get angleAxisLabelTopMargin() {
        return this.i.aa3;
    }
    set angleAxisLabelTopMargin(v) {
        this.i.aa3 = +v;
    }
    /**
     * Gets or sets the right margin of labels on the X-axis
    */
    get angleAxisLabelRightMargin() {
        return this.i.aa2;
    }
    set angleAxisLabelRightMargin(v) {
        this.i.aa2 = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the X-axis
    */
    get angleAxisLabelBottomMargin() {
        return this.i.aa0;
    }
    set angleAxisLabelBottomMargin(v) {
        this.i.aa0 = +v;
    }
    /**
     * Gets or sets the left margin of labels on the Y-axis
    */
    get valueAxisLabelLeftMargin() {
        return this.i.abm;
    }
    set valueAxisLabelLeftMargin(v) {
        this.i.abm = +v;
    }
    /**
     * Gets or sets the top margin of labels on the Y-axis
    */
    get valueAxisLabelTopMargin() {
        return this.i.abo;
    }
    set valueAxisLabelTopMargin(v) {
        this.i.abo = +v;
    }
    /**
     * Gets or sets the right margin of labels on the Y-axis
    */
    get valueAxisLabelRightMargin() {
        return this.i.abn;
    }
    set valueAxisLabelRightMargin(v) {
        this.i.abn = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the Y-axis
    */
    get valueAxisLabelBottomMargin() {
        return this.i.abl;
    }
    set valueAxisLabelBottomMargin(v) {
        this.i.abl = +v;
    }
    /**
     * Gets or sets color of labels on the X-axis
    */
    get angleAxisLabelTextColor() {
        return brushToString(this.i.aft);
    }
    set angleAxisLabelTextColor(v) {
        this.i.aft = stringToBrush(v);
    }
    /**
     * Gets or sets color of labels on the Y-axis
    */
    get valueAxisLabelTextColor() {
        return brushToString(this.i.af0);
    }
    set valueAxisLabelTextColor(v) {
        this.i.af0 = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the X-axis
    */
    get actualAngleAxisLabelTextColor() {
        return brushToString(this.i.afr);
    }
    set actualAngleAxisLabelTextColor(v) {
        this.i.afr = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the Y-axis
    */
    get actualValueAxisLabelTextColor() {
        return brushToString(this.i.afs);
    }
    set actualValueAxisLabelTextColor(v) {
        this.i.afs = stringToBrush(v);
    }
    /**
     * Gets or sets the margin around a title on the X-axis
    */
    get angleAxisTitleMargin() {
        return this.i.abc;
    }
    set angleAxisTitleMargin(v) {
        this.i.abc = +v;
    }
    /**
     * Gets or sets the margin around a title on the Y-axis
    */
    get valueAxisTitleMargin() {
        return this.i.abx;
    }
    set valueAxisTitleMargin(v) {
        this.i.abx = +v;
    }
    /**
     * Gets or sets the left margin of a title on the X-axis
    */
    get angleAxisTitleLeftMargin() {
        return this.i.abb;
    }
    set angleAxisTitleLeftMargin(v) {
        this.i.abb = +v;
    }
    /**
     * Gets or sets the left margin of a title on the Y-axis
    */
    get valueAxisTitleLeftMargin() {
        return this.i.abw;
    }
    set valueAxisTitleLeftMargin(v) {
        this.i.abw = +v;
    }
    /**
     * Gets or sets the top margin of a title on the X-axis
    */
    get angleAxisTitleTopMargin() {
        return this.i.abe;
    }
    set angleAxisTitleTopMargin(v) {
        this.i.abe = +v;
    }
    /**
     * Gets or sets the top margin of a title on the Y-axis
    */
    get valueAxisTitleTopMargin() {
        return this.i.abz;
    }
    set valueAxisTitleTopMargin(v) {
        this.i.abz = +v;
    }
    /**
     * Gets or sets the right margin of a title on the X-axis
    */
    get angleAxisTitleRightMargin() {
        return this.i.abd;
    }
    set angleAxisTitleRightMargin(v) {
        this.i.abd = +v;
    }
    /**
     * Gets or sets the right margin of a title on the Y-axis
    */
    get valueAxisTitleRightMargin() {
        return this.i.aby;
    }
    set valueAxisTitleRightMargin(v) {
        this.i.aby = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the X-axis
    */
    get angleAxisTitleBottomMargin() {
        return this.i.aba;
    }
    set angleAxisTitleBottomMargin(v) {
        this.i.aba = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the Y-axis
    */
    get valueAxisTitleBottomMargin() {
        return this.i.abv;
    }
    set valueAxisTitleBottomMargin(v) {
        this.i.abv = +v;
    }
    /**
     * Gets or sets color of title on the X-axis
    */
    get angleAxisTitleTextColor() {
        return brushToString(this.i.afz);
    }
    set angleAxisTitleTextColor(v) {
        this.i.afz = stringToBrush(v);
    }
    /**
     * Gets or sets color of title on the Y-axis
    */
    get valueAxisTitleTextColor() {
        return brushToString(this.i.af6);
    }
    set valueAxisTitleTextColor(v) {
        this.i.af6 = stringToBrush(v);
    }
    /**
     * Gets or sets CSS font property for labels on X-axis
    */
    get angleAxisLabelTextStyle() {
        return this.i.acs;
    }
    set angleAxisLabelTextStyle(v) {
        this.i.acs = v;
    }
    /**
     * Gets or sets CSS font property for labels on Y-axis
    */
    get valueAxisLabelTextStyle() {
        return this.i.ady;
    }
    set valueAxisLabelTextStyle(v) {
        this.i.ady = v;
    }
    /**
     * Gets or sets CSS font property for title on X-axis
    */
    get angleAxisTitleTextStyle() {
        return this.i.adg;
    }
    set angleAxisTitleTextStyle(v) {
        this.i.adg = v;
    }
    /**
     * Gets or sets CSS font property for title on Y-axis
    */
    get valueAxisTitleTextStyle() {
        return this.i.aem;
    }
    set valueAxisTitleTextStyle(v) {
        this.i.aem = v;
    }
    /**
     * Gets or sets the format for labels along the X-axis.
    */
    get angleAxisLabel() {
        return this.i.ab2;
    }
    set angleAxisLabel(v) {
        this.i.ab2 = v;
    }
    /**
     * Gets or sets the property or string from which the labels are derived.
    */
    get valueAxisLabel() {
        return this.i.ab3;
    }
    set valueAxisLabel(v) {
        this.i.ab3 = v;
    }
    /**
     * Gets or sets the color to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStroke() {
        return brushToString(this.i.afu);
    }
    set angleAxisMajorStroke(v) {
        this.i.afu = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStroke() {
        return brushToString(this.i.af1);
    }
    set valueAxisMajorStroke(v) {
        this.i.af1 = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStrokeThickness() {
        return this.i.aa4;
    }
    set angleAxisMajorStrokeThickness(v) {
        this.i.aa4 = +v;
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStrokeThickness() {
        return this.i.abp;
    }
    set valueAxisMajorStrokeThickness(v) {
        this.i.abp = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStrokeThickness() {
        return this.i.aa5;
    }
    set angleAxisMinorStrokeThickness(v) {
        this.i.aa5 = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStrokeThickness() {
        return this.i.abq;
    }
    set valueAxisMinorStrokeThickness(v) {
        this.i.abq = +v;
    }
    /**
     * Gets or sets the color to apply to stripes along the X-axis.
    */
    get angleAxisStrip() {
        return brushToString(this.i.afw);
    }
    set angleAxisStrip(v) {
        this.i.afw = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to stripes along the Y-axis.
    */
    get valueAxisStrip() {
        return brushToString(this.i.af3);
    }
    set valueAxisStrip(v) {
        this.i.af3 = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the X-axis line.
    */
    get angleAxisStroke() {
        return brushToString(this.i.afx);
    }
    set angleAxisStroke(v) {
        this.i.afx = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the Y-axis line.
    */
    get valueAxisStroke() {
        return brushToString(this.i.af4);
    }
    set valueAxisStroke(v) {
        this.i.af4 = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to the X-axis line.
    */
    get angleAxisStrokeThickness() {
        return this.i.aa6;
    }
    set angleAxisStrokeThickness(v) {
        this.i.aa6 = +v;
    }
    /**
     * Gets or sets the thickness to apply to the Y-axis line.
    */
    get valueAxisStrokeThickness() {
        return this.i.abr;
    }
    set valueAxisStrokeThickness(v) {
        this.i.abr = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the X-axis.
    */
    get angleAxisTickLength() {
        return this.i.aa7;
    }
    set angleAxisTickLength(v) {
        this.i.aa7 = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the Y-axis.
    */
    get valueAxisTickLength() {
        return this.i.abs;
    }
    set valueAxisTickLength(v) {
        this.i.abs = +v;
    }
    /**
     * Gets or sets the color to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStroke() {
        return brushToString(this.i.afy);
    }
    set angleAxisTickStroke(v) {
        this.i.afy = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStroke() {
        return brushToString(this.i.af5);
    }
    set valueAxisTickStroke(v) {
        this.i.af5 = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStrokeThickness() {
        return this.i.aa8;
    }
    set angleAxisTickStrokeThickness(v) {
        this.i.aa8 = +v;
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStrokeThickness() {
        return this.i.abt;
    }
    set valueAxisTickStrokeThickness(v) {
        this.i.abt = +v;
    }
    /**
     * Gets or sets the Text to display below the X-axis.
    */
    get angleAxisTitle() {
        return this.i.ac7;
    }
    set angleAxisTitle(v) {
        this.i.ac7 = v;
    }
    /**
     * Gets or sets the Text to display to the left of the Y-axis.
    */
    get valueAxisTitle() {
        return this.i.aed;
    }
    set valueAxisTitle(v) {
        this.i.aed = v;
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStroke() {
        return brushToString(this.i.afv);
    }
    set angleAxisMinorStroke(v) {
        this.i.afv = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStroke() {
        return brushToString(this.i.af2);
    }
    set valueAxisMinorStroke(v) {
        this.i.af2 = stringToBrush(v);
    }
    /**
     * Gets or sets the angle of rotation for labels along the X-axis.
    */
    get angleAxisLabelAngle() {
        return this.i.aaz;
    }
    set angleAxisLabelAngle(v) {
        this.i.aaz = +v;
    }
    /**
     * Gets or sets the angle of rotation for labels along the Y-axis.
    */
    get valueAxisLabelAngle() {
        return this.i.abk;
    }
    set valueAxisLabelAngle(v) {
        this.i.abk = +v;
    }
    /**
     * Gets or sets the distance between the X-axis and the bottom of the chart.
    */
    get angleAxisExtent() {
        return this.i.aay;
    }
    set angleAxisExtent(v) {
        this.i.aay = +v;
    }
    /**
     * Gets or sets the distance between the Y-axis and the left edge of the chart.
    */
    get valueAxisExtent() {
        return this.i.abj;
    }
    set valueAxisExtent(v) {
        this.i.abj = +v;
    }
    /**
     * Gets or sets the angle of rotation for the X-axis title.
    */
    get angleAxisTitleAngle() {
        return this.i.aa9;
    }
    set angleAxisTitleAngle(v) {
        this.i.aa9 = +v;
    }
    /**
     * Gets or sets the angle of rotation for the Y-axis title.
    */
    get valueAxisTitleAngle() {
        return this.i.abu;
    }
    set valueAxisTitleAngle(v) {
        this.i.abu = +v;
    }
    /**
     * Gets or sets whether to invert the direction of the X-axis by placing the first data items on the right side of the chart.
    */
    get angleAxisInverted() {
        return this.i.zy;
    }
    set angleAxisInverted(v) {
        this.i.zy = ensureBool(v);
    }
    /**
     * Gets or sets whether to invert the direction of the Y-axis by placing the minimum numeric value at the top of the chart.
    */
    get valueAxisInverted() {
        return this.i.zz;
    }
    set valueAxisInverted(v) {
        this.i.zz = ensureBool(v);
    }
    /**
     * Gets or sets Horizontal alignment of the X-axis title.
    */
    get angleAxisTitleAlignment() {
        return this.i.ae9;
    }
    set angleAxisTitleAlignment(v) {
        this.i.ae9 = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of the Y-axis title.
    */
    get valueAxisTitleAlignment() {
        return this.i.agc;
    }
    set valueAxisTitleAlignment(v) {
        this.i.agc = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of X-axis labels.
    */
    get angleAxisLabelHorizontalAlignment() {
        return this.i.ae8;
    }
    set angleAxisLabelHorizontalAlignment(v) {
        this.i.ae8 = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of Y-axis labels.
    */
    get valueAxisLabelHorizontalAlignment() {
        return this.i.afa;
    }
    set valueAxisLabelHorizontalAlignment(v) {
        this.i.afa = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of X-axis labels.
    */
    get angleAxisLabelVerticalAlignment() {
        return this.i.aga;
    }
    set angleAxisLabelVerticalAlignment(v) {
        this.i.aga = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of Y-axis labels.
    */
    get valueAxisLabelVerticalAlignment() {
        return this.i.agb;
    }
    set valueAxisLabelVerticalAlignment(v) {
        this.i.agb = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Visibility of X-axis labels.
    */
    get angleAxisLabelVisibility() {
        return this.i.agf;
    }
    set angleAxisLabelVisibility(v) {
        this.i.agf = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets Visibility of Y-axis labels.
    */
    get valueAxisLabelVisibility() {
        return this.i.agg;
    }
    set valueAxisLabelVisibility(v) {
        this.i.agg = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets location of Y-axis labels, relative to the plot area.
    */
    get valueAxisLabelLocation() {
        return this.i.zv;
    }
    set valueAxisLabelLocation(v) {
        this.i.zv = ensureEnum(ValueAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets location of X-axis labels, relative to the plot area.
    */
    get angleAxisLabelLocation() {
        return this.i.zl;
    }
    set angleAxisLabelLocation(v) {
        this.i.zl = ensureEnum(AngleAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets the format string for the X axis label.
    */
    get angleAxisLabelFormat() {
        return this.i.acj;
    }
    set angleAxisLabelFormat(v) {
        this.i.acj = v;
    }
    /**
     * Gets or sets the format specifiers to use with the AngleAxisLabelFormat string.
    */
    get angleAxisLabelFormatSpecifiers() {
        return this.i.zi;
    }
    set angleAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.zi = v;
    }
    /**
     * Gets or sets the format string for the Y axis label.
    */
    get valueAxisLabelFormat() {
        return this.i.adp;
    }
    set valueAxisLabelFormat(v) {
        this.i.adp = v;
    }
    /**
     * Gets or sets the format specifiers to use with the ValueAxisLabelFormat string.
    */
    get valueAxisLabelFormatSpecifiers() {
        return this.i.zj;
    }
    set valueAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.zj = v;
    }
    findByName(name) {
        var baseResult = super.findByName(name);
        if (baseResult) {
            return baseResult;
        }
        if (this.angleAxisLabelFormatSpecifiers != null && arrayFindByName(this.angleAxisLabelFormatSpecifiers, name)) {
            return arrayFindByName(this.angleAxisLabelFormatSpecifiers, name);
        }
        if (this.valueAxisLabelFormatSpecifiers != null && arrayFindByName(this.valueAxisLabelFormatSpecifiers, name)) {
            return arrayFindByName(this.valueAxisLabelFormatSpecifiers, name);
        }
        return null;
    }
    /**
     * Called by the UI framework to provide a UI container for rendering this control.
    
    * @param container  * The UI container element.
    */
    provideContainer(container) {
        this.i.provideContainer(container);
    }
    /**
     * Converts the given visual location to a data value.
    
    * @param unscaledValue  * The x-coordinate of the location to scale.
    */
    getScaledAngle(unscaledValue) {
        let iv = this.i.abf(unscaledValue);
        return (iv);
    }
    /**
     * Converts the given data value to a visual location.
    
    * @param scaledValue  * The data value to un-scale.
    */
    getUnscaledAngle(scaledValue) {
        let iv = this.i.abh(scaledValue);
        return (iv);
    }
    /**
     * Converts the given visual location to a data value.
    
    * @param unscaledValue  * The y-coordinate of the location to scale.
    */
    getScaledValue(unscaledValue) {
        let iv = this.i.abg(unscaledValue);
        return (iv);
    }
    /**
     * Converts the given data value to a visual location.
    
    * @param scaledValue  * The data value to un-scale.
    */
    getUnscaledValue(scaledValue) {
        let iv = this.i.abi(scaledValue);
        return (iv);
    }
}
