UNPKG

igniteui-webcomponents-charts

Version:

Ignite UI Web Components charting components for building rich data visualizations using TypeScript APIs.

1,459 lines 64.5 kB
import { WebComponentRenderer, WebComponentWrapper } from "igniteui-webcomponents-core";
import { TypeRegistrar } from "igniteui-webcomponents-core";
import { FinancialChart } from './FinancialChart';
import { FinancialChartType_$type } from './FinancialChartType';
import { fromBrushCollection, toBrushCollection, ensureEnum, ensureBool, NamePatcher, enumToString, brushCollectionToString, getAllPropertyNames, toSpinal, brushToString, stringToBrush } from "igniteui-webcomponents-core";
import { IgcXYChartComponent } from './igc-xy-chart-component';
import { DataChartStylingDefaults } from './DataChartStylingDefaults';
import { DataSeriesType } from "igniteui-webcomponents-core";
import { IgcDataContext } from "igniteui-webcomponents-core";
import { FinancialChartVolumeType_$type } from './FinancialChartVolumeType';
import { FinancialChartXAxisMode, FinancialChartXAxisMode_$type } from './FinancialChartXAxisMode';
import { FinancialChartYAxisMode, FinancialChartYAxisMode_$type } from './FinancialChartYAxisMode';
import { HorizontalAlignment_$type } from "igniteui-webcomponents-core";
import { FinancialChartZoomSliderType_$type } from './FinancialChartZoomSliderType';
import { IgcFinancialChartDefaultTemplatesComponent } from './igc-financial-chart-default-templates-component';
import { delegateCombine, delegateRemove } from "igniteui-webcomponents-core";
import { IgcFinancialIndicatorTypeCollection } from './igc-financial-indicator-type-collection';
import { FinancialIndicatorTypeCollection as FinancialIndicatorTypeCollection_internal } from './FinancialIndicatorTypeCollection';
import { SyncableObservableCollection$1 } from "igniteui-webcomponents-core";
import { FinancialIndicatorType_$type } from './FinancialIndicatorType';
import { IgcFinancialOverlayTypeCollection } from './igc-financial-overlay-type-collection';
import { FinancialOverlayTypeCollection as FinancialOverlayTypeCollection_internal } from './FinancialOverlayTypeCollection';
import { FinancialOverlayType_$type } from './FinancialOverlayType';
import { IgcIndicatorDisplayTypeCollection } from './igc-indicator-display-type-collection';
import { IndicatorDisplayTypeCollection as IndicatorDisplayTypeCollection_internal } from './IndicatorDisplayTypeCollection';
import { IndicatorDisplayType_$type } from './IndicatorDisplayType';
import { IgcFinancialChartRangeSelectorOptionCollection } from './igc-financial-chart-range-selector-option-collection';
import { FinancialChartRangeSelectorOptionCollection as FinancialChartRangeSelectorOptionCollection_internal } from './FinancialChartRangeSelectorOptionCollection';
import { FinancialChartRangeSelectorOption_$type } from './FinancialChartRangeSelectorOption';
import { IgcFinancialChartCustomIndicatorArgs } from './igc-financial-chart-custom-indicator-args';
import { CustomIndicatorNameCollection as CustomIndicatorNameCollection_internal } from './CustomIndicatorNameCollection';
import { IgcCustomIndicatorNameCollection } from './igc-custom-indicator-name-collection';
import { String_$type } from "igniteui-webcomponents-core";
import { RegisterElementHelper } from "igniteui-webcomponents-core";
let fg = window && window.CSS && window.CSS.supports &&
    /*@__PURE__*/ window.CSS.supports("display", "grid");
