(function (global, factory) {
    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@sd-angular/core/common'), require('@angular/core'), require('@angular/common'), require('chart.js'), require('jquery'), require('uuid')) :
    typeof define === 'function' && define.amd ? define('@sd-angular/core/chart', ['exports', '@sd-angular/core/common', '@angular/core', '@angular/common', 'chart.js', 'jquery', 'uuid'], factory) :
    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global['sd-angular'] = global['sd-angular'] || {}, global['sd-angular'].core = global['sd-angular'].core || {}, global['sd-angular'].core.chart = {}), global['sd-angular'].core.common, global.ng.core, global.ng.common, global.chart.js, global.jquery, global.uuid));
}(this, (function (exports, common$1, core, common, Chart, $, uuid) { 'use strict';

    function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

    function _interopNamespace(e) {
        if (e && e.__esModule) { return e; } else {
            var n = Object.create(null);
            if (e) {
                Object.keys(e).forEach(function (k) {
                    if (k !== 'default') {
                        var d = Object.getOwnPropertyDescriptor(e, k);
                        Object.defineProperty(n, k, d.get ? d : {
                            enumerable: true,
                            get: function () {
                                return e[k];
                            }
                        });
                    }
                });
            }
            n['default'] = e;
            return Object.freeze(n);
        }
    }

    var Chart__namespace = /*#__PURE__*/_interopNamespace(Chart);
    var $__default = /*#__PURE__*/_interopDefaultLegacy($);

    /*! *****************************************************************************
    Copyright (c) Microsoft Corporation.

    Permission to use, copy, modify, and/or distribute this software for any
    purpose with or without fee is hereby granted.

    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
    PERFORMANCE OF THIS SOFTWARE.
    ***************************************************************************** */
    /* global Reflect, Promise */
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b)
                if (Object.prototype.hasOwnProperty.call(b, p))
                    d[p] = b[p]; };
        return extendStatics(d, b);
    };
    function __extends(d, b) {
        if (typeof b !== "function" && b !== null)
            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    }
    var __assign = function () {
        __assign = Object.assign || function __assign(t) {
            for (var s, i = 1, n = arguments.length; i < n; i++) {
                s = arguments[i];
                for (var p in s)
                    if (Object.prototype.hasOwnProperty.call(s, p))
                        t[p] = s[p];
            }
            return t;
        };
        return __assign.apply(this, arguments);
    };
    function __rest(s, e) {
        var t = {};
        for (var p in s)
            if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
                t[p] = s[p];
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                    t[p[i]] = s[p[i]];
            }
        return t;
    }
    function __decorate(decorators, target, key, desc) {
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
            r = Reflect.decorate(decorators, target, key, desc);
        else
            for (var i = decorators.length - 1; i >= 0; i--)
                if (d = decorators[i])
                    r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
        return c > 3 && r && Object.defineProperty(target, key, r), r;
    }
    function __param(paramIndex, decorator) {
        return function (target, key) { decorator(target, key, paramIndex); };
    }
    function __metadata(metadataKey, metadataValue) {
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
            return Reflect.metadata(metadataKey, metadataValue);
    }
    function __awaiter(thisArg, _arguments, P, generator) {
        function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
        return new (P || (P = Promise))(function (resolve, reject) {
            function fulfilled(value) { try {
                step(generator.next(value));
            }
            catch (e) {
                reject(e);
            } }
            function rejected(value) { try {
                step(generator["throw"](value));
            }
            catch (e) {
                reject(e);
            } }
            function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
            step((generator = generator.apply(thisArg, _arguments || [])).next());
        });
    }
    function __generator(thisArg, body) {
        var _ = { label: 0, sent: function () { if (t[0] & 1)
                throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
        function verb(n) { return function (v) { return step([n, v]); }; }
        function step(op) {
            if (f)
                throw new TypeError("Generator is already executing.");
            while (_)
                try {
                    if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
                        return t;
                    if (y = 0, t)
                        op = [op[0] & 2, t.value];
                    switch (op[0]) {
                        case 0:
                        case 1:
                            t = op;
                            break;
                        case 4:
                            _.label++;
                            return { value: op[1], done: false };
                        case 5:
                            _.label++;
                            y = op[1];
                            op = [0];
                            continue;
                        case 7:
                            op = _.ops.pop();
                            _.trys.pop();
                            continue;
                        default:
                            if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
                                _ = 0;
                                continue;
                            }
                            if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) {
                                _.label = op[1];
                                break;
                            }
                            if (op[0] === 6 && _.label < t[1]) {
                                _.label = t[1];
                                t = op;
                                break;
                            }
                            if (t && _.label < t[2]) {
                                _.label = t[2];
                                _.ops.push(op);
                                break;
                            }
                            if (t[2])
                                _.ops.pop();
                            _.trys.pop();
                            continue;
                    }
                    op = body.call(thisArg, _);
                }
                catch (e) {
                    op = [6, e];
                    y = 0;
                }
                finally {
                    f = t = 0;
                }
            if (op[0] & 5)
                throw op[1];
            return { value: op[0] ? op[1] : void 0, done: true };
        }
    }
    var __createBinding = Object.create ? (function (o, m, k, k2) {
        if (k2 === undefined)
            k2 = k;
        Object.defineProperty(o, k2, { enumerable: true, get: function () { return m[k]; } });
    }) : (function (o, m, k, k2) {
        if (k2 === undefined)
            k2 = k;
        o[k2] = m[k];
    });
    function __exportStar(m, o) {
        for (var p in m)
            if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p))
                __createBinding(o, m, p);
    }
    function __values(o) {
        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
        if (m)
            return m.call(o);
        if (o && typeof o.length === "number")
            return {
                next: function () {
                    if (o && i >= o.length)
                        o = void 0;
                    return { value: o && o[i++], done: !o };
                }
            };
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
    }
    function __read(o, n) {
        var m = typeof Symbol === "function" && o[Symbol.iterator];
        if (!m)
            return o;
        var i = m.call(o), r, ar = [], e;
        try {
            while ((n === void 0 || n-- > 0) && !(r = i.next()).done)
                ar.push(r.value);
        }
        catch (error) {
            e = { error: error };
        }
        finally {
            try {
                if (r && !r.done && (m = i["return"]))
                    m.call(i);
            }
            finally {
                if (e)
                    throw e.error;
            }
        }
        return ar;
    }
    /** @deprecated */
    function __spread() {
        for (var ar = [], i = 0; i < arguments.length; i++)
            ar = ar.concat(__read(arguments[i]));
        return ar;
    }
    /** @deprecated */
    function __spreadArrays() {
        for (var s = 0, i = 0, il = arguments.length; i < il; i++)
            s += arguments[i].length;
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
                r[k] = a[j];
        return r;
    }
    function __spreadArray(to, from, pack) {
        if (pack || arguments.length === 2)
            for (var i = 0, l = from.length, ar; i < l; i++) {
                if (ar || !(i in from)) {
                    if (!ar)
                        ar = Array.prototype.slice.call(from, 0, i);
                    ar[i] = from[i];
                }
            }
        return to.concat(ar || Array.prototype.slice.call(from));
    }
    function __await(v) {
        return this instanceof __await ? (this.v = v, this) : new __await(v);
    }
    function __asyncGenerator(thisArg, _arguments, generator) {
        if (!Symbol.asyncIterator)
            throw new TypeError("Symbol.asyncIterator is not defined.");
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
        function verb(n) { if (g[n])
            i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
        function resume(n, v) { try {
            step(g[n](v));
        }
        catch (e) {
            settle(q[0][3], e);
        } }
        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
        function fulfill(value) { resume("next", value); }
        function reject(value) { resume("throw", value); }
        function settle(f, v) { if (f(v), q.shift(), q.length)
            resume(q[0][0], q[0][1]); }
    }
    function __asyncDelegator(o) {
        var i, p;
        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
    }
    function __asyncValues(o) {
        if (!Symbol.asyncIterator)
            throw new TypeError("Symbol.asyncIterator is not defined.");
        var m = o[Symbol.asyncIterator], i;
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function (v) { resolve({ value: v, done: d }); }, reject); }
    }
    function __makeTemplateObject(cooked, raw) {
        if (Object.defineProperty) {
            Object.defineProperty(cooked, "raw", { value: raw });
        }
        else {
            cooked.raw = raw;
        }
        return cooked;
    }
    ;
    var __setModuleDefault = Object.create ? (function (o, v) {
        Object.defineProperty(o, "default", { enumerable: true, value: v });
    }) : function (o, v) {
        o["default"] = v;
    };
    function __importStar(mod) {
        if (mod && mod.__esModule)
            return mod;
        var result = {};
        if (mod != null)
            for (var k in mod)
                if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k))
                    __createBinding(result, mod, k);
        __setModuleDefault(result, mod);
        return result;
    }
    function __importDefault(mod) {
        return (mod && mod.__esModule) ? mod : { default: mod };
    }
    function __classPrivateFieldGet(receiver, state, kind, f) {
        if (kind === "a" && !f)
            throw new TypeError("Private accessor was defined without a getter");
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
            throw new TypeError("Cannot read private member from an object whose class did not declare it");
        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
    }
    function __classPrivateFieldSet(receiver, state, value, kind, f) {
        if (kind === "m")
            throw new TypeError("Private method is not writable");
        if (kind === "a" && !f)
            throw new TypeError("Private accessor was defined without a setter");
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver))
            throw new TypeError("Cannot write private member to an object whose class did not declare it");
        return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
    }

    var ChartColors = {
        Red: 'rgb(255, 99, 132)',
        Orange: 'rgb(255, 159, 64)',
        Yellow: 'rgb(255, 205, 86)',
        Green: 'rgb(75, 192, 192)',
        Blue: 'rgb(54, 162, 235)',
        Purple: 'rgb(153, 102, 255)',
        Grey: 'rgb(201, 203, 207)',
        Purple700: '#2E224C',
        Purple600: '#453372',
        Purple500: '#574191',
        Purple400: '#7356BF',
        Purple300: '#957FCE',
        Purple200: '#C1B4E2',
        Purple100: '#E3DDF2',
        Purple50: '#F3F1F9',
        Blue700: '#0F2C60',
        Blue600: '#174291',
        Blue500: '#1D53B7',
        Blue400: '#276EF1',
        Blue300: '#5A90F4',
        Blue200: '#9FBFF8',
        Blue100: '#D4E2FC',
        Blue50: '#EDF3FD',
        Green700: '#0D4020',
        Green600: '#156A36',
        Green500: '#09863D',
        Green400: '#21A453',
        Green300: '#43BF75',
        Green200: '#9EE2B8',
        Green100: '#CFF3DD',
        Green50: '#F0FAF3',
        Yellow700: '#664C1A',
        Yellow600: '#997328',
        Yellow500: '#C19132',
        Yellow400: '#FFC043',
        Yellow300: '#FFCF70',
        Yellow200: '#FFE3AC',
        Yellow100: '#FFF2D9',
        Yellow50: '#FFF9EF',
        Orange700: '#5F2C14',
        Orange600: '#8E421E',
        Orange500: '#B45326',
        Orange400: '#ED6E33',
        Orange300: '#F19063',
        Orange200: '#F7BFA5',
        Orange100: '#FBE2D6',
        Orange50: '#FDF3EE',
        Red700: '#541A14',
        Red600: '#7F281E',
        Red500: '#A13226',
        Red400: '#D44333',
        Red300: '#DE7063',
        Red200: '#ECACA5',
        Red100: '#F6D9D6',
        Red50: '#FBEFEE',
        Brown700: '#3D281E',
        Brown600: '#5B3C2D',
        Brown500: '#744C39',
        Brown400: '#99644C',
        Brown300: '#B18976',
        Brown200: '#D2BAB0',
        Brown100: '#EBE0DB',
        Brown50: '#F6F2F0',
        Gray900: '#141414',
        Gray800: '#1F1F1F',
        Gray700: '#333333',
        Gray600: '#545454',
        Gray500: '#757575',
        Gray400: '#AFAFAF',
        Gray300: '#CBCBCB',
        Gray200: '#E2E2E2',
        Gray100: '#EEEEEE',
        Gray50: '#F6F6F6',
        Platinum700: '#394145',
        Platinum600: '#556268',
        Platinum500: '#6C7C83',
        Platinum400: '#8EA3AD',
        Platinum300: '#A1BDCA',
        Platinum200: '#CCDFE5',
        Platinum100: '#EBF5F7',
        Platinum50: '#F4FAFB',
        EatsGreen400: '#21A453',
        FreightBlue400: '#21A453',
        JumpRed400: '#FF0A2D',
        Black: '#000000',
        White: '#FFFFFF',
    };
    var CHART_CONFIG = new core.InjectionToken('chart.configuration');

    var _drawTotalOfStackedBar;
    var SdChart = /** @class */ (function () {
        function SdChart(ref, chartConfiguration) {
            var _this = this;
            this.ref = ref;
            this.chartConfiguration = chartConfiguration;
            this.initialized = false;
            this.isLoading = false;
            this.visible = true;
            this.height = '300px';
            this.loadingStart = function () {
                _this.isLoading = true;
            };
            _drawTotalOfStackedBar.set(this, function (chartType) {
                return {
                    afterDraw: function (chartInstance, easing, options) {
                        var _a, _b;
                        if ((_b = (_a = chartInstance === null || chartInstance === void 0 ? void 0 : chartInstance.data) === null || _a === void 0 ? void 0 : _a.datasets) === null || _b === void 0 ? void 0 : _b.length) {
                            var ctx_1 = chartInstance.ctx;
                            chartInstance.data.datasets[0].data.forEach(function (dataPoint, index) {
                                var curLastIndex = 0;
                                var curTotal = 0;
                                chartInstance.data.datasets.forEach(function (dataset, setIndex) {
                                    if (dataset.data[index] != 0 && (!dataset.hidden) && dataset.type !== 'line') {
                                        curLastIndex = setIndex;
                                        if (Number.isNumber(dataset.data[index])) {
                                            curTotal += Number(dataset.data[index]);
                                        }
                                        else
                                            curTotal += 0;
                                    }
                                });
                                var _l = chartInstance.getDatasetMeta(curLastIndex).data[index]._model, x = _l.x, y = _l.y;
                                var textWidth = ctx_1.measureText(curTotal.toString()).width;
                                ctx_1.fillStyle = 'black';
                                var xTextPosition = (x - textWidth / 2) - textWidth > 0 ? (x - textWidth / 2) : 0;
                                if (index == 0) {
                                    xTextPosition = x + 10;
                                }
                                else if (index === chartInstance.data.datasets[0].data.length - 1) {
                                    xTextPosition = x - textWidth - 10;
                                }
                                ctx_1.font = '300 10px';
                                ctx_1.fillText(curTotal.toString(), chartType === 'horizontalBar' ? x + 10 : xTextPosition, chartType === 'horizontalBar' ? y : y - 10);
                            });
                        }
                    },
                };
            });
        }
        Object.defineProperty(SdChart.prototype, "chartOption", {
            set: function (chartOption) {
                this.pChartOption = chartOption;
                if (this.initialized) {
                    this.renderChart();
                }
            },
            enumerable: false,
            configurable: true
        });
        SdChart.prototype.ngOnInit = function () {
        };
        SdChart.prototype.ngAfterViewInit = function () {
            this.renderChart(true);
            this.initialized = true;
            this.ref.detectChanges();
        };
        SdChart.prototype.renderChart = function (firstRender) {
            var _a, _b;
            return __awaiter(this, void 0, void 0, function () {
                var canvas;
                return __generator(this, function (_l) {
                    switch (_l.label) {
                        case 0:
                            this.height = ((_a = this.pChartOption) === null || _a === void 0 ? void 0 : _a.height) || '300px';
                            if (!!firstRender) return [3 /*break*/, 2];
                            this.visible = false;
                            return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
                        case 1:
                            _l.sent();
                            this.visible = true;
                            _l.label = 2;
                        case 2: return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 200); })];
                        case 3:
                            _l.sent();
                            if ((_b = this.chartRef) === null || _b === void 0 ? void 0 : _b.nativeElement) {
                                canvas = this.chartRef.nativeElement;
                                this.ctx = canvas.getContext('2d');
                                switch (this.pChartOption.type) {
                                    case 'pie':
                                        this.renderPieChart(this.pChartOption);
                                        break;
                                    case 'bar':
                                        this.renderBarChart(this.pChartOption);
                                        break;
                                    case 'horizontalBar':
                                        this.renderHorizontalBarChart(this.pChartOption);
                                        break;
                                    case 'line':
                                        this.renderLineChart(this.pChartOption);
                                        break;
                                    case 'stackArea':
                                        this.renderStackAreaChart(this.pChartOption);
                                        break;
                                    case 'barline':
                                        this.renderBarLineChart(this.pChartOption);
                                        break;
                                    case 'doughnut':
                                        this.renderDoughnutChart(this.pChartOption);
                                    default:
                                        break;
                                }
                            }
                            return [2 /*return*/];
                    }
                });
            });
        };
        SdChart.prototype.renderPieChart = function (option) {
            var _this = this;
            var _a, _b, _c;
            var configuration = {
                type: 'pie',
                options: {
                    responsive: true,
                    title: {
                        display: true,
                        text: option.title
                    },
                    legend: {
                        display: !option.hideLegend
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || "" + (datasetLabel ? "[" + datasetLabel + "] " : '') + label + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                data: {
                    labels: ((_a = option.datasets) === null || _a === void 0 ? void 0 : _a.map(function (e) { return e.label; })) || [],
                    datasets: [{
                            data: ((_b = option.datasets) === null || _b === void 0 ? void 0 : _b.map(function (e) { return e.value; })) || [],
                            backgroundColor: ((_c = option.datasets) === null || _c === void 0 ? void 0 : _c.map(function (e, idx) {
                                var _a, _b, _c;
                                return e.backgroundColor
                                    || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor)
                                    || _this.dynamicColor;
                            })) || []
                        }]
                }
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderDoughnutChart = function (option) {
            var _this = this;
            var _a, _b, _c;
            var configuration = {
                type: 'doughnut',
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    title: {
                        display: true,
                        text: option.title
                    },
                    legend: {
                        display: !option.hideLegend
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || "" + (datasetLabel ? "[" + datasetLabel + "] " : '') + label + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                data: {
                    labels: ((_a = option.datasets) === null || _a === void 0 ? void 0 : _a.map(function (e) { return e.label; })) || [],
                    datasets: [{
                            data: ((_b = option.datasets) === null || _b === void 0 ? void 0 : _b.map(function (e) { return e.value; })) || [],
                            backgroundColor: ((_c = option.datasets) === null || _c === void 0 ? void 0 : _c.map(function (e, idx) {
                                var _a, _b, _c;
                                return e.backgroundColor
                                    || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor)
                                    || _this.dynamicColor;
                            })) || []
                        }]
                }
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderBarChart = function (option) {
            var _this = this;
            var _a, _b;
            var labelWidth = (_a = option.labelWidth) !== null && _a !== void 0 ? _a : 50;
            if (option.datasets.length) {
                // const newwidth = Math.max(option.labels.length * option.datasets.length * labelWidth, $(this.chartWrapperRef.nativeElement).width());
                // $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
                var newwidth = option.labels.length * option.datasets.length * labelWidth;
                $__default['default'](this.chartAreaWrapperExtendRef.nativeElement).css('width', "max(100%," + newwidth + "px)");
            }
            var configuration = {
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    legend: {
                        display: !option.hideLegend
                    },
                    scales: {
                        xAxes: [{
                                display: true,
                                scaleLabel: {
                                    display: !!option.xTitle,
                                    labelString: option.xTitle || ''
                                },
                                ticks: {
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.xLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                }
                            }],
                        yAxes: [{
                                display: true,
                                ticks: {
                                    beginAtZero: (_b = option.beginAtZero) !== null && _b !== void 0 ? _b : true,
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                                scaleLabel: {
                                    display: !!option.yTitle,
                                    labelString: option.yTitle || ''
                                }
                            }]
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || datasetLabel + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                type: 'bar',
                data: {
                    labels: option.labels,
                    datasets: option.datasets.map(function (e, idx) {
                        var _a, _b, _c, _d, _e, _f;
                        var dynamicColor = _this.dynamicColor;
                        var result = {
                            label: e.label,
                            fill: e.backgroundColor || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor) || dynamicColor,
                            backgroundColor: e.backgroundColor || ((_f = (_e = (_d = _this.chartConfiguration) === null || _d === void 0 ? void 0 : _d.defaultColors) === null || _e === void 0 ? void 0 : _e[idx]) === null || _f === void 0 ? void 0 : _f.backgroundColor) || dynamicColor,
                            data: e.data,
                            stack: e.stack
                        };
                        return result;
                    })
                }
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderHorizontalBarChart = function (option) {
            var _this = this;
            var _a;
            // const labelWidth = option.labelWidth ?? 50;
            // if (option.datasets.length) {
            //   const newwidth = Math.max(option.labels.length * option.datasets.length * labelWidth, $(this.chartWrapperRef.nativeElement).width());
            //   $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
            // }
            var plugins = [];
            if (option.showTotalStack) {
                plugins.push(__classPrivateFieldGet(this, _drawTotalOfStackedBar).call(this, option.type));
            }
            var configuration = {
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    legend: {
                        display: !option.hideLegend,
                        onClick: function (event, legendItem) {
                            var index = legendItem.datasetIndex;
                            var ci = _this.chart;
                            var meta = ci.getDatasetMeta(index);
                            if (option.showTotalStack) {
                                event.stopPropagation();
                            }
                            else {
                                // See controller.isDatasetVisible comment
                                meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
                                // We hid a dataset ... rerender the chart
                                ci.update();
                            }
                        },
                    },
                    layout: {
                        padding: {
                            right: 20
                        }
                    },
                    scales: {
                        xAxes: [{
                                display: true,
                                scaleLabel: {
                                    display: !!option.xTitle,
                                    labelString: option.xTitle || '',
                                },
                                stacked: true,
                                ticks: {
                                    beginAtZero: (_a = option.beginAtZero) !== null && _a !== void 0 ? _a : true,
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.xLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                            }],
                        yAxes: [{
                                display: true,
                                stacked: true,
                                ticks: {
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                                scaleLabel: {
                                    display: !!option.yTitle,
                                    labelString: option.yTitle || ''
                                }
                            }]
                    },
                    tooltips: {
                        mode: 'nearest',
                        axis: 'y',
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || datasetLabel + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                type: 'horizontalBar',
                data: {
                    labels: option.labels,
                    datasets: option.datasets.map(function (e, idx) {
                        var _a, _b, _c, _d, _e, _f;
                        var dynamicColor = _this.dynamicColor;
                        var result = {
                            label: e.label,
                            fill: e.backgroundColor || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor) || dynamicColor,
                            backgroundColor: e.backgroundColor || ((_f = (_e = (_d = _this.chartConfiguration) === null || _d === void 0 ? void 0 : _d.defaultColors) === null || _e === void 0 ? void 0 : _e[idx]) === null || _f === void 0 ? void 0 : _f.backgroundColor) || dynamicColor,
                            data: e.data,
                            stack: e.stack
                        };
                        return result;
                    })
                },
                plugins: plugins
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderLineChart = function (option) {
            var _this = this;
            var _a, _b;
            var labelWidth = (_a = option.labelWidth) !== null && _a !== void 0 ? _a : 50;
            if (option.datasets.length) {
                // const newwidth = Math.max(option.labels.length * labelWidth, $(this.chartWrapperRef.nativeElement).width());
                // $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
                var newwidth = option.labels.length * labelWidth;
                $__default['default'](this.chartAreaWrapperExtendRef.nativeElement).css('width', "max(100%," + newwidth + "px)");
            }
            var configuration = {
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    legend: {
                        display: !option.hideLegend
                    },
                    scales: {
                        xAxes: [{
                                display: true,
                                scaleLabel: {
                                    display: !!option.xTitle,
                                    labelString: option.xTitle || ''
                                },
                                ticks: {
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.xLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                            }],
                        yAxes: [{
                                display: true,
                                ticks: {
                                    beginAtZero: (_b = option.beginAtZero) !== null && _b !== void 0 ? _b : true,
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                                scaleLabel: {
                                    display: !!option.yTitle,
                                    labelString: option.yTitle || ''
                                }
                            }]
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || datasetLabel + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                type: 'line',
                data: {
                    labels: option.labels,
                    datasets: option.datasets.map(function (e, idx) {
                        var _a, _b, _c, _d, _e, _f, _g, _h, _j;
                        var dynamicColor = _this.dynamicColor;
                        var result = {
                            label: e.label,
                            fill: e.backgroundColor || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor) || dynamicColor,
                            backgroundColor: e.backgroundColor || ((_f = (_e = (_d = _this.chartConfiguration) === null || _d === void 0 ? void 0 : _d.defaultColors) === null || _e === void 0 ? void 0 : _e[idx]) === null || _f === void 0 ? void 0 : _f.backgroundColor) || dynamicColor,
                            borderColor: e.borderColor || ((_j = (_h = (_g = _this.chartConfiguration) === null || _g === void 0 ? void 0 : _g.defaultColors) === null || _h === void 0 ? void 0 : _h[idx]) === null || _j === void 0 ? void 0 : _j.borderColor) || dynamicColor,
                            data: e.data,
                            lineTension: 0,
                        };
                        return result;
                    })
                }
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderStackAreaChart = function (option) {
            var _this = this;
            var _a, _b;
            var labelWidth = (_a = option.labelWidth) !== null && _a !== void 0 ? _a : 50;
            if (option.datasets.length) {
                // const newwidth = Math.max(option.labels.length * labelWidth, $(this.chartWrapperRef.nativeElement).width());
                // $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
                var newwidth = option.labels.length * labelWidth;
                $__default['default'](this.chartAreaWrapperExtendRef.nativeElement).css('width', "max(100%," + newwidth + "px)");
            }
            var configuration = {
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    legend: {
                        display: !option.hideLegend
                    },
                    scales: {
                        xAxes: [{
                                display: true,
                                scaleLabel: {
                                    display: !!option.xTitle,
                                    labelString: option.xTitle || ''
                                },
                                ticks: {
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.xLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                            }],
                        yAxes: [{
                                display: true,
                                ticks: {
                                    beginAtZero: (_b = option.beginAtZero) !== null && _b !== void 0 ? _b : true,
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                                stacked: true,
                                scaleLabel: {
                                    display: !!option.yTitle,
                                    labelString: option.yTitle || ''
                                }
                            }]
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value
                                })) || datasetLabel + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                type: 'line',
                data: {
                    labels: option.labels,
                    datasets: option.datasets.map(function (e, idx) {
                        var _a, _b, _c, _d, _e, _f;
                        var dynamicColor = _this.dynamicColor;
                        var result = {
                            label: e.label,
                            // fill: e.backgroundColor,
                            backgroundColor: e.backgroundColor || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor) || dynamicColor,
                            borderColor: e.borderColor || ((_f = (_e = (_d = _this.chartConfiguration) === null || _d === void 0 ? void 0 : _d.defaultColors) === null || _e === void 0 ? void 0 : _e[idx]) === null || _f === void 0 ? void 0 : _f.borderColor) || dynamicColor,
                            data: e.data,
                            lineTension: 0,
                        };
                        return result;
                    })
                }
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        SdChart.prototype.renderBarLineChart = function (option) {
            var _this = this;
            var _a, _b, _c, _d;
            var plugins = [];
            if (option.showTotalStack) {
                plugins.push(__classPrivateFieldGet(this, _drawTotalOfStackedBar).call(this, option.type));
            }
            var labelWidth = (_a = option.labelWidth) !== null && _a !== void 0 ? _a : 50;
            if (option.datasets.length) {
                var numberOfBars = option.datasets.filter(function (e) { return e.type === 'bar'; }).length;
                if (numberOfBars <= 1) {
                    // const newwidth = Math.max(option.labels.length * labelWidth, $(this.chartWrapperRef.nativeElement).width());
                    // $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
                    var newwidth = option.labels.length * labelWidth;
                    $__default['default'](this.chartAreaWrapperExtendRef.nativeElement).css('width', "max(100%," + newwidth + "px)");
                }
                else {
                    // const newwidth = Math.max(option.labels.length * numberOfBars * labelWidth, $(this.chartWrapperRef.nativeElement).width());
                    // $(this.chartAreaWrapperExtendRef.nativeElement).width(newwidth);
                    var newwidth = option.labels.length * numberOfBars * labelWidth;
                    $__default['default'](this.chartAreaWrapperExtendRef.nativeElement).css('width', "max(100%," + newwidth + "px)");
                }
            }
            var leftId = "I" + uuid.v4();
            var rightId = "I" + uuid.v4();
            var yAxes = [{
                    type: 'linear',
                    display: true,
                    position: 'left',
                    id: leftId,
                    ticks: {
                        beginAtZero: (_b = option.beginAtZero) !== null && _b !== void 0 ? _b : true,
                        suggestedMin: 0,
                        callback: function (value, index) {
                            var _a;
                            return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                        }
                    },
                    scaleLabel: {
                        display: !!option.yTitle,
                        labelString: option.yTitle || '',
                    },
                    stacked: !!option.yStacked,
                }];
            if (option.datasets.some(function (e) { return e.yAlign === 'right'; })) {
                yAxes.push({
                    type: 'linear',
                    display: true,
                    position: 'right',
                    id: rightId,
                    ticks: {
                        beginAtZero: (_c = option.beginAtZero) !== null && _c !== void 0 ? _c : true,
                        suggestedMin: 0,
                        callback: function (value, index) {
                            var _a;
                            return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.yRightLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                        }
                    },
                    scaleLabel: {
                        display: !!option.yRightTitle,
                        labelString: option.yRightTitle || ''
                    },
                    stacked: !!option.yStacked,
                });
            }
            var configuration = {
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    legend: {
                        display: !option.hideLegend,
                        onClick: function (event, legendItem) {
                            var index = legendItem.datasetIndex;
                            var ci = _this.chart;
                            var meta = ci.getDatasetMeta(index);
                            if (option.showTotalStack) {
                                event.stopPropagation();
                            }
                            else {
                                // See controller.isDatasetVisible comment
                                meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null;
                                // We hid a dataset ... rerender the chart
                                ci.update();
                            }
                        },
                        position: (_d = option === null || option === void 0 ? void 0 : option.legendPosition) !== null && _d !== void 0 ? _d : 'top'
                    },
                    layout: {
                        padding: 10
                    },
                    title: {
                        display: true,
                        text: option.title
                    },
                    scales: {
                        xAxes: [{
                                display: true,
                                scaleLabel: {
                                    display: !!option.xTitle,
                                    labelString: option.xTitle || ''
                                },
                                ticks: {
                                    callback: function (value, index) {
                                        var _a;
                                        return ((_a = option.ticks) === null || _a === void 0 ? void 0 : _a.xLabel(value, index)) || (Number.isNumber(value) ? Number.toVNCurrency(value) : value);
                                    }
                                },
                                stacked: !!option.xStacked
                            }],
                        yAxes: yAxes
                    },
                    tooltips: {
                        callbacks: {
                            label: function (tooltipItem, data) {
                                var _a, _b, _c;
                                var datasetLabel = (_a = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _a === void 0 ? void 0 : _a.label;
                                var label = data === null || data === void 0 ? void 0 : data.labels[tooltipItem.index];
                                var value = (_b = data === null || data === void 0 ? void 0 : data.datasets[tooltipItem.datasetIndex]) === null || _b === void 0 ? void 0 : _b.data[tooltipItem.index];
                                return ((_c = option.tooltips) === null || _c === void 0 ? void 0 : _c.label({
                                    datasetLabel: datasetLabel,
                                    label: label,
                                    value: value,
                                    datasetIndex: tooltipItem.datasetIndex,
                                    dataIndex: tooltipItem.index
                                })) || (datasetLabel ? "[" + datasetLabel + "] " : '') + " " + label + " : " + Number.toVNCurrency(value);
                            }
                        }
                    }
                },
                data: {
                    labels: option.labels,
                    datasets: option.datasets.map(function (e, idx) {
                        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
                        var dynamicColor = _this.dynamicColor;
                        var result = {
                            type: e.type,
                            label: e.label,
                            fill: e.backgroundColor || ((_c = (_b = (_a = _this.chartConfiguration) === null || _a === void 0 ? void 0 : _a.defaultColors) === null || _b === void 0 ? void 0 : _b[idx]) === null || _c === void 0 ? void 0 : _c.backgroundColor) || dynamicColor,
                            backgroundColor: e.backgroundColor || ((_f = (_e = (_d = _this.chartConfiguration) === null || _d === void 0 ? void 0 : _d.defaultColors) === null || _e === void 0 ? void 0 : _e[idx]) === null || _f === void 0 ? void 0 : _f.backgroundColor) || dynamicColor,
                            borderColor: e.borderColor || ((_j = (_h = (_g = _this.chartConfiguration) === null || _g === void 0 ? void 0 : _g.defaultColors) === null || _h === void 0 ? void 0 : _h[idx]) === null || _j === void 0 ? void 0 : _j.borderColor) || dynamicColor,
                            data: e.data,
                            yAxisID: e.yAlign === 'right' ? rightId : leftId,
                            lineTension: 0,
                            order: (_k = e.order) !== null && _k !== void 0 ? _k : 1
                        };
                        return result;
                    }),
                },
                plugins: plugins
            };
            if (option.hover === 'ShowAll') {
                configuration.options.tooltips = Object.assign(Object.assign({}, configuration.options.tooltips), { mode: 'index', intersect: false });
                configuration.options.hover = Object.assign(Object.assign({}, configuration.options.hover), { mode: 'index', intersect: false });
            }
            this.chart = new Chart__namespace(this.ctx, configuration);
            this.isLoading = false;
        };
        Object.defineProperty(SdChart.prototype, "dynamicColor", {
            get: function () {
                var r = Math.floor(Math.random() * 255);
                var g = Math.floor(Math.random() * 255);
                var b = Math.floor(Math.random() * 255);
                return 'rgb(' + r + ',' + g + ',' + b + ')';
            },
            enumerable: false,
            configurable: true
        });
        return SdChart;
    }());
    _drawTotalOfStackedBar = new WeakMap();
    SdChart.decorators = [
        { type: core.Component, args: [{
                    selector: 'sd-chart',
                    template: "<div *ngIf=\"visible\" class=\"c-chart-wrapper mt-2\" >\r\n  <div class=\"c-chart-area-wrapper\" #chartWrapper>\r\n    <div class=\"c-chart-area-wrapper-extend position-relative\" [ngStyle]=\"{'height':height}\" #chartAreaWrapperExtend [ngClass]=\"{'c-loading': isLoading}\">\r\n      <i [ngClass]=\"{'d-none': !isLoading}\" class=\"fa fa-5x fa-spinner fa-pulse c-loading-icon\"></i>\r\n      <canvas #chart [ngClass]=\"{'c-loading-margin': isLoading}\"></canvas>\r\n    </div>\r\n  </div>\r\n</div>\r\n",
                    styles: [".c-container{background:#f5f6f7;border-radius:5px}.c-flex{border-radius:8px;display:flex;margin:15px}.c-chart-container{background:#fff;border-radius:5px;border-radius:8px;box-shadow:0 0 13px 0 rgba(82,63,105,.1);margin:15px;padding:15px}.c-btn-dashboard{align-self:center;height:60%;vertical-align:middle}.c-chart-wrapper{position:relative}.c-chart-wrapper>canvas{left:0;pointer-events:none;position:absolute;top:0}.c-chart-area-wrapper{overflow-x:auto;position:relative;width:100%}.c-chart-area-wrapper-extend{position:relative}.c-loading{opacity:.4}.c-loading-icon{left:calc(50% - 2.5rem);position:-webkit-sticky;position:sticky;top:calc(50% - 2.5rem)}.c-loading-margin{margin-top:-6rem}::-webkit-scrollbar{height:7px;width:7px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb{background:#888;border-radius:50px}::-webkit-scrollbar-thumb:hover{background:#555}"]
                },] }
    ];
    SdChart.ctorParameters = function () { return [
        { type: core.ChangeDetectorRef },
        { type: undefined, decorators: [{ type: core.Optional }, { type: core.Inject, args: [CHART_CONFIG,] }] }
    ]; };
    SdChart.propDecorators = {
        chartOption: [{ type: core.Input }],
        chartRef: [{ type: core.ViewChild, args: ['chart',] }],
        chartWrapperRef: [{ type: core.ViewChild, args: ['chartWrapper',] }],
        chartAxisRef: [{ type: core.ViewChild, args: ['chartAxis',] }],
        chartAreaWrapperExtendRef: [{ type: core.ViewChild, args: ['chartAreaWrapperExtend',] }]
    };

    var SdChartModule = /** @class */ (function () {
        function SdChartModule() {
        }
        return SdChartModule;
    }());
    SdChartModule.decorators = [
        { type: core.NgModule, args: [{
                    imports: [
                        common.CommonModule
                    ],
                    declarations: [
                        SdChart
                    ],
                    exports: [
                        SdChart
                    ],
                    providers: []
                },] }
    ];

    /**
     * Generated bundle index. Do not edit.
     */

    exports.CHART_CONFIG = CHART_CONFIG;
    exports.ChartColors = ChartColors;
    exports.SdChart = SdChart;
    exports.SdChartModule = SdChartModule;

    Object.defineProperty(exports, '__esModule', { value: true });

})));
//# sourceMappingURL=sd-angular-core-chart.umd.js.map
