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.z5;
    }
    set angleAxisFormatLabel(v) {
        this.i.z5 = v;
    }
    /**
     * Gets or sets function which takes a context object and returns a formatted label for the Y-axis.
    */
    get valueAxisFormatLabel() {
        return this.i.z6;
    }
    set valueAxisFormatLabel(v) {
        this.i.z6 = v;
    }
    /**
     * Gets or sets the left margin of labels on the X-axis
    */
    get angleAxisLabelLeftMargin() {
        return this.i.abg;
    }
    set angleAxisLabelLeftMargin(v) {
        this.i.abg = +v;
    }
    /**
     * Gets or sets the top margin of labels on the X-axis
    */
    get angleAxisLabelTopMargin() {
        return this.i.abi;
    }
    set angleAxisLabelTopMargin(v) {
        this.i.abi = +v;
    }
    /**
     * Gets or sets the right margin of labels on the X-axis
    */
    get angleAxisLabelRightMargin() {
        return this.i.abh;
    }
    set angleAxisLabelRightMargin(v) {
        this.i.abh = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the X-axis
    */
    get angleAxisLabelBottomMargin() {
        return this.i.abf;
    }
    set angleAxisLabelBottomMargin(v) {
        this.i.abf = +v;
    }
    /**
     * Gets or sets the left margin of labels on the Y-axis
    */
    get valueAxisLabelLeftMargin() {
        return this.i.ab1;
    }
    set valueAxisLabelLeftMargin(v) {
        this.i.ab1 = +v;
    }
    /**
     * Gets or sets the top margin of labels on the Y-axis
    */
    get valueAxisLabelTopMargin() {
        return this.i.ab3;
    }
    set valueAxisLabelTopMargin(v) {
        this.i.ab3 = +v;
    }
    /**
     * Gets or sets the right margin of labels on the Y-axis
    */
    get valueAxisLabelRightMargin() {
        return this.i.ab2;
    }
    set valueAxisLabelRightMargin(v) {
        this.i.ab2 = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the Y-axis
    */
    get valueAxisLabelBottomMargin() {
        return this.i.ab0;
    }
    set valueAxisLabelBottomMargin(v) {
        this.i.ab0 = +v;
    }
    /**
     * Gets or sets color of labels on the X-axis
    */
    get angleAxisLabelTextColor() {
        return brushToString(this.i.af8);
    }
    set angleAxisLabelTextColor(v) {
        this.i.af8 = stringToBrush(v);
    }
    /**
     * Gets or sets color of labels on the Y-axis
    */
    get valueAxisLabelTextColor() {
        return brushToString(this.i.agf);
    }
    set valueAxisLabelTextColor(v) {
        this.i.agf = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the X-axis
    */
    get actualAngleAxisLabelTextColor() {
        return brushToString(this.i.af6);
    }
    set actualAngleAxisLabelTextColor(v) {
        this.i.af6 = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the Y-axis
    */
    get actualValueAxisLabelTextColor() {
        return brushToString(this.i.af7);
    }
    set actualValueAxisLabelTextColor(v) {
        this.i.af7 = stringToBrush(v);
    }
    /**
     * Gets or sets the margin around a title on the X-axis
    */
    get angleAxisTitleMargin() {
        return this.i.abr;
    }
    set angleAxisTitleMargin(v) {
        this.i.abr = +v;
    }
    /**
     * Gets or sets the margin around a title on the Y-axis
    */
    get valueAxisTitleMargin() {
        return this.i.acc;
    }
    set valueAxisTitleMargin(v) {
        this.i.acc = +v;
    }
    /**
     * Gets or sets the left margin of a title on the X-axis
    */
    get angleAxisTitleLeftMargin() {
        return this.i.abq;
    }
    set angleAxisTitleLeftMargin(v) {
        this.i.abq = +v;
    }
    /**
     * Gets or sets the left margin of a title on the Y-axis
    */
    get valueAxisTitleLeftMargin() {
        return this.i.acb;
    }
    set valueAxisTitleLeftMargin(v) {
        this.i.acb = +v;
    }
    /**
     * Gets or sets the top margin of a title on the X-axis
    */
    get angleAxisTitleTopMargin() {
        return this.i.abt;
    }
    set angleAxisTitleTopMargin(v) {
        this.i.abt = +v;
    }
    /**
     * Gets or sets the top margin of a title on the Y-axis
    */
    get valueAxisTitleTopMargin() {
        return this.i.ace;
    }
    set valueAxisTitleTopMargin(v) {
        this.i.ace = +v;
    }
    /**
     * Gets or sets the right margin of a title on the X-axis
    */
    get angleAxisTitleRightMargin() {
        return this.i.abs;
    }
    set angleAxisTitleRightMargin(v) {
        this.i.abs = +v;
    }
    /**
     * Gets or sets the right margin of a title on the Y-axis
    */
    get valueAxisTitleRightMargin() {
        return this.i.acd;
    }
    set valueAxisTitleRightMargin(v) {
        this.i.acd = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the X-axis
    */
    get angleAxisTitleBottomMargin() {
        return this.i.abp;
    }
    set angleAxisTitleBottomMargin(v) {
        this.i.abp = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the Y-axis
    */
    get valueAxisTitleBottomMargin() {
        return this.i.aca;
    }
    set valueAxisTitleBottomMargin(v) {
        this.i.aca = +v;
    }
    /**
     * Gets or sets color of title on the X-axis
    */
    get angleAxisTitleTextColor() {
        return brushToString(this.i.age);
    }
    set angleAxisTitleTextColor(v) {
        this.i.age = stringToBrush(v);
    }
    /**
     * Gets or sets color of title on the Y-axis
    */
    get valueAxisTitleTextColor() {
        return brushToString(this.i.agl);
    }
    set valueAxisTitleTextColor(v) {
        this.i.agl = stringToBrush(v);
    }
    /**
     * Gets or sets CSS font property for labels on X-axis
    */
    get angleAxisLabelTextStyle() {
        return this.i.ac7;
    }
    set angleAxisLabelTextStyle(v) {
        this.i.ac7 = v;
    }
    /**
     * Gets or sets CSS font property for labels on Y-axis
    */
    get valueAxisLabelTextStyle() {
        return this.i.aed;
    }
    set valueAxisLabelTextStyle(v) {
        this.i.aed = v;
    }
    /**
     * Gets or sets CSS font property for title on X-axis
    */
    get angleAxisTitleTextStyle() {
        return this.i.adv;
    }
    set angleAxisTitleTextStyle(v) {
        this.i.adv = v;
    }
    /**
     * Gets or sets CSS font property for title on Y-axis
    */
    get valueAxisTitleTextStyle() {
        return this.i.ae1;
    }
    set valueAxisTitleTextStyle(v) {
        this.i.ae1 = v;
    }
    /**
     * Gets or sets the format for labels along the X-axis.
    */
    get angleAxisLabel() {
        return this.i.ach;
    }
    set angleAxisLabel(v) {
        this.i.ach = v;
    }
    /**
     * Gets or sets the property or string from which the labels are derived.
    */
    get valueAxisLabel() {
        return this.i.aci;
    }
    set valueAxisLabel(v) {
        this.i.aci = v;
    }
    /**
     * Gets or sets the color to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStroke() {
        return brushToString(this.i.af9);
    }
    set angleAxisMajorStroke(v) {
        this.i.af9 = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStroke() {
        return brushToString(this.i.agg);
    }
    set valueAxisMajorStroke(v) {
        this.i.agg = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStrokeThickness() {
        return this.i.abj;
    }
    set angleAxisMajorStrokeThickness(v) {
        this.i.abj = +v;
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStrokeThickness() {
        return this.i.ab4;
    }
    set valueAxisMajorStrokeThickness(v) {
        this.i.ab4 = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStrokeThickness() {
        return this.i.abk;
    }
    set angleAxisMinorStrokeThickness(v) {
        this.i.abk = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStrokeThickness() {
        return this.i.ab5;
    }
    set valueAxisMinorStrokeThickness(v) {
        this.i.ab5 = +v;
    }
    /**
     * Gets or sets the color to apply to stripes along the X-axis.
    */
    get angleAxisStrip() {
        return brushToString(this.i.agb);
    }
    set angleAxisStrip(v) {
        this.i.agb = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to stripes along the Y-axis.
    */
    get valueAxisStrip() {
        return brushToString(this.i.agi);
    }
    set valueAxisStrip(v) {
        this.i.agi = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the X-axis line.
    */
    get angleAxisStroke() {
        return brushToString(this.i.agc);
    }
    set angleAxisStroke(v) {
        this.i.agc = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the Y-axis line.
    */
    get valueAxisStroke() {
        return brushToString(this.i.agj);
    }
    set valueAxisStroke(v) {
        this.i.agj = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to the X-axis line.
    */
    get angleAxisStrokeThickness() {
        return this.i.abl;
    }
    set angleAxisStrokeThickness(v) {
        this.i.abl = +v;
    }
    /**
     * Gets or sets the thickness to apply to the Y-axis line.
    */
    get valueAxisStrokeThickness() {
        return this.i.ab6;
    }
    set valueAxisStrokeThickness(v) {
        this.i.ab6 = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the X-axis.
    */
    get angleAxisTickLength() {
        return this.i.abm;
    }
    set angleAxisTickLength(v) {
        this.i.abm = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the Y-axis.
    */
    get valueAxisTickLength() {
        return this.i.ab7;
    }
    set valueAxisTickLength(v) {
        this.i.ab7 = +v;
    }
    /**
     * Gets or sets the color to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStroke() {
        return brushToString(this.i.agd);
    }
    set angleAxisTickStroke(v) {
        this.i.agd = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStroke() {
        return brushToString(this.i.agk);
    }
    set valueAxisTickStroke(v) {
        this.i.agk = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStrokeThickness() {
        return this.i.abn;
    }
    set angleAxisTickStrokeThickness(v) {
        this.i.abn = +v;
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStrokeThickness() {
        return this.i.ab8;
    }
    set valueAxisTickStrokeThickness(v) {
        this.i.ab8 = +v;
    }
    /**
     * Gets or sets the Text to display below the X-axis.
    */
    get angleAxisTitle() {
        return this.i.adm;
    }
    set angleAxisTitle(v) {
        this.i.adm = v;
    }
    /**
     * Gets or sets the Text to display to the left of the Y-axis.
    */
    get valueAxisTitle() {
        return this.i.aes;
    }
    set valueAxisTitle(v) {
        this.i.aes = v;
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStroke() {
        return brushToString(this.i.aga);
    }
    set angleAxisMinorStroke(v) {
        this.i.aga = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStroke() {
        return brushToString(this.i.agh);
    }
    set valueAxisMinorStroke(v) {
        this.i.agh = stringToBrush(v);
    }
    /**
     * Gets or sets the angle of rotation for labels along the X-axis.
    */
    get angleAxisLabelAngle() {
        return this.i.abe;
    }
    set angleAxisLabelAngle(v) {
        this.i.abe = +v;
    }
    /**
     * Gets or sets the angle of rotation for labels along the Y-axis.
    */
    get valueAxisLabelAngle() {
        return this.i.abz;
    }
    set valueAxisLabelAngle(v) {
        this.i.abz = +v;
    }
    /**
     * Gets or sets the distance between the X-axis and the bottom of the chart.
    */
    get angleAxisExtent() {
        return this.i.abd;
    }
    set angleAxisExtent(v) {
        this.i.abd = +v;
    }
    /**
     * Gets or sets the distance between the Y-axis and the left edge of the chart.
    */
    get valueAxisExtent() {
        return this.i.aby;
    }
    set valueAxisExtent(v) {
        this.i.aby = +v;
    }
    /**
     * Gets or sets the angle of rotation for the X-axis title.
    */
    get angleAxisTitleAngle() {
        return this.i.abo;
    }
    set angleAxisTitleAngle(v) {
        this.i.abo = +v;
    }
    /**
     * Gets or sets the angle of rotation for the Y-axis title.
    */
    get valueAxisTitleAngle() {
        return this.i.ab9;
    }
    set valueAxisTitleAngle(v) {
        this.i.ab9 = +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.aad;
    }
    set angleAxisInverted(v) {
        this.i.aad = 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.aae;
    }
    set valueAxisInverted(v) {
        this.i.aae = ensureBool(v);
    }
    /**
     * Gets or sets Horizontal alignment of the X-axis title.
    */
    get angleAxisTitleAlignment() {
        return this.i.afo;
    }
    set angleAxisTitleAlignment(v) {
        this.i.afo = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of the Y-axis title.
    */
    get valueAxisTitleAlignment() {
        return this.i.agr;
    }
    set valueAxisTitleAlignment(v) {
        this.i.agr = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of X-axis labels.
    */
    get angleAxisLabelHorizontalAlignment() {
        return this.i.afn;
    }
    set angleAxisLabelHorizontalAlignment(v) {
        this.i.afn = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of Y-axis labels.
    */
    get valueAxisLabelHorizontalAlignment() {
        return this.i.afp;
    }
    set valueAxisLabelHorizontalAlignment(v) {
        this.i.afp = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of X-axis labels.
    */
    get angleAxisLabelVerticalAlignment() {
        return this.i.agp;
    }
    set angleAxisLabelVerticalAlignment(v) {
        this.i.agp = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of Y-axis labels.
    */
    get valueAxisLabelVerticalAlignment() {
        return this.i.agq;
    }
    set valueAxisLabelVerticalAlignment(v) {
        this.i.agq = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Visibility of X-axis labels.
    */
    get angleAxisLabelVisibility() {
        return this.i.agu;
    }
    set angleAxisLabelVisibility(v) {
        this.i.agu = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets Visibility of Y-axis labels.
    */
    get valueAxisLabelVisibility() {
        return this.i.agv;
    }
    set valueAxisLabelVisibility(v) {
        this.i.agv = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets location of Y-axis labels, relative to the plot area.
    */
    get valueAxisLabelLocation() {
        return this.i.aaa;
    }
    set valueAxisLabelLocation(v) {
        this.i.aaa = ensureEnum(ValueAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets location of X-axis labels, relative to the plot area.
    */
    get angleAxisLabelLocation() {
        return this.i.z0;
    }
    set angleAxisLabelLocation(v) {
        this.i.z0 = ensureEnum(AngleAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets the format string for the X axis label.
    */
    get angleAxisLabelFormat() {
        return this.i.acy;
    }
    set angleAxisLabelFormat(v) {
        this.i.acy = v;
    }
    /**
     * Gets or sets the format specifiers to use with the AngleAxisLabelFormat string.
    */
    get angleAxisLabelFormatSpecifiers() {
        return this.i.zx;
    }
    set angleAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.zx = v;
    }
    /**
     * Gets or sets the format string for the Y axis label.
    */
    get valueAxisLabelFormat() {
        return this.i.ad4;
    }
    set valueAxisLabelFormat(v) {
        this.i.ad4 = v;
    }
    /**
     * Gets or sets the format specifiers to use with the ValueAxisLabelFormat string.
    */
    get valueAxisLabelFormatSpecifiers() {
        return this.i.zy;
    }
    set valueAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.zy = 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.abu(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.abw(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.abv(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.abx(scaledValue);
        return (iv);
    }
}
