@eclipse-scout/chart 25.2.14 → 25.2.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/cyclonedx/bom.json +6 -6
  2. package/dist/cyclonedx/bom.xml +6 -6
  3. package/dist/d.ts/src/chart/AbstractSvgChartRenderer.d.ts +3 -0
  4. package/dist/d.ts/src/chart/AbstractSvgChartRenderer.d.ts.map +1 -1
  5. package/dist/d.ts/src/chart/Chart.d.ts +2 -0
  6. package/dist/d.ts/src/chart/Chart.d.ts.map +1 -1
  7. package/dist/d.ts/src/chart/ChartEventMap.d.ts +9 -0
  8. package/dist/d.ts/src/chart/ChartEventMap.d.ts.map +1 -1
  9. package/dist/d.ts/src/chart/ChartJsRenderer.d.ts +3 -0
  10. package/dist/d.ts/src/chart/ChartJsRenderer.d.ts.map +1 -1
  11. package/dist/d.ts/src/chart/SpeedoChartRenderer.d.ts.map +1 -1
  12. package/dist/eclipse-scout-chart-56b0db398b6cbb5db250.min.js +3 -0
  13. package/dist/eclipse-scout-chart-56b0db398b6cbb5db250.min.js.map +1 -0
  14. package/dist/eclipse-scout-chart.esm-d3fe89eef3a7e7a32596.min.js +3 -0
  15. package/dist/eclipse-scout-chart.esm-d3fe89eef3a7e7a32596.min.js.map +1 -0
  16. package/dist/eclipse-scout-chart.esm.js +51 -8
  17. package/dist/eclipse-scout-chart.esm.js.map +1 -1
  18. package/dist/eclipse-scout-chart.js +51 -8
  19. package/dist/eclipse-scout-chart.js.map +1 -1
  20. package/dist/file-list +4 -4
  21. package/package.json +3 -3
  22. package/src/chart/AbstractSvgChartRenderer.ts +15 -0
  23. package/src/chart/Chart.ts +13 -0
  24. package/src/chart/ChartEventMap.ts +12 -1
  25. package/src/chart/ChartJsRenderer.ts +21 -0
  26. package/src/chart/FulfillmentChartRenderer.ts +2 -2
  27. package/src/chart/SalesfunnelChartRenderer.ts +2 -2
  28. package/src/chart/SpeedoChartRenderer.ts +3 -2
  29. package/src/chart/VennChartRenderer.ts +2 -2
  30. package/dist/eclipse-scout-chart-d331b1b85545869cd175.min.js +0 -3
  31. package/dist/eclipse-scout-chart-d331b1b85545869cd175.min.js.map +0 -1
  32. package/dist/eclipse-scout-chart.esm-282c94cab1a5918c5856.min.js +0 -3
  33. package/dist/eclipse-scout-chart.esm-282c94cab1a5918c5856.min.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"eclipse-scout-chart.js","mappings":"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","sources":["webpack:///./src/bookmark/ChartTableControlConfigHelperImpl.ts","webpack:///./src/chart/AbstractChartRenderer.ts","webpack:///./src/chart/AbstractSvgChartRenderer.ts","webpack:///./src/chart/Chart.ts","webpack:///./src/chart/ChartAdapter.ts","webpack:///./src/chart/ChartEventMap.ts","webpack:///./src/chart/ChartJsRenderer.ts","webpack:///./src/chart/ChartLayout.ts","webpack:///./src/chart/ChartModel.ts","webpack:///./src/chart/FulfillmentChartRenderer.ts","webpack:///./src/chart/SalesfunnelChartRenderer.ts","webpack:///./src/chart/SpeedoChartRenderer.ts","webpack:///./src/chart/VennAsync3Calculator.ts","webpack:///./src/chart/VennChartRenderer.ts","webpack:///./src/chart/VennCircle.ts","webpack:///./src/chart/VennCircleHelper.ts","webpack:///./src/chart/chartJsDateAdapter.ts","webpack:///./src/form/fields/chartfield/ChartField.ts","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.ts","webpack:///./src/form/fields/chartfield/ChartFieldModel.ts","webpack:///./src/index.ts","webpack:///./src/objectFactories.ts","webpack:///./src/table/controls/ChartTableControl.ts","webpack:///./src/table/controls/ChartTableControlAdapter.ts","webpack:///./src/table/controls/ChartTableControlConfigDo.ts","webpack:///./src/table/controls/ChartTableControlEventMap.ts","webpack:///./src/table/controls/ChartTableControlLayout.ts","webpack:///./src/table/controls/ChartTableControlModel.ts","webpack:///./src/table/controls/ChartTableUserFilter.ts","webpack:///./src/table/controls/ChartTableUserFilterModel.ts","webpack:///./src/tile/ChartFieldTile.ts","webpack:///./src/tile/ChartFieldTileAdapter.ts","webpack:///./src/tile/ChartFieldTileModel.ts","webpack:///external var \"Chart\"","webpack:///external var \"ChartDataLabels\"","webpack:///external var \"jQuery\"","webpack:///external var \"scout\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/before-startup","webpack:///webpack/startup","webpack:///webpack/after-startup"],"sourcesContent":["/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ChartTableControlConfigHelper, Page, scout, TableMatrixDateGroup, TableMatrixNumberGroup} from '@eclipse-scout/core';\nimport {ChartTableControl, ChartTableControlConfigDo, TableControlChartType} from '../index';\n\nexport class ChartTableControlConfigHelperImpl extends ChartTableControlConfigHelper {\n\n protected override async _exportConfig(page: Page): Promise<ChartTableControlConfigDo> {\n if (!page?.detailTable) {\n return null;\n }\n let chartTableControl = page.detailTable.findTableControl(ChartTableControl);\n if (chartTableControl && chartTableControl.selected) {\n return scout.create(ChartTableControlConfigDo, {\n chartTypeId: chartTableControl.chartType,\n chartGroup1ColumnId: chartTableControl.chartGroup1?.id,\n chartGroup1Modifier: chartTableControl.chartGroup1?.modifier,\n chartGroup2ColumnId: chartTableControl.chartGroup2?.id,\n chartGroup2Modifier: chartTableControl.chartGroup2?.modifier,\n chartAggregationColumnId: chartTableControl.chartAggregation?.id,\n chartAggregationModifier: chartTableControl.chartAggregation?.modifier\n });\n }\n return null;\n }\n\n protected override async _importConfig(page: Page, config: ChartTableControlConfigDo): Promise<void> {\n if (!page?.detailTable || !config) {\n return;\n }\n let chartTableControl = page.detailTable.findTableControl(ChartTableControl);\n if (chartTableControl) {\n chartTableControl.setSelected(true); // necessary, because otherwise internal data structures might not be properly initialized\n chartTableControl.setChartType(config.chartTypeId as TableControlChartType);\n chartTableControl.setChartGroup1({id: config.chartGroup1ColumnId, modifier: config.chartGroup1Modifier as TableMatrixNumberGroup | TableMatrixDateGroup});\n chartTableControl.setChartGroup2({id: config.chartGroup2ColumnId, modifier: config.chartGroup2Modifier as TableMatrixNumberGroup | TableMatrixDateGroup});\n chartTableControl.setChartAggregation({id: config.chartAggregationColumnId, modifier: config.chartAggregationModifier as TableMatrixNumberGroup});\n }\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Chart} from '../index';\nimport {arrays, PropertyChangeEvent, PropertyEventEmitter, PropertyEventMap, Session} from '@eclipse-scout/core';\nimport {UpdateChartOptions} from './Chart';\n\nexport class AbstractChartRenderer extends PropertyEventEmitter {\n declare eventMap: AbstractChartRendererEventMap;\n\n chart: Chart;\n session: Session;\n\n /** true while this.render() is executing */\n rendering: boolean;\n rendered: boolean;\n\n /** set by render() and remove(), makes it unnecessary to carry an argument through all method calls */\n animationDuration: number;\n firstOpaqueBackgroundColor: string;\n\n constructor(chart: Chart) {\n super();\n this.chart = chart;\n this.session = chart.session;\n this.rendering = false;\n this.rendered = false;\n this.animationDuration = 0;\n this.firstOpaqueBackgroundColor = '';\n }\n\n validate(): boolean {\n if (!this._validateChartData()) {\n return false;\n }\n\n return this._validate();\n }\n\n protected _validateChartData(): boolean {\n let chartData = this.chart && this.chart.data;\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0) {\n return false;\n }\n\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n return false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n return false;\n }\n }\n // color should have been set.\n if (!this.chart.config.options.autoColor && !arrays.ensure(chartValueGroup.colorHexValue).length && !chartValueGroup.cssClass) {\n return false;\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n return false;\n }\n }\n\n return true;\n }\n\n protected _validate(): boolean {\n // Override in subclasses\n return true;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while rendering the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n render(requestAnimation: boolean) {\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation ? configAnimationDuration : 0);\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _render() {\n // Override in subclasses\n }\n\n renderCheckedItems() {\n if (this.rendered) {\n this._renderCheckedItems();\n }\n }\n\n protected _renderCheckedItems() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while updating the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n updateData(requestAnimation: boolean) {\n if (!this.rendered) {\n this.render(requestAnimation);\n return;\n }\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation ? configAnimationDuration : 0);\n this._updateData();\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable(): boolean {\n return false;\n }\n\n isDetachSupported(): boolean {\n return true;\n }\n\n refresh() {\n if (this.rendering) {\n return;\n }\n if (this.rendered) {\n this.remove(false);\n }\n this.render(false);\n }\n\n setAnimationDuration(animationDuration: number) {\n if (!this.setProperty('animationDuration', animationDuration)) {\n return;\n }\n if (this.rendered) {\n this._renderAnimationDuration();\n }\n }\n\n protected _setAnimationDuration(animationDuration: number) {\n this._setProperty('animationDuration', animationDuration);\n }\n\n protected _renderAnimationDuration() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while removing the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation && configAnimationDuration);\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc();\n }\n\n protected _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n // Override in subclasses\n this._remove(afterRemoveFunc);\n }\n\n /**\n * Controls if the animation of the chart is shown when chart data has been updated.\n */\n shouldAnimateRemoveOnUpdate(opts: UpdateChartOptions): boolean {\n return opts.requestAnimation;\n }\n}\n\nexport interface AbstractChartRendererEventMap extends PropertyEventMap {\n 'propertyChange:animationDuration': PropertyChangeEvent<number>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, ObjectIdProvider, strings, styles} from '@eclipse-scout/core';\nimport $ from 'jquery';\nimport {AbstractChartRenderer, Chart} from '../index';\nimport {ClickObject} from './Chart';\n\nexport class AbstractSvgChartRenderer extends AbstractChartRenderer {\n chartBox: ChartBox;\n\n /** Clipping and masking */\n clipId: string;\n maskId: string;\n suppressLegendBox: boolean;\n height: number;\n width: number;\n chartAnimationStopping: boolean;\n\n $svg: JQuery<SVGElement>;\n\n constructor(chart: Chart) {\n super(chart);\n this.chartBox = null;\n\n this.clipId = 'Clip-' + ObjectIdProvider.get().createUiSeqId();\n this.maskId = 'Mask-' + ObjectIdProvider.get().createUiSeqId();\n\n this.suppressLegendBox = false;\n }\n\n static FONT_SIZE_SMALLEST = 'smallestFont';\n static FONT_SIZE_SMALL = 'smallFont';\n static FONT_SIZE_MIDDLE = 'middleFont';\n static FONT_SIZE_BIG = 'bigFont';\n\n protected override _render() {\n if (!this.$svg) {\n this.$svg = this.chart.$container.appendSVG('svg', 'chart-svg');\n aria.role(this.$svg, 'img');\n // labeling has to be done here because otherwise the svg is ignored\n this.linkChartWithFieldLabel(this.$svg);\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$svg);\n // This works, because CSS specifies 100% width/height\n this.height = this.$svg.height();\n this.width = this.$svg.width();\n this._initChartBox();\n if (this._useFontSizeBig()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_BIG);\n } else if (this._useFontSizeMiddle()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_MIDDLE);\n } else if (this._useFontSizeSmall()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALL);\n } else if (this._useFontSizeSmallest()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALLEST);\n }\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render->error\n return;\n }\n this._renderInternal();\n }\n\n /**\n * Links chart svg with its field label so the field name is read when entering the chart\n *\n * @see <a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby\">ARIA: aria-labelledby</a>\n */\n linkChartWithFieldLabel($chartSvg: JQuery<Element>) {\n if (!$chartSvg) {\n return;\n }\n let $field = $chartSvg.parents('.chart-field');\n if ($field.length > 0) {\n let $fieldLabel = $field.eq(0).children('label');\n if ($fieldLabel.length > 0) {\n aria.linkElementWithLabel($chartSvg, $fieldLabel.eq(0));\n }\n }\n }\n\n protected _renderInternal() {\n // Override in subclasses\n }\n\n protected _useFontSizeBig(): boolean {\n return false;\n }\n\n protected _useFontSizeMiddle(): boolean {\n return false;\n }\n\n protected _useFontSizeSmall(): boolean {\n return false;\n }\n\n protected _useFontSizeSmallest(): boolean {\n return false;\n }\n\n override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n if (this.rendered && !this.chartAnimationStopping) {\n this.chartAnimationStopping = true;\n this.$svg.children().stop(true, false);\n this.chartAnimationStopping = false;\n }\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n protected override _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n // this function is called directly from renderers after all removal animations are done\n // however, other animations may have been queued in the meantime (e.g. in case the chart was removed, then added (+animation queued), and then removed again)\n if (this.rendered) {\n this.$svg.children().stop(true, false);\n // need to check again, as stop() may have triggered a chart removal and this may not be rendered anymore\n if (this.rendered) {\n this.$svg.remove();\n this.$svg = null;\n }\n }\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc(this.chartAnimationStopping);\n }\n\n /**\n * For all parameters: use null when parameter is not used or set by a chart type.\n */\n protected _createClickObject(xIndex: number, datasetIndex: number): ClickObject {\n return {\n xIndex: xIndex,\n dataIndex: xIndex,\n datasetIndex: datasetIndex\n };\n }\n\n protected _measureText(text: string, legendLabelClass?: string): { height: number; width: number } {\n let $label = this.$svg.appendSVG('text', legendLabelClass)\n .attr('x', 0)\n .attr('y', 0)\n .attr('visibility', 'hidden')\n .text(text) as JQuery<SVGGraphicsElement>;\n let textBounds;\n try {\n // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a bounding box with 0\n textBounds = $label[0].getBBox();\n } catch (e) {\n return {\n height: 0,\n width: 0\n };\n }\n $label.remove();\n\n return textBounds;\n }\n\n protected _renderLine(x1: number, y1: number, x2: number, y2: number, lineClass: string): JQuery<SVGElement> {\n let $line = this.$svg.appendSVG('line', lineClass)\n .attr('x1', x1).attr('y1', y1)\n .attr('x2', x2).attr('y2', y2);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $line;\n }\n\n protected _renderLineLabel(x: number, y: number, label: string, labelClass: string, drawBackground: boolean): JQuery<SVGElement> {\n let $label = this.$svg.appendSVG('text', labelClass ? labelClass : 'line-label')\n .attr('x', x).attr('y', y)\n .text(label);\n\n if (drawBackground) {\n $label.attr('mask', 'url(#' + this.maskId + ')');\n\n let $background = this.$svg.appendSVG('text', labelClass ? labelClass + ' background' : 'line-label-background')\n .attr('x', x).attr('y', y)\n .attr('clip-path', 'url(#' + this.clipId + ')')\n .text(label);\n\n $label.data('$background', $background);\n\n if (this.animationDuration) {\n $background\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $label;\n }\n\n protected _initChartBox() {\n this.chartBox = {\n width: this.width,\n height: this.height,\n xOffset: 0,\n yOffset: 0,\n mX: function() {\n return this.xOffset + (this.width / 2);\n },\n mY: function() {\n return this.yOffset + (this.height / 2);\n }\n };\n }\n\n protected _createAnimationObjectWithTabIndexRemoval<T>(animationFunc: (now: number, tween: JQuery.Tween<T>) => void, duration?: number): JQuery.EffectsOptions<T> {\n return {\n step: function(now, fx) {\n try {\n animationFunc.bind(this)(now, fx);\n } catch (e) {\n // prevent logging thousands of exceptions (1 per animation step) by stopping and clearing the queue\n $(this).stop(true, false);\n throw e;\n }\n },\n duration: duration ? duration : Chart.DEFAULT_ANIMATION_DURATION,\n complete: function() {\n $(this).removeAttr('tabindex');\n }\n };\n }\n\n protected _addClipping(cssClass: string) {\n // add clip and mask paths for all relevant objects\n let $clip = this.$svg\n .appendSVG('clipPath');\n $clip[0].id = this.clipId;\n\n let $mask = this.$svg.appendSVG('mask');\n $mask.appendSVG('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'white');\n $mask[0].id = this.maskId;\n\n this.chart.$container.find('.' + cssClass).each(function(i) {\n this.id = 'ClipMask-' + ObjectIdProvider.get().createUiSeqId();\n $clip.appendSVG('use').attrXLINK('href', '#' + this.id);\n $mask.appendSVG('use').attrXLINK('href', '#' + this.id);\n });\n }\n\n protected _renderWireLegend(text: string, legendPositions: LegendPositions, className: string, drawBackgroundBox?: boolean): Legend {\n if (!this.chart.config.options.plugins.tooltip.enabled) {\n return {\n detachFunc: () => {\n // nop\n },\n attachFunc: () => {\n // nop\n },\n removeFunc: () => {\n // nop\n }\n };\n }\n let legend = {} as Legend,\n padding = 5,\n $background,\n backgroundWidth = 0,\n lineHeight = 17,\n backgroundHeight = lineHeight;\n\n if (drawBackgroundBox) {\n $background = this.$svg.appendSVG('rect', 'wire-legend-background-box')\n .attr('opacity', '1');\n }\n\n let positions = legendPositions;\n\n // draw and measure label\n\n let $legend,\n lengthLegend = 0,\n horizontalSpace = 0;\n if (positions.h === -1) {\n horizontalSpace = positions.x2 - 2 * padding;\n } else {\n horizontalSpace = this.width - positions.x2 - 2 * padding;\n }\n\n if (Array.isArray(text)) {\n for (let i = 0; i < text.length; i++) {\n let posIndex = text.length - i - 1;\n let yPos = positions.y2 + positions.v * padding - lineHeight * posIndex - padding * posIndex;\n let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox) as JQuery<SVGTextContentElement>;\n $line.addClass(className);\n lengthLegend = Math.max(lengthLegend, $line[0].getComputedTextLength());\n if (i === 0) {\n $legend = $line;\n } else {\n if ($legend.data('lines')) {\n $legend.data('lines').push($line);\n } else {\n $legend.data('lines', [$line]);\n }\n }\n }\n } else {\n $legend = this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, strings.truncateText(text, horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $legend.addClass(className);\n lengthLegend = $legend[0].getComputedTextLength();\n }\n backgroundWidth = lengthLegend + 2 * padding;\n\n if (legendPositions.autoPosition) {\n positions = legendPositions.posFunc.call(this, backgroundWidth, backgroundHeight);\n // adjust legend\n $legend.attr('x', positions.x2 + padding);\n $legend.attr('y', positions.y2 + positions.v * padding);\n }\n\n // fix layout depending on orientation of legend\n if (positions.h === -1) {\n $legend.attr('x', positions.x2 - padding - lengthLegend);\n $legend.css('text-anchor', 'left');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 - padding - lengthLegend);\n $line.css('text-anchor', 'left');\n });\n }\n } else {\n $legend.attr('x', positions.x2 + padding);\n $legend.css('text-anchor', 'right');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 + padding);\n $line.css('text-anchor', 'right');\n });\n }\n }\n if (positions.v === 1) {\n if ($legend.data('lines')) {\n $legend.data('lines').forEach(($line, i) => {\n $line.attr('y', positions.x2 - padding - lengthLegend);\n let index = 1 + i;\n $line.attr('y', positions.y2 + positions.v * padding + lineHeight * index + padding * (index + 1));\n });\n }\n $legend.attr('dy', '0.7em');\n } else {\n if ($legend.data('lines')) {\n let index = $legend.data('lines').length;\n $legend.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n $legend.data('lines').forEach(($line, i) => {\n index = $legend.data('lines').length - 1 - i;\n $line.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n });\n }\n }\n\n // align background text\n $legend.add($legend.data('lines')).each((i, line) => {\n let $line = $(line),\n $background = $line.data('$background');\n if ($background) {\n $background.attr('x', $line.attr('x'));\n $background.attr('y', $line.attr('y'));\n $background.css('text-anchor', $line.css('text-anchor'));\n $background.attr('dy', $line.attr('dy'));\n }\n });\n\n // draw lines, if wished\n let wires = [];\n if (positions.x1 > 0 && positions.y1 > 0) {\n wires.push(this._renderLine(positions.x1, positions.y1, positions.x2, positions.y2, 'label-line'));\n wires.push(this._renderLine(positions.x2, positions.y2, positions.x2 + positions.h * (lengthLegend + 2 * padding), positions.y2, 'label-line'));\n }\n $legend.data('wires', wires);\n\n let $svg = this.$svg;\n legend.detachFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.detach();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n $line.detach();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.detach();\n };\n\n legend.attachFunc = () => {\n $svg.append($legend);\n if ($legend.data('$background')) {\n $svg.append($legend.data('$background'));\n }\n $svg.append($legend.data('wires'));\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $svg.append($line);\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n });\n }\n };\n\n legend.removeFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.remove();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $line.data('$background').remove();\n }\n $line().remove();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.remove();\n };\n legend.$field = $legend;\n return legend;\n }\n}\n\nexport type ChartBox = {\n width: number;\n height: number;\n xOffset: number;\n yOffset: number;\n mX: () => number;\n mY: () => number;\n};\n\nexport type Legend = {\n $field?: JQuery;\n detachFunc: () => void;\n attachFunc: () => void;\n removeFunc: () => void;\n};\n\nexport type LegendPositions = {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n v: number;\n h: number;\n autoPosition: boolean;\n posFunc: (labelWidth: number, labelHeight: number) => LegendPositions;\n};\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractChartRenderer, ChartEventMap, ChartJsRenderer, ChartLayout, ChartModel, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {aria, arrays, ColorScheme, colorSchemes, DeepPartial, EnumObject, HtmlComponent, InitModelOf, objects, Widget} from '@eclipse-scout/core';\nimport {GreenAreaPosition} from './SpeedoChartRenderer';\nimport {CategoryScaleOptions, ChartConfiguration, ChartOptions, LinearScaleOptions, LogarithmicScaleOptions, RadialLinearScaleOptions, ScaleType, TimeScaleOptions as ChartJsTimeScaleOptions} from 'chart.js';\nimport $ from 'jquery';\n\nexport class Chart extends Widget implements ChartModel {\n declare model: ChartModel;\n declare eventMap: ChartEventMap;\n declare self: Chart;\n\n data: ChartData;\n config: ChartConfig;\n checkedItems: ClickObject[];\n\n chartRenderer: AbstractChartRenderer;\n\n /** @internal */\n _updatedOnce: boolean;\n\n protected _updateChartTimeoutId: number;\n protected _updateChartOpts: UpdateChartOptions;\n protected _updateChartOptsWhileNotAttached: UpdateChartOptions[];\n\n constructor() {\n super();\n\n this.$container = null;\n\n this.data = null;\n this.config = null;\n this.checkedItems = [];\n\n this.chartRenderer = null;\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n this._updateChartOptsWhileNotAttached = [];\n this._updatedOnce = false;\n }\n\n static Type = {\n PIE: 'pie',\n LINE: 'line',\n BAR: 'bar',\n BAR_HORIZONTAL: 'horizontalBar',\n COMBO_BAR_LINE: 'comboBarLine',\n FULFILLMENT: 'fulfillment',\n SPEEDO: 'speedo',\n SALESFUNNEL: 'salesfunnel',\n VENN: 'venn',\n DOUGHNUT: 'doughnut',\n POLAR_AREA: 'polarArea',\n RADAR: 'radar',\n BUBBLE: 'bubble',\n SCATTER: 'scatter'\n } as const;\n\n static Position = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n CENTER: 'center'\n } as const;\n\n static DEFAULT_ANIMATION_DURATION = 600; // ms\n static DEFAULT_DEBOUNCE_TIMEOUT = 100; // ms\n\n protected override _init(model: InitModelOf<this>) {\n super._init(model);\n this.setConfig(this.config);\n this._setData(this.data);\n }\n\n protected override _render() {\n this.$container = this.$parent.appendDiv('chart');\n aria.role(this.$container, 'none'); // ignore this container for screen readers, they care about the chart inside\n\n this.htmlComp = HtmlComponent.install(this.$container, this.session);\n this.htmlComp.setLayout(new ChartLayout(this));\n\n // !!! Do _not_ update the chart here, because usually the container size\n // !!! is not correct anyway during the render phase. The ChartLayout\n // !!! will eventually call updateChart() when the layout is validated.\n }\n\n protected override _renderProperties() {\n super._renderProperties();\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT\n });\n }\n\n protected override _renderOnAttach() {\n super._renderOnAttach();\n const updateChartOptsWhileNotAttached = this._updateChartOptsWhileNotAttached.splice(0);\n if (!this.chartRenderer?.isDetachSupported()) {\n // the chartRenderer does not support detach => recreate it\n this._updateChartRenderer();\n updateChartOptsWhileNotAttached.forEach(opts => delete opts.requestAnimation);\n updateChartOptsWhileNotAttached.push({requestAnimation: false});\n }\n updateChartOptsWhileNotAttached.forEach(opts => this.updateChart($.extend(true, {}, opts, {debounce: true})));\n }\n\n protected override _remove() {\n if (this.chartRenderer) {\n this.chartRenderer.remove(false);\n }\n this.$container.remove();\n this.$container = null;\n }\n\n setData(data: ChartData) {\n this.setProperty('data', data);\n this.setCheckedItems(this.checkedItems);\n }\n\n protected _setData(data: ChartData) {\n if (data) {\n data = $.extend({axes: []}, data);\n }\n this._setProperty('data', data);\n }\n\n protected _renderData() {\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n });\n }\n\n setConfig(config: ChartConfig) {\n let defaultConfig = {\n type: Chart.Type.PIE,\n options: {\n autoColor: true,\n colorMode: ChartColorMode.AUTO,\n colorScheme: colorSchemes.ColorSchemeId.DEFAULT,\n transparent: false,\n maxSegments: 5,\n adjustGridMaxMin: true,\n clickable: false,\n checkable: false,\n animation: {\n duration: Chart.DEFAULT_ANIMATION_DURATION\n },\n plugins: {\n datalabels: {\n display: false\n },\n tooltip: {\n enabled: true\n },\n legend: {\n display: true,\n clickable: false,\n position: Chart.Position.RIGHT,\n pointsVisible: true\n }\n }\n }\n };\n config = $.extend(true, {}, defaultConfig, config);\n config.options.colorScheme = colorSchemes.ensureColorScheme(config.options.colorScheme);\n if (objects.equalsRecursive(this.config, config)) {\n return;\n }\n\n // check if only data has changed\n let oldConfigWithNewData = $.extend(true, {}, this.config);\n if (config.data) {\n oldConfigWithNewData.data = config.data;\n } else {\n delete oldConfigWithNewData.data;\n }\n\n // the label map is technically part of the config, but it is handled as data. Therefore, it is excluded from this check.\n let transferLabelMap = (source, target, identifier) => {\n if (!source || !target || !identifier) {\n return;\n }\n // Property not set on source -> remove from target\n if (!source.options || !source.options[identifier]) {\n if (target.options) {\n delete target.options[identifier];\n }\n if (target.options && objects.isEmpty(target.options.scales) && !(source.options && source.options.scales)) {\n delete target.options.scales;\n }\n if (objects.isEmpty(target.options) && !source.options) {\n delete target.options;\n }\n return;\n }\n target.options[identifier] = source.options[identifier];\n };\n transferLabelMap(config, oldConfigWithNewData, 'xLabelMap');\n transferLabelMap(config, oldConfigWithNewData, 'yLabelMap');\n\n if (objects.equalsRecursive(oldConfigWithNewData, config)) {\n this._setProperty('config', config);\n if (this.rendered) {\n this._renderConfig(true);\n }\n this.setCheckedItems(this.checkedItems);\n return;\n }\n\n if (this.rendered && this.config && this.config.type) {\n this.$container.removeClass(this.config.type + '-chart');\n }\n this.setProperty('config', config);\n this.setCheckedItems(this.checkedItems);\n this._updateChartRenderer();\n }\n\n protected _renderConfig(onlyUpdateData: boolean) {\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: onlyUpdateData\n });\n }\n\n setCheckedItems(checkedItems: ClickObject[]) {\n this.setProperty('checkedItems', arrays.ensure(this._filterCheckedItems(checkedItems)));\n }\n\n protected _filterCheckedItems(checkedItems: ClickObject[]): ClickObject[] {\n if (!Array.isArray(checkedItems)) {\n return checkedItems;\n }\n let datasetLengths = [];\n if (this.data && this.data.chartValueGroups) {\n this.data.chartValueGroups.forEach(chartValueGroup => datasetLengths.push(chartValueGroup.values.length));\n } else if (this.config && this.config.data) {\n this.config.data.datasets.forEach(dataset => datasetLengths.push(dataset.data.length));\n }\n let filteredCheckedItems = checkedItems.filter(item => datasetLengths[item.datasetIndex] && item.dataIndex < datasetLengths[item.datasetIndex]);\n if (filteredCheckedItems.length < checkedItems.length) {\n return filteredCheckedItems;\n }\n return checkedItems;\n }\n\n protected _renderCheckedItems() {\n if (this.chartRenderer) {\n this.chartRenderer.renderCheckedItems();\n }\n }\n\n protected override _renderEnabled() {\n this.updateChart();\n }\n\n protected _renderClickable() {\n this.$container.toggleClass('clickable', this.config.options.clickable);\n }\n\n protected _renderCheckable() {\n this.$container.toggleClass('checkable', this.config.options.checkable);\n }\n\n protected _renderChartType() {\n this.$container.addClass(this.config.type + '-chart');\n }\n\n protected _renderColorScheme() {\n colorSchemes.toggleColorSchemeClasses(this.$container, this.config.options.colorScheme);\n }\n\n updateChart(opts?: UpdateChartOptions) {\n opts = opts || {};\n opts.onlyUpdateData = opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable();\n opts.enforceRerender = !opts.onlyUpdateData && !opts.onlyRefresh;\n\n // Cancel previously scheduled update and merge opts\n if (this._updateChartTimeoutId) {\n clearTimeout(this._updateChartTimeoutId);\n if (this._updateChartOpts) {\n // Inherit 'true' values from previously scheduled updates\n opts.requestAnimation = opts.requestAnimation || this._updateChartOpts.requestAnimation;\n opts.onlyUpdateData = opts.onlyUpdateData || this._updateChartOpts.onlyUpdateData;\n opts.onlyRefresh = opts.onlyRefresh || this._updateChartOpts.onlyRefresh;\n opts.enforceRerender = opts.enforceRerender || this._updateChartOpts.enforceRerender;\n }\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n }\n\n let updateChartImplFn = updateChartImpl.bind(this);\n let doDebounce = (opts.debounce === true || typeof opts.debounce === 'number');\n if (doDebounce) {\n this._updateChartOpts = opts;\n if (typeof opts.debounce === 'number') {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn, opts.debounce);\n } else {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn);\n }\n } else {\n updateChartImplFn();\n }\n\n // ---- Helper functions -----\n\n function updateChartImpl() {\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n\n if (!this.$container || !this.$container.isAttached()) {\n this._updateChartOptsWhileNotAttached.push(opts);\n return;\n }\n\n this._updatedOnce = true;\n if (!this.chartRenderer) {\n return; // nothing to render when there is no renderer.\n }\n if (opts.enforceRerender) {\n this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(opts), chartAnimationStopping => {\n if (this.removing || chartAnimationStopping) {\n // prevent exceptions trying to render after navigated away, and do not update/render while a running animation is being stopped\n return;\n }\n this.chartRenderer.render(opts.requestAnimation);\n this.trigger('chartRender');\n });\n } else if (opts.onlyUpdateData) {\n this.chartRenderer.updateData(opts.requestAnimation);\n } else if (opts.onlyRefresh) {\n this.chartRenderer.refresh();\n }\n }\n }\n\n protected _resolveChartRenderer(): AbstractChartRenderer {\n switch (this.config.type) {\n case Chart.Type.FULFILLMENT:\n return new FulfillmentChartRenderer(this);\n case Chart.Type.SPEEDO:\n return new SpeedoChartRenderer(this);\n case Chart.Type.SALESFUNNEL:\n return new SalesfunnelChartRenderer(this);\n case Chart.Type.VENN:\n return new VennChartRenderer(this);\n case Chart.Type.BAR:\n case Chart.Type.BAR_HORIZONTAL:\n case Chart.Type.LINE:\n case Chart.Type.COMBO_BAR_LINE:\n case Chart.Type.PIE:\n case Chart.Type.DOUGHNUT:\n case Chart.Type.POLAR_AREA:\n case Chart.Type.RADAR:\n case Chart.Type.BUBBLE:\n case Chart.Type.SCATTER:\n return new ChartJsRenderer(this);\n }\n return null;\n }\n\n protected _updateChartRenderer() {\n this.chartRenderer && this.chartRenderer.remove();\n this.setProperty('chartRenderer', this._resolveChartRenderer());\n }\n\n handleValueClick(clickedItem: ClickObject, originalEvent?: Event) {\n if (this.config.options.checkable) {\n let checkedItems = [...this.checkedItems],\n checkedItem = checkedItems.filter(item => item.datasetIndex === clickedItem.datasetIndex && item.dataIndex === clickedItem.dataIndex)[0];\n if (checkedItem) {\n arrays.remove(checkedItems, checkedItem);\n } else {\n checkedItems.push(clickedItem);\n }\n this.setCheckedItems(checkedItems);\n }\n this.trigger('valueClick', {\n data: clickedItem,\n originalEvent\n });\n }\n}\n\nexport type ChartData = {\n axes: ChartAxis[][];\n chartValueGroups: ChartValueGroup[];\n};\nexport type ChartAxis = {\n label: string;\n};\nexport type ChartValueGroup = {\n type?: string;\n groupName?: string;\n values: number[] | Record<string, number>[];\n colorHexValue?: string | string[];\n cssClass?: string;\n};\n\nexport type ChartConfig = Partial<Omit<ChartConfiguration, 'type' | 'options'>> & {\n type: ChartType;\n options?: ChartConfigOptions;\n};\n\nexport type ChartConfigOptions = Omit<ChartOptions, 'scales'> & {\n autoColor?: boolean;\n colorMode?: ChartColorMode;\n colorScheme?: ColorScheme | string;\n transparent?: boolean;\n maxSegments?: number;\n otherSegmentClickable?: boolean;\n adjustGridMaxMin?: boolean;\n clickable?: boolean;\n checkable?: boolean;\n scaleLabelByTypeMap?: Record<ChartType, Record<string, string>>;\n numberFormatter?: NumberFormatter;\n reformatLabels?: boolean;\n handleResize?: boolean;\n animation?: {\n duration?: number;\n };\n scales?: {\n x?: CartesianChartScale;\n y?: CartesianChartScale;\n yDiffType?: CartesianChartScale;\n r?: RadialChartScale;\n };\n bubble?: {\n sizeOfLargestBubble?: number;\n minBubbleSize?: number;\n };\n fulfillment?: {\n startValue?: number;\n };\n salesfunnel?: {\n normalized?: boolean;\n calcConversionRate?: boolean;\n };\n speedo?: {\n greenAreaPosition?: GreenAreaPosition;\n };\n venn?: {\n numberOfCircles?: 1 | 2 | 3;\n };\n plugins?: {\n legend?: {\n clickable?: boolean;\n pointsVisible?: boolean;\n };\n };\n};\n\nexport type RadialChartScale = DeepPartial<RadialLinearScaleOptions> & {\n type?: ScaleType;\n minSpaceBetweenTicks?: number;\n};\n\nexport type CartesianChartScale = DeepPartial<LinearScaleOptions | CategoryScaleOptions | TimeScaleOptions | LogarithmicScaleOptions> & {\n type?: ScaleType;\n minSpaceBetweenTicks?: number;\n};\n\nexport type TimeScaleOptions = Omit<ChartJsTimeScaleOptions, 'min' | 'max'> & {\n min?: string | number | Date | (() => string | number | Date);\n max?: string | number | Date | (() => string | number | Date);\n};\n\nexport type ChartType = EnumObject<typeof Chart.Type>;\nexport type ChartPosition = EnumObject<typeof Chart.Position>;\nexport type NumberFormatter = (label: number | string, defaultFormatter: (label: number | string) => string) => string;\n\n/**\n * Determines what parts of the chart data is colored with the same colors.\n */\nexport enum ChartColorMode {\n /**\n * Uses one of the other options depending on the chart type.\n */\n AUTO = 'auto',\n /**\n * Uses a different color for each dataset.\n */\n DATASET = 'dataset',\n /**\n * Uses a different color for each datapoint in a dataset but the n-th datapoint in each dataset will be colored using the same color.\n */\n DATA = 'data'\n}\n\nexport type ClickObject = {\n datasetIndex: number;\n dataIndex: number;\n xIndex?: number;\n yIndex?: number;\n};\n\nexport type UpdateChartOptions = {\n /**\n * Default is false.\n */\n requestAnimation?: boolean;\n /**\n * Default is 0.\n */\n debounce?: number | boolean;\n /**\n * Default is false.\n */\n onlyUpdateData?: boolean;\n /**\n * Default is false.\n */\n onlyRefresh?: boolean;\n enforceRerender?: boolean;\n};\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {Event, ModelAdapter} from '@eclipse-scout/core';\nimport {Chart} from '../index';\nimport {ChartValueClickEvent} from './ChartEventMap';\n\nexport class ChartAdapter extends ModelAdapter {\n protected _onWidgetValueClick(event: ChartValueClickEvent) {\n this._send('valueClick', event.data);\n }\n\n protected override _onWidgetEvent(event: Event<Chart>) {\n if (event.type === 'valueClick') {\n this._onWidgetValueClick(event as ChartValueClickEvent);\n } else {\n super._onWidgetEvent(event);\n }\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {Event as ScoutEvent, PropertyChangeEvent, WidgetEventMap} from '@eclipse-scout/core';\nimport {AbstractChartRenderer, Chart} from '../index';\nimport {ChartConfig, ChartData, ClickObject} from './Chart';\n\nexport interface ChartValueClickEvent<C = Chart> extends ScoutEvent<C> {\n data: ClickObject;\n originalEvent?: Event;\n}\n\nexport interface ChartEventMap extends WidgetEventMap {\n 'chartRender': ScoutEvent<Chart>;\n 'valueClick': ChartValueClickEvent;\n 'propertyChange:chartRenderer': PropertyChangeEvent<AbstractChartRenderer>;\n 'propertyChange:checkedItems': PropertyChangeEvent<ClickObject[]>;\n 'propertyChange:config': PropertyChangeEvent<ChartConfig>;\n 'propertyChange:data': PropertyChangeEvent<ChartData>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractChartRenderer, CartesianChartScale, Chart, ChartAxis, ChartColorMode, ChartConfig, ChartData, chartJsDateAdapter, ChartType, ClickObject, NumberFormatter, RadialChartScale} from '../index';\nimport {\n _adapters as chartJsAdapters, ActiveElement, ArcElement, BarElement, BubbleDataPoint, CartesianScaleOptions, CategoryScale, Chart as ChartJs, ChartArea, ChartConfiguration, ChartDataset, ChartEvent, ChartType as ChartJsType, Color,\n DefaultDataPoint, FontSpec, LegendElement, LegendItem, LegendOptions, LinearScaleOptions, Point as ChartJsPoint, PointElement, PointHoverOptions, RadialLinearScaleOptions, Scale, ScatterDataPoint, Scriptable, ScriptableContext,\n TooltipCallbacks, TooltipItem, TooltipLabelStyle, TooltipModel, TooltipOptions\n} from 'chart.js';\nimport 'chart.js/auto'; // Import from auto to register charts\nimport {aria, arrays, colorSchemes, graphics, numbers, objects, Point, scout, SomeRequired, strings, styles, Tooltip, tooltips} from '@eclipse-scout/core';\nimport ChartDataLabels, {Context} from 'chartjs-plugin-datalabels';\nimport $ from 'jquery';\n\nChartJs.register(ChartDataLabels);\n\n$.extend(true, ChartJs.defaults, {\n maintainAspectRatio: false,\n elements: {\n line: {\n borderWidth: 2\n },\n point: {\n radius: 0,\n hitRadius: 10,\n hoverRadius: 7,\n hoverBorderWidth: 2\n },\n arc: {\n borderWidth: 1\n },\n bar: {\n borderWidth: 1,\n borderSkipped: ''\n }\n },\n plugins: {\n legend: {\n labels: {\n usePointStyle: true,\n boxHeight: 7\n }\n }\n }\n});\n$.extend(true, ChartJs.overrides, {\n line: {\n elements: {\n point: {\n borderWidth: 2\n }\n }\n },\n scatter: {\n elements: {\n point: {\n radius: 3\n }\n }\n },\n bubble: {\n layout: {\n // Enabled auto padding would cause Chart.js to automatically add padding, in the size of the largest bubble\n // (defined by 'sizeOfLargestBubble'), around the chart. This wastes spaces and is not necessary, as we adjust\n // the axes already with the bubble size in mind.\n autoPadding: false\n }\n }\n});\n\nlet chartJsGlobalsInitialized = false;\nconst PHI = (1 + Math.sqrt(5)) / 2; // golden ratio\n\nexport class ChartJsRenderer extends AbstractChartRenderer {\n static ARROW_LEFT_RIGHT = '\\u2194';\n static ARROW_UP_DOWN = '\\u2195';\n\n chartJs: ChartJsChart;\n onlyIntegers: boolean;\n maxXAxesTicksHeight: number;\n numSupportedColors: number;\n colorSchemeCssClass: string;\n minRadialChartDatalabelSpace: number;\n resetDatasetAfterHover: boolean;\n legendHoverDatasets: number[];\n removing: boolean;\n\n $canvas: JQuery<HTMLCanvasElement>;\n\n protected _labelFormatter: LabelFormatter;\n protected _xLabelFormatter: LabelFormatter;\n protected _yLabelFormatter: LabelFormatter;\n protected _xAxisFitter: AxisFitter;\n protected _yAxisFitter: AxisFitter;\n protected _radialChartDatalabelsDisplayHandler: DatalabelsDisplayHandler;\n protected _radialChartDatalabelsFormatter: RadialChartDatalabelsFormatter;\n protected _datalabelsFormatter: DatalabelsFormatter;\n protected _datalabelBackgroundColorHandler: DatalabelBackgroundColorHandler;\n protected _legendLabelGenerator: LegendLabelGenerator;\n protected _clickHandler: ChartEventHandler;\n protected _hoverHandler: ChartEventHandler;\n protected _pointerHoverHandler: ChartEventHandler;\n protected _legendClickHandler: LegendEventHandler;\n protected _legendHoverHandler: LegendEventHandler;\n protected _legendPointerHoverHandler: LegendEventHandler;\n protected _legendLeaveHandler: LegendEventHandler;\n protected _legendPointerLeaveHandler: LegendEventHandler;\n protected _resizeHandler: ResizeHandler;\n protected _tooltipTitleGenerator: TooltipTitleGenerator;\n protected _tooltipItemsGenerator: TooltipItemsGenerator;\n protected _tooltipLabelGenerator: TooltipLabelGenerator;\n protected _tooltipLabelValueGenerator: TooltipLabelValueGenerator;\n protected _tooltipLabelColorGenerator: TooltipLabelColorGenerator;\n protected _tooltipRenderer: TooltipRenderer;\n protected _tooltip: Tooltip;\n protected _tooltipTimeoutId: number;\n protected _updatingDatalabels: boolean;\n\n constructor(chart: Chart) {\n super(chart);\n this.chartJs = null;\n this.onlyIntegers = true;\n this.maxXAxesTicksHeight = 75;\n this.numSupportedColors = 6;\n this.colorSchemeCssClass = '';\n this.minRadialChartDatalabelSpace = 25;\n\n this._labelFormatter = this._createLabelFormatter(this._formatLabel);\n this._xLabelFormatter = this._createLabelFormatter(this._formatXLabel);\n this._yLabelFormatter = this._createLabelFormatter(this._formatYLabel);\n\n this._xAxisFitter = this._fitXAxis.bind(this);\n this._yAxisFitter = this._fitYAxis.bind(this);\n\n this._radialChartDatalabelsDisplayHandler = this._displayDatalabelsOnRadialChart.bind(this);\n this._radialChartDatalabelsFormatter = this._formatDatalabelsOnRadialChart.bind(this);\n this._datalabelsFormatter = this._formatDatalabels.bind(this);\n this._datalabelBackgroundColorHandler = this._getBackgroundColorOfDataset.bind(this);\n\n this._legendLabelGenerator = this._generateLegendLabels.bind(this);\n\n this.resetDatasetAfterHover = false;\n\n this._clickHandler = this._onClick.bind(this);\n this._hoverHandler = this._onHover.bind(this);\n this._pointerHoverHandler = this._onHoverPointer.bind(this);\n\n this.legendHoverDatasets = [];\n\n this._legendClickHandler = this._onLegendClick.bind(this);\n this._legendHoverHandler = this._onLegendHover.bind(this);\n this._legendPointerHoverHandler = this._onLegendHoverPointer.bind(this);\n this._legendLeaveHandler = this._onLegendLeave.bind(this);\n this._legendPointerLeaveHandler = this._onLegendLeavePointer.bind(this);\n\n this._resizeHandler = this._onResize.bind(this);\n\n this._tooltipTitleGenerator = this._generateTooltipTitle.bind(this);\n this._tooltipItemsGenerator = this._generateTooltipItems.bind(this);\n this._tooltipLabelGenerator = this._generateTooltipLabel.bind(this);\n this._tooltipLabelValueGenerator = this._generateTooltipLabelValue.bind(this);\n this._tooltipLabelColorGenerator = this._generateTooltipLabelColor.bind(this);\n this._tooltipRenderer = this._renderTooltip.bind(this);\n this._tooltip = null;\n this._tooltipTimeoutId = null;\n }\n\n protected override _validateChartData(): boolean {\n let chartDataValid = true;\n let chartData = this.chart && this.chart.data;\n\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0 || !chartData.axes) {\n chartDataValid = false;\n }\n\n if (chartDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n chartDataValid = false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n chartDataValid = false;\n }\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n chartDataValid = false;\n }\n }\n }\n\n if (chartDataValid) {\n return true;\n }\n\n let chartConfigDataValid = true;\n let config = this.chart && this.chart.config;\n\n if (!config || !config.data || !config.data.datasets || config.data.datasets.length === 0) {\n chartConfigDataValid = false;\n }\n\n if (chartConfigDataValid && scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < config.data.datasets.length; i++) {\n let dataset = config.data.datasets[i];\n if (!dataset.data) {\n chartConfigDataValid = false;\n }\n // Length of all \"data\" arrays have to be equal\n if (i === 0) {\n length = dataset.data.length;\n } else {\n if (dataset.data.length !== length) {\n chartConfigDataValid = false;\n }\n }\n }\n }\n\n return chartConfigDataValid;\n }\n\n protected override _render() {\n if (!this.$canvas) {\n this.$canvas = this.chart.$container.appendElement('<canvas>') as JQuery<HTMLCanvasElement>;\n aria.hidden(this.$canvas, true); // aria not supported yet\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.font.family = this.$canvas.css('font-family');\n chartJsAdapters._date.override(chartJsDateAdapter.getAdapter(this.chart.session));\n chartJsGlobalsInitialized = true;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config);\n }\n\n protected _renderChart(config: ChartConfig) {\n if (this.chartJs) {\n this.chartJs.destroy();\n }\n config = $.extend(true, {}, config, {\n options: {\n animation: {}\n }\n }, config);\n config.options.animation.duration = this.animationDuration;\n\n this.chartJs = new ChartJs(this.$canvas[0].getContext('2d'), config as ChartConfiguration) as ChartJsChart;\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n }\n\n protected override _updateData() {\n if (!this.chartJs) {\n return;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n\n let targetData = this.chartJs.config.data,\n sourceData = config.data;\n\n // Transfer property from source object to target object:\n // 1. If the property is not set on the target object, copy it from source.\n // 2. If the property is not set on the source object, set it to undefined if setToUndefined = true. Otherwise, empty the array if it is an array property or set it to undefined.\n // 3. If the property is not an array on the source or the target object, copy the property from the source to the target object.\n // 4. If the property is an array on both objects, do not update the array, but transfer the elements (update elements directly, use pop(), push() or splice() if one array is longer than the other).\n let transferProperty = (source: object, target: object, property: string, setToUndefined?) => {\n if (!source || !target || !property) {\n return;\n }\n // 1. Property not set on target\n if (!target[property]) {\n let src = source[property];\n if (src || setToUndefined) {\n target[property] = src;\n }\n return;\n }\n // 2. Property not set on source\n if (!source[property]) {\n if (setToUndefined) {\n // Set to undefined if setToUndefined = true\n target[property] = undefined;\n return;\n }\n // Empty array\n if (Array.isArray(target[property])) {\n target[property].splice(0, target[property].length);\n return;\n }\n // Otherwise set to undefined\n target[property] = undefined;\n return;\n }\n // 3. Property is not an array on the source or the target object\n if (!Array.isArray(source[property]) || !Array.isArray(target[property])) {\n target[property] = source[property];\n return;\n }\n // 4. Property is an array on the source and the target object\n for (let i = 0; i < Math.min(source[property].length, target[property].length); i++) {\n // Update elements directly\n target[property][i] = source[property][i];\n }\n let targetLength = target[property].length,\n sourceLength = source[property].length;\n if (targetLength > sourceLength) {\n // Target array is longer than source array\n target[property].splice(sourceLength, targetLength - sourceLength);\n } else if (targetLength < sourceLength) {\n // Source array is longer than target array\n target[property].push(...source[property].splice(targetLength));\n }\n };\n\n let findDataset = (datasets: ChartDataset[], datasetId) => arrays.find(datasets, dataset => dataset.datasetId === datasetId);\n let findDatasetIndex = (datasets: ChartDataset[], datasetId) => arrays.findIndex(datasets, dataset => dataset.datasetId === datasetId);\n\n if (targetData && sourceData) {\n // Transfer properties from source to target, instead of overwriting the whole data object.\n // This needs to be done to have a smooth animation from the old to the new state and not a complete rebuild of the chart.\n transferProperty(sourceData, targetData, 'labels');\n\n if (!targetData.datasets) {\n targetData.datasets = [];\n }\n if (!sourceData.datasets) {\n sourceData.datasets = [];\n }\n\n // if all datasets have no id set, add artificial dataset ids\n if (sourceData.datasets.every(dataset => objects.isNullOrUndefined(dataset.datasetId))) {\n sourceData.datasets.forEach((dataset, idx) => {\n dataset.datasetId = '' + idx;\n });\n targetData.datasets.forEach((dataset, idx) => {\n dataset.datasetId = '' + idx;\n });\n }\n\n // update existing datasets\n // Important: Update existing datasets first, before removing obsolete datasets\n // (the dataset object has listeners from Chart.js, which do not work well on a partially updated chart (updated datasets, but not yet updated chart)\n targetData.datasets.forEach(targetDataset => {\n let sourceDataset = findDataset(sourceData.datasets, targetDataset.datasetId);\n\n if (sourceDataset) {\n targetDataset.label = sourceDataset.label;\n targetDataset.type = sourceDataset.type;\n\n transferProperty(sourceDataset, targetDataset, 'data');\n\n transferProperty(sourceDataset, targetDataset, 'backgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'borderColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'legendColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBorderColor', true);\n\n transferProperty(sourceDataset, targetDataset, 'uncheckedBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointHoverBackgroundColor', true);\n\n transferProperty(sourceDataset, targetDataset, 'lineTension', true);\n\n transferProperty(sourceDataset, targetDataset, 'pointRadius', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointRadius', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointRadius', true);\n\n this._adjustDatasetBorderWidths(targetDataset);\n }\n });\n\n // remove deleted datasets, loop backwards to not compromise the loop when modifying the array\n // datasets without an id get deleted anyway (replaced in every update, because a correct identification is not possible)\n for (let i = targetData.datasets.length - 1; i >= 0; i--) {\n let datasetId = targetData.datasets[i].datasetId;\n let deleted = objects.isNullOrUndefined(datasetId) || findDatasetIndex(sourceData.datasets, datasetId) === -1;\n if (deleted) {\n targetData.datasets.splice(i, 1);\n }\n }\n\n // sort existing, updated datasets\n targetData.datasets.sort((a, b) => {\n return findDatasetIndex(sourceData.datasets, a.datasetId) - findDatasetIndex(sourceData.datasets, b.datasetId);\n });\n\n // add all new datasets\n sourceData.datasets.forEach((sourceDataset, idx) => {\n let targetDataset = targetData.datasets[idx];\n // exclude datasets without an id here, to ensure that multiple datasets without an id do not overwrite each other\n if (targetDataset && targetDataset.datasetId && sourceDataset.datasetId === targetDataset.datasetId) {\n return;\n }\n targetData.datasets.splice(idx, 0, sourceDataset);\n });\n } else {\n this.chartJs.config.data = sourceData;\n }\n\n // update label maps for scales (the label maps, despite being part of the config, can be updated, without redrawing the whole chart)\n transferProperty(config.options, this.chartJs.config.options, 'xLabelMap', true);\n transferProperty(config.options, this.chartJs.config.options, 'yLabelMap', true);\n\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n let scales = this.chartJs.config.options.scales || {},\n axes = [scales.x || {}, scales.y || {}, scales.yDiffType || {}, scales.r || {}];\n axes.forEach((axis: LinearScaleOptions | RadialLinearScaleOptions) => {\n (axis.ticks || {} as (LinearScaleOptions | RadialLinearScaleOptions)['ticks']).stepSize = undefined;\n });\n\n this.refresh();\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n }\n\n override isDataUpdatable(): boolean {\n return true;\n }\n\n override isDetachSupported(): boolean {\n // chart.js removes the animation-listeners onProgress and onComplete on detach and does not add them again on attach\n // these listeners are needed for the datalabels => this renderer does not support detach\n return false;\n }\n\n override refresh() {\n if (this.chartJs) {\n this.chartJs.update();\n } else {\n super.refresh();\n }\n }\n\n protected override _renderAnimationDuration() {\n if (!this.chartJs) {\n return;\n }\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n this.refresh();\n }\n\n protected override _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.refresh();\n }\n }\n\n protected _checkItems(config: ChartConfig): boolean {\n if (!config || !config.data) {\n return false;\n }\n let transferArrayValues = (target, source, indices) => {\n if (Array.isArray(target) && Array.isArray(source)) {\n let changed = 0;\n arrays.ensure(indices)\n .filter(index => !isNaN(index) && index < Math.min(target.length, source.length))\n .forEach(index => {\n if (target[index] !== source[index]) {\n target[index] = source[index];\n changed++;\n }\n });\n return changed;\n }\n return 0;\n };\n let changed = 0;\n config.data.datasets.forEach((dataset: ChartDataset, datasetIndex) => {\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex),\n uncheckedIndices = arrays.init(dataset.data.length, null).map((elem, idx) => idx);\n arrays.removeAll(uncheckedIndices, checkedIndices);\n\n changed = changed +\n // check\n transferArrayValues(dataset.backgroundColor, dataset.checkedBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.checkedHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.checkedPointBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.checkedPointHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.checkedPointRadius, checkedIndices) +\n // uncheck\n transferArrayValues(dataset.backgroundColor, dataset.uncheckedBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.uncheckedHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.uncheckedPointBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.uncheckedPointHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.uncheckedPointRadius, uncheckedIndices);\n\n this._adjustDatasetBorderWidths(dataset);\n });\n\n return 0 < changed;\n }\n\n stopAnimations() {\n if (this.chartJs) {\n this.chartJs.stop();\n }\n }\n\n protected _adjustConfig(config: ChartConfig) {\n if (!config || !config.type) {\n return;\n }\n this._adjustType(config);\n if (this.chart.data) {\n this._computeDatasets(this.chart.data, config);\n }\n this._adjustData(config);\n this._adjustLegend(config);\n this._adjustTooltip(config);\n this._adjustGrid(config);\n this._adjustPlugins(config);\n this._adjustColors(config);\n this._adjustClickHandler(config);\n this._adjustResizeHandler(config);\n }\n\n protected _adjustType(config: ChartConfig) {\n if (config.type === Chart.Type.COMBO_BAR_LINE) {\n config.type = Chart.Type.BAR;\n\n let scaleLabelByTypeMap = (config.options || {}).scaleLabelByTypeMap;\n if (scaleLabelByTypeMap) {\n scaleLabelByTypeMap[Chart.Type.BAR] = scaleLabelByTypeMap[Chart.Type.COMBO_BAR_LINE];\n }\n } else if (this._isHorizontalBar(config)) {\n config.type = Chart.Type.BAR;\n config.options = $.extend(true, {}, config.options, {\n indexAxis: 'y'\n });\n }\n }\n\n protected _computeDatasets(chartData: ChartData, config: ChartConfig) {\n let labels = [],\n datasets = [];\n\n let setLabelMap = (identifier, labelMap) => {\n if (!$.isEmptyObject(labelMap)) {\n config.options[identifier] = labelMap;\n }\n };\n\n (chartData.axes[0] || []).forEach(elem => labels.push(elem.label));\n\n let isHorizontalBar = this._isHorizontalBar(config);\n setLabelMap(isHorizontalBar ? 'yLabelMap' : 'xLabelMap', this._computeLabelMap(chartData.axes[0]));\n setLabelMap(isHorizontalBar ? 'xLabelMap' : 'yLabelMap', this._computeLabelMap(chartData.axes[1]));\n\n chartData.chartValueGroups.forEach(elem => datasets.push({\n type: elem.type,\n label: elem.groupName,\n data: $.extend(true, [], elem.values)\n }));\n\n config.data = {\n labels: labels,\n datasets: datasets\n };\n }\n\n protected _isHorizontalBar(config: ChartConfig): boolean {\n return config && (config.type === Chart.Type.BAR_HORIZONTAL\n || (config.type === Chart.Type.BAR && config.options && config.options.indexAxis === 'y'));\n }\n\n protected _computeLabelMap(axis: ChartAxis[]): Record<number, string> {\n let labelMap = {};\n (axis || []).forEach((elem, idx) => {\n labelMap[idx] = elem.label;\n });\n return labelMap;\n }\n\n protected _adjustData(config: ChartConfig) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n this._adjustBarBorderWidth(config);\n this._adjustMaxSegments(config);\n this._adjustBubbleRadii(config);\n this._adjustOnlyIntegers(config);\n }\n\n protected _adjustBarBorderWidth(config: ChartConfig) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.BAR)) {\n return;\n }\n\n config.data.datasets.forEach(dataset => {\n if ((dataset.type || Chart.Type.BAR) === Chart.Type.BAR) {\n dataset.borderWidth = dataset.borderWidth || 1;\n dataset.hoverBorderWidth = dataset.hoverBorderWidth || 2;\n this._adjustDatasetBorderWidths(dataset);\n }\n });\n }\n\n protected _adjustDatasetBorderWidths(dataset: ChartDataset) {\n this._adjustDatasetBorderWidth(dataset);\n this._adjustDatasetBorderWidth(dataset, true);\n }\n\n /**\n * Sets the borderWidth to 0 if the backgroundColor and the borderColor are identical and backups the original value.\n * This method is idempotent as it restores the original state first and then applies its logic.\n *\n * @param hover whether hoverBorderWidth, hoverBackgroundColor and hoverBorderColor should be considered instead of borderWidth, backgroundColor and borderColor\n */\n protected _adjustDatasetBorderWidth(dataset: ChartDataset, hover?: boolean) {\n if (!dataset) {\n return;\n }\n let borderWidthIdentifier = hover ? 'hoverBorderWidth' : 'borderWidth',\n borderWidthBackupIdentifier = hover ? 'hoverBorderWidthBackup' : 'borderWidthBackup',\n backgroundColorIdentifier = hover ? 'hoverBackgroundColor' : 'backgroundColor',\n borderColorIdentifier = hover ? 'hoverBorderColor' : 'borderColor';\n // restore original state if there is a backup\n if (dataset[borderWidthBackupIdentifier]) {\n dataset[borderWidthIdentifier] = dataset[borderWidthBackupIdentifier];\n delete dataset[borderWidthBackupIdentifier];\n }\n // do nothing if there is no borderWidth set on the dataset or the borderWidth is a function\n if (!dataset[borderWidthIdentifier] || objects.isFunction(dataset[borderWidthIdentifier])) {\n return;\n }\n let isBorderWidthArray = Array.isArray(dataset[borderWidthIdentifier]),\n isBackgroundColorArray = Array.isArray(dataset[backgroundColorIdentifier]),\n isBorderColorArray = Array.isArray(dataset[borderColorIdentifier]),\n isArray = isBorderWidthArray || isBackgroundColorArray || isBorderColorArray;\n // if none of the properties is an array, simply backup the borderWidth and set it to 0\n if (!isArray && dataset[backgroundColorIdentifier] === dataset[borderColorIdentifier]) {\n dataset[borderWidthBackupIdentifier] = dataset[borderWidthIdentifier];\n dataset[borderWidthIdentifier] = 0;\n return;\n }\n // at least one of the properties is an array, therefore the borderWidth needs to be an array from now on\n let dataLength = (dataset.data || []).length;\n if (!isBorderWidthArray) {\n dataset[borderWidthIdentifier] = arrays.init(dataLength, dataset[borderWidthIdentifier]);\n } else if (dataset[borderWidthIdentifier].length < dataLength) {\n dataset[borderWidthIdentifier].push(...arrays.init(dataLength - dataset[borderWidthIdentifier].length, dataset[borderWidthIdentifier][0]));\n }\n let borderWidth = dataset[borderWidthIdentifier],\n length = borderWidth.length,\n borderWidthBackup = arrays.init(length, null);\n for (let i = 0; i < length; i++) {\n // it makes no difference if the backgroundColor/borderColor is not an array as a not-array-value is applied to every element by chart.js\n let backgroundColor = isBackgroundColorArray ? dataset[backgroundColorIdentifier][i] : dataset[backgroundColorIdentifier],\n borderColor = isBorderColorArray ? dataset[borderColorIdentifier][i] : dataset[borderColorIdentifier];\n borderWidthBackup[i] = borderWidth[i];\n if (backgroundColor === borderColor) {\n borderWidth[i] = 0;\n }\n }\n // only set the backup if at least one of the borderWidths changed\n if (!arrays.equals(borderWidth, borderWidthBackup)) {\n dataset[borderWidthBackupIdentifier] = borderWidthBackup;\n }\n }\n\n protected _adjustMaxSegments(config: ChartConfig) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return;\n }\n\n let maxSegments = config.options.maxSegments;\n if (!(maxSegments && config.data.datasets.length && maxSegments < config.data.datasets[0].data.length)) {\n return;\n }\n config.data.datasets.forEach(elem => {\n let newData = elem.data.slice(0, maxSegments);\n newData[maxSegments - 1] = elem.data.slice(maxSegments - 1, elem.data.length).reduce((x: number, y: number) => {\n return x + y;\n }, 0);\n elem.data = newData;\n });\n\n let newLabels = config.data.labels.slice(0, maxSegments);\n newLabels[maxSegments - 1] = this.chart.session.text('ui.OtherValues');\n config.data.labels = newLabels;\n config.data.maxSegmentsExceeded = true;\n }\n\n protected _isMaxSegmentsExceeded(config: ChartConfig, index: number): boolean {\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return false;\n }\n if (config.options.otherSegmentClickable) {\n return false;\n }\n if (!config.data.maxSegmentsExceeded || !config.options.maxSegments) {\n return false;\n }\n return config.options.maxSegments - 1 <= index;\n }\n\n /**\n * Fill temporary variable z for every bubble, if not yet set, and set bubble radius temporary to 1.\n * This allows the chart to render itself with correct dimensions and with no interfering from bubbles (very large bubbles make the chart grid itself smaller).\n * Later on in {@link _adjustBubbleSizes}, the bubble sizes will be calculated relative to the chart dimensions and the configured min/max sizes.\n */\n protected _adjustBubbleRadii(config: ChartConfig) {\n if (!config || !config.data || !config.type || config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.data.datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!isNaN(data.r)) {\n data.z = Math.pow(data.r, 2);\n }\n data.r = 1;\n }));\n }\n\n protected _adjustOnlyIntegers(config: ChartConfig) {\n this.onlyIntegers = true;\n\n if (!config || !config.data || !config.type) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every((data: ScatterDataPoint | BubbleDataPoint) => numbers.isInteger(data.x) && numbers.isInteger(data.y)));\n } else {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data)));\n }\n }\n\n protected _adjustLegend(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n legend: {\n labels: {\n generateLabels: this._legendLabelGenerator\n }\n }\n }\n });\n\n if (!config.options.plugins.legend.pointsVisible) {\n config.options.plugins.legend.labels.boxWidth = 0;\n }\n }\n\n protected _adjustTooltip(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, {\n plugins: {\n tooltip: {\n callbacks: {\n title: this._tooltipTitleGenerator,\n items: this._tooltipItemsGenerator,\n label: this._tooltipLabelGenerator,\n labelValue: this._tooltipLabelValueGenerator,\n labelColor: this._tooltipLabelColorGenerator\n }\n }\n }\n }, config.options);\n\n let tooltip = config.options.plugins.tooltip;\n\n if (!tooltip.enabled) {\n return;\n }\n\n tooltip.enabled = false;\n tooltip.external = this._tooltipRenderer;\n }\n\n protected _generateTooltipTitle(tooltipItems: TooltipItem<any>[]): string | string[] {\n if (!tooltipItems || !tooltipItems.length) {\n return '';\n }\n let tooltipItem = tooltipItems[0],\n chart = tooltipItem.chart as ChartJsChart,\n config = chart.config,\n dataset = tooltipItem.dataset,\n title = [];\n if (scout.isOneOf(config.type, Chart.Type.BUBBLE)) {\n let xAxis = config.options.scales.x,\n yAxis = config.options.scales.y,\n axisLabels = this._getAxisLabels(config);\n // @ts-expect-error\n let xTickLabel = xAxis.ticks.callback(dataset.data[tooltipItem.dataIndex].x, null, null) as string;\n if (xTickLabel) {\n title.push(this._createTooltipAttribute(axisLabels.x, strings.encode(xTickLabel), true));\n }\n // @ts-expect-error\n let yTickLabel = yAxis.ticks.callback(dataset.data[tooltipItem.dataIndex].y, null, null) as string;\n if (yTickLabel) {\n title.push(this._createTooltipAttribute(axisLabels.y, strings.encode(yTickLabel), true));\n }\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n // nop, scatter has the title in the items table\n } else {\n let label = chart.data.labels[tooltipItem.dataIndex] as string;\n title.push(this._createTooltipAttribute(config.options.reformatLabels ? this._formatLabel(label) : label, '', true));\n }\n return title;\n }\n\n protected _getAxisLabels(config: ChartConfig): { x: string; y: string } {\n let xAxisLabel = config.options.scales.x.title.text,\n yAxisLabel = config.options.scales.y.title.text;\n xAxisLabel = this._resolveAxisLabel(xAxisLabel as string, ChartJsRenderer.ARROW_LEFT_RIGHT);\n yAxisLabel = this._resolveAxisLabel(yAxisLabel as string, '&nbsp;' + ChartJsRenderer.ARROW_UP_DOWN + '&nbsp;');\n\n return {x: xAxisLabel, y: yAxisLabel};\n }\n\n protected _resolveAxisLabel(axisLabel: string | (() => string), defaultLabel = ''): string {\n if (objects.isFunction(axisLabel)) {\n axisLabel = axisLabel();\n axisLabel = objects.isString(axisLabel) ? axisLabel : '';\n }\n return axisLabel ? strings.encode(axisLabel) : defaultLabel;\n }\n\n protected _generateTooltipItems(tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator): string {\n if (!tooltipItems || !tooltipItems.length) {\n return '';\n }\n let tooltipItem = tooltipItems[0],\n chart = tooltipItem.chart as ChartJsChart,\n config = chart.config,\n xAxisValues = false,\n yAxisValues = false,\n itemsText = '';\n\n tooltipItems.forEach(tooltipItem => {\n let {label, labelValue, labelColor} = this._getItemDetails(tooltipItem, tooltipLabel, tooltipLabelValue, tooltipColor);\n if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n let {x, y} = labelValue as { x: string; y: string };\n xAxisValues ||= objects.isString(x);\n yAxisValues ||= objects.isString(y);\n itemsText += this._createTooltipScatterAttribute(label, x, y, false, labelColor);\n } else {\n itemsText += this._createTooltipAttribute(label, labelValue as string, false, labelColor);\n }\n });\n\n // tabular representation for scatter tooltip needs an additional header and footer\n if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n let tableHeader = '<table><tbody>';\n let axisLabels = this._getAxisLabels(config);\n tableHeader += this._createTooltipScatterAttribute('',\n xAxisValues ? axisLabels.x : '', // do not show axis label if no values are shown\n yAxisValues ? axisLabels.y : '', // do not show axis label if no values are shown\n true);\n let tableFooter = '</tbody></table>';\n itemsText = strings.box(tableHeader, itemsText, tableFooter);\n }\n\n return itemsText;\n }\n\n protected _getItemDetails(tooltipItem: TooltipItem<any>, tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator)\n : { label: string; labelValue: string | { x: string; y: string }; labelColor: string } {\n let label, labelValue, labelColor;\n if (objects.isFunction(tooltipLabel)) {\n label = tooltipLabel(tooltipItem);\n label = objects.isString(label) ? label : '';\n }\n if (objects.isFunction(tooltipLabelValue)) {\n labelValue = tooltipLabelValue(tooltipItem);\n labelValue = objects.isString(labelValue) || objects.isObject(labelValue) ? labelValue : '';\n }\n if (objects.isFunction(tooltipColor)) {\n labelColor = tooltipColor(tooltipItem);\n labelColor = objects.isObject(labelColor) ? (labelColor.backgroundColor || '') : '';\n }\n return {label, labelValue, labelColor};\n }\n\n protected _generateTooltipLabel(tooltipItem: TooltipItem<any>): string {\n return strings.encode(tooltipItem.dataset.label);\n }\n\n protected _generateTooltipLabelValue(tooltipItem: TooltipItem<any>): string | { x: string; y: string } {\n let config = tooltipItem.chart.config as ChartConfiguration,\n dataset = tooltipItem.dataset;\n if (config.type === Chart.Type.BUBBLE) {\n return strings.encode(this._formatLabel(dataset.data[tooltipItem.dataIndex].z));\n } else if (config.type === Chart.Type.SCATTER) {\n return {\n x: strings.encode(this._formatXLabel(dataset.data[tooltipItem.dataIndex].x)),\n y: strings.encode(this._formatYLabel(dataset.data[tooltipItem.dataIndex].y))\n };\n }\n return strings.encode(this._formatLabel(dataset.data[tooltipItem.dataIndex]));\n }\n\n protected _generateTooltipLabelColor(tooltipItem: TooltipItem<any>): TooltipLabelStyle {\n let config = tooltipItem.chart.config as ChartConfiguration,\n dataset = tooltipItem.dataset,\n legendColor, backgroundColor, borderColor, index;\n if (scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n borderColor = dataset.borderColor;\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.dataIndex] : dataset.legendColor;\n index = tooltipItem.datasetIndex;\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.dataIndex] : dataset.legendColor;\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[tooltipItem.dataIndex] : dataset.backgroundColor;\n backgroundColor = this._adjustColorOpacity(backgroundColor, 1);\n index = tooltipItem.dataIndex;\n }\n if (objects.isFunction(legendColor)) {\n legendColor = legendColor.call(tooltipItem.chart, index);\n }\n let tooltipLabelColor = legendColor || backgroundColor || borderColor;\n if (!tooltipLabelColor || objects.isFunction(tooltipLabelColor)) {\n let defaultTypeTooltipLabelColor;\n if (ChartJs.overrides[config.type] && ChartJs.overrides[config.type].plugins && ChartJs.overrides[config.type].plugins.tooltip && ChartJs.overrides[config.type].plugins.tooltip.callbacks) {\n defaultTypeTooltipLabelColor = ChartJs.overrides[config.type].plugins.tooltip.callbacks.labelColor;\n }\n let defaultTooltipLabelColor = defaultTypeTooltipLabelColor || ChartJs.defaults.plugins.tooltip.callbacks.labelColor;\n tooltipLabelColor = defaultTooltipLabelColor.call(tooltipItem.chart, tooltipItem).backgroundColor;\n }\n return {\n backgroundColor: tooltipLabelColor\n } as TooltipLabelStyle;\n }\n\n protected _createTooltipAttribute(label: string, value: string, isTitle: boolean, color?: string): string {\n let cssClass = isTitle ? 'attribute title' : 'attribute';\n return '<div class=\"' + cssClass + '\">' +\n (color ? '<div class=\"color\" style=\"background-color:' + color + '\"></div>' : '') +\n (label ? '<label>' + label + '</label>' : '') +\n (value ? '<div class=\"value\">' + value + '</div>' : '') +\n '</div>';\n }\n\n protected _createTooltipScatterAttribute(label: string, xValue: string, yValue: string, isTitle: boolean, color?: string): string {\n let cssClass = isTitle ? 'attribute title' : 'attribute';\n return '<tr class=\"' + cssClass + '\">' +\n '<td class=\"color-cell\">' +\n (color ? '<div class=\"color\" style=\"background-color:' + color + '\"></div>' : '') +\n '</td>' +\n '<td class=\"label\">' + label + '</td>' +\n (xValue ? '<td class=\"value\">' + xValue + '</td>' : '') +\n (yValue ? '<td class=\"value\">' + yValue + '</td>' : '') +\n '</tr>';\n }\n\n protected _renderTooltip(context: { chart: ChartJs; tooltip: TooltipModel<any> }) {\n let isHideTooltip = context.tooltip.opacity === 0 || context.tooltip.dataPoints.length < 1;\n if (isHideTooltip) {\n if (this._tooltipTimeoutId) {\n clearTimeout(this._tooltipTimeoutId);\n this._tooltipTimeoutId = undefined;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n this._tooltip = null;\n }\n return;\n }\n\n let isTooltipShowing = !!this._tooltip;\n if (isTooltipShowing) {\n this._renderTooltipLater(context);\n } else {\n // clear timeout before creating a new handler.\n // Otherwise, changing the context within the tooltip delay time creates a second handler\n // and the first one will always be executed, since the tooltipTimoutId reference to it is lost\n clearTimeout(this._tooltipTimeoutId);\n this._tooltipTimeoutId = setTimeout(() => this._renderTooltipLater(context), tooltips.DEFAULT_TOOLTIP_DELAY);\n }\n }\n\n protected _renderTooltipLater(context: { chart: ChartJs; tooltip: TooltipModel<any> }) {\n if (!this.rendered || this.removing) {\n return;\n }\n let tooltip = context.tooltip,\n dataPoints = tooltip.dataPoints;\n if (dataPoints.length < 1) {\n return;\n }\n let firstDataPoint = dataPoints[0],\n chart = firstDataPoint.chart;\n if (!chart.getDatasetMeta(firstDataPoint.datasetIndex).data[firstDataPoint.dataIndex]) {\n return;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n this._tooltip = null;\n }\n\n let tooltipOptions = tooltip.options || {} as TooltipOptions,\n tooltipCallbacks = tooltipOptions.callbacks || {} as TooltipCallbacks<any>,\n tooltipTitle = tooltipCallbacks.title as TooltipTitleGenerator,\n tooltipItems = tooltipCallbacks.items,\n tooltipLabel = tooltipCallbacks.label,\n tooltipLabelValue = tooltipCallbacks.labelValue,\n tooltipColor = tooltipCallbacks.labelColor,\n tooltipText = '';\n\n if (objects.isFunction(tooltipTitle)) {\n tooltipText += arrays.ensure(tooltipTitle(dataPoints)).join('');\n }\n if (objects.isFunction(tooltipItems)) {\n tooltipText += arrays.ensure(tooltipItems(dataPoints, tooltipLabel, tooltipLabelValue, tooltipColor)).join('');\n }\n\n let positionAndOffset = this._computeTooltipPositionAndOffset(firstDataPoint);\n let offset = new Point(tooltip.caretX + positionAndOffset.offsetX, tooltip.caretY + positionAndOffset.offsetY);\n\n this._tooltip = scout.create({\n objectType: Tooltip,\n parent: this.chart,\n $anchor: this.$canvas,\n text: tooltipText,\n htmlEnabled: true,\n cssClass: strings.join(' ', 'chart-tooltip', tooltipOptions.cssClass),\n tooltipPosition: positionAndOffset.tooltipPosition,\n tooltipDirection: positionAndOffset.tooltipDirection,\n originProducer: $anchor => {\n const origin = graphics.offsetBounds($anchor);\n origin.height = positionAndOffset.height;\n return origin;\n },\n offsetProducer: origin => offset\n });\n this._tooltip.render();\n\n this._tooltip.$container\n .css('pointer-events', 'none');\n\n let reposition = false,\n fontFamily = ((tooltipOptions.titleFont || {}) as FontSpec).family;\n if (fontFamily) {\n this._tooltip.$container\n .css('--chart-tooltip-font-family', fontFamily);\n reposition = true;\n }\n\n let maxLabelPrefSize = 0;\n this._tooltip.$container.find('label').each((idx, elem) => {\n maxLabelPrefSize = Math.max(maxLabelPrefSize, graphics.prefSize($(elem)).width);\n });\n if (maxLabelPrefSize > 0) {\n this._tooltip.$container\n .css('--chart-tooltip-label-width', Math.min(maxLabelPrefSize, 120) + 'px');\n reposition = true;\n }\n if (reposition) {\n this._tooltip.position();\n }\n }\n\n protected _computeTooltipPositionAndOffset(tooltipItem: TooltipItem<any>): { tooltipPosition: 'top' | 'bottom'; tooltipDirection: 'left' | 'right'; offsetX: number; offsetY: number; height: number } {\n let tooltipPosition: 'top' | 'bottom' = 'top',\n tooltipDirection: 'left' | 'right' = 'right',\n offsetX = 0,\n offsetY = 0,\n height = 0;\n\n let chart = tooltipItem.chart as ChartJsChart,\n datasetIndex = tooltipItem.datasetIndex,\n dataIndex = tooltipItem.dataIndex,\n config = chart.config,\n datasets = config.data.datasets,\n dataset = datasets[datasetIndex],\n value = dataset.data[dataIndex];\n\n if (this._isHorizontalBar(config)) {\n if (objects.isObject(value) && objects.isArray(value.x) && value.x.length === 2) {\n let avg = (value.x[0] + value.x[1]) / 2;\n tooltipDirection = avg < 0 ? 'left' : 'right';\n } else {\n tooltipDirection = (value as number) < 0 ? 'left' : 'right';\n }\n } else if ((dataset.type || config.type) === Chart.Type.BAR) {\n tooltipPosition = (value as number) < 0 ? 'bottom' : 'top';\n } else if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle']);\n let startAngle = element.startAngle,\n endAngle = element.endAngle,\n angle = (startAngle + endAngle) / 2;\n tooltipPosition = (0 <= angle && angle < Math.PI) ? 'bottom' : 'top';\n tooltipDirection = (-Math.PI / 2 <= angle && angle < Math.PI / 2) ? 'right' : 'left';\n } else if (config.type === Chart.Type.RADAR) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as PointElement).getProps(['angle']);\n let angle = element.angle as number;\n tooltipPosition = (0 <= angle && angle < Math.PI) ? 'bottom' : 'top';\n tooltipDirection = (-Math.PI / 2 <= angle && angle < Math.PI / 2) ? 'right' : 'left';\n } else if (scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n let element = chart.getDatasetMeta(datasetIndex).data[dataIndex];\n let chartArea = chart.chartArea,\n mid = chartArea.left + (chartArea.width / 2);\n tooltipDirection = element.x < mid ? 'left' : 'right';\n }\n\n if (this._isHorizontalBar(config)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as BarElement).getProps(['height', 'width']);\n height = element.height;\n let width = element.width,\n // golden ratio: (a + b) / a = a / b = PHI\n // and a + b = width\n // -> b = width / (PHI + 1)\n b = width / (PHI + 1);\n\n offsetY = -height / 2;\n offsetX = tooltipDirection === 'left' ? b : -b;\n } else if (scout.isOneOf(config.type, Chart.Type.LINE, Chart.Type.BUBBLE, Chart.Type.SCATTER, Chart.Type.RADAR) || dataset.type === Chart.Type.LINE) {\n let element = chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as PointElement;\n let options = element.options as unknown as PointHoverOptions,\n offset = options.hoverRadius + options.hoverBorderWidth;\n if (config.type === Chart.Type.BUBBLE) {\n offset += (value as BubbleDataPoint).r;\n }\n\n height = 2 * offset;\n offsetY = -offset;\n } else if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius']);\n let startAngle = element.startAngle,\n endAngle = element.endAngle,\n angle = (startAngle + endAngle) / 2,\n innerRadius = element.innerRadius,\n outerRadius = element.outerRadius,\n offset = (outerRadius - innerRadius) / 2;\n offsetX = offset * Math.cos(angle);\n offsetY = offset * Math.sin(angle);\n }\n\n return {tooltipPosition, tooltipDirection, offsetX, offsetY, height};\n }\n\n protected _adjustGrid(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options);\n\n this._adjustScalesR(config);\n this._adjustScalesXY(config);\n }\n\n protected _adjustScalesR(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n config.options = $.extend(true, {}, {\n scales: {\n r: {}\n }\n }, config.options);\n }\n\n let options = config.options,\n scales = options ? options.scales : {};\n if (scales && scales.r) {\n scales.r = $.extend(true, {}, {\n minSpaceBetweenTicks: 35,\n beginAtZero: true,\n angleLines: {\n display: false\n },\n ticks: {\n callback: this._labelFormatter\n },\n pointLabels: {\n callback: this._labelFormatter,\n font: {\n size: ChartJs.defaults.font.size\n }\n }\n }, scales.r);\n }\n }\n\n protected _adjustScalesXY(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.BUBBLE)) {\n config.options = $.extend(true, {}, {\n scales: {\n x: {\n minSpaceBetweenTicks: 150\n },\n y: {\n minSpaceBetweenTicks: 35\n }\n }\n }, config.options);\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n config.options = $.extend(true, {}, {\n scales: {\n x: {\n minSpaceBetweenTicks: 35,\n ticks: {\n padding: 10\n }\n },\n y: {\n minSpaceBetweenTicks: 35,\n ticks: {\n padding: 10\n }\n }\n }\n }, config.options);\n }\n\n this._adjustXAxis(config);\n this._adjustYAxis(config);\n }\n\n protected _adjustXAxis(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.x) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales;\n\n if (this._isHorizontalBar(config) || scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n scales.x = $.extend(true, {}, {\n beginAtZero: this._isHorizontalBar(config),\n offset: type === Chart.Type.BUBBLE,\n grid: {\n drawTicks: false\n },\n border: {\n display: false\n },\n ticks: {\n padding: 5\n }\n }, scales.x);\n } else {\n scales.x = $.extend(true, {}, {\n offset: true,\n grid: {\n display: false\n },\n border: {\n display: false\n }\n }, scales.x);\n }\n if (this._isHorizontalBar(config) || scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER) || config.options.reformatLabels) {\n scales.x = $.extend(true, {}, {\n ticks: {\n callback: this._xLabelFormatter\n }\n }, scales.x);\n }\n scales.x.afterCalculateLabelRotation = this._xAxisFitter;\n }\n\n protected _adjustYAxis(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.y) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales;\n\n if (this._isHorizontalBar(config)) {\n scales.y = $.extend(true, {}, {\n grid: {\n display: false\n },\n border: {\n display: false\n }\n }, scales.y);\n } else {\n scales.y = $.extend(true, {}, {\n beginAtZero: !scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER),\n grid: {\n drawTicks: false\n },\n border: {\n display: false\n },\n ticks: {\n padding: 5\n }\n }, scales.y);\n }\n if (!this._isHorizontalBar(config) || config.options.reformatLabels) {\n scales.y = $.extend(true, {}, {\n ticks: {\n callback: this._yLabelFormatter\n }\n }, scales.y);\n }\n scales.y.afterFit = this._yAxisFitter;\n }\n\n protected _adjustPlugins(config: ChartConfig) {\n this._adjustPluginsDatalabels(config);\n }\n\n protected _adjustPluginsDatalabels(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels || !config.options.plugins.datalabels.display) {\n return;\n }\n\n let plugins = config.options.plugins;\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._radialChartDatalabelsFormatter\n }, plugins.datalabels);\n plugins.datalabels.display = this._radialChartDatalabelsDisplayHandler;\n // since the this._radialChartDatalabelsDisplayHandler depends on values that are animated, we need to update the labels during the animation\n this._updatingDatalabels = false;\n let animation = config.options.animation || {},\n onProgress = animation.onProgress,\n onComplete = animation.onComplete,\n updateDatalabels = animation => {\n if (this._updatingDatalabels) {\n return;\n }\n this._updatingDatalabels = true;\n // invert the _actives of the datalabel plugin and call its afterEvent-hook\n // this hook will update its _actives to chart.getActiveElements() and recalculate the labels for all elements that changed\n // setting _actives to the complement of chart.getActiveElements() guarantees that all labels are updated\n let chart = animation.chart,\n metas = chart.getSortedVisibleDatasetMetas(),\n activeElements = [...chart.getActiveElements()],\n inactiveElements = [];\n\n metas.forEach((meta, datasetIndex) => {\n meta.data.forEach((element, index) => {\n let activeIndex = arrays.findIndex(activeElements, activeElement => activeElement.datasetIndex === datasetIndex && activeElement.index === index);\n if (activeIndex > 0) {\n activeElements.splice(activeIndex, 1);\n } else {\n inactiveElements.push({\n datasetIndex: datasetIndex,\n index: index,\n element: element\n });\n }\n });\n });\n\n // the datalabels plugin stores its data on the chart in $datalabels (see EXPANDO_KEY in chartjs-plugin-datalabels)\n chart['$' + ChartDataLabels.id]._actives = inactiveElements;\n ChartDataLabels.afterEvent(chart, null, null);\n this._updatingDatalabels = false;\n },\n updateDatalabelsAndDefaultCallback = (animation, defaultCallback) => {\n updateDatalabels(animation);\n if (defaultCallback) {\n defaultCallback(animation);\n }\n };\n\n config.options.animation = $.extend(true, {}, config.options.animation, {\n onProgress: animation => updateDatalabelsAndDefaultCallback(animation, onProgress),\n onComplete: animation => updateDatalabelsAndDefaultCallback(animation, onComplete)\n });\n\n } else if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 3\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 3,\n anchor: 'end',\n align: 'top',\n offset: 3\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n }\n if (config.options.reformatLabels) {\n let handleFormatter = formatter => {\n return (value, context) => {\n let label = formatter.call(context.chart, value, context);\n return this._formatLabel(label);\n };\n };\n\n if (config.data) {\n let datasets = config.data.datasets;\n datasets.forEach(dataset => {\n if (dataset.datalabels && dataset.datalabels.formatter) {\n dataset.datalabels.formatter = handleFormatter(dataset.datalabels.formatter);\n }\n });\n }\n if (plugins.datalabels.formatter) {\n plugins.datalabels.formatter = handleFormatter(plugins.datalabels.formatter);\n }\n }\n\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._datalabelsFormatter\n }, plugins.datalabels);\n }\n\n protected _getNumberFormatter(): NumberFormatter {\n return this.chartJs?.config?.options?.numberFormatter;\n }\n\n /**\n * Creates an unbound function that calls the given formatter on this {@link ChartJsRenderer}. The context of this\n * unbound function is passed to the formatter as argument.\n */\n protected _createLabelFormatter(formatter: LabelFormatter): LabelFormatter {\n const renderer = this;\n return function(label) {\n return formatter.call(renderer, label, this);\n };\n }\n\n protected _formatLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n protected _formatXLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n protected _formatYLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\n }\n\n /**\n * Uses the given scale to format the given label iff it is a {@link CategoryScale}.\n */\n protected _formatCategory(label: number | string, scale?: Scale): number | string {\n if (scale instanceof CategoryScale && numbers.isNumber(label)) {\n return scale.getLabelForValue(label);\n }\n return label;\n }\n\n protected _getXLabelMap(): Record<number | string, string> {\n return this._getLabelMap('xLabelMap');\n }\n\n protected _getYLabelMap(): Record<number | string, string> {\n return this._getLabelMap('yLabelMap');\n }\n\n protected _getLabelMap(identifier): Record<number | string, string> {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options[identifier];\n }\n }\n\n protected _formatLabelMap(label: number | string, labelMap: Record<string, string>, numberFormatter: NumberFormatter): string {\n if (labelMap) {\n return labelMap[label];\n }\n // @ts-expect-error\n if (isNaN(label) || typeof label === 'string') {\n return '' + label;\n }\n if (numberFormatter) {\n return numberFormatter(label, this._formatNumberLabel.bind(this));\n }\n return this._formatNumberLabel(label);\n }\n\n protected _formatNumberLabel(label: number | string): string {\n // @ts-expect-error\n if (isNaN(label)) {\n return '' + label;\n }\n // @ts-expect-error\n let abs = Math.abs(label);\n let abbreviation = '';\n if (abs >= 1000000) {\n abs = abs / 1000000;\n abbreviation = ' ' + this.chart.session.text('ui.Mio');\n let abbreviations = [\n this.chart.session.text('ui.Mrd'),\n this.chart.session.text('ui.Bio'),\n this.chart.session.text('ui.Brd'),\n this.chart.session.text('ui.Tri'),\n this.chart.session.text('ui.Trd')];\n for (let i = 0; i < abbreviations.length; i++) {\n if (abs >= 1000) {\n abs = abs / 1000;\n abbreviation = ' ' + abbreviations[i];\n } else {\n break;\n }\n }\n }\n // @ts-expect-error\n return this.session.locale.decimalFormat.format(Math.sign(label) * abs) + abbreviation;\n }\n\n protected _fitXAxis(xAxis: Scale<CartesianScaleOptions>) {\n if (!xAxis || xAxis.labelRotation === 0) {\n return;\n }\n let maxHeight = this.maxXAxesTicksHeight,\n fontDefaults = ChartJs.defaults.font,\n ticksDefaults = (ChartJs.defaults.scale as CartesianScaleOptions).ticks,\n ticksFontDefaults = (ticksDefaults.font || {}) as FontSpec,\n fontSize,\n maxRotation;\n if (this.chartJs) {\n let chartArea = this.chartJs.chartArea,\n chartAreaHeight = Math.abs(chartArea.top - chartArea.bottom);\n maxHeight = Math.min(maxHeight, chartAreaHeight / 3);\n }\n if (xAxis.options && xAxis.options.ticks) {\n maxRotation = xAxis.options.ticks.maxRotation;\n let ticksFont = (xAxis.options.ticks.font || {}) as FontSpec;\n fontSize = ticksFont.size;\n }\n maxRotation = maxRotation || ticksDefaults.maxRotation;\n fontSize = fontSize || ticksFontDefaults.size || fontDefaults.size;\n // if the chart is very narrow, chart.js sometimes calculates with a negative width of the canvas\n // this causes NaN for labelRotation and height\n if (isNaN(xAxis.labelRotation)) {\n xAxis.labelRotation = maxRotation;\n }\n xAxis.height = isNaN(xAxis.height) ? maxHeight : Math.min(xAxis.height, maxHeight);\n // the rotation (degrees), needs to be transformed to radians ((labelRotation / 180) * pi)\n let labelRotation = xAxis.labelRotation,\n // the label is a rectangle (labelWidth x fontSize) which is rotated\n // => height = sin(labelRotation) * labelLength + sin(90° - labelRotation) * fontSize\n // <=> labelLength = (height - sin(90° - labelRotation) * fontSize) / sin(labelRotation)\n maxLabelLength = (maxHeight - (fontSize * Math.sin(((90 - labelRotation) / 180) * Math.PI))) / Math.sin((labelRotation / 180) * Math.PI);\n // @ts-expect-error\n let labelSizes = xAxis._labelSizes || {},\n widest = labelSizes.widest || {};\n if (widest.width > maxLabelLength) {\n let measureText = xAxis.ctx.measureText.bind(xAxis.ctx);\n xAxis.ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label as string, maxLabelLength, measureText);\n });\n // reset label sizes, chart.js will recalculate them using the new truncated labels\n // @ts-expect-error\n xAxis._labelSizes = undefined;\n }\n }\n\n protected _fitYAxis(yAxis: Scale<CartesianScaleOptions>) {\n if (!yAxis) {\n return;\n }\n let padding = 0,\n tickLength = 0;\n if (yAxis.options && yAxis.options.ticks) {\n padding = yAxis.options.ticks.padding || 0;\n }\n if (yAxis.options && yAxis.options.grid) {\n tickLength = yAxis.options.grid.tickLength || 0;\n }\n // @ts-expect-error\n let labelSizes = yAxis._labelSizes || {},\n widest = labelSizes.widest || {};\n if (widest.width > yAxis.maxWidth - padding) {\n let horizontalSpace = yAxis.maxWidth - padding - tickLength,\n measureText = yAxis.ctx.measureText.bind(yAxis.ctx);\n yAxis.ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label as string, horizontalSpace, measureText);\n });\n }\n }\n\n protected _displayDatalabelsOnRadialChart(context: Context): boolean {\n let element = (context.chart.getDatasetMeta(context.datasetIndex).data[context.dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius']);\n // Compute the biggest circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // First compute a circle C1 that touches the straight boundaries of the sector/arc. Then compute a circle C2 that touches the inner and the outer radius.\n // The smaller one of these two circles is the biggest possible circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // circle C1:\n let midRadius = (element.outerRadius + element.innerRadius) / 2,\n // If the difference between the angles is greater than pi, it is no longer possible for a circle to be inside the sector/arc and touch both straight boundaries.\n angle = Math.min((element.endAngle - element.startAngle), Math.PI) / 2,\n radius1 = Math.abs(Math.sin(angle)) * midRadius,\n diameter1 = radius1 * 2,\n // circle C2:\n diameter2 = element.outerRadius - element.innerRadius;\n return Math.min(diameter1, diameter2) > this.minRadialChartDatalabelSpace;\n }\n\n protected _formatDatalabelsOnRadialChart(value: number, context: Context): string {\n let sum = this._computeSumOfVisibleElements(context),\n dataset = context.dataset,\n roundingError = 0,\n roundedResults = [];\n for (let i = 0; i < context.dataIndex + 1; i++) {\n let result = (dataset.data[i] as number) / sum * 100 - roundingError,\n roundedResult = Math.round(result);\n roundingError = roundedResult - result;\n roundedResults.push(roundedResult + '%');\n }\n return roundedResults[context.dataIndex];\n }\n\n protected _computeSumOfVisibleElements(context: Context): number {\n let dataset = context.dataset,\n chart = context.chart,\n sum = 0;\n for (let i = 0; i < dataset.data.length; i++) {\n if (chart.getDataVisibility(i)) {\n sum += dataset.data[i] as number;\n }\n }\n return sum;\n }\n\n protected _formatDatalabels(value: number | ScatterDataPoint | BubbleDataPoint, context: Context): string {\n let config = context.chart.config as ChartConfiguration;\n if (config.type === Chart.Type.BUBBLE) {\n return this._formatLabel((value as BubbleDataPoint).z);\n } else if (config.type === Chart.Type.SCATTER) {\n return strings.join(' / ', this._formatXLabel((value as ScatterDataPoint).x), this._formatYLabel((value as ScatterDataPoint).y));\n }\n return this._formatLabel(value as number);\n }\n\n protected _getBackgroundColorOfDataset(context: Context): Color {\n return context.dataset.backgroundColor as Color;\n }\n\n protected _adjustColors(config: ChartConfig) {\n this._adjustColorSchemeCssClass(config);\n this._adjustDatasetColors(config);\n this._adjustLegendColors(config);\n this._adjustScalesRColors(config);\n this._adjustScalesXYColors(config);\n this._adjustPluginColors(config);\n }\n\n protected _adjustColorSchemeCssClass(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n this.colorSchemeCssClass = colorSchemes.getCssClasses(config.options.colorScheme).join(' ');\n }\n\n protected _adjustDatasetColors(config: ChartConfig) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n let data = config.data,\n type = config.type,\n autoColor = config.options && config.options.autoColor,\n checkable = config.options && config.options.checkable,\n colorMode = config.options && config.options.colorMode,\n multipleColorsPerDataset = autoColor && (\n colorMode === ChartColorMode.DATASET\n ? false\n : colorMode === ChartColorMode.DATA\n ? true\n : scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)),\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n colors = $.extend(true, colors, this._computeDatasetColors(config, multipleColorsPerDataset));\n\n data.datasets.forEach((elem, idx) => {\n const getColor = colorsArray => {\n let candidate = colorsArray[idx];\n if (multipleColorsPerDataset && !Array.isArray(candidate)) {\n // we want multiple colors -> get the parent array\n candidate = colorsArray;\n }\n return candidate;\n };\n\n let backgroundColor = getColor(colors.backgroundColors),\n borderColor = getColor(colors.borderColors),\n hoverBackgroundColor = getColor(colors.hoverBackgroundColors),\n hoverBorderColor = getColor(colors.hoverBorderColors),\n legendColor = getColor(colors.legendColors),\n pointHoverBackgroundColor = getColor(colors.pointHoverColors);\n\n let setProperty = (identifier, value) => {\n if (typeof elem[identifier] === 'function') {\n return;\n }\n if (value && value.length) {\n elem[identifier] = Array.isArray(value) ? [...value] : value;\n }\n };\n setProperty('backgroundColor', backgroundColor);\n setProperty('borderColor', borderColor);\n setProperty('hoverBackgroundColor', hoverBackgroundColor);\n setProperty('hoverBorderColor', hoverBorderColor);\n setProperty('legendColor', legendColor);\n if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n setProperty('pointHoverBackgroundColor', pointHoverBackgroundColor);\n setProperty('pointBorderColor', this.firstOpaqueBackgroundColor);\n setProperty('pointHoverBorderColor', this.firstOpaqueBackgroundColor);\n }\n if (checkable) {\n const datasetLength = elem.data.length,\n ensureColorArray = color => {\n if (Array.isArray(color)) {\n return color;\n }\n return arrays.init(datasetLength, color);\n };\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.BUBBLE, Chart.Type.SCATTER) || (type === Chart.Type.BAR && (elem.type || Chart.Type.BAR) === Chart.Type.BAR)) {\n let uncheckedBackgroundColor = ensureColorArray(backgroundColor),\n uncheckedHoverBackgroundColor = ensureColorArray(hoverBackgroundColor),\n\n checkedBackgroundColor = ensureColorArray(getColor(colors.checkedBackgroundColors)),\n checkedHoverBackgroundColor = ensureColorArray(getColor(colors.checkedHoverBackgroundColors));\n\n setProperty('uncheckedBackgroundColor', uncheckedBackgroundColor);\n setProperty('uncheckedHoverBackgroundColor', uncheckedHoverBackgroundColor);\n setProperty('checkedBackgroundColor', checkedBackgroundColor);\n setProperty('checkedHoverBackgroundColor', checkedHoverBackgroundColor);\n\n setProperty('backgroundColor', elem.uncheckedBackgroundColor);\n setProperty('hoverBackgroundColor', elem.uncheckedHoverBackgroundColor);\n } else if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n let uncheckedPointBackgroundColor = ensureColorArray(pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = ensureColorArray(pointHoverBackgroundColor),\n\n checkedPointBackgroundColor = ensureColorArray(borderColor),\n checkedPointHoverBackgroundColor = ensureColorArray(hoverBorderColor || borderColor);\n\n setProperty('uncheckedPointBackgroundColor', uncheckedPointBackgroundColor);\n setProperty('uncheckedPointHoverBackgroundColor', uncheckedPointHoverBackgroundColor);\n setProperty('checkedPointBackgroundColor', checkedPointBackgroundColor);\n setProperty('checkedPointHoverBackgroundColor', checkedPointHoverBackgroundColor);\n\n setProperty('pointBackgroundColor', elem.uncheckedPointBackgroundColor);\n setProperty('pointHoverBackgroundColor', elem.uncheckedPointHoverBackgroundColor);\n\n let uncheckedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).radius || ChartJs.defaults.elements.point.radius),\n checkedPointRadius = arrays.init(datasetLength, (((config.options.elements || {}).point || {}).hoverRadius || ChartJs.defaults.elements.point.hoverRadius) as number - 1);\n setProperty('uncheckedPointRadius', uncheckedPointRadius);\n setProperty('checkedPointRadius', checkedPointRadius);\n\n setProperty('pointRadius', elem.uncheckedPointRadius);\n }\n }\n this._adjustDatasetBorderWidths(elem);\n });\n if (checkable) {\n this._checkItems(config);\n }\n }\n\n protected _computeDatasetColors(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.data || !config.type) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n colors: DatasetColors = {};\n\n if (config.options && config.options.autoColor) {\n colors = this._computeDatasetColorsAutoColor(config, multipleColorsPerDataset);\n } else {\n colors = this._computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset);\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let borderColor = this._computeBorderColor(type, 0);\n colors.borderColors = arrays.init(data.datasets.length, borderColor);\n colors.hoverBorderColors = colors.borderColors;\n }\n }\n\n return colors;\n }\n\n protected _computeDatasetColorsAutoColor(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.data || !config.type || !config.options || !config.options.autoColor) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n let types = [];\n if (multipleColorsPerDataset) {\n types = arrays.init((data.datasets.length && data.datasets[0].data.length) || 0, type);\n } else {\n data.datasets.forEach(dataset => types.push(dataset.type || type));\n }\n types.forEach((type, index) => {\n colors.backgroundColors.push(this._computeBackgroundColor(type, index, checkable || transparent));\n colors.borderColors.push(this._computeBorderColor(type, index));\n colors.hoverBackgroundColors.push(this._computeHoverBackgroundColor(type, index, checkable || transparent));\n colors.hoverBorderColors.push(this._computeHoverBorderColor(type, index));\n\n colors.checkedBackgroundColors.push(this._computeCheckedBackgroundColor(type, index, checkable));\n colors.checkedHoverBackgroundColors.push(this._computeCheckedHoverBackgroundColor(type, index, checkable));\n\n colors.legendColors.push(this._computeLegendColor(type, index));\n\n colors.pointHoverColors.push(this._computePointHoverColor(type, index));\n });\n\n return colors;\n }\n\n protected _computeBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors)], 'fill').fill;\n }\n\n protected _computeBorderColor(type: ChartType, index: number): string {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors)], 'stroke', additionalProperties).stroke;\n }\n\n protected _computeHoverBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover'], 'fill').fill;\n }\n\n protected _computeHoverBorderColor(type: ChartType, index: number): string {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors) + ' hover'], 'stroke', additionalProperties).stroke;\n }\n\n protected _computeCheckedBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' checked'], 'fill').fill;\n }\n\n protected _computeCheckedHoverBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover checked'], 'fill').fill;\n }\n\n protected _computeLegendColor(type: ChartType, index: number): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' legend'], 'fill').fill;\n }\n\n protected _computePointHoverColor(type: ChartType, index: number): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' point hover'], 'fill').fill;\n }\n\n protected _computeDatasetColorsChartValueGroups(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.type || !this.chart.data) {\n return {};\n }\n\n let type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors: DatasetColors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n this.chart.data.chartValueGroups.forEach(elem => {\n let backgroundOpacity = 1,\n hoverBackgroundOpacity = 1,\n hoverBackgroundDarker = 0.1,\n hoverBorderDarker = 0.1,\n\n uncheckedBackgroundOpacity = 0.2,\n uncheckedHoverBackgroundOpacity = 0.35,\n\n checkedBackgroundOpacity = 1,\n checkedBackgroundDarker = 0,\n checkedHoverBackgroundOpacity = 1,\n checkedHoverBackgroundDarker = 0.1;\n\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.POLAR_AREA) {\n backgroundOpacity = 0.7;\n hoverBackgroundOpacity = 0.85;\n\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf((elem.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n hoverBorderDarker = 0;\n\n checkedBackgroundOpacity = 0.2;\n checkedHoverBackgroundOpacity = 0.35;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n }\n\n const backgroundColors = [],\n borderColors = [],\n hoverBackgroundColors = [],\n hoverBorderColors = [],\n checkedBackgroundColors = [],\n checkedHoverBackgroundColors = [],\n legendColors = [],\n pointHoverColors = [];\n\n let colorHexValues = arrays.ensure(elem.colorHexValue);\n\n const datasetLength = arrays.length(elem.values as any[]);\n if (colorHexValues.length && colorHexValues.length < datasetLength) {\n // repeat colors for the whole dataset\n colorHexValues = arrays.init(datasetLength, null).map((elem, idx) => colorHexValues[idx % colorHexValues.length]);\n }\n\n colorHexValues.forEach(colorHexValue => {\n const rgbColor = styles.hexToRgb(colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\n backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n borderColors.push(adjustColor(1, 0));\n hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n legendColors.push(adjustColor(1, 0));\n pointHoverColors.push(adjustColor(1, 0));\n });\n\n colors.backgroundColors.push(backgroundColors);\n colors.borderColors.push(borderColors);\n colors.hoverBackgroundColors.push(hoverBackgroundColors);\n colors.hoverBorderColors.push(hoverBorderColors);\n colors.checkedBackgroundColors.push(checkedBackgroundColors);\n colors.checkedHoverBackgroundColors.push(checkedHoverBackgroundColors);\n colors.legendColors.push(legendColors);\n colors.pointHoverColors.push(pointHoverColors);\n });\n colors.datalabelColor = this._computeDatalabelColor(type);\n\n return colors;\n }\n\n protected _adjustColorOpacity(color: string, opacity = 1): string {\n if (!color || typeof color === 'function') {\n return color;\n }\n\n if (color.indexOf('rgb') === 0) {\n return this._adjustRgbColorOpacity(color, opacity);\n }\n if (color.indexOf('#') === 0) {\n return this._adjustHexColorOpacity(color, opacity);\n }\n return color;\n }\n\n protected _adjustRgbColorOpacity(rgbColor: string, opacity = 1): string {\n if (!rgbColor || rgbColor.indexOf('rgb') !== 0) {\n return rgbColor;\n }\n let rgba = styles.rgb(rgbColor);\n rgba.alpha = opacity;\n return 'rgba(' + rgba.red + ', ' + rgba.green + ', ' + rgba.blue + ', ' + rgba.alpha + ')';\n }\n\n protected _adjustHexColorOpacity(hexColor: string, opacity = 1): string {\n if (!hexColor || hexColor.indexOf('#') !== 0 || !(hexColor.length === 4 || hexColor.length === 5 || hexColor.length === 7 || hexColor.length === 9)) {\n return hexColor;\n }\n return this._adjustRgbColorOpacity(styles.hexToRgb(hexColor), opacity);\n }\n\n protected _adjustLegendColors(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n legend: {\n labels: {\n color: this._computeLabelColor(config.type)\n }\n }\n }\n });\n }\n\n protected _computeLabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label'], 'fill').fill;\n }\n\n protected _generateLegendLabels(chart: ChartJsChart): LegendItem[] {\n let config = chart.config,\n defaultTypeGenerateLabels;\n if (ChartJs.overrides[config.type] && ChartJs.overrides[config.type].plugins && ChartJs.overrides[config.type].plugins.legend && ChartJs.overrides[config.type].plugins.legend.labels) {\n defaultTypeGenerateLabels = ChartJs.overrides[config.type].plugins.legend.labels.generateLabels;\n }\n let defaultGenerateLabels = defaultTypeGenerateLabels || ChartJs.defaults.plugins.legend.labels.generateLabels;\n let labels = defaultGenerateLabels.call(chart, chart);\n if (this.removing) {\n return labels;\n }\n let data = config.data,\n measureText = chart.ctx.measureText.bind(chart.ctx),\n legend = chart.legend,\n legendProps = legend.getProps(['width', 'maxWidth']) as { width: number; maxWidth: number },\n legendLabelOptions = ((legend || {}).options || {}).labels || {} as LegendOptions<any>['labels'],\n boxWidth = legendLabelOptions.boxWidth || 0,\n padding = legendLabelOptions.padding || 0,\n horizontalSpace;\n if (scout.isOneOf(config.options.plugins.legend.position, Chart.Position.LEFT, Chart.Position.RIGHT)) {\n if (legendProps.maxWidth || legend.width) {\n horizontalSpace = Math.max((legendProps.maxWidth || legend.width) - boxWidth - 2 * padding, 0);\n }\n horizontalSpace = Math.min(250, horizontalSpace || 0, this.$canvas.cssWidth() / 3);\n\n } else {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() * 2 / 3);\n }\n labels.forEach((elem, idx) => {\n elem.text = strings.truncateText(elem.text, horizontalSpace, measureText);\n let dataset = data.datasets[idx],\n legendColor, borderColor, backgroundColor;\n if (dataset && scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n legendColor = arrays.ensure(dataset.legendColor)[0];\n borderColor = this._adjustColorOpacity(arrays.ensure(dataset.borderColor as string | string[])[0], 1);\n } else if (data.datasets.length && scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n dataset = data.datasets[0];\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[idx] : dataset.legendColor;\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[idx] : dataset.backgroundColor;\n backgroundColor = this._adjustColorOpacity(backgroundColor, 1);\n }\n if (objects.isFunction(legendColor)) {\n legendColor = legendColor.call(chart, idx);\n }\n let fillStyle = legendColor || backgroundColor || borderColor;\n if (!objects.isFunction(fillStyle)) {\n elem.fillStyle = fillStyle;\n elem.strokeStyle = fillStyle;\n }\n });\n return labels;\n }\n\n protected _adjustScalesRColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.r) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n labelBackdropColor = this._computeLabelBackdropColor(config.type),\n gridColor = this._computeGridColor(config.type),\n scaleTicksColor = this._computeScaleTicksColor(config.type);\n\n config.options.scales.r.ticks = $.extend(true, {}, config.options.scales.r.ticks, {\n color: scaleTicksColor,\n backdropColor: labelBackdropColor\n });\n config.options.scales.r.pointLabels = $.extend(true, {}, config.options.scales.r.pointLabels, {\n color: labelColor\n });\n config.options.scales.r.grid = $.extend(true, {}, config.options.scales.r.grid, {\n color: gridColor\n });\n }\n\n protected _computeLabelBackdropColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label-backdrop'], 'fill', {fill: this.firstOpaqueBackgroundColor}).fill;\n }\n\n protected _computeGridColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'grid'], 'fill').fill;\n }\n\n protected _computeScaleTicksColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'scale-ticks'], 'fill').fill;\n }\n\n protected _adjustScalesXYColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales) {\n return;\n }\n\n let axes = [];\n if (config.options.scales.x) {\n axes.push(config.options.scales.x);\n }\n if (config.options.scales.y) {\n axes.push(config.options.scales.y);\n }\n\n if (!axes.length) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n gridColor = this._computeGridColor(config.type),\n axisLabelColor = this._computeAxisLabelColor(config.type);\n\n axes.forEach(elem => {\n elem.grid = $.extend(true, {}, elem.grid, {\n color: gridColor\n });\n elem.ticks = $.extend(true, {}, elem.ticks, {\n color: labelColor\n });\n elem.title = $.extend(true, {}, elem.title, {\n color: axisLabelColor\n });\n });\n }\n\n protected _computeAxisLabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'axis-label'], 'fill').fill;\n }\n\n protected _adjustPluginColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins) {\n return;\n }\n\n this._adjustPluginsDatalabelColors(config);\n }\n\n protected _adjustPluginsDatalabelColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels) {\n return;\n }\n\n config.options.plugins.datalabels = $.extend(true, {}, config.options.plugins.datalabels, {\n color: this._computeDatalabelColor(config.type)\n });\n }\n\n protected _computeDatalabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'datalabel'], 'fill').fill;\n }\n\n protected _adjustClickHandler(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.clickable) {\n config.options.onClick = this._clickHandler;\n config.options.onHover = this._pointerHoverHandler;\n } else {\n config.options.onHover = this._hoverHandler;\n }\n\n if (!config.options.plugins || !config.options.plugins.legend) {\n return;\n }\n\n let legend = config.options.plugins.legend;\n if (legend.clickable) {\n legend.onClick = this._legendClickHandler;\n legend.onHover = this._legendPointerHoverHandler;\n legend.onLeave = this._legendPointerLeaveHandler;\n } else {\n legend.onClick = e => e.native.stopPropagation();\n legend.onHover = this._legendHoverHandler;\n legend.onLeave = this._legendLeaveHandler;\n }\n }\n\n protected _onClick(event: ChartEvent, items: ActiveElement[]) {\n if (!items.length) {\n return;\n }\n let relevantItem = this._selectRelevantItem(items);\n\n if (this._isMaxSegmentsExceeded(this.chartJs.config, relevantItem.index)) {\n return;\n }\n\n let itemIndex = relevantItem.index,\n datasetIndex = relevantItem.datasetIndex,\n clickObject: ClickObject = {\n datasetIndex: datasetIndex,\n dataIndex: itemIndex\n };\n if (scout.isOneOf(this.chartJs.config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n let data = this.chartJs.config.data.datasets[datasetIndex].data[itemIndex] as ScatterDataPoint | BubbleDataPoint;\n clickObject.xIndex = data.x;\n clickObject.yIndex = data.y;\n } else {\n clickObject.xIndex = itemIndex;\n }\n\n this.chart.handleValueClick(clickObject, event.native);\n }\n\n /**\n * Selects the most relevant item. Default is the first item.\n */\n protected _selectRelevantItem(items: ActiveElement[]): ActiveElement {\n let chartDatasets = this.chartJs.config.data.datasets;\n let relevantItem = items[0];\n\n if (this.chartJs.config.type === Chart.Type.BUBBLE) {\n // The smallest bubble, which is drawn in the foreground, is the most relevant item for the bubble chart.\n // If two bubbles are the same size, we choose the one which comes later in the array (bubble with array index n + 1 is draw in front of bubble with array index n)\n items.forEach(item => {\n if ((chartDatasets[item.datasetIndex].data[item.index] as BubbleDataPoint).z <= (chartDatasets[relevantItem.datasetIndex].data[relevantItem.index] as BubbleDataPoint).z) {\n relevantItem = item;\n }\n });\n }\n return relevantItem;\n }\n\n protected _onHover(event: ChartEvent, items: ActiveElement[]) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let config = this.chartJs.config,\n type = config.type;\n if (!scout.isOneOf(type, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR)) {\n return;\n }\n\n let update = false;\n if (this.resetDatasetAfterHover) {\n this._restoreBackgroundColor();\n this.resetDatasetAfterHover = false;\n update = true;\n }\n items.forEach(item => {\n let dataset = config.data.datasets[item.datasetIndex];\n if (scout.isOneOf((dataset.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n this._setHoverBackgroundColor(dataset);\n this.resetDatasetAfterHover = true;\n update = true;\n }\n });\n if (update) {\n this.refresh();\n }\n }\n\n protected _onHoverPointer(event: ChartEvent, items: ActiveElement[]) {\n this._onHover(event, items);\n if (!this.rendered || this.removing) {\n return;\n }\n if (items.length && !this._isMaxSegmentsExceeded(this.chartJs.config, items[0].index)) {\n this.$canvas.css('cursor', 'pointer');\n } else {\n this.$canvas.css('cursor', 'default');\n }\n }\n\n protected _onLegendClick(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let type = this.chartJs.config.type,\n defaultTypeLegendClick;\n if (ChartJs.overrides[type] && ChartJs.overrides[type].plugins && ChartJs.overrides[type].plugins.legend) {\n defaultTypeLegendClick = ChartJs.overrides[type].plugins.legend.onClick;\n }\n let defaultLegendClick = defaultTypeLegendClick || ChartJs.defaults.plugins.legend.onClick;\n defaultLegendClick.call(this.chartJs, e, legendItem, legend);\n this._onLegendLeave(e, legendItem, legend);\n this._onLegendHoverPointer(e, legendItem, legend);\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n }\n\n protected _onLegendHover(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n let index = legendItem.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = legendItem.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) > -1) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._setHoverBackgroundColor(dataset);\n this.refresh();\n }\n this._updateHoverStyle(index, true);\n this.chartJs.render();\n this.legendHoverDatasets.push(index);\n }\n\n protected _onLegendHoverPointer(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n this._onLegendHover(e, legendItem, legend);\n if (!this.rendered || this.removing) {\n return;\n }\n this.$canvas.css('cursor', 'pointer');\n }\n\n protected _onLegendLeave(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n let index = legendItem.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = legendItem.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) < 0) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._restoreBackgroundColor(dataset);\n this.refresh();\n }\n this._updateHoverStyle(index, false);\n this.chartJs.render();\n this.legendHoverDatasets.splice(this.legendHoverDatasets.indexOf(index), 1);\n }\n\n /**\n * Sets the hover background color as the datasets background color.\n * This little workaround is necessary for the line chart, which does not support a native hover effect.\n * The previous background color will be backed up on the dataset property \"backgroundColorBackup\"\n * and can be restored with {@link _restoreBackgroundColor}.\n */\n protected _setHoverBackgroundColor(dataset: ChartDataset) {\n if (!dataset) {\n return;\n }\n // backup the old background color first\n dataset.backgroundColorBackup = dataset.backgroundColor as Color;\n // overwrite the current background color with the hover color\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this._adjustDatasetBorderWidths(dataset);\n }\n\n /**\n * Restores the background color of a dataset or of all datasets,\n * if they were previously overwritten by {@link _setHoverBackgroundColor}.\n */\n protected _restoreBackgroundColor(dataset?: ChartDataset) {\n if (dataset) {\n dataset.backgroundColor = dataset.backgroundColorBackup || dataset.backgroundColor;\n delete dataset.backgroundColorBackup;\n this._adjustDatasetBorderWidths(dataset);\n } else {\n this.chartJs.config.data.datasets.forEach(dataset => this._restoreBackgroundColor(dataset));\n }\n }\n\n protected _onLegendLeavePointer(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n this._onLegendLeave(e, legendItem, legend);\n if (!this.rendered || this.removing) {\n return;\n }\n this.$canvas.css('cursor', 'default');\n }\n\n protected _updateHoverStyle(datasetIndex: number, enabled: boolean) {\n let config = this.chartJs.config,\n type = config.type,\n mode,\n elements = [],\n datasets = config.data.datasets,\n dataset = datasets ? datasets[datasetIndex] : null,\n datasetType = dataset ? dataset.type : null;\n if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.SCATTER) || datasetType === Chart.Type.LINE) {\n mode = 'point';\n } else {\n mode = 'dataset';\n }\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n this.chartJs.getSortedVisibleDatasetMetas().forEach((meta, index) => elements.push({\n element: meta.data[datasetIndex],\n datasetIndex: index,\n index: datasetIndex\n }));\n } else {\n this.chartJs.getDatasetMeta(datasetIndex).data.forEach((element, index) => elements.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }));\n }\n if (elements && elements.length) {\n this.chartJs.updateHoverStyle(elements, mode, enabled);\n }\n }\n\n protected _adjustResizeHandler(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.handleResize) {\n config.options.onResize = this._resizeHandler;\n }\n }\n\n protected _onResize(chart: ChartJsChart, size: { width: number; height: number }) {\n chart.update();\n this._adjustSize(chart.config, chart.chartArea, {isDatasetVisible: i => chart.getDatasetMeta(i).visible});\n }\n\n protected _adjustSize(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions) {\n chartArea = this._adjustBubbleSizes(config, chartArea, options);\n this._adjustGridMaxMin(config, chartArea, options);\n }\n\n protected _adjustBubbleSizes(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions): ChartArea {\n if (config.type !== Chart.Type.BUBBLE) {\n return chartArea;\n }\n\n let datasets = config.data.datasets;\n // Scale all bubbles so that the largest radius is equal to sizeOfLargestBubble and the smallest greater than or equal to minBubbleSize.\n // First reset all radii.\n datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n let maxMinR = this._computeMaxMinValue(config, datasets, {...options, identifier: 'r', exact: true}),\n maxR = maxMinR.maxValue,\n minR = maxMinR.minValue,\n // Compute a scalingFactor and an offset to get the new radius newR = r * scalingFactor + offset.\n bubbleScalingFactor = 1,\n bubbleRadiusOffset = 0,\n sizeOfLargestBubble = (config.options || {}).bubble ? config.options.bubble.sizeOfLargestBubble : 0,\n minBubbleSize = (config.options || {}).bubble ? config.options.bubble.minBubbleSize : 0;\n if (sizeOfLargestBubble) {\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom);\n sizeOfLargestBubble = Math.min(sizeOfLargestBubble, Math.floor(Math.min(width, height) / 6));\n if (maxR === 0) {\n // If maxR is equal to 0, all radii are equal to 0, therefore set bubbleRadiusOffset to sizeOfLargestBubble.\n bubbleRadiusOffset = sizeOfLargestBubble;\n } else if (minBubbleSize && sizeOfLargestBubble > minBubbleSize && (minR / maxR) < (minBubbleSize / sizeOfLargestBubble)) {\n // If minR/maxR is smaller than minBubbleSize/sizeOfLargestBubble, then it is not sufficient to scale all radii.\n\n // The scalingFactor and the result from the following two conditions:\n // (1) minBubbleSize = offset + scalingFactor * minR\n // (2) sizeOfLargestBubble = offset + scalingFactor * maxR\n\n // Therefore\n // (1*) offset = minBubbleSize - scalingFactor * minR\n // (2*) offset = sizeOfLargestBubble - scalingFactor * maxR\n\n // (1*) = (2*):\n // minBubbleSize - scalingFactor * minR = sizeOfLargestBubble - scalingFactor * maxR\n // <=> scalingFactor * maxR - scalingFactor * minR = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor * (maxR - minR) = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR)\n bubbleScalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR);\n bubbleRadiusOffset = minBubbleSize - bubbleScalingFactor * minR;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = sizeOfLargestBubble / maxR;\n }\n } else if (minBubbleSize && minBubbleSize > minR) {\n // sizeOfLargestBubble is not set\n if (minR === 0) {\n // If the smallest radius equals 0 scaling will have no effect.\n bubbleRadiusOffset = minBubbleSize;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = minBubbleSize / minR;\n }\n }\n datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!objects.isNullOrUndefined(data.r)) {\n data.r = data.r * bubbleScalingFactor + bubbleRadiusOffset;\n }\n }));\n\n if (!this.chartJs) {\n return chartArea;\n }\n\n // chartJs sets the chartArea depending on the bubble sizes and subtracts the max radius from the height / width.\n // this results in a different grid layout, and we need to refresh before the next calculations.\n this.refresh();\n return this.chartJs.chartArea;\n }\n\n protected _computeMaxMinValue(config: ChartConfig, datasets: ChartDataset[], options?: ChartJsRendererComputeMaxMinValueOptions): Boundary {\n if (!datasets) {\n return;\n }\n\n const {identifier, exact, boundRange, padding, space, offset} = options || {};\n const isDatasetVisible = options?.isDatasetVisible || (i => true);\n\n // do not use 0 as default as the max-min-range might not include 0, e.g. all values are greater than 10.000\n let maxValue, minValue;\n if (config.type === Chart.Type.SCATTER && identifier === 'r') {\n // do not move the grid boundaries because of the radii of the points (would look weird)\n maxValue = 0;\n minValue = 0;\n } else {\n // check if chart is stacked\n const sums = [];\n let calculateSum = false;\n if (scout.isOneOf(config.type, Chart.Type.LINE, Chart.Type.BAR)) {\n calculateSum = !!config.options.scales.y.stacked;\n } else if (config.type === Chart.Type.BAR_HORIZONTAL) {\n calculateSum = !!config.options.scales.x.stacked;\n }\n\n const extractValue = (data: (number | [number, number] | ChartJsPoint | BubbleDataPoint)) => {\n if (identifier) {\n return data[identifier];\n }\n return data;\n };\n\n for (let i = 0; i < datasets.length; i++) {\n // do not consider hidden datasets\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA) && !isDatasetVisible(i)) {\n continue;\n }\n\n for (let j = 0; j < datasets[i].data.length; j++) {\n const value = extractValue(datasets[i].data[j]);\n\n if (calculateSum) {\n if (!sums[j]) {\n sums[j] = 0;\n }\n sums[j] += value;\n\n continue;\n }\n\n if (isNaN(maxValue)) {\n maxValue = value;\n } else {\n maxValue = Math.max(value, maxValue);\n }\n if (isNaN(minValue)) {\n minValue = value;\n } else {\n minValue = Math.min(value, minValue);\n }\n }\n }\n\n // update maxValue/minValue with max/min sum\n if (calculateSum) {\n maxValue = Math.max(arrays.max(sums), 0);\n minValue = Math.min(arrays.min(sums), 0);\n }\n }\n\n if (isNaN(maxValue)) {\n maxValue = 0;\n }\n if (isNaN(minValue)) {\n minValue = 0;\n }\n\n let adjust = 0,\n maxBoundary = maxValue,\n minBoundary = minValue;\n\n if (!exact) {\n if (boundRange && Math.sign(minValue) === Math.sign(maxValue)) {\n adjust = Math.floor(minValue);\n }\n maxBoundary = this._calculateBoundary(maxValue - adjust, Math.ceil, Math.floor);\n minBoundary = this._calculateBoundary(minValue - adjust, Math.floor, Math.ceil);\n }\n\n if (padding && space && space > 2 * padding) {\n let valuePerPixel = (maxValue - minValue) / (space - 2 * padding),\n paddingValue = valuePerPixel * padding;\n\n // When there are only integers and an offset, the offset will cover at least a span of 0.5 (half the space between two ticks, stepSize = 1).\n // Therefore, a paddingValue between 0 and 0.5 can be eliminated.\n if (offset && this.onlyIntegers && 0 < paddingValue && paddingValue <= 0.5) {\n paddingValue = 0;\n }\n\n maxBoundary = Math.max(maxBoundary, maxValue - adjust + paddingValue);\n minBoundary = Math.min(minBoundary, minValue - adjust - paddingValue);\n }\n\n if (!exact) {\n return {\n maxValue: maxBoundary + adjust,\n minValue: minBoundary + adjust\n };\n }\n\n return {\n maxValue: maxBoundary,\n minValue: minBoundary\n };\n }\n\n protected _calculateBoundary(value: number, roundingFunctionPositive: (number) => number, roundingFunctionNegative: (number) => number): number {\n let roundingFunction = roundingFunctionPositive;\n let changeValueSign = false;\n if (value < 0) {\n changeValueSign = true;\n value = value * (-1);\n roundingFunction = roundingFunctionNegative;\n }\n value = this._calculateBoundaryPositive(value, roundingFunction);\n if (changeValueSign) {\n value = value * (-1);\n }\n return value;\n }\n\n protected _calculateBoundaryPositive(value: number, roundingFunction: (number) => number): number {\n if (!(value > 0) || !roundingFunction) {\n return value;\n }\n // example: the value 32689 should be rounded to 30000 for the roundingFunction Math.floor or 35000 for Math.ceil or Math.round\n\n // first calculate the exponent p of the largest 1ep smaller than the given value\n // example: the largest 1ep smaller than the value 32689 is 10000 = 1e4 and therefore p = 4\n let p = Math.floor(Math.log(value) / Math.LN10);\n // divide by 5e(p-1), round and multiply with 5e(p-1) to round the value in 5e(p-1) steps\n // example: the value is now divided by 5e(p-1) which means 32689 / 5e(4-1) = 32689 / 5e3 = 32689 / 5000 = 6.5378\n // this result is now rounded (Math.floor gives 6, Math.ceil and Math.round gives 7) and multiplied again with 5000 which results in 30000 or 35000 respectively\n if (p < 0) {\n value = roundingFunction(value * Math.pow(10, Math.abs(p)) / 5) * 5 / Math.pow(10, Math.abs(p));\n } else {\n value = roundingFunction(value / (5 * Math.pow(10, p - 1))) * 5 * Math.pow(10, p - 1);\n }\n return value;\n }\n\n protected _adjustGridMaxMin(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions) {\n if (!config || !config.type || !config.options || !config.options.adjustGridMaxMin || !config.options.scales || !chartArea) {\n return;\n }\n\n let type = config.type;\n if (!scout.isOneOf(type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n return;\n }\n\n let scales = config.options.scales,\n xAxis = scales.x,\n yAxis = scales.y,\n rAxis = scales.r,\n minSpaceBetweenXTicks = xAxis ? xAxis.minSpaceBetweenTicks : 1,\n minSpaceBetweenYTicks = yAxis ? yAxis.minSpaceBetweenTicks : 1;\n\n if (rAxis) {\n minSpaceBetweenXTicks = rAxis.minSpaceBetweenTicks;\n minSpaceBetweenYTicks = rAxis.minSpaceBetweenTicks;\n }\n\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom),\n maxXTicks = Math.max(Math.floor(width / minSpaceBetweenXTicks) + 1, 3),\n maxYTicks = Math.max(Math.floor(height / minSpaceBetweenYTicks) + 1, 3);\n\n let yBoundaries = this._computeYBoundaries(config, {...options, space: height}),\n yBoundary = yBoundaries.yBoundary,\n yBoundaryDiffType = yBoundaries.yBoundaryDiffType;\n\n if (rAxis) {\n this._adjustAxisMaxMin(rAxis, Math.ceil(Math.min(maxXTicks, maxYTicks) / 2), yBoundary);\n return;\n }\n\n if (yBoundaryDiffType) {\n this._adjustAxisMaxMin(yAxis, maxYTicks, yBoundary);\n this._adjustAxisMaxMin(scales.yDiffType, maxYTicks, yBoundaryDiffType);\n } else if (this._isHorizontalBar(config)) {\n this._adjustAxisMaxMin(xAxis, maxXTicks, yBoundary);\n } else {\n this._adjustAxisMaxMin(yAxis, maxYTicks, yBoundary);\n }\n\n if (!scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n return;\n }\n\n let xBoundary = this._computeXBoundaryPointElement(config, {...options, space: width});\n this._adjustAxisMaxMin(xAxis, maxXTicks, xBoundary);\n }\n\n protected _computeBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryWithIdentifierOptions, 'identifier' | 'space'>): Boundary {\n const {identifier, space} = options;\n if (!config || !config.type || !scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER) || !config.data || !config.options || !config.options.scales || !(identifier === 'x' || identifier === 'y') || !space) {\n return;\n }\n\n let datasets = config.data.datasets,\n axis = config.options.scales[identifier],\n offset = axis && axis.offset,\n labelMap = config.options[identifier + 'LabelMap'],\n boundary;\n\n let maxR = this._computeMaxMinValue(config, datasets, {...options, identifier: 'r', exact: true, space: null}).maxValue,\n padding = maxR;\n if (config.options.elements && config.options.elements.point && config.options.elements.point.hoverRadius) {\n padding = padding + (config.options.elements.point.hoverRadius as number);\n }\n\n boundary = this._computeMaxMinValue(config, datasets, {...options, exact: !!labelMap, boundRange: true, padding, offset});\n if (labelMap) {\n // if we have a labelMap compare the min and max key of the labelMap and the boundary.\n // in order to show all data and labels we have to take lowest and highest value.\n const keys = Object.keys(labelMap).map(Number).filter(isFinite);\n if (keys.length) {\n boundary.minValue = Math.min(boundary.minValue, Math.min(...keys));\n boundary.maxValue = Math.max(boundary.maxValue, Math.max(...keys));\n }\n\n boundary.maxValue = Math.ceil(boundary.maxValue);\n boundary.minValue = Math.floor(boundary.minValue);\n }\n return boundary;\n }\n\n protected _computeXBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): Boundary {\n return this._computeBoundaryPointElement(config, {...options, identifier: 'x'});\n }\n\n protected _computeYBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): Boundary {\n return this._computeBoundaryPointElement(config, {...options, identifier: 'y'});\n }\n\n protected _computeYBoundaries(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): { yBoundary?: Boundary; yBoundaryDiffType?: Boundary } {\n if (!config || !config.type) {\n return {};\n }\n\n let type = config.type,\n yBoundary,\n yBoundaryDiffType;\n\n if (scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n yBoundary = this._computeYBoundaryPointElement(config, options);\n } else {\n let datasets = [],\n datasetsDiffType = [];\n if (config.data && config.data.datasets) {\n config.data.datasets.forEach(dataset => {\n if (dataset.type && dataset.type !== type) {\n datasetsDiffType.push(dataset);\n } else {\n datasets.push(dataset);\n }\n });\n }\n\n yBoundary = this._computeMaxMinValue(config, datasets, {...options, space: null});\n if (yBoundary.maxValue === 0 && yBoundary.minValue === 0) {\n // Max and min value are both 0 if the values in the dataset are all 0.\n // The default behaviour would lead to a scale from 0 to 1 without any ticks between.\n // (The option \"onlyIntegers\" is true (zeros are integers), which prevents any ticks between 0 and 1).\n // With setting the max value to 5 we achieve a nice looking scale with some ticks with integer values between.\n yBoundary.maxValue = 5;\n }\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(config, datasetsDiffType, {...options, space: null});\n // Note: we do not adjust the yBoundary of the different type in the case of max and min value are both 0,\n // because the secondary scale is never shown alone and therefore does not to have to look nicely.\n let yBoundaryRange = yBoundary.maxValue - yBoundary.minValue,\n yBoundaryRangeDiffType = yBoundaryDiffType.maxValue - yBoundaryDiffType.minValue;\n if (yBoundaryRange && yBoundaryRangeDiffType && (yBoundaryRange / yBoundaryRangeDiffType > 10 || yBoundaryRangeDiffType / yBoundaryRange > 10)) {\n this._adjustYAxisDiffType(config, datasets, datasetsDiffType);\n }\n }\n }\n\n return {\n yBoundary: yBoundary,\n yBoundaryDiffType: yBoundaryDiffType\n };\n }\n\n protected _adjustYAxisDiffType(config: ChartConfig, datasets: ChartDataset[], datasetsDiffType: ChartDataset[]) {\n if (!config || !config.type || !datasets || !datasets.length || !datasetsDiffType || !datasetsDiffType.length) {\n return;\n }\n\n if (!config.options || !config.options.scales || !config.options.scales.y || config.options.scales.yDiffType) {\n return;\n }\n\n let type = config.type,\n options = config.options,\n scales = options.scales,\n yAxis = scales.y,\n yAxisDiffType = $.extend(true, {}, yAxis);\n scales.yDiffType = yAxisDiffType;\n\n if (config.data && config.data.datasets && config.data.datasets.length && config.data.datasets[0].type && config.data.datasets[0].type !== type) {\n yAxisDiffType.position = Chart.Position.LEFT;\n yAxis.position = Chart.Position.RIGHT;\n yAxis.grid.drawOnChartArea = false;\n } else {\n yAxis.position = Chart.Position.LEFT;\n yAxisDiffType.position = Chart.Position.RIGHT;\n yAxisDiffType.grid.drawOnChartArea = false;\n }\n\n yAxis.border.display = true;\n yAxis.grid.drawTicks = true;\n yAxisDiffType.border.display = true;\n yAxisDiffType.grid.drawTicks = true;\n\n let yAxisType = (datasets[0].type || type),\n yAxisDiffTypeType = (datasetsDiffType[0].type || type),\n yAxisTypeLabel = this.chart.session.text('ui.' + yAxisType),\n yAxisDiffTypeTypeLabel = this.chart.session.text('ui.' + yAxisDiffTypeType),\n yAxisScaleLabel = options.scaleLabelByTypeMap ? options.scaleLabelByTypeMap[yAxisType] : null,\n yAxisDiffTypeScaleLabel = options.scaleLabelByTypeMap ? options.scaleLabelByTypeMap[yAxisDiffTypeType] : null;\n\n yAxis.title.display = true;\n yAxis.title.text = yAxisScaleLabel ? yAxisScaleLabel + ' (' + yAxisTypeLabel + ')' : yAxisTypeLabel;\n yAxisDiffType.title.display = true;\n yAxisDiffType.title.text = yAxisDiffTypeScaleLabel ? yAxisDiffTypeScaleLabel + ' (' + yAxisDiffTypeTypeLabel + ')' : yAxisDiffTypeTypeLabel;\n\n datasets.forEach(dataset => {\n dataset.yAxisID = 'y';\n });\n datasetsDiffType.forEach(dataset => {\n dataset.yAxisID = 'yDiffType';\n });\n }\n\n protected _adjustAxisMaxMin(axis: AxisWithMaxMin, maxTicks: number, maxMinValue: Boundary) {\n if (!axis) {\n return;\n }\n\n let maxRangeBetweenTwoTicks = 1;\n\n axis.ticks = $.extend(true, {}, axis.ticks, {\n maxTicksLimit: maxTicks\n });\n if (maxMinValue) {\n axis.suggestedMax = maxMinValue.maxValue;\n axis.suggestedMin = maxMinValue.minValue;\n\n maxRangeBetweenTwoTicks = (maxMinValue.maxValue - maxMinValue.minValue) / (maxTicks - 1);\n }\n axis.ticks.stepSize = this.onlyIntegers && maxRangeBetweenTwoTicks < 1 ? 1 : undefined;\n }\n\n protected override _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.rendered && !this.removing) {\n this.removing = true;\n this.chartJs.destroy();\n this.chartJs = null;\n this.$canvas.remove();\n this.$canvas = null;\n }\n super._remove(afterRemoveFunc);\n this.removing = false;\n }\n}\n\nexport type LabelFormatter = (label: number | string, scale?: Scale) => string;\nexport type AxisFitter = (axis: Scale<CartesianScaleOptions>) => void;\nexport type DatalabelsDisplayHandler = (context: Context) => boolean;\nexport type DatalabelsFormatter = (value: number | ScatterDataPoint | BubbleDataPoint, context: Context) => string;\nexport type DatalabelBackgroundColorHandler = (context: Context) => Color;\nexport type RadialChartDatalabelsFormatter = (value: number, context: Context) => string;\nexport type LegendLabelGenerator = (chart: ChartJsChart) => LegendItem[];\nexport type ChartEventHandler = (event: ChartEvent, items: ActiveElement[]) => void;\nexport type LegendEventHandler = (e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) => void;\nexport type ResizeHandler = (chart: ChartJsChart | ChartJs, size: { width: number; height: number }) => void;\nexport type TooltipTitleGenerator = (tooltipItems: TooltipItem<any>[]) => string | string[] | void;\nexport type TooltipItemsGenerator = (tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator) => string;\nexport type TooltipLabelGenerator = (tooltipItem: TooltipItem<any>) => string | string[] | void;\nexport type TooltipLabelValueGenerator = (tooltipItem: TooltipItem<any>) => string | { x: string; y: string };\nexport type TooltipLabelColorGenerator = (tooltipItem: TooltipItem<any>) => TooltipLabelStyle | void;\nexport type TooltipRenderer = (context: { chart: ChartJs; tooltip: TooltipModel<any> }) => void;\nexport type ChartJsRendererAdjustSizeOptions = {\n isDatasetVisible?: (number) => boolean;\n};\nexport type ChartJsRendererComputeBoundaryOptions = ChartJsRendererAdjustSizeOptions & {\n space?: number;\n};\nexport type ChartJsRendererComputeBoundaryWithIdentifierOptions = ChartJsRendererComputeBoundaryOptions & {\n identifier?: string;\n};\nexport type ChartJsRendererComputeMaxMinValueOptions = ChartJsRendererComputeBoundaryWithIdentifierOptions & {\n exact?: boolean;\n boundRange?: boolean;\n padding?: number;\n offset?: boolean;\n};\n\nexport type DatasetColors = {\n backgroundColors?: (string | string[])[];\n borderColors?: (string | string[])[];\n hoverBackgroundColors?: (string | string[])[];\n hoverBorderColors?: (string | string[])[];\n checkedBackgroundColors?: (string | string[])[];\n checkedHoverBackgroundColors?: (string | string[])[];\n legendColors?: (string | string[])[];\n pointHoverColors?: (string | string[])[];\n datalabelColor?: string;\n};\n\nexport type Boundary = { maxValue: number; minValue: number };\n\nexport type AxisWithMaxMin = (CartesianChartScale | RadialChartScale) & {\n ticks?: (CartesianChartScale | RadialChartScale)['ticks'] & {\n stepSize?: number;\n };\n};\n\n// extend chart.js\n\nexport type ChartJsChart = Omit<ChartJs, 'config'> & {\n config: ChartConfig;\n legend?: LegendElement<any>;\n};\n\ndeclare module 'chart.js' {\n interface ChartData<TType extends ChartJsType = ChartJsType, TData = DefaultDataPoint<TType>, TLabel = unknown> {\n maxSegmentsExceeded?: boolean;\n }\n\n interface ChartDatasetProperties<TType extends ChartJsType, TData> {\n datasetId?: string;\n yAxisID?: 'y' | 'yDiffType';\n\n pointBackgroundColor?: Scriptable<Color, ScriptableContext<TType>>;\n pointHoverBackgroundColor?: Scriptable<Color, ScriptableContext<TType>>;\n pointRadius?: Scriptable<number, ScriptableContext<TType>>;\n legendColor?: Scriptable<Color, number>;\n\n checkedBackgroundColor?: Color;\n checkedHoverBackgroundColor?: Color;\n checkedPointBackgroundColor?: Color;\n checkedPointHoverBackgroundColor?: Color;\n checkedPointRadius?: number;\n\n uncheckedBackgroundColor?: Color;\n uncheckedHoverBackgroundColor?: Color;\n uncheckedPointBackgroundColor?: Color;\n uncheckedPointHoverBackgroundColor?: Color;\n uncheckedPointRadius?: number;\n\n backgroundColorBackup?: Color;\n }\n\n interface BubbleDataPoint {\n z: number;\n }\n\n interface TooltipOptions<TType extends ChartJsType = ChartJsType> {\n cssClass?: string;\n }\n\n interface TooltipCallbacks<TType extends ChartJsType, Model = TooltipModel<TType>, Item = TooltipItem<TType>> {\n items: TooltipItemsGenerator;\n labelValue: TooltipLabelValueGenerator;\n }\n}\n","/*\n * Copyright (c) 2010, 2024 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractLayout, Tile} from '@eclipse-scout/core';\nimport {Chart, ChartJsRenderer, UpdateChartOptions} from '../index';\n\nexport class ChartLayout extends AbstractLayout {\n chart: Chart;\n\n constructor(chart: Chart) {\n super();\n this.chart = chart;\n }\n\n override layout($container: JQuery) {\n let opts: UpdateChartOptions = {\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n };\n // Don't request animations when the session is not ready or the chart was already updated once\n if (!this.chart.session.ready || this.chart._updatedOnce) {\n opts.requestAnimation = false;\n }\n // Don't debounce while session is not yet ready. Otherwise, it might happen that the area to layout is not\n // attached anymore because some other view tab is in front when the setTimeout() functions is finally called.\n if (!this.chart.session.ready) {\n opts.debounce = false;\n }\n // Don't debounce if the chart is inside a tile that is being dragged so the state is correct immediately when it is dropped\n if (this.chart.findParent(Tile)?.$container.hasClass('dragged')) {\n opts.debounce = false;\n }\n // Ensure chart has the correct size right after the layout.\n if (this.chart.chartRenderer instanceof ChartJsRenderer) {\n this.chart.chartRenderer.chartJs?.resize();\n }\n this.chart.updateChart(opts);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {WidgetModel} from '@eclipse-scout/core';\nimport {ChartConfig, ChartData, ClickObject} from './Chart';\n\nexport interface ChartModel extends WidgetModel {\n data?: ChartData;\n config?: ChartConfig;\n /**\n * Default is [].\n */\n checkedItems?: ClickObject[];\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, arrays, objects, scout} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\nimport $ from 'jquery';\nimport {UpdateChartOptions} from './Chart';\n\nexport class FulfillmentChartRenderer extends AbstractSvgChartRenderer {\n animationTriggered: boolean;\n segmentSelectorForAnimation: string;\n r: number;\n fullR: number;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.animationTriggered = false;\n this.segmentSelectorForAnimation = '.fulfillment-chart';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n fulfillment: {\n startValue: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartValueGroups = this.chart.data.chartValueGroups;\n if (chartValueGroups.length !== 2 ||\n chartValueGroups[0].values.length !== 1 ||\n chartValueGroups[1].values.length !== 1) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n // Calculate percentage\n let chartData = this.chart.data;\n let value = chartData.chartValueGroups[0].values[0] as number;\n let total = chartData.chartValueGroups[1].values[0] as number;\n\n this.fullR = (Math.min(this.chartBox.height, this.chartBox.width) / 2) - 2;\n\n this._renderInnerCircle();\n this._renderPercentage(value, total);\n }\n\n protected _renderPercentage(value: number, total: number) {\n // arc segment\n let arcClass = 'fulfillment-chart',\n color = arrays.ensure(this.chart.data.chartValueGroups[0].colorHexValue)[0],\n chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n\n if (this.chart.config.options.autoColor) {\n arcClass += ' auto-color';\n } else if (chartGroupCss) {\n arcClass += ' ' + chartGroupCss;\n }\n\n let startValue = scout.nvl(this.chart.config.options.fulfillment.startValue, 0);\n let end = 0;\n let lastEnd = 0;\n if (total) {\n // use slightly less than 1.0 as max value because otherwise, the SVG element would not be drawn correctly.\n end = Math.min(value / total, 0.999999);\n lastEnd = Math.min(startValue / total, 0.999999);\n }\n this.r = this.fullR;\n\n let that = this;\n let tweenInFunc = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * fx.pos, lastEnd + (end - lastEnd) * fx.pos));\n };\n\n let $arc = this.$svg.appendSVG('path', arcClass)\n .data('animation-start', 0)\n .data('animation-end', end);\n\n let radius2 = (this.fullR / 8) * 6.7;\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle3', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n\n // Label\n let percentage = (total ? Math.round((value / total) * 100) : 0);\n let $label = this.$svg.appendSVG('text', 'fulfillment-chart-label ')\n .attr('x', this.chartBox.mX())\n .attr('y', this.chartBox.mY())\n .css('font-size', (this.fullR / 2) + 'px') // font of label in center relative to circle radius\n .attr('dy', '0.3em') // workaround for 'dominant-baseline: central' which is not supported in IE\n .attrXLINK('href', '#InnerCircle')\n .text(percentage + '%');\n\n if (this.chart.config.options.clickable) {\n $arc.on('click', this._createClickObject(null, null), e => this.chart.handleValueClick(e.data));\n }\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $arc.attr('fill', color);\n }\n if (this.animationDuration) {\n $arc\n .attr('d', this.pathSegment(0, lastEnd))\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenInFunc, this.animationDuration));\n\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n } else {\n $arc.attr('d', this.pathSegment(0, end));\n }\n\n aria.description(this.$svg, this.session.text('ui.FulfillmentChartAriaDescription', percentage));\n }\n\n pathSegment(start: number, end: number): string {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (this.chartBox.mX() + this.r * Math.sin(s)) + ',' + (this.chartBox.mY() - this.r * Math.cos(s));\n pathString += 'A' + this.r + ', ' + this.r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ',' + (this.chartBox.mY() - this.r * Math.cos(e));\n pathString += 'L' + this.chartBox.mX() + ',' + this.chartBox.mY() + 'Z';\n\n return pathString;\n }\n\n protected _renderCirclePath(cssClass: string, id: string, radius: number): JQuery<SVGElement> {\n let chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n let color = arrays.ensure(this.chart.data.chartValueGroups[1].colorHexValue)[0];\n\n if (this.chart.config.options.autoColor) {\n cssClass += ' auto-color';\n } else if (chartGroupCss) {\n cssClass += ' ' + chartGroupCss;\n }\n\n let radius2 = radius * 2;\n let $path = this.$svg.appendSVG('path', cssClass)\n .attr('id', id)\n .attr('d', 'M ' + this.chartBox.mX() + ' ' + this.chartBox.mY() +\n ' m 0, ' + (-radius) +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + radius2 +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + (-radius2));\n\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $path\n .attr('fill', color)\n .attr('stroke', color);\n }\n\n return $path;\n }\n\n protected _renderInnerCircle() {\n let radius = (this.fullR / 8) * 7.5,\n radius2 = (this.fullR / 8) * 7.2;\n\n this._renderCirclePath('fulfillment-chart-inner-circle', 'InnerCircle', radius);\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle2', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n }\n\n /**\n * Do not animate the removal of the chart if the chart data has been updated and the startValue option is set.\n * If startValue is not set use default implementation.\n */\n override shouldAnimateRemoveOnUpdate(opts: UpdateChartOptions): boolean {\n let startValue = objects.optProperty(this.chart, 'config', 'options', 'fulfillment', 'startValue');\n if (!objects.isNullOrUndefined(startValue)) {\n return false;\n }\n\n return super.shouldAnimateRemoveOnUpdate(opts);\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n let that = this;\n let tweenOut = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * (1 - fx.pos), end * (1 - fx.pos)));\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {arrays, objects, strings} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup, ClickObject} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\n\nexport class SalesfunnelChartRenderer extends AbstractSvgChartRenderer {\n segmentSelectorForAnimation: string;\n widthThresholdMedium: number;\n widthThresholdSmall: number;\n\n /**\n * Constants for \"normalized mode\"\n * Width of a bar is calculated by multiplying this value with the previous bar's width\n */\n barDeltaPercentage: number;\n\n /**\n * Factor to be multiplied with the last bar's width. This will create a funnel effect, because\n * the last bar is considerably smaller than the other bars.\n */\n lastBarAdditionalPercentage: number;\n\n /** Percentage of the total width the last bar always has (delta might get smaller due to this constraint). */\n lastBarMinWidthPercentage: number;\n\n paddingBetweenLabel: number;\n dataAnalyzeResult: AnalyzedData;\n barHeight: number;\n barAreaWidth: number;\n centerX: number;\n animationTriggered: boolean;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.salesfunnel-chart-bar';\n this.widthThresholdMedium = 400;\n this.widthThresholdSmall = 200;\n this.barDeltaPercentage = 0.95;\n this.lastBarAdditionalPercentage = 0.7;\n this.lastBarMinWidthPercentage = 0.4;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n salesfunnel: {\n normalized: undefined,\n calcConversionRate: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length !== chartData.chartValueGroups.length ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0 ||\n chartConfig.options.salesfunnel.normalized === undefined ||\n chartConfig.options.salesfunnel.calcConversionRate === undefined) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n let chartData = this.chart.data,\n bars = chartData.chartValueGroups.length;\n\n let conversionRateWidth = this._dynamicConversionRateWidth();\n this.paddingBetweenLabel = 20;\n this.dataAnalyzeResult = this._analyzeData(chartData.chartValueGroups);\n this.barHeight = this.chartBox.height / bars;\n this.barAreaWidth = this.chartBox.width -\n this.dataAnalyzeResult.maxLengthFirstValueRow -\n (this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount) -\n this.dataAnalyzeResult.maxLengthSecondValueRow -\n conversionRateWidth;\n this.centerX = this.barAreaWidth / 2;\n\n if (this.chart.config.options.salesfunnel.normalized) {\n this._renderBarsNormalized(chartData.chartValueGroups);\n } else {\n this._renderBarsAccordingToValues(chartData.chartValueGroups);\n }\n\n this._addClipping('salesfunnel-chart-bar');\n }\n\n protected _renderBarsNormalized(chartValueGroups: ChartValueGroup[]) {\n let barCount = chartValueGroups.length;\n let startPointX = this.barAreaWidth +\n this.dataAnalyzeResult.maxLengthFirstValueRow +\n this.dataAnalyzeResult.maxLengthSecondValueRow +\n (this.paddingBetweenLabel * (this.dataAnalyzeResult.labelCount + 1));\n\n let delta = this.barAreaWidth * (1 - this.barDeltaPercentage);\n let minLastWidth = this.barAreaWidth * this.lastBarMinWidthPercentage;\n let secondLastWidth = minLastWidth / this.lastBarAdditionalPercentage;\n delta = Math.min(delta, (this.barAreaWidth - secondLastWidth) / (barCount - 1));\n\n for (let i = 0; i < barCount; i++) {\n let width = this.barAreaWidth - (i * delta),\n barLabel = chartValueGroups[i].groupName,\n widthBottom = this.barAreaWidth - ((i + 1) * delta),\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: widthBottom,\n cssClass: 'salesfunnel-chart-bar',\n fill: arrays.ensure(chartValueGroups[i].colorHexValue)[0],\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n // Adjust last widths to look like funnel.\n if (i === barCount - 1) {\n renderPolyOptions.width = renderPolyOptions.width * this.lastBarAdditionalPercentage;\n renderPolyOptions.widthBottom = renderPolyOptions.widthBottom * this.lastBarAdditionalPercentage;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0] as number, false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1] as number, true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.options.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0] as number, chartValueGroups[i].values[0] as number));\n }\n }\n }\n }\n\n protected _renderLabel(label: number, secondLabel: boolean, barIndexFromTop: number) {\n if (label === null) {\n return;\n }\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n labelOffset = this.dataAnalyzeResult.maxLengthFirstValueRow + (secondLabel ? this.dataAnalyzeResult.maxLengthSecondValueRow : 0),\n labelIndex = secondLabel ? 2 : 1,\n x = this.barAreaWidth + labelOffset + (labelIndex * this.paddingBetweenLabel),\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', x)\n .attr('y', y)\n .text(this.session.locale.decimalFormat.format(label));\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n if (this.chart.config.options.plugins.tooltip.enabled && this.chart.data.axes.length > 0) {\n let desc = this.chart.data.axes[barIndexFromTop][secondLabel ? 1 : 0].label,\n textBounds = this._measureText('' + label, labelClass);\n this._renderWireLabels(desc, $label, x - textBounds.width / 2, y - textBounds.height);\n }\n }\n\n protected _renderWireLabels(label: string, $text: JQuery<SVGElement>, x1: number, y1: number) {\n let legendPositions = {\n x1: x1,\n x2: x1 - 10,\n y1: y1,\n y2: y1 - 10,\n v: -1,\n h: -1\n } as LegendPositions;\n // calculate opening direction\n let labelPositionFunc = (labelWidth, labelHeight) => {\n if (legendPositions.y2 - labelHeight < 0) {\n legendPositions.v = 1;\n legendPositions.y1 = legendPositions.y1 + labelHeight * 1.5;\n legendPositions.y2 = legendPositions.y1 + 10;\n }\n return legendPositions;\n };\n\n legendPositions.autoPosition = true;\n legendPositions.posFunc = labelPositionFunc;\n let\n legend = this._renderWireLegend(label, legendPositions, 'line-chart-wire-label', true),\n mouseIn = legend.attachFunc.bind(legend),\n mouseOut = legend.detachFunc.bind(legend);\n legend.detachFunc();\n $text.on('mouseenter', mouseIn)\n .on('mouseleave', mouseOut);\n }\n\n protected _renderBarLabel(label: string, barIndexFromTop: number, barWidth: number) {\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n x = this.centerX,\n labelClass = this._dynamicCssClass('salesfunnel-bar-label');\n\n this._renderLineLabel(x, y, label, labelClass, true);\n }\n\n protected _renderConversionRate(barIndexFromTop: number, startPointX: number, conversionRate: number) {\n if (conversionRate === undefined) {\n return;\n }\n let ctrlY = barIndexFromTop * this.barHeight,\n labelClass = this._dynamicCssClass('salesfunnel-conversionrate-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', startPointX)\n .attr('y', ctrlY)\n .text('↓ ' + conversionRate + '%');\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n protected _renderPolygon(renderPolyOptions: PolyOptions): JQuery<SVGElement> {\n let that = this,\n points = this._calcPolygonPoints(true, this.animationDuration ? 0 : 1, renderPolyOptions.xStart, renderPolyOptions.yStart, renderPolyOptions.width, renderPolyOptions.widthBottom, this.barHeight - 1);\n\n let $poly = this.$svg.appendSVG('polygon', renderPolyOptions.cssClass, '', renderPolyOptions.id)\n .attr('points', points)\n .data('xStart', renderPolyOptions.xStart)\n .data('yStart', renderPolyOptions.yStart)\n .data('widthBar', renderPolyOptions.width)\n .data('widthBottom', renderPolyOptions.widthBottom)\n .data('heightBar', this.barHeight);\n if (!this.chart.config.options.autoColor && renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n $poly.css('stroke', this.firstOpaqueBackgroundColor);\n\n let expandFunc = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(true, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n\n if (this.animationDuration) {\n $poly.animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(expandFunc, this.animationDuration));\n }\n if (this.chart.config.options.clickable) {\n $poly.on('click', renderPolyOptions.clickObject, e => this.chart.handleValueClick(e.data));\n }\n if (renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n\n return $poly;\n }\n\n protected _calcPolygonPoints(expand: boolean, fxPos: number, xStart: number, yStart: number, width: number, widthBottom: number, height: number): string {\n let xOffsetTop = 0,\n xOffsetBottom = 0;\n if (expand) {\n xOffsetTop = width / 2 * fxPos;\n xOffsetBottom = widthBottom / 2 * fxPos;\n } else {\n xOffsetTop = (width / 2) - (width / 2 * fxPos);\n xOffsetBottom = (widthBottom / 2) - (widthBottom / 2 * fxPos);\n }\n return strings.join(' ',\n (xStart - xOffsetTop) + ',' + yStart, // x1, y1\n (xStart + xOffsetTop) + ',' + yStart, // x2, y2\n (xStart + xOffsetBottom) + ',' + (yStart + height), // x3, y3\n (xStart - xOffsetBottom) + ',' + (yStart + height) // x4, y4\n );\n }\n\n protected _renderBarsAccordingToValues(chartValueGroups: ChartValueGroup[]) {\n let widthPerN = (this.dataAnalyzeResult.maxValue ? this.barAreaWidth * 0.8 / this.dataAnalyzeResult.maxValue : 0),\n startPointX = this.barAreaWidth + this.dataAnalyzeResult.maxLengthFirstValueRow + this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount + 2 * this.paddingBetweenLabel,\n barCount = chartValueGroups.length;\n\n for (let i = 0; i < barCount; i++) {\n let width = (chartValueGroups[i].values[0] as number) * widthPerN + this.barAreaWidth * 0.2,\n barLabel = chartValueGroups[i].groupName,\n yCoord = i * this.barHeight;\n\n let renderPolyOptions: PolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: width,\n cssClass: 'salesfunnel-chart-bar',\n fill: arrays.ensure(chartValueGroups[i].colorHexValue)[0],\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0] as number, false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1] as number, true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.options.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0] as number, chartValueGroups[i].values[0] as number));\n }\n }\n }\n }\n\n protected _renderLabelSeparatorLine(yCoord: number, labelLineWidth: number) {\n let $line = this.$svg.appendSVG('line', 'label-separator')\n .attr('x1', this.barAreaWidth + this.paddingBetweenLabel)\n .attr('y1', yCoord)\n .attr('x2', this.barAreaWidth + labelLineWidth)\n .attr('y2', yCoord);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n protected _calcConversionRate(valueBefore: number, value: number): number {\n if (objects.isNullOrUndefined(valueBefore) || objects.isNullOrUndefined(value) || valueBefore === 0) {\n return undefined;\n }\n return Math.round(value / valueBefore * 100);\n }\n\n protected _analyzeData(valueGroups: ChartValueGroup[]): AnalyzedData {\n let result: AnalyzedData = {\n labelCount: 0,\n maxValue: null,\n maxLengthFirstValueRow: 0,\n maxLengthSecondValueRow: 0\n },\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n for (let i = 0; i < valueGroups.length; i++) {\n\n let valueGroup = valueGroups[i];\n result.labelCount = Math.max(result.labelCount, valueGroup.values.length);\n // only first value is relevant for bar\n if (valueGroup.values.length > 0 && valueGroup.values[0]) {\n if (result.maxValue === null) {\n result.maxValue = valueGroup.values[0] as number;\n } else {\n result.maxValue = Math.max(result.maxValue, valueGroup.values[0] as number);\n }\n result.maxLengthFirstValueRow = Math.max(result.maxLengthFirstValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[0] as number), labelClass).width);\n }\n if (valueGroup.values.length > 1 && valueGroup.values[1]) {\n result.maxLengthSecondValueRow = Math.max(result.maxLengthSecondValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[1] as number), labelClass).width);\n }\n }\n return result;\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n let that = this,\n shrink = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(false, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n this.$svg.children(this.segmentSelectorForAnimation).animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(shrink))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n\n protected _dynamicCssClass(cssClass: string): string {\n let small = '';\n if (this.chartBox.width <= this.widthThresholdSmall) {\n small = 'small';\n } else if (this.chartBox.width <= this.widthThresholdMedium) {\n small = 'medium';\n }\n return strings.join(' ', cssClass, small);\n }\n\n protected _dynamicConversionRateWidth(): number {\n if (!this.chart.config.options.salesfunnel.calcConversionRate) {\n return 0; // don't show conversion rate\n }\n if (this.chartBox.width <= this.widthThresholdSmall) {\n return 60;\n }\n if (this.chartBox.width <= this.widthThresholdMedium) {\n return 80;\n }\n return 100;\n }\n}\n\nexport type AnalyzedData = {\n labelCount: number;\n maxValue: number;\n maxLengthFirstValueRow: number;\n maxLengthSecondValueRow: number;\n};\n\nexport type PolyOptions = {\n id?: string;\n xStart: number;\n yStart: number;\n rect: boolean;\n width: number;\n widthBottom: number;\n cssClass: string;\n fill: string;\n label: string;\n clickObject: ClickObject;\n};\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, EnumObject, numbers, RoundingMode} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\n\nexport class SpeedoChartRenderer extends AbstractSvgChartRenderer {\n\n segmentSelectorForAnimation: string;\n\n r: number;\n scaleWeight: number;\n my: number;\n parts: number;\n numSegmentsPerPart: number;\n segmentWidth: number;\n widthOfSegmentWithGap: number;\n animationTriggered: boolean;\n\n $filledParts: JQuery<SVGElement>[];\n $pointer: JQuery<SVGElement>;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.pointer';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n speedo: {\n greenAreaPosition: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n static Position = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right'\n } as const;\n\n static NUM_PARTS_GREEN_CENTER = 7;\n static NUM_PARTS_GREEN_EDGE = 4;\n\n static ONE_THOUSAND = 1000;\n static TEN_THOUSAND = 10000;\n static ONE_MILLION = 1000000;\n\n static ARC_MIN = -0.25;\n static ARC_MAX = 0.25;\n static ARC_RANGE = SpeedoChartRenderer.ARC_MAX - SpeedoChartRenderer.ARC_MIN;\n\n static SEGMENT_GAP = 0.0103; // space between two segments (lines)\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length > 0 ||\n chartData.chartValueGroups.length !== 1 ||\n chartData.chartValueGroups[0].values.length !== 3 ||\n chartConfig.options.speedo.greenAreaPosition === undefined) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n let chartData = this.chart.data,\n minValue = chartData.chartValueGroups[0].values[0] as number,\n maxValue = chartData.chartValueGroups[0].values[2] as number,\n value = chartData.chartValueGroups[0].values[1] as number;\n\n // radius of the scale\n this.r = Math.min(this.chartBox.height, this.chartBox.width / 2) * 0.7;\n\n // width (thickness) of the scale\n this.scaleWeight = this.r * 0.27;\n\n this.my = this.chartBox.yOffset + this.chartBox.height - (this.chartBox.height - this.r * 1.12) / 2;\n\n // number of parts in the scale\n this.parts = this.chart.config.options.speedo.greenAreaPosition === SpeedoChartRenderer.Position.CENTER ?\n SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER : SpeedoChartRenderer.NUM_PARTS_GREEN_EDGE;\n\n // number of lines per part\n this.numSegmentsPerPart = this.parts === SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER ? 5 : 8;\n\n // to remember 'filled' parts\n this.$filledParts = [];\n\n let numTotalSegments = this.parts * this.numSegmentsPerPart; // total number of lines in the whole chart (all colors)\n let numTotalGaps = numTotalSegments - 1;\n\n // width of one segment (line)\n this.segmentWidth = (SpeedoChartRenderer.ARC_RANGE - (numTotalGaps * SpeedoChartRenderer.SEGMENT_GAP)) / numTotalSegments;\n\n // width of one segment including the gap to the next segment.\n this.widthOfSegmentWithGap = this.segmentWidth + SpeedoChartRenderer.SEGMENT_GAP;\n\n // pointer value in range [0,1]\n let valuePercentage = this._getValuePercentage(value, minValue, maxValue);\n\n // value in the range [0,numTotalSegments - 1] rounded to one segment\n let segmentToPointAt = this._getSegmentToPointAt(valuePercentage, numTotalSegments);\n\n // value rounded to the closest segment so that the pointer never stays \"in between\" two segments but always on a segment\n let valuePercentageRounded = this._getPercentageValueOfSegment(segmentToPointAt % this.numSegmentsPerPart,\n this._getPartForValue(valuePercentage));\n\n for (let i = 0; i < this.parts; i++) {\n this._renderCirclePart(i);\n }\n\n this._renderPointer(valuePercentageRounded);\n this._renderLegend(minValue, value, maxValue, chartData.chartValueGroups[0].groupName);\n\n this.$svg.addClass('speedo-chart-svg');\n if (this.chart.config.options.clickable) {\n this.$svg.on('click', this._createClickObject(null, null), e => this.chart.handleValueClick(e.data));\n }\n }\n\n protected _getValuePercentage(value: number, minValue: number, maxValue: number): number {\n return this._limitValue((value - minValue) / (maxValue - minValue), 1);\n }\n\n protected _getSegmentToPointAt(valuePercentage: number, numTotalSegments: number): number {\n return this._limitValue(Math.floor(valuePercentage * numTotalSegments), numTotalSegments - 1);\n }\n\n protected _limitValue(value: number, maxValue: number): number {\n value = Math.max(value, 0); // cannot be < 0\n value = Math.min(value, maxValue); // cannot be > maxValue\n return value;\n }\n\n /**\n * Gets the percentage value in range [0,1] of the specified segment.\n */\n protected _getPercentageValueOfSegment(segmentIndexInPart: number, part: number): number {\n // get the segment position\n let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);\n\n // calculate the center position in the Arc range [0, 0.5] of the segment\n let pointerPos = pointerRange.from - SpeedoChartRenderer.ARC_MIN + ((pointerRange.to - pointerRange.from) / 2);\n\n // calculate the percentage value of the center of the segment in range [0,1]\n return this._limitValue(pointerPos / SpeedoChartRenderer.ARC_RANGE, 1);\n }\n\n /**\n * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments\n */\n protected _renderPointer(valuePercentage: number) {\n this.$pointer = this.$svg.appendSVG('path', 'pointer')\n .attr('d', this._pathPointer(0))\n .attr('data-end', valuePercentage)\n .attr('stroke-width', (this.scaleWeight / 6) + 'px') // width of the pointer bar depends on size of chart\n .attr('fill', 'none');\n\n if (this.animationDuration) {\n let that = this;\n let tweenIn = function(now, fx) {\n let val = this.getAttribute('data-end') * fx.pos;\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.$pointer\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenIn, this.animationDuration));\n } else {\n this._updatePointer(valuePercentage);\n this._updatePartsFill(valuePercentage);\n }\n }\n\n /**\n * renders a single segment line.\n */\n protected _renderSegment(from: number, to: number, colorClass: string): JQuery<SVGElement> {\n return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)\n .attr('id', 'ArcAxisWide' + this.chart.id)\n .attr('fill', 'none')\n .attr('stroke-width', this.scaleWeight + 'px')\n .attr('d', this._pathSegment(from, to));\n }\n\n protected _renderCirclePart(part: number) {\n let colorClass = this._getColorForPart(part);\n // render 'empty' segments\n for (let i = 0; i < this.numSegmentsPerPart; i++) {\n let segPos = this._calcSegmentPos(i, part);\n this._renderSegment(segPos.from, segPos.to, colorClass);\n }\n\n // render and remember 'filled' segments (not visible by default).\n this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default\n }\n\n protected _renderLegend(minValue: number, value: number, maxValue: number, groupName: string) {\n let minMaxLegendFontSize = this.scaleWeight * 0.8,\n padding = 5, // same as in AbstractChartRenderer#_renderWireLegend\n labelYPos = this.my + padding,\n labelMinMaxYPos = labelYPos + minMaxLegendFontSize * 0.8,\n positions = {\n x1: null,\n x2: this.chartBox.mX() - padding,\n y1: null,\n y2: labelYPos,\n v: -1,\n h: 1\n },\n minLegendValue = minValue ? this._formatValue(minValue) : 0,\n legendValue = value ? this._formatValue(value) : '' + 0,\n maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;\n\n // tooltip for min/max value\n if (this.chart.config.options.plugins.tooltip.enabled) {\n // min value\n let $minLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() - this.r)\n .attr('y', labelMinMaxYPos)\n .text(minLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n // max value\n let $maxLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() + this.r)\n .attr('y', labelMinMaxYPos)\n .text(maxLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n let mouseIn = function() {\n this.$svg.append($minLegend);\n this.$svg.append($maxLegend);\n }.bind(this);\n let mouseOut = () => {\n $minLegend.detach();\n $maxLegend.detach();\n };\n mouseOut();\n this.$svg\n .on('mouseenter', mouseIn)\n .on('mouseleave', mouseOut);\n }\n\n // actual value\n if (this.chart.config.options.plugins.legend.display) {\n this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, legendValue, '', false)\n .addClass('speedo-chart-label')\n .attr('style', 'font-size: ' + this.scaleWeight * 1.55 + 'px;');\n }\n aria.description(this.$svg, this.session.text('ui.SpeedoChartAriaDescription', legendValue, minLegendValue, maxLegendValue));\n }\n\n /**\n * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].\n */\n protected _getPartForValue(valuePercentage: number): number {\n let part = Math.floor(valuePercentage * this.parts);\n return this._limitValue(part, this.parts - 1);\n }\n\n /**\n * Formats the speedo-values in a compact way:\n * 0 - 999: as is\n * 1 to 9'999: as is, with grouping separators\n * 10 to 999 thousand: 123k\n * >= 1 million: millions with max. two fraction digits -> 1.23M\n */\n protected _formatValue(value: number): string {\n if (value < SpeedoChartRenderer.TEN_THOUSAND) {\n return this.session.locale.decimalFormat.format(value);\n }\n if (value < SpeedoChartRenderer.ONE_MILLION) {\n return Math.floor(value / SpeedoChartRenderer.ONE_THOUSAND) + 'k';\n }\n let millions = value / SpeedoChartRenderer.ONE_MILLION;\n millions = numbers.round(millions, RoundingMode.HALF_UP, 2);\n return this.session.locale.decimalFormat.format(millions) + 'M';\n }\n\n /**\n * Updates the pointer position to point to the specified valuePercentage in range [0,1].\n */\n protected _updatePointer(valuePercentage: number) {\n this.$pointer\n .attr('d', this._pathPointer(valuePercentage))\n .removeClass('red yellow light-green dark-green')\n .addClass(this._getColorForPart(this._getPartForValue(valuePercentage)));\n }\n\n /**\n * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].\n */\n protected _updatePartsFill(valuePercentage: number) {\n let from, to;\n for (let part = 0; part < this.$filledParts.length; part++) {\n from = this._calcSegmentPos(0, part).from;\n if ((part + 1) / this.parts < valuePercentage) {\n // the current part is smaller than the value: completely filled part\n to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part).to;\n } else if (part / this.parts > valuePercentage) {\n // the current part is bigger than the speedo-value: hide element\n from = SpeedoChartRenderer.ARC_MIN;\n to = SpeedoChartRenderer.ARC_MIN;\n } else {\n // the value is within the current part\n to = (SpeedoChartRenderer.ARC_RANGE * valuePercentage) - SpeedoChartRenderer.ARC_MAX; // fill part exactly to the value\n }\n this.$filledParts[part].attr('d', this._pathSegment(from, to));\n }\n }\n\n /**\n * Calculates the positions (from, to) of a single segment line.\n * @param segmentIndexInPart the index of the segment line within the part.\n * @param part the part index.\n */\n protected _calcSegmentPos(segmentIndexInPart: number, part: number): { from: number; to: number } {\n let result = {\n from: 0,\n to: 0\n };\n let segmentNum = segmentIndexInPart + part * this.numSegmentsPerPart;\n result.from = segmentNum * this.widthOfSegmentWithGap - SpeedoChartRenderer.ARC_MAX;\n result.to = result.from + this.segmentWidth;\n return result;\n }\n\n protected _getColorForPart(part: number): string {\n let position = this.chart.config.options.speedo.greenAreaPosition;\n switch (position) {\n case SpeedoChartRenderer.Position.LEFT:\n // only four parts\n if (part === 0) {\n return 'dark-green';\n } else if (part === 1) {\n return 'light-green';\n } else if (part === 2) {\n return 'yellow';\n } else if (part === 3) {\n return 'red';\n }\n break;\n case SpeedoChartRenderer.Position.RIGHT:\n // only four parts\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n }\n break;\n case SpeedoChartRenderer.Position.CENTER:\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n } else if (part === 4) {\n return 'light-green';\n } else if (part === 5) {\n return 'yellow';\n } else if (part === 6) {\n return 'red';\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.\n */\n protected _pathSegment(start: number, end: number): string {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + this.r * Math.sin(s)) + ' ' + (this.my - this.r * Math.cos(s)) + ' ';\n // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n // A rx ry\n // x-axis-rotation large-arc-flag sweep-flag\n // x y\n pathString += 'A ' + this.r + ' ' + this.r + ' ';\n pathString += '0 ' + (end - start < 0.5 ? '0' : '1') + ' 1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ' ' + (this.my - this.r * Math.cos(e));\n\n return pathString;\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer\n */\n protected _pathPointer(valuePercentage: number): string {\n let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;\n let s = point * 2 * Math.PI,\n pointerOuterR = this.r - (1.4 * this.scaleWeight),\n pointerInnerR = this.r + (1.37 * this.scaleWeight),\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + pointerInnerR * Math.sin(s)) + ' ' + (this.my - pointerInnerR * Math.cos(s)) + ' ';\n pathString += 'L ' + (this.chartBox.mX() + pointerOuterR * Math.sin(s)) + ' ' + (this.my - pointerOuterR * Math.cos(s)) + ' ';\n pathString += 'Z';\n return pathString;\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n let that = this,\n tweenOut = function(now, fx) {\n let val = this.getAttribute('data-end') * (1 - fx.pos);\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n\nexport type GreenAreaPosition = EnumObject<typeof SpeedoChartRenderer.Position>;\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n// place venn 3 by simulation\n// find angle and distance (to a) and radius where \"error\" is minimal\nimport {VennCircle, VennCircleHelper} from '../index';\n\nexport class VennAsync3Calculator {\n helper: VennCircleHelper;\n venn1: VennCircle;\n venn2: VennCircle;\n venn3: VennCircle;\n u: number;\n v: number;\n w: number;\n uv: number;\n uw: number;\n vw: number;\n uvw: number;\n\n maxD: number;\n dStep: number;\n rStep: number;\n alphaStep: number;\n\n alphaBest: number;\n dBest: number;\n rBest: number;\n errorBest: number;\n callback: () => void;\n cancelled: boolean;\n\n constructor(helper: VennCircleHelper, venn1: VennCircle, venn2: VennCircle, venn3: VennCircle, u: number, v: number, w: number, uv: number, uw: number, vw: number, uvw: number, d12: number, d13: number, d23: number) {\n // if circles are empty, they are drawn as small circle, so: adjust u v w to find better errors\n if (u === 0 && uv === 0 && uw === 0 && uvw === 0) {\n u = 1;\n }\n if (v === 0 && uv === 0 && vw === 0 && uvw === 0) {\n v = 1;\n }\n if (w === 0 && uw === 0 && vw === 0 && uvw === 0) {\n w = 1;\n }\n\n this.helper = helper;\n this.venn1 = venn1;\n this.venn2 = venn2;\n this.venn3 = venn3;\n this.u = u;\n this.v = v;\n this.w = w;\n this.uv = uv;\n this.uw = uw;\n this.vw = vw;\n this.uvw = uvw;\n\n /** step and ranges for loops */\n this.maxD = this.venn1.r + 2 * this.venn2.r + 2 * this.venn1.r + this.helper.distR;\n this.dStep = this.maxD / 30;\n this.rStep = venn3.r / 4;\n this.alphaStep = Math.PI / 30;\n\n /** best vars (initialize with 0 so the optimizer knows that they are numbers) */\n this.alphaBest = 0;\n this.dBest = 0;\n this.rBest = 0;\n this.errorBest = 0;\n\n this.callback = null;\n this.cancelled = false;\n }\n\n start(callback: () => void) {\n this.callback = callback;\n setTimeout(this._next.bind(this, 0));\n }\n\n cancel() {\n this.cancelled = true;\n }\n\n protected _end() {\n // set x and y and r of venn3\n this.venn3.x = this.venn1.x + this.dBest * Math.cos(this.alphaBest);\n this.venn3.y = this.venn1.y - this.dBest * Math.sin(this.alphaBest);\n this.venn3.r = this.rBest;\n\n this.callback();\n }\n\n protected _next(alpha: number) {\n if (!this.cancelled) {\n // iterate\n this._iteration(alpha);\n }\n if (this.cancelled) {\n return; // stop loop if interrupted\n }\n\n alpha += this.alphaStep;\n if (alpha < Math.PI) {\n // schedule next loop iteration\n setTimeout(this._next.bind(this, alpha));\n } else {\n // end loop\n this._end();\n }\n }\n\n protected _iteration(alpha: number) {\n // optimize speed: no var lookup (should help the optimizer in general, and IE in particular)\n let maxD = this.maxD,\n dStep = this.dStep,\n minR = this.helper.minR,\n rStep = this.rStep,\n total = this.helper.total,\n x1 = this.venn1.x,\n y1 = this.venn1.y,\n r1 = this.venn1.r,\n x2 = this.venn2.x,\n y2 = this.venn2.y,\n r2 = this.venn2.r,\n r3 = this.venn3.r,\n u = this.u,\n v = this.v,\n w = this.w,\n uv = this.uv,\n uw = this.uw,\n vw = this.vw,\n uvw = this.uvw,\n alphaBest = this.alphaBest,\n dBest = this.dBest,\n rBest = this.rBest,\n errorBest = this.errorBest;\n\n for (let d = 0; d < maxD; d += dStep) {\n // calc x, y\n let x = x1 + d * Math.cos(alpha);\n let y = y1 - d * Math.sin(alpha);\n\n for (let r = Math.max(minR, r3 * 0.75); r <= r3 * 1.25; r += rStep) {\n\n // find areas with monte carlo, do not laugh! i tried even this:\n // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.1195&rep=rep1&type=pdf\n\n let minX = Math.min(x1 - r1, x2 - r2, x - r);\n let maxX = Math.max(x1 + r1, x2 + r2, x + r);\n let minY = Math.min(y1 - r1, y2 - r2, y - r);\n let maxY = Math.max(y1 + r1, y2 + r2, y + r);\n let stepX = (maxX - minX) / 100;\n let stepY = (maxY - minY) / 100;\n\n // areas of venn\n let a1 = 0,\n a2 = 0,\n a3 = 0,\n a12 = 0,\n a13 = 0,\n a23 = 0,\n a123 = 0;\n\n for (let testX = minX; testX < maxX; testX += stepX) {\n for (let testY = minY; testY < maxY; testY += stepY) {\n // optimize speed for ie: no function call\n let t1 = ((testX - x1) * (testX - x1) + (testY - y1) * (testY - y1)) < (r1 * r1);\n let t2 = ((testX - x2) * (testX - x2) + (testY - y2) * (testY - y2)) < (r2 * r2);\n let t3 = ((testX - x) * (testX - x) + (testY - y) * (testY - y)) < (r * r);\n\n // check if inside\n if (t1 && t2 && t3) {\n a123++;\n } else if (t1 && t2 && !t3) {\n a12++;\n } else if (t1 && !t2 && !t3) {\n a1++;\n } else if (!t1 && t2 && !t3) {\n a2++;\n } else if (t1 && !t2 && t3) {\n a13++;\n } else if (!t1 && t2 && t3) {\n a23++;\n } else if (!t1 && !t2 && t3) {\n a3++;\n }\n }\n }\n\n let aTotal = a1 + a2 + a3 + a12 + a13 + a23 + a123;\n\n // calc error\n let error = d / maxD;\n error += this._error(uvw, total, a123, aTotal);\n error += this._error(uv, total, a12, aTotal);\n error += this._error(uw, total, a13, aTotal);\n error += this._error(vw, total, a23, aTotal);\n error += this._error(u, total, a1, aTotal);\n error += this._error(v, total, a2, aTotal);\n error += this._error(w, total, a3, aTotal);\n\n // better than before?\n if (alpha === 0 || error < errorBest) {\n alphaBest = alpha;\n dBest = d;\n rBest = r;\n errorBest = error;\n }\n }\n }\n\n this.alphaBest = alphaBest;\n this.dBest = dBest;\n this.rBest = rBest;\n this.errorBest = errorBest;\n }\n\n protected _error(u: number, total: number, a: number, aTotal: number): number {\n // be brutal if basic error\n if ((u === 0 && a !== 0) || (u !== 0 && a === 0)) {\n return 1000;\n }\n return Math.abs(u / total - a / aTotal) * 100;\n }\n}\n","/*\n * Copyright (c) 2010, 2024 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractSvgChartRenderer, Chart, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\nimport {arrays} from '@eclipse-scout/core';\n\nexport class VennChartRenderer extends AbstractSvgChartRenderer {\n animationTriggered: boolean;\n\n data: ChartValueGroup[];\n centerX: number;\n centerY: number;\n numberOfCircles: number;\n readyToDraw: boolean;\n wasCircle: boolean;\n\n vennCircleHelper: VennCircleHelper;\n async3Calculator: VennAsync3Calculator;\n\n vennNumber1: VennCircle;\n vennReal1: VennCircle;\n vennNumber2: VennCircle;\n vennReal2: VennCircle;\n vennNumber3: VennCircle;\n vennReal3: VennCircle;\n\n $v1: JQuery<SVGElement>;\n $v2: JQuery<SVGElement>;\n $v3: JQuery<SVGElement>;\n\n constructor(chart: Chart) {\n super(chart);\n this.animationTriggered = false;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n venn: {\n numberOfCircles: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n if (!chartData ||\n chartData.axes.length !== 0 ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n this.centerX = this.width / 2;\n this.centerY = this.height / 2;\n\n if (this.centerX === 0 || this.centerY === 0) {\n return;\n }\n\n // basic values\n this.data = this.chart.data.chartValueGroups;\n this.numberOfCircles = this.chart.config.options.venn.numberOfCircles;\n\n // render parameter\n let distR = 10,\n maxR = Math.min(this.centerX, this.centerY),\n minR = maxR / 15,\n total = this.data.reduce((s, e) => {\n return s + (e.values[0] as number);\n }, 1);\n\n this.vennCircleHelper = new VennCircleHelper(distR, maxR, minR, total);\n\n // create svg elements and venns\n if (this.numberOfCircles > 0) {\n this.$v1 = this._createCircle(0, arrays.ensure(this.data[0].colorHexValue)[0], this.data[0].cssClass);\n this.vennNumber1 = new VennCircle(this.$v1);\n this.vennReal1 = new VennCircle(this.$v1);\n }\n if (this.numberOfCircles > 1) {\n this.$v2 = this._createCircle(1, arrays.ensure(this.data[1].colorHexValue)[0], this.data[1].cssClass);\n this.vennNumber2 = new VennCircle(this.$v2);\n this.vennReal2 = new VennCircle(this.$v2);\n }\n if (this.numberOfCircles > 2) {\n this.$v3 = this._createCircle(2, arrays.ensure(this.data[2].colorHexValue)[0], this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\n // In the case of 3 circles, draw will be called async after render is completed. Therefore, the current animationDuration needs to be set again when _draw is finally called.\n const animationDurationRender = this.animationDuration;\n let draw = function() {\n this.readyToDraw = true;\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render-> error\n return;\n }\n this.readyToDraw = false;\n const animationDuration = this.animationDuration;\n this.setAnimationDuration(animationDurationRender);\n this._draw(true, true);\n this.setAnimationDuration(animationDuration);\n }.bind(this);\n\n // save callback if user navigated away while calculating and _draw is not executed.\n this.readyToDraw = false;\n\n // calc venns and set legend\n if (this.numberOfCircles === 1) {\n this._calc1(this.vennNumber1);\n this._calc1(this.vennReal1);\n draw();\n\n } else if (this.numberOfCircles === 2) {\n this._calc2(this.vennNumber1, this.vennNumber2, false);\n this._calc2(this.vennReal1, this.vennReal2, true);\n draw();\n\n } else if (this.numberOfCircles === 3) {\n this._calc3(this.vennNumber1, this.vennNumber2, this.vennNumber3, false, () => {\n if (this.rendering || this.rendered) {\n this._calc3(this.vennReal1, this.vennReal2, this.vennReal3, true, draw);\n }\n });\n }\n }\n\n override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n this._cancelAsync3Calculator();\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n // calculation\n\n protected _calc1(v1: VennCircle) {\n // set basic data\n let a = this.data[0].values[0] as number;\n\n // calc sizes\n if (a > 0) {\n v1.r = this.vennCircleHelper.calcR(a, 0.8);\n } else {\n v1.r = this.vennCircleHelper.calcR(a, 0);\n }\n\n v1.x = 0;\n v1.y = 0;\n\n // place legend and label\n v1.setLegend(this.data[0].groupName, 1, -1);\n v1.addLabel(a, v1.x, v1.y);\n }\n\n protected _calc2(v1: VennCircle, v2: VennCircle, real: boolean) {\n // set basic data\n let a = this.data[0].values[0] as number;\n let b = this.data[1].values[0] as number;\n let ab = this.data[2].values[0] as number;\n let d12;\n\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab, 0.8);\n v2.r = this.vennCircleHelper.calcR(b + ab, 0.8);\n d12 = this.vennCircleHelper.calcD(v1, v2, a, b, ab, true);\n\n // calc x\n v1.x = 0;\n v2.x = d12;\n } else {\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = this.vennCircleHelper.calcR(-1, 0.7);\n v1.x = -v1.r * 0.6;\n v2.x = v2.r * 0.6;\n }\n\n // calc y ;)\n v1.y = 0;\n v2.y = 0;\n\n // balance circles\n this.vennCircleHelper.findBalance2(v1, v2);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, -1);\n v2.setLegend(this.data[1].groupName, 1, -1);\n\n // draw labels, and fix legend\n if (real) {\n if (ab === 0) {\n v1.addLabel(a, v1.x, v1.y);\n v2.addLabel(b, v2.x, v2.y);\n } else if (a === 0 && b === 0) {\n v1.addLabel(ab, v1.x, v1.y);\n } else if (a === 0) {\n v2.addLabel(ab, v1.x, v1.y);\n v2.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v1.legendR = v2.r - d12;\n } else if (b === 0) {\n v1.addLabel(ab, v2.x, v2.y);\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v2.legendR = v1.r - d12;\n } else {\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v1.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v2.addLabel(ab, v1.x + v1.r + (d12 - v2.r - v1.r) / 2, v1.y);\n }\n } else {\n v1.addLabel(a, -v1.r * 0.9, 0);\n v1.addLabel(b, v1.r * 0.9, 0);\n v2.addLabel(ab, 0, 0);\n }\n }\n\n protected _calc3(v1: VennCircle, v2: VennCircle, v3: VennCircle, real: boolean, callback: () => void) {\n // set basic data\n let a = this.data[0].values[0] as number;\n let b = this.data[1].values[0] as number;\n let c = this.data[2].values[0] as number;\n let ab = this.data[3].values[0] as number;\n let ac = this.data[4].values[0] as number;\n let bc = this.data[5].values[0] as number;\n let abc = this.data[6].values[0] as number;\n\n let d12, d13, d23;\n\n // calc sizes\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab + ac + abc, 0.55);\n v2.r = this.vennCircleHelper.calcR(b + ab + bc + abc, 0.55);\n v3.r = this.vennCircleHelper.calcR(c + ac + bc + abc, 0.55);\n\n // find distance between a; may reduce r\n d12 = this.vennCircleHelper.calcD(v1, v2, a + ac, b + bc, ab + abc, true);\n d13 = this.vennCircleHelper.calcD(v1, v3, a + ab, c + bc, ab + abc, false);\n d23 = this.vennCircleHelper.calcD(v2, v3, b + ab, c + ac, ab + abc, false);\n\n // find coordinates of a and b\n v1.x = 0;\n v2.x = d12;\n v3.x = d13;\n\n v1.y = 0;\n v2.y = 0;\n v3.y = 0;\n\n // c is much more difficult..., only changes v3\n this._cancelAsync3Calculator();\n this.async3Calculator = new VennAsync3Calculator(this.vennCircleHelper, v1, v2, v3, a, b, c, ab, ac, bc, abc, d12, d13, d23);\n this.async3Calculator.start(() => {\n this.async3Calculator = null;\n\n // balance circles\n this.vennCircleHelper.findBalance3(v1, v2, v3);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n callback();\n });\n\n } else {\n // draw label\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = v3.r = this.vennCircleHelper.calcR(-1, 0.55);\n\n v1.x = -v1.r * 0.73;\n v2.x = v2.r * 0.73;\n v3.x = 0;\n\n v1.y = v1.r * 0.58;\n v2.y = v2.r * 0.58;\n v3.y = -v3.r * 0.58;\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n v1.addLabel(a, -v1.r, v1.r * 0.76);\n v2.addLabel(b, v1.r, v1.r * 0.76);\n v3.addLabel(c, 0, -v1.r * 0.82);\n v1.addLabel(ab, 0, v1.r * 0.76);\n v1.addLabel(ac, -v1.r * 0.49, -v1.r * 0.05);\n v2.addLabel(bc, v1.r * 0.49, -v1.r * 0.05);\n v1.addLabel(abc, 0, v1.r * 0.22);\n\n callback();\n }\n }\n\n protected _cancelAsync3Calculator() {\n if (this.async3Calculator) {\n this.async3Calculator.cancel();\n this.async3Calculator = null;\n }\n }\n\n // drawing\n\n protected _draw(animated: boolean, real: boolean) {\n if (!this.rendered && !this.rendering) { // additional check, because this method might be called from a setTimeout()\n return;\n }\n\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n\n // remove labels and legends\n let that = this;\n this.$svg.children('.venn-legend, .venn-label, .venn-axis-white, .label-line')\n .stop()\n .animateSVG('opacity', 1, 0, null, true)\n .promise()\n .done(function() {\n this.remove();\n that.animationTriggered = false;\n });\n\n // find venns we will update\n let showVenn = [];\n\n if (this.numberOfCircles > 0) {\n showVenn.push(real ? this.vennReal1 : this.vennNumber1);\n }\n\n if (this.numberOfCircles > 1) {\n showVenn.push(real ? this.vennReal2 : this.vennNumber2);\n }\n\n if (this.numberOfCircles > 2) {\n showVenn.push(real ? this.vennReal3 : this.vennNumber3);\n }\n\n // update venn and draw labels\n for (let i = 0; i < showVenn.length; i++) {\n let venn = showVenn[i];\n this._updateVenn(venn, animated);\n\n for (let j = 0; j < venn.labels.length; j++) {\n let label = venn.labels[j];\n this._drawLabel(label.text, label.x, label.y, animated);\n }\n }\n }\n\n // handling of circles\n protected _createCircle(circleIndex: number, color: string, cssClass: string): JQuery<SVGElement> {\n let $circle = this.$svg.appendSVG('circle', 'venn-circle')\n .attr('cx', this.centerX)\n .attr('cy', this.centerY)\n .attr('r', 0)\n .on('mouseenter', {\n showReal: false\n }, this._show.bind(this))\n .on('mouseleave', {\n showReal: true\n }, this._show.bind(this));\n\n if (this.chart.config.options.autoColor) {\n $circle.addClass('auto-color color0');\n } else if (cssClass) {\n $circle.addClass(cssClass);\n } else {\n $circle.attr('fill', color);\n }\n\n if (this.chart.config.options.clickable) {\n $circle.on('click', this._createClickObject(null, circleIndex), e => this.chart.handleValueClick(e.data));\n }\n\n return $circle;\n }\n\n // handling of venn, label and legend\n protected _updateVenn(venn: VennCircle, animated: boolean) {\n // move circle\n venn.$circle\n .animateSVG('cx', this.centerX + venn.x, animated ? this.animationDuration : 0, null, true)\n .animateSVG('cy', this.centerY + venn.y, animated ? this.animationDuration : 0, null, true)\n .animateSVG('r', venn.r, animated ? this.animationDuration : 0, null, true);\n\n // set up position legend\n let minR = this.vennCircleHelper.minR,\n x1 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * venn.r,\n y1 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * venn.r,\n x2 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * (venn.legendR + minR * 1.5),\n y2 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * (venn.legendR + minR * 1.5);\n\n let legendPositions = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n v: venn.legendV,\n h: venn.legendH\n } as LegendPositions;\n\n this._renderWireLegend(venn.legend, legendPositions, 'venn-legend');\n }\n\n protected _drawLabel(text: number, dx: number, dy: number, animated: boolean) {\n // draw label\n let $label = this.$svg.appendSVG('text', 'venn-label')\n .attr('x', this.centerX + dx)\n .attr('y', this.centerY + dy)\n .text(text);\n\n // animate if needed\n if (animated && this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n // handling of show/hide numbers\n protected _show(event: JQuery.MouseEventBase) {\n if (this.numberOfCircles === 1) {\n return; // Nothing to do for only one circle\n }\n\n // target contains element that is entered, relatedTarget contains element that is left\n let toElement = (event.type === 'mouseenter' ? event.target : event.relatedTarget);\n\n // check if true enter or just from one circle to another\n let isCircle = toElement && $(toElement).hasClass('venn-circle');\n if (this.wasCircle && isCircle) {\n return;\n }\n this.wasCircle = isCircle;\n\n // draw animated in every case\n this._draw(true, event.data.showReal);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nexport class VennCircle {\n labels: Label[];\n $circle: JQuery<SVGElement>;\n x: number;\n y: number;\n r: number;\n legend: string;\n legendR: number;\n legendH: -1 | 1;\n legendV: -1 | 1;\n\n constructor($circle: JQuery<SVGElement>) {\n this.$circle = $circle;\n this.labels = [];\n }\n\n setLegend(legend: string, horizontal: -1 | 1, vertical: -1 | 1, r?: number) {\n this.legend = legend;\n this.legendH = horizontal;\n this.legendV = vertical;\n this.legendR = r || this.r;\n }\n\n addLabel(text: number, x: number, y: number) {\n this.labels.push({\n text: text,\n x: x,\n y: y\n });\n }\n}\n\nexport type Label = {\n text: number;\n x: number;\n y: number;\n};\n\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {VennCircle} from '../index';\n\nexport class VennCircleHelper {\n distR: number;\n maxR: number;\n minR: number;\n total: number;\n\n constructor(distR: number, maxR: number, minR: number, total: number) {\n this.distR = distR;\n this.maxR = maxR;\n this.minR = minR;\n this.total = total;\n }\n\n findBalance2(venn1: VennCircle, venn2: VennCircle) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x) / (venn1.r + venn2.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y) / (venn1.r + venn2.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n }\n\n findBalance3(venn1: VennCircle, venn2: VennCircle, venn3: VennCircle) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x + venn3.r * venn3.x) / (venn1.r + venn2.r + venn3.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y + venn3.r * venn3.y) / (venn1.r + venn2.r + venn3.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n venn3.x = venn3.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n venn3.y = venn3.y - midY;\n }\n\n calcR(count: number, factorMax: number): number {\n if (count === -1) {\n return this.maxR * factorMax;\n }\n return Math.max(this.minR, Math.sqrt(count / this.total) * this.maxR * factorMax);\n }\n\n calcD(venn1: VennCircle, venn2: VennCircle, u: number, v: number, uv: number, changeR: boolean): number {\n let ret: number;\n if (uv === 0) {\n // separated circles\n ret = venn1.r + venn2.r + this.distR * 2;\n\n } else if (u === 0 && v === 0) {\n // same circle\n ret = 0;\n\n } else if (u === 0) {\n // a part of b\n ret = Math.max(0, venn2.r - venn1.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn1.r = venn2.r - ret;\n }\n\n } else if (v === 0) {\n // b part of a\n ret = Math.max(0, venn1.r - venn2.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn2.r = venn1.r - ret;\n }\n\n } else {\n // this is pure magic ;) please do not touch!\n let ri = Math.min(venn1.r, venn2.r);\n let ra = Math.max(venn1.r, venn2.r);\n let q = Math.min(u, v) / (Math.min(u, v) + uv);\n\n // unfortunately, there is no closed solution for cricles, so handle as squares\n ret = 2 * q * ri - ri + ra;\n\n // check and fix\n ret = Math.max(3 * this.distR, ret);\n ret = Math.min(ri + ra - 3 * this.distR, ret);\n ret = Math.max(ra - ri + 3 * this.distR, ret);\n }\n\n return ret;\n }\n}\n","/*\n * Copyright (c) 2010-2023 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * https://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {DateAdapter, TimeUnit} from 'chart.js';\nimport {DateFormat, dates, Locale, objects, Session, strings} from '@eclipse-scout/core';\n\nexport const chartJsDateAdapter = {\n getAdapter(session: Session): Partial<DateAdapter> {\n return {\n formats: (): { [key: string]: string } => _getFormats(session.locale),\n\n parse: (value: unknown, format?: TimeUnit): number | null => {\n if (objects.isNullOrUndefined(value)) {\n return null;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n if (objects.isString(value)) {\n if (objects.isString(format) && strings.hasText(format)) {\n let dateFormat = new DateFormat(session.locale, format);\n value = dateFormat.parse(value);\n return value instanceof Date ? value.getTime() : null;\n }\n value = dates.parseJsonDate(value);\n return value instanceof Date ? value.getTime() : null;\n }\n return null;\n },\n\n format: (timestamp: number, format: TimeUnit): string => {\n if (format === 'quarter') {\n // Quarters are not supported by DateFormat, but Chart.js anyway never uses this time unit for formatting by default, because it is not very common.\n // See the function \"determineUnitForFormatting\" in scale.time.js for more details. Therefore, we refrain from supporting this here.\n throw new Error('The time unit \"quarter\" is not supported for formatting.');\n }\n return dates.format(new Date(timestamp), session.locale, format);\n },\n\n add: (timestamp: number, amount: number, unit: TimeUnit): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'millisecond':\n return dates.shiftTime(date, 0, 0, 0, amount).getTime();\n case 'second':\n return dates.shiftTime(date, 0, 0, amount, 0).getTime();\n case 'minute':\n return dates.shiftTime(date, 0, amount, 0, 0).getTime();\n case 'hour':\n return dates.shiftTime(date, amount, 0, 0, 0).getTime();\n case 'day':\n return dates.shift(date, 0, 0, amount).getTime();\n case 'week':\n return dates.shift(date, 0, 0, amount * 7).getTime();\n case 'month':\n return dates.shift(date, 0, amount, 0).getTime();\n case 'quarter':\n return dates.shift(date, 0, amount * 3, 0).getTime();\n case 'year':\n return dates.shift(date, amount, 0, 0).getTime();\n default:\n return timestamp;\n }\n },\n\n diff: (a: number, b: number, unit: TimeUnit): number => {\n switch (unit) {\n case 'millisecond':\n return a - b;\n case 'second':\n return (a - b) / 1000;\n case 'minute':\n return (a - b) / 1000 / 60;\n case 'hour':\n return (a - b) / 1000 / 60 / 60;\n case 'day':\n return dates.compareDays(new Date(a), new Date(b));\n case 'week':\n return dates.compareDays(new Date(a), new Date(b)) / 7;\n case 'month':\n return dates.compareMonths(new Date(a), new Date(b));\n case 'quarter':\n return dates.compareMonths(new Date(a), new Date(b)) / 3;\n case 'year':\n return new Date(a).getFullYear() - new Date(b).getFullYear();\n default:\n return 0;\n }\n },\n\n startOf: (timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'second':\n return date.setMilliseconds(0);\n case 'minute':\n return date.setSeconds(0, 0);\n case 'hour':\n return date.setMinutes(0, 0, 0);\n case 'day':\n return date.setHours(0, 0, 0, 0);\n case 'week':\n return dates.firstDayOfWeek(date, 0).getTime();\n case 'isoWeek':\n return dates.firstDayOfWeek(date, weekday).getTime();\n case 'month':\n return dates.trunc(date).setDate(0);\n case 'quarter':\n return dates.trunc(date).setMonth(date.getMonth() % 4, 1);\n case 'year':\n return dates.trunc(date).setMonth(0, 1);\n default:\n return timestamp;\n }\n },\n\n endOf: (timestamp: number, unit: TimeUnit | 'isoWeek'): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'second':\n return date.setMilliseconds(999);\n case 'minute':\n return date.setSeconds(59, 999);\n case 'hour':\n return date.setMinutes(59, 59, 999);\n case 'day':\n return date.setHours(23, 59, 59, 999);\n case 'week': {\n date.setHours(23, 59, 59, 999);\n let firstDayOfWeek = dates.firstDayOfWeek(date, 0);\n return firstDayOfWeek.setDate(firstDayOfWeek.getDate() + 7);\n }\n case 'month': {\n date.setHours(23, 59, 59, 999);\n return date.setDate(_getNumberOfDays(date.getMonth(), date.getFullYear()));\n }\n case 'quarter': {\n date.setHours(23, 59, 59, 999);\n let endOfQuarterMonth = date.getMonth() % 4 + 2;\n return date.setMonth(endOfQuarterMonth, _getNumberOfDays(endOfQuarterMonth, date.getFullYear()));\n }\n case 'year': {\n date.setHours(23, 59, 59, 999);\n return date.setMonth(11, 31);\n }\n default:\n return timestamp;\n }\n }\n };\n }\n};\n\nfunction _getFormats(locale: Locale) {\n return {\n datetime: locale.dateFormatPatternDefault + ' ' + locale.timeFormatPatternDefault,\n millisecond: 'HH:mm:ss.SSS',\n second: 'HH:mm:ss',\n minute: locale.timeFormatPatternDefault,\n hour: locale.timeFormatPatternDefault,\n day: locale.dateFormatPatternDefault,\n week: 'ww',\n month: 'MMM yyyy',\n quarter: 'qqq - yyyy',\n year: 'yyyy'\n };\n}\n\n/**\n * @param month 0 = january, 11 = december\n * @returns the number of days in the given month and year.\n */\nfunction _getNumberOfDays(month: number, year: number): number {\n if (month in [3, 5, 8, 10]) { // april, june, september, november\n return 30;\n } else if (month === 1) { // february\n return dates.isLeapYear(year) ? 29 : 28;\n }\n // january, march, may, july, august, october, december\n return 31;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormField} from '@eclipse-scout/core';\nimport {Chart, ChartFieldModel} from '../../../index';\n\nexport class ChartField extends FormField implements ChartFieldModel {\n declare model: ChartFieldModel;\n\n chart: Chart;\n\n constructor() {\n super();\n this._addWidgetProperties(['chart']);\n\n this.chart = null;\n }\n\n protected override _render() {\n this.addContainer(this.$parent, 'chart-field');\n this.addLabel();\n this.addMandatoryIndicator();\n this.addStatus();\n this._renderChart();\n }\n\n protected _renderChart() {\n if (this.chart) {\n this.chart.render();\n this.addField(this.chart.$container);\n }\n }\n\n protected _removeChart() {\n this.chart.remove();\n this._removeField();\n }\n\n protected override _linkWithLabel($element: JQuery) {\n // nop, the chart renderers will take care of labeling and describing the chart\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldAdapter} from '@eclipse-scout/core';\n\nexport class ChartFieldAdapter extends FormFieldAdapter {\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldModel, ObjectOrChildModel} from '@eclipse-scout/core';\nimport {Chart} from '../../../index';\n\nexport interface ChartFieldModel extends FormFieldModel {\n chart?: ObjectOrChildModel<Chart>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ObjectFactory} from '@eclipse-scout/core';\nimport * as self from './index';\n\nexport * from './objectFactories';\nexport * from './bookmark/ChartTableControlConfigHelperImpl';\nexport * from './chart/Chart';\nexport * from './chart/ChartAdapter';\nexport * from './chart/ChartEventMap';\nexport * from './chart/ChartLayout';\nexport * from './chart/ChartModel';\nexport * from './chart/AbstractChartRenderer';\nexport * from './chart/AbstractSvgChartRenderer';\nexport * from './chart/chartJsDateAdapter';\nexport * from './chart/ChartJsRenderer';\nexport * from './chart/FulfillmentChartRenderer';\nexport * from './chart/SpeedoChartRenderer';\nexport * from './chart/SalesfunnelChartRenderer';\nexport * from './chart/VennAsync3Calculator';\nexport * from './chart/VennCircleHelper';\nexport * from './chart/VennChartRenderer';\nexport * from './chart/VennCircle';\nexport * from './form/fields/chartfield/ChartField';\nexport * from './form/fields/chartfield/ChartFieldAdapter';\nexport * from './form/fields/chartfield/ChartFieldModel';\nexport * from './tile/ChartFieldTile';\nexport * from './tile/ChartFieldTileAdapter';\nexport * from './tile/ChartFieldTileModel';\nexport * from './table/controls/ChartTableControl';\nexport * from './table/controls/ChartTableControlAdapter';\nexport * from './table/controls/ChartTableControlConfigDo';\nexport * from './table/controls/ChartTableControlEventMap';\nexport * from './table/controls/ChartTableControlLayout';\nexport * from './table/controls/ChartTableControlModel';\nexport * from './table/controls/ChartTableUserFilter';\nexport * from './table/controls/ChartTableUserFilterModel';\n\nexport default self;\n\nObjectFactory.get().registerNamespace('scout', self);\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {scout} from '@eclipse-scout/core';\nimport {ChartTableControlConfigHelperImpl} from './index';\n\nscout.addObjectFactories({\n 'ChartTableControlConfigHelper': () => new ChartTableControlConfigHelperImpl()\n});\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {\n arrays, Column, DateColumn, Event, EventListener, Icon, IconDesc, icons, InitModelOf, NumberColumn, objects, scout, scrollbars, strings, styles, Table, TableControl, TableMatrix, TableMatrixDateGroup, TableMatrixKeyAxis,\n TableMatrixNumberGroup, TableMatrixResult, tooltips\n} from '@eclipse-scout/core';\nimport {Chart, ChartTableControlEventMap, ChartTableControlLayout, ChartTableControlModel, ChartTableUserFilter} from '../../index';\nimport $ from 'jquery';\nimport {BubbleDataPoint, ChartData, ChartType as ChartJsType} from 'chart.js';\nimport {ChartConfig, ClickObject} from '../../chart/Chart';\n\nexport class ChartTableControl extends TableControl implements ChartTableControlModel {\n declare model: ChartTableControlModel;\n declare eventMap: ChartTableControlEventMap;\n declare self: ChartTableControl;\n\n chartAggregation: TableControlChartAggregation;\n chartGroup1: TableControlChartGroup;\n chartGroup2: TableControlChartGroup;\n chartType: TableControlChartType;\n oldChartType: TableControlChartType;\n chart: Chart;\n chartColorScheme: string;\n xAxis: TableMatrixKeyAxis;\n yAxis: TableMatrixKeyAxis;\n dateGroup: (TableMatrixDateGroup | string)[][];\n\n $chartSelect: JQuery;\n $axisSelectContainer: JQuery;\n $xAxisSelect: JQuery;\n $yAxisSelect: JQuery;\n $dataSelect: JQuery;\n protected _chartTypeMap: Record<TableControlChartType, JQuery>;\n protected _aggregationMap: Record<string, JQuery>;\n protected _chartGroup1Map: Record<string, JQuery>;\n protected _chartGroup2Map: Record<string, JQuery>;\n protected _tableUpdatedHandler: (e: Event<Table>) => void;\n protected _tableColumnStructureChangedHandler: () => void;\n protected _chartValueClickedHandler: () => void;\n protected _filterRemovedListener: EventListener;\n protected _tableUpdatedTimeOutId: number;\n\n constructor() {\n super();\n this.iconId = icons.CHART;\n this.tooltipText = '${textKey:ui.Chart}';\n this.chartAggregation = {\n modifier: TableMatrix.NumberGroup.COUNT\n };\n this.chartType = Chart.Type.BAR;\n this.oldChartType = null;\n this.chart = null;\n this.chartColorScheme = 'chart-table-control';\n\n /** chart config selection */\n this.$chartSelect = null;\n this.$xAxisSelect = null;\n this.$yAxisSelect = null;\n this.$dataSelect = null;\n\n this.xAxis = null;\n this.yAxis = null;\n\n this.dateGroup = null;\n\n this._tableUpdatedHandler = this._onTableUpdated.bind(this);\n this._tableColumnStructureChangedHandler = this._onTableColumnStructureChanged.bind(this);\n this._chartValueClickedHandler = this._onChartValueClick.bind(this);\n }\n\n static DATE_GROUP_FLAG = 0x100;\n static MAX_AXIS_COUNT = 100;\n\n protected override _init(model: InitModelOf<this>) {\n super._init(model);\n this.table.on('columnStructureChanged', this._tableColumnStructureChangedHandler);\n\n this.chart = scout.create(Chart, {\n parent: this\n });\n }\n\n protected override _destroy() {\n this.table.off('columnStructureChanged', this._tableColumnStructureChangedHandler);\n super._destroy();\n }\n\n protected override _computeEnabled(inheritAccessibility: boolean, parentEnabled: boolean): boolean {\n if (!this._hasColumns() && !this.selected) {\n return false;\n }\n return super._computeEnabled(inheritAccessibility, parentEnabled);\n }\n\n protected _renderChart() {\n if (this.chart) {\n this.chart.render(this.$contentContainer);\n this.chart.$container.addClass(this.denseClass);\n }\n }\n\n protected override _createLayout(): ChartTableControlLayout {\n return new ChartTableControlLayout(this);\n }\n\n protected _renderChartType() {\n this._selectChartType();\n this.$yAxisSelect.toggleClass('hide', this.chartType !== Chart.Type.BUBBLE);\n this.$yAxisSelect.toggleClass('animated', scout.isOneOf(Chart.Type.BUBBLE, this.chartType, this.oldChartType) && !!this.oldChartType);\n this.$yAxisSelect.data('scroll-shadow').setVisible(false);\n this.$yAxisSelect.oneAnimationEnd(() => {\n scrollbars.update(this.$yAxisSelect);\n this.$yAxisSelect.data('scroll-shadow').setVisible(true);\n this.$yAxisSelect.removeClass('animated');\n });\n\n if (this.contentRendered) {\n this.chart.$container.animateAVCSD('opacity', 0, () => {\n this.chart.$container.css('opacity', 1);\n this._drawChart();\n });\n }\n }\n\n protected _selectChartType() {\n objects.values(this._chartTypeMap).forEach($element => {\n $element.removeClass('selected');\n });\n this._chartTypeMap[this.chartType].addClass('selected');\n }\n\n protected _renderChartGroup1() {\n this._renderChartGroup(1);\n }\n\n protected _renderChartGroup2() {\n this._renderChartGroup(2);\n }\n\n protected _renderChartGroup(groupId: 1 | 2) {\n if (!this._hasColumns()) {\n return;\n }\n let groupName = 'chartGroup' + groupId;\n let map = '_' + groupName + 'Map';\n let chartGroup = this[groupName];\n if (chartGroup) {\n let $element = this[map][chartGroup.id];\n $element.siblings('.select-axis').animateAVCSD('height', 30);\n $element.selectOne('selected');\n\n if (chartGroup.modifier > 0) {\n let dateGroupIndex = chartGroup.modifier ^ ChartTableControl.DATE_GROUP_FLAG;\n $element.animateAVCSD('height', 42);\n $element.children('.select-axis-group').text(this.dateGroup[dateGroupIndex][1]);\n }\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n protected _renderChartAggregation() {\n let $element = this._aggregationMap[this.chartAggregation.id || 'all'];\n if ($element) {\n $element.selectOne();\n $element\n .removeClass('data-sum')\n .removeClass('data-avg');\n $element.addClass(this._getAggregationCssClass());\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n protected _getAggregationCssClass(): string {\n switch (this.chartAggregation.modifier) {\n case TableMatrix.NumberGroup.COUNT:\n return 'data-count';\n case TableMatrix.NumberGroup.SUM:\n return 'data-sum';\n case TableMatrix.NumberGroup.AVG:\n return 'data-avg';\n default:\n return null;\n }\n }\n\n protected _renderChartSelect(cssClass: string, chartType: TableControlChartType, iconId: string) {\n let icon = scout.create(Icon, {\n parent: this,\n iconDesc: iconId,\n cssClass: cssClass\n });\n icon.render(this.$chartSelect);\n this.$contentContainer.one('remove', () => icon.destroy());\n let $iconContainer = icon.$container;\n $iconContainer\n .toggleClass('disabled', !this.enabledComputed || !this._hasColumns())\n .data('chartType', chartType);\n\n if (this.enabledComputed && this._hasColumns()) {\n $iconContainer.on('click', this._onClickChartType.bind(this));\n }\n\n this._chartTypeMap[chartType] = $iconContainer;\n }\n\n /**\n * Appends a chart selection divs to this.$contentContainer and sets the this.$chartSelect property.\n **/\n protected _renderChartSelectContainer() {\n // create container\n this.$chartSelect = this.$contentContainer.appendDiv('chart-select');\n\n // create chart types for selection\n this._chartTypeMap = {} as Record<TableControlChartType, JQuery>;\n\n let supportedChartTypes = this._getSupportedChartTypes();\n\n if (scout.isOneOf(Chart.Type.BAR, supportedChartTypes)) {\n this._renderChartSelect('chart-bar', Chart.Type.BAR, icons.DIAGRAM_BARS_VERTICAL);\n }\n if (scout.isOneOf(Chart.Type.BAR_HORIZONTAL, supportedChartTypes)) {\n this._renderChartSelect('chart-stacked', Chart.Type.BAR_HORIZONTAL, icons.DIAGRAM_BARS_HORIZONTAL);\n }\n if (scout.isOneOf(Chart.Type.LINE, supportedChartTypes)) {\n this._renderChartSelect('chart-line', Chart.Type.LINE, icons.DIAGRAM_LINE);\n }\n if (scout.isOneOf(Chart.Type.PIE, supportedChartTypes)) {\n this._renderChartSelect('chart-pie', Chart.Type.PIE, icons.DIAGRAM_PIE);\n }\n if (scout.isOneOf(Chart.Type.BUBBLE, supportedChartTypes)) {\n this._renderChartSelect('chart-bubble', Chart.Type.BUBBLE, icons.DIAGRAM_SCATTER);\n }\n }\n\n protected _getSupportedChartTypes(): TableControlChartType[] {\n return [\n Chart.Type.BAR,\n Chart.Type.BAR_HORIZONTAL,\n Chart.Type.LINE,\n Chart.Type.PIE,\n Chart.Type.BUBBLE\n ];\n }\n\n protected _onClickChartType(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget),\n chartType = $target.data('chartType');\n this.setChartType(chartType);\n }\n\n protected _onClickChartGroup(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget),\n groupId = $target.parent().data('groupId'),\n column = $target.data('column'),\n origModifier = $target.data('modifier');\n\n // do nothing when item is disabled\n if (!$target.isEnabled()) {\n return;\n }\n\n let modifier = $target.isSelected() ? this._nextDateModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let config = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartGroup(groupId, config);\n }\n\n protected _onClickAggregation(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget);\n // update modifier\n let origModifier = $target.data('modifier');\n let modifier = $target.isSelected() ? this._nextModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let column = $target.data('column');\n let aggregation = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartAggregation(aggregation);\n }\n\n protected _nextDateModifier(modifier: TableMatrixDateGroup): TableMatrixDateGroup {\n switch (modifier) {\n case TableMatrix.DateGroup.DATE:\n return TableMatrix.DateGroup.MONTH;\n case TableMatrix.DateGroup.MONTH:\n return TableMatrix.DateGroup.WEEKDAY;\n case TableMatrix.DateGroup.WEEKDAY:\n return TableMatrix.DateGroup.YEAR;\n case TableMatrix.DateGroup.YEAR:\n return TableMatrix.DateGroup.DATE;\n default:\n return modifier;\n }\n }\n\n protected _nextModifier(modifier: TableMatrixNumberGroup): TableMatrixNumberGroup {\n switch (modifier) {\n case TableMatrix.NumberGroup.SUM:\n return TableMatrix.NumberGroup.AVG;\n case TableMatrix.NumberGroup.AVG:\n return TableMatrix.NumberGroup.SUM;\n default:\n return modifier;\n }\n }\n\n setChartAggregation(chartAggregation: TableControlChartAggregation) {\n this.setProperty('chartAggregation', chartAggregation);\n }\n\n protected _setChartAggregation(chartAggregation: TableControlChartAggregation) {\n if (chartAggregation === this.chartAggregation) {\n return;\n }\n this._setProperty('chartAggregation', chartAggregation);\n if (this.contentRendered) {\n this._renderChartAggregation();\n }\n }\n\n setChartGroup1(chartGroup: TableControlChartGroup) {\n this.setProperty('chartGroup1', chartGroup);\n }\n\n protected _setChartGroup1(chartGroup: TableControlChartGroup) {\n this._setChartGroup(1, chartGroup);\n }\n\n setChartGroup2(chartGroup: TableControlChartGroup) {\n this.setProperty('chartGroup2', chartGroup);\n }\n\n protected _setChartGroup2(chartGroup: TableControlChartGroup) {\n this._setChartGroup(2, chartGroup);\n }\n\n protected _setChartGroup(groupId: 1 | 2, chartGroup: TableControlChartGroup) {\n let propertyName = 'chartGroup' + groupId;\n this._changeProperty(propertyName, chartGroup);\n }\n\n protected _changeProperty(prop: string, value: any) {\n if (value === this[prop]) {\n return;\n }\n this._setProperty(prop, value);\n if (this.contentRendered) {\n this['_render' + prop.charAt(0).toUpperCase() + prop.slice(1)]();\n }\n }\n\n setChartType(chartType: TableControlChartType) {\n this.oldChartType = this.chartType;\n this.setProperty('chartType', chartType);\n }\n\n protected _hasColumns(): boolean {\n return this._columns().length > 0;\n }\n\n protected _columns(): Column[] {\n return new TableMatrix(this.table, this.session).columns();\n }\n\n protected _axisCount(columnCount: (number | Column<any>)[][], column: Column<any>): number {\n let tmpColumn;\n for (let i = 0; i < columnCount.length; i++) {\n tmpColumn = columnCount[i][0];\n if (tmpColumn === column) {\n return columnCount[i][1] as number;\n }\n }\n return 0;\n }\n\n protected _plainAxisText(column: Column<any>, text: string): string {\n if (column.headerHtmlEnabled) {\n let plainText = strings.plainText(text);\n return plainText.replace(/\\n/g, ' ');\n }\n return text;\n }\n\n protected override _renderContent($parent: JQuery) {\n this.$contentContainer = $parent.appendDiv('chart-container');\n\n // scrollbars\n this._installScrollbars();\n\n this._renderChartSelectContainer();\n\n // group functions for dates\n this.dateGroup = [\n [TableMatrix.DateGroup.YEAR, this.session.text('ui.groupedByYear')],\n [TableMatrix.DateGroup.MONTH, this.session.text('ui.groupedByMonth')],\n [TableMatrix.DateGroup.WEEKDAY, this.session.text('ui.groupedByWeekday')],\n [TableMatrix.DateGroup.DATE, this.session.text('ui.groupedByDate')]\n ];\n\n // listeners\n this._filterRemovedListener = this.table.on('filterRemoved', event => {\n if (!(event.filter instanceof ChartTableUserFilter)) {\n return;\n }\n this.chart.setCheckedItems([]);\n });\n\n this._addListeners();\n\n this._renderAxisSelectorsContainer();\n let columnCount = this._renderAxisSelectors();\n\n // draw first chart\n this._renderChart();\n\n this._initializeSelection(columnCount);\n\n this._renderChartParts();\n\n this._drawChart();\n }\n\n protected _addListeners() {\n this.table.on('rowsInserted', this._tableUpdatedHandler);\n this.table.on('rowsDeleted', this._tableUpdatedHandler);\n this.table.on('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.on('valueClick', this._chartValueClickedHandler);\n }\n\n protected _renderAxisSelectorsContainer() {\n this.$axisSelectContainer = this.$contentContainer\n .appendDiv('axis-select-container');\n }\n\n protected _renderAxisSelectors(): (number | Column<any>)[][] {\n // create container for x/y-axis\n this.$xAxisSelect = this.$axisSelectContainer\n .appendDiv('xaxis-select')\n .data('groupId', 1);\n scrollbars.install(this.$xAxisSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n this.$yAxisSelect = this.$axisSelectContainer\n .appendDiv('yaxis-select')\n .data('groupId', 2);\n scrollbars.install(this.$yAxisSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n // map for selection (column id, $element)\n this._chartGroup1Map = {};\n this._chartGroup2Map = {};\n\n // find best x- and y-axis: best is 9 different entries\n let matrix = new TableMatrix(this.table, this.session),\n columnCount = matrix.columnCount(false); // filterNumberColumns false: number columns will be filtered below\n columnCount.sort((a, b) => {\n return Math.abs(a[1] as number - 8) - Math.abs(b[1] as number - 8);\n });\n\n let axisCount, enabled,\n numberOfAxisItems = 0,\n columns = matrix.columns(false); // filterNumberColumns false: number columns will be filtered below\n\n // all x/y-axis for selection\n for (let c1 = 0; c1 < columns.length; c1++) {\n let content, $div, $yDiv,\n column1 = columns[c1];\n\n // Check if data-spread is too large. This is a problem in large tables where a column has unique values.\n // We cannot create DOM elements for each unique value because this causes all browser to stop script\n // execution. May be in a later release we could implement some sort of data aggregation, but this is not\n // a simple task on the UI layer, because it requires some know-how about the entity represented by the table,\n // which we don't have in the UI. Another possible solution: make the charts scrollable, however this is\n // probably not a good idea, because with a lot of data, the chart fails to provide an oversight over the data\n // when the user must scroll and only sees a small part of the chart.\n if (column1 instanceof DateColumn) {\n // dates are always aggregated, and thus we must not check if the chart has \"too much data\".\n enabled = true;\n } else {\n axisCount = this._axisCount(columnCount, column1);\n enabled = (axisCount <= ChartTableControl.MAX_AXIS_COUNT);\n }\n\n content = this._axisContentForColumn(column1);\n\n $div = this.$contentContainer\n .makeDiv('select-axis', this._plainAxisText(column1, content.text))\n .data('column', column1)\n .setEnabled(enabled);\n\n if (!enabled) {\n if (this.chartGroup1 && this.chartGroup1.id === column1.id) {\n this.chartGroup1 = null;\n this.chartGroup2 = null;\n }\n if (this.chartGroup2 && this.chartGroup2.id === column1.id) {\n this.chartGroup2 = null;\n }\n }\n\n if (content.icon) {\n $div.addClass(content.icon.appendCssClass('font-icon'));\n }\n\n if (column1 instanceof DateColumn) {\n $div\n .data('modifier', TableMatrix.DateGroup.YEAR)\n .appendDiv('select-axis-group', this.dateGroup[0][1]);\n }\n\n // install click handler or tooltip\n if (enabled) {\n $div.on('click', this._onClickChartGroup.bind(this));\n tooltips.installForEllipsis($div, {\n parent: this\n });\n } else {\n tooltips.install($div, {\n parent: this,\n text: this.session.text('ui.TooMuchData')\n });\n }\n\n numberOfAxisItems++;\n $yDiv = $div.clone(true);\n this._chartGroup1Map[column1.id] = $div;\n this._chartGroup2Map[column1.id] = $yDiv;\n this.$xAxisSelect.append($div);\n this.$yAxisSelect.append($yDiv);\n }\n\n // map for selection (column id, $element)\n this._aggregationMap = {};\n\n if (this._hasColumns()) {\n // create container for data\n this.$dataSelect = this.$axisSelectContainer.appendDiv('data-select');\n scrollbars.install(this.$dataSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n // add data-count for no column restriction (all columns)\n let countDesc = this.session.text('ui.Count');\n this._aggregationMap.all = this.$dataSelect\n .appendDiv('select-data data-count', countDesc)\n .data('column', null)\n .data('modifier', TableMatrix.NumberGroup.COUNT);\n\n // all data for selection\n for (let c2 = 0; c2 < columns.length; c2++) {\n let column2 = columns[c2];\n let fakeNumberLabelCol2 = c2 + 1;\n\n if (column2 instanceof NumberColumn) {\n let columnText;\n if (strings.hasText(column2.text)) {\n columnText = this._plainAxisText(column2, column2.text);\n } else if (strings.hasText(column2.headerTooltipText)) {\n columnText = column2.headerTooltipText;\n } else {\n columnText = '[' + fakeNumberLabelCol2 + ']';\n }\n\n this._aggregationMap[column2.id] = this.$dataSelect\n .appendDiv('select-data data-sum', columnText)\n .data('column', column2)\n .data('modifier', TableMatrix.NumberGroup.SUM);\n }\n }\n\n // click handling for data\n $('.select-data', this.$contentContainer)\n .on('click', this._onClickAggregation.bind(this));\n }\n\n return columnCount;\n }\n\n protected _initializeSelection(columnCount: (number | Column<any>)[][]) {\n let $axisColumns;\n\n if (!this.chartType) {\n this.setChartType(Chart.Type.BAR);\n }\n\n // no id selected\n if (!this.chartAggregation || !this._aggregationMap[this.chartAggregation.id]) {\n this._setChartAggregation({\n id: null,\n modifier: TableMatrix.NumberGroup.COUNT\n });\n }\n\n // apply default selection\n if (!this.chartGroup1 || !this.chartGroup1.id || !this._chartGroup1Map[this.chartGroup1.id]) {\n $axisColumns = this.$xAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(1, columnCount, $axisColumns, 0 /* only use the first column for the first group */);\n }\n if (!this.chartGroup2 || !this.chartGroup2.id || !this._chartGroup2Map[this.chartGroup2.id]) {\n $axisColumns = this.$yAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(2, columnCount, $axisColumns, 1 /* try to use the second column for the second group (if available). Otherwise, the first column is used. */);\n }\n }\n\n /**\n * Applies the default column selection for the specified chartGroup.\n * The implementation only considers columns that are part of the specified columnCount matrix and $candidates array.\n * From all these columns the last match that is lower or equal to the specified maxIndex is set as default chart group.\n *\n * @param chartGroup The number of the chart group (1 or 2) for which the default column should be set.\n * @param columnCount Column-count matrix as returned by TableMatrix#columnCount(). Holds possible grouping columns.\n * @param $candidates jQuery array holding all axis columns that could be used as default.\n * @param maxIndex The maximum column index to use as default column for the specified chartGroup.\n */\n protected _setDefaultSelectionForGroup(chartGroup: 1 | 2, columnCount: (number | Column<any>)[][], $candidates: JQuery, maxIndex: number) {\n let col = this._getDefaultSelectedColumn(columnCount, $candidates, maxIndex);\n if (col) {\n this._setChartGroup(chartGroup, this._getDefaultChartGroup(col));\n }\n }\n\n protected _getDefaultSelectedColumn(columnCount: (number | Column<any>)[][], $candidates: JQuery, maxIndex: number): Column<any> {\n let matchCounter = 0,\n curColumn,\n result;\n for (let j = 0; j < columnCount.length && matchCounter <= maxIndex; j++) {\n curColumn = columnCount[j][0];\n if (this._existsInAxisColumns($candidates, curColumn)) {\n result = curColumn; // remember possible result\n matchCounter++;\n }\n }\n return result;\n }\n\n protected _existsInAxisColumns($candidates: JQuery, columnToSearch: Column<any>): boolean {\n for (let i = 0; i < $candidates.length; i++) {\n if ($candidates.eq(i).data('column') === columnToSearch) {\n return true;\n }\n }\n return false;\n }\n\n protected _getDefaultChartGroup(column: Column<any>): TableControlChartGroup {\n let modifier;\n if (column instanceof DateColumn) {\n modifier = 256;\n }\n return {\n id: column.id,\n modifier: modifier\n };\n }\n\n protected _renderChartParts() {\n this._renderChartType();\n this._renderChartAggregation();\n this._renderChartGroup1();\n this._renderChartGroup2();\n }\n\n protected _drawChart() {\n if (!this._hasColumns()) {\n this._hideChart();\n return;\n }\n\n let cube = this._calculateValues();\n\n if (cube && cube.length) {\n this.chart.setVisible(true);\n } else {\n this._hideChart();\n return;\n }\n\n let config: ChartConfig = {\n type: this.chartType,\n options: {\n handleResize: true,\n colorScheme: this.chartColorScheme,\n maxSegments: 5,\n plugins: {\n legend: {\n display: false\n }\n }\n }\n };\n\n let iconClasses = [];\n config.data = this._computeData(iconClasses, cube);\n this._adjustFont(config, iconClasses);\n\n this._adjustConfig(config);\n\n this.chart.setConfig(config);\n\n let checkedItems = this._computeCheckedItems(config.data.datasets[0].deterministicKeys);\n this.chart.setCheckedItems(checkedItems);\n }\n\n protected _hideChart() {\n this.chart.setConfig({\n type: this.chartType\n });\n this.chart.setVisible(false);\n }\n\n protected _getDatasetLabel(): string {\n let elem = this._aggregationMap[this.chartAggregation.id || 'all'];\n return (elem ? elem.text() : null) || this.session.text('ui.Value');\n }\n\n protected _calculateValues(): TableMatrixResult {\n // build matrix\n let matrix = new TableMatrix(this.table, this.session);\n\n // aggregation (data axis)\n let tableData = this.chartAggregation.id ? this._aggregationMap[this.chartAggregation.id].data('column') : -1;\n matrix.addData(tableData, this.chartAggregation.modifier);\n\n // find xAxis\n if (this.chartGroup1) {\n let axis = this._chartGroup1Map[this.chartGroup1.id].data('column');\n this.xAxis = matrix.addAxis(axis, this.chartGroup1.modifier);\n }\n\n // find yAxis\n // in case of bubble\n if (this.chartType === Chart.Type.BUBBLE && this.chartGroup2) {\n let axis2 = this._chartGroup2Map[this.chartGroup2.id].data('column');\n this.yAxis = matrix.addAxis(axis2, this.chartGroup2.modifier);\n } else {\n this.yAxis = null;\n }\n\n // return not possible to draw chart\n if (matrix.isEmpty() || !matrix.isMatrixValid()) {\n return;\n }\n\n // calculate matrix\n return matrix.calculate();\n }\n\n protected _getXAxis(): TableMatrixKeyAxis {\n return this.xAxis;\n }\n\n protected _getYAxis(): TableMatrixKeyAxis {\n return this.yAxis;\n }\n\n protected _computeData(iconClasses: string[], cube: TableMatrixResult): ChartData {\n let data = {\n datasets: [{\n label: this._getDatasetLabel()\n }]\n } as ChartData;\n if (!cube) {\n return data;\n }\n iconClasses = iconClasses || [];\n\n let segments = [];\n\n if (this.chartType === Chart.Type.BUBBLE) {\n segments = this._computeBubbleData(iconClasses, cube);\n } else {\n let xAxis = this._getXAxis();\n for (let x = 0; x < xAxis.length; x++) {\n let label,\n keyX = xAxis[x];\n if (xAxis.column instanceof NumberColumn) {\n // the axis will format numbers as two digit decimals and null/undefined as the text '-empty-' or something similar\n // only pass null/undefined to the axis as we want to leave the number format to the chart but need the '-empty-' string\n label = objects.isNullOrUndefined(keyX) ? xAxis.format(keyX) : keyX;\n } else {\n label = this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n }\n segments.push({\n value: cube.getValue([keyX])[0],\n label: label,\n deterministicKey: xAxis.keyToDeterministicKey(keyX)\n });\n }\n }\n let dataset = data.datasets[0],\n labels = [];\n\n dataset.data = [];\n dataset.deterministicKeys = [];\n\n segments.forEach(elem => {\n dataset.data.push(elem.value);\n dataset.deterministicKeys.push(elem.deterministicKey);\n if (!objects.isNullOrUndefined(elem.label)) {\n labels.push(elem.label);\n }\n });\n\n if (labels.length) {\n data.labels = labels;\n }\n\n return data;\n }\n\n protected _computeBubbleData(iconClasses: string[], cube: TableMatrixResult): { value: BubbleDataPoint; deterministicKey: TableControlDeterministicKey }[] {\n if (!cube) {\n return [];\n }\n iconClasses = iconClasses || [];\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n segments = [];\n for (let x = 0; x < xAxis.length; x++) {\n let keyX = xAxis[x],\n xValue = keyX;\n this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n if (!(xAxis.column instanceof NumberColumn) && xValue === null) {\n xValue = xAxis.max;\n }\n if (xAxis.column instanceof DateColumn) {\n xValue = xValue - xAxis.min;\n }\n for (let y = 0; y < yAxis.length; y++) {\n let keyY = yAxis[y],\n yValue = keyY,\n cubeValues = cube.getValue([keyX, keyY]);\n this._handleIconLabel(yAxis.format(keyY), yAxis, iconClasses);\n if (cubeValues && cubeValues.length) {\n if (!(yAxis.column instanceof NumberColumn) && yValue === null) {\n yValue = yAxis.max;\n }\n if (yAxis.column instanceof DateColumn) {\n yValue = yValue - yAxis.min;\n }\n segments.push({\n value: {\n x: xValue,\n y: yValue,\n z: cubeValues[0]\n },\n deterministicKey: [xAxis.keyToDeterministicKey(keyX), yAxis.keyToDeterministicKey(keyY)]\n });\n }\n }\n }\n return segments;\n }\n\n protected _handleIconLabel(label: string, axis: TableMatrixKeyAxis, iconClasses: string[]): string {\n if (axis && axis.isIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n iconClasses.push(...icon.appendCssClass('font-icon').split(' '));\n return icon.iconCharacter;\n }\n }\n return label;\n }\n\n protected _adjustFont(config: ChartConfig, iconClasses: string[]) {\n if (!config || !iconClasses) {\n return;\n }\n\n iconClasses = iconClasses.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n if (iconClasses.length) {\n let fontFamily = styles.get(iconClasses, 'font-family').fontFamily;\n if (this.chartType !== Chart.Type.PIE) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n ticks: {\n font: {\n family: fontFamily\n }\n }\n },\n y: {\n ticks: {\n font: {\n family: fontFamily\n }\n }\n }\n }\n });\n }\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n tooltip: {\n titleFont: {\n family: fontFamily\n }\n }\n }\n });\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n font: {\n family: fontFamily\n }\n }\n }\n });\n }\n }\n\n protected _adjustLabels(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis();\n if (this.chartType === Chart.Type.BUBBLE) {\n if (!(xAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n ticks: {\n callback: label => this._formatLabel(label, xAxis)\n }\n }\n }\n });\n }\n if (!(yAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n y: {\n ticks: {\n callback: label => this._formatLabel(label, yAxis)\n }\n }\n }\n });\n }\n } else {\n if (xAxis.column instanceof NumberColumn) {\n config.options = $.extend(true, {}, config.options, {\n reformatLabels: true\n });\n }\n }\n }\n\n protected _formatLabel(label: number, axis: TableMatrixKeyAxis): string {\n if (!axis) {\n return '' + label;\n }\n\n if (axis.column instanceof DateColumn) {\n label = label + axis.min;\n if (label !== parseInt('' + label) || (axis.length < 2 && (label < axis.min || label > axis.max))) {\n return null;\n }\n }\n if (axis.indexOf(null) !== -1) {\n if (label === axis.max) {\n label = null;\n } else if (label > axis.max) {\n return null;\n }\n }\n let formatted = axis.format(label);\n if (axis.isIcon) {\n let icon = icons.parseIconId(formatted);\n if (icon && icon.isFontIcon()) {\n formatted = icon.iconCharacter;\n }\n }\n return formatted;\n }\n\n protected _adjustConfig(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n this._adjustLabels(config);\n this._adjustClickable(config);\n\n if (this.chartType === Chart.Type.BUBBLE) {\n this._adjustBubble(config);\n } else if (this.chartType === Chart.Type.PIE) {\n this._adjustPie(config);\n } else {\n this._adjustScales(config);\n }\n }\n\n protected _adjustClickable(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n if (this._isChartClickable()) {\n config.options = $.extend(true, {}, config.options, {\n clickable: true,\n checkable: true,\n otherSegmentClickable: true\n });\n }\n }\n\n protected _isChartClickable(): boolean {\n return true;\n }\n\n protected _adjustBubble(config: ChartConfig) {\n if (!config || this.chartType !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.options.bubble = $.extend(true, {}, config.options.bubble, {\n sizeOfLargestBubble: 25,\n minBubbleSize: 5\n });\n }\n\n protected _adjustPie(config: ChartConfig) {\n if (!config || this.chartType !== Chart.Type.PIE) {\n return;\n }\n\n config.data.datasets[0].datalabels = {\n labels: {\n index: {\n display: 'auto',\n color: styles.get([this.chartColorScheme, this.chartType + '-chart', 'elements', 'label'], 'fill').fill,\n formatter: (value, context) => {\n return context.chart.data.labels[context.dataIndex];\n },\n anchor: 'end',\n align: 'end',\n clamp: true,\n offset: 10,\n padding: 4\n },\n labels: {}\n }\n };\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n display: true\n }\n }\n });\n // Compensate the margin of the container so that the chart is always centered vertically\n let margin = this.chart.$container.cssMarginTop() - this.chart.$container.cssMarginBottom();\n config.options = $.extend(true, {}, config.options, {\n layout: {\n padding: {\n top: 30 + (Math.sign(margin) < 0 ? Math.abs(margin) : 0),\n bottom: 30 + (Math.sign(margin) > 0 ? margin : 0)\n }\n }\n });\n }\n\n protected _adjustScales(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n beginAtZero: true\n },\n y: {\n beginAtZero: true\n }\n }\n });\n }\n\n protected _computeCheckedItems(deterministicKeys: TableControlDeterministicKey[]): ClickObject[] {\n if (!deterministicKeys) {\n return [];\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n tableFilter = this.table.getFilter(ChartTableUserFilter.TYPE) as ChartTableUserFilter,\n filters = [],\n checkedIndices = [];\n\n if (tableFilter && (tableFilter.xAxis || {}).column === (xAxis || {}).column && (tableFilter.yAxis || {}).column === (yAxis || {}).column) {\n filters = tableFilter.filters;\n }\n\n deterministicKeys.forEach((deterministicKey, idx) => {\n if (filters.filter(filter => (Array.isArray(filter.deterministicKey) && Array.isArray(deterministicKey)) ? arrays.equals(filter.deterministicKey, deterministicKey) : filter.deterministicKey === deterministicKey).length) {\n checkedIndices.push(idx);\n }\n });\n let datasetIndex = 0;\n if (this.chartType === Chart.Type.PIE) {\n let maxSegments = this.chart.config.options.maxSegments,\n collapsedIndices = arrays.init(deterministicKeys.length - maxSegments, null).map((elem, idx) => idx + maxSegments);\n if (!arrays.containsAll(checkedIndices, collapsedIndices)) {\n arrays.remove(checkedIndices, maxSegments - 1);\n }\n arrays.removeAll(checkedIndices, collapsedIndices);\n\n // first dataset is hidden on pie charts\n datasetIndex = 1;\n }\n\n let checkedItems = [];\n if (checkedIndices.length) {\n checkedIndices.forEach(index => {\n checkedItems.push({\n datasetIndex: datasetIndex,\n dataIndex: index\n });\n });\n }\n\n return checkedItems;\n }\n\n protected _onChartValueClick() {\n // prepare filter\n let filters = [];\n if (this.chart && this.chart.config.data) {\n let maxSegments = this.chart.config.options.maxSegments,\n dataset = this.chart.config.data.datasets[0],\n getFilters: (index: number) => { deterministicKey: TableControlDeterministicKey } | { deterministicKey: TableControlDeterministicKey }[] = index => ({deterministicKey: dataset.deterministicKeys[index]});\n if (this.chartType === Chart.Type.PIE) {\n getFilters = index => {\n index = parseInt('' + index);\n if (maxSegments && maxSegments === index + 1) {\n return arrays.init(dataset.deterministicKeys.length - index, null).map((elem, idx) => ({deterministicKey: dataset.deterministicKeys[idx + index]}));\n }\n return {deterministicKey: dataset.deterministicKeys[index]};\n };\n }\n\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === 0)\n .map(item => item.dataIndex);\n checkedIndices.forEach(index => {\n arrays.pushAll(filters, getFilters(index));\n });\n }\n\n // filter function\n if (filters.length) {\n let filter = scout.create(ChartTableUserFilter, {\n session: this.session,\n table: this.table,\n text: this.tooltipText,\n xAxis: this._getXAxis(),\n yAxis: this._getYAxis(),\n filters: filters\n });\n\n this.table.addFilter(filter);\n } else {\n this.table.removeFilterByKey(ChartTableUserFilter.TYPE);\n }\n }\n\n protected _axisContentForColumn(column: Column<any>): { text: string; icon?: IconDesc } {\n let text = column.text;\n if (strings.hasText(text)) {\n return {\n text: text\n };\n }\n\n if (column.headerIconId) {\n let icon = icons.parseIconId(column.headerIconId);\n if (icon.isFontIcon()) {\n return {\n text: icon.iconCharacter,\n icon: icon\n };\n }\n }\n\n if (column.headerTooltipText) {\n return {\n text: column.headerTooltipText\n };\n }\n\n return {\n text: '[' + (this._columns().indexOf(column) + 1) + ']'\n };\n }\n\n protected override _removeContent() {\n this._removeScrollbars();\n this.$contentContainer.remove();\n this.chart.remove();\n this.table.events.removeListener(this._filterRemovedListener);\n this._removeListeners();\n this.oldChartType = null;\n this.recomputeEnabled();\n }\n\n protected _removeScrollbars() {\n this.$xAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n scrollbars.uninstall(this.$xAxisSelect, this.session);\n this.$yAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n scrollbars.uninstall(this.$yAxisSelect, this.session);\n scrollbars.uninstall(this.$dataSelect, this.session);\n this._uninstallScrollbars();\n }\n\n protected _removeListeners() {\n this.table.off('rowsInserted', this._tableUpdatedHandler);\n this.table.off('rowsDeleted', this._tableUpdatedHandler);\n this.table.off('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.off('valueClick', this._chartValueClickedHandler);\n }\n\n protected _onTableUpdated(event?: Event<Table>) {\n if (this._tableUpdatedTimeOutId) {\n return;\n }\n\n this._tableUpdatedTimeOutId = setTimeout(() => {\n this._tableUpdatedTimeOutId = null;\n\n if (!this.rendered) {\n return;\n }\n\n this._setChartGroup1(null);\n this._setChartGroup2(null);\n this.removeContent();\n this.renderContent();\n });\n }\n\n protected _onTableColumnStructureChanged() {\n this.recomputeEnabled();\n if (this.contentRendered && this.selected) {\n this._onTableUpdated();\n }\n }\n}\n\nexport type TableControlChartType = typeof Chart.Type['BAR' | 'BAR_HORIZONTAL' | 'LINE' | 'PIE' | 'BUBBLE'];\n\nexport type TableControlChartAggregation = {\n id?: string;\n modifier?: TableMatrixNumberGroup;\n};\n\nexport type TableControlChartGroup = {\n id?: string;\n modifier?: TableMatrixNumberGroup | TableMatrixDateGroup;\n};\n\nexport type TableControlDeterministicKey = (number | string) | (number | string)[];\n\n// extend chart.js\ndeclare module 'chart.js' {\n interface ChartDatasetProperties<TType extends ChartJsType, TData> {\n deterministicKeys?: TableControlDeterministicKey[];\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableControlAdapter} from '@eclipse-scout/core';\n\nexport class ChartTableControlAdapter extends TableControlAdapter {\n\n constructor() {\n super();\n this._addRemoteProperties(['chartType', 'chartAggregation', 'chartGroup1', 'chartGroup2']);\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {BaseDoEntity, IChartTableControlConfigDo, typeName} from '@eclipse-scout/core';\n\n@typeName('scout.ChartTableControlConfig')\nexport class ChartTableControlConfigDo extends BaseDoEntity implements IChartTableControlConfigDo {\n chartTypeId?: string;\n chartGroup1ColumnId?: string;\n chartGroup1Modifier?: number;\n chartGroup2ColumnId?: string;\n chartGroup2Modifier?: number;\n chartAggregationColumnId?: string;\n chartAggregationModifier?: number;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ActionEventMap, PropertyChangeEvent} from '@eclipse-scout/core';\nimport {TableControlChartAggregation, TableControlChartGroup, TableControlChartType} from './ChartTableControl';\n\nexport interface ChartTableControlEventMap extends ActionEventMap {\n 'propertyChange:chartAggregation': PropertyChangeEvent<TableControlChartAggregation>;\n 'propertyChange:chartGroup1': PropertyChangeEvent<TableControlChartGroup>;\n 'propertyChange:chartGroup2': PropertyChangeEvent<TableControlChartGroup>;\n 'propertyChange:chartType': PropertyChangeEvent<TableControlChartType>;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractLayout, scrollbars} from '@eclipse-scout/core';\nimport {ChartTableControl} from '../../index';\n\nexport class ChartTableControlLayout extends AbstractLayout {\n control: ChartTableControl;\n\n constructor(control: ChartTableControl) {\n super();\n this.control = control;\n }\n\n override layout($container: JQuery) {\n if (!this.control.contentRendered) {\n return;\n }\n scrollbars.update(this.control.$contentContainer);\n scrollbars.update(this.control.$xAxisSelect);\n scrollbars.update(this.control.$yAxisSelect);\n scrollbars.update(this.control.$dataSelect);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableControlModel} from '@eclipse-scout/core';\nimport {TableControlChartAggregation, TableControlChartGroup, TableControlChartType} from './ChartTableControl';\n\nexport interface ChartTableControlModel extends TableControlModel {\n chartAggregation?: TableControlChartAggregation;\n chartGroup1?: TableControlChartGroup;\n chartGroup2?: TableControlChartGroup;\n chartType?: TableControlChartType;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {arrays, TableMatrix, TableMatrixKeyAxis, TableRow, TableUserFilter, TableUserFilterAddedEventData} from '@eclipse-scout/core';\nimport {ChartTableUserFilterModel} from '../../index';\nimport {TableControlDeterministicKey} from './ChartTableControl';\n\nexport class ChartTableUserFilter extends TableUserFilter implements ChartTableUserFilterModel {\n declare model: ChartTableUserFilterModel;\n\n text: string;\n xAxis: TableMatrixKeyAxis;\n yAxis: TableMatrixKeyAxis;\n filters: { deterministicKey: TableControlDeterministicKey }[];\n columnIdX: string;\n columnIdY: string;\n\n constructor() {\n super();\n this.filterType = ChartTableUserFilter.TYPE;\n this.text = null;\n this.xAxis = null;\n this.yAxis = null;\n this.filters = [];\n this.columnIdX = null;\n this.columnIdY = null;\n }\n\n static TYPE = 'CHART';\n\n createLabel() {\n return this.text;\n }\n\n override createFilterAddedEventData(): ChartTableUserFilterAddedEventData {\n let data: ChartTableUserFilterAddedEventData = super.createFilterAddedEventData();\n data.text = this.text;\n data.filters = this.filters;\n data.columnIdX = (this.xAxis && this.xAxis.column) ? this.xAxis.column.id : null;\n data.columnIdY = (this.yAxis && this.yAxis.column) ? this.yAxis.column.id : null;\n return data;\n }\n\n calculate() {\n let matrix = new TableMatrix(this.table, this.session);\n let columnX = this.table.columnById(this.columnIdX);\n let axisGroupX = columnX.createFilter().axisGroup();\n this.xAxis = matrix.addAxis(columnX, axisGroupX);\n if (this.columnIdY) {\n let columnY = this.table.columnById(this.columnIdY);\n let axisGroupY = columnY.createFilter().axisGroup();\n this.yAxis = matrix.addAxis(columnY, axisGroupY);\n }\n matrix.calculate();\n }\n\n accept(row: TableRow): boolean {\n if (!this.xAxis) {\n // Lazy calculation. It is not possible on init, because the table is not rendered yet.\n this.calculate();\n }\n let value = this.xAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyX = this.xAxis.normDeterministic(value);\n\n if (!this.yAxis) {\n return this.filters.filter(filter => filter.deterministicKey === deterministicKeyX).length > 0;\n }\n value = this.yAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyY = this.yAxis.normDeterministic(value);\n return this.filters.filter(filter => arrays.equals(filter.deterministicKey as (number | string)[], [deterministicKeyX, deterministicKeyY])).length > 0;\n }\n}\n\nexport type ChartTableUserFilterAddedEventData = TableUserFilterAddedEventData & {\n filters?: { deterministicKey: TableControlDeterministicKey }[];\n columnIdX?: string;\n columnIdY?: string;\n};\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableMatrixKeyAxis, TableUserFilterModel} from '@eclipse-scout/core';\nimport {TableControlDeterministicKey} from './ChartTableControl';\n\nexport interface ChartTableUserFilterModel extends TableUserFilterModel {\n text?: string;\n xAxis?: TableMatrixKeyAxis;\n yAxis?: TableMatrixKeyAxis;\n columnIdX?: string;\n columnIdY?: string;\n filters?: { deterministicKey: TableControlDeterministicKey }[];\n}\n","/*\n * Copyright (c) 2010, 2024 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ColorScheme, FormFieldTile, PropertyChangeEvent} from '@eclipse-scout/core';\nimport {Chart, ChartField, ChartFieldTileModel} from '../index';\nimport {ChartConfig} from '../chart/Chart';\n\nexport class ChartFieldTile extends FormFieldTile implements ChartFieldTileModel {\n declare model: ChartFieldTileModel;\n declare tileWidget: ChartField;\n\n protected _chartConfigChangeHandler: (event: PropertyChangeEvent<ChartConfig, Chart>) => void;\n\n constructor() {\n super();\n this._chartConfigChangeHandler = this._onChartConfigChange.bind(this);\n }\n\n protected override _setColorScheme(colorScheme: ColorScheme | string) {\n super._setColorScheme(colorScheme);\n this._updateChartColorScheme();\n }\n\n protected _updateChartColorScheme() {\n let config = $.extend(true, {}, this.tileWidget.chart.config, {\n options: {\n colorScheme: this.colorScheme\n }\n });\n\n this.tileWidget.chart.setConfig(config);\n }\n\n protected _onChartConfigChange(event: PropertyChangeEvent<ChartConfig, Chart>) {\n this._updateChartColorScheme();\n }\n\n protected override _setTileWidget(tileWidget: ChartField) {\n if (this.tileWidget) {\n this.tileWidget.chart.off('propertyChange:config', this._chartConfigChangeHandler);\n }\n super._setTileWidget(tileWidget);\n this._updateChartColorScheme();\n this.tileWidget.chart.on('propertyChange:config', this._chartConfigChangeHandler);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldTileAdapter} from '@eclipse-scout/core';\n\nexport class ChartFieldTileAdapter extends FormFieldTileAdapter {\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ChartField} from '../index';\nimport {WidgetTileModel} from '@eclipse-scout/core';\n\nexport interface ChartFieldTileModel extends WidgetTileModel {\n tileWidget?: ChartField;\n}\n","module.exports = Chart;","module.exports = ChartDataLabels;","module.exports = jQuery;","module.exports = scout;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":["ChartTableControlConfigHelper","scout","ChartTableControl","ChartTableControlConfigDo","ChartTableControlConfigHelperImpl","_exportConfig","page","detailTable","chartTableControl","findTableControl","selected","create","chartTypeId","chartType","chartGroup1ColumnId","chartGroup1","id","chartGroup1Modifier","modifier","chartGroup2ColumnId","chartGroup2","chartGroup2Modifier","chartAggregationColumnId","chartAggregation","chartAggregationModifier","_importConfig","config","setSelected","setChartType","setChartGroup1","setChartGroup2","setChartAggregation","arrays","PropertyEventEmitter","AbstractChartRenderer","chart","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","constructor","validate","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","options","autoColor","ensure","colorHexValue","cssClass","axes","render","requestAnimation","configAnimationDuration","animation","duration","setAnimationDuration","_render","renderCheckedItems","_renderCheckedItems","updateData","isDataUpdatable","_updateData","isDetachSupported","refresh","remove","setProperty","_renderAnimationDuration","_setAnimationDuration","_setProperty","arguments","undefined","afterRemoveFunc","_removeAnimated","_remove","shouldAnimateRemoveOnUpdate","opts","aria","ObjectIdProvider","strings","styles","$","Chart","AbstractSvgChartRenderer","chartBox","clipId","maskId","suppressLegendBox","height","width","chartAnimationStopping","$svg","get","createUiSeqId","FONT_SIZE_SMALLEST","FONT_SIZE_SMALL","FONT_SIZE_MIDDLE","FONT_SIZE_BIG","$container","appendSVG","role","linkChartWithFieldLabel","getFirstOpaqueBackgroundColor","_initChartBox","_useFontSizeBig","addClass","_useFontSizeMiddle","_useFontSizeSmall","_useFontSizeSmallest","isAttached","_renderInternal","$chartSvg","$field","parents","$fieldLabel","eq","children","linkElementWithLabel","stop","_createClickObject","xIndex","datasetIndex","dataIndex","_measureText","text","legendLabelClass","$label","attr","textBounds","getBBox","e","_renderLine","x1","y1","x2","y2","lineClass","$line","animateSVG","_renderLineLabel","x","y","label","labelClass","drawBackground","$background","xOffset","yOffset","mX","mY","_createAnimationObjectWithTabIndexRemoval","animationFunc","step","now","fx","bind","DEFAULT_ANIMATION_DURATION","complete","removeAttr","_addClipping","$clip","$mask","find","each","attrXLINK","_renderWireLegend","legendPositions","className","drawBackgroundBox","plugins","tooltip","enabled","detachFunc","attachFunc","removeFunc","legend","padding","backgroundWidth","lineHeight","backgroundHeight","positions","$legend","lengthLegend","horizontalSpace","h","Array","isArray","posIndex","yPos","v","truncateText","Math","max","getComputedTextLength","push","autoPosition","posFunc","call","css","forEach","index","add","line","wires","$wire","detach","append","ChartJsRenderer","ChartLayout","FulfillmentChartRenderer","SalesfunnelChartRenderer","SpeedoChartRenderer","VennChartRenderer","colorSchemes","HtmlComponent","objects","Widget","checkedItems","chartRenderer","_updatedOnce","_updateChartTimeoutId","_updateChartOpts","_updateChartOptsWhileNotAttached","Type","PIE","LINE","BAR","BAR_HORIZONTAL","COMBO_BAR_LINE","FULFILLMENT","SPEEDO","SALESFUNNEL","VENN","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","SCATTER","Position","TOP","BOTTOM","LEFT","RIGHT","CENTER","DEFAULT_DEBOUNCE_TIMEOUT","_init","model","setConfig","_setData","$parent","appendDiv","htmlComp","install","setLayout","_renderProperties","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","_renderOnAttach","updateChartOptsWhileNotAttached","splice","_updateChartRenderer","extend","setData","setCheckedItems","_renderData","onlyUpdateData","defaultConfig","type","colorMode","ChartColorMode","AUTO","colorScheme","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","datalabels","display","position","pointsVisible","ensureColorScheme","equalsRecursive","oldConfigWithNewData","transferLabelMap","source","target","identifier","isEmpty","scales","_renderConfig","removeClass","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","_renderEnabled","toggleClass","toggleColorSchemeClasses","enforceRerender","onlyRefresh","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","removing","trigger","_resolveChartRenderer","handleValueClick","clickedItem","originalEvent","checkedItem","ModelAdapter","ChartAdapter","_onWidgetValueClick","event","_send","_onWidgetEvent","chartJsDateAdapter","_adapters","chartJsAdapters","CategoryScale","ChartJs","graphics","numbers","Point","Tooltip","tooltips","ChartDataLabels","register","defaults","maintainAspectRatio","elements","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","bar","borderSkipped","labels","usePointStyle","boxHeight","overrides","scatter","bubble","layout","autoPadding","chartJsGlobalsInitialized","PHI","sqrt","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","chartJs","onlyIntegers","maxXAxesTicksHeight","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","resetDatasetAfterHover","legendHoverDatasets","$canvas","_labelFormatter","_xLabelFormatter","_yLabelFormatter","_xAxisFitter","_yAxisFitter","_radialChartDatalabelsDisplayHandler","_radialChartDatalabelsFormatter","_datalabelsFormatter","_datalabelBackgroundColorHandler","_legendLabelGenerator","_clickHandler","_hoverHandler","_pointerHoverHandler","_legendClickHandler","_legendHoverHandler","_legendPointerHoverHandler","_legendLeaveHandler","_legendPointerLeaveHandler","_resizeHandler","_tooltipTitleGenerator","_tooltipItemsGenerator","_tooltipLabelGenerator","_tooltipLabelValueGenerator","_tooltipLabelColorGenerator","_tooltipRenderer","_tooltip","_tooltipTimeoutId","_updatingDatalabels","_createLabelFormatter","_formatLabel","_formatXLabel","_formatYLabel","_fitXAxis","_fitYAxis","_displayDatalabelsOnRadialChart","_formatDatalabelsOnRadialChart","_formatDatalabels","_getBackgroundColorOfDataset","_generateLegendLabels","_onClick","_onHover","_onHoverPointer","_onLegendClick","_onLegendHover","_onLegendHoverPointer","_onLegendLeave","_onLegendLeavePointer","_onResize","_generateTooltipTitle","_generateTooltipItems","_generateTooltipLabel","_generateTooltipLabelValue","_generateTooltipLabelColor","_renderTooltip","chartDataValid","isOneOf","chartConfigDataValid","appendElement","hidden","font","family","_date","override","getAdapter","_adjustConfig","_renderChart","destroy","getContext","_adjustSize","chartArea","isDatasetVisible","getDatasetMeta","visible","targetData","sourceData","transferProperty","property","setToUndefined","src","min","targetLength","sourceLength","findDataset","datasetId","findDatasetIndex","findIndex","every","isNullOrUndefined","idx","targetDataset","sourceDataset","_adjustDatasetBorderWidths","deleted","sort","a","b","yDiffType","r","axis","ticks","stepSize","update","_checkItems","transferArrayValues","indices","changed","isNaN","checkedIndices","map","uncheckedIndices","init","elem","removeAll","backgroundColor","checkedBackgroundColor","hoverBackgroundColor","checkedHoverBackgroundColor","pointBackgroundColor","checkedPointBackgroundColor","pointHoverBackgroundColor","checkedPointHoverBackgroundColor","pointRadius","checkedPointRadius","uncheckedBackgroundColor","uncheckedHoverBackgroundColor","uncheckedPointBackgroundColor","uncheckedPointHoverBackgroundColor","uncheckedPointRadius","stopAnimations","_adjustType","_computeDatasets","_adjustData","_adjustLegend","_adjustTooltip","_adjustGrid","_adjustPlugins","_adjustColors","_adjustClickHandler","_adjustResizeHandler","scaleLabelByTypeMap","_isHorizontalBar","indexAxis","setLabelMap","labelMap","isEmptyObject","isHorizontalBar","_computeLabelMap","groupName","_adjustBarBorderWidth","_adjustMaxSegments","_adjustBubbleRadii","_adjustOnlyIntegers","_adjustDatasetBorderWidth","hover","borderWidthIdentifier","borderWidthBackupIdentifier","backgroundColorIdentifier","borderColorIdentifier","isFunction","isBorderWidthArray","isBackgroundColorArray","isBorderColorArray","dataLength","borderWidthBackup","borderColor","equals","newData","slice","reduce","newLabels","maxSegmentsExceeded","_isMaxSegmentsExceeded","otherSegmentClickable","z","pow","isInteger","generateLabels","boxWidth","callbacks","title","items","labelValue","labelColor","external","tooltipItems","tooltipItem","xAxis","yAxis","axisLabels","_getAxisLabels","xTickLabel","callback","_createTooltipAttribute","encode","yTickLabel","reformatLabels","xAxisLabel","yAxisLabel","_resolveAxisLabel","axisLabel","defaultLabel","isString","tooltipLabel","tooltipLabelValue","tooltipColor","xAxisValues","yAxisValues","itemsText","_getItemDetails","_createTooltipScatterAttribute","tableHeader","tableFooter","box","isObject","legendColor","_adjustColorOpacity","tooltipLabelColor","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","value","isTitle","color","xValue","yValue","context","isHideTooltip","opacity","dataPoints","isTooltipShowing","_renderTooltipLater","DEFAULT_TOOLTIP_DELAY","firstDataPoint","tooltipOptions","tooltipCallbacks","tooltipTitle","tooltipText","join","positionAndOffset","_computeTooltipPositionAndOffset","offset","caretX","offsetX","caretY","offsetY","objectType","parent","$anchor","htmlEnabled","tooltipPosition","tooltipDirection","originProducer","origin","offsetBounds","offsetProducer","reposition","fontFamily","titleFont","maxLabelPrefSize","prefSize","avg","element","getProps","startAngle","endAngle","angle","PI","mid","left","innerRadius","outerRadius","cos","sin","_adjustScalesR","_adjustScalesXY","minSpaceBetweenTicks","beginAtZero","angleLines","pointLabels","size","_adjustXAxis","_adjustYAxis","grid","drawTicks","border","afterCalculateLabelRotation","afterFit","_adjustPluginsDatalabels","formatter","onProgress","onComplete","updateDatalabels","metas","getSortedVisibleDatasetMetas","activeElements","getActiveElements","inactiveElements","meta","activeIndex","activeElement","_actives","afterEvent","updateDatalabelsAndDefaultCallback","defaultCallback","borderRadius","anchor","align","handleFormatter","_getNumberFormatter","numberFormatter","renderer","scale","_formatCategory","_formatLabelMap","_getXLabelMap","_getYLabelMap","isNumber","getLabelForValue","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","fontDefaults","ticksDefaults","ticksFontDefaults","fontSize","maxRotation","chartAreaHeight","top","bottom","ticksFont","maxLabelLength","labelSizes","_labelSizes","widest","measureText","ctx","tick","tickLength","maxWidth","midRadius","radius1","diameter1","diameter2","sum","_computeSumOfVisibleElements","roundingError","roundedResults","result","roundedResult","round","getDataVisibility","_adjustColorSchemeCssClass","_adjustDatasetColors","_adjustLegendColors","_adjustScalesRColors","_adjustScalesXYColors","_adjustPluginColors","getCssClasses","multipleColorsPerDataset","DATASET","DATA","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColors","_computeDatasetColors","getColor","colorsArray","candidate","hoverBorderColor","datasetLength","ensureColorArray","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","_computePointHoverColor","fill","additionalProperties","stroke","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","colorHexValues","rgbColor","hexToRgb","adjustColor","darker","darkerColor","datalabelColor","_computeDatalabelColor","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","_computeLabelColor","defaultTypeGenerateLabels","defaultGenerateLabels","legendProps","legendLabelOptions","cssWidth","fillStyle","strokeStyle","labelBackdropColor","_computeLabelBackdropColor","gridColor","_computeGridColor","scaleTicksColor","_computeScaleTicksColor","backdropColor","axisLabelColor","_computeAxisLabelColor","_adjustPluginsDatalabelColors","onClick","onHover","onLeave","native","stopPropagation","relevantItem","_selectRelevantItem","itemIndex","clickObject","yIndex","chartDatasets","_restoreBackgroundColor","_setHoverBackgroundColor","legendItem","defaultTypeLegendClick","defaultLegendClick","datasetType","_updateHoverStyle","backgroundColorBackup","mode","updateHoverStyle","handleResize","onResize","_adjustBubbleSizes","_adjustGridMaxMin","maxMinR","_computeMaxMinValue","exact","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","minBubbleSize","right","floor","boundRange","space","sums","calculateSum","stacked","extractValue","j","adjust","maxBoundary","minBoundary","_calculateBoundary","ceil","valuePerPixel","paddingValue","roundingFunctionPositive","roundingFunctionNegative","roundingFunction","changeValueSign","_calculateBoundaryPositive","p","log","LN10","rAxis","minSpaceBetweenXTicks","minSpaceBetweenYTicks","maxXTicks","maxYTicks","yBoundaries","_computeYBoundaries","yBoundary","yBoundaryDiffType","_adjustAxisMaxMin","xBoundary","_computeXBoundaryPointElement","_computeBoundaryPointElement","boundary","keys","Object","Number","isFinite","_computeYBoundaryPointElement","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxRangeBetweenTwoTicks","maxTicksLimit","suggestedMax","suggestedMin","AbstractLayout","Tile","ready","findParent","hasClass","resize","animationTriggered","segmentSelectorForAnimation","fullR","fulfillment","startValue","total","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","on","animate","tabIndex","description","s","pathString","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","paddingBetweenLabel","dataAnalyzeResult","barHeight","barAreaWidth","centerX","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","_analyzeData","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","_renderBarsNormalized","_renderBarsAccordingToValues","barCount","startPointX","delta","minLastWidth","secondLastWidth","barLabel","widthBottom","yCoord","renderPolyOptions","xStart","yStart","rect","_renderPolygon","_renderLabel","_renderBarLabel","labelLineWidth","_renderLabelSeparatorLine","_renderConversionRate","_calcConversionRate","secondLabel","barIndexFromTop","labelOffset","labelIndex","_dynamicCssClass","desc","_renderWireLabels","$text","labelPositionFunc","labelWidth","labelHeight","mouseIn","mouseOut","barWidth","conversionRate","ctrlY","points","_calcPolygonPoints","$poly","expandFunc","expand","fxPos","xOffsetTop","xOffsetBottom","widthPerN","valueBefore","valueGroups","valueGroup","shrink","small","RoundingMode","scaleWeight","my","parts","numSegmentsPerPart","segmentWidth","widthOfSegmentWithGap","$filledParts","$pointer","speedo","greenAreaPosition","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","ONE_THOUSAND","TEN_THOUSAND","ONE_MILLION","ARC_MIN","ARC_MAX","_staticBlock","_defineProperty","numTotalSegments","numTotalGaps","ARC_RANGE","SEGMENT_GAP","valuePercentage","_getValuePercentage","segmentToPointAt","_getSegmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","_limitValue","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","to","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","_renderSegment","colorClass","_pathSegment","_getColorForPart","segPos","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","millions","HALF_UP","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","maxD","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","d12","d13","d23","distR","_next","cancel","_end","_iteration","r1","r2","r3","d","minX","maxX","minY","maxY","stepX","stepY","a1","a2","a3","a12","a13","a23","a123","testX","testY","t1","t2","t3","aTotal","error","_error","VennCircle","VennCircleHelper","centerY","numberOfCircles","readyToDraw","wasCircle","vennCircleHelper","async3Calculator","vennNumber1","vennReal1","vennNumber2","vennReal2","vennNumber3","vennReal3","$v1","$v2","$v3","venn","_createCircle","animationDurationRender","draw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","v1","calcR","setLegend","addLabel","v2","real","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","findBalance3","animated","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","DateFormat","dates","formats","_getFormats","parse","Date","getTime","hasText","dateFormat","parseJsonDate","timestamp","Error","amount","unit","date","shiftTime","shift","diff","compareDays","compareMonths","getFullYear","startOf","weekday","setMilliseconds","setSeconds","setMinutes","setHours","firstDayOfWeek","trunc","setDate","setMonth","getMonth","endOf","getDate","_getNumberOfDays","endOfQuarterMonth","datetime","dateFormatPatternDefault","timeFormatPatternDefault","millisecond","second","minute","hour","day","week","month","quarter","year","isLeapYear","FormField","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeChart","_removeField","_linkWithLabel","$element","FormFieldAdapter","ChartFieldAdapter","ObjectFactory","self","registerNamespace","addObjectFactories","DateColumn","Icon","icons","NumberColumn","scrollbars","TableControl","TableMatrix","ChartTableControlLayout","ChartTableUserFilter","oldChartType","chartColorScheme","dateGroup","$chartSelect","$axisSelectContainer","$xAxisSelect","$yAxisSelect","$dataSelect","_chartTypeMap","_aggregationMap","_chartGroup1Map","_chartGroup2Map","_tableUpdatedHandler","_tableColumnStructureChangedHandler","_chartValueClickedHandler","_filterRemovedListener","_tableUpdatedTimeOutId","iconId","CHART","NumberGroup","COUNT","_onTableUpdated","_onTableColumnStructureChanged","_onChartValueClick","DATE_GROUP_FLAG","MAX_AXIS_COUNT","table","_destroy","off","_computeEnabled","inheritAccessibility","parentEnabled","_hasColumns","$contentContainer","denseClass","_createLayout","_selectChartType","setVisible","oneAnimationEnd","contentRendered","animateAVCSD","_drawChart","_renderChartGroup1","_renderChartGroup","_renderChartGroup2","groupId","chartGroup","siblings","selectOne","dateGroupIndex","_renderChartAggregation","_getAggregationCssClass","SUM","AVG","_renderChartSelect","icon","iconDesc","one","$iconContainer","enabledComputed","_onClickChartType","_renderChartSelectContainer","supportedChartTypes","_getSupportedChartTypes","DIAGRAM_BARS_VERTICAL","DIAGRAM_BARS_HORIZONTAL","DIAGRAM_LINE","DIAGRAM_PIE","DIAGRAM_SCATTER","$target","currentTarget","_onClickChartGroup","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_onClickAggregation","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_setChartGroup1","_setChartGroup2","propertyName","_changeProperty","prop","charAt","toUpperCase","_columns","columns","_axisCount","columnCount","tmpColumn","_plainAxisText","headerHtmlEnabled","plainText","replace","_renderContent","_installScrollbars","_addListeners","_renderAxisSelectorsContainer","_renderAxisSelectors","_initializeSelection","_renderChartParts","matrix","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","_axisContentForColumn","makeDiv","setEnabled","appendCssClass","installForEllipsis","clone","countDesc","all","c2","column2","fakeNumberLabelCol2","columnText","headerTooltipText","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","_hideChart","cube","_calculateValues","iconClasses","_computeData","_adjustFont","_computeCheckedItems","deterministicKeys","_getDatasetLabel","tableData","addData","addAxis","axis2","isMatrixValid","calculate","_getXAxis","_getYAxis","segments","_computeBubbleData","keyX","_handleIconLabel","getValue","deterministicKey","keyToDeterministicKey","keyY","cubeValues","isIcon","parseIconId","isFontIcon","split","iconCharacter","_adjustLabels","parseInt","formatted","_adjustClickable","_adjustBubble","_adjustPie","_adjustScales","_isChartClickable","clamp","margin","cssMarginTop","cssMarginBottom","tableFilter","getFilter","TYPE","filters","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","_removeContent","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","uninstall","_uninstallScrollbars","removeContent","renderContent","TableControlAdapter","ChartTableControlAdapter","_addRemoteProperties","BaseDoEntity","typeName","__decorate","control","TableUserFilter","columnIdX","columnIdY","filterType","createLabel","createFilterAddedEventData","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","accept","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","FormFieldTile","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_setColorScheme","_updateChartColorScheme","tileWidget","_setTileWidget","FormFieldTileAdapter","ChartFieldTileAdapter"],"sourceRoot":""}
1
+ {"version":3,"file":"eclipse-scout-chart.js","mappings":"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","sources":["webpack:///./src/bookmark/ChartTableControlConfigHelperImpl.ts","webpack:///./src/chart/AbstractChartRenderer.ts","webpack:///./src/chart/AbstractSvgChartRenderer.ts","webpack:///./src/chart/Chart.ts","webpack:///./src/chart/ChartAdapter.ts","webpack:///./src/chart/ChartEventMap.ts","webpack:///./src/chart/ChartJsRenderer.ts","webpack:///./src/chart/ChartLayout.ts","webpack:///./src/chart/ChartModel.ts","webpack:///./src/chart/FulfillmentChartRenderer.ts","webpack:///./src/chart/SalesfunnelChartRenderer.ts","webpack:///./src/chart/SpeedoChartRenderer.ts","webpack:///./src/chart/VennAsync3Calculator.ts","webpack:///./src/chart/VennChartRenderer.ts","webpack:///./src/chart/VennCircle.ts","webpack:///./src/chart/VennCircleHelper.ts","webpack:///./src/chart/chartJsDateAdapter.ts","webpack:///./src/form/fields/chartfield/ChartField.ts","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.ts","webpack:///./src/form/fields/chartfield/ChartFieldModel.ts","webpack:///./src/index.ts","webpack:///./src/objectFactories.ts","webpack:///./src/table/controls/ChartTableControl.ts","webpack:///./src/table/controls/ChartTableControlAdapter.ts","webpack:///./src/table/controls/ChartTableControlConfigDo.ts","webpack:///./src/table/controls/ChartTableControlEventMap.ts","webpack:///./src/table/controls/ChartTableControlLayout.ts","webpack:///./src/table/controls/ChartTableControlModel.ts","webpack:///./src/table/controls/ChartTableUserFilter.ts","webpack:///./src/table/controls/ChartTableUserFilterModel.ts","webpack:///./src/tile/ChartFieldTile.ts","webpack:///./src/tile/ChartFieldTileAdapter.ts","webpack:///./src/tile/ChartFieldTileModel.ts","webpack:///external var \"Chart\"","webpack:///external var \"ChartDataLabels\"","webpack:///external var \"jQuery\"","webpack:///external var \"scout\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/before-startup","webpack:///webpack/startup","webpack:///webpack/after-startup"],"sourcesContent":["/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ChartTableControlConfigHelper, Page, scout, TableMatrixDateGroup, TableMatrixNumberGroup} from '@eclipse-scout/core';\nimport {ChartTableControl, ChartTableControlConfigDo, TableControlChartType} from '../index';\n\nexport class ChartTableControlConfigHelperImpl extends ChartTableControlConfigHelper {\n\n protected override async _exportConfig(page: Page): Promise<ChartTableControlConfigDo> {\n if (!page?.detailTable) {\n return null;\n }\n let chartTableControl = page.detailTable.findTableControl(ChartTableControl);\n if (chartTableControl && chartTableControl.selected) {\n return scout.create(ChartTableControlConfigDo, {\n chartTypeId: chartTableControl.chartType,\n chartGroup1ColumnId: chartTableControl.chartGroup1?.id,\n chartGroup1Modifier: chartTableControl.chartGroup1?.modifier,\n chartGroup2ColumnId: chartTableControl.chartGroup2?.id,\n chartGroup2Modifier: chartTableControl.chartGroup2?.modifier,\n chartAggregationColumnId: chartTableControl.chartAggregation?.id,\n chartAggregationModifier: chartTableControl.chartAggregation?.modifier\n });\n }\n return null;\n }\n\n protected override async _importConfig(page: Page, config: ChartTableControlConfigDo): Promise<void> {\n if (!page?.detailTable || !config) {\n return;\n }\n let chartTableControl = page.detailTable.findTableControl(ChartTableControl);\n if (chartTableControl) {\n chartTableControl.setSelected(true); // necessary, because otherwise internal data structures might not be properly initialized\n chartTableControl.setChartType(config.chartTypeId as TableControlChartType);\n chartTableControl.setChartGroup1({id: config.chartGroup1ColumnId, modifier: config.chartGroup1Modifier as TableMatrixNumberGroup | TableMatrixDateGroup});\n chartTableControl.setChartGroup2({id: config.chartGroup2ColumnId, modifier: config.chartGroup2Modifier as TableMatrixNumberGroup | TableMatrixDateGroup});\n chartTableControl.setChartAggregation({id: config.chartAggregationColumnId, modifier: config.chartAggregationModifier as TableMatrixNumberGroup});\n }\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\nimport {Chart} from '../index';\nimport {arrays, PropertyChangeEvent, PropertyEventEmitter, PropertyEventMap, Session} from '@eclipse-scout/core';\nimport {UpdateChartOptions} from './Chart';\n\nexport class AbstractChartRenderer extends PropertyEventEmitter {\n declare eventMap: AbstractChartRendererEventMap;\n\n chart: Chart;\n session: Session;\n\n /** true while this.render() is executing */\n rendering: boolean;\n rendered: boolean;\n\n /** set by render() and remove(), makes it unnecessary to carry an argument through all method calls */\n animationDuration: number;\n firstOpaqueBackgroundColor: string;\n\n constructor(chart: Chart) {\n super();\n this.chart = chart;\n this.session = chart.session;\n this.rendering = false;\n this.rendered = false;\n this.animationDuration = 0;\n this.firstOpaqueBackgroundColor = '';\n }\n\n validate(): boolean {\n if (!this._validateChartData()) {\n return false;\n }\n\n return this._validate();\n }\n\n protected _validateChartData(): boolean {\n let chartData = this.chart && this.chart.data;\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0) {\n return false;\n }\n\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n return false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n return false;\n }\n }\n // color should have been set.\n if (!this.chart.config.options.autoColor && !arrays.ensure(chartValueGroup.colorHexValue).length && !chartValueGroup.cssClass) {\n return false;\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n return false;\n }\n }\n\n return true;\n }\n\n protected _validate(): boolean {\n // Override in subclasses\n return true;\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while rendering the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n render(requestAnimation: boolean) {\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation ? configAnimationDuration : 0);\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _render() {\n // Override in subclasses\n }\n\n renderCheckedItems() {\n if (this.rendered) {\n this._renderCheckedItems();\n }\n }\n\n protected _renderCheckedItems() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while updating the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n updateData(requestAnimation: boolean) {\n if (!this.rendered) {\n this.render(requestAnimation);\n return;\n }\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation ? configAnimationDuration : 0);\n this._updateData();\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable(): boolean {\n return false;\n }\n\n isDetachSupported(): boolean {\n return true;\n }\n\n refresh() {\n if (this.rendering) {\n return;\n }\n if (this.rendered) {\n this.remove(false);\n }\n this.render(false);\n }\n\n setAnimationDuration(animationDuration: number) {\n if (!this.setProperty('animationDuration', animationDuration)) {\n return;\n }\n if (this.rendered) {\n this._renderAnimationDuration();\n }\n }\n\n protected _setAnimationDuration(animationDuration: number) {\n this._setProperty('animationDuration', animationDuration);\n }\n\n protected _renderAnimationDuration() {\n // nop\n }\n\n /**\n * @param requestAnimation\n * Whether animations should be used while removing the chart. Note that his\n * property is ignored when chart.config.options.animation.duration is <code>0</code>!\n */\n remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n const configAnimationDuration = this.chart.config.options.animation.duration;\n this.setAnimationDuration(requestAnimation && configAnimationDuration);\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\n this.setAnimationDuration(configAnimationDuration);\n }\n\n protected _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc();\n }\n\n protected _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n // Override in subclasses\n this._remove(afterRemoveFunc);\n }\n\n /**\n * Controls if the animation of the chart is shown when chart data has been updated.\n */\n shouldAnimateRemoveOnUpdate(opts: UpdateChartOptions): boolean {\n return opts.requestAnimation;\n }\n}\n\nexport interface AbstractChartRendererEventMap extends PropertyEventMap {\n 'propertyChange:animationDuration': PropertyChangeEvent<number>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, ObjectIdProvider, strings, styles} from '@eclipse-scout/core';\nimport $ from 'jquery';\nimport {AbstractChartRenderer, Chart} from '../index';\nimport {ClickObject} from './Chart';\n\nexport class AbstractSvgChartRenderer extends AbstractChartRenderer {\n chartBox: ChartBox;\n\n /** Clipping and masking */\n clipId: string;\n maskId: string;\n suppressLegendBox: boolean;\n height: number;\n width: number;\n chartAnimationStopping: boolean;\n\n $svg: JQuery<SVGElement>;\n\n protected _nonValueClickHandler: (event: JQuery.ClickEvent) => void;\n\n constructor(chart: Chart) {\n super(chart);\n this.chartBox = null;\n\n this.clipId = 'Clip-' + ObjectIdProvider.get().createUiSeqId();\n this.maskId = 'Mask-' + ObjectIdProvider.get().createUiSeqId();\n\n this.suppressLegendBox = false;\n\n this._nonValueClickHandler = this._onNonValueClick.bind(this);\n }\n\n static FONT_SIZE_SMALLEST = 'smallestFont';\n static FONT_SIZE_SMALL = 'smallFont';\n static FONT_SIZE_MIDDLE = 'middleFont';\n static FONT_SIZE_BIG = 'bigFont';\n\n protected override _render() {\n if (!this.$svg) {\n this.$svg = this.chart.$container.appendSVG('svg', 'chart-svg');\n aria.role(this.$svg, 'img');\n // labeling has to be done here because otherwise the svg is ignored\n this.linkChartWithFieldLabel(this.$svg);\n this.$svg.on('click', this._nonValueClickHandler);\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$svg);\n // This works, because CSS specifies 100% width/height\n this.height = this.$svg.height();\n this.width = this.$svg.width();\n this._initChartBox();\n if (this._useFontSizeBig()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_BIG);\n } else if (this._useFontSizeMiddle()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_MIDDLE);\n } else if (this._useFontSizeSmall()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALL);\n } else if (this._useFontSizeSmallest()) {\n this.$svg.addClass(AbstractSvgChartRenderer.FONT_SIZE_SMALLEST);\n }\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render->error\n return;\n }\n this._renderInternal();\n }\n\n /**\n * Links chart svg with its field label so the field name is read when entering the chart\n *\n * @see <a href=\"https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-labelledby\">ARIA: aria-labelledby</a>\n */\n linkChartWithFieldLabel($chartSvg: JQuery<Element>) {\n if (!$chartSvg) {\n return;\n }\n let $field = $chartSvg.parents('.chart-field');\n if ($field.length > 0) {\n let $fieldLabel = $field.eq(0).children('label');\n if ($fieldLabel.length > 0) {\n aria.linkElementWithLabel($chartSvg, $fieldLabel.eq(0));\n }\n }\n }\n\n protected _renderInternal() {\n // Override in subclasses\n }\n\n protected _useFontSizeBig(): boolean {\n return false;\n }\n\n protected _useFontSizeMiddle(): boolean {\n return false;\n }\n\n protected _useFontSizeSmall(): boolean {\n return false;\n }\n\n protected _useFontSizeSmallest(): boolean {\n return false;\n }\n\n override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n if (this.rendered && !this.chartAnimationStopping) {\n this.chartAnimationStopping = true;\n this.$svg.children().stop(true, false);\n this.chartAnimationStopping = false;\n }\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n protected override _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n // this function is called directly from renderers after all removal animations are done\n // however, other animations may have been queued in the meantime (e.g. in case the chart was removed, then added (+animation queued), and then removed again)\n if (this.rendered) {\n this.$svg.children().stop(true, false);\n // need to check again, as stop() may have triggered a chart removal and this may not be rendered anymore\n if (this.rendered) {\n this.$svg.remove();\n this.$svg = null;\n }\n }\n this.rendered = false;\n afterRemoveFunc && afterRemoveFunc(this.chartAnimationStopping);\n }\n\n /**\n * For all parameters: use null when parameter is not used or set by a chart type.\n */\n protected _createClickObject(xIndex: number, datasetIndex: number): ClickObject {\n return {\n xIndex: xIndex,\n dataIndex: xIndex,\n datasetIndex: datasetIndex\n };\n }\n\n protected _onChartValueClick(event: JQuery.ClickEvent) {\n this.chart.handleValueClick(event.data, event.originalEvent);\n event.stopPropagation();\n }\n\n protected _onNonValueClick(event: JQuery.ClickEvent) {\n this.chart.handleNonValueClick(event.originalEvent);\n event.stopPropagation();\n }\n\n protected _measureText(text: string, legendLabelClass?: string): { height: number; width: number } {\n let $label = this.$svg.appendSVG('text', legendLabelClass)\n .attr('x', 0)\n .attr('y', 0)\n .attr('visibility', 'hidden')\n .text(text) as JQuery<SVGGraphicsElement>;\n let textBounds;\n try {\n // Firefox throws error when node is not in dom(already removed by navigating away). all other browser returns a bounding box with 0\n textBounds = $label[0].getBBox();\n } catch (e) {\n return {\n height: 0,\n width: 0\n };\n }\n $label.remove();\n\n return textBounds;\n }\n\n protected _renderLine(x1: number, y1: number, x2: number, y2: number, lineClass: string): JQuery<SVGElement> {\n let $line = this.$svg.appendSVG('line', lineClass)\n .attr('x1', x1).attr('y1', y1)\n .attr('x2', x2).attr('y2', y2);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $line;\n }\n\n protected _renderLineLabel(x: number, y: number, label: string, labelClass: string, drawBackground: boolean): JQuery<SVGElement> {\n let $label = this.$svg.appendSVG('text', labelClass ? labelClass : 'line-label')\n .attr('x', x).attr('y', y)\n .text(label);\n\n if (drawBackground) {\n $label.attr('mask', 'url(#' + this.maskId + ')');\n\n let $background = this.$svg.appendSVG('text', labelClass ? labelClass + ' background' : 'line-label-background')\n .attr('x', x).attr('y', y)\n .attr('clip-path', 'url(#' + this.clipId + ')')\n .text(label);\n\n $label.data('$background', $background);\n\n if (this.animationDuration) {\n $background\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n return $label;\n }\n\n protected _initChartBox() {\n this.chartBox = {\n width: this.width,\n height: this.height,\n xOffset: 0,\n yOffset: 0,\n mX: function() {\n return this.xOffset + (this.width / 2);\n },\n mY: function() {\n return this.yOffset + (this.height / 2);\n }\n };\n }\n\n protected _createAnimationObjectWithTabIndexRemoval<T>(animationFunc: (now: number, tween: JQuery.Tween<T>) => void, duration?: number): JQuery.EffectsOptions<T> {\n return {\n step: function(now, fx) {\n try {\n animationFunc.bind(this)(now, fx);\n } catch (e) {\n // prevent logging thousands of exceptions (1 per animation step) by stopping and clearing the queue\n $(this).stop(true, false);\n throw e;\n }\n },\n duration: duration ? duration : Chart.DEFAULT_ANIMATION_DURATION,\n complete: function() {\n $(this).removeAttr('tabindex');\n }\n };\n }\n\n protected _addClipping(cssClass: string) {\n // add clip and mask paths for all relevant objects\n let $clip = this.$svg\n .appendSVG('clipPath');\n $clip[0].id = this.clipId;\n\n let $mask = this.$svg.appendSVG('mask');\n $mask.appendSVG('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'white');\n $mask[0].id = this.maskId;\n\n this.chart.$container.find('.' + cssClass).each(function(i) {\n this.id = 'ClipMask-' + ObjectIdProvider.get().createUiSeqId();\n $clip.appendSVG('use').attrXLINK('href', '#' + this.id);\n $mask.appendSVG('use').attrXLINK('href', '#' + this.id);\n });\n }\n\n protected _renderWireLegend(text: string, legendPositions: LegendPositions, className: string, drawBackgroundBox?: boolean): Legend {\n if (!this.chart.config.options.plugins.tooltip.enabled) {\n return {\n detachFunc: () => {\n // nop\n },\n attachFunc: () => {\n // nop\n },\n removeFunc: () => {\n // nop\n }\n };\n }\n let legend = {} as Legend,\n padding = 5,\n $background,\n backgroundWidth = 0,\n lineHeight = 17,\n backgroundHeight = lineHeight;\n\n if (drawBackgroundBox) {\n $background = this.$svg.appendSVG('rect', 'wire-legend-background-box')\n .attr('opacity', '1');\n }\n\n let positions = legendPositions;\n\n // draw and measure label\n\n let $legend,\n lengthLegend = 0,\n horizontalSpace = 0;\n if (positions.h === -1) {\n horizontalSpace = positions.x2 - 2 * padding;\n } else {\n horizontalSpace = this.width - positions.x2 - 2 * padding;\n }\n\n if (Array.isArray(text)) {\n for (let i = 0; i < text.length; i++) {\n let posIndex = text.length - i - 1;\n let yPos = positions.y2 + positions.v * padding - lineHeight * posIndex - padding * posIndex;\n let $line = this._renderLineLabel(positions.x2 + padding, yPos, strings.truncateText(text[i], horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox) as JQuery<SVGTextContentElement>;\n $line.addClass(className);\n lengthLegend = Math.max(lengthLegend, $line[0].getComputedTextLength());\n if (i === 0) {\n $legend = $line;\n } else {\n if ($legend.data('lines')) {\n $legend.data('lines').push($line);\n } else {\n $legend.data('lines', [$line]);\n }\n }\n }\n } else {\n $legend = this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, strings.truncateText(text, horizontalSpace, this._measureText.bind(this)), '', drawBackgroundBox);\n $legend.addClass(className);\n lengthLegend = $legend[0].getComputedTextLength();\n }\n backgroundWidth = lengthLegend + 2 * padding;\n\n if (legendPositions.autoPosition) {\n positions = legendPositions.posFunc.call(this, backgroundWidth, backgroundHeight);\n // adjust legend\n $legend.attr('x', positions.x2 + padding);\n $legend.attr('y', positions.y2 + positions.v * padding);\n }\n\n // fix layout depending on orientation of legend\n if (positions.h === -1) {\n $legend.attr('x', positions.x2 - padding - lengthLegend);\n $legend.css('text-anchor', 'left');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 - padding - lengthLegend);\n $line.css('text-anchor', 'left');\n });\n }\n } else {\n $legend.attr('x', positions.x2 + padding);\n $legend.css('text-anchor', 'right');\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $line.attr('x', positions.x2 + padding);\n $line.css('text-anchor', 'right');\n });\n }\n }\n if (positions.v === 1) {\n if ($legend.data('lines')) {\n $legend.data('lines').forEach(($line, i) => {\n $line.attr('y', positions.x2 - padding - lengthLegend);\n let index = 1 + i;\n $line.attr('y', positions.y2 + positions.v * padding + lineHeight * index + padding * (index + 1));\n });\n }\n $legend.attr('dy', '0.7em');\n } else {\n if ($legend.data('lines')) {\n let index = $legend.data('lines').length;\n $legend.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n $legend.data('lines').forEach(($line, i) => {\n index = $legend.data('lines').length - 1 - i;\n $line.attr('y', positions.y2 + positions.v * padding - lineHeight * index - padding * index);\n });\n }\n }\n\n // align background text\n $legend.add($legend.data('lines')).each((i, line) => {\n let $line = $(line),\n $background = $line.data('$background');\n if ($background) {\n $background.attr('x', $line.attr('x'));\n $background.attr('y', $line.attr('y'));\n $background.css('text-anchor', $line.css('text-anchor'));\n $background.attr('dy', $line.attr('dy'));\n }\n });\n\n // draw lines, if wished\n let wires = [];\n if (positions.x1 > 0 && positions.y1 > 0) {\n wires.push(this._renderLine(positions.x1, positions.y1, positions.x2, positions.y2, 'label-line'));\n wires.push(this._renderLine(positions.x2, positions.y2, positions.x2 + positions.h * (lengthLegend + 2 * padding), positions.y2, 'label-line'));\n }\n $legend.data('wires', wires);\n\n let $svg = this.$svg;\n legend.detachFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.detach();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n $line.detach();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.detach();\n };\n\n legend.attachFunc = () => {\n $svg.append($legend);\n if ($legend.data('$background')) {\n $svg.append($legend.data('$background'));\n }\n $svg.append($legend.data('wires'));\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n $svg.append($line);\n if ($line.data('$background')) {\n $svg.append($line.data('$background'));\n }\n });\n }\n };\n\n legend.removeFunc = () => {\n $legend.data('wires').forEach($wire => {\n $wire.remove();\n });\n if ($legend.data('lines')) {\n $legend.data('lines').forEach($line => {\n if ($line.data('$background')) {\n $line.data('$background').remove();\n }\n $line().remove();\n });\n }\n if ($legend.data('$background')) {\n $legend.data('$background').remove();\n }\n $legend.remove();\n };\n legend.$field = $legend;\n return legend;\n }\n}\n\nexport type ChartBox = {\n width: number;\n height: number;\n xOffset: number;\n yOffset: number;\n mX: () => number;\n mY: () => number;\n};\n\nexport type Legend = {\n $field?: JQuery;\n detachFunc: () => void;\n attachFunc: () => void;\n removeFunc: () => void;\n};\n\nexport type LegendPositions = {\n x1: number;\n x2: number;\n y1: number;\n y2: number;\n v: number;\n h: number;\n autoPosition: boolean;\n posFunc: (labelWidth: number, labelHeight: number) => LegendPositions;\n};\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractChartRenderer, ChartEventMap, ChartJsRenderer, ChartLayout, ChartModel, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {aria, arrays, ColorScheme, colorSchemes, DeepPartial, EnumObject, HtmlComponent, InitModelOf, objects, Widget} from '@eclipse-scout/core';\nimport {GreenAreaPosition} from './SpeedoChartRenderer';\nimport {CategoryScaleOptions, ChartConfiguration, ChartOptions, LinearScaleOptions, LogarithmicScaleOptions, RadialLinearScaleOptions, ScaleType, TimeScaleOptions as ChartJsTimeScaleOptions} from 'chart.js';\nimport $ from 'jquery';\n\nexport class Chart extends Widget implements ChartModel {\n declare model: ChartModel;\n declare eventMap: ChartEventMap;\n declare self: Chart;\n\n data: ChartData;\n config: ChartConfig;\n checkedItems: ClickObject[];\n\n chartRenderer: AbstractChartRenderer;\n\n /** @internal */\n _updatedOnce: boolean;\n\n protected _updateChartTimeoutId: number;\n protected _updateChartOpts: UpdateChartOptions;\n protected _updateChartOptsWhileNotAttached: UpdateChartOptions[];\n\n constructor() {\n super();\n\n this.$container = null;\n\n this.data = null;\n this.config = null;\n this.checkedItems = [];\n\n this.chartRenderer = null;\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n this._updateChartOptsWhileNotAttached = [];\n this._updatedOnce = false;\n }\n\n static Type = {\n PIE: 'pie',\n LINE: 'line',\n BAR: 'bar',\n BAR_HORIZONTAL: 'horizontalBar',\n COMBO_BAR_LINE: 'comboBarLine',\n FULFILLMENT: 'fulfillment',\n SPEEDO: 'speedo',\n SALESFUNNEL: 'salesfunnel',\n VENN: 'venn',\n DOUGHNUT: 'doughnut',\n POLAR_AREA: 'polarArea',\n RADAR: 'radar',\n BUBBLE: 'bubble',\n SCATTER: 'scatter'\n } as const;\n\n static Position = {\n TOP: 'top',\n BOTTOM: 'bottom',\n LEFT: 'left',\n RIGHT: 'right',\n CENTER: 'center'\n } as const;\n\n static DEFAULT_ANIMATION_DURATION = 600; // ms\n static DEFAULT_DEBOUNCE_TIMEOUT = 100; // ms\n\n protected override _init(model: InitModelOf<this>) {\n super._init(model);\n this.setConfig(this.config);\n this._setData(this.data);\n }\n\n protected override _render() {\n this.$container = this.$parent.appendDiv('chart');\n aria.role(this.$container, 'none'); // ignore this container for screen readers, they care about the chart inside\n\n this.htmlComp = HtmlComponent.install(this.$container, this.session);\n this.htmlComp.setLayout(new ChartLayout(this));\n\n // !!! Do _not_ update the chart here, because usually the container size\n // !!! is not correct anyway during the render phase. The ChartLayout\n // !!! will eventually call updateChart() when the layout is validated.\n }\n\n protected override _renderProperties() {\n super._renderProperties();\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT\n });\n }\n\n protected override _renderOnAttach() {\n super._renderOnAttach();\n const updateChartOptsWhileNotAttached = this._updateChartOptsWhileNotAttached.splice(0);\n if (!this.chartRenderer?.isDetachSupported()) {\n // the chartRenderer does not support detach => recreate it\n this._updateChartRenderer();\n updateChartOptsWhileNotAttached.forEach(opts => delete opts.requestAnimation);\n updateChartOptsWhileNotAttached.push({requestAnimation: false});\n }\n updateChartOptsWhileNotAttached.forEach(opts => this.updateChart($.extend(true, {}, opts, {debounce: true})));\n }\n\n protected override _remove() {\n if (this.chartRenderer) {\n this.chartRenderer.remove(false);\n }\n this.$container.remove();\n this.$container = null;\n }\n\n setData(data: ChartData) {\n this.setProperty('data', data);\n this.setCheckedItems(this.checkedItems);\n }\n\n protected _setData(data: ChartData) {\n if (data) {\n data = $.extend({axes: []}, data);\n }\n this._setProperty('data', data);\n }\n\n protected _renderData() {\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n });\n }\n\n setConfig(config: ChartConfig) {\n let defaultConfig = {\n type: Chart.Type.PIE,\n options: {\n autoColor: true,\n colorMode: ChartColorMode.AUTO,\n colorScheme: colorSchemes.ColorSchemeId.DEFAULT,\n transparent: false,\n maxSegments: 5,\n adjustGridMaxMin: true,\n clickable: false,\n checkable: false,\n animation: {\n duration: Chart.DEFAULT_ANIMATION_DURATION\n },\n plugins: {\n datalabels: {\n display: false\n },\n tooltip: {\n enabled: true\n },\n legend: {\n display: true,\n clickable: false,\n position: Chart.Position.RIGHT,\n pointsVisible: true\n }\n }\n }\n };\n config = $.extend(true, {}, defaultConfig, config);\n config.options.colorScheme = colorSchemes.ensureColorScheme(config.options.colorScheme);\n if (objects.equalsRecursive(this.config, config)) {\n return;\n }\n\n // check if only data has changed\n let oldConfigWithNewData = $.extend(true, {}, this.config);\n if (config.data) {\n oldConfigWithNewData.data = config.data;\n } else {\n delete oldConfigWithNewData.data;\n }\n\n // the label map is technically part of the config, but it is handled as data. Therefore, it is excluded from this check.\n let transferLabelMap = (source, target, identifier) => {\n if (!source || !target || !identifier) {\n return;\n }\n // Property not set on source -> remove from target\n if (!source.options || !source.options[identifier]) {\n if (target.options) {\n delete target.options[identifier];\n }\n if (target.options && objects.isEmpty(target.options.scales) && !(source.options && source.options.scales)) {\n delete target.options.scales;\n }\n if (objects.isEmpty(target.options) && !source.options) {\n delete target.options;\n }\n return;\n }\n target.options[identifier] = source.options[identifier];\n };\n transferLabelMap(config, oldConfigWithNewData, 'xLabelMap');\n transferLabelMap(config, oldConfigWithNewData, 'yLabelMap');\n\n if (objects.equalsRecursive(oldConfigWithNewData, config)) {\n this._setProperty('config', config);\n if (this.rendered) {\n this._renderConfig(true);\n }\n this.setCheckedItems(this.checkedItems);\n return;\n }\n\n if (this.rendered && this.config && this.config.type) {\n this.$container.removeClass(this.config.type + '-chart');\n }\n this.setProperty('config', config);\n this.setCheckedItems(this.checkedItems);\n this._updateChartRenderer();\n }\n\n protected _renderConfig(onlyUpdateData: boolean) {\n this._renderClickable();\n this._renderCheckable();\n this._renderChartType();\n this._renderColorScheme();\n this.updateChart({\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: onlyUpdateData\n });\n }\n\n setCheckedItems(checkedItems: ClickObject[]) {\n this.setProperty('checkedItems', arrays.ensure(this._filterCheckedItems(checkedItems)));\n }\n\n protected _filterCheckedItems(checkedItems: ClickObject[]): ClickObject[] {\n if (!Array.isArray(checkedItems)) {\n return checkedItems;\n }\n let datasetLengths = [];\n if (this.data && this.data.chartValueGroups) {\n this.data.chartValueGroups.forEach(chartValueGroup => datasetLengths.push(chartValueGroup.values.length));\n } else if (this.config && this.config.data) {\n this.config.data.datasets.forEach(dataset => datasetLengths.push(dataset.data.length));\n }\n let filteredCheckedItems = checkedItems.filter(item => datasetLengths[item.datasetIndex] && item.dataIndex < datasetLengths[item.datasetIndex]);\n if (filteredCheckedItems.length < checkedItems.length) {\n return filteredCheckedItems;\n }\n return checkedItems;\n }\n\n protected _renderCheckedItems() {\n if (this.chartRenderer) {\n this.chartRenderer.renderCheckedItems();\n }\n }\n\n protected override _renderEnabled() {\n this.updateChart();\n }\n\n protected _renderClickable() {\n this.$container.toggleClass('clickable', this.config.options.clickable);\n }\n\n protected _renderCheckable() {\n this.$container.toggleClass('checkable', this.config.options.checkable);\n }\n\n protected _renderChartType() {\n this.$container.addClass(this.config.type + '-chart');\n }\n\n protected _renderColorScheme() {\n colorSchemes.toggleColorSchemeClasses(this.$container, this.config.options.colorScheme);\n }\n\n updateChart(opts?: UpdateChartOptions) {\n opts = opts || {};\n opts.onlyUpdateData = opts.onlyUpdateData && this.chartRenderer && this.chartRenderer.isDataUpdatable();\n opts.enforceRerender = !opts.onlyUpdateData && !opts.onlyRefresh;\n\n // Cancel previously scheduled update and merge opts\n if (this._updateChartTimeoutId) {\n clearTimeout(this._updateChartTimeoutId);\n if (this._updateChartOpts) {\n // Inherit 'true' values from previously scheduled updates\n opts.requestAnimation = opts.requestAnimation || this._updateChartOpts.requestAnimation;\n opts.onlyUpdateData = opts.onlyUpdateData || this._updateChartOpts.onlyUpdateData;\n opts.onlyRefresh = opts.onlyRefresh || this._updateChartOpts.onlyRefresh;\n opts.enforceRerender = opts.enforceRerender || this._updateChartOpts.enforceRerender;\n }\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n }\n\n let updateChartImplFn = updateChartImpl.bind(this);\n let doDebounce = (opts.debounce === true || typeof opts.debounce === 'number');\n if (doDebounce) {\n this._updateChartOpts = opts;\n if (typeof opts.debounce === 'number') {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn, opts.debounce);\n } else {\n this._updateChartTimeoutId = setTimeout(updateChartImplFn);\n }\n } else {\n updateChartImplFn();\n }\n\n // ---- Helper functions -----\n\n function updateChartImpl() {\n this._updateChartTimeoutId = null;\n this._updateChartOpts = null;\n\n if (!this.$container || !this.$container.isAttached()) {\n this._updateChartOptsWhileNotAttached.push(opts);\n return;\n }\n\n this._updatedOnce = true;\n if (!this.chartRenderer) {\n return; // nothing to render when there is no renderer.\n }\n if (opts.enforceRerender) {\n this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(opts), chartAnimationStopping => {\n if (this.removing || chartAnimationStopping) {\n // prevent exceptions trying to render after navigated away, and do not update/render while a running animation is being stopped\n return;\n }\n this.chartRenderer.render(opts.requestAnimation);\n this.trigger('chartRender');\n });\n } else if (opts.onlyUpdateData) {\n this.chartRenderer.updateData(opts.requestAnimation);\n } else if (opts.onlyRefresh) {\n this.chartRenderer.refresh();\n }\n }\n }\n\n protected _resolveChartRenderer(): AbstractChartRenderer {\n switch (this.config.type) {\n case Chart.Type.FULFILLMENT:\n return new FulfillmentChartRenderer(this);\n case Chart.Type.SPEEDO:\n return new SpeedoChartRenderer(this);\n case Chart.Type.SALESFUNNEL:\n return new SalesfunnelChartRenderer(this);\n case Chart.Type.VENN:\n return new VennChartRenderer(this);\n case Chart.Type.BAR:\n case Chart.Type.BAR_HORIZONTAL:\n case Chart.Type.LINE:\n case Chart.Type.COMBO_BAR_LINE:\n case Chart.Type.PIE:\n case Chart.Type.DOUGHNUT:\n case Chart.Type.POLAR_AREA:\n case Chart.Type.RADAR:\n case Chart.Type.BUBBLE:\n case Chart.Type.SCATTER:\n return new ChartJsRenderer(this);\n }\n return null;\n }\n\n protected _updateChartRenderer() {\n this.chartRenderer && this.chartRenderer.remove();\n this.setProperty('chartRenderer', this._resolveChartRenderer());\n }\n\n handleValueClick(clickedItem: ClickObject, originalEvent?: Event) {\n if (this.config.options.checkable) {\n let checkedItems = [...this.checkedItems],\n checkedItem = checkedItems.filter(item => item.datasetIndex === clickedItem.datasetIndex && item.dataIndex === clickedItem.dataIndex)[0];\n if (checkedItem) {\n arrays.remove(checkedItems, checkedItem);\n } else {\n checkedItems.push(clickedItem);\n }\n this.setCheckedItems(checkedItems);\n }\n this.trigger('valueClick', {\n data: clickedItem,\n originalEvent\n });\n }\n\n handleNonValueClick(originalEvent?: Event) {\n this.trigger('nonValueClick', {\n originalEvent\n });\n }\n\n handleLegendClick(legentItemIndex: number, originalEvent?: Event) {\n this.trigger('legendItemClick', {\n legendItemIndex: legentItemIndex,\n originalEvent: originalEvent\n });\n }\n}\n\nexport type ChartData = {\n axes: ChartAxis[][];\n chartValueGroups: ChartValueGroup[];\n};\nexport type ChartAxis = {\n label: string;\n};\nexport type ChartValueGroup = {\n type?: string;\n groupName?: string;\n values: number[] | Record<string, number>[];\n colorHexValue?: string | string[];\n cssClass?: string;\n};\n\nexport type ChartConfig = Partial<Omit<ChartConfiguration, 'type' | 'options'>> & {\n type: ChartType;\n options?: ChartConfigOptions;\n};\n\nexport type ChartConfigOptions = Omit<ChartOptions, 'scales'> & {\n autoColor?: boolean;\n colorMode?: ChartColorMode;\n colorScheme?: ColorScheme | string;\n transparent?: boolean;\n maxSegments?: number;\n otherSegmentClickable?: boolean;\n adjustGridMaxMin?: boolean;\n clickable?: boolean;\n checkable?: boolean;\n scaleLabelByTypeMap?: Record<ChartType, Record<string, string>>;\n numberFormatter?: NumberFormatter;\n reformatLabels?: boolean;\n handleResize?: boolean;\n animation?: {\n duration?: number;\n };\n scales?: {\n x?: CartesianChartScale;\n y?: CartesianChartScale;\n yDiffType?: CartesianChartScale;\n r?: RadialChartScale;\n };\n bubble?: {\n sizeOfLargestBubble?: number;\n minBubbleSize?: number;\n };\n fulfillment?: {\n startValue?: number;\n };\n salesfunnel?: {\n normalized?: boolean;\n calcConversionRate?: boolean;\n };\n speedo?: {\n greenAreaPosition?: GreenAreaPosition;\n };\n venn?: {\n numberOfCircles?: 1 | 2 | 3;\n };\n plugins?: {\n legend?: {\n clickable?: boolean;\n pointsVisible?: boolean;\n };\n };\n};\n\nexport type RadialChartScale = DeepPartial<RadialLinearScaleOptions> & {\n type?: ScaleType;\n minSpaceBetweenTicks?: number;\n};\n\nexport type CartesianChartScale = DeepPartial<LinearScaleOptions | CategoryScaleOptions | TimeScaleOptions | LogarithmicScaleOptions> & {\n type?: ScaleType;\n minSpaceBetweenTicks?: number;\n};\n\nexport type TimeScaleOptions = Omit<ChartJsTimeScaleOptions, 'min' | 'max'> & {\n min?: string | number | Date | (() => string | number | Date);\n max?: string | number | Date | (() => string | number | Date);\n};\n\nexport type ChartType = EnumObject<typeof Chart.Type>;\nexport type ChartPosition = EnumObject<typeof Chart.Position>;\nexport type NumberFormatter = (label: number | string, defaultFormatter: (label: number | string) => string) => string;\n\n/**\n * Determines what parts of the chart data is colored with the same colors.\n */\nexport enum ChartColorMode {\n /**\n * Uses one of the other options depending on the chart type.\n */\n AUTO = 'auto',\n /**\n * Uses a different color for each dataset.\n */\n DATASET = 'dataset',\n /**\n * Uses a different color for each datapoint in a dataset but the n-th datapoint in each dataset will be colored using the same color.\n */\n DATA = 'data'\n}\n\nexport type ClickObject = {\n datasetIndex: number;\n dataIndex: number;\n xIndex?: number;\n yIndex?: number;\n};\n\nexport type UpdateChartOptions = {\n /**\n * Default is false.\n */\n requestAnimation?: boolean;\n /**\n * Default is 0.\n */\n debounce?: number | boolean;\n /**\n * Default is false.\n */\n onlyUpdateData?: boolean;\n /**\n * Default is false.\n */\n onlyRefresh?: boolean;\n enforceRerender?: boolean;\n};\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {Event, ModelAdapter} from '@eclipse-scout/core';\nimport {Chart} from '../index';\nimport {ChartValueClickEvent} from './ChartEventMap';\n\nexport class ChartAdapter extends ModelAdapter {\n protected _onWidgetValueClick(event: ChartValueClickEvent) {\n this._send('valueClick', event.data);\n }\n\n protected override _onWidgetEvent(event: Event<Chart>) {\n if (event.type === 'valueClick') {\n this._onWidgetValueClick(event as ChartValueClickEvent);\n } else {\n super._onWidgetEvent(event);\n }\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {Event as ScoutEvent, PropertyChangeEvent, WidgetEventMap} from '@eclipse-scout/core';\nimport {AbstractChartRenderer, Chart} from '../index';\nimport {ChartConfig, ChartData, ClickObject} from './Chart';\n\nexport interface ChartValueClickEvent<C = Chart> extends ScoutEvent<C> {\n data: ClickObject;\n originalEvent?: Event;\n}\n\nexport interface ChartNonValueClickEvent<C = Chart> extends ScoutEvent<C> {\n originalEvent?: Event;\n}\n\nexport interface ChartLegendItemClickEvent<C = Chart> extends ScoutEvent<C> {\n legendItemIndex?: number;\n originalEvent?: Event;\n}\n\nexport interface ChartEventMap extends WidgetEventMap {\n 'chartRender': ScoutEvent<Chart>;\n 'valueClick': ChartValueClickEvent;\n 'nonValueClick': ChartNonValueClickEvent;\n 'legendItemClick': ChartLegendItemClickEvent;\n 'propertyChange:chartRenderer': PropertyChangeEvent<AbstractChartRenderer>;\n 'propertyChange:checkedItems': PropertyChangeEvent<ClickObject[]>;\n 'propertyChange:config': PropertyChangeEvent<ChartConfig>;\n 'propertyChange:data': PropertyChangeEvent<ChartData>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractChartRenderer, CartesianChartScale, Chart, ChartAxis, ChartColorMode, ChartConfig, ChartData, chartJsDateAdapter, ChartType, ClickObject, NumberFormatter, RadialChartScale} from '../index';\nimport {\n _adapters as chartJsAdapters, ActiveElement, ArcElement, BarElement, BubbleDataPoint, CartesianScaleOptions, CategoryScale, Chart as ChartJs, ChartArea, ChartConfiguration, ChartDataset, ChartEvent, ChartType as ChartJsType, Color,\n DefaultDataPoint, FontSpec, LegendElement, LegendItem, LegendOptions, LinearScaleOptions, Point as ChartJsPoint, PointElement, PointHoverOptions, RadialLinearScaleOptions, Scale, ScatterDataPoint, Scriptable, ScriptableContext,\n TooltipCallbacks, TooltipItem, TooltipLabelStyle, TooltipModel, TooltipOptions\n} from 'chart.js';\nimport 'chart.js/auto'; // Import from auto to register charts\nimport {aria, arrays, colorSchemes, graphics, numbers, objects, Point, scout, SomeRequired, strings, styles, Tooltip, tooltips} from '@eclipse-scout/core';\nimport ChartDataLabels, {Context} from 'chartjs-plugin-datalabels';\nimport $ from 'jquery';\n\nChartJs.register(ChartDataLabels);\n\n$.extend(true, ChartJs.defaults, {\n maintainAspectRatio: false,\n elements: {\n line: {\n borderWidth: 2\n },\n point: {\n radius: 0,\n hitRadius: 10,\n hoverRadius: 7,\n hoverBorderWidth: 2\n },\n arc: {\n borderWidth: 1\n },\n bar: {\n borderWidth: 1,\n borderSkipped: ''\n }\n },\n plugins: {\n legend: {\n labels: {\n usePointStyle: true,\n boxHeight: 7\n }\n }\n }\n});\n$.extend(true, ChartJs.overrides, {\n line: {\n elements: {\n point: {\n borderWidth: 2\n }\n }\n },\n scatter: {\n elements: {\n point: {\n radius: 3\n }\n }\n },\n bubble: {\n layout: {\n // Enabled auto padding would cause Chart.js to automatically add padding, in the size of the largest bubble\n // (defined by 'sizeOfLargestBubble'), around the chart. This wastes spaces and is not necessary, as we adjust\n // the axes already with the bubble size in mind.\n autoPadding: false\n }\n }\n});\n\nlet chartJsGlobalsInitialized = false;\nconst PHI = (1 + Math.sqrt(5)) / 2; // golden ratio\n\nexport class ChartJsRenderer extends AbstractChartRenderer {\n static ARROW_LEFT_RIGHT = '\\u2194';\n static ARROW_UP_DOWN = '\\u2195';\n\n chartJs: ChartJsChart;\n onlyIntegers: boolean;\n maxXAxesTicksHeight: number;\n numSupportedColors: number;\n colorSchemeCssClass: string;\n minRadialChartDatalabelSpace: number;\n resetDatasetAfterHover: boolean;\n legendHoverDatasets: number[];\n removing: boolean;\n\n $canvas: JQuery<HTMLCanvasElement>;\n\n protected _labelFormatter: LabelFormatter;\n protected _xLabelFormatter: LabelFormatter;\n protected _yLabelFormatter: LabelFormatter;\n protected _xAxisFitter: AxisFitter;\n protected _yAxisFitter: AxisFitter;\n protected _radialChartDatalabelsDisplayHandler: DatalabelsDisplayHandler;\n protected _radialChartDatalabelsFormatter: RadialChartDatalabelsFormatter;\n protected _datalabelsFormatter: DatalabelsFormatter;\n protected _datalabelBackgroundColorHandler: DatalabelBackgroundColorHandler;\n protected _legendLabelGenerator: LegendLabelGenerator;\n protected _clickHandler: ChartEventHandler;\n protected _hoverHandler: ChartEventHandler;\n protected _pointerHoverHandler: ChartEventHandler;\n protected _legendClickHandler: LegendEventHandler;\n protected _legendHoverHandler: LegendEventHandler;\n protected _legendPointerHoverHandler: LegendEventHandler;\n protected _legendLeaveHandler: LegendEventHandler;\n protected _legendPointerLeaveHandler: LegendEventHandler;\n protected _resizeHandler: ResizeHandler;\n protected _tooltipTitleGenerator: TooltipTitleGenerator;\n protected _tooltipItemsGenerator: TooltipItemsGenerator;\n protected _tooltipLabelGenerator: TooltipLabelGenerator;\n protected _tooltipLabelValueGenerator: TooltipLabelValueGenerator;\n protected _tooltipLabelColorGenerator: TooltipLabelColorGenerator;\n protected _tooltipRenderer: TooltipRenderer;\n protected _tooltip: Tooltip;\n protected _tooltipTimeoutId: number;\n protected _updatingDatalabels: boolean;\n protected _hoveringClickableElement: boolean;\n\n constructor(chart: Chart) {\n super(chart);\n this.chartJs = null;\n this.onlyIntegers = true;\n this.maxXAxesTicksHeight = 75;\n this.numSupportedColors = 6;\n this.colorSchemeCssClass = '';\n this.minRadialChartDatalabelSpace = 25;\n\n this._labelFormatter = this._createLabelFormatter(this._formatLabel);\n this._xLabelFormatter = this._createLabelFormatter(this._formatXLabel);\n this._yLabelFormatter = this._createLabelFormatter(this._formatYLabel);\n\n this._xAxisFitter = this._fitXAxis.bind(this);\n this._yAxisFitter = this._fitYAxis.bind(this);\n\n this._radialChartDatalabelsDisplayHandler = this._displayDatalabelsOnRadialChart.bind(this);\n this._radialChartDatalabelsFormatter = this._formatDatalabelsOnRadialChart.bind(this);\n this._datalabelsFormatter = this._formatDatalabels.bind(this);\n this._datalabelBackgroundColorHandler = this._getBackgroundColorOfDataset.bind(this);\n\n this._legendLabelGenerator = this._generateLegendLabels.bind(this);\n\n this.resetDatasetAfterHover = false;\n\n this._clickHandler = this._onClick.bind(this);\n this._hoverHandler = this._onHover.bind(this);\n this._pointerHoverHandler = this._onHoverPointer.bind(this);\n\n this.legendHoverDatasets = [];\n\n this._legendClickHandler = this._onLegendClick.bind(this);\n this._legendHoverHandler = this._onLegendHover.bind(this);\n this._legendPointerHoverHandler = this._onLegendHoverPointer.bind(this);\n this._legendLeaveHandler = this._onLegendLeave.bind(this);\n this._legendPointerLeaveHandler = this._onLegendLeavePointer.bind(this);\n\n this._resizeHandler = this._onResize.bind(this);\n\n this._tooltipTitleGenerator = this._generateTooltipTitle.bind(this);\n this._tooltipItemsGenerator = this._generateTooltipItems.bind(this);\n this._tooltipLabelGenerator = this._generateTooltipLabel.bind(this);\n this._tooltipLabelValueGenerator = this._generateTooltipLabelValue.bind(this);\n this._tooltipLabelColorGenerator = this._generateTooltipLabelColor.bind(this);\n this._tooltipRenderer = this._renderTooltip.bind(this);\n this._tooltip = null;\n this._tooltipTimeoutId = null;\n }\n\n protected override _validateChartData(): boolean {\n let chartDataValid = true;\n let chartData = this.chart && this.chart.data;\n\n if (!chartData || !chartData.chartValueGroups || chartData.chartValueGroups.length === 0 || !chartData.axes) {\n chartDataValid = false;\n }\n\n if (chartDataValid && scout.isOneOf(this.chart.config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < chartData.chartValueGroups.length; i++) {\n let chartValueGroup = chartData.chartValueGroups[i];\n if (!chartValueGroup.values) {\n chartDataValid = false;\n }\n // Length of all \"values\" arrays have to be equal\n if (i === 0) {\n length = chartValueGroup.values.length;\n } else {\n if (chartValueGroup.values.length !== length) {\n chartDataValid = false;\n }\n }\n }\n for (i = 0; i < chartData.axes.length; i++) {\n if (chartData.axes[i].length !== length) {\n chartDataValid = false;\n }\n }\n }\n\n if (chartDataValid) {\n return true;\n }\n\n let chartConfigDataValid = true;\n let config = this.chart && this.chart.config;\n\n if (!config || !config.data || !config.data.datasets || config.data.datasets.length === 0) {\n chartConfigDataValid = false;\n }\n\n if (chartConfigDataValid && scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n // check lengths\n let i, length = 0;\n for (i = 0; i < config.data.datasets.length; i++) {\n let dataset = config.data.datasets[i];\n if (!dataset.data) {\n chartConfigDataValid = false;\n }\n // Length of all \"data\" arrays have to be equal\n if (i === 0) {\n length = dataset.data.length;\n } else {\n if (dataset.data.length !== length) {\n chartConfigDataValid = false;\n }\n }\n }\n }\n\n return chartConfigDataValid;\n }\n\n protected override _render() {\n if (!this.$canvas) {\n this.$canvas = this.chart.$container.appendElement('<canvas>') as JQuery<HTMLCanvasElement>;\n this.$canvas.on('click', this._onCanvasClick.bind(this));\n aria.hidden(this.$canvas, true); // aria not supported yet\n }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.font.family = this.$canvas.css('font-family');\n chartJsAdapters._date.override(chartJsDateAdapter.getAdapter(this.chart.session));\n chartJsGlobalsInitialized = true;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config);\n }\n\n protected _renderChart(config: ChartConfig) {\n if (this.chartJs) {\n this.chartJs.destroy();\n }\n config = $.extend(true, {}, config, {\n options: {\n animation: {}\n }\n }, config);\n config.options.animation.duration = this.animationDuration;\n\n this.chartJs = new ChartJs(this.$canvas[0].getContext('2d'), config as ChartConfiguration) as ChartJsChart;\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n }\n\n protected override _updateData() {\n if (!this.chartJs) {\n return;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n\n let targetData = this.chartJs.config.data,\n sourceData = config.data;\n\n // Transfer property from source object to target object:\n // 1. If the property is not set on the target object, copy it from source.\n // 2. If the property is not set on the source object, set it to undefined if setToUndefined = true. Otherwise, empty the array if it is an array property or set it to undefined.\n // 3. If the property is not an array on the source or the target object, copy the property from the source to the target object.\n // 4. If the property is an array on both objects, do not update the array, but transfer the elements (update elements directly, use pop(), push() or splice() if one array is longer than the other).\n let transferProperty = (source: object, target: object, property: string, setToUndefined?) => {\n if (!source || !target || !property) {\n return;\n }\n // 1. Property not set on target\n if (!target[property]) {\n let src = source[property];\n if (src || setToUndefined) {\n target[property] = src;\n }\n return;\n }\n // 2. Property not set on source\n if (!source[property]) {\n if (setToUndefined) {\n // Set to undefined if setToUndefined = true\n target[property] = undefined;\n return;\n }\n // Empty array\n if (Array.isArray(target[property])) {\n target[property].splice(0, target[property].length);\n return;\n }\n // Otherwise set to undefined\n target[property] = undefined;\n return;\n }\n // 3. Property is not an array on the source or the target object\n if (!Array.isArray(source[property]) || !Array.isArray(target[property])) {\n target[property] = source[property];\n return;\n }\n // 4. Property is an array on the source and the target object\n for (let i = 0; i < Math.min(source[property].length, target[property].length); i++) {\n // Update elements directly\n target[property][i] = source[property][i];\n }\n let targetLength = target[property].length,\n sourceLength = source[property].length;\n if (targetLength > sourceLength) {\n // Target array is longer than source array\n target[property].splice(sourceLength, targetLength - sourceLength);\n } else if (targetLength < sourceLength) {\n // Source array is longer than target array\n target[property].push(...source[property].splice(targetLength));\n }\n };\n\n let findDataset = (datasets: ChartDataset[], datasetId) => arrays.find(datasets, dataset => dataset.datasetId === datasetId);\n let findDatasetIndex = (datasets: ChartDataset[], datasetId) => arrays.findIndex(datasets, dataset => dataset.datasetId === datasetId);\n\n if (targetData && sourceData) {\n // Transfer properties from source to target, instead of overwriting the whole data object.\n // This needs to be done to have a smooth animation from the old to the new state and not a complete rebuild of the chart.\n transferProperty(sourceData, targetData, 'labels');\n\n if (!targetData.datasets) {\n targetData.datasets = [];\n }\n if (!sourceData.datasets) {\n sourceData.datasets = [];\n }\n\n // if all datasets have no id set, add artificial dataset ids\n if (sourceData.datasets.every(dataset => objects.isNullOrUndefined(dataset.datasetId))) {\n sourceData.datasets.forEach((dataset, idx) => {\n dataset.datasetId = '' + idx;\n });\n targetData.datasets.forEach((dataset, idx) => {\n dataset.datasetId = '' + idx;\n });\n }\n\n // update existing datasets\n // Important: Update existing datasets first, before removing obsolete datasets\n // (the dataset object has listeners from Chart.js, which do not work well on a partially updated chart (updated datasets, but not yet updated chart)\n targetData.datasets.forEach(targetDataset => {\n let sourceDataset = findDataset(sourceData.datasets, targetDataset.datasetId);\n\n if (sourceDataset) {\n targetDataset.label = sourceDataset.label;\n targetDataset.type = sourceDataset.type;\n\n transferProperty(sourceDataset, targetDataset, 'data');\n\n transferProperty(sourceDataset, targetDataset, 'backgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'borderColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'hoverBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'legendColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointBorderColor', true);\n transferProperty(sourceDataset, targetDataset, 'pointHoverBorderColor', true);\n\n transferProperty(sourceDataset, targetDataset, 'uncheckedBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointHoverBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointBackgroundColor', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointHoverBackgroundColor', true);\n\n transferProperty(sourceDataset, targetDataset, 'lineTension', true);\n\n transferProperty(sourceDataset, targetDataset, 'pointRadius', true);\n transferProperty(sourceDataset, targetDataset, 'uncheckedPointRadius', true);\n transferProperty(sourceDataset, targetDataset, 'checkedPointRadius', true);\n\n this._adjustDatasetBorderWidths(targetDataset);\n }\n });\n\n // remove deleted datasets, loop backwards to not compromise the loop when modifying the array\n // datasets without an id get deleted anyway (replaced in every update, because a correct identification is not possible)\n for (let i = targetData.datasets.length - 1; i >= 0; i--) {\n let datasetId = targetData.datasets[i].datasetId;\n let deleted = objects.isNullOrUndefined(datasetId) || findDatasetIndex(sourceData.datasets, datasetId) === -1;\n if (deleted) {\n targetData.datasets.splice(i, 1);\n }\n }\n\n // sort existing, updated datasets\n targetData.datasets.sort((a, b) => {\n return findDatasetIndex(sourceData.datasets, a.datasetId) - findDatasetIndex(sourceData.datasets, b.datasetId);\n });\n\n // add all new datasets\n sourceData.datasets.forEach((sourceDataset, idx) => {\n let targetDataset = targetData.datasets[idx];\n // exclude datasets without an id here, to ensure that multiple datasets without an id do not overwrite each other\n if (targetDataset && targetDataset.datasetId && sourceDataset.datasetId === targetDataset.datasetId) {\n return;\n }\n targetData.datasets.splice(idx, 0, sourceDataset);\n });\n } else {\n this.chartJs.config.data = sourceData;\n }\n\n // update label maps for scales (the label maps, despite being part of the config, can be updated, without redrawing the whole chart)\n transferProperty(config.options, this.chartJs.config.options, 'xLabelMap', true);\n transferProperty(config.options, this.chartJs.config.options, 'yLabelMap', true);\n\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n let scales = this.chartJs.config.options.scales || {},\n axes = [scales.x || {}, scales.y || {}, scales.yDiffType || {}, scales.r || {}];\n axes.forEach((axis: LinearScaleOptions | RadialLinearScaleOptions) => {\n (axis.ticks || {} as (LinearScaleOptions | RadialLinearScaleOptions)['ticks']).stepSize = undefined;\n });\n\n this.refresh();\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n }\n\n override isDataUpdatable(): boolean {\n return true;\n }\n\n override isDetachSupported(): boolean {\n // chart.js removes the animation-listeners onProgress and onComplete on detach and does not add them again on attach\n // these listeners are needed for the datalabels => this renderer does not support detach\n return false;\n }\n\n override refresh() {\n if (this.chartJs) {\n this.chartJs.update();\n } else {\n super.refresh();\n }\n }\n\n protected override _renderAnimationDuration() {\n if (!this.chartJs) {\n return;\n }\n $.extend(true, this.chartJs.config, {\n options: {\n animation: {\n duration: this.animationDuration\n }\n }\n });\n this.refresh();\n }\n\n protected override _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.refresh();\n }\n }\n\n protected _checkItems(config: ChartConfig): boolean {\n if (!config || !config.data) {\n return false;\n }\n let transferArrayValues = (target, source, indices) => {\n if (Array.isArray(target) && Array.isArray(source)) {\n let changed = 0;\n arrays.ensure(indices)\n .filter(index => !isNaN(index) && index < Math.min(target.length, source.length))\n .forEach(index => {\n if (target[index] !== source[index]) {\n target[index] = source[index];\n changed++;\n }\n });\n return changed;\n }\n return 0;\n };\n let changed = 0;\n config.data.datasets.forEach((dataset: ChartDataset, datasetIndex) => {\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === datasetIndex)\n .map(item => item.dataIndex),\n uncheckedIndices = arrays.init(dataset.data.length, null).map((elem, idx) => idx);\n arrays.removeAll(uncheckedIndices, checkedIndices);\n\n changed = changed +\n // check\n transferArrayValues(dataset.backgroundColor, dataset.checkedBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.checkedHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.checkedPointBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.checkedPointHoverBackgroundColor, checkedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.checkedPointRadius, checkedIndices) +\n // uncheck\n transferArrayValues(dataset.backgroundColor, dataset.uncheckedBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.hoverBackgroundColor, dataset.uncheckedHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointBackgroundColor, dataset.uncheckedPointBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointHoverBackgroundColor, dataset.uncheckedPointHoverBackgroundColor, uncheckedIndices) +\n transferArrayValues(dataset.pointRadius, dataset.uncheckedPointRadius, uncheckedIndices);\n\n this._adjustDatasetBorderWidths(dataset);\n });\n\n return 0 < changed;\n }\n\n stopAnimations() {\n if (this.chartJs) {\n this.chartJs.stop();\n }\n }\n\n protected _adjustConfig(config: ChartConfig) {\n if (!config || !config.type) {\n return;\n }\n this._adjustType(config);\n if (this.chart.data) {\n this._computeDatasets(this.chart.data, config);\n }\n this._adjustData(config);\n this._adjustLegend(config);\n this._adjustTooltip(config);\n this._adjustGrid(config);\n this._adjustPlugins(config);\n this._adjustColors(config);\n this._adjustClickHandler(config);\n this._adjustResizeHandler(config);\n }\n\n protected _adjustType(config: ChartConfig) {\n if (config.type === Chart.Type.COMBO_BAR_LINE) {\n config.type = Chart.Type.BAR;\n\n let scaleLabelByTypeMap = (config.options || {}).scaleLabelByTypeMap;\n if (scaleLabelByTypeMap) {\n scaleLabelByTypeMap[Chart.Type.BAR] = scaleLabelByTypeMap[Chart.Type.COMBO_BAR_LINE];\n }\n } else if (this._isHorizontalBar(config)) {\n config.type = Chart.Type.BAR;\n config.options = $.extend(true, {}, config.options, {\n indexAxis: 'y'\n });\n }\n }\n\n protected _computeDatasets(chartData: ChartData, config: ChartConfig) {\n let labels = [],\n datasets = [];\n\n let setLabelMap = (identifier, labelMap) => {\n if (!$.isEmptyObject(labelMap)) {\n config.options[identifier] = labelMap;\n }\n };\n\n (chartData.axes[0] || []).forEach(elem => labels.push(elem.label));\n\n let isHorizontalBar = this._isHorizontalBar(config);\n setLabelMap(isHorizontalBar ? 'yLabelMap' : 'xLabelMap', this._computeLabelMap(chartData.axes[0]));\n setLabelMap(isHorizontalBar ? 'xLabelMap' : 'yLabelMap', this._computeLabelMap(chartData.axes[1]));\n\n chartData.chartValueGroups.forEach(elem => datasets.push({\n type: elem.type,\n label: elem.groupName,\n data: $.extend(true, [], elem.values)\n }));\n\n config.data = {\n labels: labels,\n datasets: datasets\n };\n }\n\n protected _isHorizontalBar(config: ChartConfig): boolean {\n return config && (config.type === Chart.Type.BAR_HORIZONTAL\n || (config.type === Chart.Type.BAR && config.options && config.options.indexAxis === 'y'));\n }\n\n protected _computeLabelMap(axis: ChartAxis[]): Record<number, string> {\n let labelMap = {};\n (axis || []).forEach((elem, idx) => {\n labelMap[idx] = elem.label;\n });\n return labelMap;\n }\n\n protected _adjustData(config: ChartConfig) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n this._adjustBarBorderWidth(config);\n this._adjustMaxSegments(config);\n this._adjustBubbleRadii(config);\n this._adjustOnlyIntegers(config);\n }\n\n protected _adjustBarBorderWidth(config: ChartConfig) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.BAR)) {\n return;\n }\n\n config.data.datasets.forEach(dataset => {\n if ((dataset.type || Chart.Type.BAR) === Chart.Type.BAR) {\n dataset.borderWidth = dataset.borderWidth || 1;\n dataset.hoverBorderWidth = dataset.hoverBorderWidth || 2;\n this._adjustDatasetBorderWidths(dataset);\n }\n });\n }\n\n protected _adjustDatasetBorderWidths(dataset: ChartDataset) {\n this._adjustDatasetBorderWidth(dataset);\n this._adjustDatasetBorderWidth(dataset, true);\n }\n\n /**\n * Sets the borderWidth to 0 if the backgroundColor and the borderColor are identical and backups the original value.\n * This method is idempotent as it restores the original state first and then applies its logic.\n *\n * @param hover whether hoverBorderWidth, hoverBackgroundColor and hoverBorderColor should be considered instead of borderWidth, backgroundColor and borderColor\n */\n protected _adjustDatasetBorderWidth(dataset: ChartDataset, hover?: boolean) {\n if (!dataset) {\n return;\n }\n let borderWidthIdentifier = hover ? 'hoverBorderWidth' : 'borderWidth',\n borderWidthBackupIdentifier = hover ? 'hoverBorderWidthBackup' : 'borderWidthBackup',\n backgroundColorIdentifier = hover ? 'hoverBackgroundColor' : 'backgroundColor',\n borderColorIdentifier = hover ? 'hoverBorderColor' : 'borderColor';\n // restore original state if there is a backup\n if (dataset[borderWidthBackupIdentifier]) {\n dataset[borderWidthIdentifier] = dataset[borderWidthBackupIdentifier];\n delete dataset[borderWidthBackupIdentifier];\n }\n // do nothing if there is no borderWidth set on the dataset or the borderWidth is a function\n if (!dataset[borderWidthIdentifier] || objects.isFunction(dataset[borderWidthIdentifier])) {\n return;\n }\n let isBorderWidthArray = Array.isArray(dataset[borderWidthIdentifier]),\n isBackgroundColorArray = Array.isArray(dataset[backgroundColorIdentifier]),\n isBorderColorArray = Array.isArray(dataset[borderColorIdentifier]),\n isArray = isBorderWidthArray || isBackgroundColorArray || isBorderColorArray;\n // if none of the properties is an array, simply backup the borderWidth and set it to 0\n if (!isArray && dataset[backgroundColorIdentifier] === dataset[borderColorIdentifier]) {\n dataset[borderWidthBackupIdentifier] = dataset[borderWidthIdentifier];\n dataset[borderWidthIdentifier] = 0;\n return;\n }\n // at least one of the properties is an array, therefore the borderWidth needs to be an array from now on\n let dataLength = (dataset.data || []).length;\n if (!isBorderWidthArray) {\n dataset[borderWidthIdentifier] = arrays.init(dataLength, dataset[borderWidthIdentifier]);\n } else if (dataset[borderWidthIdentifier].length < dataLength) {\n dataset[borderWidthIdentifier].push(...arrays.init(dataLength - dataset[borderWidthIdentifier].length, dataset[borderWidthIdentifier][0]));\n }\n let borderWidth = dataset[borderWidthIdentifier],\n length = borderWidth.length,\n borderWidthBackup = arrays.init(length, null);\n for (let i = 0; i < length; i++) {\n // it makes no difference if the backgroundColor/borderColor is not an array as a not-array-value is applied to every element by chart.js\n let backgroundColor = isBackgroundColorArray ? dataset[backgroundColorIdentifier][i] : dataset[backgroundColorIdentifier],\n borderColor = isBorderColorArray ? dataset[borderColorIdentifier][i] : dataset[borderColorIdentifier];\n borderWidthBackup[i] = borderWidth[i];\n if (backgroundColor === borderColor) {\n borderWidth[i] = 0;\n }\n }\n // only set the backup if at least one of the borderWidths changed\n if (!arrays.equals(borderWidth, borderWidthBackup)) {\n dataset[borderWidthBackupIdentifier] = borderWidthBackup;\n }\n }\n\n protected _adjustMaxSegments(config: ChartConfig) {\n if (!config || !config.data || !config.type || !scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return;\n }\n\n let maxSegments = config.options.maxSegments;\n if (!(maxSegments && config.data.datasets.length && maxSegments < config.data.datasets[0].data.length)) {\n return;\n }\n config.data.datasets.forEach(elem => {\n let newData = elem.data.slice(0, maxSegments);\n newData[maxSegments - 1] = elem.data.slice(maxSegments - 1, elem.data.length).reduce((x: number, y: number) => {\n return x + y;\n }, 0);\n elem.data = newData;\n });\n\n let newLabels = config.data.labels.slice(0, maxSegments);\n newLabels[maxSegments - 1] = this.chart.session.text('ui.OtherValues');\n config.data.labels = newLabels;\n config.data.maxSegmentsExceeded = true;\n }\n\n protected _isMaxSegmentsExceeded(config: ChartConfig, index: number): boolean {\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n return false;\n }\n if (config.options.otherSegmentClickable) {\n return false;\n }\n if (!config.data.maxSegmentsExceeded || !config.options.maxSegments) {\n return false;\n }\n return config.options.maxSegments - 1 <= index;\n }\n\n /**\n * Fill temporary variable z for every bubble, if not yet set, and set bubble radius temporary to 1.\n * This allows the chart to render itself with correct dimensions and with no interfering from bubbles (very large bubbles make the chart grid itself smaller).\n * Later on in {@link _adjustBubbleSizes}, the bubble sizes will be calculated relative to the chart dimensions and the configured min/max sizes.\n */\n protected _adjustBubbleRadii(config: ChartConfig) {\n if (!config || !config.data || !config.type || config.type !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.data.datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!isNaN(data.r)) {\n data.z = Math.pow(data.r, 2);\n }\n data.r = 1;\n }));\n }\n\n protected _adjustOnlyIntegers(config: ChartConfig) {\n this.onlyIntegers = true;\n\n if (!config || !config.data || !config.type) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every((data: ScatterDataPoint | BubbleDataPoint) => numbers.isInteger(data.x) && numbers.isInteger(data.y)));\n } else {\n this.onlyIntegers = config.data.datasets.every(dataset => dataset.data.every(data => numbers.isInteger(data)));\n }\n }\n\n protected _adjustLegend(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n legend: {\n labels: {\n generateLabels: this._legendLabelGenerator\n }\n }\n }\n });\n\n if (!config.options.plugins.legend.pointsVisible) {\n config.options.plugins.legend.labels.boxWidth = 0;\n }\n }\n\n protected _adjustTooltip(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, {\n plugins: {\n tooltip: {\n callbacks: {\n title: this._tooltipTitleGenerator,\n items: this._tooltipItemsGenerator,\n label: this._tooltipLabelGenerator,\n labelValue: this._tooltipLabelValueGenerator,\n labelColor: this._tooltipLabelColorGenerator\n }\n }\n }\n }, config.options);\n\n let tooltip = config.options.plugins.tooltip;\n\n if (!tooltip.enabled) {\n return;\n }\n\n tooltip.enabled = false;\n tooltip.external = this._tooltipRenderer;\n }\n\n protected _generateTooltipTitle(tooltipItems: TooltipItem<any>[]): string | string[] {\n if (!tooltipItems || !tooltipItems.length) {\n return '';\n }\n let tooltipItem = tooltipItems[0],\n chart = tooltipItem.chart as ChartJsChart,\n config = chart.config,\n dataset = tooltipItem.dataset,\n title = [];\n if (scout.isOneOf(config.type, Chart.Type.BUBBLE)) {\n let xAxis = config.options.scales.x,\n yAxis = config.options.scales.y,\n axisLabels = this._getAxisLabels(config);\n // @ts-expect-error\n let xTickLabel = xAxis.ticks.callback(dataset.data[tooltipItem.dataIndex].x, null, null) as string;\n if (xTickLabel) {\n title.push(this._createTooltipAttribute(axisLabels.x, strings.encode(xTickLabel), true));\n }\n // @ts-expect-error\n let yTickLabel = yAxis.ticks.callback(dataset.data[tooltipItem.dataIndex].y, null, null) as string;\n if (yTickLabel) {\n title.push(this._createTooltipAttribute(axisLabels.y, strings.encode(yTickLabel), true));\n }\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n // nop, scatter has the title in the items table\n } else {\n let label = chart.data.labels[tooltipItem.dataIndex] as string;\n title.push(this._createTooltipAttribute(config.options.reformatLabels ? this._formatLabel(label) : label, '', true));\n }\n return title;\n }\n\n protected _getAxisLabels(config: ChartConfig): { x: string; y: string } {\n let xAxisLabel = config.options.scales.x.title.text,\n yAxisLabel = config.options.scales.y.title.text;\n xAxisLabel = this._resolveAxisLabel(xAxisLabel as string, ChartJsRenderer.ARROW_LEFT_RIGHT);\n yAxisLabel = this._resolveAxisLabel(yAxisLabel as string, '&nbsp;' + ChartJsRenderer.ARROW_UP_DOWN + '&nbsp;');\n\n return {x: xAxisLabel, y: yAxisLabel};\n }\n\n protected _resolveAxisLabel(axisLabel: string | (() => string), defaultLabel = ''): string {\n if (objects.isFunction(axisLabel)) {\n axisLabel = axisLabel();\n axisLabel = objects.isString(axisLabel) ? axisLabel : '';\n }\n return axisLabel ? strings.encode(axisLabel) : defaultLabel;\n }\n\n protected _generateTooltipItems(tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator): string {\n if (!tooltipItems || !tooltipItems.length) {\n return '';\n }\n let tooltipItem = tooltipItems[0],\n chart = tooltipItem.chart as ChartJsChart,\n config = chart.config,\n xAxisValues = false,\n yAxisValues = false,\n itemsText = '';\n\n tooltipItems.forEach(tooltipItem => {\n let {label, labelValue, labelColor} = this._getItemDetails(tooltipItem, tooltipLabel, tooltipLabelValue, tooltipColor);\n if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n let {x, y} = labelValue as { x: string; y: string };\n xAxisValues ||= objects.isString(x);\n yAxisValues ||= objects.isString(y);\n itemsText += this._createTooltipScatterAttribute(label, x, y, false, labelColor);\n } else {\n itemsText += this._createTooltipAttribute(label, labelValue as string, false, labelColor);\n }\n });\n\n // tabular representation for scatter tooltip needs an additional header and footer\n if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n let tableHeader = '<table><tbody>';\n let axisLabels = this._getAxisLabels(config);\n tableHeader += this._createTooltipScatterAttribute('',\n xAxisValues ? axisLabels.x : '', // do not show axis label if no values are shown\n yAxisValues ? axisLabels.y : '', // do not show axis label if no values are shown\n true);\n let tableFooter = '</tbody></table>';\n itemsText = strings.box(tableHeader, itemsText, tableFooter);\n }\n\n return itemsText;\n }\n\n protected _getItemDetails(tooltipItem: TooltipItem<any>, tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator)\n : { label: string; labelValue: string | { x: string; y: string }; labelColor: string } {\n let label, labelValue, labelColor;\n if (objects.isFunction(tooltipLabel)) {\n label = tooltipLabel(tooltipItem);\n label = objects.isString(label) ? label : '';\n }\n if (objects.isFunction(tooltipLabelValue)) {\n labelValue = tooltipLabelValue(tooltipItem);\n labelValue = objects.isString(labelValue) || objects.isObject(labelValue) ? labelValue : '';\n }\n if (objects.isFunction(tooltipColor)) {\n labelColor = tooltipColor(tooltipItem);\n labelColor = objects.isObject(labelColor) ? (labelColor.backgroundColor || '') : '';\n }\n return {label, labelValue, labelColor};\n }\n\n protected _generateTooltipLabel(tooltipItem: TooltipItem<any>): string {\n return strings.encode(tooltipItem.dataset.label);\n }\n\n protected _generateTooltipLabelValue(tooltipItem: TooltipItem<any>): string | { x: string; y: string } {\n let config = tooltipItem.chart.config as ChartConfiguration,\n dataset = tooltipItem.dataset;\n if (config.type === Chart.Type.BUBBLE) {\n return strings.encode(this._formatLabel(dataset.data[tooltipItem.dataIndex].z));\n } else if (config.type === Chart.Type.SCATTER) {\n return {\n x: strings.encode(this._formatXLabel(dataset.data[tooltipItem.dataIndex].x)),\n y: strings.encode(this._formatYLabel(dataset.data[tooltipItem.dataIndex].y))\n };\n }\n return strings.encode(this._formatLabel(dataset.data[tooltipItem.dataIndex]));\n }\n\n protected _generateTooltipLabelColor(tooltipItem: TooltipItem<any>): TooltipLabelStyle {\n let config = tooltipItem.chart.config as ChartConfiguration,\n dataset = tooltipItem.dataset,\n legendColor, backgroundColor, borderColor, index;\n if (scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.BAR_HORIZONTAL, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n borderColor = dataset.borderColor;\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.dataIndex] : dataset.legendColor;\n index = tooltipItem.datasetIndex;\n }\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[tooltipItem.dataIndex] : dataset.legendColor;\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[tooltipItem.dataIndex] : dataset.backgroundColor;\n backgroundColor = this._adjustColorOpacity(backgroundColor, 1);\n index = tooltipItem.dataIndex;\n }\n if (objects.isFunction(legendColor)) {\n legendColor = legendColor.call(tooltipItem.chart, index);\n }\n let tooltipLabelColor = legendColor || backgroundColor || borderColor;\n if (!tooltipLabelColor || objects.isFunction(tooltipLabelColor)) {\n let defaultTypeTooltipLabelColor;\n if (ChartJs.overrides[config.type] && ChartJs.overrides[config.type].plugins && ChartJs.overrides[config.type].plugins.tooltip && ChartJs.overrides[config.type].plugins.tooltip.callbacks) {\n defaultTypeTooltipLabelColor = ChartJs.overrides[config.type].plugins.tooltip.callbacks.labelColor;\n }\n let defaultTooltipLabelColor = defaultTypeTooltipLabelColor || ChartJs.defaults.plugins.tooltip.callbacks.labelColor;\n tooltipLabelColor = defaultTooltipLabelColor.call(tooltipItem.chart, tooltipItem).backgroundColor;\n }\n return {\n backgroundColor: tooltipLabelColor\n } as TooltipLabelStyle;\n }\n\n protected _createTooltipAttribute(label: string, value: string, isTitle: boolean, color?: string): string {\n let cssClass = isTitle ? 'attribute title' : 'attribute';\n return '<div class=\"' + cssClass + '\">' +\n (color ? '<div class=\"color\" style=\"background-color:' + color + '\"></div>' : '') +\n (label ? '<label>' + label + '</label>' : '') +\n (value ? '<div class=\"value\">' + value + '</div>' : '') +\n '</div>';\n }\n\n protected _createTooltipScatterAttribute(label: string, xValue: string, yValue: string, isTitle: boolean, color?: string): string {\n let cssClass = isTitle ? 'attribute title' : 'attribute';\n return '<tr class=\"' + cssClass + '\">' +\n '<td class=\"color-cell\">' +\n (color ? '<div class=\"color\" style=\"background-color:' + color + '\"></div>' : '') +\n '</td>' +\n '<td class=\"label\">' + label + '</td>' +\n (xValue ? '<td class=\"value\">' + xValue + '</td>' : '') +\n (yValue ? '<td class=\"value\">' + yValue + '</td>' : '') +\n '</tr>';\n }\n\n protected _renderTooltip(context: { chart: ChartJs; tooltip: TooltipModel<any> }) {\n let isHideTooltip = context.tooltip.opacity === 0 || context.tooltip.dataPoints.length < 1;\n if (isHideTooltip) {\n if (this._tooltipTimeoutId) {\n clearTimeout(this._tooltipTimeoutId);\n this._tooltipTimeoutId = undefined;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n this._tooltip = null;\n }\n return;\n }\n\n let isTooltipShowing = !!this._tooltip;\n if (isTooltipShowing) {\n this._renderTooltipLater(context);\n } else {\n // clear timeout before creating a new handler.\n // Otherwise, changing the context within the tooltip delay time creates a second handler\n // and the first one will always be executed, since the tooltipTimoutId reference to it is lost\n clearTimeout(this._tooltipTimeoutId);\n this._tooltipTimeoutId = setTimeout(() => this._renderTooltipLater(context), tooltips.DEFAULT_TOOLTIP_DELAY);\n }\n }\n\n protected _renderTooltipLater(context: { chart: ChartJs; tooltip: TooltipModel<any> }) {\n if (!this.rendered || this.removing) {\n return;\n }\n let tooltip = context.tooltip,\n dataPoints = tooltip.dataPoints;\n if (dataPoints.length < 1) {\n return;\n }\n let firstDataPoint = dataPoints[0],\n chart = firstDataPoint.chart;\n if (!chart.getDatasetMeta(firstDataPoint.datasetIndex).data[firstDataPoint.dataIndex]) {\n return;\n }\n if (this._tooltip) {\n this._tooltip.destroy();\n this._tooltip = null;\n }\n\n let tooltipOptions = tooltip.options || {} as TooltipOptions,\n tooltipCallbacks = tooltipOptions.callbacks || {} as TooltipCallbacks<any>,\n tooltipTitle = tooltipCallbacks.title as TooltipTitleGenerator,\n tooltipItems = tooltipCallbacks.items,\n tooltipLabel = tooltipCallbacks.label,\n tooltipLabelValue = tooltipCallbacks.labelValue,\n tooltipColor = tooltipCallbacks.labelColor,\n tooltipText = '';\n\n if (objects.isFunction(tooltipTitle)) {\n tooltipText += arrays.ensure(tooltipTitle(dataPoints)).join('');\n }\n if (objects.isFunction(tooltipItems)) {\n tooltipText += arrays.ensure(tooltipItems(dataPoints, tooltipLabel, tooltipLabelValue, tooltipColor)).join('');\n }\n\n let positionAndOffset = this._computeTooltipPositionAndOffset(firstDataPoint);\n let offset = new Point(tooltip.caretX + positionAndOffset.offsetX, tooltip.caretY + positionAndOffset.offsetY);\n\n this._tooltip = scout.create({\n objectType: Tooltip,\n parent: this.chart,\n $anchor: this.$canvas,\n text: tooltipText,\n htmlEnabled: true,\n cssClass: strings.join(' ', 'chart-tooltip', tooltipOptions.cssClass),\n tooltipPosition: positionAndOffset.tooltipPosition,\n tooltipDirection: positionAndOffset.tooltipDirection,\n originProducer: $anchor => {\n const origin = graphics.offsetBounds($anchor);\n origin.height = positionAndOffset.height;\n return origin;\n },\n offsetProducer: origin => offset\n });\n this._tooltip.render();\n\n this._tooltip.$container\n .css('pointer-events', 'none');\n\n let reposition = false,\n fontFamily = ((tooltipOptions.titleFont || {}) as FontSpec).family;\n if (fontFamily) {\n this._tooltip.$container\n .css('--chart-tooltip-font-family', fontFamily);\n reposition = true;\n }\n\n let maxLabelPrefSize = 0;\n this._tooltip.$container.find('label').each((idx, elem) => {\n maxLabelPrefSize = Math.max(maxLabelPrefSize, graphics.prefSize($(elem)).width);\n });\n if (maxLabelPrefSize > 0) {\n this._tooltip.$container\n .css('--chart-tooltip-label-width', Math.min(maxLabelPrefSize, 120) + 'px');\n reposition = true;\n }\n if (reposition) {\n this._tooltip.position();\n }\n }\n\n protected _computeTooltipPositionAndOffset(tooltipItem: TooltipItem<any>): { tooltipPosition: 'top' | 'bottom'; tooltipDirection: 'left' | 'right'; offsetX: number; offsetY: number; height: number } {\n let tooltipPosition: 'top' | 'bottom' = 'top',\n tooltipDirection: 'left' | 'right' = 'right',\n offsetX = 0,\n offsetY = 0,\n height = 0;\n\n let chart = tooltipItem.chart as ChartJsChart,\n datasetIndex = tooltipItem.datasetIndex,\n dataIndex = tooltipItem.dataIndex,\n config = chart.config,\n datasets = config.data.datasets,\n dataset = datasets[datasetIndex],\n value = dataset.data[dataIndex];\n\n if (this._isHorizontalBar(config)) {\n if (objects.isObject(value) && objects.isArray(value.x) && value.x.length === 2) {\n let avg = (value.x[0] + value.x[1]) / 2;\n tooltipDirection = avg < 0 ? 'left' : 'right';\n } else {\n tooltipDirection = (value as number) < 0 ? 'left' : 'right';\n }\n } else if ((dataset.type || config.type) === Chart.Type.BAR) {\n tooltipPosition = (value as number) < 0 ? 'bottom' : 'top';\n } else if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle']);\n let startAngle = element.startAngle,\n endAngle = element.endAngle,\n angle = (startAngle + endAngle) / 2;\n tooltipPosition = (0 <= angle && angle < Math.PI) ? 'bottom' : 'top';\n tooltipDirection = (-Math.PI / 2 <= angle && angle < Math.PI / 2) ? 'right' : 'left';\n } else if (config.type === Chart.Type.RADAR) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as PointElement).getProps(['angle']);\n let angle = element.angle as number;\n tooltipPosition = (0 <= angle && angle < Math.PI) ? 'bottom' : 'top';\n tooltipDirection = (-Math.PI / 2 <= angle && angle < Math.PI / 2) ? 'right' : 'left';\n } else if (scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n let element = chart.getDatasetMeta(datasetIndex).data[dataIndex];\n let chartArea = chart.chartArea,\n mid = chartArea.left + (chartArea.width / 2);\n tooltipDirection = element.x < mid ? 'left' : 'right';\n }\n\n if (this._isHorizontalBar(config)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as BarElement).getProps(['height', 'width']);\n height = element.height;\n let width = element.width,\n // golden ratio: (a + b) / a = a / b = PHI\n // and a + b = width\n // -> b = width / (PHI + 1)\n b = width / (PHI + 1);\n\n offsetY = -height / 2;\n offsetX = tooltipDirection === 'left' ? b : -b;\n } else if (scout.isOneOf(config.type, Chart.Type.LINE, Chart.Type.BUBBLE, Chart.Type.SCATTER, Chart.Type.RADAR) || dataset.type === Chart.Type.LINE) {\n let element = chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as PointElement;\n let options = element.options as unknown as PointHoverOptions,\n offset = options.hoverRadius + options.hoverBorderWidth;\n if (config.type === Chart.Type.BUBBLE) {\n offset += (value as BubbleDataPoint).r;\n }\n\n height = 2 * offset;\n offsetY = -offset;\n } else if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let element = (chart.getDatasetMeta(datasetIndex).data[dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius']);\n let startAngle = element.startAngle,\n endAngle = element.endAngle,\n angle = (startAngle + endAngle) / 2,\n innerRadius = element.innerRadius,\n outerRadius = element.outerRadius,\n offset = (outerRadius - innerRadius) / 2;\n offsetX = offset * Math.cos(angle);\n offsetY = offset * Math.sin(angle);\n }\n\n return {tooltipPosition, tooltipDirection, offsetX, offsetY, height};\n }\n\n protected _adjustGrid(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options);\n\n this._adjustScalesR(config);\n this._adjustScalesXY(config);\n }\n\n protected _adjustScalesR(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.POLAR_AREA, Chart.Type.RADAR)) {\n config.options = $.extend(true, {}, {\n scales: {\n r: {}\n }\n }, config.options);\n }\n\n let options = config.options,\n scales = options ? options.scales : {};\n if (scales && scales.r) {\n scales.r = $.extend(true, {}, {\n minSpaceBetweenTicks: 35,\n beginAtZero: true,\n angleLines: {\n display: false\n },\n ticks: {\n callback: this._labelFormatter\n },\n pointLabels: {\n callback: this._labelFormatter,\n font: {\n size: ChartJs.defaults.font.size\n }\n }\n }, scales.r);\n }\n }\n\n protected _adjustScalesXY(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.BUBBLE)) {\n config.options = $.extend(true, {}, {\n scales: {\n x: {\n minSpaceBetweenTicks: 150\n },\n y: {\n minSpaceBetweenTicks: 35\n }\n }\n }, config.options);\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n config.options = $.extend(true, {}, {\n scales: {\n x: {\n minSpaceBetweenTicks: 35,\n ticks: {\n padding: 10\n }\n },\n y: {\n minSpaceBetweenTicks: 35,\n ticks: {\n padding: 10\n }\n }\n }\n }, config.options);\n }\n\n this._adjustXAxis(config);\n this._adjustYAxis(config);\n }\n\n protected _adjustXAxis(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.x) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales;\n\n if (this._isHorizontalBar(config) || scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n scales.x = $.extend(true, {}, {\n beginAtZero: this._isHorizontalBar(config),\n offset: type === Chart.Type.BUBBLE,\n grid: {\n drawTicks: false\n },\n border: {\n display: false\n },\n ticks: {\n padding: 5\n }\n }, scales.x);\n } else {\n scales.x = $.extend(true, {}, {\n offset: true,\n grid: {\n display: false\n },\n border: {\n display: false\n }\n }, scales.x);\n }\n if (this._isHorizontalBar(config) || scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER) || config.options.reformatLabels) {\n scales.x = $.extend(true, {}, {\n ticks: {\n callback: this._xLabelFormatter\n }\n }, scales.x);\n }\n scales.x.afterCalculateLabelRotation = this._xAxisFitter;\n }\n\n protected _adjustYAxis(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.y) {\n return;\n }\n\n let type = config.type,\n scales = config.options.scales;\n\n if (this._isHorizontalBar(config)) {\n scales.y = $.extend(true, {}, {\n grid: {\n display: false\n },\n border: {\n display: false\n }\n }, scales.y);\n } else {\n scales.y = $.extend(true, {}, {\n beginAtZero: !scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER),\n grid: {\n drawTicks: false\n },\n border: {\n display: false\n },\n ticks: {\n padding: 5\n }\n }, scales.y);\n }\n if (!this._isHorizontalBar(config) || config.options.reformatLabels) {\n scales.y = $.extend(true, {}, {\n ticks: {\n callback: this._yLabelFormatter\n }\n }, scales.y);\n }\n scales.y.afterFit = this._yAxisFitter;\n }\n\n protected _adjustPlugins(config: ChartConfig) {\n this._adjustPluginsDatalabels(config);\n }\n\n protected _adjustPluginsDatalabels(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels || !config.options.plugins.datalabels.display) {\n return;\n }\n\n let plugins = config.options.plugins;\n if (scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._radialChartDatalabelsFormatter\n }, plugins.datalabels);\n plugins.datalabels.display = this._radialChartDatalabelsDisplayHandler;\n // since the this._radialChartDatalabelsDisplayHandler depends on values that are animated, we need to update the labels during the animation\n this._updatingDatalabels = false;\n let animation = config.options.animation || {},\n onProgress = animation.onProgress,\n onComplete = animation.onComplete,\n updateDatalabels = animation => {\n if (this._updatingDatalabels) {\n return;\n }\n this._updatingDatalabels = true;\n // invert the _actives of the datalabel plugin and call its afterEvent-hook\n // this hook will update its _actives to chart.getActiveElements() and recalculate the labels for all elements that changed\n // setting _actives to the complement of chart.getActiveElements() guarantees that all labels are updated\n let chart = animation.chart,\n metas = chart.getSortedVisibleDatasetMetas(),\n activeElements = [...chart.getActiveElements()],\n inactiveElements = [];\n\n metas.forEach((meta, datasetIndex) => {\n meta.data.forEach((element, index) => {\n let activeIndex = arrays.findIndex(activeElements, activeElement => activeElement.datasetIndex === datasetIndex && activeElement.index === index);\n if (activeIndex > 0) {\n activeElements.splice(activeIndex, 1);\n } else {\n inactiveElements.push({\n datasetIndex: datasetIndex,\n index: index,\n element: element\n });\n }\n });\n });\n\n // the datalabels plugin stores its data on the chart in $datalabels (see EXPANDO_KEY in chartjs-plugin-datalabels)\n chart['$' + ChartDataLabels.id]._actives = inactiveElements;\n ChartDataLabels.afterEvent(chart, null, null);\n this._updatingDatalabels = false;\n },\n updateDatalabelsAndDefaultCallback = (animation, defaultCallback) => {\n updateDatalabels(animation);\n if (defaultCallback) {\n defaultCallback(animation);\n }\n };\n\n config.options.animation = $.extend(true, {}, config.options.animation, {\n onProgress: animation => updateDatalabelsAndDefaultCallback(animation, onProgress),\n onComplete: animation => updateDatalabelsAndDefaultCallback(animation, onComplete)\n });\n\n } else if (scout.isOneOf(config.type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 3\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n } else if (scout.isOneOf(config.type, Chart.Type.SCATTER)) {\n plugins.datalabels = $.extend(true, {}, {\n backgroundColor: this._datalabelBackgroundColorHandler,\n borderRadius: 3,\n anchor: 'end',\n align: 'top',\n offset: 3\n }, plugins.datalabels);\n plugins.datalabels.display = 'auto';\n }\n if (config.options.reformatLabels) {\n let handleFormatter = formatter => {\n return (value, context) => {\n let label = formatter.call(context.chart, value, context);\n return this._formatLabel(label);\n };\n };\n\n if (config.data) {\n let datasets = config.data.datasets;\n datasets.forEach(dataset => {\n if (dataset.datalabels && dataset.datalabels.formatter) {\n dataset.datalabels.formatter = handleFormatter(dataset.datalabels.formatter);\n }\n });\n }\n if (plugins.datalabels.formatter) {\n plugins.datalabels.formatter = handleFormatter(plugins.datalabels.formatter);\n }\n }\n\n plugins.datalabels = $.extend(true, {}, {\n formatter: this._datalabelsFormatter\n }, plugins.datalabels);\n }\n\n protected _getNumberFormatter(): NumberFormatter {\n return this.chartJs?.config?.options?.numberFormatter;\n }\n\n /**\n * Creates an unbound function that calls the given formatter on this {@link ChartJsRenderer}. The context of this\n * unbound function is passed to the formatter as argument.\n */\n protected _createLabelFormatter(formatter: LabelFormatter): LabelFormatter {\n const renderer = this;\n return function(label) {\n return formatter.call(renderer, label, this);\n };\n }\n\n protected _formatLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n protected _formatXLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n protected _formatYLabel(label: number | string, scale?: Scale): string {\n label = this._formatCategory(label, scale);\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\n }\n\n /**\n * Uses the given scale to format the given label iff it is a {@link CategoryScale}.\n */\n protected _formatCategory(label: number | string, scale?: Scale): number | string {\n if (scale instanceof CategoryScale && numbers.isNumber(label)) {\n return scale.getLabelForValue(label);\n }\n return label;\n }\n\n protected _getXLabelMap(): Record<number | string, string> {\n return this._getLabelMap('xLabelMap');\n }\n\n protected _getYLabelMap(): Record<number | string, string> {\n return this._getLabelMap('yLabelMap');\n }\n\n protected _getLabelMap(identifier): Record<number | string, string> {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options[identifier];\n }\n }\n\n protected _formatLabelMap(label: number | string, labelMap: Record<string, string>, numberFormatter: NumberFormatter): string {\n if (labelMap) {\n return labelMap[label];\n }\n // @ts-expect-error\n if (isNaN(label) || typeof label === 'string') {\n return '' + label;\n }\n if (numberFormatter) {\n return numberFormatter(label, this._formatNumberLabel.bind(this));\n }\n return this._formatNumberLabel(label);\n }\n\n protected _formatNumberLabel(label: number | string): string {\n // @ts-expect-error\n if (isNaN(label)) {\n return '' + label;\n }\n // @ts-expect-error\n let abs = Math.abs(label);\n let abbreviation = '';\n if (abs >= 1000000) {\n abs = abs / 1000000;\n abbreviation = ' ' + this.chart.session.text('ui.Mio');\n let abbreviations = [\n this.chart.session.text('ui.Mrd'),\n this.chart.session.text('ui.Bio'),\n this.chart.session.text('ui.Brd'),\n this.chart.session.text('ui.Tri'),\n this.chart.session.text('ui.Trd')];\n for (let i = 0; i < abbreviations.length; i++) {\n if (abs >= 1000) {\n abs = abs / 1000;\n abbreviation = ' ' + abbreviations[i];\n } else {\n break;\n }\n }\n }\n // @ts-expect-error\n return this.session.locale.decimalFormat.format(Math.sign(label) * abs) + abbreviation;\n }\n\n protected _fitXAxis(xAxis: Scale<CartesianScaleOptions>) {\n if (!xAxis || xAxis.labelRotation === 0) {\n return;\n }\n let maxHeight = this.maxXAxesTicksHeight,\n fontDefaults = ChartJs.defaults.font,\n ticksDefaults = (ChartJs.defaults.scale as CartesianScaleOptions).ticks,\n ticksFontDefaults = (ticksDefaults.font || {}) as FontSpec,\n fontSize,\n maxRotation;\n if (this.chartJs) {\n let chartArea = this.chartJs.chartArea,\n chartAreaHeight = Math.abs(chartArea.top - chartArea.bottom);\n maxHeight = Math.min(maxHeight, chartAreaHeight / 3);\n }\n if (xAxis.options && xAxis.options.ticks) {\n maxRotation = xAxis.options.ticks.maxRotation;\n let ticksFont = (xAxis.options.ticks.font || {}) as FontSpec;\n fontSize = ticksFont.size;\n }\n maxRotation = maxRotation || ticksDefaults.maxRotation;\n fontSize = fontSize || ticksFontDefaults.size || fontDefaults.size;\n // if the chart is very narrow, chart.js sometimes calculates with a negative width of the canvas\n // this causes NaN for labelRotation and height\n if (isNaN(xAxis.labelRotation)) {\n xAxis.labelRotation = maxRotation;\n }\n xAxis.height = isNaN(xAxis.height) ? maxHeight : Math.min(xAxis.height, maxHeight);\n // the rotation (degrees), needs to be transformed to radians ((labelRotation / 180) * pi)\n let labelRotation = xAxis.labelRotation,\n // the label is a rectangle (labelWidth x fontSize) which is rotated\n // => height = sin(labelRotation) * labelLength + sin(90° - labelRotation) * fontSize\n // <=> labelLength = (height - sin(90° - labelRotation) * fontSize) / sin(labelRotation)\n maxLabelLength = (maxHeight - (fontSize * Math.sin(((90 - labelRotation) / 180) * Math.PI))) / Math.sin((labelRotation / 180) * Math.PI);\n // @ts-expect-error\n let labelSizes = xAxis._labelSizes || {},\n widest = labelSizes.widest || {};\n if (widest.width > maxLabelLength) {\n let measureText = xAxis.ctx.measureText.bind(xAxis.ctx);\n xAxis.ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label as string, maxLabelLength, measureText);\n });\n // reset label sizes, chart.js will recalculate them using the new truncated labels\n // @ts-expect-error\n xAxis._labelSizes = undefined;\n }\n }\n\n protected _fitYAxis(yAxis: Scale<CartesianScaleOptions>) {\n if (!yAxis) {\n return;\n }\n let padding = 0,\n tickLength = 0;\n if (yAxis.options && yAxis.options.ticks) {\n padding = yAxis.options.ticks.padding || 0;\n }\n if (yAxis.options && yAxis.options.grid) {\n tickLength = yAxis.options.grid.tickLength || 0;\n }\n // @ts-expect-error\n let labelSizes = yAxis._labelSizes || {},\n widest = labelSizes.widest || {};\n if (widest.width > yAxis.maxWidth - padding) {\n let horizontalSpace = yAxis.maxWidth - padding - tickLength,\n measureText = yAxis.ctx.measureText.bind(yAxis.ctx);\n yAxis.ticks.forEach(tick => {\n tick.label = strings.truncateText(tick.label as string, horizontalSpace, measureText);\n });\n }\n }\n\n protected _displayDatalabelsOnRadialChart(context: Context): boolean {\n let element = (context.chart.getDatasetMeta(context.datasetIndex).data[context.dataIndex] as unknown as ArcElement).getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius']);\n // Compute the biggest circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // First compute a circle C1 that touches the straight boundaries of the sector/arc. Then compute a circle C2 that touches the inner and the outer radius.\n // The smaller one of these two circles is the biggest possible circle that fits inside sector/arc with center in the middle between inner and outer radius.\n // circle C1:\n let midRadius = (element.outerRadius + element.innerRadius) / 2,\n // If the difference between the angles is greater than pi, it is no longer possible for a circle to be inside the sector/arc and touch both straight boundaries.\n angle = Math.min((element.endAngle - element.startAngle), Math.PI) / 2,\n radius1 = Math.abs(Math.sin(angle)) * midRadius,\n diameter1 = radius1 * 2,\n // circle C2:\n diameter2 = element.outerRadius - element.innerRadius;\n return Math.min(diameter1, diameter2) > this.minRadialChartDatalabelSpace;\n }\n\n protected _formatDatalabelsOnRadialChart(value: number, context: Context): string {\n let sum = this._computeSumOfVisibleElements(context),\n dataset = context.dataset,\n roundingError = 0,\n roundedResults = [];\n for (let i = 0; i < context.dataIndex + 1; i++) {\n let result = (dataset.data[i] as number) / sum * 100 - roundingError,\n roundedResult = Math.round(result);\n roundingError = roundedResult - result;\n roundedResults.push(roundedResult + '%');\n }\n return roundedResults[context.dataIndex];\n }\n\n protected _computeSumOfVisibleElements(context: Context): number {\n let dataset = context.dataset,\n chart = context.chart,\n sum = 0;\n for (let i = 0; i < dataset.data.length; i++) {\n if (chart.getDataVisibility(i)) {\n sum += dataset.data[i] as number;\n }\n }\n return sum;\n }\n\n protected _formatDatalabels(value: number | ScatterDataPoint | BubbleDataPoint, context: Context): string {\n let config = context.chart.config as ChartConfiguration;\n if (config.type === Chart.Type.BUBBLE) {\n return this._formatLabel((value as BubbleDataPoint).z);\n } else if (config.type === Chart.Type.SCATTER) {\n return strings.join(' / ', this._formatXLabel((value as ScatterDataPoint).x), this._formatYLabel((value as ScatterDataPoint).y));\n }\n return this._formatLabel(value as number);\n }\n\n protected _getBackgroundColorOfDataset(context: Context): Color {\n return context.dataset.backgroundColor as Color;\n }\n\n protected _adjustColors(config: ChartConfig) {\n this._adjustColorSchemeCssClass(config);\n this._adjustDatasetColors(config);\n this._adjustLegendColors(config);\n this._adjustScalesRColors(config);\n this._adjustScalesXYColors(config);\n this._adjustPluginColors(config);\n }\n\n protected _adjustColorSchemeCssClass(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n this.colorSchemeCssClass = colorSchemes.getCssClasses(config.options.colorScheme).join(' ');\n }\n\n protected _adjustDatasetColors(config: ChartConfig) {\n if (!config || !config.data || !config.type) {\n return;\n }\n\n let data = config.data,\n type = config.type,\n autoColor = config.options && config.options.autoColor,\n checkable = config.options && config.options.checkable,\n colorMode = config.options && config.options.colorMode,\n multipleColorsPerDataset = autoColor && (\n colorMode === ChartColorMode.DATASET\n ? false\n : colorMode === ChartColorMode.DATA\n ? true\n : scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)),\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n colors = $.extend(true, colors, this._computeDatasetColors(config, multipleColorsPerDataset));\n\n data.datasets.forEach((elem, idx) => {\n const getColor = colorsArray => {\n let candidate = colorsArray[idx];\n if (multipleColorsPerDataset && !Array.isArray(candidate)) {\n // we want multiple colors -> get the parent array\n candidate = colorsArray;\n }\n return candidate;\n };\n\n let backgroundColor = getColor(colors.backgroundColors),\n borderColor = getColor(colors.borderColors),\n hoverBackgroundColor = getColor(colors.hoverBackgroundColors),\n hoverBorderColor = getColor(colors.hoverBorderColors),\n legendColor = getColor(colors.legendColors),\n pointHoverBackgroundColor = getColor(colors.pointHoverColors);\n\n let setProperty = (identifier, value) => {\n if (typeof elem[identifier] === 'function') {\n return;\n }\n if (value && value.length) {\n elem[identifier] = Array.isArray(value) ? [...value] : value;\n }\n };\n setProperty('backgroundColor', backgroundColor);\n setProperty('borderColor', borderColor);\n setProperty('hoverBackgroundColor', hoverBackgroundColor);\n setProperty('hoverBorderColor', hoverBorderColor);\n setProperty('legendColor', legendColor);\n if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n setProperty('pointHoverBackgroundColor', pointHoverBackgroundColor);\n setProperty('pointBorderColor', this.firstOpaqueBackgroundColor);\n setProperty('pointHoverBorderColor', this.firstOpaqueBackgroundColor);\n }\n if (checkable) {\n const datasetLength = elem.data.length,\n ensureColorArray = color => {\n if (Array.isArray(color)) {\n return color;\n }\n return arrays.init(datasetLength, color);\n };\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.BUBBLE, Chart.Type.SCATTER) || (type === Chart.Type.BAR && (elem.type || Chart.Type.BAR) === Chart.Type.BAR)) {\n let uncheckedBackgroundColor = ensureColorArray(backgroundColor),\n uncheckedHoverBackgroundColor = ensureColorArray(hoverBackgroundColor),\n\n checkedBackgroundColor = ensureColorArray(getColor(colors.checkedBackgroundColors)),\n checkedHoverBackgroundColor = ensureColorArray(getColor(colors.checkedHoverBackgroundColors));\n\n setProperty('uncheckedBackgroundColor', uncheckedBackgroundColor);\n setProperty('uncheckedHoverBackgroundColor', uncheckedHoverBackgroundColor);\n setProperty('checkedBackgroundColor', checkedBackgroundColor);\n setProperty('checkedHoverBackgroundColor', checkedHoverBackgroundColor);\n\n setProperty('backgroundColor', elem.uncheckedBackgroundColor);\n setProperty('hoverBackgroundColor', elem.uncheckedHoverBackgroundColor);\n } else if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.RADAR) || (type === Chart.Type.BAR && elem.type === Chart.Type.LINE)) {\n let uncheckedPointBackgroundColor = ensureColorArray(pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = ensureColorArray(pointHoverBackgroundColor),\n\n checkedPointBackgroundColor = ensureColorArray(borderColor),\n checkedPointHoverBackgroundColor = ensureColorArray(hoverBorderColor || borderColor);\n\n setProperty('uncheckedPointBackgroundColor', uncheckedPointBackgroundColor);\n setProperty('uncheckedPointHoverBackgroundColor', uncheckedPointHoverBackgroundColor);\n setProperty('checkedPointBackgroundColor', checkedPointBackgroundColor);\n setProperty('checkedPointHoverBackgroundColor', checkedPointHoverBackgroundColor);\n\n setProperty('pointBackgroundColor', elem.uncheckedPointBackgroundColor);\n setProperty('pointHoverBackgroundColor', elem.uncheckedPointHoverBackgroundColor);\n\n let uncheckedPointRadius = arrays.init(datasetLength, ((config.options.elements || {}).point || {}).radius || ChartJs.defaults.elements.point.radius),\n checkedPointRadius = arrays.init(datasetLength, (((config.options.elements || {}).point || {}).hoverRadius || ChartJs.defaults.elements.point.hoverRadius) as number - 1);\n setProperty('uncheckedPointRadius', uncheckedPointRadius);\n setProperty('checkedPointRadius', checkedPointRadius);\n\n setProperty('pointRadius', elem.uncheckedPointRadius);\n }\n }\n this._adjustDatasetBorderWidths(elem);\n });\n if (checkable) {\n this._checkItems(config);\n }\n }\n\n protected _computeDatasetColors(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.data || !config.type) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n colors: DatasetColors = {};\n\n if (config.options && config.options.autoColor) {\n colors = this._computeDatasetColorsAutoColor(config, multipleColorsPerDataset);\n } else {\n colors = this._computeDatasetColorsChartValueGroups(config, multipleColorsPerDataset);\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n let borderColor = this._computeBorderColor(type, 0);\n colors.borderColors = arrays.init(data.datasets.length, borderColor);\n colors.hoverBorderColors = colors.borderColors;\n }\n }\n\n return colors;\n }\n\n protected _computeDatasetColorsAutoColor(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.data || !config.type || !config.options || !config.options.autoColor) {\n return {};\n }\n\n let data = config.data,\n type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n let types = [];\n if (multipleColorsPerDataset) {\n types = arrays.init((data.datasets.length && data.datasets[0].data.length) || 0, type);\n } else {\n data.datasets.forEach(dataset => types.push(dataset.type || type));\n }\n types.forEach((type, index) => {\n colors.backgroundColors.push(this._computeBackgroundColor(type, index, checkable || transparent));\n colors.borderColors.push(this._computeBorderColor(type, index));\n colors.hoverBackgroundColors.push(this._computeHoverBackgroundColor(type, index, checkable || transparent));\n colors.hoverBorderColors.push(this._computeHoverBorderColor(type, index));\n\n colors.checkedBackgroundColors.push(this._computeCheckedBackgroundColor(type, index, checkable));\n colors.checkedHoverBackgroundColors.push(this._computeCheckedHoverBackgroundColor(type, index, checkable));\n\n colors.legendColors.push(this._computeLegendColor(type, index));\n\n colors.pointHoverColors.push(this._computePointHoverColor(type, index));\n });\n\n return colors;\n }\n\n protected _computeBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors)], 'fill').fill;\n }\n\n protected _computeBorderColor(type: ChartType, index: number): string {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors)], 'stroke', additionalProperties).stroke;\n }\n\n protected _computeHoverBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover'], 'fill').fill;\n }\n\n protected _computeHoverBorderColor(type: ChartType, index: number): string {\n let additionalProperties;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n additionalProperties = {stroke: this.firstOpaqueBackgroundColor};\n }\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'stroke-color' + (index % this.numSupportedColors) + ' hover'], 'stroke', additionalProperties).stroke;\n }\n\n protected _computeCheckedBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' checked'], 'fill').fill;\n }\n\n protected _computeCheckedHoverBackgroundColor(type: ChartType, index: number, checkable: boolean): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart' + (checkable ? ' checkable' : ''), 'elements', 'color' + (index % this.numSupportedColors) + ' hover checked'], 'fill').fill;\n }\n\n protected _computeLegendColor(type: ChartType, index: number): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' legend'], 'fill').fill;\n }\n\n protected _computePointHoverColor(type: ChartType, index: number): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'color' + (index % this.numSupportedColors) + ' point hover'], 'fill').fill;\n }\n\n protected _computeDatasetColorsChartValueGroups(config: ChartConfig, multipleColorsPerDataset: boolean): DatasetColors {\n if (!config || !config.type || !this.chart.data) {\n return {};\n }\n\n let type = config.type,\n checkable = config.options && config.options.checkable,\n transparent = config.options && config.options.transparent,\n colors: DatasetColors = {\n backgroundColors: [],\n borderColors: [],\n hoverBackgroundColors: [],\n hoverBorderColors: [],\n checkedBackgroundColors: [],\n checkedHoverBackgroundColors: [],\n legendColors: [],\n pointHoverColors: []\n };\n\n this.chart.data.chartValueGroups.forEach(elem => {\n let backgroundOpacity = 1,\n hoverBackgroundOpacity = 1,\n hoverBackgroundDarker = 0.1,\n hoverBorderDarker = 0.1,\n\n uncheckedBackgroundOpacity = 0.2,\n uncheckedHoverBackgroundOpacity = 0.35,\n\n checkedBackgroundOpacity = 1,\n checkedBackgroundDarker = 0,\n checkedHoverBackgroundOpacity = 1,\n checkedHoverBackgroundDarker = 0.1;\n\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT)) {\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (type === Chart.Type.POLAR_AREA) {\n backgroundOpacity = 0.7;\n hoverBackgroundOpacity = 0.85;\n\n uncheckedBackgroundOpacity = 0.7;\n uncheckedHoverBackgroundOpacity = 0.85;\n\n checkedBackgroundDarker = 0.1;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf((elem.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n hoverBorderDarker = 0;\n\n checkedBackgroundOpacity = 0.2;\n checkedHoverBackgroundOpacity = 0.35;\n checkedHoverBackgroundDarker = 0;\n } else if (scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n backgroundOpacity = 0.2;\n hoverBackgroundOpacity = 0.35;\n hoverBackgroundDarker = 0;\n }\n\n const backgroundColors = [],\n borderColors = [],\n hoverBackgroundColors = [],\n hoverBorderColors = [],\n checkedBackgroundColors = [],\n checkedHoverBackgroundColors = [],\n legendColors = [],\n pointHoverColors = [];\n\n let colorHexValues = arrays.ensure(elem.colorHexValue);\n\n const datasetLength = arrays.length(elem.values as any[]);\n if (colorHexValues.length && colorHexValues.length < datasetLength) {\n // repeat colors for the whole dataset\n colorHexValues = arrays.init(datasetLength, null).map((elem, idx) => colorHexValues[idx % colorHexValues.length]);\n }\n\n colorHexValues.forEach(colorHexValue => {\n const rgbColor = styles.hexToRgb(colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\n backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n borderColors.push(adjustColor(1, 0));\n hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n legendColors.push(adjustColor(1, 0));\n pointHoverColors.push(adjustColor(1, 0));\n });\n\n colors.backgroundColors.push(backgroundColors);\n colors.borderColors.push(borderColors);\n colors.hoverBackgroundColors.push(hoverBackgroundColors);\n colors.hoverBorderColors.push(hoverBorderColors);\n colors.checkedBackgroundColors.push(checkedBackgroundColors);\n colors.checkedHoverBackgroundColors.push(checkedHoverBackgroundColors);\n colors.legendColors.push(legendColors);\n colors.pointHoverColors.push(pointHoverColors);\n });\n colors.datalabelColor = this._computeDatalabelColor(type);\n\n return colors;\n }\n\n protected _adjustColorOpacity(color: string, opacity = 1): string {\n if (!color || typeof color === 'function') {\n return color;\n }\n\n if (color.indexOf('rgb') === 0) {\n return this._adjustRgbColorOpacity(color, opacity);\n }\n if (color.indexOf('#') === 0) {\n return this._adjustHexColorOpacity(color, opacity);\n }\n return color;\n }\n\n protected _adjustRgbColorOpacity(rgbColor: string, opacity = 1): string {\n if (!rgbColor || rgbColor.indexOf('rgb') !== 0) {\n return rgbColor;\n }\n let rgba = styles.rgb(rgbColor);\n rgba.alpha = opacity;\n return 'rgba(' + rgba.red + ', ' + rgba.green + ', ' + rgba.blue + ', ' + rgba.alpha + ')';\n }\n\n protected _adjustHexColorOpacity(hexColor: string, opacity = 1): string {\n if (!hexColor || hexColor.indexOf('#') !== 0 || !(hexColor.length === 4 || hexColor.length === 5 || hexColor.length === 7 || hexColor.length === 9)) {\n return hexColor;\n }\n return this._adjustRgbColorOpacity(styles.hexToRgb(hexColor), opacity);\n }\n\n protected _adjustLegendColors(config: ChartConfig) {\n if (!config || !config.type || !config.options) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n legend: {\n labels: {\n color: this._computeLabelColor(config.type)\n }\n }\n }\n });\n }\n\n protected _computeLabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label'], 'fill').fill;\n }\n\n protected _generateLegendLabels(chart: ChartJsChart): LegendItem[] {\n let config = chart.config,\n defaultTypeGenerateLabels;\n if (ChartJs.overrides[config.type] && ChartJs.overrides[config.type].plugins && ChartJs.overrides[config.type].plugins.legend && ChartJs.overrides[config.type].plugins.legend.labels) {\n defaultTypeGenerateLabels = ChartJs.overrides[config.type].plugins.legend.labels.generateLabels;\n }\n let defaultGenerateLabels = defaultTypeGenerateLabels || ChartJs.defaults.plugins.legend.labels.generateLabels;\n let labels = defaultGenerateLabels.call(chart, chart);\n if (this.removing) {\n return labels;\n }\n let data = config.data,\n measureText = chart.ctx.measureText.bind(chart.ctx),\n legend = chart.legend,\n legendProps = legend.getProps(['width', 'maxWidth']) as { width: number; maxWidth: number },\n legendLabelOptions = ((legend || {}).options || {}).labels || {} as LegendOptions<any>['labels'],\n boxWidth = legendLabelOptions.boxWidth || 0,\n padding = legendLabelOptions.padding || 0,\n horizontalSpace;\n if (scout.isOneOf(config.options.plugins.legend.position, Chart.Position.LEFT, Chart.Position.RIGHT)) {\n if (legendProps.maxWidth || legend.width) {\n horizontalSpace = Math.max((legendProps.maxWidth || legend.width) - boxWidth - 2 * padding, 0);\n }\n horizontalSpace = Math.min(250, horizontalSpace || 0, this.$canvas.cssWidth() / 3);\n\n } else {\n horizontalSpace = Math.min(250, this.$canvas.cssWidth() * 2 / 3);\n }\n labels.forEach((elem, idx) => {\n elem.text = strings.truncateText(elem.text, horizontalSpace, measureText);\n let dataset = data.datasets[idx],\n legendColor, borderColor, backgroundColor;\n if (dataset && scout.isOneOf((dataset.type || config.type), Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n legendColor = arrays.ensure(dataset.legendColor)[0];\n borderColor = this._adjustColorOpacity(arrays.ensure(dataset.borderColor as string | string[])[0], 1);\n } else if (data.datasets.length && scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n dataset = data.datasets[0];\n legendColor = Array.isArray(dataset.legendColor) ? dataset.legendColor[idx] : dataset.legendColor;\n backgroundColor = Array.isArray(dataset.backgroundColor) ? dataset.backgroundColor[idx] : dataset.backgroundColor;\n backgroundColor = this._adjustColorOpacity(backgroundColor, 1);\n }\n if (objects.isFunction(legendColor)) {\n legendColor = legendColor.call(chart, idx);\n }\n let fillStyle = legendColor || backgroundColor || borderColor;\n if (!objects.isFunction(fillStyle)) {\n elem.fillStyle = fillStyle;\n elem.strokeStyle = fillStyle;\n }\n });\n return labels;\n }\n\n protected _adjustScalesRColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales || !config.options.scales.r) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n labelBackdropColor = this._computeLabelBackdropColor(config.type),\n gridColor = this._computeGridColor(config.type),\n scaleTicksColor = this._computeScaleTicksColor(config.type);\n\n config.options.scales.r.ticks = $.extend(true, {}, config.options.scales.r.ticks, {\n color: scaleTicksColor,\n backdropColor: labelBackdropColor\n });\n config.options.scales.r.pointLabels = $.extend(true, {}, config.options.scales.r.pointLabels, {\n color: labelColor\n });\n config.options.scales.r.grid = $.extend(true, {}, config.options.scales.r.grid, {\n color: gridColor\n });\n }\n\n protected _computeLabelBackdropColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'label-backdrop'], 'fill', {fill: this.firstOpaqueBackgroundColor}).fill;\n }\n\n protected _computeGridColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'grid'], 'fill').fill;\n }\n\n protected _computeScaleTicksColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'scale-ticks'], 'fill').fill;\n }\n\n protected _adjustScalesXYColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.scales) {\n return;\n }\n\n let axes = [];\n if (config.options.scales.x) {\n axes.push(config.options.scales.x);\n }\n if (config.options.scales.y) {\n axes.push(config.options.scales.y);\n }\n\n if (!axes.length) {\n return;\n }\n\n let labelColor = this._computeLabelColor(config.type),\n gridColor = this._computeGridColor(config.type),\n axisLabelColor = this._computeAxisLabelColor(config.type);\n\n axes.forEach(elem => {\n elem.grid = $.extend(true, {}, elem.grid, {\n color: gridColor\n });\n elem.ticks = $.extend(true, {}, elem.ticks, {\n color: labelColor\n });\n elem.title = $.extend(true, {}, elem.title, {\n color: axisLabelColor\n });\n });\n }\n\n protected _computeAxisLabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'axis-label'], 'fill').fill;\n }\n\n protected _adjustPluginColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins) {\n return;\n }\n\n this._adjustPluginsDatalabelColors(config);\n }\n\n protected _adjustPluginsDatalabelColors(config: ChartConfig) {\n if (!config || !config.type || !config.options || !config.options.plugins || !config.options.plugins.datalabels) {\n return;\n }\n\n config.options.plugins.datalabels = $.extend(true, {}, config.options.plugins.datalabels, {\n color: this._computeDatalabelColor(config.type)\n });\n }\n\n protected _computeDatalabelColor(type: ChartType): string {\n return styles.get([this.colorSchemeCssClass, type + '-chart', 'elements', 'datalabel'], 'fill').fill;\n }\n\n protected _adjustClickHandler(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.clickable) {\n config.options.onClick = this._clickHandler;\n config.options.onHover = this._pointerHoverHandler;\n } else {\n config.options.onHover = this._hoverHandler;\n }\n\n if (!config.options.plugins || !config.options.plugins.legend) {\n return;\n }\n\n let legend = config.options.plugins.legend;\n if (legend.clickable) {\n legend.onClick = this._legendClickHandler;\n legend.onHover = this._legendPointerHoverHandler;\n legend.onLeave = this._legendPointerLeaveHandler;\n } else {\n legend.onClick = e => e.native.stopPropagation();\n legend.onHover = this._legendHoverHandler;\n legend.onLeave = this._legendLeaveHandler;\n }\n }\n\n protected _onCanvasClick(event: JQuery.ClickEvent) {\n // Clicks on e.g. the axes don't trigger the onClickHandler of the chartJs Chart.\n // To register additional actions depending on the area clicked and to cover the whole canvas, the clicks outside an element must already be processed here.\n // If no item is present, a click in the chart but outside an element was made and a corresponding event gets triggered.\n // Clicks on elements are handled in a separate method (see this#_onClick)\n if (!this._hoveringClickableElement) {\n this.chart.handleNonValueClick(event.originalEvent);\n }\n event.originalEvent.stopPropagation();\n }\n\n protected _onClick(event: ChartEvent, items: ActiveElement[]) {\n if (!items.length) {\n this.chart.handleNonValueClick(event.native);\n return;\n }\n let relevantItem = this._selectRelevantItem(items);\n\n if (this._isMaxSegmentsExceeded(this.chartJs.config, relevantItem.index)) {\n this.chart.handleNonValueClick(event.native);\n return;\n }\n\n let itemIndex = relevantItem.index,\n datasetIndex = relevantItem.datasetIndex,\n clickObject: ClickObject = {\n datasetIndex: datasetIndex,\n dataIndex: itemIndex\n };\n if (scout.isOneOf(this.chartJs.config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n let data = this.chartJs.config.data.datasets[datasetIndex].data[itemIndex] as ScatterDataPoint | BubbleDataPoint;\n clickObject.xIndex = data.x;\n clickObject.yIndex = data.y;\n } else {\n clickObject.xIndex = itemIndex;\n }\n\n this.chart.handleValueClick(clickObject, event.native);\n }\n\n /**\n * Selects the most relevant item. Default is the first item.\n */\n protected _selectRelevantItem(items: ActiveElement[]): ActiveElement {\n let chartDatasets = this.chartJs.config.data.datasets;\n let relevantItem = items[0];\n\n if (this.chartJs.config.type === Chart.Type.BUBBLE) {\n // The smallest bubble, which is drawn in the foreground, is the most relevant item for the bubble chart.\n // If two bubbles are the same size, we choose the one which comes later in the array (bubble with array index n + 1 is draw in front of bubble with array index n)\n items.forEach(item => {\n if ((chartDatasets[item.datasetIndex].data[item.index] as BubbleDataPoint).z <= (chartDatasets[relevantItem.datasetIndex].data[relevantItem.index] as BubbleDataPoint).z) {\n relevantItem = item;\n }\n });\n }\n return relevantItem;\n }\n\n protected _onHover(event: ChartEvent, items: ActiveElement[]) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n return;\n }\n\n let config = this.chartJs.config,\n type = config.type;\n if (!scout.isOneOf(type, Chart.Type.LINE, Chart.Type.BAR, Chart.Type.RADAR)) {\n return;\n }\n\n let update = false;\n if (this.resetDatasetAfterHover) {\n this._restoreBackgroundColor();\n this.resetDatasetAfterHover = false;\n update = true;\n }\n items.forEach(item => {\n let dataset = config.data.datasets[item.datasetIndex];\n if (scout.isOneOf((dataset.type || type), Chart.Type.LINE, Chart.Type.RADAR)) {\n this._setHoverBackgroundColor(dataset);\n this.resetDatasetAfterHover = true;\n update = true;\n }\n });\n if (update) {\n this.refresh();\n }\n }\n\n protected _onHoverPointer(event: ChartEvent, items: ActiveElement[]) {\n this._onHover(event, items);\n if (!this.rendered || this.removing) {\n return;\n }\n if (items.length && !this._isMaxSegmentsExceeded(this.chartJs.config, items[0].index)) {\n this._hoveringClickableElement = true;\n this.$canvas.css('cursor', 'pointer');\n } else {\n this._hoveringClickableElement = false;\n this.$canvas.css('cursor', 'default');\n }\n }\n\n protected _onLegendClick(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n if (!this.chartJs.config || !this.chartJs.config.type) {\n this.chart.handleNonValueClick(e.native);\n return;\n }\n\n let type = this.chartJs.config.type,\n defaultTypeLegendClick;\n if (ChartJs.overrides[type] && ChartJs.overrides[type].plugins && ChartJs.overrides[type].plugins.legend) {\n defaultTypeLegendClick = ChartJs.overrides[type].plugins.legend.onClick;\n }\n let defaultLegendClick = defaultTypeLegendClick || ChartJs.defaults.plugins.legend.onClick;\n defaultLegendClick.call(this.chartJs, e, legendItem, legend);\n this._onLegendLeave(e, legendItem, legend);\n this._onLegendHoverPointer(e, legendItem, legend);\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea, {isDatasetVisible: i => this.chartJs.getDatasetMeta(i).visible});\n this.refresh();\n this.chart.handleLegendClick(legendItem.datasetIndex, e.native);\n }\n\n protected _onLegendHover(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n let index = legendItem.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = legendItem.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) > -1) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._setHoverBackgroundColor(dataset);\n this.refresh();\n }\n this._updateHoverStyle(index, true);\n this.chartJs.render();\n this.legendHoverDatasets.push(index);\n }\n\n protected _onLegendHoverPointer(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n this._onLegendHover(e, legendItem, legend);\n if (!this.rendered || this.removing) {\n return;\n }\n this._hoveringClickableElement = true;\n this.$canvas.css('cursor', 'pointer');\n }\n\n protected _onLegendLeave(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n let index = legendItem.datasetIndex,\n config = this.chartJs.config,\n type = config.type;\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n index = legendItem.index;\n }\n\n if (this.legendHoverDatasets.indexOf(index) < 0) {\n return;\n }\n\n let dataset = config.data.datasets[index],\n datasetType = dataset ? dataset.type : null;\n if ((datasetType || type) === Chart.Type.LINE) {\n this._restoreBackgroundColor(dataset);\n this.refresh();\n }\n this._updateHoverStyle(index, false);\n this.chartJs.render();\n this.legendHoverDatasets.splice(this.legendHoverDatasets.indexOf(index), 1);\n }\n\n /**\n * Sets the hover background color as the datasets background color.\n * This little workaround is necessary for the line chart, which does not support a native hover effect.\n * The previous background color will be backed up on the dataset property \"backgroundColorBackup\"\n * and can be restored with {@link _restoreBackgroundColor}.\n */\n protected _setHoverBackgroundColor(dataset: ChartDataset) {\n if (!dataset) {\n return;\n }\n // backup the old background color first\n dataset.backgroundColorBackup = dataset.backgroundColor as Color;\n // overwrite the current background color with the hover color\n dataset.backgroundColor = dataset.hoverBackgroundColor;\n this._adjustDatasetBorderWidths(dataset);\n }\n\n /**\n * Restores the background color of a dataset or of all datasets,\n * if they were previously overwritten by {@link _setHoverBackgroundColor}.\n */\n protected _restoreBackgroundColor(dataset?: ChartDataset) {\n if (dataset) {\n dataset.backgroundColor = dataset.backgroundColorBackup || dataset.backgroundColor;\n delete dataset.backgroundColorBackup;\n this._adjustDatasetBorderWidths(dataset);\n } else {\n this.chartJs.config.data.datasets.forEach(dataset => this._restoreBackgroundColor(dataset));\n }\n }\n\n protected _onLegendLeavePointer(e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) {\n this._onLegendLeave(e, legendItem, legend);\n if (!this.rendered || this.removing) {\n return;\n }\n this._hoveringClickableElement = false;\n this.$canvas.css('cursor', 'default');\n }\n\n protected _updateHoverStyle(datasetIndex: number, enabled: boolean) {\n let config = this.chartJs.config,\n type = config.type,\n mode,\n elements = [],\n datasets = config.data.datasets,\n dataset = datasets ? datasets[datasetIndex] : null,\n datasetType = dataset ? dataset.type : null;\n if (scout.isOneOf(type, Chart.Type.LINE, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA, Chart.Type.SCATTER) || datasetType === Chart.Type.LINE) {\n mode = 'point';\n } else {\n mode = 'dataset';\n }\n if (scout.isOneOf(type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA)) {\n this.chartJs.getSortedVisibleDatasetMetas().forEach((meta, index) => elements.push({\n element: meta.data[datasetIndex],\n datasetIndex: index,\n index: datasetIndex\n }));\n } else {\n this.chartJs.getDatasetMeta(datasetIndex).data.forEach((element, index) => elements.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }));\n }\n if (elements && elements.length) {\n this.chartJs.updateHoverStyle(elements, mode, enabled);\n }\n }\n\n protected _adjustResizeHandler(config: ChartConfig) {\n if (!config || !config.options) {\n return;\n }\n\n if (config.options.handleResize) {\n config.options.onResize = this._resizeHandler;\n }\n }\n\n protected _onResize(chart: ChartJsChart, size: { width: number; height: number }) {\n chart.update();\n this._adjustSize(chart.config, chart.chartArea, {isDatasetVisible: i => chart.getDatasetMeta(i).visible});\n }\n\n protected _adjustSize(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions) {\n chartArea = this._adjustBubbleSizes(config, chartArea, options);\n this._adjustGridMaxMin(config, chartArea, options);\n }\n\n protected _adjustBubbleSizes(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions): ChartArea {\n if (config.type !== Chart.Type.BUBBLE) {\n return chartArea;\n }\n\n let datasets = config.data.datasets;\n // Scale all bubbles so that the largest radius is equal to sizeOfLargestBubble and the smallest greater than or equal to minBubbleSize.\n // First reset all radii.\n datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!isNaN(data.z)) {\n data.r = Math.sqrt(data.z);\n }\n }));\n let maxMinR = this._computeMaxMinValue(config, datasets, {...options, identifier: 'r', exact: true}),\n maxR = maxMinR.maxValue,\n minR = maxMinR.minValue,\n // Compute a scalingFactor and an offset to get the new radius newR = r * scalingFactor + offset.\n bubbleScalingFactor = 1,\n bubbleRadiusOffset = 0,\n sizeOfLargestBubble = (config.options || {}).bubble ? config.options.bubble.sizeOfLargestBubble : 0,\n minBubbleSize = (config.options || {}).bubble ? config.options.bubble.minBubbleSize : 0;\n if (sizeOfLargestBubble) {\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom);\n sizeOfLargestBubble = Math.min(sizeOfLargestBubble, Math.floor(Math.min(width, height) / 6));\n if (maxR === 0) {\n // If maxR is equal to 0, all radii are equal to 0, therefore set bubbleRadiusOffset to sizeOfLargestBubble.\n bubbleRadiusOffset = sizeOfLargestBubble;\n } else if (minBubbleSize && sizeOfLargestBubble > minBubbleSize && (minR / maxR) < (minBubbleSize / sizeOfLargestBubble)) {\n // If minR/maxR is smaller than minBubbleSize/sizeOfLargestBubble, then it is not sufficient to scale all radii.\n\n // The scalingFactor and the result from the following two conditions:\n // (1) minBubbleSize = offset + scalingFactor * minR\n // (2) sizeOfLargestBubble = offset + scalingFactor * maxR\n\n // Therefore\n // (1*) offset = minBubbleSize - scalingFactor * minR\n // (2*) offset = sizeOfLargestBubble - scalingFactor * maxR\n\n // (1*) = (2*):\n // minBubbleSize - scalingFactor * minR = sizeOfLargestBubble - scalingFactor * maxR\n // <=> scalingFactor * maxR - scalingFactor * minR = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor * (maxR - minR) = sizeOfLargestBubble - minBubbleSize\n // <=> scalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR)\n bubbleScalingFactor = (sizeOfLargestBubble - minBubbleSize) / (maxR - minR);\n bubbleRadiusOffset = minBubbleSize - bubbleScalingFactor * minR;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = sizeOfLargestBubble / maxR;\n }\n } else if (minBubbleSize && minBubbleSize > minR) {\n // sizeOfLargestBubble is not set\n if (minR === 0) {\n // If the smallest radius equals 0 scaling will have no effect.\n bubbleRadiusOffset = minBubbleSize;\n } else {\n // Scaling is sufficient.\n bubbleScalingFactor = minBubbleSize / minR;\n }\n }\n datasets.forEach(dataset => dataset.data.forEach((data: BubbleDataPoint) => {\n if (!objects.isNullOrUndefined(data.r)) {\n data.r = data.r * bubbleScalingFactor + bubbleRadiusOffset;\n }\n }));\n\n if (!this.chartJs) {\n return chartArea;\n }\n\n // chartJs sets the chartArea depending on the bubble sizes and subtracts the max radius from the height / width.\n // this results in a different grid layout, and we need to refresh before the next calculations.\n this.refresh();\n return this.chartJs.chartArea;\n }\n\n protected _computeMaxMinValue(config: ChartConfig, datasets: ChartDataset[], options?: ChartJsRendererComputeMaxMinValueOptions): Boundary {\n if (!datasets) {\n return;\n }\n\n const {identifier, exact, boundRange, padding, space, offset} = options || {};\n const isDatasetVisible = options?.isDatasetVisible || (i => true);\n\n // do not use 0 as default as the max-min-range might not include 0, e.g. all values are greater than 10.000\n let maxValue, minValue;\n if (config.type === Chart.Type.SCATTER && identifier === 'r') {\n // do not move the grid boundaries because of the radii of the points (would look weird)\n maxValue = 0;\n minValue = 0;\n } else {\n // check if chart is stacked\n const sums = [];\n let calculateSum = false;\n if (scout.isOneOf(config.type, Chart.Type.LINE, Chart.Type.BAR)) {\n calculateSum = !!config.options.scales.y.stacked;\n } else if (config.type === Chart.Type.BAR_HORIZONTAL) {\n calculateSum = !!config.options.scales.x.stacked;\n }\n\n const extractValue = (data: (number | [number, number] | ChartJsPoint | BubbleDataPoint)) => {\n if (identifier) {\n return data[identifier];\n }\n return data;\n };\n\n for (let i = 0; i < datasets.length; i++) {\n // do not consider hidden datasets\n if (!scout.isOneOf(config.type, Chart.Type.PIE, Chart.Type.DOUGHNUT, Chart.Type.POLAR_AREA) && !isDatasetVisible(i)) {\n continue;\n }\n\n for (let j = 0; j < datasets[i].data.length; j++) {\n const value = extractValue(datasets[i].data[j]);\n\n if (calculateSum) {\n if (!sums[j]) {\n sums[j] = 0;\n }\n sums[j] += value;\n\n continue;\n }\n\n if (isNaN(maxValue)) {\n maxValue = value;\n } else {\n maxValue = Math.max(value, maxValue);\n }\n if (isNaN(minValue)) {\n minValue = value;\n } else {\n minValue = Math.min(value, minValue);\n }\n }\n }\n\n // update maxValue/minValue with max/min sum\n if (calculateSum) {\n maxValue = Math.max(arrays.max(sums), 0);\n minValue = Math.min(arrays.min(sums), 0);\n }\n }\n\n if (isNaN(maxValue)) {\n maxValue = 0;\n }\n if (isNaN(minValue)) {\n minValue = 0;\n }\n\n let adjust = 0,\n maxBoundary = maxValue,\n minBoundary = minValue;\n\n if (!exact) {\n if (boundRange && Math.sign(minValue) === Math.sign(maxValue)) {\n adjust = Math.floor(minValue);\n }\n maxBoundary = this._calculateBoundary(maxValue - adjust, Math.ceil, Math.floor);\n minBoundary = this._calculateBoundary(minValue - adjust, Math.floor, Math.ceil);\n }\n\n if (padding && space && space > 2 * padding) {\n let valuePerPixel = (maxValue - minValue) / (space - 2 * padding),\n paddingValue = valuePerPixel * padding;\n\n // When there are only integers and an offset, the offset will cover at least a span of 0.5 (half the space between two ticks, stepSize = 1).\n // Therefore, a paddingValue between 0 and 0.5 can be eliminated.\n if (offset && this.onlyIntegers && 0 < paddingValue && paddingValue <= 0.5) {\n paddingValue = 0;\n }\n\n maxBoundary = Math.max(maxBoundary, maxValue - adjust + paddingValue);\n minBoundary = Math.min(minBoundary, minValue - adjust - paddingValue);\n }\n\n if (!exact) {\n return {\n maxValue: maxBoundary + adjust,\n minValue: minBoundary + adjust\n };\n }\n\n return {\n maxValue: maxBoundary,\n minValue: minBoundary\n };\n }\n\n protected _calculateBoundary(value: number, roundingFunctionPositive: (number) => number, roundingFunctionNegative: (number) => number): number {\n let roundingFunction = roundingFunctionPositive;\n let changeValueSign = false;\n if (value < 0) {\n changeValueSign = true;\n value = value * (-1);\n roundingFunction = roundingFunctionNegative;\n }\n value = this._calculateBoundaryPositive(value, roundingFunction);\n if (changeValueSign) {\n value = value * (-1);\n }\n return value;\n }\n\n protected _calculateBoundaryPositive(value: number, roundingFunction: (number) => number): number {\n if (!(value > 0) || !roundingFunction) {\n return value;\n }\n // example: the value 32689 should be rounded to 30000 for the roundingFunction Math.floor or 35000 for Math.ceil or Math.round\n\n // first calculate the exponent p of the largest 1ep smaller than the given value\n // example: the largest 1ep smaller than the value 32689 is 10000 = 1e4 and therefore p = 4\n let p = Math.floor(Math.log(value) / Math.LN10);\n // divide by 5e(p-1), round and multiply with 5e(p-1) to round the value in 5e(p-1) steps\n // example: the value is now divided by 5e(p-1) which means 32689 / 5e(4-1) = 32689 / 5e3 = 32689 / 5000 = 6.5378\n // this result is now rounded (Math.floor gives 6, Math.ceil and Math.round gives 7) and multiplied again with 5000 which results in 30000 or 35000 respectively\n if (p < 0) {\n value = roundingFunction(value * Math.pow(10, Math.abs(p)) / 5) * 5 / Math.pow(10, Math.abs(p));\n } else {\n value = roundingFunction(value / (5 * Math.pow(10, p - 1))) * 5 * Math.pow(10, p - 1);\n }\n return value;\n }\n\n protected _adjustGridMaxMin(config: ChartConfig, chartArea: ChartArea, options?: ChartJsRendererAdjustSizeOptions) {\n if (!config || !config.type || !config.options || !config.options.adjustGridMaxMin || !config.options.scales || !chartArea) {\n return;\n }\n\n let type = config.type;\n if (!scout.isOneOf(type, Chart.Type.BAR, Chart.Type.LINE, Chart.Type.POLAR_AREA, Chart.Type.RADAR, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n return;\n }\n\n let scales = config.options.scales,\n xAxis = scales.x,\n yAxis = scales.y,\n rAxis = scales.r,\n minSpaceBetweenXTicks = xAxis ? xAxis.minSpaceBetweenTicks : 1,\n minSpaceBetweenYTicks = yAxis ? yAxis.minSpaceBetweenTicks : 1;\n\n if (rAxis) {\n minSpaceBetweenXTicks = rAxis.minSpaceBetweenTicks;\n minSpaceBetweenYTicks = rAxis.minSpaceBetweenTicks;\n }\n\n let width = Math.abs(chartArea.right - chartArea.left),\n height = Math.abs(chartArea.top - chartArea.bottom),\n maxXTicks = Math.max(Math.floor(width / minSpaceBetweenXTicks) + 1, 3),\n maxYTicks = Math.max(Math.floor(height / minSpaceBetweenYTicks) + 1, 3);\n\n let yBoundaries = this._computeYBoundaries(config, {...options, space: height}),\n yBoundary = yBoundaries.yBoundary,\n yBoundaryDiffType = yBoundaries.yBoundaryDiffType;\n\n if (rAxis) {\n this._adjustAxisMaxMin(rAxis, Math.ceil(Math.min(maxXTicks, maxYTicks) / 2), yBoundary);\n return;\n }\n\n if (yBoundaryDiffType) {\n this._adjustAxisMaxMin(yAxis, maxYTicks, yBoundary);\n this._adjustAxisMaxMin(scales.yDiffType, maxYTicks, yBoundaryDiffType);\n } else if (this._isHorizontalBar(config)) {\n this._adjustAxisMaxMin(xAxis, maxXTicks, yBoundary);\n } else {\n this._adjustAxisMaxMin(yAxis, maxYTicks, yBoundary);\n }\n\n if (!scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n return;\n }\n\n let xBoundary = this._computeXBoundaryPointElement(config, {...options, space: width});\n this._adjustAxisMaxMin(xAxis, maxXTicks, xBoundary);\n }\n\n protected _computeBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryWithIdentifierOptions, 'identifier' | 'space'>): Boundary {\n const {identifier, space} = options;\n if (!config || !config.type || !scout.isOneOf(config.type, Chart.Type.BUBBLE, Chart.Type.SCATTER) || !config.data || !config.options || !config.options.scales || !(identifier === 'x' || identifier === 'y') || !space) {\n return;\n }\n\n let datasets = config.data.datasets,\n axis = config.options.scales[identifier],\n offset = axis && axis.offset,\n labelMap = config.options[identifier + 'LabelMap'],\n boundary;\n\n let maxR = this._computeMaxMinValue(config, datasets, {...options, identifier: 'r', exact: true, space: null}).maxValue,\n padding = maxR;\n if (config.options.elements && config.options.elements.point && config.options.elements.point.hoverRadius) {\n padding = padding + (config.options.elements.point.hoverRadius as number);\n }\n\n boundary = this._computeMaxMinValue(config, datasets, {...options, exact: !!labelMap, boundRange: true, padding, offset});\n if (labelMap) {\n // if we have a labelMap compare the min and max key of the labelMap and the boundary.\n // in order to show all data and labels we have to take lowest and highest value.\n const keys = Object.keys(labelMap).map(Number).filter(isFinite);\n if (keys.length) {\n boundary.minValue = Math.min(boundary.minValue, Math.min(...keys));\n boundary.maxValue = Math.max(boundary.maxValue, Math.max(...keys));\n }\n\n boundary.maxValue = Math.ceil(boundary.maxValue);\n boundary.minValue = Math.floor(boundary.minValue);\n }\n return boundary;\n }\n\n protected _computeXBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): Boundary {\n return this._computeBoundaryPointElement(config, {...options, identifier: 'x'});\n }\n\n protected _computeYBoundaryPointElement(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): Boundary {\n return this._computeBoundaryPointElement(config, {...options, identifier: 'y'});\n }\n\n protected _computeYBoundaries(config: ChartConfig, options: SomeRequired<ChartJsRendererComputeBoundaryOptions, 'space'>): { yBoundary?: Boundary; yBoundaryDiffType?: Boundary } {\n if (!config || !config.type) {\n return {};\n }\n\n let type = config.type,\n yBoundary,\n yBoundaryDiffType;\n\n if (scout.isOneOf(type, Chart.Type.BUBBLE, Chart.Type.SCATTER)) {\n yBoundary = this._computeYBoundaryPointElement(config, options);\n } else {\n let datasets = [],\n datasetsDiffType = [];\n if (config.data && config.data.datasets) {\n config.data.datasets.forEach(dataset => {\n if (dataset.type && dataset.type !== type) {\n datasetsDiffType.push(dataset);\n } else {\n datasets.push(dataset);\n }\n });\n }\n\n yBoundary = this._computeMaxMinValue(config, datasets, {...options, space: null});\n if (yBoundary.maxValue === 0 && yBoundary.minValue === 0) {\n // Max and min value are both 0 if the values in the dataset are all 0.\n // The default behaviour would lead to a scale from 0 to 1 without any ticks between.\n // (The option \"onlyIntegers\" is true (zeros are integers), which prevents any ticks between 0 and 1).\n // With setting the max value to 5 we achieve a nice looking scale with some ticks with integer values between.\n yBoundary.maxValue = 5;\n }\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(config, datasetsDiffType, {...options, space: null});\n // Note: we do not adjust the yBoundary of the different type in the case of max and min value are both 0,\n // because the secondary scale is never shown alone and therefore does not to have to look nicely.\n let yBoundaryRange = yBoundary.maxValue - yBoundary.minValue,\n yBoundaryRangeDiffType = yBoundaryDiffType.maxValue - yBoundaryDiffType.minValue;\n if (yBoundaryRange && yBoundaryRangeDiffType && (yBoundaryRange / yBoundaryRangeDiffType > 10 || yBoundaryRangeDiffType / yBoundaryRange > 10)) {\n this._adjustYAxisDiffType(config, datasets, datasetsDiffType);\n }\n }\n }\n\n return {\n yBoundary: yBoundary,\n yBoundaryDiffType: yBoundaryDiffType\n };\n }\n\n protected _adjustYAxisDiffType(config: ChartConfig, datasets: ChartDataset[], datasetsDiffType: ChartDataset[]) {\n if (!config || !config.type || !datasets || !datasets.length || !datasetsDiffType || !datasetsDiffType.length) {\n return;\n }\n\n if (!config.options || !config.options.scales || !config.options.scales.y || config.options.scales.yDiffType) {\n return;\n }\n\n let type = config.type,\n options = config.options,\n scales = options.scales,\n yAxis = scales.y,\n yAxisDiffType = $.extend(true, {}, yAxis);\n scales.yDiffType = yAxisDiffType;\n\n if (config.data && config.data.datasets && config.data.datasets.length && config.data.datasets[0].type && config.data.datasets[0].type !== type) {\n yAxisDiffType.position = Chart.Position.LEFT;\n yAxis.position = Chart.Position.RIGHT;\n yAxis.grid.drawOnChartArea = false;\n } else {\n yAxis.position = Chart.Position.LEFT;\n yAxisDiffType.position = Chart.Position.RIGHT;\n yAxisDiffType.grid.drawOnChartArea = false;\n }\n\n yAxis.border.display = true;\n yAxis.grid.drawTicks = true;\n yAxisDiffType.border.display = true;\n yAxisDiffType.grid.drawTicks = true;\n\n let yAxisType = (datasets[0].type || type),\n yAxisDiffTypeType = (datasetsDiffType[0].type || type),\n yAxisTypeLabel = this.chart.session.text('ui.' + yAxisType),\n yAxisDiffTypeTypeLabel = this.chart.session.text('ui.' + yAxisDiffTypeType),\n yAxisScaleLabel = options.scaleLabelByTypeMap ? options.scaleLabelByTypeMap[yAxisType] : null,\n yAxisDiffTypeScaleLabel = options.scaleLabelByTypeMap ? options.scaleLabelByTypeMap[yAxisDiffTypeType] : null;\n\n yAxis.title.display = true;\n yAxis.title.text = yAxisScaleLabel ? yAxisScaleLabel + ' (' + yAxisTypeLabel + ')' : yAxisTypeLabel;\n yAxisDiffType.title.display = true;\n yAxisDiffType.title.text = yAxisDiffTypeScaleLabel ? yAxisDiffTypeScaleLabel + ' (' + yAxisDiffTypeTypeLabel + ')' : yAxisDiffTypeTypeLabel;\n\n datasets.forEach(dataset => {\n dataset.yAxisID = 'y';\n });\n datasetsDiffType.forEach(dataset => {\n dataset.yAxisID = 'yDiffType';\n });\n }\n\n protected _adjustAxisMaxMin(axis: AxisWithMaxMin, maxTicks: number, maxMinValue: Boundary) {\n if (!axis) {\n return;\n }\n\n let maxRangeBetweenTwoTicks = 1;\n\n axis.ticks = $.extend(true, {}, axis.ticks, {\n maxTicksLimit: maxTicks\n });\n if (maxMinValue) {\n axis.suggestedMax = maxMinValue.maxValue;\n axis.suggestedMin = maxMinValue.minValue;\n\n maxRangeBetweenTwoTicks = (maxMinValue.maxValue - maxMinValue.minValue) / (maxTicks - 1);\n }\n axis.ticks.stepSize = this.onlyIntegers && maxRangeBetweenTwoTicks < 1 ? 1 : undefined;\n }\n\n protected override _remove(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.rendered && !this.removing) {\n this.removing = true;\n this.chartJs.destroy();\n this.chartJs = null;\n this.$canvas.remove();\n this.$canvas = null;\n }\n super._remove(afterRemoveFunc);\n this.removing = false;\n }\n}\n\nexport type LabelFormatter = (label: number | string, scale?: Scale) => string;\nexport type AxisFitter = (axis: Scale<CartesianScaleOptions>) => void;\nexport type DatalabelsDisplayHandler = (context: Context) => boolean;\nexport type DatalabelsFormatter = (value: number | ScatterDataPoint | BubbleDataPoint, context: Context) => string;\nexport type DatalabelBackgroundColorHandler = (context: Context) => Color;\nexport type RadialChartDatalabelsFormatter = (value: number, context: Context) => string;\nexport type LegendLabelGenerator = (chart: ChartJsChart) => LegendItem[];\nexport type ChartEventHandler = (event: ChartEvent, items: ActiveElement[]) => void;\nexport type LegendEventHandler = (e: ChartEvent, legendItem: LegendItem, legend: LegendElement<any>) => void;\nexport type ResizeHandler = (chart: ChartJsChart | ChartJs, size: { width: number; height: number }) => void;\nexport type TooltipTitleGenerator = (tooltipItems: TooltipItem<any>[]) => string | string[] | void;\nexport type TooltipItemsGenerator = (tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator) => string;\nexport type TooltipLabelGenerator = (tooltipItem: TooltipItem<any>) => string | string[] | void;\nexport type TooltipLabelValueGenerator = (tooltipItem: TooltipItem<any>) => string | { x: string; y: string };\nexport type TooltipLabelColorGenerator = (tooltipItem: TooltipItem<any>) => TooltipLabelStyle | void;\nexport type TooltipRenderer = (context: { chart: ChartJs; tooltip: TooltipModel<any> }) => void;\nexport type ChartJsRendererAdjustSizeOptions = {\n isDatasetVisible?: (number) => boolean;\n};\nexport type ChartJsRendererComputeBoundaryOptions = ChartJsRendererAdjustSizeOptions & {\n space?: number;\n};\nexport type ChartJsRendererComputeBoundaryWithIdentifierOptions = ChartJsRendererComputeBoundaryOptions & {\n identifier?: string;\n};\nexport type ChartJsRendererComputeMaxMinValueOptions = ChartJsRendererComputeBoundaryWithIdentifierOptions & {\n exact?: boolean;\n boundRange?: boolean;\n padding?: number;\n offset?: boolean;\n};\n\nexport type DatasetColors = {\n backgroundColors?: (string | string[])[];\n borderColors?: (string | string[])[];\n hoverBackgroundColors?: (string | string[])[];\n hoverBorderColors?: (string | string[])[];\n checkedBackgroundColors?: (string | string[])[];\n checkedHoverBackgroundColors?: (string | string[])[];\n legendColors?: (string | string[])[];\n pointHoverColors?: (string | string[])[];\n datalabelColor?: string;\n};\n\nexport type Boundary = { maxValue: number; minValue: number };\n\nexport type AxisWithMaxMin = (CartesianChartScale | RadialChartScale) & {\n ticks?: (CartesianChartScale | RadialChartScale)['ticks'] & {\n stepSize?: number;\n };\n};\n\n// extend chart.js\n\nexport type ChartJsChart = Omit<ChartJs, 'config'> & {\n config: ChartConfig;\n legend?: LegendElement<any>;\n};\n\ndeclare module 'chart.js' {\n interface ChartData<TType extends ChartJsType = ChartJsType, TData = DefaultDataPoint<TType>, TLabel = unknown> {\n maxSegmentsExceeded?: boolean;\n }\n\n interface ChartDatasetProperties<TType extends ChartJsType, TData> {\n datasetId?: string;\n yAxisID?: 'y' | 'yDiffType';\n\n pointBackgroundColor?: Scriptable<Color, ScriptableContext<TType>>;\n pointHoverBackgroundColor?: Scriptable<Color, ScriptableContext<TType>>;\n pointRadius?: Scriptable<number, ScriptableContext<TType>>;\n legendColor?: Scriptable<Color, number>;\n\n checkedBackgroundColor?: Color;\n checkedHoverBackgroundColor?: Color;\n checkedPointBackgroundColor?: Color;\n checkedPointHoverBackgroundColor?: Color;\n checkedPointRadius?: number;\n\n uncheckedBackgroundColor?: Color;\n uncheckedHoverBackgroundColor?: Color;\n uncheckedPointBackgroundColor?: Color;\n uncheckedPointHoverBackgroundColor?: Color;\n uncheckedPointRadius?: number;\n\n backgroundColorBackup?: Color;\n }\n\n interface BubbleDataPoint {\n z: number;\n }\n\n interface TooltipOptions<TType extends ChartJsType = ChartJsType> {\n cssClass?: string;\n }\n\n interface TooltipCallbacks<TType extends ChartJsType, Model = TooltipModel<TType>, Item = TooltipItem<TType>> {\n items: TooltipItemsGenerator;\n labelValue: TooltipLabelValueGenerator;\n }\n}\n","/*\n * Copyright (c) 2010, 2024 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractLayout, Tile} from '@eclipse-scout/core';\nimport {Chart, ChartJsRenderer, UpdateChartOptions} from '../index';\n\nexport class ChartLayout extends AbstractLayout {\n chart: Chart;\n\n constructor(chart: Chart) {\n super();\n this.chart = chart;\n }\n\n override layout($container: JQuery) {\n let opts: UpdateChartOptions = {\n requestAnimation: true,\n debounce: Chart.DEFAULT_DEBOUNCE_TIMEOUT,\n onlyUpdateData: true\n };\n // Don't request animations when the session is not ready or the chart was already updated once\n if (!this.chart.session.ready || this.chart._updatedOnce) {\n opts.requestAnimation = false;\n }\n // Don't debounce while session is not yet ready. Otherwise, it might happen that the area to layout is not\n // attached anymore because some other view tab is in front when the setTimeout() functions is finally called.\n if (!this.chart.session.ready) {\n opts.debounce = false;\n }\n // Don't debounce if the chart is inside a tile that is being dragged so the state is correct immediately when it is dropped\n if (this.chart.findParent(Tile)?.$container.hasClass('dragged')) {\n opts.debounce = false;\n }\n // Ensure chart has the correct size right after the layout.\n if (this.chart.chartRenderer instanceof ChartJsRenderer) {\n this.chart.chartRenderer.chartJs?.resize();\n }\n this.chart.updateChart(opts);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {WidgetModel} from '@eclipse-scout/core';\nimport {ChartConfig, ChartData, ClickObject} from './Chart';\n\nexport interface ChartModel extends WidgetModel {\n data?: ChartData;\n config?: ChartConfig;\n /**\n * Default is [].\n */\n checkedItems?: ClickObject[];\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, arrays, objects, scout} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\nimport $ from 'jquery';\nimport {UpdateChartOptions} from './Chart';\n\nexport class FulfillmentChartRenderer extends AbstractSvgChartRenderer {\n animationTriggered: boolean;\n segmentSelectorForAnimation: string;\n r: number;\n fullR: number;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.animationTriggered = false;\n this.segmentSelectorForAnimation = '.fulfillment-chart';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n fulfillment: {\n startValue: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartValueGroups = this.chart.data.chartValueGroups;\n if (chartValueGroups.length !== 2 ||\n chartValueGroups[0].values.length !== 1 ||\n chartValueGroups[1].values.length !== 1) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n // Calculate percentage\n let chartData = this.chart.data;\n let value = chartData.chartValueGroups[0].values[0] as number;\n let total = chartData.chartValueGroups[1].values[0] as number;\n\n this.fullR = (Math.min(this.chartBox.height, this.chartBox.width) / 2) - 2;\n\n this._renderInnerCircle();\n this._renderPercentage(value, total);\n }\n\n protected _renderPercentage(value: number, total: number) {\n // arc segment\n let arcClass = 'fulfillment-chart',\n color = arrays.ensure(this.chart.data.chartValueGroups[0].colorHexValue)[0],\n chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n\n if (this.chart.config.options.autoColor) {\n arcClass += ' auto-color';\n } else if (chartGroupCss) {\n arcClass += ' ' + chartGroupCss;\n }\n\n let startValue = scout.nvl(this.chart.config.options.fulfillment.startValue, 0);\n let end = 0;\n let lastEnd = 0;\n if (total) {\n // use slightly less than 1.0 as max value because otherwise, the SVG element would not be drawn correctly.\n end = Math.min(value / total, 0.999999);\n lastEnd = Math.min(startValue / total, 0.999999);\n }\n this.r = this.fullR;\n\n let that = this;\n let tweenInFunc = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * fx.pos, lastEnd + (end - lastEnd) * fx.pos));\n };\n\n let $arc = this.$svg.appendSVG('path', arcClass)\n .data('animation-start', 0)\n .data('animation-end', end);\n\n let radius2 = (this.fullR / 8) * 6.7;\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle3', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n\n // Label\n let percentage = (total ? Math.round((value / total) * 100) : 0);\n let $label = this.$svg.appendSVG('text', 'fulfillment-chart-label ')\n .attr('x', this.chartBox.mX())\n .attr('y', this.chartBox.mY())\n .css('font-size', (this.fullR / 2) + 'px') // font of label in center relative to circle radius\n .attr('dy', '0.3em') // workaround for 'dominant-baseline: central' which is not supported in IE\n .attrXLINK('href', '#InnerCircle')\n .text(percentage + '%');\n\n if (this.chart.config.options.clickable) {\n $arc.on('click', this._createClickObject(null, null), this._onChartValueClick.bind(this));\n }\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $arc.attr('fill', color);\n }\n if (this.animationDuration) {\n $arc\n .attr('d', this.pathSegment(0, lastEnd))\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenInFunc, this.animationDuration));\n\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n } else {\n $arc.attr('d', this.pathSegment(0, end));\n }\n\n aria.description(this.$svg, this.session.text('ui.FulfillmentChartAriaDescription', percentage));\n }\n\n pathSegment(start: number, end: number): string {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M' + (this.chartBox.mX() + this.r * Math.sin(s)) + ',' + (this.chartBox.mY() - this.r * Math.cos(s));\n pathString += 'A' + this.r + ', ' + this.r;\n pathString += (end - start < 0.5) ? ' 0 0,1 ' : ' 0 1,1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ',' + (this.chartBox.mY() - this.r * Math.cos(e));\n pathString += 'L' + this.chartBox.mX() + ',' + this.chartBox.mY() + 'Z';\n\n return pathString;\n }\n\n protected _renderCirclePath(cssClass: string, id: string, radius: number): JQuery<SVGElement> {\n let chartGroupCss = this.chart.data.chartValueGroups[0].cssClass;\n let color = arrays.ensure(this.chart.data.chartValueGroups[1].colorHexValue)[0];\n\n if (this.chart.config.options.autoColor) {\n cssClass += ' auto-color';\n } else if (chartGroupCss) {\n cssClass += ' ' + chartGroupCss;\n }\n\n let radius2 = radius * 2;\n let $path = this.$svg.appendSVG('path', cssClass)\n .attr('id', id)\n .attr('d', 'M ' + this.chartBox.mX() + ' ' + this.chartBox.mY() +\n ' m 0, ' + (-radius) +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + radius2 +\n ' a ' + radius + ',' + radius + ' 0 1, 1 0,' + (-radius2));\n\n if (!this.chart.config.options.autoColor && !chartGroupCss) {\n $path\n .attr('fill', color)\n .attr('stroke', color);\n }\n\n return $path;\n }\n\n protected _renderInnerCircle() {\n let radius = (this.fullR / 8) * 7.5,\n radius2 = (this.fullR / 8) * 7.2;\n\n this._renderCirclePath('fulfillment-chart-inner-circle', 'InnerCircle', radius);\n let $transparentCircle = this._renderCirclePath('fulfillment-chart-inner-circle-transparent', 'InnerCircle2', radius2);\n $transparentCircle.css('fill', this.firstOpaqueBackgroundColor);\n }\n\n /**\n * Do not animate the removal of the chart if the chart data has been updated and the startValue option is set.\n * If startValue is not set use default implementation.\n */\n override shouldAnimateRemoveOnUpdate(opts: UpdateChartOptions): boolean {\n let startValue = objects.optProperty(this.chart, 'config', 'options', 'fulfillment', 'startValue');\n if (!objects.isNullOrUndefined(startValue)) {\n return false;\n }\n\n return super.shouldAnimateRemoveOnUpdate(opts);\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n let that = this;\n let tweenOut = function(now, fx) {\n let $this = $(this);\n let start = $this.data('animation-start'),\n end = $this.data('animation-end');\n $this.attr('d', that.pathSegment(start * (1 - fx.pos), end * (1 - fx.pos)));\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {arrays, objects, strings} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup, ClickObject} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\n\nexport class SalesfunnelChartRenderer extends AbstractSvgChartRenderer {\n segmentSelectorForAnimation: string;\n widthThresholdMedium: number;\n widthThresholdSmall: number;\n\n /**\n * Constants for \"normalized mode\"\n * Width of a bar is calculated by multiplying this value with the previous bar's width\n */\n barDeltaPercentage: number;\n\n /**\n * Factor to be multiplied with the last bar's width. This will create a funnel effect, because\n * the last bar is considerably smaller than the other bars.\n */\n lastBarAdditionalPercentage: number;\n\n /** Percentage of the total width the last bar always has (delta might get smaller due to this constraint). */\n lastBarMinWidthPercentage: number;\n\n paddingBetweenLabel: number;\n dataAnalyzeResult: AnalyzedData;\n barHeight: number;\n barAreaWidth: number;\n centerX: number;\n animationTriggered: boolean;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.salesfunnel-chart-bar';\n this.widthThresholdMedium = 400;\n this.widthThresholdSmall = 200;\n this.barDeltaPercentage = 0.95;\n this.lastBarAdditionalPercentage = 0.7;\n this.lastBarMinWidthPercentage = 0.4;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n salesfunnel: {\n normalized: undefined,\n calcConversionRate: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length !== chartData.chartValueGroups.length ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0 ||\n chartConfig.options.salesfunnel.normalized === undefined ||\n chartConfig.options.salesfunnel.calcConversionRate === undefined) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n let chartData = this.chart.data,\n bars = chartData.chartValueGroups.length;\n\n let conversionRateWidth = this._dynamicConversionRateWidth();\n this.paddingBetweenLabel = 20;\n this.dataAnalyzeResult = this._analyzeData(chartData.chartValueGroups);\n this.barHeight = this.chartBox.height / bars;\n this.barAreaWidth = this.chartBox.width -\n this.dataAnalyzeResult.maxLengthFirstValueRow -\n (this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount) -\n this.dataAnalyzeResult.maxLengthSecondValueRow -\n conversionRateWidth;\n this.centerX = this.barAreaWidth / 2;\n\n if (this.chart.config.options.salesfunnel.normalized) {\n this._renderBarsNormalized(chartData.chartValueGroups);\n } else {\n this._renderBarsAccordingToValues(chartData.chartValueGroups);\n }\n\n this._addClipping('salesfunnel-chart-bar');\n }\n\n protected _renderBarsNormalized(chartValueGroups: ChartValueGroup[]) {\n let barCount = chartValueGroups.length;\n let startPointX = this.barAreaWidth +\n this.dataAnalyzeResult.maxLengthFirstValueRow +\n this.dataAnalyzeResult.maxLengthSecondValueRow +\n (this.paddingBetweenLabel * (this.dataAnalyzeResult.labelCount + 1));\n\n let delta = this.barAreaWidth * (1 - this.barDeltaPercentage);\n let minLastWidth = this.barAreaWidth * this.lastBarMinWidthPercentage;\n let secondLastWidth = minLastWidth / this.lastBarAdditionalPercentage;\n delta = Math.min(delta, (this.barAreaWidth - secondLastWidth) / (barCount - 1));\n\n for (let i = 0; i < barCount; i++) {\n let width = this.barAreaWidth - (i * delta),\n barLabel = chartValueGroups[i].groupName,\n widthBottom = this.barAreaWidth - ((i + 1) * delta),\n yCoord = i * this.barHeight;\n\n let renderPolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: widthBottom,\n cssClass: 'salesfunnel-chart-bar',\n fill: arrays.ensure(chartValueGroups[i].colorHexValue)[0],\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n // Adjust last widths to look like funnel.\n if (i === barCount - 1) {\n renderPolyOptions.width = renderPolyOptions.width * this.lastBarAdditionalPercentage;\n renderPolyOptions.widthBottom = renderPolyOptions.widthBottom * this.lastBarAdditionalPercentage;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0] as number, false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1] as number, true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.options.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0] as number, chartValueGroups[i].values[0] as number));\n }\n }\n }\n }\n\n protected _renderLabel(label: number, secondLabel: boolean, barIndexFromTop: number) {\n if (label === null) {\n return;\n }\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n labelOffset = this.dataAnalyzeResult.maxLengthFirstValueRow + (secondLabel ? this.dataAnalyzeResult.maxLengthSecondValueRow : 0),\n labelIndex = secondLabel ? 2 : 1,\n x = this.barAreaWidth + labelOffset + (labelIndex * this.paddingBetweenLabel),\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', x)\n .attr('y', y)\n .text(this.session.locale.decimalFormat.format(label));\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n if (this.chart.config.options.plugins.tooltip.enabled && this.chart.data.axes.length > 0) {\n let desc = this.chart.data.axes[barIndexFromTop][secondLabel ? 1 : 0].label,\n textBounds = this._measureText('' + label, labelClass);\n this._renderWireLabels(desc, $label, x - textBounds.width / 2, y - textBounds.height);\n }\n }\n\n protected _renderWireLabels(label: string, $text: JQuery<SVGElement>, x1: number, y1: number) {\n let legendPositions = {\n x1: x1,\n x2: x1 - 10,\n y1: y1,\n y2: y1 - 10,\n v: -1,\n h: -1\n } as LegendPositions;\n // calculate opening direction\n let labelPositionFunc = (labelWidth, labelHeight) => {\n if (legendPositions.y2 - labelHeight < 0) {\n legendPositions.v = 1;\n legendPositions.y1 = legendPositions.y1 + labelHeight * 1.5;\n legendPositions.y2 = legendPositions.y1 + 10;\n }\n return legendPositions;\n };\n\n legendPositions.autoPosition = true;\n legendPositions.posFunc = labelPositionFunc;\n let\n legend = this._renderWireLegend(label, legendPositions, 'line-chart-wire-label', true),\n mouseIn = legend.attachFunc.bind(legend),\n mouseOut = legend.detachFunc.bind(legend);\n legend.detachFunc();\n $text.on('mouseenter', mouseIn)\n .on('mouseleave', mouseOut);\n }\n\n protected _renderBarLabel(label: string, barIndexFromTop: number, barWidth: number) {\n let y = (barIndexFromTop * this.barHeight) + (this.barHeight / 2),\n x = this.centerX,\n labelClass = this._dynamicCssClass('salesfunnel-bar-label');\n\n this._renderLineLabel(x, y, label, labelClass, true);\n }\n\n protected _renderConversionRate(barIndexFromTop: number, startPointX: number, conversionRate: number) {\n if (conversionRate === undefined) {\n return;\n }\n let ctrlY = barIndexFromTop * this.barHeight,\n labelClass = this._dynamicCssClass('salesfunnel-conversionrate-label');\n\n let $label = this.$svg.appendSVG('text', labelClass)\n .attr('x', startPointX)\n .attr('y', ctrlY)\n .text('↓ ' + conversionRate + '%');\n if (this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n protected _renderPolygon(renderPolyOptions: PolyOptions): JQuery<SVGElement> {\n let that = this,\n points = this._calcPolygonPoints(true, this.animationDuration ? 0 : 1, renderPolyOptions.xStart, renderPolyOptions.yStart, renderPolyOptions.width, renderPolyOptions.widthBottom, this.barHeight - 1);\n\n let $poly = this.$svg.appendSVG('polygon', renderPolyOptions.cssClass, '', renderPolyOptions.id)\n .attr('points', points)\n .data('xStart', renderPolyOptions.xStart)\n .data('yStart', renderPolyOptions.yStart)\n .data('widthBar', renderPolyOptions.width)\n .data('widthBottom', renderPolyOptions.widthBottom)\n .data('heightBar', this.barHeight);\n if (!this.chart.config.options.autoColor && renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n $poly.css('stroke', this.firstOpaqueBackgroundColor);\n\n let expandFunc = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(true, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n\n if (this.animationDuration) {\n $poly.animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(expandFunc, this.animationDuration));\n }\n if (this.chart.config.options.clickable) {\n $poly.on('click', renderPolyOptions.clickObject, this._onChartValueClick.bind(this));\n }\n if (renderPolyOptions.fill) {\n $poly.attr('fill', renderPolyOptions.fill);\n }\n\n return $poly;\n }\n\n protected _calcPolygonPoints(expand: boolean, fxPos: number, xStart: number, yStart: number, width: number, widthBottom: number, height: number): string {\n let xOffsetTop = 0,\n xOffsetBottom = 0;\n if (expand) {\n xOffsetTop = width / 2 * fxPos;\n xOffsetBottom = widthBottom / 2 * fxPos;\n } else {\n xOffsetTop = (width / 2) - (width / 2 * fxPos);\n xOffsetBottom = (widthBottom / 2) - (widthBottom / 2 * fxPos);\n }\n return strings.join(' ',\n (xStart - xOffsetTop) + ',' + yStart, // x1, y1\n (xStart + xOffsetTop) + ',' + yStart, // x2, y2\n (xStart + xOffsetBottom) + ',' + (yStart + height), // x3, y3\n (xStart - xOffsetBottom) + ',' + (yStart + height) // x4, y4\n );\n }\n\n protected _renderBarsAccordingToValues(chartValueGroups: ChartValueGroup[]) {\n let widthPerN = (this.dataAnalyzeResult.maxValue ? this.barAreaWidth * 0.8 / this.dataAnalyzeResult.maxValue : 0),\n startPointX = this.barAreaWidth + this.dataAnalyzeResult.maxLengthFirstValueRow + this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel * this.dataAnalyzeResult.labelCount + 2 * this.paddingBetweenLabel,\n barCount = chartValueGroups.length;\n\n for (let i = 0; i < barCount; i++) {\n let width = (chartValueGroups[i].values[0] as number) * widthPerN + this.barAreaWidth * 0.2,\n barLabel = chartValueGroups[i].groupName,\n yCoord = i * this.barHeight;\n\n let renderPolyOptions: PolyOptions = {\n xStart: this.centerX,\n yStart: yCoord,\n rect: true,\n width: width,\n widthBottom: width,\n cssClass: 'salesfunnel-chart-bar',\n fill: arrays.ensure(chartValueGroups[i].colorHexValue)[0],\n label: chartValueGroups[i].groupName,\n clickObject: this._createClickObject(null, i)\n };\n\n if (this.chart.config.options.autoColor) {\n renderPolyOptions.cssClass += ' auto-color color0';\n } else if (this.chart.data.chartValueGroups[i].cssClass) {\n renderPolyOptions.cssClass += ' ' + this.chart.data.chartValueGroups[i].cssClass;\n }\n\n this._renderPolygon(renderPolyOptions);\n this._renderLabel(chartValueGroups[i].values[0] as number, false, i);\n this._renderBarLabel(barLabel, i, renderPolyOptions.widthBottom);\n let labelLineWidth = this.dataAnalyzeResult.maxLengthFirstValueRow + this.paddingBetweenLabel;\n if (chartValueGroups[i].values.length > 1) {\n this._renderLabel(chartValueGroups[i].values[1] as number, true, i);\n labelLineWidth += this.dataAnalyzeResult.maxLengthSecondValueRow + this.paddingBetweenLabel;\n }\n if (i > 0) {\n this._renderLabelSeparatorLine(yCoord, labelLineWidth);\n if (this.chart.config.options.salesfunnel.calcConversionRate) {\n this._renderConversionRate(i, startPointX, this._calcConversionRate(chartValueGroups[i - 1].values[0] as number, chartValueGroups[i].values[0] as number));\n }\n }\n }\n }\n\n protected _renderLabelSeparatorLine(yCoord: number, labelLineWidth: number) {\n let $line = this.$svg.appendSVG('line', 'label-separator')\n .attr('x1', this.barAreaWidth + this.paddingBetweenLabel)\n .attr('y1', yCoord)\n .attr('x2', this.barAreaWidth + labelLineWidth)\n .attr('y2', yCoord);\n if (this.animationDuration) {\n $line\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n protected _calcConversionRate(valueBefore: number, value: number): number {\n if (objects.isNullOrUndefined(valueBefore) || objects.isNullOrUndefined(value) || valueBefore === 0) {\n return undefined;\n }\n return Math.round(value / valueBefore * 100);\n }\n\n protected _analyzeData(valueGroups: ChartValueGroup[]): AnalyzedData {\n let result: AnalyzedData = {\n labelCount: 0,\n maxValue: null,\n maxLengthFirstValueRow: 0,\n maxLengthSecondValueRow: 0\n },\n labelClass = this._dynamicCssClass('salesfunnel-label');\n\n for (let i = 0; i < valueGroups.length; i++) {\n\n let valueGroup = valueGroups[i];\n result.labelCount = Math.max(result.labelCount, valueGroup.values.length);\n // only first value is relevant for bar\n if (valueGroup.values.length > 0 && valueGroup.values[0]) {\n if (result.maxValue === null) {\n result.maxValue = valueGroup.values[0] as number;\n } else {\n result.maxValue = Math.max(result.maxValue, valueGroup.values[0] as number);\n }\n result.maxLengthFirstValueRow = Math.max(result.maxLengthFirstValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[0] as number), labelClass).width);\n }\n if (valueGroup.values.length > 1 && valueGroup.values[1]) {\n result.maxLengthSecondValueRow = Math.max(result.maxLengthSecondValueRow, this._measureText(this.session.locale.decimalFormat.format(valueGroup.values[1] as number), labelClass).width);\n }\n }\n return result;\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n let that = this,\n shrink = function(now, fx) {\n let $this = $(this);\n let xStart = $this.data('xStart'),\n yStart = $this.data('yStart'),\n width = $this.data('widthBar'),\n height = $this.data('heightBar'),\n widthBottom = $this.data('widthBottom');\n $this.attr('points', that._calcPolygonPoints(false, fx.pos, xStart, yStart, width, widthBottom, height));\n };\n this.$svg.children(this.segmentSelectorForAnimation).animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(shrink))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n\n protected _dynamicCssClass(cssClass: string): string {\n let small = '';\n if (this.chartBox.width <= this.widthThresholdSmall) {\n small = 'small';\n } else if (this.chartBox.width <= this.widthThresholdMedium) {\n small = 'medium';\n }\n return strings.join(' ', cssClass, small);\n }\n\n protected _dynamicConversionRateWidth(): number {\n if (!this.chart.config.options.salesfunnel.calcConversionRate) {\n return 0; // don't show conversion rate\n }\n if (this.chartBox.width <= this.widthThresholdSmall) {\n return 60;\n }\n if (this.chartBox.width <= this.widthThresholdMedium) {\n return 80;\n }\n return 100;\n }\n}\n\nexport type AnalyzedData = {\n labelCount: number;\n maxValue: number;\n maxLengthFirstValueRow: number;\n maxLengthSecondValueRow: number;\n};\n\nexport type PolyOptions = {\n id?: string;\n xStart: number;\n yStart: number;\n rect: boolean;\n width: number;\n widthBottom: number;\n cssClass: string;\n fill: string;\n label: string;\n clickObject: ClickObject;\n};\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {aria, EnumObject, numbers, RoundingMode} from '@eclipse-scout/core';\nimport {AbstractSvgChartRenderer, Chart} from '../index';\n\nexport class SpeedoChartRenderer extends AbstractSvgChartRenderer {\n\n segmentSelectorForAnimation: string;\n\n r: number;\n scaleWeight: number;\n my: number;\n parts: number;\n numSegmentsPerPart: number;\n segmentWidth: number;\n widthOfSegmentWithGap: number;\n animationTriggered: boolean;\n\n $filledParts: JQuery<SVGElement>[];\n $pointer: JQuery<SVGElement>;\n\n constructor(chart: Chart) {\n super(chart);\n\n this.segmentSelectorForAnimation = '.pointer';\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n speedo: {\n greenAreaPosition: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n static Position = {\n LEFT: 'left',\n CENTER: 'center',\n RIGHT: 'right'\n } as const;\n\n static NUM_PARTS_GREEN_CENTER = 7;\n static NUM_PARTS_GREEN_EDGE = 4;\n\n static ONE_THOUSAND = 1000;\n static TEN_THOUSAND = 10000;\n static ONE_MILLION = 1000000;\n\n static ARC_MIN = -0.25;\n static ARC_MAX = 0.25;\n static ARC_RANGE = SpeedoChartRenderer.ARC_MAX - SpeedoChartRenderer.ARC_MIN;\n\n static SEGMENT_GAP = 0.0103; // space between two segments (lines)\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n let chartConfig = this.chart.config;\n if (!chartData ||\n !chartConfig ||\n chartData.axes.length > 0 ||\n chartData.chartValueGroups.length !== 1 ||\n chartData.chartValueGroups[0].values.length !== 3 ||\n chartConfig.options.speedo.greenAreaPosition === undefined) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n let chartData = this.chart.data,\n minValue = chartData.chartValueGroups[0].values[0] as number,\n maxValue = chartData.chartValueGroups[0].values[2] as number,\n value = chartData.chartValueGroups[0].values[1] as number;\n\n // radius of the scale\n this.r = Math.min(this.chartBox.height, this.chartBox.width / 2) * 0.7;\n\n // width (thickness) of the scale\n this.scaleWeight = this.r * 0.27;\n\n this.my = this.chartBox.yOffset + this.chartBox.height - (this.chartBox.height - this.r * 1.12) / 2;\n\n // number of parts in the scale\n this.parts = this.chart.config.options.speedo.greenAreaPosition === SpeedoChartRenderer.Position.CENTER ?\n SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER : SpeedoChartRenderer.NUM_PARTS_GREEN_EDGE;\n\n // number of lines per part\n this.numSegmentsPerPart = this.parts === SpeedoChartRenderer.NUM_PARTS_GREEN_CENTER ? 5 : 8;\n\n // to remember 'filled' parts\n this.$filledParts = [];\n\n let numTotalSegments = this.parts * this.numSegmentsPerPart; // total number of lines in the whole chart (all colors)\n let numTotalGaps = numTotalSegments - 1;\n\n // width of one segment (line)\n this.segmentWidth = (SpeedoChartRenderer.ARC_RANGE - (numTotalGaps * SpeedoChartRenderer.SEGMENT_GAP)) / numTotalSegments;\n\n // width of one segment including the gap to the next segment.\n this.widthOfSegmentWithGap = this.segmentWidth + SpeedoChartRenderer.SEGMENT_GAP;\n\n // pointer value in range [0,1]\n let valuePercentage = this._getValuePercentage(value, minValue, maxValue);\n\n // value in the range [0,numTotalSegments - 1] rounded to one segment\n let segmentToPointAt = this._getSegmentToPointAt(valuePercentage, numTotalSegments);\n\n // value rounded to the closest segment so that the pointer never stays \"in between\" two segments but always on a segment\n let valuePercentageRounded = this._getPercentageValueOfSegment(segmentToPointAt % this.numSegmentsPerPart,\n this._getPartForValue(valuePercentage));\n\n for (let i = 0; i < this.parts; i++) {\n this._renderCirclePart(i);\n }\n\n this._renderPointer(valuePercentageRounded);\n this._renderLegend(minValue, value, maxValue, chartData.chartValueGroups[0].groupName);\n\n this.$svg.addClass('speedo-chart-svg');\n if (this.chart.config.options.clickable) {\n this.$svg.off('click', this._nonValueClickHandler);\n this.$svg.on('click', this._createClickObject(null, null), this._onChartValueClick.bind(this));\n }\n }\n\n protected _getValuePercentage(value: number, minValue: number, maxValue: number): number {\n return this._limitValue((value - minValue) / (maxValue - minValue), 1);\n }\n\n protected _getSegmentToPointAt(valuePercentage: number, numTotalSegments: number): number {\n return this._limitValue(Math.floor(valuePercentage * numTotalSegments), numTotalSegments - 1);\n }\n\n protected _limitValue(value: number, maxValue: number): number {\n value = Math.max(value, 0); // cannot be < 0\n value = Math.min(value, maxValue); // cannot be > maxValue\n return value;\n }\n\n /**\n * Gets the percentage value in range [0,1] of the specified segment.\n */\n protected _getPercentageValueOfSegment(segmentIndexInPart: number, part: number): number {\n // get the segment position\n let pointerRange = this._calcSegmentPos(segmentIndexInPart, part);\n\n // calculate the center position in the Arc range [0, 0.5] of the segment\n let pointerPos = pointerRange.from - SpeedoChartRenderer.ARC_MIN + ((pointerRange.to - pointerRange.from) / 2);\n\n // calculate the percentage value of the center of the segment in range [0,1]\n return this._limitValue(pointerPos / SpeedoChartRenderer.ARC_RANGE, 1);\n }\n\n /**\n * Renders the pointer line and registers animation to move the pointer and the corresponding filling of the segments\n */\n protected _renderPointer(valuePercentage: number) {\n this.$pointer = this.$svg.appendSVG('path', 'pointer')\n .attr('d', this._pathPointer(0))\n .attr('data-end', valuePercentage)\n .attr('stroke-width', (this.scaleWeight / 6) + 'px') // width of the pointer bar depends on size of chart\n .attr('fill', 'none');\n\n if (this.animationDuration) {\n let that = this;\n let tweenIn = function(now, fx) {\n let val = this.getAttribute('data-end') * fx.pos;\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.$pointer\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenIn, this.animationDuration));\n } else {\n this._updatePointer(valuePercentage);\n this._updatePartsFill(valuePercentage);\n }\n }\n\n /**\n * renders a single segment line.\n */\n protected _renderSegment(from: number, to: number, colorClass: string): JQuery<SVGElement> {\n return this.$svg.appendSVG('path', 'speedo-chart-arc ' + colorClass)\n .attr('id', 'ArcAxisWide' + this.chart.id)\n .attr('fill', 'none')\n .attr('stroke-width', this.scaleWeight + 'px')\n .attr('d', this._pathSegment(from, to));\n }\n\n protected _renderCirclePart(part: number) {\n let colorClass = this._getColorForPart(part);\n // render 'empty' segments\n for (let i = 0; i < this.numSegmentsPerPart; i++) {\n let segPos = this._calcSegmentPos(i, part);\n this._renderSegment(segPos.from, segPos.to, colorClass);\n }\n\n // render and remember 'filled' segments (not visible by default).\n this.$filledParts.push(this._renderSegment(SpeedoChartRenderer.ARC_MIN, SpeedoChartRenderer.ARC_MIN, colorClass)); // 'filled' segments. invisible by default\n }\n\n protected _renderLegend(minValue: number, value: number, maxValue: number, groupName: string) {\n let minMaxLegendFontSize = this.scaleWeight * 0.8,\n padding = 5, // same as in AbstractChartRenderer#_renderWireLegend\n labelYPos = this.my + padding,\n labelMinMaxYPos = labelYPos + minMaxLegendFontSize * 0.8,\n positions = {\n x1: null,\n x2: this.chartBox.mX() - padding,\n y1: null,\n y2: labelYPos,\n v: -1,\n h: 1\n },\n minLegendValue = minValue ? this._formatValue(minValue) : 0,\n legendValue = value ? this._formatValue(value) : '' + 0,\n maxLegendValue = maxValue ? this._formatValue(maxValue) : 0;\n\n // tooltip for min/max value\n if (this.chart.config.options.plugins.tooltip.enabled) {\n // min value\n let $minLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() - this.r)\n .attr('y', labelMinMaxYPos)\n .text(minLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n // max value\n let $maxLegend = this.$svg.appendSVG('text', 'line-label line-chart-wire-label')\n .attr('x', this.chartBox.mX() + this.r)\n .attr('y', labelMinMaxYPos)\n .text(maxLegendValue)\n .attr('style', 'font-size: ' + minMaxLegendFontSize + 'px; text-anchor: middle');\n\n let mouseIn = function() {\n this.$svg.append($minLegend);\n this.$svg.append($maxLegend);\n }.bind(this);\n let mouseOut = () => {\n $minLegend.detach();\n $maxLegend.detach();\n };\n mouseOut();\n this.$svg\n .on('mouseenter', mouseIn)\n .on('mouseleave', mouseOut);\n }\n\n // actual value\n if (this.chart.config.options.plugins.legend.display) {\n this._renderLineLabel(positions.x2 + padding, positions.y2 + positions.v * padding, legendValue, '', false)\n .addClass('speedo-chart-label')\n .attr('style', 'font-size: ' + this.scaleWeight * 1.55 + 'px;');\n }\n aria.description(this.$svg, this.session.text('ui.SpeedoChartAriaDescription', legendValue, minLegendValue, maxLegendValue));\n }\n\n /**\n * returns the part index for the specified valuePercentage. The valuePercentage must be in the range [0,1].\n */\n protected _getPartForValue(valuePercentage: number): number {\n let part = Math.floor(valuePercentage * this.parts);\n return this._limitValue(part, this.parts - 1);\n }\n\n /**\n * Formats the speedo-values in a compact way:\n * 0 - 999: as is\n * 1 to 9'999: as is, with grouping separators\n * 10 to 999 thousand: 123k\n * >= 1 million: millions with max. two fraction digits -> 1.23M\n */\n protected _formatValue(value: number): string {\n if (value < SpeedoChartRenderer.TEN_THOUSAND) {\n return this.session.locale.decimalFormat.format(value);\n }\n if (value < SpeedoChartRenderer.ONE_MILLION) {\n return Math.floor(value / SpeedoChartRenderer.ONE_THOUSAND) + 'k';\n }\n let millions = value / SpeedoChartRenderer.ONE_MILLION;\n millions = numbers.round(millions, RoundingMode.HALF_UP, 2);\n return this.session.locale.decimalFormat.format(millions) + 'M';\n }\n\n /**\n * Updates the pointer position to point to the specified valuePercentage in range [0,1].\n */\n protected _updatePointer(valuePercentage: number) {\n this.$pointer\n .attr('d', this._pathPointer(valuePercentage))\n .removeClass('red yellow light-green dark-green')\n .addClass(this._getColorForPart(this._getPartForValue(valuePercentage)));\n }\n\n /**\n * Updates the filling of the 'filled' segments to be filled up to the specified valuePercentage in range [0,1].\n */\n protected _updatePartsFill(valuePercentage: number) {\n let from, to;\n for (let part = 0; part < this.$filledParts.length; part++) {\n from = this._calcSegmentPos(0, part).from;\n if ((part + 1) / this.parts < valuePercentage) {\n // the current part is smaller than the value: completely filled part\n to = this._calcSegmentPos(this.numSegmentsPerPart - 1, part).to;\n } else if (part / this.parts > valuePercentage) {\n // the current part is bigger than the speedo-value: hide element\n from = SpeedoChartRenderer.ARC_MIN;\n to = SpeedoChartRenderer.ARC_MIN;\n } else {\n // the value is within the current part\n to = (SpeedoChartRenderer.ARC_RANGE * valuePercentage) - SpeedoChartRenderer.ARC_MAX; // fill part exactly to the value\n }\n this.$filledParts[part].attr('d', this._pathSegment(from, to));\n }\n }\n\n /**\n * Calculates the positions (from, to) of a single segment line.\n * @param segmentIndexInPart the index of the segment line within the part.\n * @param part the part index.\n */\n protected _calcSegmentPos(segmentIndexInPart: number, part: number): { from: number; to: number } {\n let result = {\n from: 0,\n to: 0\n };\n let segmentNum = segmentIndexInPart + part * this.numSegmentsPerPart;\n result.from = segmentNum * this.widthOfSegmentWithGap - SpeedoChartRenderer.ARC_MAX;\n result.to = result.from + this.segmentWidth;\n return result;\n }\n\n protected _getColorForPart(part: number): string {\n let position = this.chart.config.options.speedo.greenAreaPosition;\n switch (position) {\n case SpeedoChartRenderer.Position.LEFT:\n // only four parts\n if (part === 0) {\n return 'dark-green';\n } else if (part === 1) {\n return 'light-green';\n } else if (part === 2) {\n return 'yellow';\n } else if (part === 3) {\n return 'red';\n }\n break;\n case SpeedoChartRenderer.Position.RIGHT:\n // only four parts\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n }\n break;\n case SpeedoChartRenderer.Position.CENTER:\n if (part === 0) {\n return 'red';\n } else if (part === 1) {\n return 'yellow';\n } else if (part === 2) {\n return 'light-green';\n } else if (part === 3) {\n return 'dark-green';\n } else if (part === 4) {\n return 'light-green';\n } else if (part === 5) {\n return 'yellow';\n } else if (part === 6) {\n return 'red';\n }\n break;\n default:\n break;\n }\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for a segment.\n */\n protected _pathSegment(start: number, end: number): string {\n let s = start * 2 * Math.PI,\n e = end * 2 * Math.PI,\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + this.r * Math.sin(s)) + ' ' + (this.my - this.r * Math.cos(s)) + ' ';\n // http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n // A rx ry\n // x-axis-rotation large-arc-flag sweep-flag\n // x y\n pathString += 'A ' + this.r + ' ' + this.r + ' ';\n pathString += '0 ' + (end - start < 0.5 ? '0' : '1') + ' 1 ';\n pathString += (this.chartBox.mX() + this.r * Math.sin(e)) + ' ' + (this.my - this.r * Math.cos(e));\n\n return pathString;\n }\n\n /**\n * calculates the path-values to be used in the 'd' attribute of the path tag for the pointer\n */\n protected _pathPointer(valuePercentage: number): string {\n let point = SpeedoChartRenderer.ARC_RANGE * valuePercentage - SpeedoChartRenderer.ARC_MAX;\n let s = point * 2 * Math.PI,\n pointerOuterR = this.r - (1.4 * this.scaleWeight),\n pointerInnerR = this.r + (1.37 * this.scaleWeight),\n pathString = '';\n\n pathString += 'M ' + (this.chartBox.mX() + pointerInnerR * Math.sin(s)) + ' ' + (this.my - pointerInnerR * Math.cos(s)) + ' ';\n pathString += 'L ' + (this.chartBox.mX() + pointerOuterR * Math.sin(s)) + ' ' + (this.my - pointerOuterR * Math.cos(s)) + ' ';\n pathString += 'Z';\n return pathString;\n }\n\n protected override _removeAnimated(afterRemoveFunc: (chartAnimationStopping?: boolean) => void) {\n if (this.animationTriggered) {\n return;\n }\n let that = this,\n tweenOut = function(now, fx) {\n let val = this.getAttribute('data-end') * (1 - fx.pos);\n that._updatePointer(val);\n that._updatePartsFill(val);\n };\n\n this.animationTriggered = true;\n this.$svg.children(this.segmentSelectorForAnimation)\n .animate({\n tabIndex: 0\n }, this._createAnimationObjectWithTabIndexRemoval(tweenOut))\n .promise()\n .done(() => {\n this._remove(afterRemoveFunc);\n this.animationTriggered = false;\n });\n }\n}\n\nexport type GreenAreaPosition = EnumObject<typeof SpeedoChartRenderer.Position>;\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\n\n// place venn 3 by simulation\n// find angle and distance (to a) and radius where \"error\" is minimal\nimport {VennCircle, VennCircleHelper} from '../index';\n\nexport class VennAsync3Calculator {\n helper: VennCircleHelper;\n venn1: VennCircle;\n venn2: VennCircle;\n venn3: VennCircle;\n u: number;\n v: number;\n w: number;\n uv: number;\n uw: number;\n vw: number;\n uvw: number;\n\n maxD: number;\n dStep: number;\n rStep: number;\n alphaStep: number;\n\n alphaBest: number;\n dBest: number;\n rBest: number;\n errorBest: number;\n callback: () => void;\n cancelled: boolean;\n\n constructor(helper: VennCircleHelper, venn1: VennCircle, venn2: VennCircle, venn3: VennCircle, u: number, v: number, w: number, uv: number, uw: number, vw: number, uvw: number, d12: number, d13: number, d23: number) {\n // if circles are empty, they are drawn as small circle, so: adjust u v w to find better errors\n if (u === 0 && uv === 0 && uw === 0 && uvw === 0) {\n u = 1;\n }\n if (v === 0 && uv === 0 && vw === 0 && uvw === 0) {\n v = 1;\n }\n if (w === 0 && uw === 0 && vw === 0 && uvw === 0) {\n w = 1;\n }\n\n this.helper = helper;\n this.venn1 = venn1;\n this.venn2 = venn2;\n this.venn3 = venn3;\n this.u = u;\n this.v = v;\n this.w = w;\n this.uv = uv;\n this.uw = uw;\n this.vw = vw;\n this.uvw = uvw;\n\n /** step and ranges for loops */\n this.maxD = this.venn1.r + 2 * this.venn2.r + 2 * this.venn1.r + this.helper.distR;\n this.dStep = this.maxD / 30;\n this.rStep = venn3.r / 4;\n this.alphaStep = Math.PI / 30;\n\n /** best vars (initialize with 0 so the optimizer knows that they are numbers) */\n this.alphaBest = 0;\n this.dBest = 0;\n this.rBest = 0;\n this.errorBest = 0;\n\n this.callback = null;\n this.cancelled = false;\n }\n\n start(callback: () => void) {\n this.callback = callback;\n setTimeout(this._next.bind(this, 0));\n }\n\n cancel() {\n this.cancelled = true;\n }\n\n protected _end() {\n // set x and y and r of venn3\n this.venn3.x = this.venn1.x + this.dBest * Math.cos(this.alphaBest);\n this.venn3.y = this.venn1.y - this.dBest * Math.sin(this.alphaBest);\n this.venn3.r = this.rBest;\n\n this.callback();\n }\n\n protected _next(alpha: number) {\n if (!this.cancelled) {\n // iterate\n this._iteration(alpha);\n }\n if (this.cancelled) {\n return; // stop loop if interrupted\n }\n\n alpha += this.alphaStep;\n if (alpha < Math.PI) {\n // schedule next loop iteration\n setTimeout(this._next.bind(this, alpha));\n } else {\n // end loop\n this._end();\n }\n }\n\n protected _iteration(alpha: number) {\n // optimize speed: no var lookup (should help the optimizer in general, and IE in particular)\n let maxD = this.maxD,\n dStep = this.dStep,\n minR = this.helper.minR,\n rStep = this.rStep,\n total = this.helper.total,\n x1 = this.venn1.x,\n y1 = this.venn1.y,\n r1 = this.venn1.r,\n x2 = this.venn2.x,\n y2 = this.venn2.y,\n r2 = this.venn2.r,\n r3 = this.venn3.r,\n u = this.u,\n v = this.v,\n w = this.w,\n uv = this.uv,\n uw = this.uw,\n vw = this.vw,\n uvw = this.uvw,\n alphaBest = this.alphaBest,\n dBest = this.dBest,\n rBest = this.rBest,\n errorBest = this.errorBest;\n\n for (let d = 0; d < maxD; d += dStep) {\n // calc x, y\n let x = x1 + d * Math.cos(alpha);\n let y = y1 - d * Math.sin(alpha);\n\n for (let r = Math.max(minR, r3 * 0.75); r <= r3 * 1.25; r += rStep) {\n\n // find areas with monte carlo, do not laugh! i tried even this:\n // http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.507.1195&rep=rep1&type=pdf\n\n let minX = Math.min(x1 - r1, x2 - r2, x - r);\n let maxX = Math.max(x1 + r1, x2 + r2, x + r);\n let minY = Math.min(y1 - r1, y2 - r2, y - r);\n let maxY = Math.max(y1 + r1, y2 + r2, y + r);\n let stepX = (maxX - minX) / 100;\n let stepY = (maxY - minY) / 100;\n\n // areas of venn\n let a1 = 0,\n a2 = 0,\n a3 = 0,\n a12 = 0,\n a13 = 0,\n a23 = 0,\n a123 = 0;\n\n for (let testX = minX; testX < maxX; testX += stepX) {\n for (let testY = minY; testY < maxY; testY += stepY) {\n // optimize speed for ie: no function call\n let t1 = ((testX - x1) * (testX - x1) + (testY - y1) * (testY - y1)) < (r1 * r1);\n let t2 = ((testX - x2) * (testX - x2) + (testY - y2) * (testY - y2)) < (r2 * r2);\n let t3 = ((testX - x) * (testX - x) + (testY - y) * (testY - y)) < (r * r);\n\n // check if inside\n if (t1 && t2 && t3) {\n a123++;\n } else if (t1 && t2 && !t3) {\n a12++;\n } else if (t1 && !t2 && !t3) {\n a1++;\n } else if (!t1 && t2 && !t3) {\n a2++;\n } else if (t1 && !t2 && t3) {\n a13++;\n } else if (!t1 && t2 && t3) {\n a23++;\n } else if (!t1 && !t2 && t3) {\n a3++;\n }\n }\n }\n\n let aTotal = a1 + a2 + a3 + a12 + a13 + a23 + a123;\n\n // calc error\n let error = d / maxD;\n error += this._error(uvw, total, a123, aTotal);\n error += this._error(uv, total, a12, aTotal);\n error += this._error(uw, total, a13, aTotal);\n error += this._error(vw, total, a23, aTotal);\n error += this._error(u, total, a1, aTotal);\n error += this._error(v, total, a2, aTotal);\n error += this._error(w, total, a3, aTotal);\n\n // better than before?\n if (alpha === 0 || error < errorBest) {\n alphaBest = alpha;\n dBest = d;\n rBest = r;\n errorBest = error;\n }\n }\n }\n\n this.alphaBest = alphaBest;\n this.dBest = dBest;\n this.rBest = rBest;\n this.errorBest = errorBest;\n }\n\n protected _error(u: number, total: number, a: number, aTotal: number): number {\n // be brutal if basic error\n if ((u === 0 && a !== 0) || (u !== 0 && a === 0)) {\n return 1000;\n }\n return Math.abs(u / total - a / aTotal) * 100;\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractSvgChartRenderer, Chart, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\nimport {arrays} from '@eclipse-scout/core';\n\nexport class VennChartRenderer extends AbstractSvgChartRenderer {\n animationTriggered: boolean;\n\n data: ChartValueGroup[];\n centerX: number;\n centerY: number;\n numberOfCircles: number;\n readyToDraw: boolean;\n wasCircle: boolean;\n\n vennCircleHelper: VennCircleHelper;\n async3Calculator: VennAsync3Calculator;\n\n vennNumber1: VennCircle;\n vennReal1: VennCircle;\n vennNumber2: VennCircle;\n vennReal2: VennCircle;\n vennNumber3: VennCircle;\n vennReal3: VennCircle;\n\n $v1: JQuery<SVGElement>;\n $v2: JQuery<SVGElement>;\n $v3: JQuery<SVGElement>;\n\n constructor(chart: Chart) {\n super(chart);\n this.animationTriggered = false;\n this.suppressLegendBox = true;\n\n let defaultConfig = {\n options: {\n venn: {\n numberOfCircles: undefined\n }\n }\n };\n chart.config = $.extend(true, {}, defaultConfig, chart.config);\n }\n\n protected override _validate(): boolean {\n let chartData = this.chart.data;\n if (!chartData ||\n chartData.axes.length !== 0 ||\n chartData.chartValueGroups.length === 0 ||\n chartData.chartValueGroups[0].values.length === 0) {\n return false;\n }\n return true;\n }\n\n protected override _renderInternal() {\n this.centerX = this.width / 2;\n this.centerY = this.height / 2;\n\n if (this.centerX === 0 || this.centerY === 0) {\n return;\n }\n\n // basic values\n this.data = this.chart.data.chartValueGroups;\n this.numberOfCircles = this.chart.config.options.venn.numberOfCircles;\n\n // render parameter\n let distR = 10,\n maxR = Math.min(this.centerX, this.centerY),\n minR = maxR / 15,\n total = this.data.reduce((s, e) => {\n return s + (e.values[0] as number);\n }, 1);\n\n this.vennCircleHelper = new VennCircleHelper(distR, maxR, minR, total);\n\n // create svg elements and venns\n if (this.numberOfCircles > 0) {\n this.$v1 = this._createCircle(0, arrays.ensure(this.data[0].colorHexValue)[0], this.data[0].cssClass);\n this.vennNumber1 = new VennCircle(this.$v1);\n this.vennReal1 = new VennCircle(this.$v1);\n }\n if (this.numberOfCircles > 1) {\n this.$v2 = this._createCircle(1, arrays.ensure(this.data[1].colorHexValue)[0], this.data[1].cssClass);\n this.vennNumber2 = new VennCircle(this.$v2);\n this.vennReal2 = new VennCircle(this.$v2);\n }\n if (this.numberOfCircles > 2) {\n this.$v3 = this._createCircle(2, arrays.ensure(this.data[2].colorHexValue)[0], this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\n // In the case of 3 circles, draw will be called async after render is completed. Therefore, the current animationDuration needs to be set again when _draw is finally called.\n const animationDurationRender = this.animationDuration;\n let draw = function() {\n this.readyToDraw = true;\n if (!this.$svg.isAttached()) {\n // user navigated away. do not try to render-> error\n return;\n }\n this.readyToDraw = false;\n const animationDuration = this.animationDuration;\n this.setAnimationDuration(animationDurationRender);\n this._draw(true, true);\n this.setAnimationDuration(animationDuration);\n }.bind(this);\n\n // save callback if user navigated away while calculating and _draw is not executed.\n this.readyToDraw = false;\n\n // calc venns and set legend\n if (this.numberOfCircles === 1) {\n this._calc1(this.vennNumber1);\n this._calc1(this.vennReal1);\n draw();\n\n } else if (this.numberOfCircles === 2) {\n this._calc2(this.vennNumber1, this.vennNumber2, false);\n this._calc2(this.vennReal1, this.vennReal2, true);\n draw();\n\n } else if (this.numberOfCircles === 3) {\n this._calc3(this.vennNumber1, this.vennNumber2, this.vennNumber3, false, () => {\n if (this.rendering || this.rendered) {\n this._calc3(this.vennReal1, this.vennReal2, this.vennReal3, true, draw);\n }\n });\n }\n }\n\n override remove(requestAnimation = false, afterRemoveFunc?: (chartAnimationStopping?: boolean) => void) {\n this._cancelAsync3Calculator();\n super.remove(requestAnimation, afterRemoveFunc);\n }\n\n // calculation\n\n protected _calc1(v1: VennCircle) {\n // set basic data\n let a = this.data[0].values[0] as number;\n\n // calc sizes\n if (a > 0) {\n v1.r = this.vennCircleHelper.calcR(a, 0.8);\n } else {\n v1.r = this.vennCircleHelper.calcR(a, 0);\n }\n\n v1.x = 0;\n v1.y = 0;\n\n // place legend and label\n v1.setLegend(this.data[0].groupName, 1, -1);\n v1.addLabel(a, v1.x, v1.y);\n }\n\n protected _calc2(v1: VennCircle, v2: VennCircle, real: boolean) {\n // set basic data\n let a = this.data[0].values[0] as number;\n let b = this.data[1].values[0] as number;\n let ab = this.data[2].values[0] as number;\n let d12;\n\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab, 0.8);\n v2.r = this.vennCircleHelper.calcR(b + ab, 0.8);\n d12 = this.vennCircleHelper.calcD(v1, v2, a, b, ab, true);\n\n // calc x\n v1.x = 0;\n v2.x = d12;\n } else {\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = this.vennCircleHelper.calcR(-1, 0.7);\n v1.x = -v1.r * 0.6;\n v2.x = v2.r * 0.6;\n }\n\n // calc y ;)\n v1.y = 0;\n v2.y = 0;\n\n // balance circles\n this.vennCircleHelper.findBalance2(v1, v2);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, -1);\n v2.setLegend(this.data[1].groupName, 1, -1);\n\n // draw labels, and fix legend\n if (real) {\n if (ab === 0) {\n v1.addLabel(a, v1.x, v1.y);\n v2.addLabel(b, v2.x, v2.y);\n } else if (a === 0 && b === 0) {\n v1.addLabel(ab, v1.x, v1.y);\n } else if (a === 0) {\n v2.addLabel(ab, v1.x, v1.y);\n v2.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v1.legendR = v2.r - d12;\n } else if (b === 0) {\n v1.addLabel(ab, v2.x, v2.y);\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v2.legendR = v1.r - d12;\n } else {\n v1.addLabel(a, v1.x + (d12 - v2.r - v1.r) / 2, v1.y);\n v1.addLabel(b, v2.x - (d12 - v2.r - v1.r) / 2, v2.y);\n v2.addLabel(ab, v1.x + v1.r + (d12 - v2.r - v1.r) / 2, v1.y);\n }\n } else {\n v1.addLabel(a, -v1.r * 0.9, 0);\n v1.addLabel(b, v1.r * 0.9, 0);\n v2.addLabel(ab, 0, 0);\n }\n }\n\n protected _calc3(v1: VennCircle, v2: VennCircle, v3: VennCircle, real: boolean, callback: () => void) {\n // set basic data\n let a = this.data[0].values[0] as number;\n let b = this.data[1].values[0] as number;\n let c = this.data[2].values[0] as number;\n let ab = this.data[3].values[0] as number;\n let ac = this.data[4].values[0] as number;\n let bc = this.data[5].values[0] as number;\n let abc = this.data[6].values[0] as number;\n\n let d12, d13, d23;\n\n // calc sizes\n if (real) {\n // basics calculation\n v1.r = this.vennCircleHelper.calcR(a + ab + ac + abc, 0.55);\n v2.r = this.vennCircleHelper.calcR(b + ab + bc + abc, 0.55);\n v3.r = this.vennCircleHelper.calcR(c + ac + bc + abc, 0.55);\n\n // find distance between a; may reduce r\n d12 = this.vennCircleHelper.calcD(v1, v2, a + ac, b + bc, ab + abc, true);\n d13 = this.vennCircleHelper.calcD(v1, v3, a + ab, c + bc, ab + abc, false);\n d23 = this.vennCircleHelper.calcD(v2, v3, b + ab, c + ac, ab + abc, false);\n\n // find coordinates of a and b\n v1.x = 0;\n v2.x = d12;\n v3.x = d13;\n\n v1.y = 0;\n v2.y = 0;\n v3.y = 0;\n\n // c is much more difficult..., only changes v3\n this._cancelAsync3Calculator();\n this.async3Calculator = new VennAsync3Calculator(this.vennCircleHelper, v1, v2, v3, a, b, c, ab, ac, bc, abc, d12, d13, d23);\n this.async3Calculator.start(() => {\n this.async3Calculator = null;\n\n // balance circles\n this.vennCircleHelper.findBalance3(v1, v2, v3);\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n callback();\n });\n\n } else {\n // draw label\n // eslint-disable-next-line no-multi-assign\n v1.r = v2.r = v3.r = this.vennCircleHelper.calcR(-1, 0.55);\n\n v1.x = -v1.r * 0.73;\n v2.x = v2.r * 0.73;\n v3.x = 0;\n\n v1.y = v1.r * 0.58;\n v2.y = v2.r * 0.58;\n v3.y = -v3.r * 0.58;\n\n // prepare legend\n v1.setLegend(this.data[0].groupName, -1, 1);\n v2.setLegend(this.data[1].groupName, 1, 1);\n v3.setLegend(this.data[2].groupName, 1, -1);\n\n v1.addLabel(a, -v1.r, v1.r * 0.76);\n v2.addLabel(b, v1.r, v1.r * 0.76);\n v3.addLabel(c, 0, -v1.r * 0.82);\n v1.addLabel(ab, 0, v1.r * 0.76);\n v1.addLabel(ac, -v1.r * 0.49, -v1.r * 0.05);\n v2.addLabel(bc, v1.r * 0.49, -v1.r * 0.05);\n v1.addLabel(abc, 0, v1.r * 0.22);\n\n callback();\n }\n }\n\n protected _cancelAsync3Calculator() {\n if (this.async3Calculator) {\n this.async3Calculator.cancel();\n this.async3Calculator = null;\n }\n }\n\n // drawing\n\n protected _draw(animated: boolean, real: boolean) {\n if (!this.rendered && !this.rendering) { // additional check, because this method might be called from a setTimeout()\n return;\n }\n\n if (this.animationTriggered) {\n return;\n }\n this.animationTriggered = true;\n\n // remove labels and legends\n let that = this;\n this.$svg.children('.venn-legend, .venn-label, .venn-axis-white, .label-line')\n .stop()\n .animateSVG('opacity', 1, 0, null, true)\n .promise()\n .done(function() {\n this.remove();\n that.animationTriggered = false;\n });\n\n // find venns we will update\n let showVenn = [];\n\n if (this.numberOfCircles > 0) {\n showVenn.push(real ? this.vennReal1 : this.vennNumber1);\n }\n\n if (this.numberOfCircles > 1) {\n showVenn.push(real ? this.vennReal2 : this.vennNumber2);\n }\n\n if (this.numberOfCircles > 2) {\n showVenn.push(real ? this.vennReal3 : this.vennNumber3);\n }\n\n // update venn and draw labels\n for (let i = 0; i < showVenn.length; i++) {\n let venn = showVenn[i];\n this._updateVenn(venn, animated);\n\n for (let j = 0; j < venn.labels.length; j++) {\n let label = venn.labels[j];\n this._drawLabel(label.text, label.x, label.y, animated);\n }\n }\n }\n\n // handling of circles\n protected _createCircle(circleIndex: number, color: string, cssClass: string): JQuery<SVGElement> {\n let $circle = this.$svg.appendSVG('circle', 'venn-circle')\n .attr('cx', this.centerX)\n .attr('cy', this.centerY)\n .attr('r', 0)\n .on('mouseenter', {\n showReal: false\n }, this._show.bind(this))\n .on('mouseleave', {\n showReal: true\n }, this._show.bind(this));\n\n if (this.chart.config.options.autoColor) {\n $circle.addClass('auto-color color0');\n } else if (cssClass) {\n $circle.addClass(cssClass);\n } else {\n $circle.attr('fill', color);\n }\n\n if (this.chart.config.options.clickable) {\n $circle.on('click', this._createClickObject(null, circleIndex), this._onChartValueClick.bind(this));\n }\n\n return $circle;\n }\n\n // handling of venn, label and legend\n protected _updateVenn(venn: VennCircle, animated: boolean) {\n // move circle\n venn.$circle\n .animateSVG('cx', this.centerX + venn.x, animated ? this.animationDuration : 0, null, true)\n .animateSVG('cy', this.centerY + venn.y, animated ? this.animationDuration : 0, null, true)\n .animateSVG('r', venn.r, animated ? this.animationDuration : 0, null, true);\n\n // set up position legend\n let minR = this.vennCircleHelper.minR,\n x1 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * venn.r,\n y1 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * venn.r,\n x2 = this.centerX + venn.x + venn.legendH * Math.sin(Math.PI / 5) * (venn.legendR + minR * 1.5),\n y2 = this.centerY + venn.y + venn.legendV * Math.cos(Math.PI / 5) * (venn.legendR + minR * 1.5);\n\n let legendPositions = {\n x1: x1,\n x2: x2,\n y1: y1,\n y2: y2,\n v: venn.legendV,\n h: venn.legendH\n } as LegendPositions;\n\n this._renderWireLegend(venn.legend, legendPositions, 'venn-legend');\n }\n\n protected _drawLabel(text: number, dx: number, dy: number, animated: boolean) {\n // draw label\n let $label = this.$svg.appendSVG('text', 'venn-label')\n .attr('x', this.centerX + dx)\n .attr('y', this.centerY + dy)\n .text(text);\n\n // animate if needed\n if (animated && this.animationDuration) {\n $label\n .attr('opacity', 0)\n .animateSVG('opacity', 1, this.animationDuration, null, true);\n }\n }\n\n // handling of show/hide numbers\n protected _show(event: JQuery.MouseEventBase) {\n if (this.numberOfCircles === 1) {\n return; // Nothing to do for only one circle\n }\n\n // target contains element that is entered, relatedTarget contains element that is left\n let toElement = (event.type === 'mouseenter' ? event.target : event.relatedTarget);\n\n // check if true enter or just from one circle to another\n let isCircle = toElement && $(toElement).hasClass('venn-circle');\n if (this.wasCircle && isCircle) {\n return;\n }\n this.wasCircle = isCircle;\n\n // draw animated in every case\n this._draw(true, event.data.showReal);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nexport class VennCircle {\n labels: Label[];\n $circle: JQuery<SVGElement>;\n x: number;\n y: number;\n r: number;\n legend: string;\n legendR: number;\n legendH: -1 | 1;\n legendV: -1 | 1;\n\n constructor($circle: JQuery<SVGElement>) {\n this.$circle = $circle;\n this.labels = [];\n }\n\n setLegend(legend: string, horizontal: -1 | 1, vertical: -1 | 1, r?: number) {\n this.legend = legend;\n this.legendH = horizontal;\n this.legendV = vertical;\n this.legendR = r || this.r;\n }\n\n addLabel(text: number, x: number, y: number) {\n this.labels.push({\n text: text,\n x: x,\n y: y\n });\n }\n}\n\nexport type Label = {\n text: number;\n x: number;\n y: number;\n};\n\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {VennCircle} from '../index';\n\nexport class VennCircleHelper {\n distR: number;\n maxR: number;\n minR: number;\n total: number;\n\n constructor(distR: number, maxR: number, minR: number, total: number) {\n this.distR = distR;\n this.maxR = maxR;\n this.minR = minR;\n this.total = total;\n }\n\n findBalance2(venn1: VennCircle, venn2: VennCircle) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x) / (venn1.r + venn2.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y) / (venn1.r + venn2.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n }\n\n findBalance3(venn1: VennCircle, venn2: VennCircle, venn3: VennCircle) {\n // find center\n let midX = (venn1.r * venn1.x + venn2.r * venn2.x + venn3.r * venn3.x) / (venn1.r + venn2.r + venn3.r);\n let midY = (venn1.r * venn1.y + venn2.r * venn2.y + venn3.r * venn3.y) / (venn1.r + venn2.r + venn3.r);\n\n // move to center\n venn1.x = venn1.x - midX;\n venn2.x = venn2.x - midX;\n venn3.x = venn3.x - midX;\n\n venn1.y = venn1.y - midY;\n venn2.y = venn2.y - midY;\n venn3.y = venn3.y - midY;\n }\n\n calcR(count: number, factorMax: number): number {\n if (count === -1) {\n return this.maxR * factorMax;\n }\n return Math.max(this.minR, Math.sqrt(count / this.total) * this.maxR * factorMax);\n }\n\n calcD(venn1: VennCircle, venn2: VennCircle, u: number, v: number, uv: number, changeR: boolean): number {\n let ret: number;\n if (uv === 0) {\n // separated circles\n ret = venn1.r + venn2.r + this.distR * 2;\n\n } else if (u === 0 && v === 0) {\n // same circle\n ret = 0;\n\n } else if (u === 0) {\n // a part of b\n ret = Math.max(0, venn2.r - venn1.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn1.r = venn2.r - ret;\n }\n\n } else if (v === 0) {\n // b part of a\n ret = Math.max(0, venn1.r - venn2.r - this.distR);\n\n // check if inner circle is to large\n if (ret < 1.5 * this.distR && changeR) {\n ret = 1.5 * this.distR;\n venn2.r = venn1.r - ret;\n }\n\n } else {\n // this is pure magic ;) please do not touch!\n let ri = Math.min(venn1.r, venn2.r);\n let ra = Math.max(venn1.r, venn2.r);\n let q = Math.min(u, v) / (Math.min(u, v) + uv);\n\n // unfortunately, there is no closed solution for cricles, so handle as squares\n ret = 2 * q * ri - ri + ra;\n\n // check and fix\n ret = Math.max(3 * this.distR, ret);\n ret = Math.min(ri + ra - 3 * this.distR, ret);\n ret = Math.max(ra - ri + 3 * this.distR, ret);\n }\n\n return ret;\n }\n}\n","/*\n * Copyright (c) 2010-2023 BSI Business Systems Integration AG.\n * All rights reserved. This program and the accompanying materials\n * are made available under the terms of the Eclipse Public License v1.0\n * which accompanies this distribution, and is available at\n * https://www.eclipse.org/legal/epl-v10.html\n *\n * Contributors:\n * BSI Business Systems Integration AG - initial API and implementation\n */\nimport {DateAdapter, TimeUnit} from 'chart.js';\nimport {DateFormat, dates, Locale, objects, Session, strings} from '@eclipse-scout/core';\n\nexport const chartJsDateAdapter = {\n getAdapter(session: Session): Partial<DateAdapter> {\n return {\n formats: (): { [key: string]: string } => _getFormats(session.locale),\n\n parse: (value: unknown, format?: TimeUnit): number | null => {\n if (objects.isNullOrUndefined(value)) {\n return null;\n }\n if (value instanceof Date) {\n return value.getTime();\n }\n if (objects.isString(value)) {\n if (objects.isString(format) && strings.hasText(format)) {\n let dateFormat = new DateFormat(session.locale, format);\n value = dateFormat.parse(value);\n return value instanceof Date ? value.getTime() : null;\n }\n value = dates.parseJsonDate(value);\n return value instanceof Date ? value.getTime() : null;\n }\n return null;\n },\n\n format: (timestamp: number, format: TimeUnit): string => {\n if (format === 'quarter') {\n // Quarters are not supported by DateFormat, but Chart.js anyway never uses this time unit for formatting by default, because it is not very common.\n // See the function \"determineUnitForFormatting\" in scale.time.js for more details. Therefore, we refrain from supporting this here.\n throw new Error('The time unit \"quarter\" is not supported for formatting.');\n }\n return dates.format(new Date(timestamp), session.locale, format);\n },\n\n add: (timestamp: number, amount: number, unit: TimeUnit): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'millisecond':\n return dates.shiftTime(date, 0, 0, 0, amount).getTime();\n case 'second':\n return dates.shiftTime(date, 0, 0, amount, 0).getTime();\n case 'minute':\n return dates.shiftTime(date, 0, amount, 0, 0).getTime();\n case 'hour':\n return dates.shiftTime(date, amount, 0, 0, 0).getTime();\n case 'day':\n return dates.shift(date, 0, 0, amount).getTime();\n case 'week':\n return dates.shift(date, 0, 0, amount * 7).getTime();\n case 'month':\n return dates.shift(date, 0, amount, 0).getTime();\n case 'quarter':\n return dates.shift(date, 0, amount * 3, 0).getTime();\n case 'year':\n return dates.shift(date, amount, 0, 0).getTime();\n default:\n return timestamp;\n }\n },\n\n diff: (a: number, b: number, unit: TimeUnit): number => {\n switch (unit) {\n case 'millisecond':\n return a - b;\n case 'second':\n return (a - b) / 1000;\n case 'minute':\n return (a - b) / 1000 / 60;\n case 'hour':\n return (a - b) / 1000 / 60 / 60;\n case 'day':\n return dates.compareDays(new Date(a), new Date(b));\n case 'week':\n return dates.compareDays(new Date(a), new Date(b)) / 7;\n case 'month':\n return dates.compareMonths(new Date(a), new Date(b));\n case 'quarter':\n return dates.compareMonths(new Date(a), new Date(b)) / 3;\n case 'year':\n return new Date(a).getFullYear() - new Date(b).getFullYear();\n default:\n return 0;\n }\n },\n\n startOf: (timestamp: number, unit: TimeUnit | 'isoWeek', weekday?: number): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'second':\n return date.setMilliseconds(0);\n case 'minute':\n return date.setSeconds(0, 0);\n case 'hour':\n return date.setMinutes(0, 0, 0);\n case 'day':\n return date.setHours(0, 0, 0, 0);\n case 'week':\n return dates.firstDayOfWeek(date, 0).getTime();\n case 'isoWeek':\n return dates.firstDayOfWeek(date, weekday).getTime();\n case 'month':\n return dates.trunc(date).setDate(0);\n case 'quarter':\n return dates.trunc(date).setMonth(date.getMonth() % 4, 1);\n case 'year':\n return dates.trunc(date).setMonth(0, 1);\n default:\n return timestamp;\n }\n },\n\n endOf: (timestamp: number, unit: TimeUnit | 'isoWeek'): number => {\n let date = new Date(timestamp);\n switch (unit) {\n case 'second':\n return date.setMilliseconds(999);\n case 'minute':\n return date.setSeconds(59, 999);\n case 'hour':\n return date.setMinutes(59, 59, 999);\n case 'day':\n return date.setHours(23, 59, 59, 999);\n case 'week': {\n date.setHours(23, 59, 59, 999);\n let firstDayOfWeek = dates.firstDayOfWeek(date, 0);\n return firstDayOfWeek.setDate(firstDayOfWeek.getDate() + 7);\n }\n case 'month': {\n date.setHours(23, 59, 59, 999);\n return date.setDate(_getNumberOfDays(date.getMonth(), date.getFullYear()));\n }\n case 'quarter': {\n date.setHours(23, 59, 59, 999);\n let endOfQuarterMonth = date.getMonth() % 4 + 2;\n return date.setMonth(endOfQuarterMonth, _getNumberOfDays(endOfQuarterMonth, date.getFullYear()));\n }\n case 'year': {\n date.setHours(23, 59, 59, 999);\n return date.setMonth(11, 31);\n }\n default:\n return timestamp;\n }\n }\n };\n }\n};\n\nfunction _getFormats(locale: Locale) {\n return {\n datetime: locale.dateFormatPatternDefault + ' ' + locale.timeFormatPatternDefault,\n millisecond: 'HH:mm:ss.SSS',\n second: 'HH:mm:ss',\n minute: locale.timeFormatPatternDefault,\n hour: locale.timeFormatPatternDefault,\n day: locale.dateFormatPatternDefault,\n week: 'ww',\n month: 'MMM yyyy',\n quarter: 'qqq - yyyy',\n year: 'yyyy'\n };\n}\n\n/**\n * @param month 0 = january, 11 = december\n * @returns the number of days in the given month and year.\n */\nfunction _getNumberOfDays(month: number, year: number): number {\n if (month in [3, 5, 8, 10]) { // april, june, september, november\n return 30;\n } else if (month === 1) { // february\n return dates.isLeapYear(year) ? 29 : 28;\n }\n // january, march, may, july, august, october, december\n return 31;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormField} from '@eclipse-scout/core';\nimport {Chart, ChartFieldModel} from '../../../index';\n\nexport class ChartField extends FormField implements ChartFieldModel {\n declare model: ChartFieldModel;\n\n chart: Chart;\n\n constructor() {\n super();\n this._addWidgetProperties(['chart']);\n\n this.chart = null;\n }\n\n protected override _render() {\n this.addContainer(this.$parent, 'chart-field');\n this.addLabel();\n this.addMandatoryIndicator();\n this.addStatus();\n this._renderChart();\n }\n\n protected _renderChart() {\n if (this.chart) {\n this.chart.render();\n this.addField(this.chart.$container);\n }\n }\n\n protected _removeChart() {\n this.chart.remove();\n this._removeField();\n }\n\n protected override _linkWithLabel($element: JQuery) {\n // nop, the chart renderers will take care of labeling and describing the chart\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldAdapter} from '@eclipse-scout/core';\n\nexport class ChartFieldAdapter extends FormFieldAdapter {\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldModel, ObjectOrChildModel} from '@eclipse-scout/core';\nimport {Chart} from '../../../index';\n\nexport interface ChartFieldModel extends FormFieldModel {\n chart?: ObjectOrChildModel<Chart>;\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ObjectFactory} from '@eclipse-scout/core';\nimport * as self from './index';\n\nexport * from './objectFactories';\nexport * from './bookmark/ChartTableControlConfigHelperImpl';\nexport * from './chart/Chart';\nexport * from './chart/ChartAdapter';\nexport * from './chart/ChartEventMap';\nexport * from './chart/ChartLayout';\nexport * from './chart/ChartModel';\nexport * from './chart/AbstractChartRenderer';\nexport * from './chart/AbstractSvgChartRenderer';\nexport * from './chart/chartJsDateAdapter';\nexport * from './chart/ChartJsRenderer';\nexport * from './chart/FulfillmentChartRenderer';\nexport * from './chart/SpeedoChartRenderer';\nexport * from './chart/SalesfunnelChartRenderer';\nexport * from './chart/VennAsync3Calculator';\nexport * from './chart/VennCircleHelper';\nexport * from './chart/VennChartRenderer';\nexport * from './chart/VennCircle';\nexport * from './form/fields/chartfield/ChartField';\nexport * from './form/fields/chartfield/ChartFieldAdapter';\nexport * from './form/fields/chartfield/ChartFieldModel';\nexport * from './tile/ChartFieldTile';\nexport * from './tile/ChartFieldTileAdapter';\nexport * from './tile/ChartFieldTileModel';\nexport * from './table/controls/ChartTableControl';\nexport * from './table/controls/ChartTableControlAdapter';\nexport * from './table/controls/ChartTableControlConfigDo';\nexport * from './table/controls/ChartTableControlEventMap';\nexport * from './table/controls/ChartTableControlLayout';\nexport * from './table/controls/ChartTableControlModel';\nexport * from './table/controls/ChartTableUserFilter';\nexport * from './table/controls/ChartTableUserFilterModel';\n\nexport default self;\n\nObjectFactory.get().registerNamespace('scout', self);\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {scout} from '@eclipse-scout/core';\nimport {ChartTableControlConfigHelperImpl} from './index';\n\nscout.addObjectFactories({\n 'ChartTableControlConfigHelper': () => new ChartTableControlConfigHelperImpl()\n});\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {\n arrays, Column, DateColumn, Event, EventListener, Icon, IconDesc, icons, InitModelOf, NumberColumn, objects, scout, scrollbars, strings, styles, Table, TableControl, TableMatrix, TableMatrixDateGroup, TableMatrixKeyAxis,\n TableMatrixNumberGroup, TableMatrixResult, tooltips\n} from '@eclipse-scout/core';\nimport {Chart, ChartTableControlEventMap, ChartTableControlLayout, ChartTableControlModel, ChartTableUserFilter} from '../../index';\nimport $ from 'jquery';\nimport {BubbleDataPoint, ChartData, ChartType as ChartJsType} from 'chart.js';\nimport {ChartConfig, ClickObject} from '../../chart/Chart';\n\nexport class ChartTableControl extends TableControl implements ChartTableControlModel {\n declare model: ChartTableControlModel;\n declare eventMap: ChartTableControlEventMap;\n declare self: ChartTableControl;\n\n chartAggregation: TableControlChartAggregation;\n chartGroup1: TableControlChartGroup;\n chartGroup2: TableControlChartGroup;\n chartType: TableControlChartType;\n oldChartType: TableControlChartType;\n chart: Chart;\n chartColorScheme: string;\n xAxis: TableMatrixKeyAxis;\n yAxis: TableMatrixKeyAxis;\n dateGroup: (TableMatrixDateGroup | string)[][];\n\n $chartSelect: JQuery;\n $axisSelectContainer: JQuery;\n $xAxisSelect: JQuery;\n $yAxisSelect: JQuery;\n $dataSelect: JQuery;\n protected _chartTypeMap: Record<TableControlChartType, JQuery>;\n protected _aggregationMap: Record<string, JQuery>;\n protected _chartGroup1Map: Record<string, JQuery>;\n protected _chartGroup2Map: Record<string, JQuery>;\n protected _tableUpdatedHandler: (e: Event<Table>) => void;\n protected _tableColumnStructureChangedHandler: () => void;\n protected _chartValueClickedHandler: () => void;\n protected _filterRemovedListener: EventListener;\n protected _tableUpdatedTimeOutId: number;\n\n constructor() {\n super();\n this.iconId = icons.CHART;\n this.tooltipText = '${textKey:ui.Chart}';\n this.chartAggregation = {\n modifier: TableMatrix.NumberGroup.COUNT\n };\n this.chartType = Chart.Type.BAR;\n this.oldChartType = null;\n this.chart = null;\n this.chartColorScheme = 'chart-table-control';\n\n /** chart config selection */\n this.$chartSelect = null;\n this.$xAxisSelect = null;\n this.$yAxisSelect = null;\n this.$dataSelect = null;\n\n this.xAxis = null;\n this.yAxis = null;\n\n this.dateGroup = null;\n\n this._tableUpdatedHandler = this._onTableUpdated.bind(this);\n this._tableColumnStructureChangedHandler = this._onTableColumnStructureChanged.bind(this);\n this._chartValueClickedHandler = this._onChartValueClick.bind(this);\n }\n\n static DATE_GROUP_FLAG = 0x100;\n static MAX_AXIS_COUNT = 100;\n\n protected override _init(model: InitModelOf<this>) {\n super._init(model);\n this.table.on('columnStructureChanged', this._tableColumnStructureChangedHandler);\n\n this.chart = scout.create(Chart, {\n parent: this\n });\n }\n\n protected override _destroy() {\n this.table.off('columnStructureChanged', this._tableColumnStructureChangedHandler);\n super._destroy();\n }\n\n protected override _computeEnabled(inheritAccessibility: boolean, parentEnabled: boolean): boolean {\n if (!this._hasColumns() && !this.selected) {\n return false;\n }\n return super._computeEnabled(inheritAccessibility, parentEnabled);\n }\n\n protected _renderChart() {\n if (this.chart) {\n this.chart.render(this.$contentContainer);\n this.chart.$container.addClass(this.denseClass);\n }\n }\n\n protected override _createLayout(): ChartTableControlLayout {\n return new ChartTableControlLayout(this);\n }\n\n protected _renderChartType() {\n this._selectChartType();\n this.$yAxisSelect.toggleClass('hide', this.chartType !== Chart.Type.BUBBLE);\n this.$yAxisSelect.toggleClass('animated', scout.isOneOf(Chart.Type.BUBBLE, this.chartType, this.oldChartType) && !!this.oldChartType);\n this.$yAxisSelect.data('scroll-shadow').setVisible(false);\n this.$yAxisSelect.oneAnimationEnd(() => {\n scrollbars.update(this.$yAxisSelect);\n this.$yAxisSelect.data('scroll-shadow').setVisible(true);\n this.$yAxisSelect.removeClass('animated');\n });\n\n if (this.contentRendered) {\n this.chart.$container.animateAVCSD('opacity', 0, () => {\n this.chart.$container.css('opacity', 1);\n this._drawChart();\n });\n }\n }\n\n protected _selectChartType() {\n objects.values(this._chartTypeMap).forEach($element => {\n $element.removeClass('selected');\n });\n this._chartTypeMap[this.chartType].addClass('selected');\n }\n\n protected _renderChartGroup1() {\n this._renderChartGroup(1);\n }\n\n protected _renderChartGroup2() {\n this._renderChartGroup(2);\n }\n\n protected _renderChartGroup(groupId: 1 | 2) {\n if (!this._hasColumns()) {\n return;\n }\n let groupName = 'chartGroup' + groupId;\n let map = '_' + groupName + 'Map';\n let chartGroup = this[groupName];\n if (chartGroup) {\n let $element = this[map][chartGroup.id];\n $element.siblings('.select-axis').animateAVCSD('height', 30);\n $element.selectOne('selected');\n\n if (chartGroup.modifier > 0) {\n let dateGroupIndex = chartGroup.modifier ^ ChartTableControl.DATE_GROUP_FLAG;\n $element.animateAVCSD('height', 42);\n $element.children('.select-axis-group').text(this.dateGroup[dateGroupIndex][1]);\n }\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n protected _renderChartAggregation() {\n let $element = this._aggregationMap[this.chartAggregation.id || 'all'];\n if ($element) {\n $element.selectOne();\n $element\n .removeClass('data-sum')\n .removeClass('data-avg');\n $element.addClass(this._getAggregationCssClass());\n if (this.contentRendered) {\n this._drawChart();\n }\n }\n }\n\n protected _getAggregationCssClass(): string {\n switch (this.chartAggregation.modifier) {\n case TableMatrix.NumberGroup.COUNT:\n return 'data-count';\n case TableMatrix.NumberGroup.SUM:\n return 'data-sum';\n case TableMatrix.NumberGroup.AVG:\n return 'data-avg';\n default:\n return null;\n }\n }\n\n protected _renderChartSelect(cssClass: string, chartType: TableControlChartType, iconId: string) {\n let icon = scout.create(Icon, {\n parent: this,\n iconDesc: iconId,\n cssClass: cssClass\n });\n icon.render(this.$chartSelect);\n this.$contentContainer.one('remove', () => icon.destroy());\n let $iconContainer = icon.$container;\n $iconContainer\n .toggleClass('disabled', !this.enabledComputed || !this._hasColumns())\n .data('chartType', chartType);\n\n if (this.enabledComputed && this._hasColumns()) {\n $iconContainer.on('click', this._onClickChartType.bind(this));\n }\n\n this._chartTypeMap[chartType] = $iconContainer;\n }\n\n /**\n * Appends a chart selection divs to this.$contentContainer and sets the this.$chartSelect property.\n **/\n protected _renderChartSelectContainer() {\n // create container\n this.$chartSelect = this.$contentContainer.appendDiv('chart-select');\n\n // create chart types for selection\n this._chartTypeMap = {} as Record<TableControlChartType, JQuery>;\n\n let supportedChartTypes = this._getSupportedChartTypes();\n\n if (scout.isOneOf(Chart.Type.BAR, supportedChartTypes)) {\n this._renderChartSelect('chart-bar', Chart.Type.BAR, icons.DIAGRAM_BARS_VERTICAL);\n }\n if (scout.isOneOf(Chart.Type.BAR_HORIZONTAL, supportedChartTypes)) {\n this._renderChartSelect('chart-stacked', Chart.Type.BAR_HORIZONTAL, icons.DIAGRAM_BARS_HORIZONTAL);\n }\n if (scout.isOneOf(Chart.Type.LINE, supportedChartTypes)) {\n this._renderChartSelect('chart-line', Chart.Type.LINE, icons.DIAGRAM_LINE);\n }\n if (scout.isOneOf(Chart.Type.PIE, supportedChartTypes)) {\n this._renderChartSelect('chart-pie', Chart.Type.PIE, icons.DIAGRAM_PIE);\n }\n if (scout.isOneOf(Chart.Type.BUBBLE, supportedChartTypes)) {\n this._renderChartSelect('chart-bubble', Chart.Type.BUBBLE, icons.DIAGRAM_SCATTER);\n }\n }\n\n protected _getSupportedChartTypes(): TableControlChartType[] {\n return [\n Chart.Type.BAR,\n Chart.Type.BAR_HORIZONTAL,\n Chart.Type.LINE,\n Chart.Type.PIE,\n Chart.Type.BUBBLE\n ];\n }\n\n protected _onClickChartType(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget),\n chartType = $target.data('chartType');\n this.setChartType(chartType);\n }\n\n protected _onClickChartGroup(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget),\n groupId = $target.parent().data('groupId'),\n column = $target.data('column'),\n origModifier = $target.data('modifier');\n\n // do nothing when item is disabled\n if (!$target.isEnabled()) {\n return;\n }\n\n let modifier = $target.isSelected() ? this._nextDateModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let config = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartGroup(groupId, config);\n }\n\n protected _onClickAggregation(event: JQuery.ClickEvent) {\n let $target = $(event.currentTarget);\n // update modifier\n let origModifier = $target.data('modifier');\n let modifier = $target.isSelected() ? this._nextModifier(origModifier) : origModifier;\n $target.data('modifier', modifier);\n\n let column = $target.data('column');\n let aggregation = {\n id: column ? column.id : null,\n modifier: modifier\n };\n\n this._setChartAggregation(aggregation);\n }\n\n protected _nextDateModifier(modifier: TableMatrixDateGroup): TableMatrixDateGroup {\n switch (modifier) {\n case TableMatrix.DateGroup.DATE:\n return TableMatrix.DateGroup.MONTH;\n case TableMatrix.DateGroup.MONTH:\n return TableMatrix.DateGroup.WEEKDAY;\n case TableMatrix.DateGroup.WEEKDAY:\n return TableMatrix.DateGroup.YEAR;\n case TableMatrix.DateGroup.YEAR:\n return TableMatrix.DateGroup.DATE;\n default:\n return modifier;\n }\n }\n\n protected _nextModifier(modifier: TableMatrixNumberGroup): TableMatrixNumberGroup {\n switch (modifier) {\n case TableMatrix.NumberGroup.SUM:\n return TableMatrix.NumberGroup.AVG;\n case TableMatrix.NumberGroup.AVG:\n return TableMatrix.NumberGroup.SUM;\n default:\n return modifier;\n }\n }\n\n setChartAggregation(chartAggregation: TableControlChartAggregation) {\n this.setProperty('chartAggregation', chartAggregation);\n }\n\n protected _setChartAggregation(chartAggregation: TableControlChartAggregation) {\n if (chartAggregation === this.chartAggregation) {\n return;\n }\n this._setProperty('chartAggregation', chartAggregation);\n if (this.contentRendered) {\n this._renderChartAggregation();\n }\n }\n\n setChartGroup1(chartGroup: TableControlChartGroup) {\n this.setProperty('chartGroup1', chartGroup);\n }\n\n protected _setChartGroup1(chartGroup: TableControlChartGroup) {\n this._setChartGroup(1, chartGroup);\n }\n\n setChartGroup2(chartGroup: TableControlChartGroup) {\n this.setProperty('chartGroup2', chartGroup);\n }\n\n protected _setChartGroup2(chartGroup: TableControlChartGroup) {\n this._setChartGroup(2, chartGroup);\n }\n\n protected _setChartGroup(groupId: 1 | 2, chartGroup: TableControlChartGroup) {\n let propertyName = 'chartGroup' + groupId;\n this._changeProperty(propertyName, chartGroup);\n }\n\n protected _changeProperty(prop: string, value: any) {\n if (value === this[prop]) {\n return;\n }\n this._setProperty(prop, value);\n if (this.contentRendered) {\n this['_render' + prop.charAt(0).toUpperCase() + prop.slice(1)]();\n }\n }\n\n setChartType(chartType: TableControlChartType) {\n this.oldChartType = this.chartType;\n this.setProperty('chartType', chartType);\n }\n\n protected _hasColumns(): boolean {\n return this._columns().length > 0;\n }\n\n protected _columns(): Column[] {\n return new TableMatrix(this.table, this.session).columns();\n }\n\n protected _axisCount(columnCount: (number | Column<any>)[][], column: Column<any>): number {\n let tmpColumn;\n for (let i = 0; i < columnCount.length; i++) {\n tmpColumn = columnCount[i][0];\n if (tmpColumn === column) {\n return columnCount[i][1] as number;\n }\n }\n return 0;\n }\n\n protected _plainAxisText(column: Column<any>, text: string): string {\n if (column.headerHtmlEnabled) {\n let plainText = strings.plainText(text);\n return plainText.replace(/\\n/g, ' ');\n }\n return text;\n }\n\n protected override _renderContent($parent: JQuery) {\n this.$contentContainer = $parent.appendDiv('chart-container');\n\n // scrollbars\n this._installScrollbars();\n\n this._renderChartSelectContainer();\n\n // group functions for dates\n this.dateGroup = [\n [TableMatrix.DateGroup.YEAR, this.session.text('ui.groupedByYear')],\n [TableMatrix.DateGroup.MONTH, this.session.text('ui.groupedByMonth')],\n [TableMatrix.DateGroup.WEEKDAY, this.session.text('ui.groupedByWeekday')],\n [TableMatrix.DateGroup.DATE, this.session.text('ui.groupedByDate')]\n ];\n\n // listeners\n this._filterRemovedListener = this.table.on('filterRemoved', event => {\n if (!(event.filter instanceof ChartTableUserFilter)) {\n return;\n }\n this.chart.setCheckedItems([]);\n });\n\n this._addListeners();\n\n this._renderAxisSelectorsContainer();\n let columnCount = this._renderAxisSelectors();\n\n // draw first chart\n this._renderChart();\n\n this._initializeSelection(columnCount);\n\n this._renderChartParts();\n\n this._drawChart();\n }\n\n protected _addListeners() {\n this.table.on('rowsInserted', this._tableUpdatedHandler);\n this.table.on('rowsDeleted', this._tableUpdatedHandler);\n this.table.on('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.on('valueClick', this._chartValueClickedHandler);\n }\n\n protected _renderAxisSelectorsContainer() {\n this.$axisSelectContainer = this.$contentContainer\n .appendDiv('axis-select-container');\n }\n\n protected _renderAxisSelectors(): (number | Column<any>)[][] {\n // create container for x/y-axis\n this.$xAxisSelect = this.$axisSelectContainer\n .appendDiv('xaxis-select')\n .data('groupId', 1);\n scrollbars.install(this.$xAxisSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n this.$yAxisSelect = this.$axisSelectContainer\n .appendDiv('yaxis-select')\n .data('groupId', 2);\n scrollbars.install(this.$yAxisSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n // map for selection (column id, $element)\n this._chartGroup1Map = {};\n this._chartGroup2Map = {};\n\n // find best x- and y-axis: best is 9 different entries\n let matrix = new TableMatrix(this.table, this.session),\n columnCount = matrix.columnCount(false); // filterNumberColumns false: number columns will be filtered below\n columnCount.sort((a, b) => {\n return Math.abs(a[1] as number - 8) - Math.abs(b[1] as number - 8);\n });\n\n let axisCount, enabled,\n numberOfAxisItems = 0,\n columns = matrix.columns(false); // filterNumberColumns false: number columns will be filtered below\n\n // all x/y-axis for selection\n for (let c1 = 0; c1 < columns.length; c1++) {\n let content, $div, $yDiv,\n column1 = columns[c1];\n\n // Check if data-spread is too large. This is a problem in large tables where a column has unique values.\n // We cannot create DOM elements for each unique value because this causes all browser to stop script\n // execution. May be in a later release we could implement some sort of data aggregation, but this is not\n // a simple task on the UI layer, because it requires some know-how about the entity represented by the table,\n // which we don't have in the UI. Another possible solution: make the charts scrollable, however this is\n // probably not a good idea, because with a lot of data, the chart fails to provide an oversight over the data\n // when the user must scroll and only sees a small part of the chart.\n if (column1 instanceof DateColumn) {\n // dates are always aggregated, and thus we must not check if the chart has \"too much data\".\n enabled = true;\n } else {\n axisCount = this._axisCount(columnCount, column1);\n enabled = (axisCount <= ChartTableControl.MAX_AXIS_COUNT);\n }\n\n content = this._axisContentForColumn(column1);\n\n $div = this.$contentContainer\n .makeDiv('select-axis', this._plainAxisText(column1, content.text))\n .data('column', column1)\n .setEnabled(enabled);\n\n if (!enabled) {\n if (this.chartGroup1 && this.chartGroup1.id === column1.id) {\n this.chartGroup1 = null;\n this.chartGroup2 = null;\n }\n if (this.chartGroup2 && this.chartGroup2.id === column1.id) {\n this.chartGroup2 = null;\n }\n }\n\n if (content.icon) {\n $div.addClass(content.icon.appendCssClass('font-icon'));\n }\n\n if (column1 instanceof DateColumn) {\n $div\n .data('modifier', TableMatrix.DateGroup.YEAR)\n .appendDiv('select-axis-group', this.dateGroup[0][1]);\n }\n\n // install click handler or tooltip\n if (enabled) {\n $div.on('click', this._onClickChartGroup.bind(this));\n tooltips.installForEllipsis($div, {\n parent: this\n });\n } else {\n tooltips.install($div, {\n parent: this,\n text: this.session.text('ui.TooMuchData')\n });\n }\n\n numberOfAxisItems++;\n $yDiv = $div.clone(true);\n this._chartGroup1Map[column1.id] = $div;\n this._chartGroup2Map[column1.id] = $yDiv;\n this.$xAxisSelect.append($div);\n this.$yAxisSelect.append($yDiv);\n }\n\n // map for selection (column id, $element)\n this._aggregationMap = {};\n\n if (this._hasColumns()) {\n // create container for data\n this.$dataSelect = this.$axisSelectContainer.appendDiv('data-select');\n scrollbars.install(this.$dataSelect, {\n parent: this,\n session: this.session,\n axis: 'y'\n });\n\n // add data-count for no column restriction (all columns)\n let countDesc = this.session.text('ui.Count');\n this._aggregationMap.all = this.$dataSelect\n .appendDiv('select-data data-count', countDesc)\n .data('column', null)\n .data('modifier', TableMatrix.NumberGroup.COUNT);\n\n // all data for selection\n for (let c2 = 0; c2 < columns.length; c2++) {\n let column2 = columns[c2];\n let fakeNumberLabelCol2 = c2 + 1;\n\n if (column2 instanceof NumberColumn) {\n let columnText;\n if (strings.hasText(column2.text)) {\n columnText = this._plainAxisText(column2, column2.text);\n } else if (strings.hasText(column2.headerTooltipText)) {\n columnText = column2.headerTooltipText;\n } else {\n columnText = '[' + fakeNumberLabelCol2 + ']';\n }\n\n this._aggregationMap[column2.id] = this.$dataSelect\n .appendDiv('select-data data-sum', columnText)\n .data('column', column2)\n .data('modifier', TableMatrix.NumberGroup.SUM);\n }\n }\n\n // click handling for data\n $('.select-data', this.$contentContainer)\n .on('click', this._onClickAggregation.bind(this));\n }\n\n return columnCount;\n }\n\n protected _initializeSelection(columnCount: (number | Column<any>)[][]) {\n let $axisColumns;\n\n if (!this.chartType) {\n this.setChartType(Chart.Type.BAR);\n }\n\n // no id selected\n if (!this.chartAggregation || !this._aggregationMap[this.chartAggregation.id]) {\n this._setChartAggregation({\n id: null,\n modifier: TableMatrix.NumberGroup.COUNT\n });\n }\n\n // apply default selection\n if (!this.chartGroup1 || !this.chartGroup1.id || !this._chartGroup1Map[this.chartGroup1.id]) {\n $axisColumns = this.$xAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(1, columnCount, $axisColumns, 0 /* only use the first column for the first group */);\n }\n if (!this.chartGroup2 || !this.chartGroup2.id || !this._chartGroup2Map[this.chartGroup2.id]) {\n $axisColumns = this.$yAxisSelect.children(':not(.disabled)');\n this._setDefaultSelectionForGroup(2, columnCount, $axisColumns, 1 /* try to use the second column for the second group (if available). Otherwise, the first column is used. */);\n }\n }\n\n /**\n * Applies the default column selection for the specified chartGroup.\n * The implementation only considers columns that are part of the specified columnCount matrix and $candidates array.\n * From all these columns the last match that is lower or equal to the specified maxIndex is set as default chart group.\n *\n * @param chartGroup The number of the chart group (1 or 2) for which the default column should be set.\n * @param columnCount Column-count matrix as returned by TableMatrix#columnCount(). Holds possible grouping columns.\n * @param $candidates jQuery array holding all axis columns that could be used as default.\n * @param maxIndex The maximum column index to use as default column for the specified chartGroup.\n */\n protected _setDefaultSelectionForGroup(chartGroup: 1 | 2, columnCount: (number | Column<any>)[][], $candidates: JQuery, maxIndex: number) {\n let col = this._getDefaultSelectedColumn(columnCount, $candidates, maxIndex);\n if (col) {\n this._setChartGroup(chartGroup, this._getDefaultChartGroup(col));\n }\n }\n\n protected _getDefaultSelectedColumn(columnCount: (number | Column<any>)[][], $candidates: JQuery, maxIndex: number): Column<any> {\n let matchCounter = 0,\n curColumn,\n result;\n for (let j = 0; j < columnCount.length && matchCounter <= maxIndex; j++) {\n curColumn = columnCount[j][0];\n if (this._existsInAxisColumns($candidates, curColumn)) {\n result = curColumn; // remember possible result\n matchCounter++;\n }\n }\n return result;\n }\n\n protected _existsInAxisColumns($candidates: JQuery, columnToSearch: Column<any>): boolean {\n for (let i = 0; i < $candidates.length; i++) {\n if ($candidates.eq(i).data('column') === columnToSearch) {\n return true;\n }\n }\n return false;\n }\n\n protected _getDefaultChartGroup(column: Column<any>): TableControlChartGroup {\n let modifier;\n if (column instanceof DateColumn) {\n modifier = 256;\n }\n return {\n id: column.id,\n modifier: modifier\n };\n }\n\n protected _renderChartParts() {\n this._renderChartType();\n this._renderChartAggregation();\n this._renderChartGroup1();\n this._renderChartGroup2();\n }\n\n protected _drawChart() {\n if (!this._hasColumns()) {\n this._hideChart();\n return;\n }\n\n let cube = this._calculateValues();\n\n if (cube && cube.length) {\n this.chart.setVisible(true);\n } else {\n this._hideChart();\n return;\n }\n\n let config: ChartConfig = {\n type: this.chartType,\n options: {\n handleResize: true,\n colorScheme: this.chartColorScheme,\n maxSegments: 5,\n plugins: {\n legend: {\n display: false\n }\n }\n }\n };\n\n let iconClasses = [];\n config.data = this._computeData(iconClasses, cube);\n this._adjustFont(config, iconClasses);\n\n this._adjustConfig(config);\n\n this.chart.setConfig(config);\n\n let checkedItems = this._computeCheckedItems(config.data.datasets[0].deterministicKeys);\n this.chart.setCheckedItems(checkedItems);\n }\n\n protected _hideChart() {\n this.chart.setConfig({\n type: this.chartType\n });\n this.chart.setVisible(false);\n }\n\n protected _getDatasetLabel(): string {\n let elem = this._aggregationMap[this.chartAggregation.id || 'all'];\n return (elem ? elem.text() : null) || this.session.text('ui.Value');\n }\n\n protected _calculateValues(): TableMatrixResult {\n // build matrix\n let matrix = new TableMatrix(this.table, this.session);\n\n // aggregation (data axis)\n let tableData = this.chartAggregation.id ? this._aggregationMap[this.chartAggregation.id].data('column') : -1;\n matrix.addData(tableData, this.chartAggregation.modifier);\n\n // find xAxis\n if (this.chartGroup1) {\n let axis = this._chartGroup1Map[this.chartGroup1.id].data('column');\n this.xAxis = matrix.addAxis(axis, this.chartGroup1.modifier);\n }\n\n // find yAxis\n // in case of bubble\n if (this.chartType === Chart.Type.BUBBLE && this.chartGroup2) {\n let axis2 = this._chartGroup2Map[this.chartGroup2.id].data('column');\n this.yAxis = matrix.addAxis(axis2, this.chartGroup2.modifier);\n } else {\n this.yAxis = null;\n }\n\n // return not possible to draw chart\n if (matrix.isEmpty() || !matrix.isMatrixValid()) {\n return;\n }\n\n // calculate matrix\n return matrix.calculate();\n }\n\n protected _getXAxis(): TableMatrixKeyAxis {\n return this.xAxis;\n }\n\n protected _getYAxis(): TableMatrixKeyAxis {\n return this.yAxis;\n }\n\n protected _computeData(iconClasses: string[], cube: TableMatrixResult): ChartData {\n let data = {\n datasets: [{\n label: this._getDatasetLabel()\n }]\n } as ChartData;\n if (!cube) {\n return data;\n }\n iconClasses = iconClasses || [];\n\n let segments = [];\n\n if (this.chartType === Chart.Type.BUBBLE) {\n segments = this._computeBubbleData(iconClasses, cube);\n } else {\n let xAxis = this._getXAxis();\n for (let x = 0; x < xAxis.length; x++) {\n let label,\n keyX = xAxis[x];\n if (xAxis.column instanceof NumberColumn) {\n // the axis will format numbers as two digit decimals and null/undefined as the text '-empty-' or something similar\n // only pass null/undefined to the axis as we want to leave the number format to the chart but need the '-empty-' string\n label = objects.isNullOrUndefined(keyX) ? xAxis.format(keyX) : keyX;\n } else {\n label = this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n }\n segments.push({\n value: cube.getValue([keyX])[0],\n label: label,\n deterministicKey: xAxis.keyToDeterministicKey(keyX)\n });\n }\n }\n let dataset = data.datasets[0],\n labels = [];\n\n dataset.data = [];\n dataset.deterministicKeys = [];\n\n segments.forEach(elem => {\n dataset.data.push(elem.value);\n dataset.deterministicKeys.push(elem.deterministicKey);\n if (!objects.isNullOrUndefined(elem.label)) {\n labels.push(elem.label);\n }\n });\n\n if (labels.length) {\n data.labels = labels;\n }\n\n return data;\n }\n\n protected _computeBubbleData(iconClasses: string[], cube: TableMatrixResult): { value: BubbleDataPoint; deterministicKey: TableControlDeterministicKey }[] {\n if (!cube) {\n return [];\n }\n iconClasses = iconClasses || [];\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n segments = [];\n for (let x = 0; x < xAxis.length; x++) {\n let keyX = xAxis[x],\n xValue = keyX;\n this._handleIconLabel(xAxis.format(keyX), xAxis, iconClasses);\n if (!(xAxis.column instanceof NumberColumn) && xValue === null) {\n xValue = xAxis.max;\n }\n if (xAxis.column instanceof DateColumn) {\n xValue = xValue - xAxis.min;\n }\n for (let y = 0; y < yAxis.length; y++) {\n let keyY = yAxis[y],\n yValue = keyY,\n cubeValues = cube.getValue([keyX, keyY]);\n this._handleIconLabel(yAxis.format(keyY), yAxis, iconClasses);\n if (cubeValues && cubeValues.length) {\n if (!(yAxis.column instanceof NumberColumn) && yValue === null) {\n yValue = yAxis.max;\n }\n if (yAxis.column instanceof DateColumn) {\n yValue = yValue - yAxis.min;\n }\n segments.push({\n value: {\n x: xValue,\n y: yValue,\n z: cubeValues[0]\n },\n deterministicKey: [xAxis.keyToDeterministicKey(keyX), yAxis.keyToDeterministicKey(keyY)]\n });\n }\n }\n }\n return segments;\n }\n\n protected _handleIconLabel(label: string, axis: TableMatrixKeyAxis, iconClasses: string[]): string {\n if (axis && axis.isIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n iconClasses.push(...icon.appendCssClass('font-icon').split(' '));\n return icon.iconCharacter;\n }\n }\n return label;\n }\n\n protected _adjustFont(config: ChartConfig, iconClasses: string[]) {\n if (!config || !iconClasses) {\n return;\n }\n\n iconClasses = iconClasses.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n if (iconClasses.length) {\n let fontFamily = styles.get(iconClasses, 'font-family').fontFamily;\n if (this.chartType !== Chart.Type.PIE) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n ticks: {\n font: {\n family: fontFamily\n }\n }\n },\n y: {\n ticks: {\n font: {\n family: fontFamily\n }\n }\n }\n }\n });\n }\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n tooltip: {\n titleFont: {\n family: fontFamily\n }\n }\n }\n });\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n font: {\n family: fontFamily\n }\n }\n }\n });\n }\n }\n\n protected _adjustLabels(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis();\n if (this.chartType === Chart.Type.BUBBLE) {\n if (!(xAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n ticks: {\n callback: label => this._formatLabel(label, xAxis)\n }\n }\n }\n });\n }\n if (!(yAxis.column instanceof NumberColumn)) {\n config.options = $.extend(true, {}, config.options, {\n scales: {\n y: {\n ticks: {\n callback: label => this._formatLabel(label, yAxis)\n }\n }\n }\n });\n }\n } else {\n if (xAxis.column instanceof NumberColumn) {\n config.options = $.extend(true, {}, config.options, {\n reformatLabels: true\n });\n }\n }\n }\n\n protected _formatLabel(label: number, axis: TableMatrixKeyAxis): string {\n if (!axis) {\n return '' + label;\n }\n\n if (axis.column instanceof DateColumn) {\n label = label + axis.min;\n if (label !== parseInt('' + label) || (axis.length < 2 && (label < axis.min || label > axis.max))) {\n return null;\n }\n }\n if (axis.indexOf(null) !== -1) {\n if (label === axis.max) {\n label = null;\n } else if (label > axis.max) {\n return null;\n }\n }\n let formatted = axis.format(label);\n if (axis.isIcon) {\n let icon = icons.parseIconId(formatted);\n if (icon && icon.isFontIcon()) {\n formatted = icon.iconCharacter;\n }\n }\n return formatted;\n }\n\n protected _adjustConfig(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n this._adjustLabels(config);\n this._adjustClickable(config);\n\n if (this.chartType === Chart.Type.BUBBLE) {\n this._adjustBubble(config);\n } else if (this.chartType === Chart.Type.PIE) {\n this._adjustPie(config);\n } else {\n this._adjustScales(config);\n }\n }\n\n protected _adjustClickable(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n if (this._isChartClickable()) {\n config.options = $.extend(true, {}, config.options, {\n clickable: true,\n checkable: true,\n otherSegmentClickable: true\n });\n }\n }\n\n protected _isChartClickable(): boolean {\n return true;\n }\n\n protected _adjustBubble(config: ChartConfig) {\n if (!config || this.chartType !== Chart.Type.BUBBLE) {\n return;\n }\n\n config.options.bubble = $.extend(true, {}, config.options.bubble, {\n sizeOfLargestBubble: 25,\n minBubbleSize: 5\n });\n }\n\n protected _adjustPie(config: ChartConfig) {\n if (!config || this.chartType !== Chart.Type.PIE) {\n return;\n }\n\n config.data.datasets[0].datalabels = {\n labels: {\n index: {\n display: 'auto',\n color: styles.get([this.chartColorScheme, this.chartType + '-chart', 'elements', 'label'], 'fill').fill,\n formatter: (value, context) => {\n return context.chart.data.labels[context.dataIndex];\n },\n anchor: 'end',\n align: 'end',\n clamp: true,\n offset: 10,\n padding: 4\n },\n labels: {}\n }\n };\n\n config.options = $.extend(true, {}, config.options, {\n plugins: {\n datalabels: {\n display: true\n }\n }\n });\n // Compensate the margin of the container so that the chart is always centered vertically\n let margin = this.chart.$container.cssMarginTop() - this.chart.$container.cssMarginBottom();\n config.options = $.extend(true, {}, config.options, {\n layout: {\n padding: {\n top: 30 + (Math.sign(margin) < 0 ? Math.abs(margin) : 0),\n bottom: 30 + (Math.sign(margin) > 0 ? margin : 0)\n }\n }\n });\n }\n\n protected _adjustScales(config: ChartConfig) {\n if (!config) {\n return;\n }\n\n config.options = $.extend(true, {}, config.options, {\n scales: {\n x: {\n beginAtZero: true\n },\n y: {\n beginAtZero: true\n }\n }\n });\n }\n\n protected _computeCheckedItems(deterministicKeys: TableControlDeterministicKey[]): ClickObject[] {\n if (!deterministicKeys) {\n return [];\n }\n\n let xAxis = this._getXAxis(),\n yAxis = this._getYAxis(),\n tableFilter = this.table.getFilter(ChartTableUserFilter.TYPE) as ChartTableUserFilter,\n filters = [],\n checkedIndices = [];\n\n if (tableFilter && (tableFilter.xAxis || {}).column === (xAxis || {}).column && (tableFilter.yAxis || {}).column === (yAxis || {}).column) {\n filters = tableFilter.filters;\n }\n\n deterministicKeys.forEach((deterministicKey, idx) => {\n if (filters.filter(filter => (Array.isArray(filter.deterministicKey) && Array.isArray(deterministicKey)) ? arrays.equals(filter.deterministicKey, deterministicKey) : filter.deterministicKey === deterministicKey).length) {\n checkedIndices.push(idx);\n }\n });\n let datasetIndex = 0;\n if (this.chartType === Chart.Type.PIE) {\n let maxSegments = this.chart.config.options.maxSegments,\n collapsedIndices = arrays.init(deterministicKeys.length - maxSegments, null).map((elem, idx) => idx + maxSegments);\n if (!arrays.containsAll(checkedIndices, collapsedIndices)) {\n arrays.remove(checkedIndices, maxSegments - 1);\n }\n arrays.removeAll(checkedIndices, collapsedIndices);\n\n // first dataset is hidden on pie charts\n datasetIndex = 1;\n }\n\n let checkedItems = [];\n if (checkedIndices.length) {\n checkedIndices.forEach(index => {\n checkedItems.push({\n datasetIndex: datasetIndex,\n dataIndex: index\n });\n });\n }\n\n return checkedItems;\n }\n\n protected _onChartValueClick() {\n // prepare filter\n let filters = [];\n if (this.chart && this.chart.config.data) {\n let maxSegments = this.chart.config.options.maxSegments,\n dataset = this.chart.config.data.datasets[0],\n getFilters: (index: number) => { deterministicKey: TableControlDeterministicKey } | { deterministicKey: TableControlDeterministicKey }[] = index => ({deterministicKey: dataset.deterministicKeys[index]});\n if (this.chartType === Chart.Type.PIE) {\n getFilters = index => {\n index = parseInt('' + index);\n if (maxSegments && maxSegments === index + 1) {\n return arrays.init(dataset.deterministicKeys.length - index, null).map((elem, idx) => ({deterministicKey: dataset.deterministicKeys[idx + index]}));\n }\n return {deterministicKey: dataset.deterministicKeys[index]};\n };\n }\n\n let checkedIndices = this.chart.checkedItems.filter(item => item.datasetIndex === 0)\n .map(item => item.dataIndex);\n checkedIndices.forEach(index => {\n arrays.pushAll(filters, getFilters(index));\n });\n }\n\n // filter function\n if (filters.length) {\n let filter = scout.create(ChartTableUserFilter, {\n session: this.session,\n table: this.table,\n text: this.tooltipText,\n xAxis: this._getXAxis(),\n yAxis: this._getYAxis(),\n filters: filters\n });\n\n this.table.addFilter(filter);\n } else {\n this.table.removeFilterByKey(ChartTableUserFilter.TYPE);\n }\n }\n\n protected _axisContentForColumn(column: Column<any>): { text: string; icon?: IconDesc } {\n let text = column.text;\n if (strings.hasText(text)) {\n return {\n text: text\n };\n }\n\n if (column.headerIconId) {\n let icon = icons.parseIconId(column.headerIconId);\n if (icon.isFontIcon()) {\n return {\n text: icon.iconCharacter,\n icon: icon\n };\n }\n }\n\n if (column.headerTooltipText) {\n return {\n text: column.headerTooltipText\n };\n }\n\n return {\n text: '[' + (this._columns().indexOf(column) + 1) + ']'\n };\n }\n\n protected override _removeContent() {\n this._removeScrollbars();\n this.$contentContainer.remove();\n this.chart.remove();\n this.table.events.removeListener(this._filterRemovedListener);\n this._removeListeners();\n this.oldChartType = null;\n this.recomputeEnabled();\n }\n\n protected _removeScrollbars() {\n this.$xAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n scrollbars.uninstall(this.$xAxisSelect, this.session);\n this.$yAxisSelect.each((index, element) => {\n tooltips.uninstall($(element));\n });\n scrollbars.uninstall(this.$yAxisSelect, this.session);\n scrollbars.uninstall(this.$dataSelect, this.session);\n this._uninstallScrollbars();\n }\n\n protected _removeListeners() {\n this.table.off('rowsInserted', this._tableUpdatedHandler);\n this.table.off('rowsDeleted', this._tableUpdatedHandler);\n this.table.off('allRowsDeleted', this._tableUpdatedHandler);\n this.chart.off('valueClick', this._chartValueClickedHandler);\n }\n\n protected _onTableUpdated(event?: Event<Table>) {\n if (this._tableUpdatedTimeOutId) {\n return;\n }\n\n this._tableUpdatedTimeOutId = setTimeout(() => {\n this._tableUpdatedTimeOutId = null;\n\n if (!this.rendered) {\n return;\n }\n\n this._setChartGroup1(null);\n this._setChartGroup2(null);\n this.removeContent();\n this.renderContent();\n });\n }\n\n protected _onTableColumnStructureChanged() {\n this.recomputeEnabled();\n if (this.contentRendered && this.selected) {\n this._onTableUpdated();\n }\n }\n}\n\nexport type TableControlChartType = typeof Chart.Type['BAR' | 'BAR_HORIZONTAL' | 'LINE' | 'PIE' | 'BUBBLE'];\n\nexport type TableControlChartAggregation = {\n id?: string;\n modifier?: TableMatrixNumberGroup;\n};\n\nexport type TableControlChartGroup = {\n id?: string;\n modifier?: TableMatrixNumberGroup | TableMatrixDateGroup;\n};\n\nexport type TableControlDeterministicKey = (number | string) | (number | string)[];\n\n// extend chart.js\ndeclare module 'chart.js' {\n interface ChartDatasetProperties<TType extends ChartJsType, TData> {\n deterministicKeys?: TableControlDeterministicKey[];\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableControlAdapter} from '@eclipse-scout/core';\n\nexport class ChartTableControlAdapter extends TableControlAdapter {\n\n constructor() {\n super();\n this._addRemoteProperties(['chartType', 'chartAggregation', 'chartGroup1', 'chartGroup2']);\n }\n}\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {BaseDoEntity, IChartTableControlConfigDo, typeName} from '@eclipse-scout/core';\n\n@typeName('scout.ChartTableControlConfig')\nexport class ChartTableControlConfigDo extends BaseDoEntity implements IChartTableControlConfigDo {\n chartTypeId?: string;\n chartGroup1ColumnId?: string;\n chartGroup1Modifier?: number;\n chartGroup2ColumnId?: string;\n chartGroup2Modifier?: number;\n chartAggregationColumnId?: string;\n chartAggregationModifier?: number;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ActionEventMap, PropertyChangeEvent} from '@eclipse-scout/core';\nimport {TableControlChartAggregation, TableControlChartGroup, TableControlChartType} from './ChartTableControl';\n\nexport interface ChartTableControlEventMap extends ActionEventMap {\n 'propertyChange:chartAggregation': PropertyChangeEvent<TableControlChartAggregation>;\n 'propertyChange:chartGroup1': PropertyChangeEvent<TableControlChartGroup>;\n 'propertyChange:chartGroup2': PropertyChangeEvent<TableControlChartGroup>;\n 'propertyChange:chartType': PropertyChangeEvent<TableControlChartType>;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {AbstractLayout, scrollbars} from '@eclipse-scout/core';\nimport {ChartTableControl} from '../../index';\n\nexport class ChartTableControlLayout extends AbstractLayout {\n control: ChartTableControl;\n\n constructor(control: ChartTableControl) {\n super();\n this.control = control;\n }\n\n override layout($container: JQuery) {\n if (!this.control.contentRendered) {\n return;\n }\n scrollbars.update(this.control.$contentContainer);\n scrollbars.update(this.control.$xAxisSelect);\n scrollbars.update(this.control.$yAxisSelect);\n scrollbars.update(this.control.$dataSelect);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableControlModel} from '@eclipse-scout/core';\nimport {TableControlChartAggregation, TableControlChartGroup, TableControlChartType} from './ChartTableControl';\n\nexport interface ChartTableControlModel extends TableControlModel {\n chartAggregation?: TableControlChartAggregation;\n chartGroup1?: TableControlChartGroup;\n chartGroup2?: TableControlChartGroup;\n chartType?: TableControlChartType;\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {arrays, TableMatrix, TableMatrixKeyAxis, TableRow, TableUserFilter, TableUserFilterAddedEventData} from '@eclipse-scout/core';\nimport {ChartTableUserFilterModel} from '../../index';\nimport {TableControlDeterministicKey} from './ChartTableControl';\n\nexport class ChartTableUserFilter extends TableUserFilter implements ChartTableUserFilterModel {\n declare model: ChartTableUserFilterModel;\n\n text: string;\n xAxis: TableMatrixKeyAxis;\n yAxis: TableMatrixKeyAxis;\n filters: { deterministicKey: TableControlDeterministicKey }[];\n columnIdX: string;\n columnIdY: string;\n\n constructor() {\n super();\n this.filterType = ChartTableUserFilter.TYPE;\n this.text = null;\n this.xAxis = null;\n this.yAxis = null;\n this.filters = [];\n this.columnIdX = null;\n this.columnIdY = null;\n }\n\n static TYPE = 'CHART';\n\n createLabel() {\n return this.text;\n }\n\n override createFilterAddedEventData(): ChartTableUserFilterAddedEventData {\n let data: ChartTableUserFilterAddedEventData = super.createFilterAddedEventData();\n data.text = this.text;\n data.filters = this.filters;\n data.columnIdX = (this.xAxis && this.xAxis.column) ? this.xAxis.column.id : null;\n data.columnIdY = (this.yAxis && this.yAxis.column) ? this.yAxis.column.id : null;\n return data;\n }\n\n calculate() {\n let matrix = new TableMatrix(this.table, this.session);\n let columnX = this.table.columnById(this.columnIdX);\n let axisGroupX = columnX.createFilter().axisGroup();\n this.xAxis = matrix.addAxis(columnX, axisGroupX);\n if (this.columnIdY) {\n let columnY = this.table.columnById(this.columnIdY);\n let axisGroupY = columnY.createFilter().axisGroup();\n this.yAxis = matrix.addAxis(columnY, axisGroupY);\n }\n matrix.calculate();\n }\n\n accept(row: TableRow): boolean {\n if (!this.xAxis) {\n // Lazy calculation. It is not possible on init, because the table is not rendered yet.\n this.calculate();\n }\n let value = this.xAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyX = this.xAxis.normDeterministic(value);\n\n if (!this.yAxis) {\n return this.filters.filter(filter => filter.deterministicKey === deterministicKeyX).length > 0;\n }\n value = this.yAxis.column.cellValueOrTextForCalculation(row);\n let deterministicKeyY = this.yAxis.normDeterministic(value);\n return this.filters.filter(filter => arrays.equals(filter.deterministicKey as (number | string)[], [deterministicKeyX, deterministicKeyY])).length > 0;\n }\n}\n\nexport type ChartTableUserFilterAddedEventData = TableUserFilterAddedEventData & {\n filters?: { deterministicKey: TableControlDeterministicKey }[];\n columnIdX?: string;\n columnIdY?: string;\n};\n","/*\n * Copyright (c) 2010, 2025 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {TableMatrixKeyAxis, TableUserFilterModel} from '@eclipse-scout/core';\nimport {TableControlDeterministicKey} from './ChartTableControl';\n\nexport interface ChartTableUserFilterModel extends TableUserFilterModel {\n text?: string;\n xAxis?: TableMatrixKeyAxis;\n yAxis?: TableMatrixKeyAxis;\n columnIdX?: string;\n columnIdY?: string;\n filters?: { deterministicKey: TableControlDeterministicKey }[];\n}\n","/*\n * Copyright (c) 2010, 2024 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ColorScheme, FormFieldTile, PropertyChangeEvent} from '@eclipse-scout/core';\nimport {Chart, ChartField, ChartFieldTileModel} from '../index';\nimport {ChartConfig} from '../chart/Chart';\n\nexport class ChartFieldTile extends FormFieldTile implements ChartFieldTileModel {\n declare model: ChartFieldTileModel;\n declare tileWidget: ChartField;\n\n protected _chartConfigChangeHandler: (event: PropertyChangeEvent<ChartConfig, Chart>) => void;\n\n constructor() {\n super();\n this._chartConfigChangeHandler = this._onChartConfigChange.bind(this);\n }\n\n protected override _setColorScheme(colorScheme: ColorScheme | string) {\n super._setColorScheme(colorScheme);\n this._updateChartColorScheme();\n }\n\n protected _updateChartColorScheme() {\n let config = $.extend(true, {}, this.tileWidget.chart.config, {\n options: {\n colorScheme: this.colorScheme\n }\n });\n\n this.tileWidget.chart.setConfig(config);\n }\n\n protected _onChartConfigChange(event: PropertyChangeEvent<ChartConfig, Chart>) {\n this._updateChartColorScheme();\n }\n\n protected override _setTileWidget(tileWidget: ChartField) {\n if (this.tileWidget) {\n this.tileWidget.chart.off('propertyChange:config', this._chartConfigChangeHandler);\n }\n super._setTileWidget(tileWidget);\n this._updateChartColorScheme();\n this.tileWidget.chart.on('propertyChange:config', this._chartConfigChangeHandler);\n }\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {FormFieldTileAdapter} from '@eclipse-scout/core';\n\nexport class ChartFieldTileAdapter extends FormFieldTileAdapter {\n}\n","/*\n * Copyright (c) 2010, 2023 BSI Business Systems Integration AG\n *\n * This program and the accompanying materials are made\n * available under the terms of the Eclipse Public License 2.0\n * which is available at https://www.eclipse.org/legal/epl-2.0/\n *\n * SPDX-License-Identifier: EPL-2.0\n */\nimport {ChartField} from '../index';\nimport {WidgetTileModel} from '@eclipse-scout/core';\n\nexport interface ChartFieldTileModel extends WidgetTileModel {\n tileWidget?: ChartField;\n}\n","module.exports = Chart;","module.exports = ChartDataLabels;","module.exports = jQuery;","module.exports = scout;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(\"./src/index.ts\");\n",""],"names":["ChartTableControlConfigHelper","scout","ChartTableControl","ChartTableControlConfigDo","ChartTableControlConfigHelperImpl","_exportConfig","page","detailTable","chartTableControl","findTableControl","selected","create","chartTypeId","chartType","chartGroup1ColumnId","chartGroup1","id","chartGroup1Modifier","modifier","chartGroup2ColumnId","chartGroup2","chartGroup2Modifier","chartAggregationColumnId","chartAggregation","chartAggregationModifier","_importConfig","config","setSelected","setChartType","setChartGroup1","setChartGroup2","setChartAggregation","arrays","PropertyEventEmitter","AbstractChartRenderer","chart","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","constructor","validate","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","options","autoColor","ensure","colorHexValue","cssClass","axes","render","requestAnimation","configAnimationDuration","animation","duration","setAnimationDuration","_render","renderCheckedItems","_renderCheckedItems","updateData","isDataUpdatable","_updateData","isDetachSupported","refresh","remove","setProperty","_renderAnimationDuration","_setAnimationDuration","_setProperty","arguments","undefined","afterRemoveFunc","_removeAnimated","_remove","shouldAnimateRemoveOnUpdate","opts","aria","ObjectIdProvider","strings","styles","$","Chart","AbstractSvgChartRenderer","chartBox","clipId","maskId","suppressLegendBox","height","width","chartAnimationStopping","$svg","_nonValueClickHandler","get","createUiSeqId","_onNonValueClick","bind","FONT_SIZE_SMALLEST","FONT_SIZE_SMALL","FONT_SIZE_MIDDLE","FONT_SIZE_BIG","$container","appendSVG","role","linkChartWithFieldLabel","on","getFirstOpaqueBackgroundColor","_initChartBox","_useFontSizeBig","addClass","_useFontSizeMiddle","_useFontSizeSmall","_useFontSizeSmallest","isAttached","_renderInternal","$chartSvg","$field","parents","$fieldLabel","eq","children","linkElementWithLabel","stop","_createClickObject","xIndex","datasetIndex","dataIndex","_onChartValueClick","event","handleValueClick","originalEvent","stopPropagation","handleNonValueClick","_measureText","text","legendLabelClass","$label","attr","textBounds","getBBox","e","_renderLine","x1","y1","x2","y2","lineClass","$line","animateSVG","_renderLineLabel","x","y","label","labelClass","drawBackground","$background","xOffset","yOffset","mX","mY","_createAnimationObjectWithTabIndexRemoval","animationFunc","step","now","fx","DEFAULT_ANIMATION_DURATION","complete","removeAttr","_addClipping","$clip","$mask","find","each","attrXLINK","_renderWireLegend","legendPositions","className","drawBackgroundBox","plugins","tooltip","enabled","detachFunc","attachFunc","removeFunc","legend","padding","backgroundWidth","lineHeight","backgroundHeight","positions","$legend","lengthLegend","horizontalSpace","h","Array","isArray","posIndex","yPos","v","truncateText","Math","max","getComputedTextLength","push","autoPosition","posFunc","call","css","forEach","index","add","line","wires","$wire","detach","append","ChartJsRenderer","ChartLayout","FulfillmentChartRenderer","SalesfunnelChartRenderer","SpeedoChartRenderer","VennChartRenderer","colorSchemes","HtmlComponent","objects","Widget","checkedItems","chartRenderer","_updatedOnce","_updateChartTimeoutId","_updateChartOpts","_updateChartOptsWhileNotAttached","Type","PIE","LINE","BAR","BAR_HORIZONTAL","COMBO_BAR_LINE","FULFILLMENT","SPEEDO","SALESFUNNEL","VENN","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","SCATTER","Position","TOP","BOTTOM","LEFT","RIGHT","CENTER","DEFAULT_DEBOUNCE_TIMEOUT","_init","model","setConfig","_setData","$parent","appendDiv","htmlComp","install","setLayout","_renderProperties","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","_renderOnAttach","updateChartOptsWhileNotAttached","splice","_updateChartRenderer","extend","setData","setCheckedItems","_renderData","onlyUpdateData","defaultConfig","type","colorMode","ChartColorMode","AUTO","colorScheme","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","datalabels","display","position","pointsVisible","ensureColorScheme","equalsRecursive","oldConfigWithNewData","transferLabelMap","source","target","identifier","isEmpty","scales","_renderConfig","removeClass","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","_renderEnabled","toggleClass","toggleColorSchemeClasses","enforceRerender","onlyRefresh","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","removing","trigger","_resolveChartRenderer","clickedItem","checkedItem","handleLegendClick","legentItemIndex","legendItemIndex","ModelAdapter","ChartAdapter","_onWidgetValueClick","_send","_onWidgetEvent","chartJsDateAdapter","_adapters","chartJsAdapters","CategoryScale","ChartJs","graphics","numbers","Point","Tooltip","tooltips","ChartDataLabels","register","defaults","maintainAspectRatio","elements","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","bar","borderSkipped","labels","usePointStyle","boxHeight","overrides","scatter","bubble","layout","autoPadding","chartJsGlobalsInitialized","PHI","sqrt","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","chartJs","onlyIntegers","maxXAxesTicksHeight","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","resetDatasetAfterHover","legendHoverDatasets","$canvas","_labelFormatter","_xLabelFormatter","_yLabelFormatter","_xAxisFitter","_yAxisFitter","_radialChartDatalabelsDisplayHandler","_radialChartDatalabelsFormatter","_datalabelsFormatter","_datalabelBackgroundColorHandler","_legendLabelGenerator","_clickHandler","_hoverHandler","_pointerHoverHandler","_legendClickHandler","_legendHoverHandler","_legendPointerHoverHandler","_legendLeaveHandler","_legendPointerLeaveHandler","_resizeHandler","_tooltipTitleGenerator","_tooltipItemsGenerator","_tooltipLabelGenerator","_tooltipLabelValueGenerator","_tooltipLabelColorGenerator","_tooltipRenderer","_tooltip","_tooltipTimeoutId","_updatingDatalabels","_hoveringClickableElement","_createLabelFormatter","_formatLabel","_formatXLabel","_formatYLabel","_fitXAxis","_fitYAxis","_displayDatalabelsOnRadialChart","_formatDatalabelsOnRadialChart","_formatDatalabels","_getBackgroundColorOfDataset","_generateLegendLabels","_onClick","_onHover","_onHoverPointer","_onLegendClick","_onLegendHover","_onLegendHoverPointer","_onLegendLeave","_onLegendLeavePointer","_onResize","_generateTooltipTitle","_generateTooltipItems","_generateTooltipLabel","_generateTooltipLabelValue","_generateTooltipLabelColor","_renderTooltip","chartDataValid","isOneOf","chartConfigDataValid","appendElement","_onCanvasClick","hidden","font","family","_date","override","getAdapter","_adjustConfig","_renderChart","destroy","getContext","_adjustSize","chartArea","isDatasetVisible","getDatasetMeta","visible","targetData","sourceData","transferProperty","property","setToUndefined","src","min","targetLength","sourceLength","findDataset","datasetId","findDatasetIndex","findIndex","every","isNullOrUndefined","idx","targetDataset","sourceDataset","_adjustDatasetBorderWidths","deleted","sort","a","b","yDiffType","r","axis","ticks","stepSize","update","_checkItems","transferArrayValues","indices","changed","isNaN","checkedIndices","map","uncheckedIndices","init","elem","removeAll","backgroundColor","checkedBackgroundColor","hoverBackgroundColor","checkedHoverBackgroundColor","pointBackgroundColor","checkedPointBackgroundColor","pointHoverBackgroundColor","checkedPointHoverBackgroundColor","pointRadius","checkedPointRadius","uncheckedBackgroundColor","uncheckedHoverBackgroundColor","uncheckedPointBackgroundColor","uncheckedPointHoverBackgroundColor","uncheckedPointRadius","stopAnimations","_adjustType","_computeDatasets","_adjustData","_adjustLegend","_adjustTooltip","_adjustGrid","_adjustPlugins","_adjustColors","_adjustClickHandler","_adjustResizeHandler","scaleLabelByTypeMap","_isHorizontalBar","indexAxis","setLabelMap","labelMap","isEmptyObject","isHorizontalBar","_computeLabelMap","groupName","_adjustBarBorderWidth","_adjustMaxSegments","_adjustBubbleRadii","_adjustOnlyIntegers","_adjustDatasetBorderWidth","hover","borderWidthIdentifier","borderWidthBackupIdentifier","backgroundColorIdentifier","borderColorIdentifier","isFunction","isBorderWidthArray","isBackgroundColorArray","isBorderColorArray","dataLength","borderWidthBackup","borderColor","equals","newData","slice","reduce","newLabels","maxSegmentsExceeded","_isMaxSegmentsExceeded","otherSegmentClickable","z","pow","isInteger","generateLabels","boxWidth","callbacks","title","items","labelValue","labelColor","external","tooltipItems","tooltipItem","xAxis","yAxis","axisLabels","_getAxisLabels","xTickLabel","callback","_createTooltipAttribute","encode","yTickLabel","reformatLabels","xAxisLabel","yAxisLabel","_resolveAxisLabel","axisLabel","defaultLabel","isString","tooltipLabel","tooltipLabelValue","tooltipColor","xAxisValues","yAxisValues","itemsText","_getItemDetails","_createTooltipScatterAttribute","tableHeader","tableFooter","box","isObject","legendColor","_adjustColorOpacity","tooltipLabelColor","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","value","isTitle","color","xValue","yValue","context","isHideTooltip","opacity","dataPoints","isTooltipShowing","_renderTooltipLater","DEFAULT_TOOLTIP_DELAY","firstDataPoint","tooltipOptions","tooltipCallbacks","tooltipTitle","tooltipText","join","positionAndOffset","_computeTooltipPositionAndOffset","offset","caretX","offsetX","caretY","offsetY","objectType","parent","$anchor","htmlEnabled","tooltipPosition","tooltipDirection","originProducer","origin","offsetBounds","offsetProducer","reposition","fontFamily","titleFont","maxLabelPrefSize","prefSize","avg","element","getProps","startAngle","endAngle","angle","PI","mid","left","innerRadius","outerRadius","cos","sin","_adjustScalesR","_adjustScalesXY","minSpaceBetweenTicks","beginAtZero","angleLines","pointLabels","size","_adjustXAxis","_adjustYAxis","grid","drawTicks","border","afterCalculateLabelRotation","afterFit","_adjustPluginsDatalabels","formatter","onProgress","onComplete","updateDatalabels","metas","getSortedVisibleDatasetMetas","activeElements","getActiveElements","inactiveElements","meta","activeIndex","activeElement","_actives","afterEvent","updateDatalabelsAndDefaultCallback","defaultCallback","borderRadius","anchor","align","handleFormatter","_getNumberFormatter","numberFormatter","renderer","scale","_formatCategory","_formatLabelMap","_getXLabelMap","_getYLabelMap","isNumber","getLabelForValue","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","fontDefaults","ticksDefaults","ticksFontDefaults","fontSize","maxRotation","chartAreaHeight","top","bottom","ticksFont","maxLabelLength","labelSizes","_labelSizes","widest","measureText","ctx","tick","tickLength","maxWidth","midRadius","radius1","diameter1","diameter2","sum","_computeSumOfVisibleElements","roundingError","roundedResults","result","roundedResult","round","getDataVisibility","_adjustColorSchemeCssClass","_adjustDatasetColors","_adjustLegendColors","_adjustScalesRColors","_adjustScalesXYColors","_adjustPluginColors","getCssClasses","multipleColorsPerDataset","DATASET","DATA","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColors","_computeDatasetColors","getColor","colorsArray","candidate","hoverBorderColor","datasetLength","ensureColorArray","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","_computePointHoverColor","fill","additionalProperties","stroke","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","colorHexValues","rgbColor","hexToRgb","adjustColor","darker","darkerColor","datalabelColor","_computeDatalabelColor","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","_computeLabelColor","defaultTypeGenerateLabels","defaultGenerateLabels","legendProps","legendLabelOptions","cssWidth","fillStyle","strokeStyle","labelBackdropColor","_computeLabelBackdropColor","gridColor","_computeGridColor","scaleTicksColor","_computeScaleTicksColor","backdropColor","axisLabelColor","_computeAxisLabelColor","_adjustPluginsDatalabelColors","onClick","onHover","onLeave","native","relevantItem","_selectRelevantItem","itemIndex","clickObject","yIndex","chartDatasets","_restoreBackgroundColor","_setHoverBackgroundColor","legendItem","defaultTypeLegendClick","defaultLegendClick","datasetType","_updateHoverStyle","backgroundColorBackup","mode","updateHoverStyle","handleResize","onResize","_adjustBubbleSizes","_adjustGridMaxMin","maxMinR","_computeMaxMinValue","exact","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","minBubbleSize","right","floor","boundRange","space","sums","calculateSum","stacked","extractValue","j","adjust","maxBoundary","minBoundary","_calculateBoundary","ceil","valuePerPixel","paddingValue","roundingFunctionPositive","roundingFunctionNegative","roundingFunction","changeValueSign","_calculateBoundaryPositive","p","log","LN10","rAxis","minSpaceBetweenXTicks","minSpaceBetweenYTicks","maxXTicks","maxYTicks","yBoundaries","_computeYBoundaries","yBoundary","yBoundaryDiffType","_adjustAxisMaxMin","xBoundary","_computeXBoundaryPointElement","_computeBoundaryPointElement","boundary","keys","Object","Number","isFinite","_computeYBoundaryPointElement","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxRangeBetweenTwoTicks","maxTicksLimit","suggestedMax","suggestedMin","AbstractLayout","Tile","ready","findParent","hasClass","resize","animationTriggered","segmentSelectorForAnimation","fullR","fulfillment","startValue","total","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","animate","tabIndex","description","s","pathString","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","paddingBetweenLabel","dataAnalyzeResult","barHeight","barAreaWidth","centerX","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","_analyzeData","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","_renderBarsNormalized","_renderBarsAccordingToValues","barCount","startPointX","delta","minLastWidth","secondLastWidth","barLabel","widthBottom","yCoord","renderPolyOptions","xStart","yStart","rect","_renderPolygon","_renderLabel","_renderBarLabel","labelLineWidth","_renderLabelSeparatorLine","_renderConversionRate","_calcConversionRate","secondLabel","barIndexFromTop","labelOffset","labelIndex","_dynamicCssClass","desc","_renderWireLabels","$text","labelPositionFunc","labelWidth","labelHeight","mouseIn","mouseOut","barWidth","conversionRate","ctrlY","points","_calcPolygonPoints","$poly","expandFunc","expand","fxPos","xOffsetTop","xOffsetBottom","widthPerN","valueBefore","valueGroups","valueGroup","shrink","small","RoundingMode","scaleWeight","my","parts","numSegmentsPerPart","segmentWidth","widthOfSegmentWithGap","$filledParts","$pointer","speedo","greenAreaPosition","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","ONE_THOUSAND","TEN_THOUSAND","ONE_MILLION","ARC_MIN","ARC_MAX","_staticBlock","_defineProperty","numTotalSegments","numTotalGaps","ARC_RANGE","SEGMENT_GAP","valuePercentage","_getValuePercentage","segmentToPointAt","_getSegmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","off","_limitValue","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","to","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","_renderSegment","colorClass","_pathSegment","_getColorForPart","segPos","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","millions","HALF_UP","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","maxD","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","d12","d13","d23","distR","_next","cancel","_end","_iteration","r1","r2","r3","d","minX","maxX","minY","maxY","stepX","stepY","a1","a2","a3","a12","a13","a23","a123","testX","testY","t1","t2","t3","aTotal","error","_error","VennCircle","VennCircleHelper","centerY","numberOfCircles","readyToDraw","wasCircle","vennCircleHelper","async3Calculator","vennNumber1","vennReal1","vennNumber2","vennReal2","vennNumber3","vennReal3","$v1","$v2","$v3","venn","_createCircle","animationDurationRender","draw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","v1","calcR","setLegend","addLabel","v2","real","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","findBalance3","animated","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","DateFormat","dates","formats","_getFormats","parse","Date","getTime","hasText","dateFormat","parseJsonDate","timestamp","Error","amount","unit","date","shiftTime","shift","diff","compareDays","compareMonths","getFullYear","startOf","weekday","setMilliseconds","setSeconds","setMinutes","setHours","firstDayOfWeek","trunc","setDate","setMonth","getMonth","endOf","getDate","_getNumberOfDays","endOfQuarterMonth","datetime","dateFormatPatternDefault","timeFormatPatternDefault","millisecond","second","minute","hour","day","week","month","quarter","year","isLeapYear","FormField","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeChart","_removeField","_linkWithLabel","$element","FormFieldAdapter","ChartFieldAdapter","ObjectFactory","self","registerNamespace","addObjectFactories","DateColumn","Icon","icons","NumberColumn","scrollbars","TableControl","TableMatrix","ChartTableControlLayout","ChartTableUserFilter","oldChartType","chartColorScheme","dateGroup","$chartSelect","$axisSelectContainer","$xAxisSelect","$yAxisSelect","$dataSelect","_chartTypeMap","_aggregationMap","_chartGroup1Map","_chartGroup2Map","_tableUpdatedHandler","_tableColumnStructureChangedHandler","_chartValueClickedHandler","_filterRemovedListener","_tableUpdatedTimeOutId","iconId","CHART","NumberGroup","COUNT","_onTableUpdated","_onTableColumnStructureChanged","DATE_GROUP_FLAG","MAX_AXIS_COUNT","table","_destroy","_computeEnabled","inheritAccessibility","parentEnabled","_hasColumns","$contentContainer","denseClass","_createLayout","_selectChartType","setVisible","oneAnimationEnd","contentRendered","animateAVCSD","_drawChart","_renderChartGroup1","_renderChartGroup","_renderChartGroup2","groupId","chartGroup","siblings","selectOne","dateGroupIndex","_renderChartAggregation","_getAggregationCssClass","SUM","AVG","_renderChartSelect","icon","iconDesc","one","$iconContainer","enabledComputed","_onClickChartType","_renderChartSelectContainer","supportedChartTypes","_getSupportedChartTypes","DIAGRAM_BARS_VERTICAL","DIAGRAM_BARS_HORIZONTAL","DIAGRAM_LINE","DIAGRAM_PIE","DIAGRAM_SCATTER","$target","currentTarget","_onClickChartGroup","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_onClickAggregation","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_setChartGroup1","_setChartGroup2","propertyName","_changeProperty","prop","charAt","toUpperCase","_columns","columns","_axisCount","columnCount","tmpColumn","_plainAxisText","headerHtmlEnabled","plainText","replace","_renderContent","_installScrollbars","_addListeners","_renderAxisSelectorsContainer","_renderAxisSelectors","_initializeSelection","_renderChartParts","matrix","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","_axisContentForColumn","makeDiv","setEnabled","appendCssClass","installForEllipsis","clone","countDesc","all","c2","column2","fakeNumberLabelCol2","columnText","headerTooltipText","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","_hideChart","cube","_calculateValues","iconClasses","_computeData","_adjustFont","_computeCheckedItems","deterministicKeys","_getDatasetLabel","tableData","addData","addAxis","axis2","isMatrixValid","calculate","_getXAxis","_getYAxis","segments","_computeBubbleData","keyX","_handleIconLabel","getValue","deterministicKey","keyToDeterministicKey","keyY","cubeValues","isIcon","parseIconId","isFontIcon","split","iconCharacter","_adjustLabels","parseInt","formatted","_adjustClickable","_adjustBubble","_adjustPie","_adjustScales","_isChartClickable","clamp","margin","cssMarginTop","cssMarginBottom","tableFilter","getFilter","TYPE","filters","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","_removeContent","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","uninstall","_uninstallScrollbars","removeContent","renderContent","TableControlAdapter","ChartTableControlAdapter","_addRemoteProperties","BaseDoEntity","typeName","__decorate","control","TableUserFilter","columnIdX","columnIdY","filterType","createLabel","createFilterAddedEventData","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","accept","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","FormFieldTile","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_setColorScheme","_updateChartColorScheme","tileWidget","_setTileWidget","FormFieldTileAdapter","ChartFieldTileAdapter"],"sourceRoot":""}