UNPKG

@eclipse-scout/chart

Version:
1 lines 127 kB
(()=>{"use strict";var L={};L.n=_=>{var t=_&&_.__esModule?()=>_.default:()=>_;return L.d(t,{a:t}),t},L.d=(_,t)=>{for(var e in t)L.o(t,e)&&!L.o(_,e)&&Object.defineProperty(_,e,{enumerable:!0,get:t[e]})},L.o=(_,t)=>Object.prototype.hasOwnProperty.call(_,t),L.r=_=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(_,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(_,"__esModule",{value:!0})};var _t={};L.r(_t),L.d(_t,{AbstractChartRenderer:()=>tt,AbstractSvgChartRenderer:()=>M,Chart:()=>h,ChartAdapter:()=>xt,ChartColorMode:()=>U,ChartField:()=>Rt,ChartFieldAdapter:()=>Lt,ChartFieldTile:()=>St,ChartFieldTileAdapter:()=>Ot,ChartJsRenderer:()=>W,ChartLayout:()=>it,ChartTableControl:()=>z,ChartTableControlAdapter:()=>Dt,ChartTableControlConfigDo:()=>S,ChartTableControlConfigHelperImpl:()=>rt,ChartTableControlLayout:()=>ct,ChartTableUserFilter:()=>V,FulfillmentChartRenderer:()=>nt,SalesfunnelChartRenderer:()=>ot,SpeedoChartRenderer:()=>k,VennAsync3Calculator:()=>ht,VennChartRenderer:()=>ut,VennCircle:()=>N,VennCircleHelper:()=>dt,chartJsDateAdapter:()=>st,default:()=>Mt});var Q={};L.r(Q),L.d(Q,{AbstractChartRenderer:()=>tt,AbstractSvgChartRenderer:()=>M,Chart:()=>h,ChartAdapter:()=>xt,ChartColorMode:()=>U,ChartField:()=>Rt,ChartFieldAdapter:()=>Lt,ChartFieldTile:()=>St,ChartFieldTileAdapter:()=>Ot,ChartJsRenderer:()=>W,ChartLayout:()=>it,ChartTableControl:()=>z,ChartTableControlAdapter:()=>Dt,ChartTableControlConfigDo:()=>S,ChartTableControlConfigHelperImpl:()=>rt,ChartTableControlLayout:()=>ct,ChartTableUserFilter:()=>V,FulfillmentChartRenderer:()=>nt,SalesfunnelChartRenderer:()=>ot,SpeedoChartRenderer:()=>k,VennAsync3Calculator:()=>ht,VennChartRenderer:()=>ut,VennCircle:()=>N,VennCircleHelper:()=>dt,chartJsDateAdapter:()=>st,default:()=>Mt});const n=scout;n.scout.addObjectFactories({ChartTableControlConfigHelper:()=>new rt});class rt extends n.ChartTableControlConfigHelper{async _exportConfig(t){if(!t?.detailTable)return null;let e=t.detailTable.findTableControl(z);return e&&e.selected?n.scout.create(S,{chartTypeId:e.chartType,chartGroup1ColumnId:e.chartGroup1?.id,chartGroup1Modifier:e.chartGroup1?.modifier,chartGroup2ColumnId:e.chartGroup2?.id,chartGroup2Modifier:e.chartGroup2?.modifier,chartAggregationColumnId:e.chartAggregation?.id,chartAggregationModifier:e.chartAggregation?.modifier}):null}async _importConfig(t,e){if(!t?.detailTable||!e)return;let a=t.detailTable.findTableControl(z);a&&(a.setSelected(!0),a.setChartType(e.chartTypeId),a.setChartGroup1({id:e.chartGroup1ColumnId,modifier:e.chartGroup1Modifier}),a.setChartGroup2({id:e.chartGroup2ColumnId,modifier:e.chartGroup2Modifier}),a.setChartAggregation({id:e.chartAggregationColumnId,modifier:e.chartAggregationModifier}))}}const vt=jQuery;var b=L.n(vt);class h extends n.Widget{data;config;checkedItems;chartRenderer;_updatedOnce;_updateChartTimeoutId;_updateChartOpts;_updateChartOptsWhileNotAttached;constructor(){super(),this.$container=null,this.data=null,this.config=null,this.checkedItems=[],this.chartRenderer=null,this._updateChartTimeoutId=null,this._updateChartOpts=null,this._updateChartOptsWhileNotAttached=[],this._updatedOnce=!1}static Type={PIE:"pie",LINE:"line",BAR:"bar",BAR_HORIZONTAL:"horizontalBar",COMBO_BAR_LINE:"comboBarLine",FULFILLMENT:"fulfillment",SPEEDO:"speedo",SALESFUNNEL:"salesfunnel",VENN:"venn",DOUGHNUT:"doughnut",POLAR_AREA:"polarArea",RADAR:"radar",BUBBLE:"bubble",SCATTER:"scatter"};static Position={TOP:"top",BOTTOM:"bottom",LEFT:"left",RIGHT:"right",CENTER:"center"};static DEFAULT_ANIMATION_DURATION=600;static DEFAULT_DEBOUNCE_TIMEOUT=100;_init(t){super._init(t),this.setConfig(this.config),this._setData(this.data)}_render(){this.$container=this.$parent.appendDiv("chart"),n.aria.role(this.$container,"none"),this.htmlComp=n.HtmlComponent.install(this.$container,this.session),this.htmlComp.setLayout(new it(this))}_renderProperties(){super._renderProperties(),this._renderClickable(),this._renderCheckable(),this._renderChartType(),this._renderColorScheme(),this.updateChart({requestAnimation:!0,debounce:h.DEFAULT_DEBOUNCE_TIMEOUT})}_renderOnAttach(){super._renderOnAttach();const t=this._updateChartOptsWhileNotAttached.splice(0);this.chartRenderer?.isDetachSupported()||(this._updateChartRenderer(),t.forEach(e=>delete e.requestAnimation),t.push({requestAnimation:!1})),t.forEach(e=>this.updateChart(b().extend(!0,{},e,{debounce:!0})))}_remove(){this.chartRenderer&&this.chartRenderer.remove(!1),this.$container.remove(),this.$container=null}setData(t){this.setProperty("data",t),this.setCheckedItems(this.checkedItems)}_setData(t){t&&(t=b().extend({axes:[]},t)),this._setProperty("data",t)}_renderData(){this.updateChart({requestAnimation:!0,debounce:h.DEFAULT_DEBOUNCE_TIMEOUT,onlyUpdateData:!0})}setConfig(t){let e={type:h.Type.PIE,options:{autoColor:!0,colorMode:U.AUTO,colorScheme:n.colorSchemes.ColorSchemeId.DEFAULT,transparent:!1,maxSegments:5,adjustGridMaxMin:!0,clickable:!1,checkable:!1,animation:{duration:h.DEFAULT_ANIMATION_DURATION},plugins:{datalabels:{display:!1},tooltip:{enabled:!0},legend:{display:!0,clickable:!1,position:h.Position.RIGHT,pointsVisible:!0}}}};if(t=b().extend(!0,{},e,t),t.options.colorScheme=n.colorSchemes.ensureColorScheme(t.options.colorScheme),n.objects.equalsRecursive(this.config,t))return;let a=b().extend(!0,{},this.config);t.data?a.data=t.data:delete a.data;let r=(i,s,l)=>{if(!(!i||!s||!l)){if(!i.options||!i.options[l]){s.options&&delete s.options[l],s.options&&n.objects.isEmpty(s.options.scales)&&!(i.options&&i.options.scales)&&delete s.options.scales,n.objects.isEmpty(s.options)&&!i.options&&delete s.options;return}s.options[l]=i.options[l]}};if(r(t,a,"xLabelMap"),r(t,a,"yLabelMap"),n.objects.equalsRecursive(a,t)){this._setProperty("config",t),this.rendered&&this._renderConfig(!0),this.setCheckedItems(this.checkedItems);return}this.rendered&&this.config&&this.config.type&&this.$container.removeClass(this.config.type+"-chart"),this.setProperty("config",t),this.setCheckedItems(this.checkedItems),this._updateChartRenderer()}_renderConfig(t){this._renderClickable(),this._renderCheckable(),this._renderChartType(),this._renderColorScheme(),this.updateChart({requestAnimation:!0,debounce:h.DEFAULT_DEBOUNCE_TIMEOUT,onlyUpdateData:t})}setCheckedItems(t){this.setProperty("checkedItems",n.arrays.ensure(this._filterCheckedItems(t)))}_filterCheckedItems(t){if(!Array.isArray(t))return t;let e=[];this.data&&this.data.chartValueGroups?this.data.chartValueGroups.forEach(r=>e.push(r.values.length)):this.config&&this.config.data&&this.config.data.datasets.forEach(r=>e.push(r.data.length));let a=t.filter(r=>e[r.datasetIndex]&&r.dataIndex<e[r.datasetIndex]);return a.length<t.length?a:t}_renderCheckedItems(){this.chartRenderer&&this.chartRenderer.renderCheckedItems()}_renderEnabled(){this.updateChart()}_renderClickable(){this.$container.toggleClass("clickable",this.config.options.clickable)}_renderCheckable(){this.$container.toggleClass("checkable",this.config.options.checkable)}_renderChartType(){this.$container.addClass(this.config.type+"-chart")}_renderColorScheme(){n.colorSchemes.toggleColorSchemeClasses(this.$container,this.config.options.colorScheme)}updateChart(t){t=t||{},t.onlyUpdateData=t.onlyUpdateData&&this.chartRenderer&&this.chartRenderer.isDataUpdatable(),t.enforceRerender=!t.onlyUpdateData&&!t.onlyRefresh,this._updateChartTimeoutId&&(clearTimeout(this._updateChartTimeoutId),this._updateChartOpts&&(t.requestAnimation=t.requestAnimation||this._updateChartOpts.requestAnimation,t.onlyUpdateData=t.onlyUpdateData||this._updateChartOpts.onlyUpdateData,t.onlyRefresh=t.onlyRefresh||this._updateChartOpts.onlyRefresh,t.enforceRerender=t.enforceRerender||this._updateChartOpts.enforceRerender),this._updateChartTimeoutId=null,this._updateChartOpts=null);let e=r.bind(this);t.debounce===!0||typeof t.debounce=="number"?(this._updateChartOpts=t,typeof t.debounce=="number"?this._updateChartTimeoutId=setTimeout(e,t.debounce):this._updateChartTimeoutId=setTimeout(e)):e();function r(){if(this._updateChartTimeoutId=null,this._updateChartOpts=null,!this.$container||!this.$container.isAttached()){this._updateChartOptsWhileNotAttached.push(t);return}this._updatedOnce=!0,this.chartRenderer&&(t.enforceRerender?this.chartRenderer.remove(this.chartRenderer.shouldAnimateRemoveOnUpdate(t),i=>{this.removing||i||(this.chartRenderer.render(t.requestAnimation),this.trigger("chartRender"))}):t.onlyUpdateData?this.chartRenderer.updateData(t.requestAnimation):t.onlyRefresh&&this.chartRenderer.refresh())}}_resolveChartRenderer(){switch(this.config.type){case h.Type.FULFILLMENT:return new nt(this);case h.Type.SPEEDO:return new k(this);case h.Type.SALESFUNNEL:return new ot(this);case h.Type.VENN:return new ut(this);case h.Type.BAR:case h.Type.BAR_HORIZONTAL:case h.Type.LINE:case h.Type.COMBO_BAR_LINE:case h.Type.PIE:case h.Type.DOUGHNUT:case h.Type.POLAR_AREA:case h.Type.RADAR:case h.Type.BUBBLE:case h.Type.SCATTER:return new W(this)}return null}_updateChartRenderer(){this.chartRenderer&&this.chartRenderer.remove(),this.setProperty("chartRenderer",this._resolveChartRenderer())}handleValueClick(t,e){if(this.config.options.checkable){let a=[...this.checkedItems],r=a.filter(i=>i.datasetIndex===t.datasetIndex&&i.dataIndex===t.dataIndex)[0];r?n.arrays.remove(a,r):a.push(t),this.setCheckedItems(a)}this.trigger("valueClick",{data:t,originalEvent:e})}handleNonValueClick(t){this.trigger("nonValueClick",{originalEvent:t})}handleLegendClick(t,e){this.trigger("legendItemClick",{legendItemIndex:t,originalEvent:e})}}var U;(function(_){_.AUTO="auto",_.DATASET="dataset",_.DATA="data"})(U||(U={}));class xt extends n.ModelAdapter{_onWidgetValueClick(t){this._send("valueClick",t.data)}_onWidgetEvent(t){t.type==="valueClick"?this._onWidgetValueClick(t):super._onWidgetEvent(t)}}class it extends n.AbstractLayout{chart;constructor(t){super(),this.chart=t}layout(t){let e={requestAnimation:!0,debounce:h.DEFAULT_DEBOUNCE_TIMEOUT,onlyUpdateData:!0};(!this.chart.session.ready||this.chart._updatedOnce)&&(e.requestAnimation=!1),this.chart.session.ready||(e.debounce=!1),this.chart.findParent(n.Tile)?.$container.hasClass("dragged")&&(e.debounce=!1),this.chart.chartRenderer instanceof W&&this.chart.chartRenderer.chartJs?.resize(),this.chart.updateChart(e)}}class tt extends n.PropertyEventEmitter{chart;session;rendering;rendered;animationDuration;firstOpaqueBackgroundColor;constructor(t){super(),this.chart=t,this.session=t.session,this.rendering=!1,this.rendered=!1,this.animationDuration=0,this.firstOpaqueBackgroundColor=""}validate(){return this._validateChartData()?this._validate():!1}_validateChartData(){let t=this.chart&&this.chart.data;if(!t||!t.chartValueGroups||t.chartValueGroups.length===0)return!1;let e,a=0;for(e=0;e<t.chartValueGroups.length;e++){let r=t.chartValueGroups[e];if(!r.values)return!1;if(e===0)a=r.values.length;else if(r.values.length!==a)return!1;if(!this.chart.config.options.autoColor&&!n.arrays.ensure(r.colorHexValue).length&&!r.cssClass)return!1}for(e=0;e<t.axes.length;e++)if(t.axes[e].length!==a)return!1;return!0}_validate(){return!0}render(t){if(!this.validate()||!this.chart.rendered)return;const e=this.chart.config.options.animation.duration;this.setAnimationDuration(t?e:0),this.rendering=!0,this._render(),this.rendering=!1,this.rendered=!0,this.setAnimationDuration(e)}_render(){}renderCheckedItems(){this.rendered&&this._renderCheckedItems()}_renderCheckedItems(){}updateData(t){if(!this.rendered){this.render(t);return}if(!this.validate()||!this.isDataUpdatable())return;const e=this.chart.config.options.animation.duration;this.setAnimationDuration(t?e:0),this._updateData(),this.setAnimationDuration(e)}_updateData(){}isDataUpdatable(){return!1}isDetachSupported(){return!0}refresh(){this.rendering||(this.rendered&&this.remove(!1),this.render(!1))}setAnimationDuration(t){this.setProperty("animationDuration",t)&&this.rendered&&this._renderAnimationDuration()}_setAnimationDuration(t){this._setProperty("animationDuration",t)}_renderAnimationDuration(){}remove(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=arguments.length>1?arguments[1]:void 0;const a=this.chart.config.options.animation.duration;this.setAnimationDuration(t&&a),this.animationDuration&&this.rendered?this._removeAnimated(e):this._remove(e),this.setAnimationDuration(a)}_remove(t){this.rendered=!1,t&&t()}_removeAnimated(t){this._remove(t)}shouldAnimateRemoveOnUpdate(t){return t.requestAnimation}}class M extends tt{chartBox;clipId;maskId;suppressLegendBox;height;width;chartAnimationStopping;$svg;_nonValueClickHandler;constructor(t){super(t),this.chartBox=null,this.clipId="Clip-"+n.ObjectIdProvider.get().createUiSeqId(),this.maskId="Mask-"+n.ObjectIdProvider.get().createUiSeqId(),this.suppressLegendBox=!1,this._nonValueClickHandler=this._onNonValueClick.bind(this)}static FONT_SIZE_SMALLEST="smallestFont";static FONT_SIZE_SMALL="smallFont";static FONT_SIZE_MIDDLE="middleFont";static FONT_SIZE_BIG="bigFont";_render(){this.$svg||(this.$svg=this.chart.$container.appendSVG("svg","chart-svg"),n.aria.role(this.$svg,"img"),this.linkChartWithFieldLabel(this.$svg),this.$svg.on("click",this._nonValueClickHandler)),this.firstOpaqueBackgroundColor=n.styles.getFirstOpaqueBackgroundColor(this.$svg),this.height=this.$svg.height(),this.width=this.$svg.width(),this._initChartBox(),this._useFontSizeBig()?this.$svg.addClass(M.FONT_SIZE_BIG):this._useFontSizeMiddle()?this.$svg.addClass(M.FONT_SIZE_MIDDLE):this._useFontSizeSmall()?this.$svg.addClass(M.FONT_SIZE_SMALL):this._useFontSizeSmallest()&&this.$svg.addClass(M.FONT_SIZE_SMALLEST),this.$svg.isAttached()&&this._renderInternal()}linkChartWithFieldLabel(t){if(!t)return;let e=t.parents(".chart-field");if(e.length>0){let a=e.eq(0).children("label");a.length>0&&n.aria.linkElementWithLabel(t,a.eq(0))}}_renderInternal(){}_useFontSizeBig(){return!1}_useFontSizeMiddle(){return!1}_useFontSizeSmall(){return!1}_useFontSizeSmallest(){return!1}remove(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,e=arguments.length>1?arguments[1]:void 0;this.rendered&&!this.chartAnimationStopping&&(this.chartAnimationStopping=!0,this.$svg.children().stop(!0,!1),this.chartAnimationStopping=!1),super.remove(t,e)}_remove(t){this.rendered&&(this.$svg.children().stop(!0,!1),this.rendered&&(this.$svg.remove(),this.$svg=null)),this.rendered=!1,t&&t(this.chartAnimationStopping)}_createClickObject(t,e){return{xIndex:t,dataIndex:t,datasetIndex:e}}_onChartValueClick(t){this.chart.handleValueClick(t.data,t.originalEvent),t.stopPropagation()}_onNonValueClick(t){this.chart.handleNonValueClick(t.originalEvent),t.stopPropagation()}_measureText(t,e){let a=this.$svg.appendSVG("text",e).attr("x",0).attr("y",0).attr("visibility","hidden").text(t),r;try{r=a[0].getBBox()}catch{return{height:0,width:0}}return a.remove(),r}_renderLine(t,e,a,r,i){let s=this.$svg.appendSVG("line",i).attr("x1",t).attr("y1",e).attr("x2",a).attr("y2",r);return this.animationDuration&&s.attr("opacity",0).animateSVG("opacity",1,this.animationDuration,null,!0),s}_renderLineLabel(t,e,a,r,i){let s=this.$svg.appendSVG("text",r||"line-label").attr("x",t).attr("y",e).text(a);if(i){s.attr("mask","url(#"+this.maskId+")");let l=this.$svg.appendSVG("text",r?r+" background":"line-label-background").attr("x",t).attr("y",e).attr("clip-path","url(#"+this.clipId+")").text(a);s.data("$background",l),this.animationDuration&&l.attr("opacity",0).animateSVG("opacity",1,this.animationDuration,null,!0)}return this.animationDuration&&s.attr("opacity",0).animateSVG("opacity",1,this.animationDuration,null,!0),s}_initChartBox(){this.chartBox={width:this.width,height:this.height,xOffset:0,yOffset:0,mX:function(){return this.xOffset+this.width/2},mY:function(){return this.yOffset+this.height/2}}}_createAnimationObjectWithTabIndexRemoval(t,e){return{step:function(a,r){try{t.bind(this)(a,r)}catch(i){throw b()(this).stop(!0,!1),i}},duration:e||h.DEFAULT_ANIMATION_DURATION,complete:function(){b()(this).removeAttr("tabindex")}}}_addClipping(t){let e=this.$svg.appendSVG("clipPath");e[0].id=this.clipId;let a=this.$svg.appendSVG("mask");a.appendSVG("rect").attr("x",0).attr("y",0).attr("width","100%").attr("height","100%").attr("fill","white"),a[0].id=this.maskId,this.chart.$container.find("."+t).each(function(r){this.id="ClipMask-"+n.ObjectIdProvider.get().createUiSeqId(),e.appendSVG("use").attrXLINK("href","#"+this.id),a.appendSVG("use").attrXLINK("href","#"+this.id)})}_renderWireLegend(t,e,a,r){if(!this.chart.config.options.plugins.tooltip.enabled)return{detachFunc:()=>{},attachFunc:()=>{},removeFunc:()=>{}};let i={},s=5,l,d=0,o=17,c=o;r&&(l=this.$svg.appendSVG("rect","wire-legend-background-box").attr("opacity","1"));let u=e,p,f=0,g=0;if(u.h===-1?g=u.x2-2*s:g=this.width-u.x2-2*s,Array.isArray(t))for(let m=0;m<t.length;m++){let x=t.length-m-1,A=u.y2+u.v*s-o*x-s*x,T=this._renderLineLabel(u.x2+s,A,n.strings.truncateText(t[m],g,this._measureText.bind(this)),"",r);T.addClass(a),f=Math.max(f,T[0].getComputedTextLength()),m===0?p=T:p.data("lines")?p.data("lines").push(T):p.data("lines",[T])}else p=this._renderLineLabel(u.x2+s,u.y2+u.v*s,n.strings.truncateText(t,g,this._measureText.bind(this)),"",r),p.addClass(a),f=p[0].getComputedTextLength();if(d=f+2*s,e.autoPosition&&(u=e.posFunc.call(this,d,c),p.attr("x",u.x2+s),p.attr("y",u.y2+u.v*s)),u.h===-1?(p.attr("x",u.x2-s-f),p.css("text-anchor","left"),p.data("lines")&&p.data("lines").forEach(m=>{m.attr("x",u.x2-s-f),m.css("text-anchor","left")})):(p.attr("x",u.x2+s),p.css("text-anchor","right"),p.data("lines")&&p.data("lines").forEach(m=>{m.attr("x",u.x2+s),m.css("text-anchor","right")})),u.v===1)p.data("lines")&&p.data("lines").forEach((m,x)=>{m.attr("y",u.x2-s-f);let A=1+x;m.attr("y",u.y2+u.v*s+o*A+s*(A+1))}),p.attr("dy","0.7em");else if(p.data("lines")){let m=p.data("lines").length;p.attr("y",u.y2+u.v*s-o*m-s*m),p.data("lines").forEach((x,A)=>{m=p.data("lines").length-1-A,x.attr("y",u.y2+u.v*s-o*m-s*m)})}p.add(p.data("lines")).each((m,x)=>{let A=b()(x),T=A.data("$background");T&&(T.attr("x",A.attr("x")),T.attr("y",A.attr("y")),T.css("text-anchor",A.css("text-anchor")),T.attr("dy",A.attr("dy")))});let y=[];u.x1>0&&u.y1>0&&(y.push(this._renderLine(u.x1,u.y1,u.x2,u.y2,"label-line")),y.push(this._renderLine(u.x2,u.y2,u.x2+u.h*(f+2*s),u.y2,"label-line"))),p.data("wires",y);let C=this.$svg;return i.detachFunc=()=>{p.data("wires").forEach(m=>{m.detach()}),p.data("lines")&&p.data("lines").forEach(m=>{m.data("$background")&&C.append(m.data("$background")),m.detach()}),p.data("$background")&&p.data("$background").remove(),p.detach()},i.attachFunc=()=>{C.append(p),p.data("$background")&&C.append(p.data("$background")),C.append(p.data("wires")),p.data("lines")&&p.data("lines").forEach(m=>{C.append(m),m.data("$background")&&C.append(m.data("$background"))})},i.removeFunc=()=>{p.data("wires").forEach(m=>{m.remove()}),p.data("lines")&&p.data("lines").forEach(m=>{m.data("$background")&&m.data("$background").remove(),m().remove()}),p.data("$background")&&p.data("$background").remove(),p.remove()},i.$field=p,i}}const st={getAdapter(_){return{formats:()=>It(_.locale),parse:(t,e)=>n.objects.isNullOrUndefined(t)?null:t instanceof Date?t.getTime():n.objects.isString(t)?n.objects.isString(e)&&n.strings.hasText(e)?(t=new n.DateFormat(_.locale,e).parse(t),t instanceof Date?t.getTime():null):(t=n.dates.parseJsonDate(t),t instanceof Date?t.getTime():null):null,format:(t,e)=>{if(e==="quarter")throw new Error('The time unit "quarter" is not supported for formatting.');return n.dates.format(new Date(t),_.locale,e)},add:(t,e,a)=>{let r=new Date(t);switch(a){case"millisecond":return n.dates.shiftTime(r,0,0,0,e).getTime();case"second":return n.dates.shiftTime(r,0,0,e,0).getTime();case"minute":return n.dates.shiftTime(r,0,e,0,0).getTime();case"hour":return n.dates.shiftTime(r,e,0,0,0).getTime();case"day":return n.dates.shift(r,0,0,e).getTime();case"week":return n.dates.shift(r,0,0,e*7).getTime();case"month":return n.dates.shift(r,0,e,0).getTime();case"quarter":return n.dates.shift(r,0,e*3,0).getTime();case"year":return n.dates.shift(r,e,0,0).getTime();default:return t}},diff:(t,e,a)=>{switch(a){case"millisecond":return t-e;case"second":return(t-e)/1e3;case"minute":return(t-e)/1e3/60;case"hour":return(t-e)/1e3/60/60;case"day":return n.dates.compareDays(new Date(t),new Date(e));case"week":return n.dates.compareDays(new Date(t),new Date(e))/7;case"month":return n.dates.compareMonths(new Date(t),new Date(e));case"quarter":return n.dates.compareMonths(new Date(t),new Date(e))/3;case"year":return new Date(t).getFullYear()-new Date(e).getFullYear();default:return 0}},startOf:(t,e,a)=>{let r=new Date(t);switch(e){case"second":return r.setMilliseconds(0);case"minute":return r.setSeconds(0,0);case"hour":return r.setMinutes(0,0,0);case"day":return r.setHours(0,0,0,0);case"week":return n.dates.firstDayOfWeek(r,0).getTime();case"isoWeek":return n.dates.firstDayOfWeek(r,a).getTime();case"month":return n.dates.trunc(r).setDate(0);case"quarter":return n.dates.trunc(r).setMonth(r.getMonth()%4,1);case"year":return n.dates.trunc(r).setMonth(0,1);default:return t}},endOf:(t,e)=>{let a=new Date(t);switch(e){case"second":return a.setMilliseconds(999);case"minute":return a.setSeconds(59,999);case"hour":return a.setMinutes(59,59,999);case"day":return a.setHours(23,59,59,999);case"week":{a.setHours(23,59,59,999);let r=n.dates.firstDayOfWeek(a,0);return r.setDate(r.getDate()+7)}case"month":return a.setHours(23,59,59,999),a.setDate(Tt(a.getMonth(),a.getFullYear()));case"quarter":{a.setHours(23,59,59,999);let r=a.getMonth()%4+2;return a.setMonth(r,Tt(r,a.getFullYear()))}case"year":return a.setHours(23,59,59,999),a.setMonth(11,31);default:return t}}}}};function It(_){return{datetime:_.dateFormatPatternDefault+" "+_.timeFormatPatternDefault,millisecond:"HH:mm:ss.SSS",second:"HH:mm:ss",minute:_.timeFormatPatternDefault,hour:_.timeFormatPatternDefault,day:_.dateFormatPatternDefault,week:"ww",month:"MMM yyyy",quarter:"qqq - yyyy",year:"yyyy"}}function Tt(_,t){return _ in[3,5,8,10]?30:_===1?n.dates.isLeapYear(t)?29:28:31}const B=Chart,Et=ChartDataLabels;var lt=L.n(Et);B.Chart.register(lt()),b().extend(!0,B.Chart.defaults,{maintainAspectRatio:!1,elements:{line:{borderWidth:2},point:{radius:0,hitRadius:10,hoverRadius:7,hoverBorderWidth:2},arc:{borderWidth:1},bar:{borderWidth:1,borderSkipped:""}},plugins:{legend:{labels:{usePointStyle:!0,boxHeight:7}}}}),b().extend(!0,B.Chart.overrides,{line:{elements:{point:{borderWidth:2}}},scatter:{elements:{point:{radius:3}}},bubble:{layout:{autoPadding:!1}}});let At=!1;const Pt=(1+Math.sqrt(5))/2;class W extends tt{static ARROW_LEFT_RIGHT="↔";static ARROW_UP_DOWN="↕";chartJs;onlyIntegers;maxXAxesTicksHeight;numSupportedColors;colorSchemeCssClass;minRadialChartDatalabelSpace;resetDatasetAfterHover;legendHoverDatasets;removing;$canvas;_labelFormatter;_xLabelFormatter;_yLabelFormatter;_xAxisFitter;_yAxisFitter;_radialChartDatalabelsDisplayHandler;_radialChartDatalabelsFormatter;_datalabelsFormatter;_datalabelBackgroundColorHandler;_legendLabelGenerator;_clickHandler;_hoverHandler;_pointerHoverHandler;_legendClickHandler;_legendHoverHandler;_legendPointerHoverHandler;_legendLeaveHandler;_legendPointerLeaveHandler;_resizeHandler;_tooltipTitleGenerator;_tooltipItemsGenerator;_tooltipLabelGenerator;_tooltipLabelValueGenerator;_tooltipLabelColorGenerator;_tooltipRenderer;_tooltip;_tooltipTimeoutId;_updatingDatalabels;_hoveringClickableElement;constructor(t){super(t),this.chartJs=null,this.onlyIntegers=!0,this.maxXAxesTicksHeight=75,this.numSupportedColors=6,this.colorSchemeCssClass="",this.minRadialChartDatalabelSpace=25,this._labelFormatter=this._createLabelFormatter(this._formatLabel),this._xLabelFormatter=this._createLabelFormatter(this._formatXLabel),this._yLabelFormatter=this._createLabelFormatter(this._formatYLabel),this._xAxisFitter=this._fitXAxis.bind(this),this._yAxisFitter=this._fitYAxis.bind(this),this._radialChartDatalabelsDisplayHandler=this._displayDatalabelsOnRadialChart.bind(this),this._radialChartDatalabelsFormatter=this._formatDatalabelsOnRadialChart.bind(this),this._datalabelsFormatter=this._formatDatalabels.bind(this),this._datalabelBackgroundColorHandler=this._getBackgroundColorOfDataset.bind(this),this._legendLabelGenerator=this._generateLegendLabels.bind(this),this.resetDatasetAfterHover=!1,this._clickHandler=this._onClick.bind(this),this._hoverHandler=this._onHover.bind(this),this._pointerHoverHandler=this._onHoverPointer.bind(this),this.legendHoverDatasets=[],this._legendClickHandler=this._onLegendClick.bind(this),this._legendHoverHandler=this._onLegendHover.bind(this),this._legendPointerHoverHandler=this._onLegendHoverPointer.bind(this),this._legendLeaveHandler=this._onLegendLeave.bind(this),this._legendPointerLeaveHandler=this._onLegendLeavePointer.bind(this),this._resizeHandler=this._onResize.bind(this),this._tooltipTitleGenerator=this._generateTooltipTitle.bind(this),this._tooltipItemsGenerator=this._generateTooltipItems.bind(this),this._tooltipLabelGenerator=this._generateTooltipLabel.bind(this),this._tooltipLabelValueGenerator=this._generateTooltipLabelValue.bind(this),this._tooltipLabelColorGenerator=this._generateTooltipLabelColor.bind(this),this._tooltipRenderer=this._renderTooltip.bind(this),this._tooltip=null,this._tooltipTimeoutId=null}_validateChartData(){let t=!0,e=this.chart&&this.chart.data;if((!e||!e.chartValueGroups||e.chartValueGroups.length===0||!e.axes)&&(t=!1),t&&n.scout.isOneOf(this.chart.config.type,h.Type.POLAR_AREA,h.Type.RADAR)){let i,s=0;for(i=0;i<e.chartValueGroups.length;i++){let l=e.chartValueGroups[i];l.values||(t=!1),i===0?s=l.values.length:l.values.length!==s&&(t=!1)}for(i=0;i<e.axes.length;i++)e.axes[i].length!==s&&(t=!1)}if(t)return!0;let a=!0,r=this.chart&&this.chart.config;if((!r||!r.data||!r.data.datasets||r.data.datasets.length===0)&&(a=!1),a&&n.scout.isOneOf(r.type,h.Type.POLAR_AREA,h.Type.RADAR)){let i,s=0;for(i=0;i<r.data.datasets.length;i++){let l=r.data.datasets[i];l.data||(a=!1),i===0?s=l.data.length:l.data.length!==s&&(a=!1)}}return a}_render(){this.$canvas||(this.$canvas=this.chart.$container.appendElement("<canvas>"),this.$canvas.on("click",this._onCanvasClick.bind(this)),n.aria.hidden(this.$canvas,!0)),this.firstOpaqueBackgroundColor=n.styles.getFirstOpaqueBackgroundColor(this.$canvas),At||(B.Chart.defaults.font.family=this.$canvas.css("font-family"),B._adapters._date.override(st.getAdapter(this.chart.session)),At=!0);let t=b().extend(!0,{},this.chart.config);this._adjustConfig(t),this._renderChart(t)}_renderChart(t){this.chartJs&&this.chartJs.destroy(),t=b().extend(!0,{},t,{options:{animation:{}}},t),t.options.animation.duration=this.animationDuration,this.chartJs=new B.Chart(this.$canvas[0].getContext("2d"),t),this._adjustSize(this.chartJs.config,this.chartJs.chartArea,{isDatasetVisible:e=>this.chartJs.getDatasetMeta(e).visible}),this.refresh()}_updateData(){if(!this.chartJs)return;let t=b().extend(!0,{},this.chart.config);this._adjustConfig(t);let e=this.chartJs.config.data,a=t.data,r=(o,c,u,p)=>{if(!o||!c||!u)return;if(!c[u]){let y=o[u];(y||p)&&(c[u]=y);return}if(!o[u]){if(p){c[u]=void 0;return}if(Array.isArray(c[u])){c[u].splice(0,c[u].length);return}c[u]=void 0;return}if(!Array.isArray(o[u])||!Array.isArray(c[u])){c[u]=o[u];return}for(let y=0;y<Math.min(o[u].length,c[u].length);y++)c[u][y]=o[u][y];let f=c[u].length,g=o[u].length;f>g?c[u].splice(g,f-g):f<g&&c[u].push(...o[u].splice(f))},i=(o,c)=>n.arrays.find(o,u=>u.datasetId===c),s=(o,c)=>n.arrays.findIndex(o,u=>u.datasetId===c);if(e&&a){r(a,e,"labels"),e.datasets||(e.datasets=[]),a.datasets||(a.datasets=[]),a.datasets.every(o=>n.objects.isNullOrUndefined(o.datasetId))&&(a.datasets.forEach((o,c)=>{o.datasetId=""+c}),e.datasets.forEach((o,c)=>{o.datasetId=""+c})),e.datasets.forEach(o=>{let c=i(a.datasets,o.datasetId);c&&(o.label=c.label,o.type=c.type,r(c,o,"data"),r(c,o,"backgroundColor",!0),r(c,o,"borderColor",!0),r(c,o,"hoverBackgroundColor",!0),r(c,o,"hoverBorderColor",!0),r(c,o,"legendColor",!0),r(c,o,"pointBackgroundColor",!0),r(c,o,"pointHoverBackgroundColor",!0),r(c,o,"pointBorderColor",!0),r(c,o,"pointHoverBorderColor",!0),r(c,o,"uncheckedBackgroundColor",!0),r(c,o,"uncheckedHoverBackgroundColor",!0),r(c,o,"checkedBackgroundColor",!0),r(c,o,"checkedHoverBackgroundColor",!0),r(c,o,"uncheckedPointBackgroundColor",!0),r(c,o,"uncheckedPointHoverBackgroundColor",!0),r(c,o,"checkedPointBackgroundColor",!0),r(c,o,"checkedPointHoverBackgroundColor",!0),r(c,o,"lineTension",!0),r(c,o,"pointRadius",!0),r(c,o,"uncheckedPointRadius",!0),r(c,o,"checkedPointRadius",!0),this._adjustDatasetBorderWidths(o))});for(let o=e.datasets.length-1;o>=0;o--){let c=e.datasets[o].datasetId;(n.objects.isNullOrUndefined(c)||s(a.datasets,c)===-1)&&e.datasets.splice(o,1)}e.datasets.sort((o,c)=>s(a.datasets,o.datasetId)-s(a.datasets,c.datasetId)),a.datasets.forEach((o,c)=>{let u=e.datasets[c];u&&u.datasetId&&o.datasetId===u.datasetId||e.datasets.splice(c,0,o)})}else this.chartJs.config.data=a;r(t.options,this.chartJs.config.options,"xLabelMap",!0),r(t.options,this.chartJs.config.options,"yLabelMap",!0),b().extend(!0,this.chartJs.config,{options:{animation:{duration:this.animationDuration}}});let l=this.chartJs.config.options.scales||{};[l.x||{},l.y||{},l.yDiffType||{},l.r||{}].forEach(o=>{(o.ticks||{}).stepSize=void 0}),this.refresh(),this._adjustSize(this.chartJs.config,this.chartJs.chartArea,{isDatasetVisible:o=>this.chartJs.getDatasetMeta(o).visible}),this.refresh()}isDataUpdatable(){return!0}isDetachSupported(){return!1}refresh(){this.chartJs?this.chartJs.update():super.refresh()}_renderAnimationDuration(){this.chartJs&&(b().extend(!0,this.chartJs.config,{options:{animation:{duration:this.animationDuration}}}),this.refresh())}_renderCheckedItems(){this.chartJs&&this._checkItems(this.chartJs.config)&&this.refresh()}_checkItems(t){if(!t||!t.data)return!1;let e=(r,i,s)=>{if(Array.isArray(r)&&Array.isArray(i)){let l=0;return n.arrays.ensure(s).filter(d=>!isNaN(d)&&d<Math.min(r.length,i.length)).forEach(d=>{r[d]!==i[d]&&(r[d]=i[d],l++)}),l}return 0},a=0;return t.data.datasets.forEach((r,i)=>{let s=this.chart.checkedItems.filter(d=>d.datasetIndex===i).map(d=>d.dataIndex),l=n.arrays.init(r.data.length,null).map((d,o)=>o);n.arrays.removeAll(l,s),a=a+e(r.backgroundColor,r.checkedBackgroundColor,s)+e(r.hoverBackgroundColor,r.checkedHoverBackgroundColor,s)+e(r.pointBackgroundColor,r.checkedPointBackgroundColor,s)+e(r.pointHoverBackgroundColor,r.checkedPointHoverBackgroundColor,s)+e(r.pointRadius,r.checkedPointRadius,s)+e(r.backgroundColor,r.uncheckedBackgroundColor,l)+e(r.hoverBackgroundColor,r.uncheckedHoverBackgroundColor,l)+e(r.pointBackgroundColor,r.uncheckedPointBackgroundColor,l)+e(r.pointHoverBackgroundColor,r.uncheckedPointHoverBackgroundColor,l)+e(r.pointRadius,r.uncheckedPointRadius,l),this._adjustDatasetBorderWidths(r)}),0<a}stopAnimations(){this.chartJs&&this.chartJs.stop()}_adjustConfig(t){!t||!t.type||(this._adjustType(t),this.chart.data&&this._computeDatasets(this.chart.data,t),this._adjustData(t),this._adjustLegend(t),this._adjustTooltip(t),this._adjustGrid(t),this._adjustPlugins(t),this._adjustColors(t),this._adjustClickHandler(t),this._adjustResizeHandler(t))}_adjustType(t){if(t.type===h.Type.COMBO_BAR_LINE){t.type=h.Type.BAR;let e=(t.options||{}).scaleLabelByTypeMap;e&&(e[h.Type.BAR]=e[h.Type.COMBO_BAR_LINE])}else this._isHorizontalBar(t)&&(t.type=h.Type.BAR,t.options=b().extend(!0,{},t.options,{indexAxis:"y"}))}_computeDatasets(t,e){let a=[],r=[],i=(l,d)=>{b().isEmptyObject(d)||(e.options[l]=d)};(t.axes[0]||[]).forEach(l=>a.push(l.label));let s=this._isHorizontalBar(e);i(s?"yLabelMap":"xLabelMap",this._computeLabelMap(t.axes[0])),i(s?"xLabelMap":"yLabelMap",this._computeLabelMap(t.axes[1])),t.chartValueGroups.forEach(l=>r.push({type:l.type,label:l.groupName,data:b().extend(!0,[],l.values)})),e.data={labels:a,datasets:r}}_isHorizontalBar(t){return t&&(t.type===h.Type.BAR_HORIZONTAL||t.type===h.Type.BAR&&t.options&&t.options.indexAxis==="y")}_computeLabelMap(t){let e={};return(t||[]).forEach((a,r)=>{e[r]=a.label}),e}_adjustData(t){!t||!t.data||!t.type||(this._adjustBarBorderWidth(t),this._adjustMaxSegments(t),this._adjustBubbleRadii(t),this._adjustOnlyIntegers(t))}_adjustBarBorderWidth(t){!t||!t.data||!t.type||!n.scout.isOneOf(t.type,h.Type.BAR)||t.data.datasets.forEach(e=>{(e.type||h.Type.BAR)===h.Type.BAR&&(e.borderWidth=e.borderWidth||1,e.hoverBorderWidth=e.hoverBorderWidth||2,this._adjustDatasetBorderWidths(e))})}_adjustDatasetBorderWidths(t){this._adjustDatasetBorderWidth(t),this._adjustDatasetBorderWidth(t,!0)}_adjustDatasetBorderWidth(t,e){if(!t)return;let a=e?"hoverBorderWidth":"borderWidth",r=e?"hoverBorderWidthBackup":"borderWidthBackup",i=e?"hoverBackgroundColor":"backgroundColor",s=e?"hoverBorderColor":"borderColor";if(t[r]&&(t[a]=t[r],delete t[r]),!t[a]||n.objects.isFunction(t[a]))return;let l=Array.isArray(t[a]),d=Array.isArray(t[i]),o=Array.isArray(t[s]);if(!(l||d||o)&&t[i]===t[s]){t[r]=t[a],t[a]=0;return}let u=(t.data||[]).length;l?t[a].length<u&&t[a].push(...n.arrays.init(u-t[a].length,t[a][0])):t[a]=n.arrays.init(u,t[a]);let p=t[a],f=p.length,g=n.arrays.init(f,null);for(let y=0;y<f;y++){let C=d?t[i][y]:t[i],m=o?t[s][y]:t[s];g[y]=p[y],C===m&&(p[y]=0)}n.arrays.equals(p,g)||(t[r]=g)}_adjustMaxSegments(t){if(!t||!t.data||!t.type||!n.scout.isOneOf(t.type,h.Type.PIE,h.Type.DOUGHNUT,h.Type.POLAR_AREA,h.Type.RADAR))return;let e=t.options.maxSegments;if(!(e&&t.data.datasets.length&&e<t.data.datasets[0].data.length))return;t.data.datasets.forEach(r=>{let i=r.data.slice(0,e);i[e-1]=r.data.slice(e-1,r.data.length).reduce((s,l)=>s+l,0),r.data=i});let a=t.data.labels.slice(0,e);a[e-1]=this.chart.session.text("ui.OtherValues"),t.data.labels=a,t.data.maxSegmentsExceeded=!0}_isMaxSegmentsExceeded(t,e){return!n.scout.isOneOf(t.type,h.Type.PIE,h.Type.DOUGHNUT,h.Type.POLAR_AREA,h.Type.RADAR)||t.options.otherSegmentClickable||!t.data.maxSegmentsExceeded||!t.options.maxSegments?!1:t.options.maxSegments-1<=e}_adjustBubbleRadii(t){!t||!t.data||!t.type||t.type!==h.Type.BUBBLE||t.data.datasets.forEach(e=>e.data.forEach(a=>{isNaN(a.r)||(a.z=Math.pow(a.r,2)),a.r=1}))}_adjustOnlyIntegers(t){this.onlyIntegers=!0,!(!t||!t.data||!t.type)&&(n.scout.isOneOf(t.type,h.Type.BUBBLE,h.Type.SCATTER)?this.onlyIntegers=t.data.datasets.every(e=>e.data.every(a=>n.numbers.isInteger(a.x)&&n.numbers.isInteger(a.y))):this.onlyIntegers=t.data.datasets.every(e=>e.data.every(a=>n.numbers.isInteger(a))))}_adjustLegend(t){!t||!t.type||!t.options||(t.options=b().extend(!0,{},t.options,{plugins:{legend:{labels:{generateLabels:this._legendLabelGenerator}}}}),t.options.plugins.legend.pointsVisible||(t.options.plugins.legend.labels.boxWidth=0))}_adjustTooltip(t){if(!t)return;t.options=b().extend(!0,{},{plugins:{tooltip:{callbacks:{title:this._tooltipTitleGenerator,items:this._tooltipItemsGenerator,label:this._tooltipLabelGenerator,labelValue:this._tooltipLabelValueGenerator,labelColor:this._tooltipLabelColorGenerator}}}},t.options);let e=t.options.plugins.tooltip;e.enabled&&(e.enabled=!1,e.external=this._tooltipRenderer)}_generateTooltipTitle(t){if(!t||!t.length)return"";let e=t[0],a=e.chart,r=a.config,i=e.dataset,s=[];if(n.scout.isOneOf(r.type,h.Type.BUBBLE)){let l=r.options.scales.x,d=r.options.scales.y,o=this._getAxisLabels(r),c=l.ticks.callback(i.data[e.dataIndex].x,null,null);c&&s.push(this._createTooltipAttribute(o.x,n.strings.encode(c),!0));let u=d.ticks.callback(i.data[e.dataIndex].y,null,null);u&&s.push(this._createTooltipAttribute(o.y,n.strings.encode(u),!0))}else if(!n.scout.isOneOf(r.type,h.Type.SCATTER)){let l=a.data.labels[e.dataIndex];s.push(this._createTooltipAttribute(r.options.reformatLabels?this._formatLabel(l):l,"",!0))}return s}_getAxisLabels(t){let e=t.options.scales.x.title.text,a=t.options.scales.y.title.text;return e=this._resolveAxisLabel(e,W.ARROW_LEFT_RIGHT),a=this._resolveAxisLabel(a,"&nbsp;"+W.ARROW_UP_DOWN+"&nbsp;"),{x:e,y:a}}_resolveAxisLabel(t){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return n.objects.isFunction(t)&&(t=t(),t=n.objects.isString(t)?t:""),t?n.strings.encode(t):e}_generateTooltipItems(t,e,a,r){if(!t||!t.length)return"";let i=t[0],s=i.chart,l=s.config,d=!1,o=!1,c="";if(t.forEach(u=>{let{label:p,labelValue:f,labelColor:g}=this._getItemDetails(u,e,a,r);if(n.scout.isOneOf(l.type,h.Type.SCATTER)){let{x:y,y:C}=f;d||=n.objects.isString(y),o||=n.objects.isString(C),c+=this._createTooltipScatterAttribute(p,y,C,!1,g)}else c+=this._createTooltipAttribute(p,f,!1,g)}),n.scout.isOneOf(l.type,h.Type.SCATTER)){let u="<table><tbody>",p=this._getAxisLabels(l);u+=this._createTooltipScatterAttribute("",d?p.x:"",o?p.y:"",!0),c=n.strings.box(u,c,"</tbody></table>")}return c}_getItemDetails(t,e,a,r){let i,s,l;return n.objects.isFunction(e)&&(i=e(t),i=n.objects.isString(i)?i:""),n.objects.isFunction(a)&&(s=a(t),s=n.objects.isString(s)||n.objects.isObject(s)?s:""),n.objects.isFunction(r)&&(l=r(t),l=n.objects.isObject(l)&&l.backgroundColor||""),{label:i,labelValue:s,labelColor:l}}_generateTooltipLabel(t){return n.strings.encode(t.dataset.label)}_generateTooltipLabelValue(t){let e=t.chart.config,a=t.dataset;return e.type===h.Type.BUBBLE?n.strings.encode(this._formatLabel(a.data[t.dataIndex].z)):e.type===h.Type.SCATTER?{x:n.strings.encode(this._formatXLabel(a.data[t.dataIndex].x)),y:n.strings.encode(this._formatYLabel(a.data[t.dataIndex].y))}:n.strings.encode(this._formatLabel(a.data[t.dataIndex]))}_generateTooltipLabelColor(t){let e=t.chart.config,a=t.dataset,r,i,s,l;n.scout.isOneOf(a.type||e.type,h.Type.LINE,h.Type.BAR,h.Type.BAR_HORIZONTAL,h.Type.RADAR,h.Type.BUBBLE,h.Type.SCATTER)&&(s=a.borderColor,r=Array.isArray(a.legendColor)?a.legendColor[t.dataIndex]:a.legendColor,l=t.datasetIndex),n.scout.isOneOf(e.type,h.Type.PIE,h.Type.DOUGHNUT,h.Type.POLAR_AREA)&&(r=Array.isArray(a.legendColor)?a.legendColor[t.dataIndex]:a.legendColor,i=Array.isArray(a.backgroundColor)?a.backgroundColor[t.dataIndex]:a.backgroundColor,i=this._adjustColorOpacity(i,1),l=t.dataIndex),n.objects.isFunction(r)&&(r=r.call(t.chart,l));let d=r||i||s;if(!d||n.objects.isFunction(d)){let o;B.Chart.overrides[e.type]&&B.Chart.overrides[e.type].plugins&&B.Chart.overrides[e.type].plugins.tooltip&&B.Chart.overrides[e.type].plugins.tooltip.callbacks&&(o=B.Chart.overrides[e.type].plugins.tooltip.callbacks.labelColor),d=(o||B.Chart.defaults.plugins.tooltip.callbacks.labelColor).call(t.chart,t).backgroundColor}return{backgroundColor:d}}_createTooltipAttribute(t,e,a,r){return'<div class="'+(a?"attribute title":"attribute")+'">'+(r?'<div class="color" style="background-color:'+r+'"></div>':"")+(t?"<label>"+t+"</label>":"")+(e?'<div class="value">'+e+"</div>":"")+"</div>"}_createTooltipScatterAttribute(t,e,a,r,i){return'<tr class="'+(r?"attribute title":"attribute")+'"><td class="color-cell">'+(i?'<div class="color" style="background-color:'+i+'"></div>':"")+'</td><td class="label">'+t+"</td>"+(e?'<td class="value">'+e+"</td>":"")+(a?'<td class="value">'+a+"</td>":"")+"</tr>"}_renderTooltip(t){if(t.tooltip.opacity===0||t.tooltip.dataPoints.length<1){this._tooltipTimeoutId&&(clearTimeout(this._tooltipTimeoutId),this._tooltipTimeoutId=void 0),this._tooltip&&(this._tooltip.destroy(),this._tooltip=null);return}!!this._tooltip?this._renderTooltipLater(t):(clearTimeout(this._tooltipTimeoutId),this._tooltipTimeoutId=setTimeout(()=>this._renderTooltipLater(t),n.tooltips.DEFAULT_TOOLTIP_DELAY))}_renderTooltipLater(t){if(!this.rendered||this.removing)return;let e=t.tooltip,a=e.dataPoints;if(a.length<1)return;let r=a[0];if(!r.chart.getDatasetMeta(r.datasetIndex).data[r.dataIndex])return;this._tooltip&&(this._tooltip.destroy(),this._tooltip=null);let s=e.options||{},l=s.callbacks||{},d=l.title,o=l.items,c=l.label,u=l.labelValue,p=l.labelColor,f="";n.objects.isFunction(d)&&(f+=n.arrays.ensure(d(a)).join("")),n.objects.isFunction(o)&&(f+=n.arrays.ensure(o(a,c,u,p)).join(""));let g=this._computeTooltipPositionAndOffset(r),y=new n.Point(e.caretX+g.offsetX,e.caretY+g.offsetY);this._tooltip=n.scout.create({objectType:n.Tooltip,parent:this.chart,$anchor:this.$canvas,text:f,htmlEnabled:!0,cssClass:n.strings.join(" ","chart-tooltip",s.cssClass),tooltipPosition:g.tooltipPosition,tooltipDirection:g.tooltipDirection,originProducer:A=>{const T=n.graphics.offsetBounds(A);return T.height=g.height,T},offsetProducer:A=>y}),this._tooltip.render(),this._tooltip.$container.css("pointer-events","none");let C=!1,m=(s.titleFont||{}).family;m&&(this._tooltip.$container.css("--chart-tooltip-font-family",m),C=!0);let x=0;this._tooltip.$container.find("label").each((A,T)=>{x=Math.max(x,n.graphics.prefSize(b()(T)).width)}),x>0&&(this._tooltip.$container.css("--chart-tooltip-label-width",Math.min(x,120)+"px"),C=!0),C&&this._tooltip.position()}_computeTooltipPositionAndOffset(t){let e="top",a="right",r=0,i=0,s=0,l=t.chart,d=t.datasetIndex,o=t.dataIndex,c=l.config,u=c.data.datasets,p=u[d],f=p.data[o];if(this._isHorizontalBar(c))n.objects.isObject(f)&&n.objects.isArray(f.x)&&f.x.length===2?a=(f.x[0]+f.x[1])/2<0?"left":"right":a=f<0?"left":"right";else if((p.type||c.type)===h.Type.BAR)e=f<0?"bottom":"top";else if(n.scout.isOneOf(c.type,h.Type.PIE,h.Type.DOUGHNUT,h.Type.POLAR_AREA)){let g=l.getDatasetMeta(d).data[o].getProps(["startAngle","endAngle"]),y=g.startAngle,C=g.endAngle,m=(y+C)/2;e=0<=m&&m<Math.PI?"bottom":"top",a=-Math.PI/2<=m&&m<Math.PI/2?"right":"left"}else if(c.type===h.Type.RADAR){let y=l.getDatasetMeta(d).data[o].getProps(["angle"]).angle;e=0<=y&&y<Math.PI?"bottom":"top",a=-Math.PI/2<=y&&y<Math.PI/2?"right":"left"}else if(n.scout.isOneOf(c.type,h.Type.BUBBLE,h.Type.SCATTER)){let g=l.getDatasetMeta(d).data[o],y=l.chartArea,C=y.left+y.width/2;a=g.x<C?"left":"right"}if(this._isHorizontalBar(c)){let g=l.getDatasetMeta(d).data[o].getProps(["height","width"]);s=g.height;let y=g.width,C=y/(Pt+1);i=-s/2,r=a==="left"?C:-C}else if(n.scout.isOneOf(c.type,h.Type.LINE,h.Type.BUBBLE,h.Type.SCATTER,h.Type.RADAR)||p.type===h.Type.LINE){let y=l.getDatasetMeta(d).data[o].options,C=y.hoverRadius+y.hoverBorderWidth;c.type===h.Type.BUBBLE&&(C+=f.r),s=2*C,i=-C}else if(n.scout.isOneOf(c.type,h.Type.PIE,h.Type.DOUGHNUT,h.Type.POLAR_AREA)){let g=l.getDatasetMeta(d).data[o].getProps(["startAngle","endAngle","innerRadius","outerRadius"]),y=g.startAngle,C=g.endAngle,m=(y+C)/2,x=g.innerRadius,A=g.outerRadius,T=(A-x)/2;r=T*Math.cos(m),i=T*Math.sin(m)}return{tooltipPosition:e,tooltipDirection:a,offsetX:r,offsetY:i,height:s}}_adjustGrid(t){t&&(t.options=b().extend(!0,{},t.options),this._adjustScalesR(t),this._adjustScalesXY(t))}_adjustScalesR(t){if(!t||!t.type||!t.options)return;n.scout.isOneOf(t.type,h.Type.POLAR_AREA,h.Type.RADAR)&&(t.options=b().extend(!0,{},{scales:{r:{}}},t.options));let e=t.options,a=e?e.scales:{};a&&a.r&&(a.r=b().extend(!0,{},{minSpaceBetweenTicks:35,beginAtZero:!0,angleLines:{display:!1},ticks:{callback:this._labelFormatter},pointLabels:{callback:this._labelFormatter,font:{size:B.Chart.defaults.font.size}}},a.r))}_adjustScalesXY(t){!t||!t.type||!t.options||(n.scout.isOneOf(t.type,h.Type.BAR,h.Type.LINE,h.Type.BUBBLE)?t.options=b().extend(!0,{},{scales:{x:{minSpaceBetweenTicks:150},y:{minSpaceBetweenTicks:35}}},t.options):n.scout.isOneOf(t.type,h.Type.SCATTER)&&(t.options=b().extend(!0,{},{scales:{x:{minSpaceBetweenTicks:35,ticks:{padding:10}},y:{minSpaceBetweenTicks:35,ticks:{padding:10}}}},t.options)),this._adjustXAxis(t),this._adjustYAxis(t))}_adjustXAxis(t){if(!t||!t.type||!t.options||!t.options.scales||!t.options.scales.x)return;let e=t.type,a=t.options.scales;this._isHorizontalBar(t)||n.scout.isOneOf(e,h.Type.BUBBLE,h.Type.SCATTER)?a.x=b().extend(!0,{},{beginAtZero:this._isHorizontalBar(t),offset:e===h.Type.BUBBLE,grid:{drawTicks:!1},border:{display:!1},ticks:{padding:5}},a.x):a.x=b().extend(!0,{},{offset:!0,grid:{display:!1},border:{display:!1}},a.x),(this._isHorizontalBar(t)||n.scout.isOneOf(e,h.Type.BUBBLE,h.Type.SCATTER)||t.options.reformatLabels)&&(a.x=b().extend(!0,{},{ticks:{callback:this._xLabelFormatter}},a.x)),a.x.afterCalculateLabelRotation=this._xAxisFitter}_adjustYAxis(t){if(!t||!t.type||!t.options||!t.options.scales||!t.options.scales.y)return;let e=t.type,a=t.options.scales;this._isHorizontalBar(t)?a.y=b().extend(!0,{},{grid:{display:!1},border:{display:!1}},a.y):a.y=b().extend(!0,{},{beginAtZero:!n.scout.isOneOf(e,h.Type.BUBBLE,h.Type.SCATTER),grid:{drawTicks:!1},border:{display:!1},ticks:{padding:5}},a.y),(!this._isHorizontalBar(t)||t.options.reformatLabels)&&(a.y=b().extend(!0,{},{ticks:{callback:this._yLabelFormatter}},a.y)),a.y.afterFit=this._yAxisFitter}_adjustPlugins(t){this._adjustPluginsDatalabels(t)}_adjustPluginsDatalabels(t){if(!t||!t.type||!t.options||!t.options.plugins||!t.options.plugins.datalabels||!t.options.plugins.datalabels.display)return;let e=t.options.plugins;if(n.scout.isOneOf(t.type,h.Type.PIE,h.Type.DOUGHNUT)){e.datalabels=b().extend(!0,{},{formatter:this._radialChartDatalabelsFormatter},e.datalabels),e.datalabels.display=this._radialChartDatalabelsDisplayHandler,this._updatingDatalabels=!1;let a=t.options.animation||{},r=a.onProgress,i=a.onComplete,s=d=>{if(this._updatingDatalabels)return;this._updatingDatalabels=!0;let o=d.chart,c=o.getSortedVisibleDatasetMetas(),u=[...o.getActiveElements()],p=[];c.forEach((f,g)=>{f.data.forEach((y,C)=>{let m=n.arrays.findIndex(u,x=>x.datasetIndex===g&&x.index===C);m>0?u.splice(m,1):p.push({datasetIndex:g,index:C,element:y})})}),o["$"+lt().id]._actives=p,lt().afterEvent(o,null,null),this._updatingDatalabels=!1},l=(d,o)=>{s(d),o&&o(d)};t.options.animation=b().extend(!0,{},t.options.animation,{onProgress:d=>l(d,r),onComplete:d=>l(d,i)})}else n.scout.isOneOf(t.type,h.Type.BAR,h.Type.LINE,h.Type.POLAR_AREA,h.Type.RADAR,h.Type.BUBBLE)?(e.datalabels=b().extend(!0,{},{backgroundColor:this._datalabelBackgroundColorHandler,borderRadius:3},e.datalabels),e.datalabels.display="auto"):n.scout.isOneOf(t.type,h.Type.SCATTER)&&(e.datalabels=b().extend(!0,{},{backgroundColor:this._datalabelBackgroundColorHandler,borderRadius:3,anchor:"end",align:"top",offset:3},e.datalabels),e.datalabels.display="auto");if(t.options.reformatLabels){let a=r=>(i,s)=>{let l=r.call(s.chart,i,s);return this._formatLabel(l)};t.data&&t.data.datasets.forEach(i=>{i.datalabels&&i.datalabels.formatter&&(i.datalabels.formatter=a(i.datalabels.formatter))}),e.datalabels.formatter&&(e.datalabels.formatter=a(e.datalabels.formatter))}e.datalabels=b().extend(!0,{},{formatter:this._datalabelsFormatter},e.datalabels)}_getNumberFormatter(){return this.chartJs?.config?.options?.numberFormatter}_createLabelFormatter(t){const e=this;return function(a){return t.call(e,a,this)}}_formatLabel(t,e){return t=this._formatCategory(t,e),this._formatLabelMap(t,null,this._getNumberFormatter())}_formatXLabel(t,e){return t=this._formatCategory(t,e),this._formatLabelMap(t,this._getXLabelMap(),this._getNumberFormatter())}_formatYLabel(t,e){return t=this._formatCategory(t,e),this._formatLabelMap(t,this._getYLabelMap(),this._getNumberFormatter())}_formatCategory(t,e){return e instanceof B.CategoryScale&&n.numbers.isNumber(t)?e.getLabelForValue(t):t}_getXLabelMap(){return this._getLabelMap("xLabelMap")}_getYLabelMap(){return this._getLabelMap("yLabelMap")}_getLabelMap(t){if(this.chartJs&&this.chartJs.config&&this.chartJs.config.options)return this.chartJs.config.options[t]}_formatLabelMap(t,e,a){return e?e[t]:isNaN(t)||typeof t=="string"?""+t:a?a(t,this._formatNumberLabel.bind(this)):this._formatNumberLabel(t)}_formatNumberLabel(t){if(isNaN(t))return""+t;let e=Math.abs(t),a="";if(e>=1e6){e=e/1e6,a=" "+this.chart.session.text("ui.Mio");let r=[this.chart.session.text("ui.Mrd"),this.chart.session.text("ui.Bio"),this.chart.session.text("ui.Brd"),this.chart.session.text("ui.Tri"),this.chart.session.text("ui.Trd")];for(let i=0;i<r.length&&e>=1e3;i++)e=e/1e3,a=" "+r[i]}return this.session.locale.decimalFormat.format(Math.sign(t)*e)+a}_fitXAxis(t){if(!t||t.labelRotation===0)return;let e=this.maxXAxesTicksHeight,a=B.Chart.defaults.font,r=B.Chart.defaults.scale.ticks,i=r.font||{},s,l;if(this.chartJs){let p=this.chartJs.chartArea,f=Math.abs(p.top-p.bottom);e=Math.min(e,f/3)}t.options&&t.options.ticks&&(l=t.options.ticks.maxRotation,s=(t.options.ticks.font||{}).size),l=l||r.maxRotation,s=s||i.size||a.size,isNaN(t.labelRotation)&&(t.labelRotation=l),t.height=isNaN(t.height)?e:Math.min(t.height,e);let d=t.labelRotation,o=(e-s*Math.sin((90-d)/180*Math.PI))/Math.sin(d/180*Math.PI);if(((t._labelSizes||{}).widest||{}).width>o){let p=t.ctx.measureText.bind(t.ctx);t.ticks.forEach(f=>{f.label=n.strings.truncateText(f.label,o,p)}),t._labelSizes=void 0}}_fitYAxis(t){if(!t)return;let e=0,a=0;if(t.options&&t.options.ticks&&(e=t.options.ticks.padding||0),t.options&&t.options.grid&&(a=t.options.grid.tickLength||0),((t._labelSizes||{}).widest||{}).width>t.maxWidth-e){let s=t.maxWidth-e-a,l=t.ctx.measureText.bind(t.ctx);t.ticks.forEach(d=>{d.label=n.strings.truncateText(d.label,s,l)})}}_displayDatalabelsOnRadialChart(t){let e=t.chart.getDatasetMeta(t.datasetIndex).data[t.dataIndex].getProps(["startAngle","endAngle","innerRadius","outerRadius"]),a=(e.outerRadius+e.innerRadius)/2,r=Math.min(e.endAngle-e.startAngle,Math.PI)/2,i=Math.abs(Math.sin(r))*a,s=i*2,l=e.outerRadius-e.innerRadius;return Math.min(s,l)>this.minRadialChartDatalabelSpace}_formatDatalabelsOnRadialChart(t,e){let a=this._computeSumOfVisibleElements(e),r=e.dataset,i=0,s=[];for(let l=0;l<e.dataIndex+1;l++){let d=r.data[l]/a*100-i,o=Math.round(d);i=o-d,s.push(o+"%")}return s[e.dataIndex]}_computeSumOfVisibleElements(t){let e=t.dataset,a=t.chart,r=0;for(let i=0;i<e.data.length;i++)a.getDataVisibility(i)&&(r+=e.data[i]);return r}_formatDatalabels(t,e){let a=e.chart.config;return a.type===h.Type.BUBBLE?this._formatLabel(t.z):a.type===h.Type.SCATTER?n.strings.join(" / ",this._formatXLabel(t.x),this._formatYLabel(t.y)):this._formatLabel(t)}_getBackgroundColorOfDataset(t){return t.da