let financialChartToolbarStyle = {
    gridRow: 1,
    msGridRow: 1
};
let financialChartPriceStyle = {
    gridRow: 3,
    msGridRow: 3
};
let financialChartIndicatorsStyle = {
    gridRow: 4,
    msGridRow: 4
};
let financialChartVolumeStyle = {
    gridRow: 5,
    msGridRow: 5
};
let financialChartZoomSliderStyle = {
    gridRow: 6,
    msGridRow: 6
};
let financialChartMainGridStyle = {
    height: '100%',
    width: '100%',
    textAlign: 'left',
    display: fg ? 'grid' : '-ms-grid',
    msGridColumns: '100%'
};
let financialChartLegendStyle = {
    gridRow: 2,
    msGridRow: 2
};
export let IgcFinancialChartComponent = /*@__PURE__*/ (() => {
    class IgcFinancialChartComponent extends IgcXYChartComponent {
        set height(value) {
            this._height = value;
            this.style.height = value;
            this.notifyResized();
        }
        get height() {
            return this._height;
        }
        set width(value) {
            this._width = value;
            this.style.width = value;
            this.notifyResized();
        }
        get width() {
            return this._width;
        }
        get rangeSelectorTemplate() {
            return this._rangeSelectorTemplate;
        }
        set rangeSelectorTemplate(value) {
            this._rangeSelectorTemplate = value;
        }
        get chartTypePickerTemplate() {
            return this._chartTypePickerTemplate;
        }
        set chartTypePickerTemplate(value) {
            this._chartTypePickerTemplate = value;
        }
        get indicatorMenuTemplate() {
            return this._indicatorMenuTemplate;
        }
        set indicatorMenuTemplate(value) {
            this._indicatorMenuTemplate = value;
        }
        get toolbarTemplate() {
            return this._toolbarTemplate;
        }
        set toolbarTemplate(value) {
            this._toolbarTemplate = value;
        }
        get chartTemplate() {
            return this._chartTemplate;
        }
        set chartTemplate(value) {
            this._chartTemplate = value;
        }
        constructor() {
            super();
            this._wrapper = null;
            this._initialized = false;
            this._toolbarElement = null;
            this._renderer = null;
            this._disconnected = false;
            this._dataSource = null;
            this._defaultTooltips = null;
            this._dynamicContent = {};
            this._xAxisBreaks = null;
            this._indicatorTypes = null;
            this._overlayTypes = null;
            this._indicatorDisplayTypes = null;
            this._rangeSelectorOptions = null;
            this._customIndicatorNames = null;
            this._applyCustomIndicators = null;
            this._applyCustomIndicators_wrapped = null;
            if (this._styling) {
                NamePatcher.ensureStylablePatched(Object.getPrototypeOf(this));
            }
            this.onDocumentClick = this.onDocumentClick.bind(this);
            if (document) {
                document.addEventListener("click", this.onDocumentClick);
            }
            this._renderer = new WebComponentRenderer(this, document, true, DataChartStylingDefaults);
            //this._implementation = this.createImplementation();
            this._container = this._renderer.createElement("div");
            this._renderer.updateRoot(this._container);
            //this._renderer.rootWrapper.append(this._container);
            this._container.setStyleProperty("display", "block");
            this._container.setStyleProperty("width", "100%");
            this._container.setStyleProperty("height", "100%");
            var root;
            root = this._container;
            if (this._container != null) {
                root = this._container;
            }
            this._wrapper = this._renderer;
            var chart = this.i;
            this._chart = chart;
            if (chart.xAxis) {
                this.rewrapAxis(chart.xAxis);
            }
            if (chart.yAxis) {
                this.rewrapAxis(chart.yAxis);
            }
            if (chart.volumeAxis) {
                this.rewrapAxis(chart.volumeAxis);
            }
            if (chart.volumeXAxis) {
                this.rewrapAxis(chart.volumeXAxis);
            }
            if (chart.indicatorAxis) {
                this.rewrapAxis(chart.indicatorAxis);
            }
            if (chart.indicatorXAxis) {
                this.rewrapAxis(chart.indicatorXAxis);
            }
            if (chart.zoomSliderAxis) {
                this.rewrapAxis(chart.zoomSliderAxis);
            }
            if (chart.zoomSliderXAxis) {
                this.rewrapAxis(chart.zoomSliderXAxis);
            }
            chart.provideContainer(this._renderer);
            this.bindData();
            chart.notifyResized();
            this._renderer.addSizeWatcher(() => {
                this._checkToolbarSize();
                this._chart.notifyResized();
            });
            this._initialized = true;
        }
        destroy() {
            this._chart.destroy();
            this._wrapper.destroy();
            if (document) {
                document.removeEventListener("click", this.onDocumentClick);
            }
        }
        disconnectedCallback() {
            this._disconnected = true;
            if (this.i) {
                this.i.onDetachedFromUI();
            }
        }
        connectedCallback() {
            if (this._disconnected) {
                this._disconnected = false;
                if (this.i) {
                    this.i.onAttachedToUI();
                }
                return;
            }
            this.classList.add("ig-financial-chart");
            this.classList.add("igc-financial-chart");
            this.appendChild(this._renderer.rootWrapper.getNativeElement());
            this._attached = true;
            this.style.display = "block";
            this.style.height = this._height;
            this.style.width = this._width;
            this._flushQueuedAttributes();
            // supports themes or custom properties set in CSS 
            //this._styling(this, this);
            this.afterContentInit();
        }
        afterContentInit() {
            this.initializeContent();
        }
        _checkToolbarSize() {
            if (this._toolbarElement) {
                let start = this._toolbarElement;
                if (start.children.length == 1) {
                    start = start.children[0];
                }
                if (start.children.length == 1) {
                    start = start.children[0];
                }
                let toolbarRoot = start.querySelector(".financialChartToolbar");
                let rootRect = toolbarRoot.getBoundingClientRect();
                let hideRemaining = false;
                for (let i = 0; i < toolbarRoot.children.length; i++) {
                    let child = toolbarRoot.children[i];
                    if (child.nodeType == Node.ELEMENT_NODE) {
                        if (!hideRemaining) {
                            child.style.display = "";
                        }
                        let childRect = child.getBoundingClientRect();
                        if (hideRemaining ||
                            childRect.left + childRect.width >
                                rootRect.left + rootRect.width) {
                            child.style.display = "none";
                            hideRemaining = true;
                        }
                        else {
                            child.style.display = "";
                        }
                    }
                }
            }
        }
        onDocumentClick(ev) {
            this._chart.onDocumentClick(ev);
        }
        rewrapAxis(axis) {
            let axisName = axis.$type.name;
            let componentName = "Igc" + axisName + "Component";
            if (TypeRegistrar.isRegistered(componentName)) {
                let x = TypeRegistrar.create(componentName);
                x._implementation = axis;
                axis.externalObject = x;
            }
            else {
                throw new Error("Axis type not loaded: " + componentName);
            }
        }
        createImplementation() {
            return new FinancialChart();
        }
        get i() {
            return this._implementation;
        }
        createSeriesComponent(type) {
            if (TypeRegistrar.isRegistered(type)) {
                let s = TypeRegistrar.create(type);
                s.owner = this;
                return s;
            }
            else {
                //we shouldn't get here, hopefully.
                throw Error("series type not loaded: " + type);
            }
        }
        createIndicator(typeName) {
            return this.createSeriesComponent("Igc" + typeName + "Component");
        }
        createOverlay(typeName) {
            return this.createSeriesComponent("Igc" + typeName + "Component");
        }
        createSeries(type) {
            switch (type) {
                case DataSeriesType.Area:
                    return this.createSeriesComponent('IgcAreaSeriesComponent');
                case DataSeriesType.Column:
                    return this.createSeriesComponent('IgcColumnSeriesComponent');
                case DataSeriesType.Line:
                    return this.createSeriesComponent('IgcLineSeriesComponent');
                case DataSeriesType.FinancialPrice:
                    return this.createSeriesComponent('IgcFinancialPriceSeriesComponent');
                case DataSeriesType.ItemToolTipLayer:
                    return this.createSeriesComponent('IgcItemToolTipLayerComponent');
                case DataSeriesType.CategoryToolTipLayer:
                    return this.createSeriesComponent('IgcCategoryToolTipLayerComponent');
                case DataSeriesType.CrosshairLayer:
                    return this.createSeriesComponent('IgcCrosshairLayerComponent');
                case DataSeriesType.FinalValueLayer:
                    return this.createSeriesComponent('IgcFinalValueLayerComponent');
                case DataSeriesType.CalloutLayer:
                    return this.createSeriesComponent('IgcCalloutLayerComponent');
                case DataSeriesType.DataToolTipLayer:
                    return this.createSeriesComponent('IgcDataToolTipLayerComponent');
                case DataSeriesType.TrendLineLayer:
                    return this.createSeriesComponent('IgcTrendLineLayerComponent');
                default:
                    return this.createSeriesComponent('IgcColumnSeriesComponent');
            }
        }
        createXAxis(type) {
            switch (type) {
                case FinancialChartXAxisMode.Ordinal:
                    if (TypeRegistrar.isRegistered("IgcOrdinalTimeXAxisComponent")) {
                        return TypeRegistrar.create("IgcOrdinalTimeXAxisComponent");
                    }
                    else if (TypeRegistrar.isRegistered("IgcTimeXAxisComponent")) {
                        return TypeRegistrar.create("IgcTimeXAxisComponent");
                    }
                    else {
                        throw new Error("not valid axes components loaded");
                    }
                case FinancialChartXAxisMode.Time:
                    if (TypeRegistrar.isRegistered("IgcTimeXAxisComponent")) {
                        return TypeRegistrar.create("IgcTimeXAxisComponent");
                    }
                    else if (TypeRegistrar.isRegistered("IgcOrdinalTimeXAxisComponent")) {
                        return TypeRegistrar.create("IgcOrdinalTimeXAxisComponent");
                    }
                    else {
                        throw new Error("not valid axes components loaded");
                    }
            }
        }
        createYAxis(type) {
            switch (type) {
                case FinancialChartYAxisMode.Numeric:
                    if (TypeRegistrar.isRegistered("IgcNumericYAxisComponent")) {
                        return TypeRegistrar.create("IgcNumericYAxisComponent");
                    }
                    else if (TypeRegistrar.isRegistered("IgcPercentChangeYAxisComponent")) {
                        return TypeRegistrar.create("IgcPercentChangeYAxisComponent");
                    }
                    else {
                        throw new Error("not valid axes components loaded");
                    }
                case FinancialChartYAxisMode.PercentChange:
                    if (TypeRegistrar.isRegistered("IgcPercentChangeYAxisComponent")) {
                        return TypeRegistrar.create("IgcPercentChangeYAxisComponent");
                    }
                    else if (TypeRegistrar.isRegistered("IgcNumericYAxisComponent")) {
                        return TypeRegistrar.create("IgcNumericYAxisComponent");
                    }
                    else {
                        throw new Error("not valid axes components loaded");
                    }
            }
        }
        set dataSource(value) {
            this._dataSource = value;
            this.bindData();
        }
        get dataSource() {
            return this._dataSource;
        }
        bindData() {
            if (this._chart != null && this._chart !== undefined) {
                this._chart.itemsSource = this._dataSource;
            }
        }
        initializeContent() {
            if (TypeRegistrar.isRegistered("IgcDataChartDefaultTooltipsComponent")) {
                let d = TypeRegistrar.create("IgcDataChartDefaultTooltipsComponent");
                this._defaultTooltips = d;
                this._onDefaultTooltipsReady(d);
                //this._container.appendChild(cr.location.nativeElement);
            }
            let context = this._chart.getContext();
            if (!this._defaultTemplates) {
                this._defaultTemplates = new IgcFinancialChartDefaultTemplatesComponent(this);
            }
            let mainGrid = this._renderer.createElement("div");
            mainGrid.addClass("financialChartMainGrid");
            mainGrid.setStyleProperty("width", "100%");
            mainGrid.setStyleProperty("height", "100%");
            mainGrid.setStyleProperty("text-align", "left");
            mainGrid.setStyleProperty("display", "-ms-grid");
            mainGrid.setStyleProperty("display", "grid");
            mainGrid.setStyleProperty("-ms-grid-columns", "100%");
            this._container.append(mainGrid);
            let toolArea = this._renderer.createElement("div");
            toolArea.addClass("financialChartToolbarArea");
            toolArea.setStyleProperty("-ms-grid-row", "1");
            toolArea.setStyleProperty("grid-row", "1");
            mainGrid.append(toolArea);
            this._toolbarElement = toolArea.getNativeElement();
            let legend = this._renderer.createElement("div");
            legend.addClass("financialChartLegend");
            legend.setStyleProperty("-ms-grid-row", "2");
            legend.setStyleProperty("grid-row", "2");
            mainGrid.append(legend);
            let price = this._renderer.createElement("div");
            price.addClass("financialChartPrice");
            price.setStyleProperty("-ms-grid-row", "3");
            price.setStyleProperty("grid-row", "3");
            mainGrid.append(price);
            let indicators = this._renderer.createElement("div");
            indicators.addClass("financialChartIndicators");
            indicators.setStyleProperty("-ms-grid-row", "4");
            indicators.setStyleProperty("grid-row", "4");
            mainGrid.append(indicators);
            let volume = this._renderer.createElement("div");
            volume.addClass("financialChartVolume");
            volume.setStyleProperty("-ms-grid-row", "5");
            volume.setStyleProperty("grid-row", "5");
            mainGrid.append(volume);
            let slider = this._renderer.createElement("div");
            slider.addClass("financialChartZoomSlider");
            slider.setStyleProperty("-ms-grid-row", "6");
            slider.setStyleProperty("grid-row", "6");
            mainGrid.append(slider);
            this._mainGridElement = mainGrid.getNativeElement();
            this._toolbarTemplateComponent = TypeRegistrar.create("IgcTemplateContentComponent");
            this._toolbarTemplateComponent.style.display = "block";
            this._toolbarTemplateComponent.style.width = "100%";
            this._toolbarTemplateComponent.style.height = "100%";
            this._toolbarElement.appendChild(this._toolbarTemplateComponent);
            let toolbarArea = this._toolbarTemplateComponent;
            let toolbarContext = context.vm.toolbar;
            toolbarContext.vm.financialChartIndicatorMenu.template = this.indicatorMenuTemplate ? this.indicatorMenuTemplate : this._defaultTemplates.financialChartIndicatorMenuTemplate;
            toolbarContext.vm.financialChartIndicatorMenu.vm.notifyChanged = () => { toolbarArea.context = toolbarContext; };
            toolbarContext.vm.financialChartTypePicker.template = this.chartTypePickerTemplate ? this.chartTypePickerTemplate : this._defaultTemplates.financialChartTypePickerTemplate;
            toolbarContext.vm.financialChartTypePicker.vm.notifyChanged = () => { toolbarArea.context = toolbarContext; };
            toolbarContext.vm.financialChartRangeSelector.template = this.rangeSelectorTemplate ? this.rangeSelectorTemplate : this._defaultTemplates.financialChartRangeSelectorTemplate;
            toolbarContext.vm.financialChartRangeSelector.vm.notifyChanged = () => {
                toolbarArea.context = toolbarContext;
            };
            toolbarContext.template = this.toolbarTemplate ? this.toolbarTemplate : this._defaultTemplates.financialChartToolbarTemplate;
            let toolContainer = this._toolbarElement;
            //let toolbarArea = this._templates.toArray()[0];
            //let mainArea = this._templates.toArray()[1];
            //toolbarArea.contentReady = () => {
            //    toolbarArea.contentReady = null;
            //}
            toolbarArea.context = toolbarContext;
            toolbarArea.template = toolbarContext.template;
            let ele = this._toolbarElement;
            //ele.style.width = "100%";
            //ele.style.height = "100%";
            //if (ele.parentElement != null) {
            //    ele.parentElement.removeChild(ele);
            //}
            //toolContainer.appendChild(ele);
            //this._wrapper.setStyleProperty(ele, "display", "")
            ele.style.display = "";
            let legendContainer = context.legendContainer.rootWrapper.getNativeElement();
            let mainContainer = context.container.rootWrapper.getNativeElement();
            let indicatorContainer = context.indicatorsContainer.rootWrapper.getNativeElement();
            let volumeContainer = context.volumeContainer.rootWrapper.getNativeElement();
            let zoomSliderContainer = context.zoomContainer.rootWrapper.getNativeElement();
            var main = this._mainGridElement;
            let templateMain = main.querySelector(".financialChartPrice");
            let templateToolbar = main.querySelector(".financialChartToolbar");
            let templateLegend = main.querySelector(".financialChartLegend");
            let templateIndicator = main.querySelector(".financialChartIndicators");
            let templateVolume = main.querySelector(".financialChartVolume");
            let templateZoomSlider = main.querySelector(".financialChartZoomSlider");
            let grid = main; // main.querySelector(".financialChartMainGrid");
            let gridWrapper = new WebComponentWrapper(grid, this._wrapper);
            this._chart.provideGrid(gridWrapper);
            this._checkToolbarSize();
            templateMain.appendChild(mainContainer);
            //templateToolbar.appendChild(toolContainer);
            templateLegend.appendChild(legendContainer);
            templateIndicator.appendChild(indicatorContainer);
            templateVolume.appendChild(volumeContainer);
            templateZoomSlider.appendChild(zoomSliderContainer);
            this._styling(this, this);
            //this._mainElement.nativeElement.parentElement.removeChild(this._mainElement.nativeElement);
            //this.container.appendChild(this._mainElement.nativeElement);
        }
        _createZoomSlider(hostEle, onReady) {
            if (!TypeRegistrar.isRegistered("IgcZoomSliderComponent")) {
                //shouldn't happen.
                throw new Error("zoom slider component isn't loaded");
            }
            let slider = TypeRegistrar.create("IgcZoomSliderComponent");
            slider.className = "test";
            slider.width = "100%";
            slider.height = "100%";
            onReady(slider);
        }
        createTooltip() {
            if (!TypeRegistrar.isRegistered("IgcTooltipContainerComponent")) {
                return null;
            }
            let cr = TypeRegistrar.create("IgcTooltipContainerComponent");
            let ele = cr;
            let self = this;
            ele.updateToolTip = function (c, isSubContent) {
                if (c.externalObject) {
                    c = c.externalObject;
                }
                else {
                    let ext = new IgcDataContext();
                    ext._implementation = c;
                    c = ext;
                }
                if (!isSubContent) {
                    if (ele.parentElement != self._container.getNativeElement()) {
                        if (ele.parentElement != null) {
                            ele.parentElement.removeChild(ele);
                        }
                        self._container.getNativeElement().appendChild(ele);
                    }
                }
                else {
                    c.isSubContent = true;
                }
                cr.context = c;
                ele.style.display = "block";
                return true;
            };
            ele.hideToolTip = function () {
                ele.style.display = "none";
            };
            ele.style.display = "none";
            return cr;
        }
        _ensureTooltipCreated(series) {
            series._ensureTooltipCreated(() => this.createTooltip(), (ele) => {
                let wrapper = new WebComponentWrapper(ele, this._renderer);
                wrapper.updateToolTip = ele.updateToolTip;
                wrapper.hideToolTip = ele.hideToolTip;
                return wrapper;
            });
        }
        // private _createXAxis(): any {
        //     let x = new IgxCategoryXAxisComponent();
        //     return x.i;
        // }
        // private _createYAxis(): any {
        //     let y = new IgxNumericYAxisComponent();
        //     return y.i;
        // }
        _ensureDefaultTooltip(series) {
            if (this._defaultTooltips == null) {
                return;
            }
            this._defaultTooltips["ensureDefaultTooltip"](series);
        }
        _onDefaultTooltipsReady(cr) {
            if (this.i.dataChart) {
                var currSeries = this.i.dataChart.series;
                for (var i = 0; i < currSeries.count; i++) {
                    if (currSeries.item(i).externalObject.showDefaultTooltip) {
                        this._ensureDefaultTooltip(currSeries.item(i).externalObject);
                    }
                }
            }
        }
        /**
         * TimeAxisBreaks to apply to this chart when in time axis mode, representing spans of time to omit, such as weekends.
        */
        get xAxisBreaks() {
            if (this._xAxisBreaks === null) {
                if (!TypeRegistrar.isRegistered("IgcTimeAxisBreakCollection")) {
                    return null;
                }
                let coll = TypeRegistrar.create("IgcTimeAxisBreakCollection");
                let innerColl = this.i.xAxisBreaks;
                if (!innerColl) {
                    innerColl = TypeRegistrar.create("TimeAxisBreakCollection");
                }
                this._xAxisBreaks = coll._fromInner(innerColl);
                this.i._xAxisBreaks = innerColl;
            }
            return this._xAxisBreaks;
        }
        set xAxisBreaks(v) {
            if (this._xAxisBreaks !== null) {
                this._xAxisBreaks._setSyncTarget(null);
                this._xAxisBreaks = null;
            }
            if (!TypeRegistrar.isRegistered("IgxTimeAxisBreakCollection")) {
                return;
            }
            let coll = TypeRegistrar.create("IgxTimeAxisBreakCollection");
            let t = TypeRegistrar.get("TimeAxisBreak");
            this._xAxisBreaks = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(t.$type);
            let innerColl = this.i.xAxisBreaks;
            if (!innerColl) {
                innerColl = TypeRegistrar.create("TimeAxisBreakCollection");
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._xAxisBreaks._setSyncTarget(syncColl);
            this.i._xAxisBreaks = innerColl;
        }
        static get observedAttributes() {
            if (IgcFinancialChartComponent._observedAttributesIgcFinancialChartComponent == null) {
                let names = getAllPropertyNames(IgcFinancialChartComponent);
                for (let i = 0; i < names.length; i++) {
                    names[i] = toSpinal(names[i]);
                }
                IgcFinancialChartComponent._observedAttributesIgcFinancialChartComponent = names;
            }
            return IgcFinancialChartComponent._observedAttributesIgcFinancialChartComponent;
        }
        static register() {
            if (!IgcFinancialChartComponent._isElementRegistered) {
                IgcFinancialChartComponent._isElementRegistered = true;
                RegisterElementHelper.registerElement(IgcFinancialChartComponent.htmlTagName, IgcFinancialChartComponent);
            }
        }
        get leftMargin() {
            return this.i.j2;
        }
        set leftMargin(v) {
            this.i.j2 = +v;
            this._a("leftMargin", this.i.j2);
        }
        get isHorizontalZoomEnabled() {
            return this.i.g6;
        }
        set isHorizontalZoomEnabled(v) {
            this.i.g6 = ensureBool(v);
            this._a("isHorizontalZoomEnabled", this.i.g6);
        }
        get toolbarHeight() {
            return this.i.als;
        }
        set toolbarHeight(v) {
            this.i.als = +v;
            this._a("toolbarHeight", this.i.als);
        }
        /**
         * Gets domain type of this chart
        */
        get domainType() {
            return this.i.cb;
        }
        /**
         * Gets or sets whether the Y-axis should use a logarithmic scale instead of a linear one.
         * Since log(-1) is imaginary and log(0) is undefined, it is recommended to enable this property only when the Y-axis minimum is greater than zero.
        */
        get yAxisIsLogarithmic() {
            return this.i.akr;
        }
        set yAxisIsLogarithmic(v) {
            this.i.akr = ensureBool(v);
            this._a("yAxisIsLogarithmic", this.i.akr);
        }
        /**
         * Gets or sets the base value to use in the log function when mapping the position of data items along the Y-axis.
         * This property is effective only when YAxisIsLogarithmic is true.
        */
        get yAxisLogarithmBase() {
            return this.i.amp;
        }
        set yAxisLogarithmBase(v) {
            this.i.amp = +v;
            this._a("yAxisLogarithmBase", this.i.amp);
        }
        /**
         * Gets or sets the distance between each label and grid line along the Y-axis.
        *
        * The `YAxisInterval` determines how often to show a label, tickmark, and/or gridline along the y-axis.  Set this property to a number less than the numeric range of the y-axis.
        */
        get yAxisInterval() {
            return this.i.al1;
        }
        set yAxisInterval(v) {
            this.i.al1 = +v;
            this._a("yAxisInterval", this.i.al1);
        }
        /**
         * Gets or sets the data value corresponding to the minimum value of the Y-axis.
        *
        * The `YAxisMinimumValue` determines starting value of labels, tickmarks, and gridlines on the y-axis.
        */
        get yAxisMinimumValue() {
            return this.i.al3;
        }
        set yAxisMinimumValue(v) {
            this.i.al3 = +v;
            this._a("yAxisMinimumValue", this.i.al3);
        }
        /**
         * Gets or sets the data value corresponding to the maximum value of the Y-axis.
        *
        * The `YAxisMaximumValue` determines ending value of labels, tickmarks, and gridlines on the y-axis.
        */
        get yAxisMaximumValue() {
            return this.i.al2;
        }
        set yAxisMaximumValue(v) {
            this.i.al2 = +v;
            this._a("yAxisMaximumValue", this.i.al2);
        }
        /**
         * Gets or sets the frequency of displayed minor lines along the Y-axis.
        *
        * The `YAxisMinorInterval` determines how often to show minor gridline along the y-axis.  Set this property to a number less than the `YAxisInterval` and the numeric range of the y-axis.
        */
        get yAxisMinorInterval() {
            return this.i.al4;
        }
        set yAxisMinorInterval(v) {
            this.i.al4 = +v;
            this._a("yAxisMinorInterval", this.i.al4);
        }
        /**
         * Gets the current minimum value for the Y-axis.
        */
        get yAxisActualMinimum() {
            return this.i.al0;
        }
        /**
         * Gets the current maximum value for the Y-axis.
        */
        get yAxisActualMaximum() {
            return this.i.alz;
        }
        /**
         * The type of series to display in the volume pane.
        *
        * Use the `VolumeType` property to set a type of all series that will be rendered in the volume pane, e.g.
        */
        get volumeType() {
            return this.i.air;
        }
        set volumeType(v) {
            this.i.air = ensureEnum(FinancialChartVolumeType_$type, v);
            this._a("volumeType", enumToString(FinancialChartVolumeType_$type, this.i.air));
        }
        /**
         * The scaling mode of the X-axis.
        *
        * Use the `XAxisMode` property to plot data items without any breaks in data range (Ordinal mode) or with breaks in data range (Time mode) such as weekends/holidays. Note that the Ordinal axis mode is less expensive to use in the financial chart than the Time axis mode.
        */
        get xAxisMode() {
            return this.i.ait;
        }
        set xAxisMode(v) {
            this.i.ait = ensureEnum(FinancialChartXAxisMode_$type, v);
            this._a("xAxisMode", enumToString(FinancialChartXAxisMode_$type, this.i.ait));
        }
        /**
         * Gets or sets number of visible categories at maximum zooming level
         * This property works only with ordinal XAxisMode and it is overridden by chart's WindowRectMinWidth property
        */
        get xAxisZoomMaximumCategoryRange() {
            return this.i.alu;
        }
        set xAxisZoomMaximumCategoryRange(v) {
            this.i.alu = +v;
            this._a("xAxisZoomMaximumCategoryRange", this.i.alu);
        }
        /**
         * Gets or sets starting category that chart will move its zoom window. Acceptable value is between 0 and number of data items
         * This property works only with ordinal XAxisMode and it is overridden by chart's WindowRect or WindowScaleHorizontal properties
        */
        get xAxisZoomToCategoryStart() {
            return this.i.alx;
        }
        set xAxisZoomToCategoryStart(v) {
            this.i.alx = +v;
            this._a("xAxisZoomToCategoryStart", this.i.alx);
        }
        /**
         * Gets or sets maximum pixel span of series item that will be visible at maximum zooming level
         * This property ensures that series item does not get stretch above specified value.
         * This property works only with ordinal XAxisMode and it is overridden by chart's WindowRectMinWidth property
        */
        get xAxisZoomMaximumItemSpan() {
            return this.i.alv;
        }
        set xAxisZoomMaximumItemSpan(v) {
            this.i.alv = +v;
            this._a("xAxisZoomMaximumItemSpan", this.i.alv);
        }
        /**
         * Gets or sets number of categories that the chart will zoom in and fill plot area
         * This property is overridden by chart's WindowRect or WindowScaleHorizontal properties
        */
        get xAxisZoomToCategoryRange() {
            return this.i.alw;
        }
        set xAxisZoomToCategoryRange(v) {
            this.i.alw = +v;
            this._a("xAxisZoomToCategoryRange", this.i.alw);
        }
        /**
         * Gets or sets pixel span of series item that will be used to zoom chart such that the item has desired span
         * Chart will automatically zoom in until series item has specified pixel span.
         * This property works only with ordinal XAxisMode and it is overridden by chart's WindowRect or WindowScaleHorizontal properties
        */
        get xAxisZoomToItemSpan() {
            return this.i.aly;
        }
        set xAxisZoomToItemSpan(v) {
            this.i.aly = +v;
            this._a("xAxisZoomToItemSpan", this.i.aly);
        }
        /**
         * The scaling mode of the Y-axis.
        *
        * Use the `YAxisMode` property to plot data items using their actual values (Numeric) or using percent changes from the first data point (PercentChange), e.g.
        */
        get yAxisMode() {
            return this.i.aiv;
        }
        set yAxisMode(v) {
            this.i.aiv = ensureEnum(FinancialChartYAxisMode_$type, v);
            this._a("yAxisMode", enumToString(FinancialChartYAxisMode_$type, this.i.aiv));
        }
        /**
         * A boolean property controlling the visibility of the toolbar.
        */
        get isToolbarVisible() {
            return this.i.akk;
        }
        set isToolbarVisible(v) {
            this.i.akk = ensureBool(v);
            this._a("isToolbarVisible", this.i.akk);
        }
        /**
         * The type of price series to display in the main chart.
        *
        * Use the `ChartType` property to set a type of series that will be used to render prices in the Financial Chart control, e.g.
        */
        get chartType() {
            return this.i.aim;
        }
        set chartType(v) {
            this.i.aim = ensureEnum(FinancialChartType_$type, v);
            this._a("chartType", enumToString(FinancialChartType_$type, this.i.aim));
        }
        /**
         * Gets or sets Horizontal alignment of Y-axis labels.
        */
        get yAxisLabelHorizontalAlignment() {
            return this.i.age;
        }
        set yAxisLabelHorizontalAlignment(v) {
            this.i.age = ensureEnum(HorizontalAlignment_$type, v);
            this._a("yAxisLabelHorizontalAlignment", enumToString(HorizontalAlignment_$type, this.i.age));
        }
        /**
         * A boolean indicating whether the chart should automatically zoom in vertically on the currently visible range of data.
         * When this property is set to true, panning and zooming along the X-axis will result in a corresponding zoom on the Y-axis, so that the visible range of data fills the zoom window as fully as possible.
        */
        get isWindowSyncedToVisibleRange() {
            return this.i.akl;
        }
        set isWindowSyncedToVisibleRange(v) {
            this.i.akl = ensureBool(v);
            this._a("isWindowSyncedToVisibleRange", this.i.akl);
        }
        /**
         * A collection indicating what financial indicator types to display on the Financial Chart.
        *
        * Use the `IndicatorTypes` property to set types of indicators that will be rendered below the price pane in the Financial Chart control, e.g.
        */
        get indicatorTypes() {
            if (this._indicatorTypes === null) {
                let coll = new IgcFinancialIndicatorTypeCollection();
                let innerColl = this.i.ai0;
                if (!innerColl) {
                    innerColl = new FinancialIndicatorTypeCollection_internal(0);
                }
                this._indicatorTypes = coll._fromInner(innerColl);
                this.i.ai0 = innerColl;
            }
            return this._indicatorTypes;
        }
        set indicatorTypes(v) {
            if (this._indicatorTypes !== null) {
                this._indicatorTypes._setSyncTarget(null);
                this._indicatorTypes = null;
            }
            let coll = new IgcFinancialIndicatorTypeCollection();
            this._indicatorTypes = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(FinancialIndicatorType_$type);
            let innerColl = this.i.ai0;
            if (!innerColl) {
                innerColl = new FinancialIndicatorTypeCollection_internal(0);
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._indicatorTypes._setSyncTarget(syncColl);
            this.i.ai0 = innerColl;
        }
        /**
         * A collection indicating what financial overlay types to display on the Financial Chart.
        *
        * Use the `OverlayTypes` property to set types of overlays that will be rendered behind price series in the Financial Chart control, e.g.
        */
        get overlayTypes() {
            if (this._overlayTypes === null) {
                let coll = new IgcFinancialOverlayTypeCollection();
                let innerColl = this.i.ai2;
                if (!innerColl) {
                    innerColl = new FinancialOverlayTypeCollection_internal(0);
                }
                this._overlayTypes = coll._fromInner(innerColl);
                this.i.ai2 = innerColl;
            }
            return this._overlayTypes;
        }
        set overlayTypes(v) {
            if (this._overlayTypes !== null) {
                this._overlayTypes._setSyncTarget(null);
                this._overlayTypes = null;
            }
            let coll = new IgcFinancialOverlayTypeCollection();
            this._overlayTypes = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(FinancialOverlayType_$type);
            let innerColl = this.i.ai2;
            if (!innerColl) {
                innerColl = new FinancialOverlayTypeCollection_internal(0);
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._overlayTypes._setSyncTarget(syncColl);
            this.i.ai2 = innerColl;
        }
        /**
         * Gets or sets whether the large numbers on the Y-axis labels are abbreviated.
        */
        get yAxisAbbreviateLargeNumbers() {
            return this.i.akp;
        }
        set yAxisAbbreviateLargeNumbers(v) {
            this.i.akp = ensureBool(v);
            this._a("yAxisAbbreviateLargeNumbers", this.i.akp);
        }
        /**
         * Gets or sets the rendering resolution for all series in this chart.
         * Where n = Resolution, for every n horizontal pixels, combine all items into a single datapoint.  When Resolution = 0, all datapoints will be rendered as graphical objects.  Charts with a higher resolution will have faster performance.
        */
        get resolution() {
            return this.i.ka;
        }
        set resolution(v) {
            this.i.ka = +v;
            this._a("resolution", this.i.ka);
        }
        /**
         * Gets or sets whether the x axis 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 xAxisEnhancedIntervalPreferMoreCategoryLabels() {
            return this.i.ako;
        }
        set xAxisEnhancedIntervalPreferMoreCategoryLabels(v) {
            this.i.ako = ensureBool(v);
            this._a("xAxisEnhancedIntervalPreferMoreCategoryLabels", this.i.ako);
        }
        /**
         * Gets or sets whether the y axis 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 yAxisEnhancedIntervalPreferMoreCategoryLabels() {
            return this.i.akq;
        }
        set yAxisEnhancedIntervalPreferMoreCategoryLabels(v) {
            this.i.akq = ensureBool(v);
            this._a("yAxisEnhancedIntervalPreferMoreCategoryLabels", this.i.akq);
        }
        /**
         * Gets or sets type of series to display in the zoom slider pane.
        *
        * Use the `ZoomSliderType` property to set a type of all series that will be rendered in the zoom pane, e.g.
        */
        get zoomSliderType() {
            return this.i.aiy;
        }
        set zoomSliderType(v) {
            this.i.aiy = ensureEnum(FinancialChartZoomSliderType_$type, v);
            this._a("zoomSliderType", enumToString(FinancialChartZoomSliderType_$type, this.i.aiy));
        }
        /**
         * Gets or sets the palette used for coloring negative items of Waterfall chart type.
        *
        * Use the `NegativeBrushes` property to set a collection of brushes that will be used to render fill area of negative elements in the price pane, e.g.
        */
        get negativeBrushes() {
            return fromBrushCollection(this.i.ahv);
        }
        set negativeBrushes(v) {
            this.i.ahv = toBrushCollection(v);
            this._a("negativeBrushes", brushCollectionToString(this.i.ahv));
        }
        /**
         * Brushes to use for drawing negative elements, when using a chart type with contextual coloring, such as Waterfall.
        *
        * Use the `NegativeOutlines` property to set a collection of brushes that will be used to render outline of negative elements in the price pane, e.g.
        */
        get negativeOutlines() {
            return fromBrushCollection(this.i.ahw);
        }
        set negativeOutlines(v) {
            this.i.ahw = toBrushCollection(v);
            this._a("negativeOutlines", brushCollectionToString(this.i.ahw));
        }
        /**
         * Brushes to use for filling financial overlays.
        *
        * Use the `OverlayBrushes` property to set a collection of brushes that will be used to render fill area of overlays in the Financial Chart control, e.g.
        */
        get overlayBrushes() {
            return fromBrushCollection(this.i.ahx);
        }
        set overlayBrushes(v) {
            this.i.ahx = toBrushCollection(v);
            this._a("overlayBrushes", brushCollectionToString(this.i.ahx));
        }
        /**
         * Brushes to use for outlining financial overlays.
        *
        * Use the `OverlayOutlines` property to set a collection of brushes that will be used to render outlines of overlays in the Financial Chart control, e.g.
        */
        get overlayOutlines() {
            return fromBrushCollection(this.i.ahy);
        }
        set overlayOutlines(v) {
            this.i.ahy = toBrushCollection(v);
            this._a("overlayOutlines", brushCollectionToString(this.i.ahy));
        }
        /**
         * Brushes to use for outlining volume series in the volume pane.
        *
        * Use the `VolumeOutlines` property to set a collection of brushes that will be used to render outline of multiple series in the volume pane of the Financial Chart control, e.g.
        */
        get volumeOutlines() {
            return fromBrushCollection(this.i.ah0);
        }
        set volumeOutlines(v) {
            this.i.ah0 = toBrushCollection(v);
            this._a("volumeOutlines", brushCollectionToString(this.i.ah0));
        }
        /**
         * Brushes to use for filling volume series in the volume pane.
        *
        * Use the `VolumeBrushes` property to set a collection of brushes that will be used to render fill area of multiple series in the volume pane of the Financial Chart control, e.g.
        */
        get volumeBrushes() {
            return fromBrushCollection(this.i.ahz);
        }
        set volumeBrushes(v) {
            this.i.ahz = toBrushCollection(v);
            this._a("volumeBrushes", brushCollectionToString(this.i.ahz));
        }
        /**
         * Brushes to use for negative elements in financial indicators.
        *
        * Use the `IndicatorNegativeBrushes` property to set a collection of brushes that will be used to render negative elements of indicators in the Financial Chart control, e.g.
        */
        get indicatorNegativeBrushes() {
            return fromBrushCollection(this.i.ahu);
        }
        set indicatorNegativeBrushes(v) {
            this.i.ahu = toBrushCollection(v);
            this._a("indicatorNegativeBrushes", brushCollectionToString(this.i.ahu));
        }
        /**
         * Brushes to use for financial indicators.
        *
        * Use the `IndicatorBrushes` property to set a collection of brushes that will be used to render positive elements of indicators in the Financial Chart control, e.g.
        */
        get indicatorBrushes() {
            return fromBrushCollection(this.i.aht);
        }
        set indicatorBrushes(v) {
            this.i.aht = toBrushCollection(v);
            this._a("indicatorBrushes", brushCollectionToString(this.i.aht));
        }
        /**
         * The outline thickness of volume series in the volume pane.
        *
        * Use the `VolumeThickness` property to set a number that will be used to render outline thickness of all series in the volume pane, e.g.
        */
        get volumeThickness() {
            return this.i.alt;
        }
        set volumeThickness(v) {
            this.i.alt = +v;
            this._a("volumeThickness", this.i.alt);
        }
        /**
         * The outline thickness of financial overlays.
        *
        * Use the `OverlayThickness` property to set a number that will be used to render outline thickness of all overlays in the Financial Chart control, e.g.
        */
        get overlayThickness() {
            return this.i.alr;
        }
        set overlayThickness(v) {
            this.i.alr = +v;
            this._a("overlayThickness", this.i.alr);
        }
        /**
         * The multiplier of financial overlay, e.g. BollingerBands overlay.
        */
        get overlayMultiplier() {
            return this.i.alq;
        }
        set overlayMultiplier(v) {
            this.i.alq = +v;
            this._a("overlayMultiplier", this.i.alq);
        }
        /**
         * The outline or stroke thickness of financial indicators.
        *
        * Use the `IndicatorThickness` property to set a number that will be used to render outline thickness of all indicators in the Financial Chart control, e.g.
        */
        get indicatorThickness() {
            return this.i.alp;
        }
        set indicatorThickness(v) {
            this.i.alp = +v;
            this._a("indicatorThickness", this.i.alp);
        }
        /**
         * The display types of financial indicators.
        *
        * Use the `IndicatorDisplayTypes` property to set display types that will determine whether render all indicators as area, lines, or columns in the Financial Chart control, e.g.
        */
        get indicatorDisplayTypes() {
            if (this._indicatorDisplayTypes === null) {
                let coll = new IgcIndicatorDisplayTypeCollection();
                let innerColl = this.i.ajc;
                if (!innerColl) {
                    innerColl = new IndicatorDisplayTypeCollection_internal();
                }
                this._indicatorDisplayTypes = coll._fromInner(innerColl);
                this.i.ajc = innerColl;
            }
            return this._indicatorDisplayTypes;
        }
        set indicatorDisplayTypes(v) {
            if (this._indicatorDisplayTypes !== null) {
                this._indicatorDisplayTypes._setSyncTarget(null);
                this._indicatorDisplayTypes = null;
            }
            let coll = new IgcIndicatorDisplayTypeCollection();
            this._indicatorDisplayTypes = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(IndicatorDisplayType_$type);
            let innerColl = this.i.ajc;
            if (!innerColl) {
                innerColl = new IndicatorDisplayTypeCollection_internal();
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._indicatorDisplayTypes._setSyncTarget(syncColl);
            this.i.ajc = innerColl;
        }
        /**
         * The period of financial indicators, where applicable.
        *
        * The `indicatorPeriod` property applies to only the `BollingerBands` overlay as well as to these indicators types: `AverageDirectionalIndex`, `AverageTrueRange`, `BollingerBandWidth`, `ChaikinVolatility`, `CommodityChannelIndex`, `DetrendedPriceOscillator`, `FastStochasticOscillator`, `ForceIndex`, `FullStochasticOscillator`, `MoneyFlowIndex`, `PriceChannelOverlay`, `RateOfChangeAndMomentum`, `RelativeStrengthIndex`, `SlowStochasticOscillator`, `StandardDeviation`, `StochRSI`, `TRIX`, `WilliamsPercentR`
        */
        get indicatorPeriod() {
            return this.i.amk;
        }
        set indicatorPeriod(v) {
            this.i.amk = +v;
            this._a("indicatorPeriod", this.i.amk);
        }
        /**
         * The multiplier of financial indicators, e.g. BollingerBandWidth indicator.
        *
        * The `IndicatorMultiplier` property applies to only to BollingerBandWidth indicator type.
        */
        get indicatorMultiplier() {
            return this.i.alo;
        }
        set indicatorMultiplier(v) {
            this.i.alo = +v;
            this._a("indicatorMultiplier", this.i.alo);
        }
        /**
         * The smoothing period of financial indicators, where applicable.
        *
        * The `IndicatorSmoothingPeriod` property applies to only to `FullStochasticOscillator` indicator type.
        */
        get indicatorSmoothingPeriod() {
            return this.i.amn;
        }
        set indicatorSmoothingPeriod(v) {
            this.i.amn = +v;
            this._a("indicatorSmoothingPeriod", this.i.amn);
        }
        /**
         * The short period of financial indicators, where applicable.
        *
        * The `IndicatorShortPeriod` property applies only to these indicator types:
        *
        * -   AbsoluteVolumeOscillator,
        * -   ChaikinOscillator,
        * -   MovingAverageConvergenceDivergence,
        * -   PercentagePriceOscillator,
        * -   PercentageVolumeOscillator,
        */
        get indicatorShortPeriod() {
            return this.i.aml;
        }
        set indicatorShortPeriod(v) {
            this.i.aml = +v;
            this._a("indicatorShortPeriod", this.i.aml);
        }
        /**
         * The long period of financial indicators, where applicable.
        *
        * The `IndicatorLongPeriod` property applies only to these indicator types:
        *
        * -   AbsoluteVolumeOscillator,
        * -   ChaikinOscillator,
        * -   MovingAverageConvergenceDivergence,
        * -   PercentagePriceOscillator,
        * -   PercentageVolumeOscillator,
        */
        get indicatorLongPeriod() {
            return this.i.amj;
        }
        set indicatorLongPeriod(v) {
            this.i.amj = +v;
            this._a("indicatorLongPeriod", this.i.amj);
        }
        /**
         * The signal period of financial indicators, where applicable.
        *
        * The `IndicatorSignalPeriod` property applies to only to MovingAverageConvergenceDivergence indicator type.
        */
        get indicatorSignalPeriod() {
            return this.i.amm;
        }
        set indicatorSignalPeriod(v) {
            this.i.amm = +v;
            this._a("indicatorSignalPeriod", this.i.amm);
        }
        /**
         * A FinancialChartRangeSelectorOptionCollection containing the available range selector options on the toolbar.
        */
        get rangeSelectorOptions() {
            if (this._rangeSelectorOptions === null) {
                let coll = new IgcFinancialChartRangeSelectorOptionCollection();
                let innerColl = this.i.aii;
                if (!innerColl) {
                    innerColl = new FinancialChartRangeSelectorOptionCollection_internal(0);
                }
                this._rangeSelectorOptions = coll._fromInner(innerColl);
                this.i.aii = innerColl;
            }
            return this._rangeSelectorOptions;
        }
        set rangeSelectorOptions(v) {
            if (this._rangeSelectorOptions !== null) {
                this._rangeSelectorOptions._setSyncTarget(null);
                this._rangeSelectorOptions = null;
            }
            let coll = new IgcFinancialChartRangeSelectorOptionCollection();
            this._rangeSelectorOptions = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(FinancialChartRangeSelectorOption_$type);
            let innerColl = this.i.aii;
            if (!innerColl) {
                innerColl = new FinancialChartRangeSelectorOptionCollection_internal(0);
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._rangeSelectorOptions._setSyncTarget(syncColl);
            this.i.aii = innerColl;
        }
        /**
         * The names of custom indicators to add to the chart.
         * When CustomIndicatorNames is set, the ApplyCustomIndicators event will be raised for each custom indicator name.
        */
        get customIndicatorNames() {
            if (this._customIndicatorNames === null) {
                let coll = new IgcCustomIndicatorNameCollection();
                let innerColl = this.i.customIndicatorNames;
                if (!innerColl) {
                    innerColl = new CustomIndicatorNameCollection_internal(0);
                }
                this._customIndicatorNames = coll._fromInner(innerColl);
                this.i.customIndicatorNames = innerColl;
            }
            return this._customIndicatorNames;
        }
        set customIndicatorNames(v) {
            if (this._customIndicatorNames !== null) {
                this._customIndicatorNames._setSyncTarget(null);
                this._customIndicatorNames = null;
            }
            let coll = new IgcCustomIndicatorNameCollection();
            this._customIndicatorNames = coll._fromOuter(v);
            let syncColl = new SyncableObservableCollection$1(String_$type);
            let innerColl = this.i.customIndicatorNames;
            if (!innerColl) {
                innerColl = new CustomIndicatorNameCollection_internal(0);
            }
            syncColl._inner = innerColl;
            syncColl.clear();
            this._customIndicatorNames._setSyncTarget(syncColl);
            this.i.customIndicatorNames = innerColl;
        }
        get isVerticalZoomEnabled() {
            return this.i.he;
        }
        set isVerticalZoomEnabled(v) {
            this.i.he = ensureBool(v);
            this._a("isVerticalZoomEnabled", this.i.he);
        }
        /**
         * Gets or sets stroke brush of major gridlines on x-axis of the zoom slider pane
        */
        get zoomSliderXAxisMajorStroke() {
            return brushToString(this.i.aqz);
        }
        set zoomSliderXAxisMajorStroke(v) {
            this.i.aqz = stringToBrush(v);
            this._a("zoomSliderXAxisMajorStroke", brushToString(this.i.aqz));
        }
        /**
         * Gets or sets thickness of major gridlines on x-axis of the zoom slider pane
        */
        get zoomSliderXAxisMajorStrokeThickness() {
            return this.i.al5;
        }
        set zoomSliderXAxisMajorStrokeThickness(v) {
            this.i.al5 = +v;
            this._a("zoomSliderXAxisMajorStrokeThickness", this.i.al5);
        }
        /**
         * Gets or sets weather or not a legend is visible between toolbar and chart's plot area
        */
        get isLegendVisible() {
            return this.i.akg;
        }
        set isLegendVisible(v) {
            this.i.akg = ensureBool(v);
            this._a("isLegendVisible", this.i.akg);
        }
        /**
         * Gets or sets minimum value on x-axis
        */
        get xAxisMinimumValue() {
            return this.i.ak6;
        }
        set xAxisMinimumValue(v) {
            this.i.ak6 = v;
        }
        /**
         * Gets or sets maximum value on x-axis
        */
        get xAxisMaximumValue() {
            return this.i.ak5;
        }
        set xAxisMaximumValue(v) {
            this.i.ak5 = v;
        }
        findByName(name) {
            var baseResult = super.findByName(name);
            if (baseResult) {
                return baseResult;
            }
            if (this.indicatorTypes != null && this.indicatorTypes.findByName && this.indicatorTypes.findByName(name)) {
                return this.indicatorTypes.findByName(name);
            }
            if (this.overlayTypes != null && this.overlayTypes.findByName && this.overlayTypes.findByName(name)) {
                return this.overlayTypes.findByName(name);
            }
            if (this.indicatorDisplayTypes != null && this.indicatorDisplayTypes.findByName && this.indicatorDisplayTypes.findByName(name)) {
                return this.indicatorDisplayTypes.findByName(name);
            }
            if (this.rangeSelectorOptions != null && this.rangeSelectorOptions.findByName && this.rangeSelectorOptions.findByName(name)) {
                return this.rangeSelectorOptions.findByName(name);
            }
            if (this.xAxisBreaks != null && this.xAxisBreaks.findByName && this.xAxisBreaks.findByName(name)) {
                return this.xAxisBreaks.findByName(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);
        }
        notifyInsertItem(source_, index, newItem) {
            this.i.vv(source_, index, newItem);
        }
        notifyRemoveItem(source_, index, oldItem) {
            this.i.vw(source_, index, oldItem);
        }
        notifyClearItems(source_) {
            this.i.vu(source_);
        }
        notifySetItem(source_, index, oldItem, newItem) {
            this.i.vy(source_, index, oldItem, newItem);
        }
        /**
         * Returns visuals as a serialized string.
        
        */
        exportSerializedVisualData() {
            let iv = this.i.am9();
            return (iv);
        }
        /**
         * Event raised by the chart when custom indicator data is needed from the application.
         * During series rendering, event will be raised once for each value in the CustomIndicatorNames collection.
        */
        get applyCustomIndicators() {
            return this._applyCustomIndicators;
        }
        set applyCustomIndicators(ev) {
            if (this._applyCustomIndicators_wrapped !== null) {
                this.i.applyCustomIndicators = delegateRemove(this.i.applyCustomIndicators, this._applyCustomIndicators_wrapped);
                this._applyCustomIndicators_wrapped = null;
                this._applyCustomIndicators = null;
            }
            this._applyCustomIndicators = ev;
            this._applyCustomIndicators_wrapped = (o, e) => {
                let outerArgs = new IgcFinancialChartCustomIndicatorArgs();
                outerArgs._provideImplementation(e);
                if (this.beforeApplyCustomIndicators) {
                    this.beforeApplyCustomIndicators(this, outerArgs);
                }
                if (this._applyCustomIndicators) {
                    this._applyCustomIndicators(this, outerArgs);
                }
            };
            this.i.applyCustomIndicators = delegateCombine(this.i.applyCustomIndicators, this._applyCustomIndicators_wrapped);
            ;
        }
    }
    IgcFinancialChartComponent._observedAttributesIgcFinancialChartComponent = null;
    IgcFinancialChartComponent.htmlTagName = "igc-financial-chart";
    IgcFinancialChartComponent._isElementRegistered = false;
    return IgcFinancialChartComponent;
})();