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.ze;
    }
    set angleAxisFormatLabel(v) {
        this.i.ze = v;
    }
    /**
     * Gets or sets function which takes a context object and returns a formatted label for the Y-axis.
    */
    get valueAxisFormatLabel() {
        return this.i.zf;
    }
    set valueAxisFormatLabel(v) {
        this.i.zf = v;
    }
    /**
     * Gets or sets the left margin of labels on the X-axis
    */
    get angleAxisLabelLeftMargin() {
        return this.i.aap;
    }
    set angleAxisLabelLeftMargin(v) {
        this.i.aap = +v;
    }
    /**
     * Gets or sets the top margin of labels on the X-axis
    */
    get angleAxisLabelTopMargin() {
        return this.i.aar;
    }
    set angleAxisLabelTopMargin(v) {
        this.i.aar = +v;
    }
    /**
     * Gets or sets the right margin of labels on the X-axis
    */
    get angleAxisLabelRightMargin() {
        return this.i.aaq;
    }
    set angleAxisLabelRightMargin(v) {
        this.i.aaq = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the X-axis
    */
    get angleAxisLabelBottomMargin() {
        return this.i.aao;
    }
    set angleAxisLabelBottomMargin(v) {
        this.i.aao = +v;
    }
    /**
     * Gets or sets the left margin of labels on the Y-axis
    */
    get valueAxisLabelLeftMargin() {
        return this.i.aba;
    }
    set valueAxisLabelLeftMargin(v) {
        this.i.aba = +v;
    }
    /**
     * Gets or sets the top margin of labels on the Y-axis
    */
    get valueAxisLabelTopMargin() {
        return this.i.abc;
    }
    set valueAxisLabelTopMargin(v) {
        this.i.abc = +v;
    }
    /**
     * Gets or sets the right margin of labels on the Y-axis
    */
    get valueAxisLabelRightMargin() {
        return this.i.abb;
    }
    set valueAxisLabelRightMargin(v) {
        this.i.abb = +v;
    }
    /**
     * Gets or sets the bottom margin of labels on the Y-axis
    */
    get valueAxisLabelBottomMargin() {
        return this.i.aa9;
    }
    set valueAxisLabelBottomMargin(v) {
        this.i.aa9 = +v;
    }
    /**
     * Gets or sets color of labels on the X-axis
    */
    get angleAxisLabelTextColor() {
        return brushToString(this.i.afh);
    }
    set angleAxisLabelTextColor(v) {
        this.i.afh = stringToBrush(v);
    }
    /**
     * Gets or sets color of labels on the Y-axis
    */
    get valueAxisLabelTextColor() {
        return brushToString(this.i.afo);
    }
    set valueAxisLabelTextColor(v) {
        this.i.afo = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the X-axis
    */
    get actualAngleAxisLabelTextColor() {
        return brushToString(this.i.aff);
    }
    set actualAngleAxisLabelTextColor(v) {
        this.i.aff = stringToBrush(v);
    }
    /**
     * Gets the actual color of labels on the Y-axis
    */
    get actualValueAxisLabelTextColor() {
        return brushToString(this.i.afg);
    }
    set actualValueAxisLabelTextColor(v) {
        this.i.afg = stringToBrush(v);
    }
    /**
     * Gets or sets the margin around a title on the X-axis
    */
    get angleAxisTitleMargin() {
        return this.i.aa0;
    }
    set angleAxisTitleMargin(v) {
        this.i.aa0 = +v;
    }
    /**
     * Gets or sets the margin around a title on the Y-axis
    */
    get valueAxisTitleMargin() {
        return this.i.abl;
    }
    set valueAxisTitleMargin(v) {
        this.i.abl = +v;
    }
    /**
     * Gets or sets the left margin of a title on the X-axis
    */
    get angleAxisTitleLeftMargin() {
        return this.i.aaz;
    }
    set angleAxisTitleLeftMargin(v) {
        this.i.aaz = +v;
    }
    /**
     * Gets or sets the left margin of a title on the Y-axis
    */
    get valueAxisTitleLeftMargin() {
        return this.i.abk;
    }
    set valueAxisTitleLeftMargin(v) {
        this.i.abk = +v;
    }
    /**
     * Gets or sets the top margin of a title on the X-axis
    */
    get angleAxisTitleTopMargin() {
        return this.i.aa2;
    }
    set angleAxisTitleTopMargin(v) {
        this.i.aa2 = +v;
    }
    /**
     * Gets or sets the top margin of a title on the Y-axis
    */
    get valueAxisTitleTopMargin() {
        return this.i.abn;
    }
    set valueAxisTitleTopMargin(v) {
        this.i.abn = +v;
    }
    /**
     * Gets or sets the right margin of a title on the X-axis
    */
    get angleAxisTitleRightMargin() {
        return this.i.aa1;
    }
    set angleAxisTitleRightMargin(v) {
        this.i.aa1 = +v;
    }
    /**
     * Gets or sets the right margin of a title on the Y-axis
    */
    get valueAxisTitleRightMargin() {
        return this.i.abm;
    }
    set valueAxisTitleRightMargin(v) {
        this.i.abm = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the X-axis
    */
    get angleAxisTitleBottomMargin() {
        return this.i.aay;
    }
    set angleAxisTitleBottomMargin(v) {
        this.i.aay = +v;
    }
    /**
     * Gets or sets the bottom margin of a title on the Y-axis
    */
    get valueAxisTitleBottomMargin() {
        return this.i.abj;
    }
    set valueAxisTitleBottomMargin(v) {
        this.i.abj = +v;
    }
    /**
     * Gets or sets color of title on the X-axis
    */
    get angleAxisTitleTextColor() {
        return brushToString(this.i.afn);
    }
    set angleAxisTitleTextColor(v) {
        this.i.afn = stringToBrush(v);
    }
    /**
     * Gets or sets color of title on the Y-axis
    */
    get valueAxisTitleTextColor() {
        return brushToString(this.i.afu);
    }
    set valueAxisTitleTextColor(v) {
        this.i.afu = stringToBrush(v);
    }
    /**
     * Gets or sets CSS font property for labels on X-axis
    */
    get angleAxisLabelTextStyle() {
        return this.i.acg;
    }
    set angleAxisLabelTextStyle(v) {
        this.i.acg = v;
    }
    /**
     * Gets or sets CSS font property for labels on Y-axis
    */
    get valueAxisLabelTextStyle() {
        return this.i.adm;
    }
    set valueAxisLabelTextStyle(v) {
        this.i.adm = v;
    }
    /**
     * Gets or sets CSS font property for title on X-axis
    */
    get angleAxisTitleTextStyle() {
        return this.i.ac4;
    }
    set angleAxisTitleTextStyle(v) {
        this.i.ac4 = v;
    }
    /**
     * Gets or sets CSS font property for title on Y-axis
    */
    get valueAxisTitleTextStyle() {
        return this.i.aea;
    }
    set valueAxisTitleTextStyle(v) {
        this.i.aea = v;
    }
    /**
     * Gets or sets the format for labels along the X-axis.
    */
    get angleAxisLabel() {
        return this.i.abq;
    }
    set angleAxisLabel(v) {
        this.i.abq = v;
    }
    /**
     * Gets or sets the property or string from which the labels are derived.
    */
    get valueAxisLabel() {
        return this.i.abr;
    }
    set valueAxisLabel(v) {
        this.i.abr = v;
    }
    /**
     * Gets or sets the color to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStroke() {
        return brushToString(this.i.afi);
    }
    set angleAxisMajorStroke(v) {
        this.i.afi = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStroke() {
        return brushToString(this.i.afp);
    }
    set valueAxisMajorStroke(v) {
        this.i.afp = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the X-axis.
    */
    get angleAxisMajorStrokeThickness() {
        return this.i.aas;
    }
    set angleAxisMajorStrokeThickness(v) {
        this.i.aas = +v;
    }
    /**
     * Gets or sets the thickness to apply to major gridlines along the Y-axis.
    */
    get valueAxisMajorStrokeThickness() {
        return this.i.abd;
    }
    set valueAxisMajorStrokeThickness(v) {
        this.i.abd = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStrokeThickness() {
        return this.i.aat;
    }
    set angleAxisMinorStrokeThickness(v) {
        this.i.aat = +v;
    }
    /**
     * Gets or sets the thickness to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStrokeThickness() {
        return this.i.abe;
    }
    set valueAxisMinorStrokeThickness(v) {
        this.i.abe = +v;
    }
    /**
     * Gets or sets the color to apply to stripes along the X-axis.
    */
    get angleAxisStrip() {
        return brushToString(this.i.afk);
    }
    set angleAxisStrip(v) {
        this.i.afk = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to stripes along the Y-axis.
    */
    get valueAxisStrip() {
        return brushToString(this.i.afr);
    }
    set valueAxisStrip(v) {
        this.i.afr = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the X-axis line.
    */
    get angleAxisStroke() {
        return brushToString(this.i.afl);
    }
    set angleAxisStroke(v) {
        this.i.afl = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to the Y-axis line.
    */
    get valueAxisStroke() {
        return brushToString(this.i.afs);
    }
    set valueAxisStroke(v) {
        this.i.afs = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to the X-axis line.
    */
    get angleAxisStrokeThickness() {
        return this.i.aau;
    }
    set angleAxisStrokeThickness(v) {
        this.i.aau = +v;
    }
    /**
     * Gets or sets the thickness to apply to the Y-axis line.
    */
    get valueAxisStrokeThickness() {
        return this.i.abf;
    }
    set valueAxisStrokeThickness(v) {
        this.i.abf = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the X-axis.
    */
    get angleAxisTickLength() {
        return this.i.aav;
    }
    set angleAxisTickLength(v) {
        this.i.aav = +v;
    }
    /**
     * Gets or sets the length of tickmarks along the Y-axis.
    */
    get valueAxisTickLength() {
        return this.i.abg;
    }
    set valueAxisTickLength(v) {
        this.i.abg = +v;
    }
    /**
     * Gets or sets the color to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStroke() {
        return brushToString(this.i.afm);
    }
    set angleAxisTickStroke(v) {
        this.i.afm = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStroke() {
        return brushToString(this.i.aft);
    }
    set valueAxisTickStroke(v) {
        this.i.aft = stringToBrush(v);
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the X-axis.
    */
    get angleAxisTickStrokeThickness() {
        return this.i.aaw;
    }
    set angleAxisTickStrokeThickness(v) {
        this.i.aaw = +v;
    }
    /**
     * Gets or sets the thickness to apply to tickmarks along the Y-axis.
    */
    get valueAxisTickStrokeThickness() {
        return this.i.abh;
    }
    set valueAxisTickStrokeThickness(v) {
        this.i.abh = +v;
    }
    /**
     * Gets or sets the Text to display below the X-axis.
    */
    get angleAxisTitle() {
        return this.i.acv;
    }
    set angleAxisTitle(v) {
        this.i.acv = v;
    }
    /**
     * Gets or sets the Text to display to the left of the Y-axis.
    */
    get valueAxisTitle() {
        return this.i.ad1;
    }
    set valueAxisTitle(v) {
        this.i.ad1 = v;
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the X-axis.
    */
    get angleAxisMinorStroke() {
        return brushToString(this.i.afj);
    }
    set angleAxisMinorStroke(v) {
        this.i.afj = stringToBrush(v);
    }
    /**
     * Gets or sets the color to apply to minor gridlines along the Y-axis.
    */
    get valueAxisMinorStroke() {
        return brushToString(this.i.afq);
    }
    set valueAxisMinorStroke(v) {
        this.i.afq = stringToBrush(v);
    }
    /**
     * Gets or sets the angle of rotation for labels along the X-axis.
    */
    get angleAxisLabelAngle() {
        return this.i.aan;
    }
    set angleAxisLabelAngle(v) {
        this.i.aan = +v;
    }
    /**
     * Gets or sets the angle of rotation for labels along the Y-axis.
    */
    get valueAxisLabelAngle() {
        return this.i.aa8;
    }
    set valueAxisLabelAngle(v) {
        this.i.aa8 = +v;
    }
    /**
     * Gets or sets the distance between the X-axis and the bottom of the chart.
    */
    get angleAxisExtent() {
        return this.i.aam;
    }
    set angleAxisExtent(v) {
        this.i.aam = +v;
    }
    /**
     * Gets or sets the distance between the Y-axis and the left edge of the chart.
    */
    get valueAxisExtent() {
        return this.i.aa7;
    }
    set valueAxisExtent(v) {
        this.i.aa7 = +v;
    }
    /**
     * Gets or sets the angle of rotation for the X-axis title.
    */
    get angleAxisTitleAngle() {
        return this.i.aax;
    }
    set angleAxisTitleAngle(v) {
        this.i.aax = +v;
    }
    /**
     * Gets or sets the angle of rotation for the Y-axis title.
    */
    get valueAxisTitleAngle() {
        return this.i.abi;
    }
    set valueAxisTitleAngle(v) {
        this.i.abi = +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.zm;
    }
    set angleAxisInverted(v) {
        this.i.zm = 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.zn;
    }
    set valueAxisInverted(v) {
        this.i.zn = ensureBool(v);
    }
    /**
     * Gets or sets Horizontal alignment of the X-axis title.
    */
    get angleAxisTitleAlignment() {
        return this.i.aex;
    }
    set angleAxisTitleAlignment(v) {
        this.i.aex = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of the Y-axis title.
    */
    get valueAxisTitleAlignment() {
        return this.i.af0;
    }
    set valueAxisTitleAlignment(v) {
        this.i.af0 = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of X-axis labels.
    */
    get angleAxisLabelHorizontalAlignment() {
        return this.i.aew;
    }
    set angleAxisLabelHorizontalAlignment(v) {
        this.i.aew = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Horizontal alignment of Y-axis labels.
    */
    get valueAxisLabelHorizontalAlignment() {
        return this.i.aey;
    }
    set valueAxisLabelHorizontalAlignment(v) {
        this.i.aey = ensureEnum(HorizontalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of X-axis labels.
    */
    get angleAxisLabelVerticalAlignment() {
        return this.i.afy;
    }
    set angleAxisLabelVerticalAlignment(v) {
        this.i.afy = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Vertical alignment of Y-axis labels.
    */
    get valueAxisLabelVerticalAlignment() {
        return this.i.afz;
    }
    set valueAxisLabelVerticalAlignment(v) {
        this.i.afz = ensureEnum(VerticalAlignment_$type, v);
    }
    /**
     * Gets or sets Visibility of X-axis labels.
    */
    get angleAxisLabelVisibility() {
        return this.i.af3;
    }
    set angleAxisLabelVisibility(v) {
        this.i.af3 = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets Visibility of Y-axis labels.
    */
    get valueAxisLabelVisibility() {
        return this.i.af4;
    }
    set valueAxisLabelVisibility(v) {
        this.i.af4 = ensureEnum(Visibility_$type, v);
    }
    /**
     * Gets or sets location of Y-axis labels, relative to the plot area.
    */
    get valueAxisLabelLocation() {
        return this.i.zj;
    }
    set valueAxisLabelLocation(v) {
        this.i.zj = ensureEnum(ValueAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets location of X-axis labels, relative to the plot area.
    */
    get angleAxisLabelLocation() {
        return this.i.y9;
    }
    set angleAxisLabelLocation(v) {
        this.i.y9 = ensureEnum(AngleAxisLabelLocation_$type, v);
    }
    /**
     * Gets or sets the format string for the X axis label.
    */
    get angleAxisLabelFormat() {
        return this.i.ab7;
    }
    set angleAxisLabelFormat(v) {
        this.i.ab7 = v;
    }
    /**
     * Gets or sets the format specifiers to use with the AngleAxisLabelFormat string.
    */
    get angleAxisLabelFormatSpecifiers() {
        return this.i.y6;
    }
    set angleAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.y6 = v;
    }
    /**
     * Gets or sets the format string for the Y axis label.
    */
    get valueAxisLabelFormat() {
        return this.i.add;
    }
    set valueAxisLabelFormat(v) {
        this.i.add = v;
    }
    /**
     * Gets or sets the format specifiers to use with the ValueAxisLabelFormat string.
    */
    get valueAxisLabelFormatSpecifiers() {
        return this.i.y7;
    }
    set valueAxisLabelFormatSpecifiers(v) {
        if (v && !Array.isArray(v) && typeof (v) == "string") {
            const re = /\s*(?:,|\s|$)\s*/gm;
            v = v.split(re);
        }
        this.i.y7 = 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.aa3(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.aa5(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.aa4(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.aa6(scaledValue);
        return (iv);
    }
}
