UNPKG

@rinminase/ng-charts

Version:

Reactive, responsive, beautiful charts for Angular based on ng2-charts

1 lines 73.7 kB
{"version":3,"file":"rinminase-ng-charts.mjs","sources":["../../src/lib/default-colors.ts","../../src/lib/get-colors.ts","../../src/lib/theme.service.ts","../../src/lib/base-chart.directive.ts","../../src/lib/charts.module.ts","../../src/lib/monkey-patch-chart-js-legend.ts","../../src/lib/monkey-patch-chart-js-tooltip.ts","../../src/rinminase-ng-charts.ts"],"sourcesContent":["export const defaultColors: Array<number[]> = [\n  [255, 99, 132],\n  [54, 162, 235],\n  [255, 206, 86],\n  [231, 233, 237],\n  [75, 192, 192],\n  [151, 187, 205],\n  [220, 220, 220],\n  [247, 70, 74],\n  [70, 191, 189],\n  [253, 180, 92],\n  [148, 159, 177],\n  [77, 83, 96],\n];\n","import { DatasetColor } from \"./color\";\nimport { Colors } from \"./colors\";\nimport { defaultColors } from \"./default-colors\";\n\n/**\n * Generate colors by chart type\n */\nexport function getColors(\n  chartType: string,\n  index: number,\n  count: number\n): DatasetColor {\n  if (chartType === \"pie\" || chartType === \"doughnut\") {\n    return formatPieColors(generateColors(count));\n  }\n\n  if (chartType === \"polarArea\") {\n    return formatPolarAreaColors(generateColors(count));\n  }\n\n  if (chartType === \"line\" || chartType === \"radar\") {\n    return formatLineColor(generateColor(index));\n  }\n\n  if (chartType === \"bar\" || chartType === \"horizontalBar\") {\n    return formatBarColor(generateColor(index));\n  }\n\n  if (chartType === \"bubble\") {\n    return formatPieColors(generateColors(count));\n  }\n\n  if (chartType === \"scatter\") {\n    return formatPieColors(generateColors(count));\n  }\n\n  throw new Error(`getColors - Unsupported chart type ${chartType}`);\n}\n\nfunction rgba(colour: Array<number>, alpha: number): string {\n  return \"rgba(\" + colour.concat(alpha).join(\",\") + \")\";\n}\n\nfunction getRandomInt(min: number, max: number): number {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction formatLineColor(colors: Array<number>): DatasetColor {\n  return {\n    backgroundColor: rgba(colors, 0.4),\n    borderColor: rgba(colors, 1),\n    pointBackgroundColor: rgba(colors, 1),\n    pointBorderColor: \"#fff\",\n    pointHoverBackgroundColor: \"#fff\",\n    pointHoverBorderColor: rgba(colors, 0.8),\n  };\n}\n\nfunction formatBarColor(colors: Array<number>): DatasetColor {\n  return {\n    backgroundColor: rgba(colors, 0.6),\n    borderColor: rgba(colors, 1),\n    hoverBackgroundColor: rgba(colors, 0.8),\n    hoverBorderColor: rgba(colors, 1),\n  };\n}\n\nfunction formatPieColors(colors: Array<number[]>): Colors {\n  return {\n    backgroundColor: colors.map((color: number[]) => rgba(color, 0.6)),\n    borderColor: colors.map(() => \"#fff\"),\n    pointBackgroundColor: colors.map((color: number[]) => rgba(color, 1)),\n    pointBorderColor: colors.map(() => \"#fff\"),\n    pointHoverBackgroundColor: colors.map((color: number[]) => rgba(color, 1)),\n    pointHoverBorderColor: colors.map((color: number[]) => rgba(color, 1)),\n  };\n}\n\nfunction formatPolarAreaColors(colors: Array<number[]>): DatasetColor {\n  return {\n    backgroundColor: colors.map((color: number[]) => rgba(color, 0.6)),\n    borderColor: colors.map((color: number[]) => rgba(color, 1)),\n    hoverBackgroundColor: colors.map((color: number[]) => rgba(color, 0.8)),\n    hoverBorderColor: colors.map((color: number[]) => rgba(color, 1)),\n  };\n}\n\nfunction getRandomColor(): number[] {\n  return [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n}\n\n/**\n * Generate colors for line|bar charts\n */\nfunction generateColor(index: number): number[] {\n  return defaultColors[index] || getRandomColor();\n}\n\n/**\n * Generate colors for pie|doughnut charts\n */\nfunction generateColors(count: number): Array<number[]> {\n  const colorsArr: Array<number[]> = new Array(count);\n  for (let i = 0; i < count; i++) {\n    colorsArr[i] = defaultColors[i] || getRandomColor();\n  }\n  return colorsArr;\n}\n","import { Injectable } from \"@angular/core\";\nimport { BehaviorSubject } from \"rxjs\";\nimport { ChartOptions } from \"chart.js\";\n\n@Injectable({ providedIn: \"root\" })\nexport class ThemeService {\n  private pColorschemesOptions: ChartOptions = {};\n  public colorschemesOptions = new BehaviorSubject<ChartOptions>({});\n\n  constructor() {}\n\n  setColorschemesOptions(options: ChartOptions) {\n    this.pColorschemesOptions = options;\n    this.colorschemesOptions.next(options);\n  }\n\n  getColorschemesOptions() {\n    return this.pColorschemesOptions;\n  }\n}\n","import {\n  Directive,\n  DoCheck,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n} from \"@angular/core\";\nimport * as chartJs from \"chart.js\";\nimport { getColors } from \"./get-colors\";\nimport { DatasetColor } from \"./color\";\nimport { ThemeService } from \"./theme.service\";\nimport { Subscription } from \"rxjs\";\nimport { cloneDeep } from \"lodash-es\";\n\nexport type SingleDataSet = number[] | chartJs.ChartPoint[];\nexport type MultiDataSet = (number[] | chartJs.ChartPoint[])[];\nexport type SingleOrMultiDataSet = SingleDataSet | MultiDataSet;\n\nexport type PluginServiceGlobalRegistrationAndOptions = chartJs.PluginServiceGlobalRegistration &\n  chartJs.PluginServiceRegistrationOptions;\nexport type SingleLineLabel = string;\nexport type MultiLineLabel = string[];\n\nexport type ChartLabel = SingleLineLabel | MultiLineLabel;\nexport type ChartColor = DatasetColor[];\nexport type ChartType = chartJs.ChartType;\nexport type ChartDataset = chartJs.ChartDataSets;\nexport type ChartDatasets = chartJs.ChartDataSets[];\nexport type ChartOptions = chartJs.ChartOptions;\n\ninterface OldState {\n  dataExists: boolean;\n  dataLength: number;\n  datasetsExists: boolean;\n  datasetsLength: number;\n  datasetsDataObjects: any[];\n  datasetsDataLengths: number[];\n  colorsExists: boolean;\n  colors: DatasetColor[];\n  labelsExist: boolean;\n  labels: ChartLabel[];\n  legendExists: boolean;\n  legend: {\n    position?: string;\n  };\n}\n\nenum UpdateType {\n  Default,\n  Update,\n  Refresh,\n}\n\n@Directive({\n  // tslint:disable-next-line:directive-selector\n  selector: \"canvas[baseChart]\",\n  exportAs: \"base-chart\",\n})\nexport class BaseChartDirective\n  implements OnDestroy, OnChanges, OnInit, OnDestroy, DoCheck {\n  @Input() public data: SingleOrMultiDataSet;\n  @Input() public datasets: ChartDatasets;\n  @Input() public labels: ChartLabel[];\n  @Input() public options: ChartOptions = {};\n  @Input() public chartType: ChartType;\n  @Input() public colors: DatasetColor[];\n  @Input() public legend: boolean;\n  @Input() public plugins: PluginServiceGlobalRegistrationAndOptions[];\n\n  @Output() public chartClick: EventEmitter<{\n    event?: MouseEvent;\n    active?: {}[];\n  }> = new EventEmitter();\n  @Output() public chartHover: EventEmitter<{\n    event: MouseEvent;\n    active: {}[];\n  }> = new EventEmitter();\n\n  public ctx: string;\n  public chart: Chart;\n\n  private old: OldState = {\n    dataExists: false,\n    dataLength: 0,\n    datasetsExists: false,\n    datasetsLength: 0,\n    datasetsDataObjects: [],\n    datasetsDataLengths: [],\n    colorsExists: false,\n    colors: [],\n    labelsExist: false,\n    labels: [],\n    legendExists: false,\n    legend: {},\n  };\n\n  private subs: Subscription[] = [];\n\n  /**\n   * Register a plugin.\n   */\n  public static registerPlugin(\n    plugin: PluginServiceGlobalRegistrationAndOptions\n  ) {\n    chartJs.Chart.plugins.register(plugin);\n  }\n\n  public static unregisterPlugin(\n    plugin: PluginServiceGlobalRegistrationAndOptions\n  ) {\n    chartJs.Chart.plugins.unregister(plugin);\n  }\n\n  public constructor(\n    private element: ElementRef,\n    private themeService: ThemeService\n  ) {}\n\n  public ngOnInit() {\n    this.ctx = this.element.nativeElement.getContext(\"2d\");\n    this.refresh();\n    this.subs.push(\n      this.themeService.colorschemesOptions.subscribe(() => this.themeChanged())\n    );\n  }\n\n  private themeChanged() {\n    this.refresh();\n  }\n\n  ngDoCheck(): void {\n    if (!this.chart) {\n      return;\n    }\n    let updateRequired = UpdateType.Default;\n    const wantUpdate = (x: UpdateType) => {\n      updateRequired = x > updateRequired ? x : updateRequired;\n    };\n\n    if (!!this.data !== this.old.dataExists) {\n      this.propagateDataToDatasets(this.data);\n\n      this.old.dataExists = !!this.data;\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (this.data && this.data.length !== this.old.dataLength) {\n      this.old.dataLength = (this.data && this.data.length) || 0;\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (!!this.datasets !== this.old.datasetsExists) {\n      this.old.datasetsExists = !!this.datasets;\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (this.datasets && this.datasets.length !== this.old.datasetsLength) {\n      this.old.datasetsLength = (this.datasets && this.datasets.length) || 0;\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (\n      this.datasets &&\n      this.datasets.filter((x, i) => x.data !== this.old.datasetsDataObjects[i])\n        .length\n    ) {\n      this.old.datasetsDataObjects = this.datasets.map((x) => x.data);\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (\n      this.datasets &&\n      this.datasets.filter(\n        (x, i) => x.data.length !== this.old.datasetsDataLengths[i]\n      ).length\n    ) {\n      this.old.datasetsDataLengths = this.datasets.map((x) => x.data.length);\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (!!this.colors !== this.old.colorsExists) {\n      this.old.colorsExists = !!this.colors;\n\n      this.updateColors();\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    // This smells of inefficiency, might need to revisit this\n    if (\n      this.colors &&\n      this.colors.filter((x, i) => !this.colorsEqual(x, this.old.colors[i]))\n        .length\n    ) {\n      this.old.colors = this.colors.map((x) => this.copyColor(x));\n\n      this.updateColors();\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (!!this.labels !== this.old.labelsExist) {\n      this.old.labelsExist = !!this.labels;\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (\n      this.labels &&\n      this.labels.filter((x, i) => !this.labelsEqual(x, this.old.labels[i]))\n        .length\n    ) {\n      this.old.labels = this.labels.map((x) => this.copyLabel(x));\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (!!this.options.legend !== this.old.legendExists) {\n      this.old.legendExists = !!this.options.legend;\n\n      wantUpdate(UpdateType.Refresh);\n    }\n\n    if (\n      this.options.legend &&\n      this.options.legend.position !== this.old.legend.position\n    ) {\n      this.old.legend.position = this.options.legend.position;\n\n      wantUpdate(UpdateType.Refresh);\n    }\n\n    switch (updateRequired as UpdateType) {\n      case UpdateType.Default:\n        break;\n      case UpdateType.Update:\n        this.update();\n        break;\n      case UpdateType.Refresh:\n        this.refresh();\n        break;\n    }\n  }\n\n  copyLabel(a: ChartLabel): ChartLabel {\n    if (Array.isArray(a)) {\n      return [...a];\n    }\n    return a;\n  }\n\n  labelsEqual(a: ChartLabel, b: ChartLabel) {\n    return (\n      true &&\n      Array.isArray(a) === Array.isArray(b) &&\n      (Array.isArray(a) || a === b) &&\n      (!Array.isArray(a) || a.length === b.length) &&\n      (!Array.isArray(a) || a.filter((x, i) => x !== b[i]).length === 0)\n    );\n  }\n\n  copyColor(a: DatasetColor): DatasetColor {\n    const rc: DatasetColor = {\n      backgroundColor: a.backgroundColor,\n      borderWidth: a.borderWidth,\n      borderColor: a.borderColor,\n      borderCapStyle: a.borderCapStyle,\n      borderDash: a.borderDash,\n      borderDashOffset: a.borderDashOffset,\n      borderJoinStyle: a.borderJoinStyle,\n      pointBorderColor: a.pointBorderColor,\n      pointBackgroundColor: a.pointBackgroundColor,\n      pointBorderWidth: a.pointBorderWidth,\n      pointRadius: a.pointRadius,\n      pointHoverRadius: a.pointHoverRadius,\n      pointHitRadius: a.pointHitRadius,\n      pointHoverBackgroundColor: a.pointHoverBackgroundColor,\n      pointHoverBorderColor: a.pointHoverBorderColor,\n      pointHoverBorderWidth: a.pointHoverBorderWidth,\n      pointStyle: a.pointStyle,\n      hoverBackgroundColor: a.hoverBackgroundColor,\n      hoverBorderColor: a.hoverBorderColor,\n      hoverBorderWidth: a.hoverBorderWidth,\n    };\n\n    return rc;\n  }\n\n  colorsEqual(a: DatasetColor, b: DatasetColor) {\n    if (!a !== !b) {\n      return false;\n    }\n    return (\n      !a ||\n      (true &&\n        a.backgroundColor === b.backgroundColor &&\n        a.borderWidth === b.borderWidth &&\n        a.borderColor === b.borderColor &&\n        a.borderCapStyle === b.borderCapStyle &&\n        a.borderDash === b.borderDash &&\n        a.borderDashOffset === b.borderDashOffset &&\n        a.borderJoinStyle === b.borderJoinStyle &&\n        a.pointBorderColor === b.pointBorderColor &&\n        a.pointBackgroundColor === b.pointBackgroundColor &&\n        a.pointBorderWidth === b.pointBorderWidth &&\n        a.pointRadius === b.pointRadius &&\n        a.pointHoverRadius === b.pointHoverRadius &&\n        a.pointHitRadius === b.pointHitRadius &&\n        a.pointHoverBackgroundColor === b.pointHoverBackgroundColor &&\n        a.pointHoverBorderColor === b.pointHoverBorderColor &&\n        a.pointHoverBorderWidth === b.pointHoverBorderWidth &&\n        a.pointStyle === b.pointStyle &&\n        a.hoverBackgroundColor === b.hoverBackgroundColor &&\n        a.hoverBorderColor === b.hoverBorderColor &&\n        a.hoverBorderWidth === b.hoverBorderWidth)\n    );\n  }\n\n  updateColors() {\n    this.datasets.forEach((elm, index) => {\n      if (this.colors && this.colors[index]) {\n        Object.assign(elm, this.colors[index]);\n      } else {\n        Object.assign(elm, getColors(this.chartType, index, elm.data.length), {\n          ...elm,\n        });\n      }\n    });\n  }\n\n  public ngOnChanges(changes: SimpleChanges) {\n    let updateRequired = UpdateType.Default;\n    const wantUpdate = (x: UpdateType) => {\n      updateRequired = x > updateRequired ? x : updateRequired;\n    };\n\n    // Check if the changes are in the data or datasets or labels or legend\n\n    if (changes.hasOwnProperty(\"data\") && changes.data.currentValue) {\n      this.propagateDataToDatasets(changes.data.currentValue);\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (changes.hasOwnProperty(\"datasets\") && changes.datasets.currentValue) {\n      this.propagateDatasetsToData(changes.datasets.currentValue);\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (changes.hasOwnProperty(\"labels\")) {\n      if (this.chart) {\n        this.chart.data.labels = changes.labels.currentValue;\n      }\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (changes.hasOwnProperty(\"legend\")) {\n      if (this.chart) {\n        this.chart.config.options.legend.display = changes.legend.currentValue;\n        this.chart.generateLegend();\n      }\n\n      wantUpdate(UpdateType.Update);\n    }\n\n    if (changes.hasOwnProperty(\"options\")) {\n      wantUpdate(UpdateType.Refresh);\n    }\n\n    switch (updateRequired as UpdateType) {\n      case UpdateType.Update:\n        this.update();\n        break;\n      case UpdateType.Refresh:\n      case UpdateType.Default:\n        this.refresh();\n        break;\n    }\n  }\n\n  public ngOnDestroy() {\n    if (this.chart) {\n      this.chart.destroy();\n      this.chart = void 0;\n    }\n    this.subs.forEach((x) => x.unsubscribe());\n  }\n\n  public update(duration?: any) {\n    if (this.chart) {\n      return this.chart.update(duration);\n    }\n    return null;\n  }\n\n  public hideDataset(index: number, hidden: boolean) {\n    this.chart.getDatasetMeta(index).hidden = hidden;\n    this.chart.update();\n  }\n\n  public isDatasetHidden(index: number): boolean {\n    return this.chart.getDatasetMeta(index).hidden;\n  }\n\n  public toBase64Image(): string {\n    return this.chart.toBase64Image();\n  }\n\n  public getChartConfiguration(): chartJs.ChartConfiguration {\n    const datasets = this.getDatasets();\n\n    const options = Object.assign({}, this.options);\n    if (this.legend === false) {\n      options.legend = { display: false };\n    }\n    // hook for onHover and onClick events\n    options.hover = options.hover || {};\n    if (!options.hover.onHover) {\n      options.hover.onHover = (event: MouseEvent, active: {}[]) => {\n        if (active && !active.length) {\n          return;\n        }\n        this.chartHover.emit({ event, active });\n      };\n    }\n\n    if (!options.onClick) {\n      options.onClick = (event?: MouseEvent, active?: {}[]) => {\n        this.chartClick.emit({ event, active });\n      };\n    }\n\n    const mergedOptions = this.smartMerge(\n      options,\n      this.themeService.getColorschemesOptions()\n    );\n\n    const chartConfig: chartJs.ChartConfiguration = {\n      type: this.chartType,\n      data: {\n        labels: this.labels || [],\n        datasets,\n      },\n      plugins: this.plugins,\n      options: mergedOptions,\n    };\n\n    return chartConfig;\n  }\n\n  public getChartBuilder(ctx: string /*, data:any[], options:any*/): Chart {\n    const chartConfig = this.getChartConfiguration();\n    return new chartJs.Chart(ctx, chartConfig);\n  }\n\n  smartMerge(options: any, overrides: any, level: number = 0): any {\n    if (level === 0) {\n      options = cloneDeep(options);\n    }\n    const keysToUpdate = Object.keys(overrides);\n    keysToUpdate.forEach((key) => {\n      if (Array.isArray(overrides[key])) {\n        const arrayElements = options[key];\n        if (arrayElements) {\n          arrayElements.forEach((r) => {\n            this.smartMerge(r, overrides[key][0], level + 1);\n          });\n        }\n      } else if (typeof overrides[key] === \"object\") {\n        if (!(key in options)) {\n          options[key] = {};\n        }\n        this.smartMerge(options[key], overrides[key], level + 1);\n      } else {\n        options[key] = overrides[key];\n      }\n    });\n    if (level === 0) {\n      return options;\n    }\n  }\n\n  private isMultiLineLabel(label: ChartLabel): label is MultiLineLabel {\n    return Array.isArray(label);\n  }\n\n  private joinLabel(label: ChartLabel): string {\n    if (!label) {\n      return null;\n    }\n    if (this.isMultiLineLabel(label)) {\n      return label.join(\" \");\n    } else {\n      return label;\n    }\n  }\n\n  private propagateDatasetsToData(datasets: chartJs.ChartDataSets[]) {\n    this.data = this.datasets.map((r) => r.data) as MultiDataSet;\n    if (this.chart) {\n      this.chart.data.datasets = datasets;\n    }\n    this.updateColors();\n  }\n\n  private propagateDataToDatasets(newDataValues: SingleOrMultiDataSet): void {\n    if (this.isMultiDataSet(newDataValues)) {\n      if (this.datasets && newDataValues.length === this.datasets.length) {\n        this.datasets.forEach((dataset, i: number) => {\n          dataset.data = newDataValues[i];\n        });\n      } else {\n        this.datasets = newDataValues.map((data: number[], index: number) => {\n          return {\n            data,\n            label: this.joinLabel(this.labels[index]) || `Label ${index}`,\n          };\n        });\n        if (this.chart) {\n          this.chart.data.datasets = this.datasets;\n        }\n      }\n    } else {\n      if (!this.datasets) {\n        this.datasets = [{ data: newDataValues }];\n        if (this.chart) {\n          this.chart.data.datasets = this.datasets;\n        }\n      } else {\n        this.datasets[0].data = newDataValues;\n        this.datasets.splice(1); // Remove all elements but the first\n      }\n    }\n    this.updateColors();\n  }\n\n  private isMultiDataSet(data: SingleOrMultiDataSet): data is MultiDataSet {\n    return Array.isArray(data[0]);\n  }\n\n  private getDatasets() {\n    if (!this.datasets && !this.data) {\n      throw new Error(\n        `ng-charts configuration error, data or datasets field are required to render chart ${this.chartType}`\n      );\n    }\n\n    // If `datasets` is defined, use it over the `data` property.\n    if (this.datasets) {\n      this.propagateDatasetsToData(this.datasets);\n      return this.datasets;\n    }\n\n    if (this.data) {\n      this.propagateDataToDatasets(this.data);\n      return this.datasets;\n    }\n\n    return null;\n  }\n\n  private refresh() {\n    // if (this.options && this.options.responsive) {\n    //   setTimeout(() => this.refresh(), 50);\n    // }\n\n    // todo: remove this line, it is producing flickering\n    if (this.chart) {\n      this.chart.destroy();\n      this.chart = void 0;\n    }\n    if (this.ctx) {\n      this.chart = this.getChartBuilder(this.ctx /*, data, this.options*/);\n    }\n  }\n}\n","import { NgModule } from \"@angular/core\";\nimport { BaseChartDirective } from \"./base-chart.directive\";\n\n@NgModule({\n  declarations: [BaseChartDirective],\n  imports: [],\n  exports: [BaseChartDirective],\n})\nexport class ChartsModule {}\n","declare class Chart {\n  static readonly Chart: typeof Chart;\n  static readonly Tooltip: any;\n  static readonly helpers: any;\n  static readonly defaults: any;\n  static readonly plugins: any;\n}\n\nexport function monkeyPatchChartJsLegend() {\n  if (typeof Chart === \"undefined\") {\n    console.log(\"Chart not defined\");\n    return;\n  }\n  const plugins = Chart.plugins.getAll();\n  const legend = plugins.filter((p) => p.id === \"legend\")[0];\n  legend._element.prototype.fit = fit;\n  legend._element.prototype.draw = draw;\n\n  const helpers = Chart.helpers;\n  const defaults = Chart.defaults;\n  const valueOrDefault = helpers.valueOrDefault;\n\n  function getBoxWidth(labelOpts, fontSize) {\n    return labelOpts.usePointStyle && labelOpts.boxWidth > fontSize\n      ? fontSize\n      : labelOpts.boxWidth;\n  }\n\n  function fit() {\n    let me = this;\n    let opts = me.options;\n    let labelOpts = opts.labels;\n    let display = opts.display;\n\n    let ctx = me.ctx;\n\n    let labelFont = helpers.options._parseFont(labelOpts);\n    let fontSize = labelFont.size;\n\n    // Reset hit boxes\n    let hitboxes = (me.legendHitBoxes = []);\n\n    let minSize = me.minSize;\n    let isHorizontal = me.isHorizontal();\n\n    if (isHorizontal) {\n      minSize.width = me.maxWidth; // fill all the width\n      minSize.height = display ? 10 : 0;\n    } else {\n      minSize.width = display ? 10 : 0;\n      minSize.height = me.maxHeight; // fill all the height\n    }\n\n    let getMaxLineWidth = function (textLines) {\n      return textLines\n        .map(function (textLine) {\n          return ctx.measureText(textLine).width;\n        })\n        .reduce(function (acc, v) {\n          return v > acc ? v : acc;\n        }, 0);\n    };\n\n    // Increase sizes here\n    if (display) {\n      ctx.font = labelFont.string;\n\n      if (isHorizontal) {\n        // Width of each line of legend boxes. Labels wrap onto multiple lines when there are too many to fit on one\n        let lineWidths = (me.lineWidths = [0]);\n        let lineHeights = (me.lineHeights = []);\n        let currentLineHeight = 0;\n        let lineIndex = 0;\n\n        ctx.textAlign = \"left\";\n        ctx.textBaseline = \"top\";\n\n        helpers.each(me.legendItems, function (legendItem, i) {\n          let width, height;\n\n          if (helpers.isArray(legendItem.text)) {\n            width = getMaxLineWidth(legendItem.text);\n            height = fontSize * legendItem.text.length + labelOpts.padding;\n          } else {\n            width = ctx.measureText(legendItem.text).width;\n            height = fontSize + labelOpts.padding;\n          }\n          width += getBoxWidth(labelOpts, fontSize) + fontSize / 2;\n\n          if (\n            lineWidths[lineWidths.length - 1] + width + 2 * labelOpts.padding >\n            minSize.width\n          ) {\n            lineHeights.push(currentLineHeight);\n            currentLineHeight = 0;\n            lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n            lineIndex++;\n          }\n\n          legendItem.lineOrColumnIndex = lineIndex;\n\n          if (height > currentLineHeight) {\n            currentLineHeight = height;\n          }\n\n          // Store the hitbox width and height here. Final position will be updated in `draw`\n          hitboxes[i] = {\n            left: 0,\n            top: 0,\n            width: width,\n            height: height,\n          };\n\n          lineWidths[lineWidths.length - 1] += width + labelOpts.padding;\n        });\n\n        lineHeights.push(currentLineHeight);\n        minSize.height += lineHeights.reduce(function (acc, v) {\n          return acc + v;\n        }, 0);\n      } else {\n        let vPadding = labelOpts.padding;\n        let columnWidths = (me.columnWidths = []);\n        let columnHeights = (me.columnHeights = []);\n        let totalWidth = labelOpts.padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let columnIndex = 0;\n\n        helpers.each(me.legendItems, function (legendItem, i) {\n          let itemWidth;\n          let height;\n\n          if (helpers.isArray(legendItem.text)) {\n            itemWidth = getMaxLineWidth(legendItem.text);\n            height = fontSize * legendItem.text.length;\n          } else {\n            itemWidth = ctx.measureText(legendItem.text).width;\n            height = fontSize;\n          }\n          itemWidth += getBoxWidth(labelOpts, fontSize) + fontSize / 2;\n\n          // If too tall, go to new column\n          if (currentColHeight + fontSize + 2 * vPadding > minSize.height) {\n            totalWidth += currentColWidth + labelOpts.padding;\n            columnWidths.push(currentColWidth); // previous column width\n            columnHeights.push(currentColHeight);\n            currentColWidth = 0;\n            currentColHeight = 0;\n            columnIndex++;\n          }\n\n          legendItem.lineOrColumnIndex = columnIndex;\n\n          // Get max width\n          currentColWidth = Math.max(currentColWidth, itemWidth);\n          currentColHeight += height + vPadding;\n\n          // Store the hitbox width and height here. Final position will be updated in `draw`\n          hitboxes[i] = {\n            left: 0,\n            top: 0,\n            width: itemWidth,\n            height: height,\n          };\n        });\n\n        totalWidth += currentColWidth;\n        columnWidths.push(currentColWidth);\n        columnHeights.push(currentColHeight);\n        minSize.width += totalWidth;\n      }\n    }\n\n    me.width = minSize.width;\n    me.height = minSize.height;\n  }\n\n  function draw() {\n    let me = this;\n    let opts = me.options;\n    let labelOpts = opts.labels;\n    let globalDefaults = defaults.global;\n    let defaultColor = globalDefaults.defaultColor;\n    let lineDefault = globalDefaults.elements.line;\n    let legendHeight = me.height;\n    let columnHeights = me.columnHeights;\n    let columnWidths = me.columnWidths;\n    let legendWidth = me.width;\n    let lineWidths = me.lineWidths;\n    let lineHeights = me.lineHeights;\n\n    if (opts.display) {\n      let ctx = me.ctx;\n      let fontColor = valueOrDefault(\n        labelOpts.fontColor,\n        globalDefaults.defaultFontColor\n      );\n      let labelFont = helpers.options._parseFont(labelOpts);\n      let fontSize = labelFont.size;\n      let cursor;\n\n      // Canvas setup\n      ctx.textAlign = \"left\";\n      ctx.textBaseline = \"middle\";\n      ctx.lineWidth = 0.5;\n      ctx.strokeStyle = fontColor; // for strikethrough effect\n      ctx.fillStyle = fontColor; // render in correct colour\n      ctx.font = labelFont.string;\n\n      let boxWidth = getBoxWidth(labelOpts, fontSize);\n      let hitboxes = me.legendHitBoxes;\n\n      // current position\n      let drawLegendBox = function (x, y, legendItem) {\n        if (isNaN(boxWidth) || boxWidth <= 0) {\n          return;\n        }\n\n        // Set the ctx for the box\n        ctx.save();\n\n        let lineWidth = valueOrDefault(\n          legendItem.lineWidth,\n          lineDefault.borderWidth\n        );\n        ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n        ctx.lineCap = valueOrDefault(\n          legendItem.lineCap,\n          lineDefault.borderCapStyle\n        );\n        ctx.lineDashOffset = valueOrDefault(\n          legendItem.lineDashOffset,\n          lineDefault.borderDashOffset\n        );\n        ctx.lineJoin = valueOrDefault(\n          legendItem.lineJoin,\n          lineDefault.borderJoinStyle\n        );\n        ctx.lineWidth = lineWidth;\n        ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n\n        if (ctx.setLineDash) {\n          // IE 9 and 10 do not support line dash\n          ctx.setLineDash(\n            valueOrDefault(legendItem.lineDash, lineDefault.borderDash)\n          );\n        }\n\n        if (opts.labels && opts.labels.usePointStyle) {\n          // Recalculate x and y for drawPoint() because its expecting\n          // x and y to be center of figure (instead of top left)\n          let radius = (boxWidth * Math.SQRT2) / 2;\n          let centerX = x + boxWidth / 2;\n          let centerY = y + fontSize / 2;\n\n          // Draw pointStyle as legend symbol\n          helpers.canvas.drawPoint(\n            ctx,\n            legendItem.pointStyle,\n            radius,\n            centerX,\n            centerY\n          );\n        } else {\n          // Draw box as legend symbol\n          if (lineWidth !== 0) {\n            ctx.strokeRect(x, y, boxWidth, fontSize);\n          }\n          ctx.fillRect(x, y, boxWidth, fontSize);\n        }\n\n        ctx.restore();\n      };\n\n      let drawStrikeThrough = function (x, y, w) {\n        ctx.beginPath();\n        ctx.lineWidth = 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(x + w, y);\n        ctx.stroke();\n      };\n\n      let drawCrossOver = function (x, y, w, h) {\n        ctx.beginPath();\n        ctx.lineWidth = 2;\n        ctx.moveTo(x, y);\n        ctx.lineTo(x + w, y + h);\n        ctx.moveTo(x, y + h);\n        ctx.lineTo(x + w, y);\n        ctx.stroke();\n      };\n\n      let fillText = function (x, y, legendItem, textWidth) {\n        let halfFontSize = fontSize / 2;\n        let xLeft = boxWidth + halfFontSize + x;\n        let yMiddle = y + halfFontSize;\n\n        if (helpers.isArray(legendItem.text)) {\n          helpers.each(legendItem.text, function (textLine, index) {\n            let lineOffset = index * fontSize;\n            ctx.fillText(textLine, xLeft, yMiddle + lineOffset);\n          });\n        } else {\n          ctx.fillText(legendItem.text, xLeft, yMiddle);\n        }\n\n        if (legendItem.hidden) {\n          if (helpers.isArray(legendItem.text)) {\n            drawCrossOver(\n              xLeft,\n              yMiddle,\n              textWidth,\n              (legendItem.text.length - 1) * (fontSize - 1)\n            );\n          } else {\n            drawStrikeThrough(xLeft, yMiddle, textWidth);\n          }\n        }\n      };\n\n      let alignmentOffset = function (dimension, blockSize) {\n        switch (opts.align) {\n          case \"start\":\n            return labelOpts.padding;\n          case \"end\":\n            return dimension - blockSize;\n          default:\n            // center\n            return (dimension - blockSize + labelOpts.padding) / 2;\n        }\n      };\n\n      // Horizontal\n      let isHorizontal = me.isHorizontal();\n      if (isHorizontal) {\n        cursor = {\n          x: me.left + alignmentOffset(legendWidth, lineWidths[0]),\n          y: me.top + labelOpts.padding,\n          line: 0,\n        };\n      } else {\n        cursor = {\n          x: me.left + labelOpts.padding,\n          y: me.top + alignmentOffset(legendHeight, columnHeights[0]),\n          line: 0,\n        };\n      }\n\n      helpers.each(me.legendItems, function (legendItem, i) {\n        let textWidth, height, boxTopOffset;\n\n        if (legendItem.lineOrColumnIndex > cursor.line) {\n          if (isHorizontal) {\n            cursor.y += lineHeights[cursor.line];\n            cursor.line = legendItem.lineOrColumnIndex;\n            cursor.x =\n              me.left + alignmentOffset(legendWidth, lineWidths[cursor.line]);\n          } else {\n            cursor.x += columnWidths[cursor.line] + labelOpts.padding;\n            cursor.line = legendItem.lineOrColumnIndex;\n            cursor.y =\n              me.top +\n              alignmentOffset(legendHeight, columnHeights[cursor.line]);\n          }\n        }\n\n        if (helpers.isArray(legendItem.text)) {\n          textWidth = legendItem.text\n            .map(function (textLine) {\n              return ctx.measureText(textLine).width;\n            })\n            .reduce(function (acc, v) {\n              return v > acc ? v : acc;\n            }, 0);\n          boxTopOffset = (fontSize / 2) * (legendItem.text.length - 1);\n          height = fontSize * legendItem.text.length;\n        } else {\n          textWidth = ctx.measureText(legendItem.text).width;\n          boxTopOffset = 0;\n          height = fontSize;\n        }\n\n        let width = boxWidth + fontSize / 2 + textWidth;\n        let x = cursor.x;\n        let y = cursor.y;\n\n        let topOffset = isHorizontal\n          ? Math.trunc((lineHeights[cursor.line] - hitboxes[i].height) / 2)\n          : 0;\n\n        drawLegendBox(x, y + boxTopOffset + topOffset, legendItem);\n\n        hitboxes[i].left = x;\n        hitboxes[i].top = y;\n\n        // Fill the actual label\n        fillText(x, y + topOffset, legendItem, textWidth);\n\n        if (isHorizontal) {\n          cursor.x += width + labelOpts.padding;\n        } else {\n          cursor.y += height + labelOpts.padding;\n        }\n      });\n    }\n  }\n}\n","declare class Chart {\n  static readonly Chart: typeof Chart;\n  static readonly Tooltip: any;\n  static readonly helpers: any;\n  static readonly defaults: any;\n  static readonly plugins: any;\n}\n\nexport function monkeyPatchChartJsTooltip() {\n  if (typeof Chart === \"undefined\") {\n    console.log(\"Chart not defined\");\n    return;\n  }\n  Chart.Tooltip.prototype.drawBody = drawBody;\n  const helpers = Chart.helpers;\n\n  function getAlignedX(vm, align) {\n    return align === \"center\"\n      ? vm.x + vm.width / 2\n      : align === \"right\"\n      ? vm.x + vm.width - vm.xPadding\n      : vm.x + vm.xPadding;\n  }\n\n  function drawBody(pt, vm, ctx) {\n    let bodyFontSize = vm.bodyFontSize;\n    let bodySpacing = vm.bodySpacing;\n    let bodyAlign = vm._bodyAlign;\n    let body = vm.body;\n    let drawColorBoxes = vm.displayColors;\n    let labelColors = vm.labelColors;\n    let xLinePadding = 0;\n    let colorX = drawColorBoxes ? getAlignedX(vm, \"left\") : 0;\n    let textColor;\n\n    ctx.textAlign = bodyAlign;\n    ctx.textBaseline = \"top\";\n    ctx.font = helpers.fontString(\n      bodyFontSize,\n      vm._bodyFontStyle,\n      vm._bodyFontFamily\n    );\n\n    pt.x = getAlignedX(vm, bodyAlign);\n\n    // Before Body\n    let fillLineOfText = function (line) {\n      ctx.fillText(line, pt.x + xLinePadding, pt.y);\n      pt.y += bodyFontSize + bodySpacing;\n    };\n\n    // Before body lines\n    ctx.fillStyle = vm.bodyFontColor;\n    helpers.each(vm.beforeBody, fillLineOfText);\n\n    xLinePadding =\n      drawColorBoxes && bodyAlign !== \"right\"\n        ? bodyAlign === \"center\"\n          ? bodyFontSize / 2 + 1\n          : bodyFontSize + 2\n        : 0;\n\n    // Draw body lines now\n    helpers.each(body, function (bodyItem, i) {\n      textColor = vm.labelTextColors[i];\n      ctx.fillStyle = textColor;\n      helpers.each(bodyItem.before, fillLineOfText);\n\n      // Draw Legend-like boxes if needed\n      if (drawColorBoxes) {\n        // Fill a white rect so that colours merge nicely if the opacity is < 1\n        ctx.fillStyle = vm.legendColorBackground;\n        ctx.fillRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n        // Border\n        ctx.lineWidth = 1;\n        ctx.strokeStyle = labelColors[i].borderColor;\n        ctx.strokeRect(colorX, pt.y, bodyFontSize, bodyFontSize);\n\n        // Inner square\n        ctx.fillStyle = labelColors[i].backgroundColor;\n        ctx.fillRect(colorX + 1, pt.y + 1, bodyFontSize - 2, bodyFontSize - 2);\n        ctx.fillStyle = textColor;\n      }\n\n      helpers.each(bodyItem.lines, fillLineOfText);\n\n      helpers.each(bodyItem.after, fillLineOfText);\n    });\n\n    // Reset back to 0 for after body\n    xLinePadding = 0;\n\n    // After body lines\n    helpers.each(vm.afterBody, fillLineOfText);\n    pt.y -= bodySpacing; // Remove last body spacing\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.ThemeService"],"mappings":"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"}