UNPKG

ng2-charts

Version:

Reactive, responsive, beautiful charts for Angular based on Chart.js

1 lines 43.1 kB
{"version":3,"file":"ng2-charts.mjs","sources":["../tmp-esm2022/lib/ng-charts.provider.js","../tmp-esm2022/lib/theme.service.js","../tmp-esm2022/lib/base-chart.directive.js","../tmp-esm2022/lib/utils.js","../tmp-esm2022/index.js","../tmp-esm2022/ng2-charts.js"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { registerables as defaultRegisterables, } from 'chart.js';\nimport { merge } from 'lodash-es';\nexport const NG_CHARTS_CONFIGURATION = new InjectionToken('Configuration for ngCharts');\n/**\n * Provide all the default registerable as defined by Chart.js\n */\nexport function withDefaultRegisterables(...registerables) {\n return { registerables: [...defaultRegisterables, ...registerables] };\n}\n/**\n * Provide configuration for ngCharts. In most cases, you have to pass it some registerables. So either\n * `withDefaultRegisterables()`, or a custom list of registerables tailored to your needs to reduce bundle size.\n */\nexport function provideCharts(...configurations) {\n const config = merge({}, ...configurations);\n return { provide: NG_CHARTS_CONFIGURATION, useValue: config };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctY2hhcnRzLnByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZzItY2hhcnRzL3NyYy9saWIvbmctY2hhcnRzLnByb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUdMLGFBQWEsSUFBSSxvQkFBb0IsR0FDdEMsTUFBTSxVQUFVLENBQUM7QUFFbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVsQyxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FDbEMsSUFBSSxjQUFjLENBQXdCLDRCQUE0QixDQUFDLENBQUM7QUFjMUU7O0dBRUc7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLEdBQUcsYUFBbUM7SUFFdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDO0FBQ3hFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixHQUFHLGNBQWdEO0lBRW5ELE1BQU0sTUFBTSxHQUEwQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDaGFydENvbXBvbmVudExpa2UsXG4gIERlZmF1bHRzLFxuICByZWdpc3RlcmFibGVzIGFzIGRlZmF1bHRSZWdpc3RlcmFibGVzLFxufSBmcm9tICdjaGFydC5qcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgY29uc3QgTkdfQ0hBUlRTX0NPTkZJR1VSQVRJT04gPVxuICBuZXcgSW5qZWN0aW9uVG9rZW48TmdDaGFydHNDb25maWd1cmF0aW9uPignQ29uZmlndXJhdGlvbiBmb3IgbmdDaGFydHMnKTtcblxuZXhwb3J0IHR5cGUgTmdDaGFydHNDb25maWd1cmF0aW9uID0ge1xuICAvKipcbiAgICogQW55IHJlZ2lzdGVyYWJsZSB0aGF0IGNhbiBiZSB1c2VkIHdpdGggYENoYXJ0LnJlZ2lzdGVyKClgLCBzdWNoIGFzIHBsdWdpbnMsIGNvbnRyb2xsZXJzLCBzY2FsZXMsIGFuZCBlbGVtZW50cy5cbiAgICovXG4gIHJlZ2lzdGVyYWJsZXM/OiByZWFkb25seSBDaGFydENvbXBvbmVudExpa2VbXTtcblxuICAvKipcbiAgICogRGVmYXVsdCBjb25maWd1cmF0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBgZGVmYXVsdHMuc2V0KClgLlxuICAgKi9cbiAgZGVmYXVsdHM/OiBEZWVwUGFydGlhbDxEZWZhdWx0cz47XG59O1xuXG4vKipcbiAqIFByb3ZpZGUgYWxsIHRoZSBkZWZhdWx0IHJlZ2lzdGVyYWJsZSBhcyBkZWZpbmVkIGJ5IENoYXJ0LmpzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRGVmYXVsdFJlZ2lzdGVyYWJsZXMoXG4gIC4uLnJlZ2lzdGVyYWJsZXM6IENoYXJ0Q29tcG9uZW50TGlrZVtdXG4pOiBOZ0NoYXJ0c0NvbmZpZ3VyYXRpb24ge1xuICByZXR1cm4geyByZWdpc3RlcmFibGVzOiBbLi4uZGVmYXVsdFJlZ2lzdGVyYWJsZXMsIC4uLnJlZ2lzdGVyYWJsZXNdIH07XG59XG5cbi8qKlxuICogUHJvdmlkZSBjb25maWd1cmF0aW9uIGZvciBuZ0NoYXJ0cy4gSW4gbW9zdCBjYXNlcywgeW91IGhhdmUgdG8gcGFzcyBpdCBzb21lIHJlZ2lzdGVyYWJsZXMuIFNvIGVpdGhlclxuICogYHdpdGhEZWZhdWx0UmVnaXN0ZXJhYmxlcygpYCwgb3IgYSBjdXN0b20gbGlzdCBvZiByZWdpc3RlcmFibGVzIHRhaWxvcmVkIHRvIHlvdXIgbmVlZHMgdG8gcmVkdWNlIGJ1bmRsZSBzaXplLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUNoYXJ0cyhcbiAgLi4uY29uZmlndXJhdGlvbnM6IHJlYWRvbmx5IE5nQ2hhcnRzQ29uZmlndXJhdGlvbltdXG4pIHtcbiAgY29uc3QgY29uZmlnOiBOZ0NoYXJ0c0NvbmZpZ3VyYXRpb24gPSBtZXJnZSh7fSwgLi4uY29uZmlndXJhdGlvbnMpO1xuICByZXR1cm4geyBwcm92aWRlOiBOR19DSEFSVFNfQ09ORklHVVJBVElPTiwgdXNlVmFsdWU6IGNvbmZpZyB9O1xufVxuIl19","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class ThemeService {\n constructor() {\n this.colorschemesOptions = new BehaviorSubject(undefined);\n }\n setColorschemesOptions(options) {\n this.pColorschemesOptions = options;\n this.colorschemesOptions.next(options);\n }\n getColorschemesOptions() {\n return this.pColorschemesOptions;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ThemeService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: ThemeService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmcyLWNoYXJ0cy9zcmMvbGliL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQU12QyxNQUFNLE9BQU8sWUFBWTtJQUh6QjtRQUtTLHdCQUFtQixHQUN4QixJQUFJLGVBQWUsQ0FBMkIsU0FBUyxDQUFDLENBQUM7S0FVNUQ7SUFSQyxzQkFBc0IsQ0FBQyxPQUFzQztRQUMzRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDOzhHQVpVLFlBQVk7a0hBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDaGFydENvbmZpZ3VyYXRpb24sIENoYXJ0T3B0aW9ucyB9IGZyb20gJ2NoYXJ0LmpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRoZW1lU2VydmljZSB7XG4gIHByaXZhdGUgcENvbG9yc2NoZW1lc09wdGlvbnM/OiBDaGFydE9wdGlvbnM7XG4gIHB1YmxpYyBjb2xvcnNjaGVtZXNPcHRpb25zOiBCZWhhdmlvclN1YmplY3Q8Q2hhcnRPcHRpb25zIHwgdW5kZWZpbmVkPiA9XG4gICAgbmV3IEJlaGF2aW9yU3ViamVjdDxDaGFydE9wdGlvbnMgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgc2V0Q29sb3JzY2hlbWVzT3B0aW9ucyhvcHRpb25zOiBDaGFydENvbmZpZ3VyYXRpb25bJ29wdGlvbnMnXSk6IHZvaWQge1xuICAgIHRoaXMucENvbG9yc2NoZW1lc09wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuY29sb3JzY2hlbWVzT3B0aW9ucy5uZXh0KG9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0Q29sb3JzY2hlbWVzT3B0aW9ucygpOiBDaGFydENvbmZpZ3VyYXRpb25bJ29wdGlvbnMnXSB7XG4gICAgcmV0dXJuIHRoaXMucENvbG9yc2NoZW1lc09wdGlvbnM7XG4gIH1cbn1cbiJdfQ==","import { Directive, ElementRef, EventEmitter, Input, NgZone, Output, inject, PLATFORM_ID, } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { Chart, defaults, } from 'chart.js';\nimport { ThemeService } from './theme.service';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { merge } from 'lodash-es';\nimport { NG_CHARTS_CONFIGURATION, } from './ng-charts.provider';\nimport * as i0 from \"@angular/core\";\nexport class BaseChartDirective {\n constructor() {\n this.type = 'bar';\n this.plugins = [];\n this.chartClick = new EventEmitter();\n this.chartHover = new EventEmitter();\n this.ctx = null;\n this.subs = [];\n this.themeOverrides = {};\n this.element = inject(ElementRef);\n this.zone = inject(NgZone);\n this.themeService = inject(ThemeService);\n this.config = inject(NG_CHARTS_CONFIGURATION, { optional: true });\n this.platformId = inject(PLATFORM_ID);\n this.isBrowser = isPlatformBrowser(this.platformId);\n if (this.config?.registerables) {\n Chart.register(...this.config.registerables);\n }\n if (this.config?.defaults) {\n defaults.set(this.config.defaults);\n }\n // Only get canvas context in browser environment\n if (this.isBrowser) {\n this.ctx = this.element.nativeElement.getContext('2d');\n }\n this.subs.push(this.themeService.colorschemesOptions\n .pipe(distinctUntilChanged())\n .subscribe((r) => this.themeChanged(r)));\n }\n ngOnChanges(changes) {\n if (!this.isBrowser) {\n return; // Skip chart operations in SSR\n }\n const requireRender = ['type'];\n const propertyNames = Object.getOwnPropertyNames(changes);\n if (propertyNames.some((key) => requireRender.includes(key)) ||\n propertyNames.every((key) => changes[key].isFirstChange())) {\n this.render();\n }\n else {\n // For legend changes, we need to update the chart options and re-render\n if (this.chart && changes['legend']) {\n const config = this.getChartConfiguration();\n if (config.options) {\n this.chart.options = config.options;\n }\n this.update();\n }\n else if (this.chart) {\n const config = this.getChartConfiguration();\n // Using assign to avoid changing the original object reference\n if (config.data && this.chart.config.data) {\n Object.assign(this.chart.config.data, config.data);\n }\n if (config.plugins && this.chart.config.plugins) {\n Object.assign(this.chart.config.plugins, config.plugins);\n }\n if (config.options && this.chart.config.options) {\n Object.assign(this.chart.config.options, config.options);\n }\n this.update();\n }\n }\n }\n ngOnDestroy() {\n if (this.chart) {\n this.chart.destroy();\n this.chart = void 0;\n }\n this.subs.forEach((s) => s.unsubscribe());\n }\n render() {\n if (!this.isBrowser || !this.ctx) {\n return undefined;\n }\n if (this.chart) {\n this.chart.destroy();\n }\n return this.zone.runOutsideAngular(() => (this.chart = new Chart(this.ctx, this.getChartConfiguration())));\n }\n update(mode) {\n if (this.chart && this.isBrowser) {\n this.zone.runOutsideAngular(() => this.chart?.update(mode));\n }\n }\n hideDataset(index, hidden) {\n if (this.chart && this.isBrowser) {\n this.chart.getDatasetMeta(index).hidden = hidden;\n this.update();\n }\n }\n isDatasetHidden(index) {\n return this.chart?.getDatasetMeta(index)?.hidden;\n }\n toBase64Image() {\n return this.chart?.toBase64Image();\n }\n themeChanged(options) {\n this.themeOverrides = options;\n if (this.chart) {\n if (this.chart.config.options) {\n Object.assign(this.chart.config.options, this.getChartOptions());\n }\n this.update();\n }\n }\n getChartOptions() {\n const baseOptions = {\n onHover: (event, active) => {\n if (!this.chartHover.observed && !this.chartHover.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartHover.emit({ event, active }));\n },\n onClick: (event, active) => {\n if (!this.chartClick.observed && !this.chartClick.observers?.length) {\n return;\n }\n this.zone.run(() => this.chartClick.emit({ event, active }));\n },\n };\n const legendOptions = {\n plugins: {\n legend: {\n display: this.legend,\n },\n },\n };\n return merge(baseOptions, this.themeOverrides || {}, this.options || {}, legendOptions);\n }\n getChartConfiguration() {\n return {\n type: this.type,\n data: this.getChartData(),\n options: this.getChartOptions(),\n plugins: this.plugins,\n };\n }\n getChartData() {\n return this.data\n ? this.data\n : {\n labels: this.labels || [],\n datasets: this.datasets || [],\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: BaseChartDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }\n static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.0\", type: BaseChartDirective, isStandalone: true, selector: \"canvas[baseChart]\", inputs: { type: \"type\", legend: \"legend\", data: \"data\", options: \"options\", plugins: \"plugins\", labels: \"labels\", datasets: \"datasets\" }, outputs: { chartClick: \"chartClick\", chartHover: \"chartHover\" }, exportAs: [\"base-chart\"], usesOnChanges: true, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: BaseChartDirective, decorators: [{\n type: Directive,\n args: [{\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'canvas[baseChart]',\n exportAs: 'base-chart',\n standalone: true,\n }]\n }], ctorParameters: () => [], propDecorators: { type: [{\n type: Input\n }], legend: [{\n type: Input\n }], data: [{\n type: Input\n }], options: [{\n type: Input\n }], plugins: [{\n type: Input\n }], labels: [{\n type: Input\n }], datasets: [{\n type: Input\n }], chartClick: [{\n type: Output\n }], chartHover: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jaGFydC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nMi1jaGFydHMvc3JjL2xpYi9iYXNlLWNoYXJ0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixNQUFNLEVBRU4sTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsS0FBSyxFQUtMLFFBQVEsR0FHVCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsdUJBQXVCLEdBRXhCLE1BQU0sc0JBQXNCLENBQUM7O0FBUTlCLE1BQU0sT0FBTyxrQkFBa0I7SUFnRDdCO1FBekNnQixTQUFJLEdBQ2xCLEtBQWMsQ0FBQztRQUlELFlBQU8sR0FBb0IsRUFBRSxDQUFDO1FBYTdCLGVBQVUsR0FHdEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNQLGVBQVUsR0FHdEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVqQixRQUFHLEdBQW9DLElBQUksQ0FBQztRQUczQyxTQUFJLEdBQW1CLEVBQUUsQ0FBQztRQUMxQixtQkFBYyxHQUFrQyxFQUFFLENBQUM7UUFDbkQsWUFBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixTQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FB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RCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUMvQixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLElBQUk7WUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUk7WUFDWCxDQUFDLENBQUM7Z0JBQ0UsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDekIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTthQUM5QixDQUFDO0lBQ1IsQ0FBQzs4R0E3TlUsa0JBQWtCO2tHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBTjlCLFNBQVM7bUJBQUM7b0JBQ1QsOERBQThEO29CQUM5RCxRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO3dEQVFpQixJQUFJO3NCQUFuQixLQUFLO2dCQUVVLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBRVUsTUFBTTtzQkFBckIsS0FBSztnQkFLVSxRQUFRO3NCQUF2QixLQUFLO2dCQU1XLFVBQVU7c0JBQTFCLE1BQU07Z0JBSVUsVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbmplY3QsXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYXJ0LFxuICBDaGFydENvbmZpZ3VyYXRpb24sXG4gIENoYXJ0RXZlbnQsXG4gIENoYXJ0VHlwZSxcbiAgRGVmYXVsdERhdGFQb2ludCxcbiAgZGVmYXVsdHMsXG4gIFBsdWdpbixcbiAgVXBkYXRlTW9kZSxcbn0gZnJvbSAnY2hhcnQuanMnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi90aGVtZS5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBOR19DSEFSVFNfQ09ORklHVVJBVElPTixcbiAgTmdDaGFydHNDb25maWd1cmF0aW9uLFxufSBmcm9tICcuL25nLWNoYXJ0cy5wcm92aWRlcic7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2NhbnZhc1tiYXNlQ2hhcnRdJyxcbiAgZXhwb3J0QXM6ICdiYXNlLWNoYXJ0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQmFzZUNoYXJ0RGlyZWN0aXZlPFxuICBUVHlwZSBleHRlbmRzIENoYXJ0VHlwZSA9IENoYXJ0VHlwZSxcbiAgVERhdGEgPSBEZWZhdWx0RGF0YVBvaW50PFRUeXBlPixcbiAgVExhYmVsID0gdW5rbm93bixcbj5cbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICBASW5wdXQoKSBwdWJsaWMgdHlwZTogQ2hhcnRDb25maWd1cmF0aW9uPFRUeXBlLCBURGF0YSwgVExhYmVsPlsndHlwZSddID1cbiAgICAnYmFyJyBhcyBUVHlwZTtcbiAgQElucHV0KCkgcHVibGljIGxlZ2VuZD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBkYXRhPzogQ2hhcnRDb25maWd1cmF0aW9uPFRUeXBlLCBURGF0YSwgVExhYmVsPlsnZGF0YSddO1xuICBASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogQ2hhcnRDb25maWd1cmF0aW9uPFRUeXBlLCBURGF0YSwgVExhYmVsPlsnb3B0aW9ucyddO1xuICBASW5wdXQoKSBwdWJsaWMgcGx1Z2luczogUGx1Z2luPFRUeXBlPltdID0gW107XG5cbiAgQElucHV0KCkgcHVibGljIGxhYmVscz86IENoYXJ0Q29uZmlndXJhdGlvbjxcbiAgICBUVHlwZSxcbiAgICBURGF0YSxcbiAgICBUTGFiZWxcbiAgPlsnZGF0YSddWydsYWJlbHMnXTtcbiAgQElucHV0KCkgcHVibGljIGRhdGFzZXRzPzogQ2hhcnRDb25maWd1cmF0aW9uPFxuICAgIFRUeXBlLFxuICAgIFREYXRhLFxuICAgIFRMYWJlbFxuICA+WydkYXRhJ11bJ2RhdGFzZXRzJ107XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjaGFydENsaWNrOiBFdmVudEVtaXR0ZXI8e1xuICAgIGV2ZW50PzogQ2hhcnRFdmVudDtcbiAgICBhY3RpdmU/OiBvYmplY3RbXTtcbiAgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhcnRIb3ZlcjogRXZlbnRFbWl0dGVyPHtcbiAgICBldmVudDogQ2hhcnRFdmVudDtcbiAgICBhY3RpdmU6IG9iamVjdFtdO1xuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGNoYXJ0PzogQ2hhcnQ8VFR5cGUsIFREYXRhLCBUTGFiZWw+O1xuXG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSB0aGVtZU92ZXJyaWRlczogQ2hhcnRDb25maWd1cmF0aW9uWydvcHRpb25zJ10gPSB7fTtcbiAgcHJpdmF0ZSBlbGVtZW50ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSB0aGVtZVNlcnZpY2UgPSBpbmplY3QoVGhlbWVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb25maWcgPSBpbmplY3QoTkdfQ0hBUlRTX0NPTkZJR1VSQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSkgYXNcbiAgICB8IE5nQ2hhcnRzQ29uZmlndXJhdGlvblxuICAgIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIGlzQnJvd3NlciA9IGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZz8ucmVnaXN0ZXJhYmxlcykge1xuICAgICAgQ2hhcnQucmVnaXN0ZXIoLi4udGhpcy5jb25maWcucmVnaXN0ZXJhYmxlcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnPy5kZWZhdWx0cykge1xuICAgICAgZGVmYXVsdHMuc2V0KHRoaXMuY29uZmlnLmRlZmF1bHRzKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IGdldCBjYW52YXMgY29udGV4dCBpbiBicm93c2VyIGVudmlyb25tZW50XG4gICAgaWYgKHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldENvbnRleHQoJzJkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICB0aGlzLnRoZW1lU2VydmljZS5jb2xvcnNjaGVtZXNPcHRpb25zXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHIpID0+IHRoaXMudGhlbWVDaGFuZ2VkKHIpKSxcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHtcbiAgICAgIHJldHVybjsgLy8gU2tpcCBjaGFydCBvcGVyYXRpb25zIGluIFNTUlxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVpcmVSZW5kZXIgPSBbJ3R5cGUnXTtcbiAgICBjb25zdCBwcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhbmdlcyk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wZXJ0eU5hbWVzLnNvbWUoKGtleSkgPT4gcmVxdWlyZVJlbmRlci5pbmNsdWRlcyhrZXkpKSB8fFxuICAgICAgcHJvcGVydHlOYW1lcy5ldmVyeSgoa2V5KSA9PiBjaGFuZ2VzW2tleV0uaXNGaXJzdENoYW5nZSgpKVxuICAgICkge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGxlZ2VuZCBjaGFuZ2VzLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY2hhcnQgb3B0aW9ucyBhbmQgcmUtcmVuZGVyXG4gICAgICBpZiAodGhpcy5jaGFydCAmJiBjaGFuZ2VzWydsZWdlbmQnXSkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmdldENoYXJ0Q29uZmlndXJhdGlvbigpO1xuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMpIHtcbiAgICAgICAgICB0aGlzLmNoYXJ0Lm9wdGlvbnMgPSBjb25maWcub3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNoYXJ0KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuZ2V0Q2hhcnRDb25maWd1cmF0aW9uKCk7XG5cbiAgICAgICAgLy8gVXNpbmcgYXNzaWduIHRvIGF2b2lkIGNoYW5naW5nIHRoZSBvcmlnaW5hbCBvYmplY3QgcmVmZXJlbmNlXG4gICAgICAgIGlmIChjb25maWcuZGF0YSAmJiB0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhKSB7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNoYXJ0LmNvbmZpZy5kYXRhLCBjb25maWcuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5wbHVnaW5zICYmIHRoaXMuY2hhcnQuY29uZmlnLnBsdWdpbnMpIHtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY2hhcnQuY29uZmlnLnBsdWdpbnMsIGNvbmZpZy5wbHVnaW5zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLm9wdGlvbnMgJiYgdGhpcy5jaGFydC5jb25maWcub3B0aW9ucykge1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydC5jb25maWcub3B0aW9ucywgY29uZmlnLm9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jaGFydCA9IHZvaWQgMDtcbiAgICB9XG4gICAgdGhpcy5zdWJzLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCk6IENoYXJ0PFRUeXBlLCBURGF0YSwgVExhYmVsPiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmlzQnJvd3NlciB8fCAhdGhpcy5jdHgpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoXG4gICAgICAoKSA9PlxuICAgICAgICAodGhpcy5jaGFydCA9IG5ldyBDaGFydChcbiAgICAgICAgICB0aGlzLmN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsXG4gICAgICAgICAgdGhpcy5nZXRDaGFydENvbmZpZ3VyYXRpb24oKSxcbiAgICAgICAgKSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGUobW9kZT86IFVwZGF0ZU1vZGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGFydCAmJiB0aGlzLmlzQnJvd3Nlcikge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuY2hhcnQ/LnVwZGF0ZShtb2RlKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhpZGVEYXRhc2V0KGluZGV4OiBudW1iZXIsIGhpZGRlbjogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXJ0ICYmIHRoaXMuaXNCcm93c2VyKSB7XG4gICAgICB0aGlzLmNoYXJ0LmdldERhdGFzZXRNZXRhKGluZGV4KS5oaWRkZW4gPSBoaWRkZW47XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0RhdGFzZXRIaWRkZW4oaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoYXJ0Py5nZXREYXRhc2V0TWV0YShpbmRleCk/LmhpZGRlbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0Jhc2U2NEltYWdlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hhcnQ/LnRvQmFzZTY0SW1hZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgdGhlbWVDaGFuZ2VkKG9wdGlvbnM6IENoYXJ0Q29uZmlndXJhdGlvblsnb3B0aW9ucyddKTogdm9pZCB7XG4gICAgdGhpcy50aGVtZU92ZXJyaWRlcyA9IG9wdGlvbnM7XG4gICAgaWYgKHRoaXMuY2hhcnQpIHtcbiAgICAgIGlmICh0aGlzLmNoYXJ0LmNvbmZpZy5vcHRpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jaGFydC5jb25maWcub3B0aW9ucywgdGhpcy5nZXRDaGFydE9wdGlvbnMoKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFydE9wdGlvbnMoKTogQ2hhcnRDb25maWd1cmF0aW9uPFxuICAgIFRUeXBlLFxuICAgIFREYXRhLFxuICAgIFRMYWJlbFxuICA+WydvcHRpb25zJ10ge1xuICAgIGNvbnN0IGJhc2VPcHRpb25zID0ge1xuICAgICAgb25Ib3ZlcjogKGV2ZW50OiBDaGFydEV2ZW50LCBhY3RpdmU6IG9iamVjdFtdKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGFydEhvdmVyLm9ic2VydmVkICYmICF0aGlzLmNoYXJ0SG92ZXIub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2hhcnRIb3Zlci5lbWl0KHsgZXZlbnQsIGFjdGl2ZSB9KSk7XG4gICAgICB9LFxuICAgICAgb25DbGljazogKGV2ZW50PzogQ2hhcnRFdmVudCwgYWN0aXZlPzogb2JqZWN0W10pID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNoYXJ0Q2xpY2sub2JzZXJ2ZWQgJiYgIXRoaXMuY2hhcnRDbGljay5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jaGFydENsaWNrLmVtaXQoeyBldmVudCwgYWN0aXZlIH0pKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGxlZ2VuZE9wdGlvbnMgPSB7XG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIGxlZ2VuZDoge1xuICAgICAgICAgIGRpc3BsYXk6IHRoaXMubGVnZW5kLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgYmFzZU9wdGlvbnMsXG4gICAgICB0aGlzLnRoZW1lT3ZlcnJpZGVzIHx8IHt9LFxuICAgICAgdGhpcy5vcHRpb25zIHx8IHt9LFxuICAgICAgbGVnZW5kT3B0aW9ucyxcbiAgICApIGFzIENoYXJ0Q29uZmlndXJhdGlvbjxUVHlwZSwgVERhdGEsIFRMYWJlbD5bJ29wdGlvbnMnXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2hhcnRDb25maWd1cmF0aW9uKCk6IENoYXJ0Q29uZmlndXJhdGlvbjxUVHlwZSwgVERhdGEsIFRMYWJlbD4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICBkYXRhOiB0aGlzLmdldENoYXJ0RGF0YSgpLFxuICAgICAgb3B0aW9uczogdGhpcy5nZXRDaGFydE9wdGlvbnMoKSxcbiAgICAgIHBsdWdpbnM6IHRoaXMucGx1Z2lucyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDaGFydERhdGEoKTogQ2hhcnRDb25maWd1cmF0aW9uPFRUeXBlLCBURGF0YSwgVExhYmVsPlsnZGF0YSddIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgICA/IHRoaXMuZGF0YVxuICAgICAgOiB7XG4gICAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICBkYXRhc2V0czogdGhpcy5kYXRhc2V0cyB8fCBbXSxcbiAgICAgICAgfTtcbiAgfVxufVxuIl19","/* eslint-disable @typescript-eslint/no-unsafe-function-type */\nexport {};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL25nMi1jaGFydHMvc3JjL2xpYi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrREFBK0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgKi9cblxuLy8gRGVlcFBhcnRpYWwgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbSB0aGUgdXRpbGl0eS10eXBlcyBOUE0gcGFja2FnZSwgd2hpY2ggaXNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBQaW90ciBXaXRlayA8cGlvdHJlay53aXRla0BnbWFpbC5jb20+IChodHRwOi8vcGlvdHJ3aXRlay5naXRodWIuaW8pXG4vLyBhbmQgdXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNlXG5leHBvcnQgdHlwZSBEZWVwUGFydGlhbDxUPiA9IFQgZXh0ZW5kcyBGdW5jdGlvblxuICA/IFRcbiAgOiBUIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT5cbiAgICA/IF9EZWVwUGFydGlhbEFycmF5PFU+XG4gICAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgICA/IF9EZWVwUGFydGlhbE9iamVjdDxUPlxuICAgICAgOiBUIHwgdW5kZWZpbmVkO1xuXG50eXBlIF9EZWVwUGFydGlhbEFycmF5PFQ+ID0gQXJyYXk8RGVlcFBhcnRpYWw8VD4+O1xudHlwZSBfRGVlcFBhcnRpYWxPYmplY3Q8VD4gPSB7IFtQIGluIGtleW9mIFRdPzogRGVlcFBhcnRpYWw8VFtQXT4gfTtcbiJdfQ==","/*\n * Public API Surface of ng2-charts\n */\nexport * from './lib/ng-charts.provider';\nexport * from './lib/base-chart.directive';\nexport * from './lib/theme.service';\nexport * from './lib/utils';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL25nMi1jaGFydHMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG5nMi1jaGFydHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9uZy1jaGFydHMucHJvdmlkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFzZS1jaGFydC5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGhlbWUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscyc7XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLWNoYXJ0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvbmcyLWNoYXJ0cy9zcmMvbmcyLWNoYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["registerables","defaultRegisterables"],"mappings":"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"}