@eclipse-scout/chart 23.1.1 → 23.1.4
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.
- package/dist/d.ts/chart/Chart.d.ts +2 -1
- package/dist/d.ts/chart/Chart.d.ts.map +1 -1
- package/dist/eclipse-scout-chart-dee874ed46aaa3d247de.min.js +3 -0
- package/dist/eclipse-scout-chart-dee874ed46aaa3d247de.min.js.map +1 -0
- package/dist/eclipse-scout-chart-theme.css.map +1 -1
- package/dist/eclipse-scout-chart.esm-558d382efe651ca2215b.min.js +3 -0
- package/dist/eclipse-scout-chart.esm-558d382efe651ca2215b.min.js.map +1 -0
- package/dist/eclipse-scout-chart.esm.js +16 -3
- package/dist/eclipse-scout-chart.esm.js.map +1 -1
- package/dist/eclipse-scout-chart.js +16 -3
- package/dist/eclipse-scout-chart.js.map +1 -1
- package/dist/file-list +4 -4
- package/package.json +3 -3
- package/src/chart/Chart.ts +10 -1
- package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js +0 -3
- package/dist/eclipse-scout-chart-fae6f958a044232e659c.min.js.map +0 -1
- package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js +0 -3
- package/dist/eclipse-scout-chart.esm-2119cfea86a9d6f34a35.min.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eclipse-scout-chart.esm.js","mappings":"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","sources":["webpack:///./src/chart/AbstractChartRenderer.ts","webpack:///./src/chart/AbstractSvgChartRenderer.ts","webpack:///./src/chart/Chart.ts","webpack:///./src/chart/ChartAdapter.ts","webpack:///./src/chart/ChartJsRenderer.ts","webpack:///./src/chart/ChartLayout.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/form/fields/chartfield/ChartField.ts","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.ts","webpack:///./src/index.ts","webpack:///./src/table/controls/ChartTableControl.ts","webpack:///./src/table/controls/ChartTableControlAdapter.ts","webpack:///./src/table/controls/ChartTableControlLayout.ts","webpack:///./src/table/controls/ChartTableUserFilter.ts","webpack:///./src/tile/ChartFieldTile.ts","webpack:///./src/tile/ChartFieldTileAdapter.ts","webpack:///external commonjs \"jquery\"","webpack:///external module \"@eclipse-scout/core\"","webpack:///external module \"chart.js\"","webpack:///external module \"chart.js/auto\"","webpack:///external module \"chartjs-plugin-datalabels\"","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, 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\nimport {Chart} from '../index';\nimport {Session} from '@eclipse-scout/core';\nimport {UpdateChartOptions} from './Chart';\n\nexport class AbstractChartRenderer {\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 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 && !chartValueGroup.colorHexValue && !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 this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\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 this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n this._updateData();\n }\n\n protected _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable(): boolean {\n return false;\n }\n\n refresh() {\n if (this.rendered) {\n this.remove(false);\n }\n this.render(false);\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 this.animationDuration = requestAnimation && this.chart.config.options.animation.duration;\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\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","/*\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 {ObjectFactory, 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-' + ObjectFactory.get().createUniqueId();\n this.maskId = 'Mask-' + ObjectFactory.get().createUniqueId();\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 }\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 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-' + ObjectFactory.get().createUniqueId();\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, 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 {AbstractChartRenderer, ChartEventMap, ChartJsRenderer, ChartLayout, ChartModel, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {arrays, ColorScheme, colorSchemes, EnumObject, HtmlComponent, InitModelOf, objects, Widget} from '@eclipse-scout/core';\nimport {GreenAreaPosition} from './SpeedoChartRenderer';\nimport {ChartConfiguration, LinearScaleOptions, RadialLinearScaleOptions} from 'chart.js';\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 }\n\n protected override _render() {\n this.$container = this.$parent.appendDiv('chart');\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 this._updateChartOptsWhileNotAttached.splice(0).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 _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 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 }\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;\n cssClass?: string;\n};\n\nexport type ChartConfig = Partial<Omit<ChartConfiguration, 'type'>> & {\n type: ChartType;\n options?: {\n autoColor?: boolean;\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?: LinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\n y?: LinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\n yDiffType?: LinearScaleOptions;\n r?: RadialLinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\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 };\n };\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\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 {AbstractChartRenderer, Chart} from '../index';\nimport {\n ActiveElement, ArcElement, BarElement, BubbleDataPoint, CartesianScaleOptions, Chart as ChartJs, ChartArea, ChartConfiguration, ChartDataset, ChartEvent, ChartType as ChartJsType, Color, DefaultDataPoint, FontSpec, LegendElement,\n LegendItem, LegendOptions, LinearScaleOptions, PointElement, PointHoverOptions, PointOptions, PointProps, RadialLinearScaleOptions, Scale, ScatterDataPoint, TooltipCallbacks, TooltipItem, TooltipLabelStyle, TooltipModel, TooltipOptions\n} from 'chart.js';\nimport 'chart.js/auto'; // Import from auto to register charts\nimport {arrays, colorSchemes, graphics, numbers, objects, scout, strings, styles, Tooltip, tooltips} from '@eclipse-scout/core';\nimport ChartDataLabels, {Context} from 'chartjs-plugin-datalabels';\nimport $ from 'jquery';\nimport {ChartAxis, ChartConfig, ChartData, ChartType, ClickObject, NumberFormatter} from './Chart';\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});\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._formatLabel.bind(this);\n this._xLabelFormatter = this._formatXLabel.bind(this);\n this._yLabelFormatter = this._formatYLabel.bind(this);\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 }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.font.family = this.$canvas.css('font-family');\n chartJsGlobalsInitialized = true;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config, true);\n }\n\n protected _renderChart(config: ChartConfig, animated: boolean) {\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 = animated ? this.animationDuration : 0;\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);\n this.chartJs.update();\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.chartJs.update();\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n override isDataUpdatable(): boolean {\n return true;\n }\n\n override refresh() {\n if (this.chartJs) {\n this.chartJs.update();\n } else {\n super.refresh();\n }\n }\n\n protected override _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.chartJs.update();\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._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 _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, ' ' + ChartJsRenderer.ARROW_UP_DOWN + ' ');\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.isPlainObject(labelValue) ? labelValue : '';\n }\n if (objects.isFunction(tooltipColor)) {\n labelColor = tooltipColor(tooltipItem);\n labelColor = objects.isPlainObject(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._formatLabel(dataset.data[tooltipItem.dataIndex].x)),\n y: strings.encode(this._formatLabel(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 = 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 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 origin = graphics.offsetBounds(this.$canvas);\n origin.x += tooltip.caretX + positionAndOffset.offsetX;\n origin.y += tooltip.caretY + positionAndOffset.offsetY;\n origin.height = positionAndOffset.height;\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 origin: origin\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.isPlainObject(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 < 0 ? 'left' : 'right';\n }\n } else if ((dataset.type || config.type) === Chart.Type.BAR) {\n tooltipPosition = value < 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 RadarPointElement).getProps(['angle']);\n let angle = element.angle;\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 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 drawBorder: false,\n drawTicks: 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 drawBorder: 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 drawBorder: 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 drawBorder: false,\n drawTicks: 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 _formatLabel(label: number | string): string {\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n protected _getNumberFormatter(): NumberFormatter {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options.numberFormatter;\n }\n }\n\n protected _formatXLabel(label: number | string): string {\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n protected _formatYLabel(label: number | string): string {\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\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)) {\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._formatLabel((value as ScatterDataPoint).x), this._formatLabel((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 multipleColorsPerDataset = autoColor && 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 let backgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : colors.backgroundColors[idx]),\n borderColor = (multipleColorsPerDataset ? colors.borderColors : colors.borderColors[idx]),\n hoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : colors.hoverBackgroundColors[idx]),\n hoverBorderColor = (multipleColorsPerDataset ? colors.hoverBorderColors : colors.hoverBorderColors[idx]),\n legendColor = (multipleColorsPerDataset ? colors.legendColors : colors.legendColors[idx]),\n pointHoverBackgroundColor = (multipleColorsPerDataset ? colors.pointHoverColors : colors.legendColors[idx]);\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 let datasetLength = elem.data.length;\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 = (multipleColorsPerDataset ? colors.backgroundColors : arrays.init(datasetLength, colors.backgroundColors[idx])),\n uncheckedHoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : arrays.init(datasetLength, colors.hoverBackgroundColors[idx])),\n\n checkedBackgroundColor = (multipleColorsPerDataset ? colors.checkedBackgroundColors : arrays.init(datasetLength, colors.checkedBackgroundColors[idx])),\n checkedHoverBackgroundColor = (multipleColorsPerDataset ? colors.checkedHoverBackgroundColors : arrays.init(datasetLength, colors.checkedHoverBackgroundColors[idx]));\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 = arrays.init(datasetLength, pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n checkedPointBackgroundColor = arrays.init(datasetLength, borderColor),\n checkedPointHoverBackgroundColor = arrays.init(datasetLength, hoverBorderColor || borderColor);\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 rgbColor = styles.hexToRgb(elem.colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\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 colors.backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n colors.borderColors.push(adjustColor(1, 0));\n colors.hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n colors.hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n\n colors.checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n colors.checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n\n colors.legendColors.push(adjustColor(1, 0));\n\n colors.pointHoverColors.push(adjustColor(1, 0));\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 generateLabels: this._legendLabelGenerator\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 = dataset.legendColor;\n borderColor = this._adjustColorOpacity(dataset.borderColor as string, 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.chartJs.update();\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\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.chartJs.update();\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.chartJs.update();\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);\n }\n\n protected _adjustSize(config: ChartConfig, chartArea: ChartArea) {\n this._adjustBubbleSizes(config, chartArea);\n this._adjustGridMaxMin(config, chartArea);\n }\n\n protected _adjustBubbleSizes(config: ChartConfig, chartArea: ChartArea) {\n if (config.type !== Chart.Type.BUBBLE) {\n return;\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, 'r', 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\n protected _computeMaxMinValue(config: ChartConfig, datasets: ChartDataset[], identifier?: string, exact?: boolean, boundRange?: boolean, padding?: number, space?: number): Boundary {\n if (!datasets) {\n return;\n }\n\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 for (let i = 0; i < datasets.length; i++) {\n for (let j = 0; j < datasets[i].data.length; j++) {\n let value;\n if (identifier) {\n value = datasets[i].data[j][identifier];\n } else {\n value = datasets[i].data[j];\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\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 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) {\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, 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, width);\n this._adjustAxisMaxMin(xAxis, maxXTicks, xBoundary);\n }\n\n protected _computeBoundaryPointElement(config: ChartConfig, identifier: string, space: number): Boundary {\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, 'r', true).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 if (offset) {\n boundary = this._computeMaxMinValue(config, datasets, identifier, labelMap, true);\n } else {\n boundary = this._computeMaxMinValue(config, datasets, identifier, labelMap, true, padding, space);\n }\n if (labelMap) {\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, width: number): Boundary {\n return this._computeBoundaryPointElement(config, 'x', width);\n }\n\n protected _computeYBoundaryPointElement(config: ChartConfig, height: number): Boundary {\n return this._computeBoundaryPointElement(config, 'y', height);\n }\n\n protected _computeYBoundaries(config: ChartConfig, height: number): { 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, height);\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);\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(config, datasetsDiffType);\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.grid.drawBorder = true;\n yAxis.grid.drawTicks = true;\n yAxisDiffType.grid.drawBorder = 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: LinearScaleOptions | RadialLinearScaleOptions, 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) => 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[];\nexport type TooltipItemsGenerator = (tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator) => string;\nexport type TooltipLabelGenerator = (tooltipItem: TooltipItem<any>) => string | string[];\nexport type TooltipLabelValueGenerator = (tooltipItem: TooltipItem<any>) => string | { x: string; y: string };\nexport type TooltipLabelColorGenerator = (tooltipItem: TooltipItem<any>) => TooltipLabelStyle;\nexport type TooltipRenderer = (context: { chart: ChartJs; tooltip: TooltipModel<any> }) => void;\n\nexport type DatasetColors = {\n backgroundColors?: string[];\n borderColors?: string[];\n hoverBackgroundColors?: string[];\n hoverBorderColors?: string[];\n checkedBackgroundColors?: string[];\n checkedHoverBackgroundColors?: string[];\n legendColors?: string[];\n pointHoverColors?: string[];\n datalabelColor?: string;\n};\n\nexport type Boundary = { maxValue: number; minValue: number };\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?: Color;\n pointHoverBackgroundColor?: Color;\n pointRadius?: number;\n legendColor?: Color;\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// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface RadarPointElement<T extends RadarProps = RadarProps, O extends PointOptions = PointOptions> extends PointElement<T, O> {\n}\n\ninterface RadarProps extends PointProps {\n angle: 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 {AbstractLayout} from '@eclipse-scout/core';\nimport {UpdateChartOptions, Chart} 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 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 {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 = this.chart.data.chartValueGroups[0].colorHexValue,\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\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 = this.chart.data.chartValueGroups[1].colorHexValue;\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 {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: chartValueGroups[i].colorHexValue,\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: chartValueGroups[i].colorHexValue,\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 {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 }\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, 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 {AbstractSvgChartRenderer, Chart, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\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, this.data[0].colorHexValue, 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, this.data[1].colorHexValue, 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, this.data[2].colorHexValue, this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\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 this._draw(true, true);\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 *\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","/*\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 {ObjectFactory} from '@eclipse-scout/core';\n\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/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/ChartTableControlEventMap';\nexport * from './table/controls/ChartTableControlModel';\nexport * from './table/controls/ChartTableUserFilter';\nexport * from './table/controls/ChartTableUserFilterModel';\nexport * from './table/controls/ChartTableControlAdapter';\nexport * from './table/controls/ChartTableControlLayout';\n\nimport * as self from './index';\n\nexport default self;\n\nObjectFactory.get().registerNamespace('scout', self);\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 {\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 _filterResetListener: EventListener;\n protected _tableUpdatedTimeOutId: number;\n\n constructor() {\n super();\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 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 protected _setChartGroup1(chartGroup: TableControlChartGroup) {\n this._setChartGroup(1, 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.table.columns.length !== 0;\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._filterResetListener = this.table.on('filterReset', event => {\n if (this.chart) {\n this.chart.setCheckedItems([]);\n }\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 label = 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.textIsIcon) {\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 | string, axis: TableMatrixKeyAxis): string {\n if (axis) {\n if (axis.column instanceof DateColumn) {\n label = label as number + 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 label = axis.format(label as number);\n if (axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n label = icon.iconCharacter;\n }\n }\n }\n return '' + label;\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.table.visibleColumns().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._filterResetListener);\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, 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 {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, 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 {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 _renderColorScheme() {\n super._renderColorScheme();\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.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","module.exports = require(\"jquery\");","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__eclipse_scout_core_ec9759ad__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chart_js_1c0615aa__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chart_js_auto_c730fedb__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chartjs_plugin_datalabels_94b90fda__;","// 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":["AbstractChartRenderer","constructor","chart","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","validate","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","config","options","autoColor","colorHexValue","cssClass","axes","render","requestAnimation","animation","duration","_render","renderCheckedItems","_renderCheckedItems","updateData","isDataUpdatable","_updateData","refresh","remove","afterRemoveFunc","_removeAnimated","_remove","shouldAnimateRemoveOnUpdate","opts","ObjectFactory","strings","styles","$","Chart","AbstractSvgChartRenderer","chartBox","clipId","get","createUniqueId","maskId","suppressLegendBox","$svg","$container","appendSVG","getFirstOpaqueBackgroundColor","height","width","_initChartBox","_useFontSizeBig","addClass","FONT_SIZE_BIG","_useFontSizeMiddle","FONT_SIZE_MIDDLE","_useFontSizeSmall","FONT_SIZE_SMALL","_useFontSizeSmallest","FONT_SIZE_SMALLEST","isAttached","_renderInternal","chartAnimationStopping","children","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","id","$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","$field","ChartJsRenderer","ChartLayout","FulfillmentChartRenderer","SalesfunnelChartRenderer","SpeedoChartRenderer","VennChartRenderer","arrays","colorSchemes","HtmlComponent","objects","Widget","checkedItems","chartRenderer","_updateChartTimeoutId","_updateChartOpts","_updateChartOptsWhileNotAttached","_updatedOnce","_init","model","setConfig","$parent","appendDiv","htmlComp","install","setLayout","_renderProperties","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","DEFAULT_DEBOUNCE_TIMEOUT","_renderOnAttach","splice","extend","setData","setProperty","setCheckedItems","_renderData","onlyUpdateData","defaultConfig","type","Type","PIE","colorScheme","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","datalabels","display","position","Position","RIGHT","ensureColorScheme","equalsRecursive","oldConfigWithNewData","transferLabelMap","source","target","identifier","isEmpty","scales","_setProperty","_renderConfig","removeClass","_updateChartRenderer","ensure","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","_renderEnabled","toggleClass","toggleColorSchemeClasses","enforceRerender","onlyRefresh","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","removing","trigger","_resolveChartRenderer","FULFILLMENT","SPEEDO","SALESFUNNEL","VENN","BAR","BAR_HORIZONTAL","LINE","COMBO_BAR_LINE","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","SCATTER","handleValueClick","clickedItem","originalEvent","checkedItem","TOP","BOTTOM","LEFT","CENTER","ModelAdapter","ChartAdapter","_onWidgetValueClick","event","_send","_onWidgetEvent","ChartJs","graphics","numbers","scout","Tooltip","tooltips","ChartDataLabels","register","defaults","maintainAspectRatio","elements","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","bar","borderSkipped","labels","usePointStyle","boxHeight","overrides","scatter","chartJsGlobalsInitialized","PHI","sqrt","chartJs","onlyIntegers","maxXAxesTicksHeight","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","_labelFormatter","_formatLabel","_xLabelFormatter","_formatXLabel","_yLabelFormatter","_formatYLabel","_xAxisFitter","_fitXAxis","_yAxisFitter","_fitYAxis","_radialChartDatalabelsDisplayHandler","_displayDatalabelsOnRadialChart","_radialChartDatalabelsFormatter","_formatDatalabelsOnRadialChart","_datalabelsFormatter","_formatDatalabels","_datalabelBackgroundColorHandler","_getBackgroundColorOfDataset","_legendLabelGenerator","_generateLegendLabels","resetDatasetAfterHover","_clickHandler","_onClick","_hoverHandler","_onHover","_pointerHoverHandler","_onHoverPointer","legendHoverDatasets","_legendClickHandler","_onLegendClick","_legendHoverHandler","_onLegendHover","_legendPointerHoverHandler","_onLegendHoverPointer","_legendLeaveHandler","_onLegendLeave","_legendPointerLeaveHandler","_onLegendLeavePointer","_resizeHandler","_onResize","_tooltipTitleGenerator","_generateTooltipTitle","_tooltipItemsGenerator","_generateTooltipItems","_tooltipLabelGenerator","_generateTooltipLabel","_tooltipLabelValueGenerator","_generateTooltipLabelValue","_tooltipLabelColorGenerator","_generateTooltipLabelColor","_tooltipRenderer","_renderTooltip","_tooltip","_tooltipTimeoutId","chartDataValid","isOneOf","chartConfigDataValid","$canvas","appendElement","font","family","_adjustConfig","_renderChart","animated","destroy","getContext","_adjustSize","chartArea","update","targetData","sourceData","transferProperty","property","setToUndefined","src","undefined","min","targetLength","sourceLength","findDataset","datasetId","findDatasetIndex","findIndex","every","isNullOrUndefined","idx","targetDataset","sourceDataset","_adjustDatasetBorderWidths","deleted","sort","a","b","yDiffType","r","axis","ticks","stepSize","_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","_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","callbacks","title","items","labelValue","labelColor","external","tooltipItems","tooltipItem","xAxis","yAxis","axisLabels","_getAxisLabels","xTickLabel","callback","_createTooltipAttribute","encode","yTickLabel","reformatLabels","xAxisLabel","yAxisLabel","_resolveAxisLabel","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","axisLabel","defaultLabel","isString","tooltipLabel","tooltipLabelValue","tooltipColor","xAxisValues","yAxisValues","itemsText","_getItemDetails","_createTooltipScatterAttribute","tableHeader","tableFooter","box","isPlainObject","legendColor","_adjustColorOpacity","tooltipLabelColor","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","value","isTitle","color","xValue","yValue","context","isHideTooltip","opacity","dataPoints","isTooltipShowing","_renderTooltipLater","DEFAULT_TOOLTIP_DELAY","firstDataPoint","getDatasetMeta","tooltipOptions","tooltipCallbacks","tooltipTitle","tooltipText","join","positionAndOffset","_computeTooltipPositionAndOffset","origin","offsetBounds","caretX","offsetX","caretY","offsetY","create","objectType","parent","$anchor","htmlEnabled","tooltipPosition","tooltipDirection","reposition","fontFamily","titleFont","maxLabelPrefSize","prefSize","avg","element","getProps","startAngle","endAngle","angle","PI","mid","left","offset","innerRadius","outerRadius","cos","sin","_adjustScalesR","_adjustScalesXY","minSpaceBetweenTicks","beginAtZero","angleLines","pointLabels","size","_adjustXAxis","_adjustYAxis","grid","drawBorder","drawTicks","afterCalculateLabelRotation","afterFit","_adjustPluginsDatalabels","formatter","_updatingDatalabels","onProgress","onComplete","updateDatalabels","metas","getSortedVisibleDatasetMetas","activeElements","getActiveElements","inactiveElements","meta","activeIndex","activeElement","_actives","afterEvent","updateDatalabelsAndDefaultCallback","defaultCallback","borderRadius","anchor","align","handleFormatter","_formatLabelMap","_getNumberFormatter","numberFormatter","_getXLabelMap","_getYLabelMap","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","fontDefaults","ticksDefaults","scale","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","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColors","_computeDatasetColors","hoverBorderColor","datasetLength","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","_computePointHoverColor","fill","additionalProperties","stroke","rgbColor","hexToRgb","adjustColor","darker","darkerColor","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","datalabelColor","_computeDatalabelColor","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","_computeLabelColor","generateLabels","defaultTypeGenerateLabels","defaultGenerateLabels","legendProps","legendLabelOptions","boxWidth","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","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","bubble","minBubbleSize","right","floor","exact","boundRange","space","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","_computeYBoundaryPointElement","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxRangeBetweenTwoTicks","maxTicksLimit","suggestedMax","suggestedMin","AbstractLayout","layout","ready","animationTriggered","segmentSelectorForAnimation","fulfillment","startValue","total","fullR","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","on","animate","tabIndex","s","pathString","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","paddingBetweenLabel","dataAnalyzeResult","_analyzeData","barHeight","barAreaWidth","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","centerX","_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","speedo","greenAreaPosition","scaleWeight","my","parts","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","numSegmentsPerPart","$filledParts","numTotalSegments","numTotalGaps","segmentWidth","ARC_RANGE","SEGMENT_GAP","widthOfSegmentWithGap","valuePercentage","_getValuePercentage","segmentToPointAt","_getSegmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","_limitValue","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","ARC_MIN","to","$pointer","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","_renderSegment","colorClass","_pathSegment","_getColorForPart","segPos","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","TEN_THOUSAND","ONE_MILLION","ONE_THOUSAND","millions","HALF_UP","ARC_MAX","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","d12","d13","d23","maxD","distR","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","_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","venn","numberOfCircles","centerY","vennCircleHelper","$v1","_createCircle","vennNumber1","vennReal1","$v2","vennNumber2","vennReal2","$v3","vennNumber3","vennReal3","draw","readyToDraw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","v1","calcR","setLegend","addLabel","v2","real","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","async3Calculator","findBalance3","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","hasClass","wasCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","FormField","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeChart","_removeField","FormFieldAdapter","ChartFieldAdapter","self","registerNamespace","DateColumn","Icon","icons","NumberColumn","scrollbars","TableControl","TableMatrix","ChartTableControlLayout","ChartTableUserFilter","ChartTableControl","chartAggregation","modifier","NumberGroup","COUNT","chartType","oldChartType","chartColorScheme","$chartSelect","$xAxisSelect","$yAxisSelect","$dataSelect","dateGroup","_tableUpdatedHandler","_onTableUpdated","_tableColumnStructureChangedHandler","_onTableColumnStructureChanged","_chartValueClickedHandler","_onChartValueClick","table","_destroy","off","_computeEnabled","inheritAccessibility","parentEnabled","_hasColumns","selected","$contentContainer","denseClass","_createLayout","_selectChartType","setVisible","oneAnimationEnd","contentRendered","animateAVCSD","_drawChart","_chartTypeMap","$element","_renderChartGroup1","_renderChartGroup","_renderChartGroup2","groupId","chartGroup","siblings","selectOne","dateGroupIndex","DATE_GROUP_FLAG","_renderChartAggregation","_aggregationMap","_getAggregationCssClass","SUM","AVG","_renderChartSelect","iconId","icon","iconDesc","one","$iconContainer","enabledComputed","_onClickChartType","_renderChartSelectContainer","supportedChartTypes","_getSupportedChartTypes","DIAGRAM_BARS_VERTICAL","DIAGRAM_BARS_HORIZONTAL","DIAGRAM_LINE","DIAGRAM_PIE","DIAGRAM_SCATTER","$target","currentTarget","setChartType","_onClickChartGroup","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_onClickAggregation","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_setChartGroup1","_setChartGroup2","propertyName","_changeProperty","prop","charAt","toUpperCase","columns","_axisCount","columnCount","tmpColumn","_plainAxisText","headerHtmlEnabled","plainText","replace","_renderContent","_installScrollbars","_filterResetListener","_addListeners","_renderAxisSelectorsContainer","_renderAxisSelectors","_initializeSelection","_renderChartParts","$axisSelectContainer","_chartGroup1Map","_chartGroup2Map","matrix","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","MAX_AXIS_COUNT","_axisContentForColumn","makeDiv","setEnabled","chartGroup1","chartGroup2","appendCssClass","installForEllipsis","clone","countDesc","all","c2","column2","fakeNumberLabelCol2","columnText","hasText","headerTooltipText","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","eq","_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","textIsIcon","parseIconId","isFontIcon","split","iconCharacter","_adjustLabels","parseInt","_adjustClickable","_adjustBubble","_adjustPie","_adjustScales","_isChartClickable","clamp","margin","cssMarginTop","cssMarginBottom","tableFilter","getFilter","TYPE","filters","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","visibleColumns","_removeContent","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","uninstall","_uninstallScrollbars","_tableUpdatedTimeOutId","removeContent","renderContent","TableControlAdapter","ChartTableControlAdapter","_addRemoteProperties","control","TableUserFilter","filterType","columnIdX","columnIdY","createLabel","createFilterAddedEventData","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","accept","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","FormFieldTile","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_updateChartColorScheme","tileWidget","_setTileWidget","FormFieldTileAdapter","ChartFieldTileAdapter"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"eclipse-scout-chart.esm.js","mappings":"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","sources":["webpack:///./src/chart/AbstractChartRenderer.ts","webpack:///./src/chart/AbstractSvgChartRenderer.ts","webpack:///./src/chart/Chart.ts","webpack:///./src/chart/ChartAdapter.ts","webpack:///./src/chart/ChartJsRenderer.ts","webpack:///./src/chart/ChartLayout.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/form/fields/chartfield/ChartField.ts","webpack:///./src/form/fields/chartfield/ChartFieldAdapter.ts","webpack:///./src/index.ts","webpack:///./src/table/controls/ChartTableControl.ts","webpack:///./src/table/controls/ChartTableControlAdapter.ts","webpack:///./src/table/controls/ChartTableControlLayout.ts","webpack:///./src/table/controls/ChartTableUserFilter.ts","webpack:///./src/tile/ChartFieldTile.ts","webpack:///./src/tile/ChartFieldTileAdapter.ts","webpack:///external commonjs \"jquery\"","webpack:///external module \"@eclipse-scout/core\"","webpack:///external module \"chart.js\"","webpack:///external module \"chart.js/auto\"","webpack:///external module \"chartjs-plugin-datalabels\"","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, 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\nimport {Chart} from '../index';\nimport {Session} from '@eclipse-scout/core';\nimport {UpdateChartOptions} from './Chart';\n\nexport class AbstractChartRenderer {\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 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 && !chartValueGroup.colorHexValue && !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 this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.chart.rendered) {\n return;\n }\n this.rendering = true;\n this._render();\n this.rendering = false;\n this.rendered = true;\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 this.animationDuration = requestAnimation ? this.chart.config.options.animation.duration : 0;\n if (!this.validate() || !this.isDataUpdatable()) {\n return;\n }\n this._updateData();\n }\n\n protected _updateData() {\n // Override in subclasses\n }\n\n isDataUpdatable(): boolean {\n return false;\n }\n\n refresh() {\n if (this.rendered) {\n this.remove(false);\n }\n this.render(false);\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 this.animationDuration = requestAnimation && this.chart.config.options.animation.duration;\n if (this.animationDuration && this.rendered) {\n this._removeAnimated(afterRemoveFunc);\n } else {\n this._remove(afterRemoveFunc);\n }\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","/*\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 {ObjectFactory, 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-' + ObjectFactory.get().createUniqueId();\n this.maskId = 'Mask-' + ObjectFactory.get().createUniqueId();\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 }\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 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-' + ObjectFactory.get().createUniqueId();\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, 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 {AbstractChartRenderer, ChartEventMap, ChartJsRenderer, ChartLayout, ChartModel, FulfillmentChartRenderer, SalesfunnelChartRenderer, SpeedoChartRenderer, VennChartRenderer} from '../index';\nimport {arrays, ColorScheme, colorSchemes, EnumObject, HtmlComponent, InitModelOf, objects, Widget} from '@eclipse-scout/core';\nimport {GreenAreaPosition} from './SpeedoChartRenderer';\nimport {ChartConfiguration, LinearScaleOptions, RadialLinearScaleOptions} 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\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 this._updateChartOptsWhileNotAttached.splice(0).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 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 }\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;\n cssClass?: string;\n};\n\nexport type ChartConfig = Partial<Omit<ChartConfiguration, 'type'>> & {\n type: ChartType;\n options?: {\n autoColor?: boolean;\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?: LinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\n y?: LinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\n yDiffType?: LinearScaleOptions;\n r?: RadialLinearScaleOptions & {\n minSpaceBetweenTicks?: number;\n };\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 };\n };\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\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 {AbstractChartRenderer, Chart} from '../index';\nimport {\n ActiveElement, ArcElement, BarElement, BubbleDataPoint, CartesianScaleOptions, Chart as ChartJs, ChartArea, ChartConfiguration, ChartDataset, ChartEvent, ChartType as ChartJsType, Color, DefaultDataPoint, FontSpec, LegendElement,\n LegendItem, LegendOptions, LinearScaleOptions, PointElement, PointHoverOptions, PointOptions, PointProps, RadialLinearScaleOptions, Scale, ScatterDataPoint, TooltipCallbacks, TooltipItem, TooltipLabelStyle, TooltipModel, TooltipOptions\n} from 'chart.js';\nimport 'chart.js/auto'; // Import from auto to register charts\nimport {arrays, colorSchemes, graphics, numbers, objects, scout, strings, styles, Tooltip, tooltips} from '@eclipse-scout/core';\nimport ChartDataLabels, {Context} from 'chartjs-plugin-datalabels';\nimport $ from 'jquery';\nimport {ChartAxis, ChartConfig, ChartData, ChartType, ClickObject, NumberFormatter} from './Chart';\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});\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._formatLabel.bind(this);\n this._xLabelFormatter = this._formatXLabel.bind(this);\n this._yLabelFormatter = this._formatYLabel.bind(this);\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 }\n this.firstOpaqueBackgroundColor = styles.getFirstOpaqueBackgroundColor(this.$canvas);\n if (!chartJsGlobalsInitialized) {\n ChartJs.defaults.font.family = this.$canvas.css('font-family');\n chartJsGlobalsInitialized = true;\n }\n let config = $.extend(true, {}, this.chart.config);\n this._adjustConfig(config);\n this._renderChart(config, true);\n }\n\n protected _renderChart(config: ChartConfig, animated: boolean) {\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 = animated ? this.animationDuration : 0;\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);\n this.chartJs.update();\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.chartJs.update();\n\n this._adjustSize(this.chartJs.config, this.chartJs.chartArea);\n this.chartJs.update();\n }\n\n override isDataUpdatable(): boolean {\n return true;\n }\n\n override refresh() {\n if (this.chartJs) {\n this.chartJs.update();\n } else {\n super.refresh();\n }\n }\n\n protected override _renderCheckedItems() {\n if (this.chartJs && this._checkItems(this.chartJs.config)) {\n this.chartJs.update();\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._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 _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, ' ' + ChartJsRenderer.ARROW_UP_DOWN + ' ');\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.isPlainObject(labelValue) ? labelValue : '';\n }\n if (objects.isFunction(tooltipColor)) {\n labelColor = tooltipColor(tooltipItem);\n labelColor = objects.isPlainObject(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._formatLabel(dataset.data[tooltipItem.dataIndex].x)),\n y: strings.encode(this._formatLabel(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 = 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 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 origin = graphics.offsetBounds(this.$canvas);\n origin.x += tooltip.caretX + positionAndOffset.offsetX;\n origin.y += tooltip.caretY + positionAndOffset.offsetY;\n origin.height = positionAndOffset.height;\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 origin: origin\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.isPlainObject(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 < 0 ? 'left' : 'right';\n }\n } else if ((dataset.type || config.type) === Chart.Type.BAR) {\n tooltipPosition = value < 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 RadarPointElement).getProps(['angle']);\n let angle = element.angle;\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 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 drawBorder: false,\n drawTicks: 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 drawBorder: 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 drawBorder: 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 drawBorder: false,\n drawTicks: 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 _formatLabel(label: number | string): string {\n return this._formatLabelMap(label, null, this._getNumberFormatter());\n }\n\n protected _getNumberFormatter(): NumberFormatter {\n if (this.chartJs && this.chartJs.config && this.chartJs.config.options) {\n return this.chartJs.config.options.numberFormatter;\n }\n }\n\n protected _formatXLabel(label: number | string): string {\n return this._formatLabelMap(label, this._getXLabelMap(), this._getNumberFormatter());\n }\n\n protected _formatYLabel(label: number | string): string {\n return this._formatLabelMap(label, this._getYLabelMap(), this._getNumberFormatter());\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)) {\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._formatLabel((value as ScatterDataPoint).x), this._formatLabel((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 multipleColorsPerDataset = autoColor && 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 let backgroundColor = (multipleColorsPerDataset ? colors.backgroundColors : colors.backgroundColors[idx]),\n borderColor = (multipleColorsPerDataset ? colors.borderColors : colors.borderColors[idx]),\n hoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : colors.hoverBackgroundColors[idx]),\n hoverBorderColor = (multipleColorsPerDataset ? colors.hoverBorderColors : colors.hoverBorderColors[idx]),\n legendColor = (multipleColorsPerDataset ? colors.legendColors : colors.legendColors[idx]),\n pointHoverBackgroundColor = (multipleColorsPerDataset ? colors.pointHoverColors : colors.legendColors[idx]);\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 let datasetLength = elem.data.length;\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 = (multipleColorsPerDataset ? colors.backgroundColors : arrays.init(datasetLength, colors.backgroundColors[idx])),\n uncheckedHoverBackgroundColor = (multipleColorsPerDataset ? colors.hoverBackgroundColors : arrays.init(datasetLength, colors.hoverBackgroundColors[idx])),\n\n checkedBackgroundColor = (multipleColorsPerDataset ? colors.checkedBackgroundColors : arrays.init(datasetLength, colors.checkedBackgroundColors[idx])),\n checkedHoverBackgroundColor = (multipleColorsPerDataset ? colors.checkedHoverBackgroundColors : arrays.init(datasetLength, colors.checkedHoverBackgroundColors[idx]));\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 = arrays.init(datasetLength, pointHoverBackgroundColor),\n uncheckedPointHoverBackgroundColor = arrays.init(datasetLength, pointHoverBackgroundColor),\n checkedPointBackgroundColor = arrays.init(datasetLength, borderColor),\n checkedPointHoverBackgroundColor = arrays.init(datasetLength, hoverBorderColor || borderColor);\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 rgbColor = styles.hexToRgb(elem.colorHexValue),\n adjustColor = (opacity, darker) => this._adjustColorOpacity(styles.darkerColor(rgbColor, darker), opacity);\n\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 colors.backgroundColors.push(adjustColor((checkable || transparent) ? uncheckedBackgroundOpacity : backgroundOpacity, 0));\n colors.borderColors.push(adjustColor(1, 0));\n colors.hoverBackgroundColors.push(adjustColor((checkable || transparent) ? uncheckedHoverBackgroundOpacity : hoverBackgroundOpacity, (checkable || transparent) ? 0 : hoverBackgroundDarker));\n colors.hoverBorderColors.push(adjustColor(1, hoverBorderDarker));\n\n colors.checkedBackgroundColors.push(adjustColor(checkedBackgroundOpacity, checkedBackgroundDarker));\n colors.checkedHoverBackgroundColors.push(adjustColor(checkedHoverBackgroundOpacity, checkedHoverBackgroundDarker));\n\n colors.legendColors.push(adjustColor(1, 0));\n\n colors.pointHoverColors.push(adjustColor(1, 0));\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 generateLabels: this._legendLabelGenerator\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 = dataset.legendColor;\n borderColor = this._adjustColorOpacity(dataset.borderColor as string, 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.chartJs.update();\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\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.chartJs.update();\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.chartJs.update();\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);\n }\n\n protected _adjustSize(config: ChartConfig, chartArea: ChartArea) {\n this._adjustBubbleSizes(config, chartArea);\n this._adjustGridMaxMin(config, chartArea);\n }\n\n protected _adjustBubbleSizes(config: ChartConfig, chartArea: ChartArea) {\n if (config.type !== Chart.Type.BUBBLE) {\n return;\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, 'r', 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\n protected _computeMaxMinValue(config: ChartConfig, datasets: ChartDataset[], identifier?: string, exact?: boolean, boundRange?: boolean, padding?: number, space?: number): Boundary {\n if (!datasets) {\n return;\n }\n\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 for (let i = 0; i < datasets.length; i++) {\n for (let j = 0; j < datasets[i].data.length; j++) {\n let value;\n if (identifier) {\n value = datasets[i].data[j][identifier];\n } else {\n value = datasets[i].data[j];\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\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 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) {\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, 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, width);\n this._adjustAxisMaxMin(xAxis, maxXTicks, xBoundary);\n }\n\n protected _computeBoundaryPointElement(config: ChartConfig, identifier: string, space: number): Boundary {\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, 'r', true).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 if (offset) {\n boundary = this._computeMaxMinValue(config, datasets, identifier, labelMap, true);\n } else {\n boundary = this._computeMaxMinValue(config, datasets, identifier, labelMap, true, padding, space);\n }\n if (labelMap) {\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, width: number): Boundary {\n return this._computeBoundaryPointElement(config, 'x', width);\n }\n\n protected _computeYBoundaryPointElement(config: ChartConfig, height: number): Boundary {\n return this._computeBoundaryPointElement(config, 'y', height);\n }\n\n protected _computeYBoundaries(config: ChartConfig, height: number): { 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, height);\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);\n\n if (datasets.length && datasetsDiffType.length) {\n yBoundaryDiffType = this._computeMaxMinValue(config, datasetsDiffType);\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.grid.drawBorder = true;\n yAxis.grid.drawTicks = true;\n yAxisDiffType.grid.drawBorder = 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: LinearScaleOptions | RadialLinearScaleOptions, 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) => 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[];\nexport type TooltipItemsGenerator = (tooltipItems: TooltipItem<any>[], tooltipLabel: TooltipLabelGenerator, tooltipLabelValue: TooltipLabelValueGenerator, tooltipColor: TooltipLabelColorGenerator) => string;\nexport type TooltipLabelGenerator = (tooltipItem: TooltipItem<any>) => string | string[];\nexport type TooltipLabelValueGenerator = (tooltipItem: TooltipItem<any>) => string | { x: string; y: string };\nexport type TooltipLabelColorGenerator = (tooltipItem: TooltipItem<any>) => TooltipLabelStyle;\nexport type TooltipRenderer = (context: { chart: ChartJs; tooltip: TooltipModel<any> }) => void;\n\nexport type DatasetColors = {\n backgroundColors?: string[];\n borderColors?: string[];\n hoverBackgroundColors?: string[];\n hoverBorderColors?: string[];\n checkedBackgroundColors?: string[];\n checkedHoverBackgroundColors?: string[];\n legendColors?: string[];\n pointHoverColors?: string[];\n datalabelColor?: string;\n};\n\nexport type Boundary = { maxValue: number; minValue: number };\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?: Color;\n pointHoverBackgroundColor?: Color;\n pointRadius?: number;\n legendColor?: Color;\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// eslint-disable-next-line @typescript-eslint/no-empty-interface\ninterface RadarPointElement<T extends RadarProps = RadarProps, O extends PointOptions = PointOptions> extends PointElement<T, O> {\n}\n\ninterface RadarProps extends PointProps {\n angle: 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 {AbstractLayout} from '@eclipse-scout/core';\nimport {UpdateChartOptions, Chart} 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 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 {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 = this.chart.data.chartValueGroups[0].colorHexValue,\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\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 = this.chart.data.chartValueGroups[1].colorHexValue;\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 {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: chartValueGroups[i].colorHexValue,\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: chartValueGroups[i].colorHexValue,\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 {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 }\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, 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 {AbstractSvgChartRenderer, Chart, VennAsync3Calculator, VennCircle, VennCircleHelper} from '../index';\nimport $ from 'jquery';\nimport {ChartValueGroup} from './Chart';\nimport {LegendPositions} from './AbstractSvgChartRenderer';\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, this.data[0].colorHexValue, 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, this.data[1].colorHexValue, 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, this.data[2].colorHexValue, this.data[2].cssClass);\n this.vennNumber3 = new VennCircle(this.$v3);\n this.vennReal3 = new VennCircle(this.$v3);\n }\n\n // Final callback\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 this._draw(true, true);\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 *\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","/*\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 {ObjectFactory} from '@eclipse-scout/core';\n\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/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/ChartTableControlEventMap';\nexport * from './table/controls/ChartTableControlModel';\nexport * from './table/controls/ChartTableUserFilter';\nexport * from './table/controls/ChartTableUserFilterModel';\nexport * from './table/controls/ChartTableControlAdapter';\nexport * from './table/controls/ChartTableControlLayout';\n\nimport * as self from './index';\n\nexport default self;\n\nObjectFactory.get().registerNamespace('scout', self);\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 {\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 _filterResetListener: EventListener;\n protected _tableUpdatedTimeOutId: number;\n\n constructor() {\n super();\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 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 protected _setChartGroup1(chartGroup: TableControlChartGroup) {\n this._setChartGroup(1, 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.table.columns.length !== 0;\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._filterResetListener = this.table.on('filterReset', event => {\n if (this.chart) {\n this.chart.setCheckedItems([]);\n }\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 label = 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.textIsIcon) {\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 | string, axis: TableMatrixKeyAxis): string {\n if (axis) {\n if (axis.column instanceof DateColumn) {\n label = label as number + 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 label = axis.format(label as number);\n if (axis.textIsIcon) {\n let icon = icons.parseIconId(label);\n if (icon && icon.isFontIcon()) {\n label = icon.iconCharacter;\n }\n }\n }\n return '' + label;\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.table.visibleColumns().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._filterResetListener);\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, 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 {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, 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 {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 _renderColorScheme() {\n super._renderColorScheme();\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.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","module.exports = require(\"jquery\");","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__eclipse_scout_core_ec9759ad__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chart_js_1c0615aa__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chart_js_auto_c730fedb__;","var x = y => { var x = {}; __webpack_require__.d(x, y); return x; }\nvar y = x => () => x\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_chartjs_plugin_datalabels_94b90fda__;","// 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":["AbstractChartRenderer","constructor","chart","_defineProperty","session","rendering","rendered","animationDuration","firstOpaqueBackgroundColor","validate","_validateChartData","_validate","chartData","data","chartValueGroups","length","i","chartValueGroup","values","config","options","autoColor","colorHexValue","cssClass","axes","render","requestAnimation","animation","duration","_render","renderCheckedItems","_renderCheckedItems","updateData","isDataUpdatable","_updateData","refresh","remove","afterRemoveFunc","_removeAnimated","_remove","shouldAnimateRemoveOnUpdate","opts","ObjectFactory","strings","styles","$","Chart","AbstractSvgChartRenderer","chartBox","clipId","get","createUniqueId","maskId","suppressLegendBox","$svg","$container","appendSVG","getFirstOpaqueBackgroundColor","height","width","_initChartBox","_useFontSizeBig","addClass","FONT_SIZE_BIG","_useFontSizeMiddle","FONT_SIZE_MIDDLE","_useFontSizeSmall","FONT_SIZE_SMALL","_useFontSizeSmallest","FONT_SIZE_SMALLEST","isAttached","_renderInternal","chartAnimationStopping","children","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","id","$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","$field","ChartJsRenderer","ChartLayout","FulfillmentChartRenderer","SalesfunnelChartRenderer","SpeedoChartRenderer","VennChartRenderer","arrays","colorSchemes","HtmlComponent","objects","Widget","checkedItems","chartRenderer","_updateChartTimeoutId","_updateChartOpts","_updateChartOptsWhileNotAttached","_updatedOnce","_init","model","setConfig","_setData","$parent","appendDiv","htmlComp","install","setLayout","_renderProperties","_renderClickable","_renderCheckable","_renderChartType","_renderColorScheme","updateChart","debounce","DEFAULT_DEBOUNCE_TIMEOUT","_renderOnAttach","splice","extend","setData","setProperty","setCheckedItems","_setProperty","_renderData","onlyUpdateData","defaultConfig","type","Type","PIE","colorScheme","ColorSchemeId","DEFAULT","transparent","maxSegments","adjustGridMaxMin","clickable","checkable","datalabels","display","position","Position","RIGHT","ensureColorScheme","equalsRecursive","oldConfigWithNewData","transferLabelMap","source","target","identifier","isEmpty","scales","_renderConfig","removeClass","_updateChartRenderer","ensure","_filterCheckedItems","datasetLengths","datasets","dataset","filteredCheckedItems","filter","item","_renderEnabled","toggleClass","toggleColorSchemeClasses","enforceRerender","onlyRefresh","clearTimeout","updateChartImplFn","updateChartImpl","doDebounce","setTimeout","removing","trigger","_resolveChartRenderer","FULFILLMENT","SPEEDO","SALESFUNNEL","VENN","BAR","BAR_HORIZONTAL","LINE","COMBO_BAR_LINE","DOUGHNUT","POLAR_AREA","RADAR","BUBBLE","SCATTER","handleValueClick","clickedItem","originalEvent","checkedItem","TOP","BOTTOM","LEFT","CENTER","ModelAdapter","ChartAdapter","_onWidgetValueClick","event","_send","_onWidgetEvent","ChartJs","graphics","numbers","scout","Tooltip","tooltips","ChartDataLabels","register","defaults","maintainAspectRatio","elements","borderWidth","point","radius","hitRadius","hoverRadius","hoverBorderWidth","arc","bar","borderSkipped","labels","usePointStyle","boxHeight","overrides","scatter","chartJsGlobalsInitialized","PHI","sqrt","chartJs","onlyIntegers","maxXAxesTicksHeight","numSupportedColors","colorSchemeCssClass","minRadialChartDatalabelSpace","_labelFormatter","_formatLabel","_xLabelFormatter","_formatXLabel","_yLabelFormatter","_formatYLabel","_xAxisFitter","_fitXAxis","_yAxisFitter","_fitYAxis","_radialChartDatalabelsDisplayHandler","_displayDatalabelsOnRadialChart","_radialChartDatalabelsFormatter","_formatDatalabelsOnRadialChart","_datalabelsFormatter","_formatDatalabels","_datalabelBackgroundColorHandler","_getBackgroundColorOfDataset","_legendLabelGenerator","_generateLegendLabels","resetDatasetAfterHover","_clickHandler","_onClick","_hoverHandler","_onHover","_pointerHoverHandler","_onHoverPointer","legendHoverDatasets","_legendClickHandler","_onLegendClick","_legendHoverHandler","_onLegendHover","_legendPointerHoverHandler","_onLegendHoverPointer","_legendLeaveHandler","_onLegendLeave","_legendPointerLeaveHandler","_onLegendLeavePointer","_resizeHandler","_onResize","_tooltipTitleGenerator","_generateTooltipTitle","_tooltipItemsGenerator","_generateTooltipItems","_tooltipLabelGenerator","_generateTooltipLabel","_tooltipLabelValueGenerator","_generateTooltipLabelValue","_tooltipLabelColorGenerator","_generateTooltipLabelColor","_tooltipRenderer","_renderTooltip","_tooltip","_tooltipTimeoutId","chartDataValid","isOneOf","chartConfigDataValid","$canvas","appendElement","font","family","_adjustConfig","_renderChart","animated","destroy","getContext","_adjustSize","chartArea","update","targetData","sourceData","transferProperty","property","setToUndefined","src","undefined","min","targetLength","sourceLength","findDataset","datasetId","findDatasetIndex","findIndex","every","isNullOrUndefined","idx","targetDataset","sourceDataset","_adjustDatasetBorderWidths","deleted","sort","a","b","yDiffType","r","axis","ticks","stepSize","_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","_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","callbacks","title","items","labelValue","labelColor","external","tooltipItems","tooltipItem","xAxis","yAxis","axisLabels","_getAxisLabels","xTickLabel","callback","_createTooltipAttribute","encode","yTickLabel","reformatLabels","xAxisLabel","yAxisLabel","_resolveAxisLabel","ARROW_LEFT_RIGHT","ARROW_UP_DOWN","axisLabel","defaultLabel","isString","tooltipLabel","tooltipLabelValue","tooltipColor","xAxisValues","yAxisValues","itemsText","_getItemDetails","_createTooltipScatterAttribute","tableHeader","tableFooter","box","isPlainObject","legendColor","_adjustColorOpacity","tooltipLabelColor","defaultTypeTooltipLabelColor","defaultTooltipLabelColor","value","isTitle","color","xValue","yValue","context","isHideTooltip","opacity","dataPoints","isTooltipShowing","_renderTooltipLater","DEFAULT_TOOLTIP_DELAY","firstDataPoint","getDatasetMeta","tooltipOptions","tooltipCallbacks","tooltipTitle","tooltipText","join","positionAndOffset","_computeTooltipPositionAndOffset","origin","offsetBounds","caretX","offsetX","caretY","offsetY","create","objectType","parent","$anchor","htmlEnabled","tooltipPosition","tooltipDirection","reposition","fontFamily","titleFont","maxLabelPrefSize","prefSize","avg","element","getProps","startAngle","endAngle","angle","PI","mid","left","offset","innerRadius","outerRadius","cos","sin","_adjustScalesR","_adjustScalesXY","minSpaceBetweenTicks","beginAtZero","angleLines","pointLabels","size","_adjustXAxis","_adjustYAxis","grid","drawBorder","drawTicks","afterCalculateLabelRotation","afterFit","_adjustPluginsDatalabels","formatter","_updatingDatalabels","onProgress","onComplete","updateDatalabels","metas","getSortedVisibleDatasetMetas","activeElements","getActiveElements","inactiveElements","meta","activeIndex","activeElement","_actives","afterEvent","updateDatalabelsAndDefaultCallback","defaultCallback","borderRadius","anchor","align","handleFormatter","_formatLabelMap","_getNumberFormatter","numberFormatter","_getXLabelMap","_getYLabelMap","_getLabelMap","_formatNumberLabel","abs","abbreviation","abbreviations","locale","decimalFormat","format","sign","labelRotation","maxHeight","fontDefaults","ticksDefaults","scale","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","colors","backgroundColors","borderColors","hoverBackgroundColors","hoverBorderColors","checkedBackgroundColors","checkedHoverBackgroundColors","legendColors","pointHoverColors","_computeDatasetColors","hoverBorderColor","datasetLength","_computeDatasetColorsAutoColor","_computeDatasetColorsChartValueGroups","_computeBorderColor","types","_computeBackgroundColor","_computeHoverBackgroundColor","_computeHoverBorderColor","_computeCheckedBackgroundColor","_computeCheckedHoverBackgroundColor","_computeLegendColor","_computePointHoverColor","fill","additionalProperties","stroke","rgbColor","hexToRgb","adjustColor","darker","darkerColor","backgroundOpacity","hoverBackgroundOpacity","hoverBackgroundDarker","hoverBorderDarker","uncheckedBackgroundOpacity","uncheckedHoverBackgroundOpacity","checkedBackgroundOpacity","checkedBackgroundDarker","checkedHoverBackgroundOpacity","checkedHoverBackgroundDarker","datalabelColor","_computeDatalabelColor","indexOf","_adjustRgbColorOpacity","_adjustHexColorOpacity","rgba","rgb","alpha","red","green","blue","hexColor","_computeLabelColor","generateLabels","defaultTypeGenerateLabels","defaultGenerateLabels","legendProps","legendLabelOptions","boxWidth","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","maxR","maxValue","minR","minValue","bubbleScalingFactor","bubbleRadiusOffset","sizeOfLargestBubble","bubble","minBubbleSize","right","floor","exact","boundRange","space","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","_computeYBoundaryPointElement","datasetsDiffType","yBoundaryRange","yBoundaryRangeDiffType","_adjustYAxisDiffType","yAxisDiffType","drawOnChartArea","yAxisType","yAxisDiffTypeType","yAxisTypeLabel","yAxisDiffTypeTypeLabel","yAxisScaleLabel","yAxisDiffTypeScaleLabel","yAxisID","maxTicks","maxMinValue","maxRangeBetweenTwoTicks","maxTicksLimit","suggestedMax","suggestedMin","AbstractLayout","layout","ready","animationTriggered","segmentSelectorForAnimation","fulfillment","startValue","total","fullR","_renderInnerCircle","_renderPercentage","arcClass","chartGroupCss","nvl","end","lastEnd","that","tweenInFunc","$this","start","pathSegment","pos","$arc","radius2","$transparentCircle","_renderCirclePath","percentage","on","animate","tabIndex","s","pathString","$path","optProperty","tweenOut","promise","done","widthThresholdMedium","widthThresholdSmall","barDeltaPercentage","lastBarAdditionalPercentage","lastBarMinWidthPercentage","salesfunnel","normalized","calcConversionRate","chartConfig","bars","conversionRateWidth","_dynamicConversionRateWidth","paddingBetweenLabel","dataAnalyzeResult","_analyzeData","barHeight","barAreaWidth","maxLengthFirstValueRow","labelCount","maxLengthSecondValueRow","centerX","_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","speedo","greenAreaPosition","scaleWeight","my","parts","NUM_PARTS_GREEN_CENTER","NUM_PARTS_GREEN_EDGE","numSegmentsPerPart","$filledParts","numTotalSegments","numTotalGaps","segmentWidth","ARC_RANGE","SEGMENT_GAP","widthOfSegmentWithGap","valuePercentage","_getValuePercentage","segmentToPointAt","_getSegmentToPointAt","valuePercentageRounded","_getPercentageValueOfSegment","_getPartForValue","_renderCirclePart","_renderPointer","_renderLegend","_limitValue","segmentIndexInPart","part","pointerRange","_calcSegmentPos","pointerPos","from","ARC_MIN","to","$pointer","_pathPointer","tweenIn","val","getAttribute","_updatePointer","_updatePartsFill","_renderSegment","colorClass","_pathSegment","_getColorForPart","segPos","minMaxLegendFontSize","labelYPos","labelMinMaxYPos","minLegendValue","_formatValue","legendValue","maxLegendValue","$minLegend","$maxLegend","TEN_THOUSAND","ONE_MILLION","ONE_THOUSAND","millions","HALF_UP","ARC_MAX","segmentNum","pointerOuterR","pointerInnerR","VennAsync3Calculator","helper","venn1","venn2","venn3","u","w","uv","uw","vw","uvw","d12","d13","d23","maxD","distR","dStep","rStep","alphaStep","alphaBest","dBest","rBest","errorBest","cancelled","_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","venn","numberOfCircles","centerY","vennCircleHelper","$v1","_createCircle","vennNumber1","vennReal1","$v2","vennNumber2","vennReal2","$v3","vennNumber3","vennReal3","draw","readyToDraw","_draw","_calc1","_calc2","_calc3","_cancelAsync3Calculator","v1","calcR","setLegend","addLabel","v2","real","ab","calcD","findBalance2","legendR","v3","c","ac","bc","abc","async3Calculator","findBalance3","showVenn","_updateVenn","_drawLabel","circleIndex","$circle","showReal","_show","legendH","legendV","dx","dy","toElement","relatedTarget","isCircle","hasClass","wasCircle","horizontal","vertical","midX","midY","count","factorMax","changeR","ret","ri","ra","q","FormField","ChartField","_addWidgetProperties","addContainer","addMandatoryIndicator","addStatus","addField","_removeChart","_removeField","FormFieldAdapter","ChartFieldAdapter","self","registerNamespace","DateColumn","Icon","icons","NumberColumn","scrollbars","TableControl","TableMatrix","ChartTableControlLayout","ChartTableUserFilter","ChartTableControl","chartAggregation","modifier","NumberGroup","COUNT","chartType","oldChartType","chartColorScheme","$chartSelect","$xAxisSelect","$yAxisSelect","$dataSelect","dateGroup","_tableUpdatedHandler","_onTableUpdated","_tableColumnStructureChangedHandler","_onTableColumnStructureChanged","_chartValueClickedHandler","_onChartValueClick","table","_destroy","off","_computeEnabled","inheritAccessibility","parentEnabled","_hasColumns","selected","$contentContainer","denseClass","_createLayout","_selectChartType","setVisible","oneAnimationEnd","contentRendered","animateAVCSD","_drawChart","_chartTypeMap","$element","_renderChartGroup1","_renderChartGroup","_renderChartGroup2","groupId","chartGroup","siblings","selectOne","dateGroupIndex","DATE_GROUP_FLAG","_renderChartAggregation","_aggregationMap","_getAggregationCssClass","SUM","AVG","_renderChartSelect","iconId","icon","iconDesc","one","$iconContainer","enabledComputed","_onClickChartType","_renderChartSelectContainer","supportedChartTypes","_getSupportedChartTypes","DIAGRAM_BARS_VERTICAL","DIAGRAM_BARS_HORIZONTAL","DIAGRAM_LINE","DIAGRAM_PIE","DIAGRAM_SCATTER","$target","currentTarget","setChartType","_onClickChartGroup","column","origModifier","isEnabled","isSelected","_nextDateModifier","_setChartGroup","_onClickAggregation","_nextModifier","aggregation","_setChartAggregation","DateGroup","DATE","MONTH","WEEKDAY","YEAR","_setChartGroup1","_setChartGroup2","propertyName","_changeProperty","prop","charAt","toUpperCase","columns","_axisCount","columnCount","tmpColumn","_plainAxisText","headerHtmlEnabled","plainText","replace","_renderContent","_installScrollbars","_filterResetListener","_addListeners","_renderAxisSelectorsContainer","_renderAxisSelectors","_initializeSelection","_renderChartParts","$axisSelectContainer","_chartGroup1Map","_chartGroup2Map","matrix","axisCount","numberOfAxisItems","c1","content","$div","$yDiv","column1","MAX_AXIS_COUNT","_axisContentForColumn","makeDiv","setEnabled","chartGroup1","chartGroup2","appendCssClass","installForEllipsis","clone","countDesc","all","c2","column2","fakeNumberLabelCol2","columnText","hasText","headerTooltipText","$axisColumns","_setDefaultSelectionForGroup","$candidates","maxIndex","col","_getDefaultSelectedColumn","_getDefaultChartGroup","matchCounter","curColumn","_existsInAxisColumns","columnToSearch","eq","_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","textIsIcon","parseIconId","isFontIcon","split","iconCharacter","_adjustLabels","parseInt","_adjustClickable","_adjustBubble","_adjustPie","_adjustScales","_isChartClickable","clamp","margin","cssMarginTop","cssMarginBottom","tableFilter","getFilter","TYPE","filters","collapsedIndices","containsAll","getFilters","pushAll","addFilter","removeFilterByKey","headerIconId","visibleColumns","_removeContent","_removeScrollbars","events","removeListener","_removeListeners","recomputeEnabled","uninstall","_uninstallScrollbars","_tableUpdatedTimeOutId","removeContent","renderContent","TableControlAdapter","ChartTableControlAdapter","_addRemoteProperties","control","TableUserFilter","filterType","columnIdX","columnIdY","createLabel","createFilterAddedEventData","columnX","columnById","axisGroupX","createFilter","axisGroup","columnY","axisGroupY","accept","row","cellValueOrTextForCalculation","deterministicKeyX","normDeterministic","deterministicKeyY","FormFieldTile","ChartFieldTile","_chartConfigChangeHandler","_onChartConfigChange","_updateChartColorScheme","tileWidget","_setTileWidget","FormFieldTileAdapter","ChartFieldTileAdapter"],"sourceRoot":""}
|