@kyndryl-design-system/shidoka-charts 2.0.0 → 2.0.2
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/README.md +7 -3
- package/components/chart/chart.d.ts.map +1 -1
- package/components/chart/chart.js +5 -5
- package/components/chart/chart.js.map +1 -1
- package/components/chart/chart.scss.js +7 -4
- package/components/chart/chart.scss.js.map +1 -1
- package/external/chart.js/dist/chunks/helpers.segment.js +1 -1
- package/external/chart.js/dist/chunks/helpers.segment.js.map +1 -1
- package/external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js +1 -1
- package/external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js.map +1 -1
- package/external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js +1 -1
- package/external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js.map +1 -1
- package/external/d3-geo/src/projection/resample.js +1 -1
- package/external/d3-geo/src/projection/resample.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/Setter.js +1 -1
- package/external/date-fns/esm/parse/_lib/Setter.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMMidnightParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/AMPMParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DateParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DateParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayOfYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/DayPeriodParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/EraParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/EraParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ExtendedYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/FractionOfSecondParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0To11Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour0to23Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1To24Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/Hour1to12Parser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISODayParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISODayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOTimezoneWithZParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/ISOWeekYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalDayParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalDayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/LocalWeekYearParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MinuteParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MinuteParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MonthParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/MonthParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/QuarterParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/QuarterParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/SecondParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/SecondParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneLocalDayParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneMonthParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/StandAloneQuarterParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampMillisecondsParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/TimestampSecondsParser.js.map +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/YearParser.js +1 -1
- package/external/date-fns/esm/parse/_lib/parsers/YearParser.js.map +1 -1
- package/external/deepmerge-ts/dist/node/index.js +1 -1
- package/external/deepmerge-ts/dist/node/index.js.map +1 -1
- package/package.json +20 -19
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Shidoka
|
|
1
|
+
# Shidoka Charts
|
|
2
2
|
|
|
3
|
-
[](https://github.com/kyndryl-design-system/shidoka-charts/actions/workflows/release.yml)
|
|
4
4
|
|
|
5
5
|
# Contributing to this project
|
|
6
6
|
|
|
@@ -36,9 +36,13 @@ The method used (SCSS @use, CSS @import, JS import, or <style> tag) will v
|
|
|
36
36
|
import '@kyndryl-design-system/shidoka-foundation/css/root.css';
|
|
37
37
|
```
|
|
38
38
|
|
|
39
|
+
### Set a color scheme
|
|
40
|
+
|
|
41
|
+
More info on color schemes in the [Foundation Storybook](https://shidoka-foundation.netlify.app/?path=/docs/foundation-colors--docs#setting-a-theme).
|
|
42
|
+
|
|
39
43
|
## Start using components
|
|
40
44
|
|
|
41
|
-
See [Storybook](https://
|
|
45
|
+
See [Storybook](https://shidoka-charts.netlify.app) for the full components documentation.
|
|
42
46
|
|
|
43
47
|
### Example
|
|
44
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC,OAAO,0BAA0B,CAAC;AA0ClC;;;;;;GAMG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,+BAAa;IAEnC,mBAAmB;IAEnB,UAAU,SAAM;IAEhB,yBAAyB;IAEzB,WAAW,SAAM;IAEjB,2BAA2B;IAE3B,IAAI,EAAE,GAAG,CAAM;IAEf,4BAA4B;IAE5B,MAAM,EAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEvB,8BAA8B;IAE9B,QAAQ,EAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtB,uDAAuD;IAEvD,OAAO,EAAE,GAAG,CAAM;IAElB,yHAAyH;IAEzH,OAAO,EAAE,GAAG,CAAM;IAElB,wEAAwE;IAExE,MAAM,EAAE,GAAG,CAAQ;IAEnB,uEAAuE;IAEvE,KAAK,EAAE,GAAG,CAAQ;IAElB,sCAAsC;IAEtC,eAAe,UAAS;IAExB,0CAA0C;IAE1C,YAAY,UAAS;IAErB,qCAAqC;IAErC,UAAU,UAAS;IAEnB,0BAA0B;IAE1B,YAAY,UAAS;IAErB,4CAA4C;IAE5C,QAAQ,UAAS;IAEjB,gCAAgC;IAEhC,YAAY;;;;;;;MAOV;IAEF;;OAEG;IAEH,UAAU,UAAS;IAEnB;;;OAGG;IAEH,SAAS,EAAG,iBAAiB,CAAC;IAE9B;;;OAGG;IAEH,MAAM,EAAG,iBAAiB,CAAC;IAE3B;;;OAGG;IAEH,KAAK,EAAG,cAAc,CAAC;IAEvB;;OAEG;IAEH,KAAK,EAAE,GAAG,CAAQ;IAElB;;OAEG;IAEH,SAAS,UAAS;IAElB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,aAAa,EAAE,GAAG,CAAM;IAExB;;OAEG;IAEH,cAAc,EAAE,GAAG,CAAM;IAEzB;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IACH,eAAe,EAAE,GAAG,CAIlB;IAEF,cAAc,EAAE,GAAG,CAMhB;IAEM,MAAM;IAkSf,OAAO,CAAC,YAAY;IAMX,iBAAiB;IASjB,oBAAoB;IAOpB,YAAY;IAKZ,OAAO,CAAC,YAAY,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../../src/components/chart/chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC,OAAO,0BAA0B,CAAC;AA0ClC;;;;;;GAMG;AACH,qBACa,OAAQ,SAAQ,UAAU;IACrC,OAAgB,MAAM,+BAAa;IAEnC,mBAAmB;IAEnB,UAAU,SAAM;IAEhB,yBAAyB;IAEzB,WAAW,SAAM;IAEjB,2BAA2B;IAE3B,IAAI,EAAE,GAAG,CAAM;IAEf,4BAA4B;IAE5B,MAAM,EAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEvB,8BAA8B;IAE9B,QAAQ,EAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtB,uDAAuD;IAEvD,OAAO,EAAE,GAAG,CAAM;IAElB,yHAAyH;IAEzH,OAAO,EAAE,GAAG,CAAM;IAElB,wEAAwE;IAExE,MAAM,EAAE,GAAG,CAAQ;IAEnB,uEAAuE;IAEvE,KAAK,EAAE,GAAG,CAAQ;IAElB,sCAAsC;IAEtC,eAAe,UAAS;IAExB,0CAA0C;IAE1C,YAAY,UAAS;IAErB,qCAAqC;IAErC,UAAU,UAAS;IAEnB,0BAA0B;IAE1B,YAAY,UAAS;IAErB,4CAA4C;IAE5C,QAAQ,UAAS;IAEjB,gCAAgC;IAEhC,YAAY;;;;;;;MAOV;IAEF;;OAEG;IAEH,UAAU,UAAS;IAEnB;;;OAGG;IAEH,SAAS,EAAG,iBAAiB,CAAC;IAE9B;;;OAGG;IAEH,MAAM,EAAG,iBAAiB,CAAC;IAE3B;;;OAGG;IAEH,KAAK,EAAG,cAAc,CAAC;IAEvB;;OAEG;IAEH,KAAK,EAAE,GAAG,CAAQ;IAElB;;OAEG;IAEH,SAAS,UAAS;IAElB;;OAEG;IAEH,aAAa,UAAS;IAEtB;;OAEG;IAEH,aAAa,EAAE,GAAG,CAAM;IAExB;;OAEG;IAEH,cAAc,EAAE,GAAG,CAAM;IAEzB;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IACH,eAAe,EAAE,GAAG,CAIlB;IAEF,cAAc,EAAE,GAAG,CAMhB;IAEM,MAAM;IAkSf,OAAO,CAAC,YAAY;IAMX,iBAAiB;IASjB,oBAAoB;IAOpB,YAAY;IAKZ,OAAO,CAAC,YAAY,EAAE,GAAG;IA0FlC;;;OAGG;IACH,OAAO,CAAC,SAAS;IA+CjB;;;OAGG;YACW,YAAY;IAmE1B,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,iBAAiB;IA2BzB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,sBAAsB;CAG/B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,OAAO,CAAC;KACrB;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@lit/reactive-element/reactive-element.js';import{html as e}from'./../../external/lit-html/lit-html.js';import{LitElement as s}from'./../../external/lit-element/lit-element.js';import{customElement as o}from'./../../external/@lit/reactive-element/decorators/custom-element.js';import{property as i}from'./../../external/@lit/reactive-element/decorators/property.js';import{state as a}from'./../../external/@lit/reactive-element/decorators/state.js';import{query as r}from'./../../external/@lit/reactive-element/decorators/query.js';import'./../../external/@lit/reactive-element/decorators/query-assigned-elements.js';import{classMap as n}from'./../../external/lit-html/directives/class-map.js';import{deepmerge as l,deepmergeCustom as c}from'./../../external/deepmerge-ts/dist/node/index.js';import'./../../external/chart.js/auto/auto.js';import'./../../external/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js';import{ChoroplethController as d,BubbleMapController as h,GeoFeature as m,ColorScale as p,SizeScale as u,ProjectionScale as g}from'./../../external/chartjs-chart-geo/build/index.js';import{TreemapController as y,TreemapElement as v}from'./../../external/chartjs-chart-treemap/dist/chartjs-chart-treemap.esm.js';import b from"../../common/plugins/canvasBackground.js";import f from"../../common/plugins/doughnutLabel.js";import j from"../../common/plugins/meterGaugeNeedle.js";import T from'./../../external/chartjs-plugin-a11y-legend/dist/plugin.js';import w from'./../../external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js';import $ from'./../../external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js';import{debounce as k,convertChartDataToCSV as _}from"../../common/helpers/helpers.js";import D from"./chart.scss.js";import O from"../../common/config/globalOptions.js";import x from"../../common/config/globalOptionsNonRadial.js";import C from"../../common/config/globalOptionsRadial.js";import A from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg.js';import
|
|
1
|
+
import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@lit/reactive-element/reactive-element.js';import{html as e}from'./../../external/lit-html/lit-html.js';import{LitElement as s}from'./../../external/lit-element/lit-element.js';import{customElement as o}from'./../../external/@lit/reactive-element/decorators/custom-element.js';import{property as i}from'./../../external/@lit/reactive-element/decorators/property.js';import{state as a}from'./../../external/@lit/reactive-element/decorators/state.js';import{query as r}from'./../../external/@lit/reactive-element/decorators/query.js';import'./../../external/@lit/reactive-element/decorators/query-assigned-elements.js';import{classMap as n}from'./../../external/lit-html/directives/class-map.js';import{deepmerge as l,deepmergeCustom as c}from'./../../external/deepmerge-ts/dist/node/index.js';import'./../../external/chart.js/auto/auto.js';import'./../../external/chartjs-adapter-date-fns/dist/chartjs-adapter-date-fns.esm.js';import{ChoroplethController as d,BubbleMapController as h,GeoFeature as m,ColorScale as p,SizeScale as u,ProjectionScale as g}from'./../../external/chartjs-chart-geo/build/index.js';import{TreemapController as y,TreemapElement as v}from'./../../external/chartjs-chart-treemap/dist/chartjs-chart-treemap.esm.js';import b from"../../common/plugins/canvasBackground.js";import f from"../../common/plugins/doughnutLabel.js";import j from"../../common/plugins/meterGaugeNeedle.js";import T from'./../../external/chartjs-plugin-a11y-legend/dist/plugin.js';import w from'./../../external/chartjs-plugin-datalabels/dist/chartjs-plugin-datalabels.esm.js';import $ from'./../../external/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js';import{debounce as k,convertChartDataToCSV as _}from"../../common/helpers/helpers.js";import D from"./chart.scss.js";import O from"../../common/config/globalOptions.js";import x from"../../common/config/globalOptionsNonRadial.js";import C from"../../common/config/globalOptionsRadial.js";import A from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg.js';import M from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg.js';import L from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg.js';import V from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg.js';import E from'./../../external/@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg.js';import{unsafeSVG as S}from'./../../external/lit-html/directives/unsafe-svg.js';import{getTokenThemeVal as B}from'./../../external/@kyndryl-design-system/shidoka-foundation/common/helpers/color.js';import{Chart as q}from'./../../external/chart.js/dist/chart.js';function F(t){switch(t){case"../../common/config/chartTypes/bar.js":return import("../../common/config/chartTypes/bar.js");case"../../common/config/chartTypes/bubble.js":return import("../../common/config/chartTypes/bubble.js");case"../../common/config/chartTypes/bubbleMap.js":return import("../../common/config/chartTypes/bubbleMap.js");case"../../common/config/chartTypes/choropleth.js":return import("../../common/config/chartTypes/choropleth.js");case"../../common/config/chartTypes/doughnut.js":return import("../../common/config/chartTypes/doughnut.js");case"../../common/config/chartTypes/line.js":return import("../../common/config/chartTypes/line.js");case"../../common/config/chartTypes/meter.js":return import("../../common/config/chartTypes/meter.js");case"../../common/config/chartTypes/pie.js":return import("../../common/config/chartTypes/pie.js");case"../../common/config/chartTypes/polarArea.js":return import("../../common/config/chartTypes/polarArea.js");case"../../common/config/chartTypes/radar.js":return import("../../common/config/chartTypes/radar.js");case"../../common/config/chartTypes/scatter.js":return import("../../common/config/chartTypes/scatter.js");case"../../common/config/chartTypes/treemap.js":return import("../../common/config/chartTypes/treemap.js");default:return new Promise((function(e,s){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}q.register(d,h,m,p,u,g,y,v,$,w);let z=class extends s{constructor(){super(...arguments),this.chartTitle="",this.description="",this.type="",this.options={},this.plugins=[],this.height=null,this.width=null,this.hideDescription=!1,this.hideCaptions=!1,this.hideHeader=!1,this.hideControls=!1,this.noBorder=!1,this.customLabels={toggleView:"Toggle View Mode",toggleFullscreen:"Toggle Fullscreen",downloadMenu:"Download Menu",downloadCsv:"Download as CSV",downloadPng:"Download as PNG",downloadJpg:"Download as JPG"},this.fullscreen=!1,this.chart=null,this.tableView=!1,this.tableDisabled=!1,this.mergedOptions={},this.mergedDatasets={},this._widget=!1,this._resizeObserver=new ResizeObserver(k((()=>{this._resizeChart()}))),this._themeObserver=new MutationObserver((()=>{this.chart&&this.mergeOptions().then((()=>{this.initChart()}))}))}render(){var t;const s={container:!0,fullscreen:this.fullscreen,"no-border":this.noBorder||this._widget,widget:this._widget};return e`
|
|
2
2
|
<div
|
|
3
3
|
class=${n(s)}
|
|
4
4
|
@fullscreenchange=${()=>this.handleFullscreenChange()}
|
|
@@ -30,7 +30,7 @@ import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@l
|
|
|
30
30
|
title=${this.customLabels.toggleView}
|
|
31
31
|
>
|
|
32
32
|
<span slot="icon">
|
|
33
|
-
${this.tableView?S(A):S(
|
|
33
|
+
${this.tableView?S(A):S(M)}
|
|
34
34
|
</span>
|
|
35
35
|
</button>
|
|
36
36
|
`}
|
|
@@ -42,7 +42,7 @@ import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@l
|
|
|
42
42
|
title=${this.customLabels.toggleFullscreen}
|
|
43
43
|
>
|
|
44
44
|
<span slot="icon">
|
|
45
|
-
${this.fullscreen?S(
|
|
45
|
+
${this.fullscreen?S(E):S(V)}
|
|
46
46
|
</span>
|
|
47
47
|
</button>
|
|
48
48
|
|
|
@@ -53,7 +53,7 @@ import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@l
|
|
|
53
53
|
title=${this.customLabels.downloadMenu}
|
|
54
54
|
>
|
|
55
55
|
<span slot="icon">
|
|
56
|
-
${S(
|
|
56
|
+
${S(L)}
|
|
57
57
|
</span>
|
|
58
58
|
</button>
|
|
59
59
|
|
|
@@ -168,5 +168,5 @@ import{__decorate as t}from"../../_virtual/_tslib.js";import'./../../external/@l
|
|
|
168
168
|
</div>
|
|
169
169
|
`:null}
|
|
170
170
|
</div>
|
|
171
|
-
`}_resizeChart(){this.chart&&this.chart.resize()}connectedCallback(){super.connectedCallback(),this._themeObserver.observe(document.querySelector('meta[name="color-scheme"]'),{attributes:!0})}disconnectedCallback(){this._resizeObserver.disconnect(),this._themeObserver.disconnect(),super.disconnectedCallback()}firstUpdated(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".canvas-container");this._resizeObserver.observe(e)}updated(t){this.chart&&(t.has("labels")||t.has("datasets")||t.has("options"))&&this.mergeOptions().then((()=>{this.chart.data.labels=this.labels,this.chart.options=this.mergedOptions,this.chart.data.datasets.forEach(((t,e)=>{this.mergedDatasets.find((e=>e.label===t.label))||this.chart.data.datasets.splice(e,1)})),this.mergedDatasets.forEach((t=>{const e=this.chart.data.datasets.find((e=>e.label===t.label));e?Object.keys(t).forEach((s=>{e[s]=t[s]})):this.chart.data.datasets.push(t)})),this.chart.update()}));let
|
|
171
|
+
`}_resizeChart(){this.chart&&this.chart.resize()}connectedCallback(){super.connectedCallback(),this._themeObserver.observe(document.querySelector('meta[name="color-scheme"]'),{attributes:!0})}disconnectedCallback(){this._resizeObserver.disconnect(),this._themeObserver.disconnect(),super.disconnectedCallback()}firstUpdated(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(".canvas-container");this._resizeObserver.observe(e)}updated(t){var e,s;this.chart&&(t.has("labels")||t.has("datasets")||t.has("options"))&&this.mergeOptions().then((()=>{this.chart.data.labels=this.labels,this.chart.options=this.mergedOptions,this.chart.data.datasets.forEach(((t,e)=>{this.mergedDatasets.find((e=>e.label===t.label))||this.chart.data.datasets.splice(e,1)})),this.mergedDatasets.forEach((t=>{const e=this.chart.data.datasets.find((e=>e.label===t.label));e?Object.keys(t).forEach((s=>{e[s]=t[s]})):this.chart.data.datasets.push(t)})),this.chart.update()}));let o=!1;if(this.datasets&&this.datasets.length)for(const t of this.datasets)if(o=(null===(e=t.data)||void 0===e?void 0:e.length)>0||(null===(s=t.tree)||void 0===s?void 0:s.length)>0||t.tree&&Object.keys(t.tree).length>0,!o){console.error("Missing data for one or more chart datasets.");break}!this.chart&&this.type&&t.has("datasets")&&o&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&(t.has("type")||t.has("plugins")||t.has("width")||t.has("height"))&&(this.mergeOptions().then((()=>{this.initChart()})),this.checkType()),this.chart&&t.has("noBorder")&&this.chart.resize()}initChart(){q.defaults.color=B("--kd-color-text-level-primary");const t="meter"===this.type?j:f;let e=[b,t,...this.plugins];["choropleth","treemap","bubbleMap"].includes(this.type)||(e=[...e,T]),this.chart&&this.chart.destroy(),this.chart=new q(this.canvas,{type:"meter"===this.type?"doughnut":this.type,data:{labels:this.labels,datasets:this.mergedDatasets},options:this.mergedOptions,plugins:e})}async mergeOptions(){const t=[];this.datasets.forEach((e=>{e.type&&t.push(function(t){switch(t){case"../../common/config/chartTypes/bar.js":return import("../../common/config/chartTypes/bar.js");case"../../common/config/chartTypes/bubble.js":return import("../../common/config/chartTypes/bubble.js");case"../../common/config/chartTypes/bubbleMap.js":return import("../../common/config/chartTypes/bubbleMap.js");case"../../common/config/chartTypes/choropleth.js":return import("../../common/config/chartTypes/choropleth.js");case"../../common/config/chartTypes/doughnut.js":return import("../../common/config/chartTypes/doughnut.js");case"../../common/config/chartTypes/line.js":return import("../../common/config/chartTypes/line.js");case"../../common/config/chartTypes/meter.js":return import("../../common/config/chartTypes/meter.js");case"../../common/config/chartTypes/pie.js":return import("../../common/config/chartTypes/pie.js");case"../../common/config/chartTypes/polarArea.js":return import("../../common/config/chartTypes/polarArea.js");case"../../common/config/chartTypes/radar.js":return import("../../common/config/chartTypes/radar.js");case"../../common/config/chartTypes/scatter.js":return import("../../common/config/chartTypes/scatter.js");case"../../common/config/chartTypes/treemap.js":return import("../../common/config/chartTypes/treemap.js");default:return new Promise((function(e,s){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}(`../../common/config/chartTypes/${e.type}.js`))}));const e=await Promise.all([F(`../../common/config/chartTypes/${this.type}.js`),...t]);let s=O(this);["pie","doughnut","radar","polarArea","meter"].includes(this.type)?s=l(s,C()):["choropleth","treemap","bubbleMap"].includes(this.type)||(s=l(s,x(this)));const o=JSON.parse(JSON.stringify(this.datasets));e.forEach((t=>{s=l(s,t.options(this)),o.forEach(((e,s)=>{(!e.type&&t.type===this.type||e.type===t.type)&&(o[s]=l(e,t.datasetOptions(this,s)))}))})),this.options&&(s=l(s,this.options)),this.mergedOptions=s,o.forEach(((t,e)=>{const s=c({mergeArrays:!1});o[e]=s(t,this.datasets[e])})),this.mergedDatasets=o}getTableAxisLabel(){var t,e,s,o,i,a,r,n,l,c,d;let h="";return h="y"===(null===(t=this.options)||void 0===t?void 0:t.indexAxis)?(null===(i=null===(o=null===(s=null===(e=this.options)||void 0===e?void 0:e.scales)||void 0===s?void 0:s.y)||void 0===o?void 0:o.title)||void 0===i?void 0:i.text)?null===(a=this.options)||void 0===a?void 0:a.scales.y.title.text:"Y Axis":(null===(c=null===(l=null===(n=null===(r=this.options)||void 0===r?void 0:r.scales)||void 0===n?void 0:n.x)||void 0===l?void 0:l.title)||void 0===c?void 0:c.text)?null===(d=this.options)||void 0===d?void 0:d.scales.x.title.text:"X Axis",h}handleViewToggle(){this.tableView=!this.tableView}checkType(){this.tableDisabled=[].includes(this.type)}handleDownloadImage(t,e){t.preventDefault();const s=e?"image/jpeg":"image/png",o=e?"jpg":"png",i=document.createElement("a");i.href=this.chart.toBase64Image(s,1),i.download=this.chartTitle+"."+o,i.click()}handleDownloadCsv(t){t.preventDefault();let e="";for(let t=0;t<this.chart.data.datasets.length;t++)e+=_({data:this.chart.data.datasets[t],labels:this.labels});if(null==e)return;const s=this.chartTitle+".csv";e.match(/^data:text\/csv/i)||(e="data:text/csv;charset=utf-8,"+e);const o=encodeURI(e),i=document.createElement("a");i.setAttribute("href",o),i.setAttribute("download",s),document.body.appendChild(i),i.click(),document.body.removeChild(i)}handleFullscreen(){var t;(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)?document.exitFullscreen():this.container.requestFullscreen()}handleFullscreenChange(){var t;this.fullscreen=null!==(null===(t=this.shadowRoot)||void 0===t?void 0:t.fullscreenElement)}};z.styles=D,t([i({type:String})],z.prototype,"chartTitle",void 0),t([i({type:String})],z.prototype,"description",void 0),t([i({type:String})],z.prototype,"type",void 0),t([i({type:Array})],z.prototype,"labels",void 0),t([i({type:Array})],z.prototype,"datasets",void 0),t([i({type:Object})],z.prototype,"options",void 0),t([i({type:Array})],z.prototype,"plugins",void 0),t([i({type:Number})],z.prototype,"height",void 0),t([i({type:Number})],z.prototype,"width",void 0),t([i({type:Boolean})],z.prototype,"hideDescription",void 0),t([i({type:Boolean})],z.prototype,"hideCaptions",void 0),t([i({type:Boolean})],z.prototype,"hideHeader",void 0),t([i({type:Boolean})],z.prototype,"hideControls",void 0),t([i({type:Boolean})],z.prototype,"noBorder",void 0),t([i({type:Object})],z.prototype,"customLabels",void 0),t([a()],z.prototype,"fullscreen",void 0),t([r(".container")],z.prototype,"container",void 0),t([r("canvas")],z.prototype,"canvas",void 0),t([r(".closed-caption")],z.prototype,"ccDiv",void 0),t([a()],z.prototype,"chart",void 0),t([a()],z.prototype,"tableView",void 0),t([a()],z.prototype,"tableDisabled",void 0),t([a()],z.prototype,"mergedOptions",void 0),t([a()],z.prototype,"mergedDatasets",void 0),t([a()],z.prototype,"_widget",void 0),z=t([o("kd-chart")],z);export{z as KDChart};
|
|
172
172
|
//# sourceMappingURL=chart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sources":["../../../src/components/chart/chart.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { deepmerge, deepmergeCustom } from 'deepmerge-ts';\nimport Chart from 'chart.js/auto';\nimport 'chartjs-adapter-date-fns';\nimport {\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n} from 'chartjs-chart-geo';\nimport { TreemapController, TreemapElement } from 'chartjs-chart-treemap';\nimport canvasBackgroundPlugin from '../../common/plugins/canvasBackground';\nimport doughnutLabelPlugin from '../../common/plugins/doughnutLabel';\nimport meterGaugePlugin from '../../common/plugins/meterGaugeNeedle';\nimport a11yPlugin from 'chartjs-plugin-a11y-legend';\nimport datalabelsPlugin from 'chartjs-plugin-datalabels';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport { convertChartDataToCSV, debounce } from '../../common/helpers/helpers';\nimport ChartScss from './chart.scss';\nimport globalOptions from '../../common/config/globalOptions';\nimport globalOptionsNonRadial from '../../common/config/globalOptionsNonRadial';\nimport globalOptionsRadial from '../../common/config/globalOptionsRadial';\nimport chartIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg';\nimport tableIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg';\nimport downloadIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg';\nimport maximizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg';\nimport minimizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nChart.register(\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n TreemapController,\n TreemapElement,\n annotationPlugin,\n datalabelsPlugin\n);\n\n/**\n * Chart.js wrapper component.\n * @slot unnamed - Slot for custom content between header and chart.\n * @slot controls - Slot for custom controls such as an overflow menu.\n * @slot tooltip - Slot for tooltip in header.\n * @slot draghandle - Slot for widget drag handle.\n */\n@customElement('kd-chart')\nexport class KDChart extends LitElement {\n static override styles = ChartScss;\n\n /** Chart title. */\n @property({ type: String })\n chartTitle = '';\n\n /** Chart description. */\n @property({ type: String })\n description = '';\n\n /** Chart.js chart type. */\n @property({ type: String })\n type: any = '';\n\n /** Chart.js data.labels. */\n @property({ type: Array })\n labels!: Array<string>;\n\n /** Chart.js data.datasets. */\n @property({ type: Array })\n datasets!: Array<any>;\n\n /** Chart.js options. Can override Shidoka defaults. */\n @property({ type: Object })\n options: any = {};\n\n /** Chart.js additional plugins. Must be registerable inline via Chart.plugins array, not globally via Chart.register. */\n @property({ type: Array })\n plugins: any = [];\n\n /** Chart.js canvas height (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n height: any = null;\n\n /** Chart.js canvas width (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n width: any = null;\n\n /** Hides the description visually. */\n @property({ type: Boolean })\n hideDescription = false;\n\n /** Hides the closed captions visually. */\n @property({ type: Boolean })\n hideCaptions = false;\n\n /** Hides the title & description. */\n @property({ type: Boolean })\n hideHeader = false;\n\n /** Hides the controls. */\n @property({ type: Boolean })\n hideControls = false;\n\n /** Removes the outer border and padding. */\n @property({ type: Boolean })\n noBorder = false;\n\n /** Customizable text labels. */\n @property({ type: Object })\n customLabels = {\n toggleView: 'Toggle View Mode',\n toggleFullscreen: 'Toggle Fullscreen',\n downloadMenu: 'Download Menu',\n downloadCsv: 'Download as CSV',\n downloadPng: 'Download as PNG',\n downloadJpg: 'Download as JPG',\n };\n\n /** Fullscreen state.\n * @ignore\n */\n @state()\n fullscreen = false;\n\n /**\n * Queries the container element.\n * @ignore\n */\n @query('.container')\n container!: HTMLCanvasElement;\n\n /**\n * Queries the canvas element.\n * @ignore\n */\n @query('canvas')\n canvas!: HTMLCanvasElement;\n\n /**\n * Queries the closed caption div.\n * @ignore\n */\n @query('.closed-caption')\n ccDiv!: HTMLDivElement;\n\n /** The chart instance.\n * @ignore\n */\n @state()\n chart: any = null;\n\n /** Table view mode.\n * @ignore\n */\n @state()\n tableView = false;\n\n /** Disable table view feature.\n * @ignore\n */\n @state()\n tableDisabled = false;\n\n /** Merged options.\n * @ignore\n */\n @state()\n mergedOptions: any = {};\n\n /** Merged datasets.\n * @ignore\n */\n @state()\n mergedDatasets: any = {};\n\n /** Is Widget. Inherited from kyn-widget.\n * @internal\n */\n @state()\n _widget = false;\n\n /** ResizeObserver for canvas-container.\n * @internal\n */\n _resizeObserver: any = new ResizeObserver(\n debounce(() => {\n this._resizeChart();\n })\n );\n\n _themeObserver: any = new MutationObserver(() => {\n if (this.chart) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n }\n });\n\n override render() {\n const Classes = {\n container: true,\n fullscreen: this.fullscreen,\n 'no-border': this.noBorder || this._widget,\n widget: this._widget,\n };\n\n return html`\n <div\n class=${classMap(Classes)}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n ${!this.hideHeader || !this.hideControls\n ? html`\n <div class=\"header\">\n ${!this.hideHeader\n ? html`\n <slot name=\"draghandle\"></slot>\n\n <div id=\"titleDesc\">\n <div class=\"title\">\n ${this.chartTitle}\n <slot name=\"tooltip\"></slot>\n </div>\n <div\n class=\"description ${this.hideDescription\n ? 'hidden-visually'\n : ''}\"\n >\n ${this.description}\n </div>\n </div>\n `\n : null}\n ${!this.hideControls\n ? html`\n <div class=\"controls\">\n ${!this.tableDisabled\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleViewToggle()}\n aria-label=${this.customLabels.toggleView}\n title=${this.customLabels.toggleView}\n >\n <span slot=\"icon\">\n ${this.tableView\n ? unsafeSVG(chartIcon)\n : unsafeSVG(tableIcon)}\n </span>\n </button>\n `\n : null}\n\n <button\n class=\"control-button\"\n @click=${() => this.handleFullscreen()}\n aria-label=${this.customLabels.toggleFullscreen}\n title=${this.customLabels.toggleFullscreen}\n >\n <span slot=\"icon\">\n ${this.fullscreen\n ? unsafeSVG(minimizeIcon)\n : unsafeSVG(maximizeIcon)}\n </span>\n </button>\n\n <div class=\"download\">\n <button\n class=\"control-button\"\n aria-label=${this.customLabels.downloadMenu}\n title=${this.customLabels.downloadMenu}\n >\n <span slot=\"icon\">\n ${unsafeSVG(downloadIcon)}\n </span>\n </button>\n\n <div class=\"download-menu\">\n ${!this.tableDisabled\n ? html`\n <button\n @click=${(e: Event) =>\n this.handleDownloadCsv(e)}\n >\n ${this.customLabels.downloadCsv}\n </button>\n `\n : null}\n <button\n @click=${(e: Event) =>\n this.handleDownloadImage(e, false)}\n >\n ${this.customLabels.downloadPng}\n </button>\n <button\n @click=${(e: Event) =>\n this.handleDownloadImage(e, true)}\n >\n ${this.customLabels.downloadJpg}\n </button>\n </div>\n </div>\n\n <slot name=\"controls\"></slot>\n </div>\n `\n : null}\n </div>\n `\n : null}\n\n <div>\n <slot></slot>\n </div>\n\n <figure class=\"${this.tableView ? 'hidden' : ''}\">\n <div\n class=\"canvas-container\"\n style=\"${this.width ? `width: ${this.width}px;` : ''}\n ${this.height ? `height: ${this.height}px;` : ''}\"\n >\n <canvas role=\"img\" aria-labelledby=\"titleDesc\"></canvas>\n </div>\n <figcaption>\n <div\n class=\"closed-caption ${this.hideCaptions\n ? 'hidden-visually'\n : ''}\"\n ></div>\n </figcaption>\n </figure>\n\n ${!this.tableDisabled && this.tableView\n ? html`\n <div class=\"table\">\n <table>\n <thead>\n <tr>\n ${this.labels?.length || this.type === 'treemap'\n ? html`<th>${this.getTableAxisLabel()}</th>`\n : null}\n ${this.datasets.map((dataset) => {\n return html`<th>${dataset.label}</th>`;\n })}\n </tr>\n </thead>\n\n <tbody>\n ${this.type === 'treemap'\n ? Array.isArray(this.datasets[0].tree)\n ? this.datasets[0].tree.map((_value: any) => {\n return html`\n <tr>\n <td>${_value[this.datasets[0].labelKey]}</td>\n <td>${_value[this.datasets[0].key]}</td>\n </tr>\n `;\n })\n : Object.entries(this.datasets[0].tree).map(\n (_value: any) => {\n const HtmlStrings = [];\n\n if (_value[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_value[0]}</td>\n <td>${_value[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_value[1]).map(\n (_subValue: any) => {\n if (_subValue[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_subValue[0]}</td>\n <td>${_subValue[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_subValue[1]).map(\n (_subSubValue: any) => {\n HtmlStrings.push(html`\n <tr>\n <td>${_subSubValue[0]}</td>\n <td>${_subSubValue[1].value}</td>\n </tr>\n `);\n }\n );\n }\n }\n );\n }\n\n return HtmlStrings;\n }\n )\n : this.datasets[0].data.map((_value: any, i: number) => {\n const IndexAxis = this.options.indexAxis || 'x';\n const NonIndexAxis = IndexAxis === 'x' ? 'y' : 'x';\n\n return html`\n <tr>\n ${this.labels.length\n ? html`\n ${this.options?.scales[IndexAxis]?.type ===\n 'time'\n ? html`\n <td>\n ${new Date(\n this.labels[i]\n ).toLocaleString()}\n </td>\n `\n : html`<td>${this.labels[i]}</td>`}\n `\n : null}\n ${this.datasets.map((dataset) => {\n const dataPoint = dataset.data[i];\n\n if (\n this.type === 'bubbleMap' ||\n this.type === 'choropleth'\n ) {\n return html`\n <td>${dataset.data[i].value}</td>\n `;\n } else if (\n this.options?.scales[NonIndexAxis]?.type ===\n 'time'\n ) {\n return html`\n <td>\n ${new Date(dataPoint).toLocaleString()}\n </td>\n `;\n } else if (Array.isArray(dataPoint)) {\n // handle data in array format\n return html`\n <td>${dataPoint[0]}, ${dataPoint[1]}</td>\n `;\n } else if (\n typeof dataPoint === 'object' &&\n !Array.isArray(dataPoint) &&\n dataPoint !== null\n ) {\n // handle data in object format\n return html`\n <td>\n ${Object.keys(dataPoint).map((key) => {\n const Label =\n this.options.scales[key]?.title\n .text || key;\n const DisplayData =\n this.options.scales[key]?.type ===\n 'time'\n ? new Date(\n dataPoint[key]\n ).toLocaleString()\n : dataPoint[key];\n\n return html`\n <div>\n <strong>${Label}:</strong>\n ${DisplayData}\n </div>\n `;\n })}\n </td>\n `;\n } else {\n // handle data in number/basic format\n return html`<td>${dataset.data[i]}</td>`;\n }\n })}\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n `\n : null}\n </div>\n `;\n }\n\n private _resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this._themeObserver.observe(\n document.querySelector('meta[name=\"color-scheme\"]'),\n { attributes: true }\n );\n }\n\n override disconnectedCallback() {\n this._resizeObserver.disconnect();\n this._themeObserver.disconnect();\n\n super.disconnectedCallback();\n }\n\n override firstUpdated() {\n const el = this.shadowRoot?.querySelector('.canvas-container');\n this._resizeObserver.observe(el);\n }\n\n override updated(changedProps: any) {\n // Update chart instance when data changes.\n if (\n this.chart &&\n (changedProps.has('labels') ||\n changedProps.has('datasets') ||\n changedProps.has('options'))\n ) {\n this.mergeOptions().then(() => {\n this.chart.data.labels = this.labels;\n this.chart.options = this.mergedOptions;\n\n // remove datasets not in mergedDatasets\n this.chart.data.datasets.forEach((dataset: any, index: number) => {\n const NewDataset = this.mergedDatasets.find(\n (newDataset: any) => newDataset.label === dataset.label\n );\n\n if (!NewDataset) {\n // remove\n this.chart.data.datasets.splice(index, 1);\n }\n });\n\n // update datasets, add new ones\n this.mergedDatasets.forEach((dataset: any) => {\n const OldDataset = this.chart.data.datasets.find(\n (oldDataset: any) => oldDataset.label === dataset.label\n );\n\n if (!OldDataset) {\n // add new dataset\n this.chart.data.datasets.push(dataset);\n } else {\n // update each key/entry in the dataset object\n Object.keys(dataset).forEach((key) => {\n OldDataset[key] = dataset[key];\n });\n }\n });\n\n this.chart.update();\n });\n }\n\n // init chart\n // check to make sure initial datasets + data have been provided\n let hasData = false;\n if (this.datasets && this.datasets.length) {\n this.datasets.forEach((dataset) => {\n hasData =\n dataset.data?.length ||\n dataset.tree?.length ||\n Object.keys(dataset.tree).length;\n });\n }\n\n if (!this.chart && this.type && changedProps.has('datasets') && hasData) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n // Re-init chart instance when type, plugins, colorPalette, width, or height change.\n if (\n this.chart &&\n (changedProps.has('type') ||\n changedProps.has('plugins') ||\n changedProps.has('width') ||\n changedProps.has('height'))\n ) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n if (this.chart && changedProps.has('noBorder')) {\n this.chart.resize();\n }\n }\n\n /**\n * Initializes a bar chart using the Chart.js library with provided labels, datasets,\n * and options.\n */\n private initChart() {\n const ignoredTypes = ['choropleth', 'treemap', 'bubbleMap'];\n\n // Chart.defaults.font.family = getComputedStyle(\n // document.documentElement\n // ).getPropertyValue('--kd-font-family-secondary');\n Chart.defaults.color = getTokenThemeVal('--kd-color-text-level-primary');\n\n // let plugins = [\n // canvasBackgroundPlugin,\n // doughnutLabelPlugin,\n // meterGaugePlugin,\n // ...this.plugins,\n // ];\n\n // Select plugin when type='meter'. Otherwise both plugins (meterGaugePlugin & doughnutLabelPlugin) are called\n const pluginSelectForDoghnutMeter =\n this.type === 'meter' ? meterGaugePlugin : doughnutLabelPlugin;\n\n let plugins = [\n canvasBackgroundPlugin,\n pluginSelectForDoghnutMeter,\n ...this.plugins,\n ];\n\n // only add certain plugins for standard chart types\n if (!ignoredTypes.includes(this.type)) {\n // plugins = [...plugins, a11yPlugin, musicPlugin];\n plugins = [...plugins, a11yPlugin];\n }\n\n if (this.chart) {\n this.chart.destroy();\n }\n\n this.chart = new Chart(this.canvas, {\n //type: this.type,\n type: this.type === 'meter' ? 'doughnut' : this.type,\n data: {\n labels: this.labels,\n datasets: this.mergedDatasets,\n },\n options: this.mergedOptions,\n plugins: plugins,\n });\n }\n\n /**\n * Merges various chart type options and dataset options to create a\n * final set of options for a chart.\n */\n private async mergeOptions() {\n const radialTypes = ['pie', 'doughnut', 'radar', 'polarArea', 'meter'];\n const ignoredTypes = ['choropleth', 'treemap', 'bubbleMap'];\n\n const additionalTypeImports: any = [];\n this.datasets.forEach((dataset) => {\n // get chart types from datasets so we can import additional configs\n if (dataset.type) {\n additionalTypeImports.push(\n import(`../../common/config/chartTypes/${dataset.type}.js`)\n );\n }\n });\n\n // import main and additional chart type configs\n const chartTypeConfigs = await Promise.all([\n import(`../../common/config/chartTypes/${this.type}.js`),\n ...additionalTypeImports,\n ]);\n\n // start with global options\n let mergedOptions: any = globalOptions(this);\n\n // merge global type options\n if (radialTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsRadial(this));\n } else if (!ignoredTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsNonRadial(this));\n }\n\n const mergedDatasets: any = JSON.parse(JSON.stringify(this.datasets));\n\n chartTypeConfigs.forEach((chartTypeConfig: any) => {\n // merge all of the imported chart type options with the global options\n mergedOptions = deepmerge(mergedOptions, chartTypeConfig.options(this));\n\n // merge all of the imported chart type dataset options\n mergedDatasets.forEach((dataset: any, index: number) => {\n if (\n (!dataset.type && chartTypeConfig.type === this.type) ||\n dataset.type === chartTypeConfig.type\n ) {\n mergedDatasets[index] = deepmerge(\n dataset,\n chartTypeConfig.datasetOptions(this, index)\n );\n }\n });\n });\n\n if (this.options) {\n // merge any consumer supplied options with defaults\n mergedOptions = deepmerge(mergedOptions, this.options);\n }\n this.mergedOptions = mergedOptions;\n\n // merge default chart type dataset options with consumer supplied datasets\n mergedDatasets.forEach((dataset: object, index: number) => {\n const customDeepmerge = deepmergeCustom({\n mergeArrays: false,\n });\n mergedDatasets[index] = customDeepmerge(dataset, this.datasets[index]);\n });\n\n this.mergedDatasets = mergedDatasets;\n }\n\n private getTableAxisLabel() {\n let label = '';\n\n if (this.options?.indexAxis === 'y') {\n if (this.options?.scales?.y?.title?.text) {\n label = this.options?.scales.y.title.text;\n } else {\n label = 'Y Axis';\n }\n } else {\n if (this.options?.scales?.x?.title?.text) {\n label = this.options?.scales.x.title.text;\n } else {\n label = 'X Axis';\n }\n }\n\n return label;\n }\n\n private handleViewToggle() {\n this.tableView = !this.tableView;\n }\n\n private checkType() {\n // chart types that can't have a data table view\n const blacklist: any = [];\n this.tableDisabled = blacklist.includes(this.type);\n }\n\n private handleDownloadImage(e: Event, jpeg: boolean) {\n e.preventDefault();\n\n const imgFormat = jpeg ? 'image/jpeg' : 'image/png';\n const fileExt = jpeg ? 'jpg' : 'png';\n const a = document.createElement('a');\n\n a.href = this.chart.toBase64Image(imgFormat, 1);\n a.download = this.chartTitle + '.' + fileExt;\n\n // trigger the download\n a.click();\n }\n\n private handleDownloadCsv(e: Event) {\n e.preventDefault();\n let csv = '';\n\n for (let i = 0; i < this.chart.data.datasets.length; i++) {\n csv += convertChartDataToCSV({\n data: this.chart.data.datasets[i],\n labels: this.labels,\n });\n }\n if (csv == null) return;\n\n const filename = this.chartTitle + '.csv';\n if (!csv.match(/^data:text\\/csv/i)) {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n }\n\n // not sure if anything below this comment works\n const data = encodeURI(csv);\n const link = document.createElement('a');\n link.setAttribute('href', data);\n link.setAttribute('download', filename);\n document.body.appendChild(link); // Required for FF\n link.click();\n document.body.removeChild(link);\n }\n\n private handleFullscreen() {\n if (this.shadowRoot?.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.fullscreen = this.shadowRoot?.fullscreenElement !== null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-chart': KDChart;\n }\n}\n"],"names":["Chart","register","ChoroplethController","BubbleMapController","GeoFeature","ColorScale","SizeScale","ProjectionScale","TreemapController","TreemapElement","annotationPlugin","datalabelsPlugin","KDChart","LitElement","constructor","this","chartTitle","description","type","options","plugins","height","width","hideDescription","hideCaptions","hideHeader","hideControls","noBorder","customLabels","toggleView","toggleFullscreen","downloadMenu","downloadCsv","downloadPng","downloadJpg","fullscreen","chart","tableView","tableDisabled","mergedOptions","mergedDatasets","_widget","_resizeObserver","ResizeObserver","debounce","_resizeChart","_themeObserver","MutationObserver","mergeOptions","then","initChart","render","Classes","container","widget","html","classMap","handleFullscreenChange","handleViewToggle","unsafeSVG","chartIcon","tableIcon","handleFullscreen","minimizeIcon","maximizeIcon","downloadIcon","e","handleDownloadCsv","handleDownloadImage","_a","labels","length","getTableAxisLabel","datasets","map","dataset","label","Array","isArray","tree","_value","labelKey","key","Object","entries","HtmlStrings","value","push","_subValue","_subSubValue","data","i","IndexAxis","indexAxis","NonIndexAxis","_b","scales","Date","toLocaleString","dataPoint","keys","Label","title","text","DisplayData","resize","connectedCallback","super","observe","document","querySelector","attributes","disconnectedCallback","disconnect","firstUpdated","el","shadowRoot","updated","changedProps","has","forEach","index","find","newDataset","splice","OldDataset","oldDataset","update","hasData","checkType","defaults","color","getTokenThemeVal","pluginSelectForDoghnutMeter","meterGaugePlugin","doughnutLabelPlugin","canvasBackgroundPlugin","includes","a11yPlugin","destroy","canvas","additionalTypeImports","__variableDynamicImportRuntime0__","chartTypeConfigs","Promise","all","__variableDynamicImportRuntime1__","globalOptions","deepmerge","globalOptionsRadial","globalOptionsNonRadial","JSON","parse","stringify","chartTypeConfig","datasetOptions","customDeepmerge","deepmergeCustom","mergeArrays","_e","_d","_c","y","_f","_k","_j","_h","_g","x","_l","jpeg","preventDefault","imgFormat","fileExt","a","createElement","href","toBase64Image","download","click","csv","convertChartDataToCSV","filename","match","encodeURI","link","setAttribute","body","appendChild","removeChild","fullscreenElement","exitFullscreen","requestFullscreen","styles","ChartScss","__decorate","property","String","prototype","Number","Boolean","state","query","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chart.js","sources":["../../../src/components/chart/chart.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state, query } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { deepmerge, deepmergeCustom } from 'deepmerge-ts';\nimport Chart from 'chart.js/auto';\nimport 'chartjs-adapter-date-fns';\nimport {\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n} from 'chartjs-chart-geo';\nimport { TreemapController, TreemapElement } from 'chartjs-chart-treemap';\nimport canvasBackgroundPlugin from '../../common/plugins/canvasBackground';\nimport doughnutLabelPlugin from '../../common/plugins/doughnutLabel';\nimport meterGaugePlugin from '../../common/plugins/meterGaugeNeedle';\nimport a11yPlugin from 'chartjs-plugin-a11y-legend';\nimport datalabelsPlugin from 'chartjs-plugin-datalabels';\nimport annotationPlugin from 'chartjs-plugin-annotation';\nimport { convertChartDataToCSV, debounce } from '../../common/helpers/helpers';\nimport ChartScss from './chart.scss';\nimport globalOptions from '../../common/config/globalOptions';\nimport globalOptionsNonRadial from '../../common/config/globalOptionsNonRadial';\nimport globalOptionsRadial from '../../common/config/globalOptionsRadial';\nimport chartIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/analytics.svg';\nimport tableIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/table-view.svg';\nimport downloadIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/download.svg';\nimport maximizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/expand.svg';\nimport minimizeIcon from '@kyndryl-design-system/shidoka-icons/svg/monochrome/16/shrink.svg';\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js';\nimport { getTokenThemeVal } from '@kyndryl-design-system/shidoka-foundation/common/helpers/color';\n\nChart.register(\n ChoroplethController,\n BubbleMapController,\n GeoFeature,\n ColorScale,\n SizeScale,\n ProjectionScale,\n TreemapController,\n TreemapElement,\n annotationPlugin,\n datalabelsPlugin\n);\n\n/**\n * Chart.js wrapper component.\n * @slot unnamed - Slot for custom content between header and chart.\n * @slot controls - Slot for custom controls such as an overflow menu.\n * @slot tooltip - Slot for tooltip in header.\n * @slot draghandle - Slot for widget drag handle.\n */\n@customElement('kd-chart')\nexport class KDChart extends LitElement {\n static override styles = ChartScss;\n\n /** Chart title. */\n @property({ type: String })\n chartTitle = '';\n\n /** Chart description. */\n @property({ type: String })\n description = '';\n\n /** Chart.js chart type. */\n @property({ type: String })\n type: any = '';\n\n /** Chart.js data.labels. */\n @property({ type: Array })\n labels!: Array<string>;\n\n /** Chart.js data.datasets. */\n @property({ type: Array })\n datasets!: Array<any>;\n\n /** Chart.js options. Can override Shidoka defaults. */\n @property({ type: Object })\n options: any = {};\n\n /** Chart.js additional plugins. Must be registerable inline via Chart.plugins array, not globally via Chart.register. */\n @property({ type: Array })\n plugins: any = [];\n\n /** Chart.js canvas height (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n height: any = null;\n\n /** Chart.js canvas width (px). Disables maintainAspectRatio option. */\n @property({ type: Number })\n width: any = null;\n\n /** Hides the description visually. */\n @property({ type: Boolean })\n hideDescription = false;\n\n /** Hides the closed captions visually. */\n @property({ type: Boolean })\n hideCaptions = false;\n\n /** Hides the title & description. */\n @property({ type: Boolean })\n hideHeader = false;\n\n /** Hides the controls. */\n @property({ type: Boolean })\n hideControls = false;\n\n /** Removes the outer border and padding. */\n @property({ type: Boolean })\n noBorder = false;\n\n /** Customizable text labels. */\n @property({ type: Object })\n customLabels = {\n toggleView: 'Toggle View Mode',\n toggleFullscreen: 'Toggle Fullscreen',\n downloadMenu: 'Download Menu',\n downloadCsv: 'Download as CSV',\n downloadPng: 'Download as PNG',\n downloadJpg: 'Download as JPG',\n };\n\n /** Fullscreen state.\n * @ignore\n */\n @state()\n fullscreen = false;\n\n /**\n * Queries the container element.\n * @ignore\n */\n @query('.container')\n container!: HTMLCanvasElement;\n\n /**\n * Queries the canvas element.\n * @ignore\n */\n @query('canvas')\n canvas!: HTMLCanvasElement;\n\n /**\n * Queries the closed caption div.\n * @ignore\n */\n @query('.closed-caption')\n ccDiv!: HTMLDivElement;\n\n /** The chart instance.\n * @ignore\n */\n @state()\n chart: any = null;\n\n /** Table view mode.\n * @ignore\n */\n @state()\n tableView = false;\n\n /** Disable table view feature.\n * @ignore\n */\n @state()\n tableDisabled = false;\n\n /** Merged options.\n * @ignore\n */\n @state()\n mergedOptions: any = {};\n\n /** Merged datasets.\n * @ignore\n */\n @state()\n mergedDatasets: any = {};\n\n /** Is Widget. Inherited from kyn-widget.\n * @internal\n */\n @state()\n _widget = false;\n\n /** ResizeObserver for canvas-container.\n * @internal\n */\n _resizeObserver: any = new ResizeObserver(\n debounce(() => {\n this._resizeChart();\n })\n );\n\n _themeObserver: any = new MutationObserver(() => {\n if (this.chart) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n }\n });\n\n override render() {\n const Classes = {\n container: true,\n fullscreen: this.fullscreen,\n 'no-border': this.noBorder || this._widget,\n widget: this._widget,\n };\n\n return html`\n <div\n class=${classMap(Classes)}\n @fullscreenchange=${() => this.handleFullscreenChange()}\n >\n ${!this.hideHeader || !this.hideControls\n ? html`\n <div class=\"header\">\n ${!this.hideHeader\n ? html`\n <slot name=\"draghandle\"></slot>\n\n <div id=\"titleDesc\">\n <div class=\"title\">\n ${this.chartTitle}\n <slot name=\"tooltip\"></slot>\n </div>\n <div\n class=\"description ${this.hideDescription\n ? 'hidden-visually'\n : ''}\"\n >\n ${this.description}\n </div>\n </div>\n `\n : null}\n ${!this.hideControls\n ? html`\n <div class=\"controls\">\n ${!this.tableDisabled\n ? html`\n <button\n class=\"control-button\"\n @click=${() => this.handleViewToggle()}\n aria-label=${this.customLabels.toggleView}\n title=${this.customLabels.toggleView}\n >\n <span slot=\"icon\">\n ${this.tableView\n ? unsafeSVG(chartIcon)\n : unsafeSVG(tableIcon)}\n </span>\n </button>\n `\n : null}\n\n <button\n class=\"control-button\"\n @click=${() => this.handleFullscreen()}\n aria-label=${this.customLabels.toggleFullscreen}\n title=${this.customLabels.toggleFullscreen}\n >\n <span slot=\"icon\">\n ${this.fullscreen\n ? unsafeSVG(minimizeIcon)\n : unsafeSVG(maximizeIcon)}\n </span>\n </button>\n\n <div class=\"download\">\n <button\n class=\"control-button\"\n aria-label=${this.customLabels.downloadMenu}\n title=${this.customLabels.downloadMenu}\n >\n <span slot=\"icon\">\n ${unsafeSVG(downloadIcon)}\n </span>\n </button>\n\n <div class=\"download-menu\">\n ${!this.tableDisabled\n ? html`\n <button\n @click=${(e: Event) =>\n this.handleDownloadCsv(e)}\n >\n ${this.customLabels.downloadCsv}\n </button>\n `\n : null}\n <button\n @click=${(e: Event) =>\n this.handleDownloadImage(e, false)}\n >\n ${this.customLabels.downloadPng}\n </button>\n <button\n @click=${(e: Event) =>\n this.handleDownloadImage(e, true)}\n >\n ${this.customLabels.downloadJpg}\n </button>\n </div>\n </div>\n\n <slot name=\"controls\"></slot>\n </div>\n `\n : null}\n </div>\n `\n : null}\n\n <div>\n <slot></slot>\n </div>\n\n <figure class=\"${this.tableView ? 'hidden' : ''}\">\n <div\n class=\"canvas-container\"\n style=\"${this.width ? `width: ${this.width}px;` : ''}\n ${this.height ? `height: ${this.height}px;` : ''}\"\n >\n <canvas role=\"img\" aria-labelledby=\"titleDesc\"></canvas>\n </div>\n <figcaption>\n <div\n class=\"closed-caption ${this.hideCaptions\n ? 'hidden-visually'\n : ''}\"\n ></div>\n </figcaption>\n </figure>\n\n ${!this.tableDisabled && this.tableView\n ? html`\n <div class=\"table\">\n <table>\n <thead>\n <tr>\n ${this.labels?.length || this.type === 'treemap'\n ? html`<th>${this.getTableAxisLabel()}</th>`\n : null}\n ${this.datasets.map((dataset) => {\n return html`<th>${dataset.label}</th>`;\n })}\n </tr>\n </thead>\n\n <tbody>\n ${this.type === 'treemap'\n ? Array.isArray(this.datasets[0].tree)\n ? this.datasets[0].tree.map((_value: any) => {\n return html`\n <tr>\n <td>${_value[this.datasets[0].labelKey]}</td>\n <td>${_value[this.datasets[0].key]}</td>\n </tr>\n `;\n })\n : Object.entries(this.datasets[0].tree).map(\n (_value: any) => {\n const HtmlStrings = [];\n\n if (_value[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_value[0]}</td>\n <td>${_value[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_value[1]).map(\n (_subValue: any) => {\n if (_subValue[1].value) {\n HtmlStrings.push(html`\n <tr>\n <td>${_subValue[0]}</td>\n <td>${_subValue[1].value}</td>\n </tr>\n `);\n } else {\n Object.entries(_subValue[1]).map(\n (_subSubValue: any) => {\n HtmlStrings.push(html`\n <tr>\n <td>${_subSubValue[0]}</td>\n <td>${_subSubValue[1].value}</td>\n </tr>\n `);\n }\n );\n }\n }\n );\n }\n\n return HtmlStrings;\n }\n )\n : this.datasets[0].data.map((_value: any, i: number) => {\n const IndexAxis = this.options.indexAxis || 'x';\n const NonIndexAxis = IndexAxis === 'x' ? 'y' : 'x';\n\n return html`\n <tr>\n ${this.labels.length\n ? html`\n ${this.options?.scales[IndexAxis]?.type ===\n 'time'\n ? html`\n <td>\n ${new Date(\n this.labels[i]\n ).toLocaleString()}\n </td>\n `\n : html`<td>${this.labels[i]}</td>`}\n `\n : null}\n ${this.datasets.map((dataset) => {\n const dataPoint = dataset.data[i];\n\n if (\n this.type === 'bubbleMap' ||\n this.type === 'choropleth'\n ) {\n return html`\n <td>${dataset.data[i].value}</td>\n `;\n } else if (\n this.options?.scales[NonIndexAxis]?.type ===\n 'time'\n ) {\n return html`\n <td>\n ${new Date(dataPoint).toLocaleString()}\n </td>\n `;\n } else if (Array.isArray(dataPoint)) {\n // handle data in array format\n return html`\n <td>${dataPoint[0]}, ${dataPoint[1]}</td>\n `;\n } else if (\n typeof dataPoint === 'object' &&\n !Array.isArray(dataPoint) &&\n dataPoint !== null\n ) {\n // handle data in object format\n return html`\n <td>\n ${Object.keys(dataPoint).map((key) => {\n const Label =\n this.options.scales[key]?.title\n .text || key;\n const DisplayData =\n this.options.scales[key]?.type ===\n 'time'\n ? new Date(\n dataPoint[key]\n ).toLocaleString()\n : dataPoint[key];\n\n return html`\n <div>\n <strong>${Label}:</strong>\n ${DisplayData}\n </div>\n `;\n })}\n </td>\n `;\n } else {\n // handle data in number/basic format\n return html`<td>${dataset.data[i]}</td>`;\n }\n })}\n </tr>\n `;\n })}\n </tbody>\n </table>\n </div>\n `\n : null}\n </div>\n `;\n }\n\n private _resizeChart() {\n if (this.chart) {\n this.chart.resize();\n }\n }\n\n override connectedCallback() {\n super.connectedCallback();\n\n this._themeObserver.observe(\n document.querySelector('meta[name=\"color-scheme\"]'),\n { attributes: true }\n );\n }\n\n override disconnectedCallback() {\n this._resizeObserver.disconnect();\n this._themeObserver.disconnect();\n\n super.disconnectedCallback();\n }\n\n override firstUpdated() {\n const el = this.shadowRoot?.querySelector('.canvas-container');\n this._resizeObserver.observe(el);\n }\n\n override updated(changedProps: any) {\n // Update chart instance when data changes.\n if (\n this.chart &&\n (changedProps.has('labels') ||\n changedProps.has('datasets') ||\n changedProps.has('options'))\n ) {\n this.mergeOptions().then(() => {\n this.chart.data.labels = this.labels;\n this.chart.options = this.mergedOptions;\n\n // remove datasets not in mergedDatasets\n this.chart.data.datasets.forEach((dataset: any, index: number) => {\n const NewDataset = this.mergedDatasets.find(\n (newDataset: any) => newDataset.label === dataset.label\n );\n\n if (!NewDataset) {\n // remove\n this.chart.data.datasets.splice(index, 1);\n }\n });\n\n // update datasets, add new ones\n this.mergedDatasets.forEach((dataset: any) => {\n const OldDataset = this.chart.data.datasets.find(\n (oldDataset: any) => oldDataset.label === dataset.label\n );\n\n if (!OldDataset) {\n // add new dataset\n this.chart.data.datasets.push(dataset);\n } else {\n // update each key/entry in the dataset object\n Object.keys(dataset).forEach((key) => {\n OldDataset[key] = dataset[key];\n });\n }\n });\n\n this.chart.update();\n });\n }\n\n // init chart\n // check to make sure initial datasets + data have been provided\n let hasData = false;\n if (this.datasets && this.datasets.length) {\n for (const dataset of this.datasets) {\n hasData =\n dataset.data?.length > 0 ||\n dataset.tree?.length > 0 ||\n (dataset.tree && Object.keys(dataset.tree).length > 0);\n\n if (!hasData) {\n console.error('Missing data for one or more chart datasets.');\n break;\n }\n }\n }\n\n if (!this.chart && this.type && changedProps.has('datasets') && hasData) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n // Re-init chart instance when type, plugins, colorPalette, width, or height change.\n if (\n this.chart &&\n (changedProps.has('type') ||\n changedProps.has('plugins') ||\n changedProps.has('width') ||\n changedProps.has('height'))\n ) {\n this.mergeOptions().then(() => {\n this.initChart();\n });\n\n this.checkType();\n }\n\n if (this.chart && changedProps.has('noBorder')) {\n this.chart.resize();\n }\n }\n\n /**\n * Initializes a bar chart using the Chart.js library with provided labels, datasets,\n * and options.\n */\n private initChart() {\n const ignoredTypes = ['choropleth', 'treemap', 'bubbleMap'];\n\n // Chart.defaults.font.family = getComputedStyle(\n // document.documentElement\n // ).getPropertyValue('--kd-font-family-secondary');\n Chart.defaults.color = getTokenThemeVal('--kd-color-text-level-primary');\n\n // let plugins = [\n // canvasBackgroundPlugin,\n // doughnutLabelPlugin,\n // meterGaugePlugin,\n // ...this.plugins,\n // ];\n\n // Select plugin when type='meter'. Otherwise both plugins (meterGaugePlugin & doughnutLabelPlugin) are called\n const pluginSelectForDoghnutMeter =\n this.type === 'meter' ? meterGaugePlugin : doughnutLabelPlugin;\n\n let plugins = [\n canvasBackgroundPlugin,\n pluginSelectForDoghnutMeter,\n ...this.plugins,\n ];\n\n // only add certain plugins for standard chart types\n if (!ignoredTypes.includes(this.type)) {\n // plugins = [...plugins, a11yPlugin, musicPlugin];\n plugins = [...plugins, a11yPlugin];\n }\n\n if (this.chart) {\n this.chart.destroy();\n }\n\n this.chart = new Chart(this.canvas, {\n //type: this.type,\n type: this.type === 'meter' ? 'doughnut' : this.type,\n data: {\n labels: this.labels,\n datasets: this.mergedDatasets,\n },\n options: this.mergedOptions,\n plugins: plugins,\n });\n }\n\n /**\n * Merges various chart type options and dataset options to create a\n * final set of options for a chart.\n */\n private async mergeOptions() {\n const radialTypes = ['pie', 'doughnut', 'radar', 'polarArea', 'meter'];\n const ignoredTypes = ['choropleth', 'treemap', 'bubbleMap'];\n\n const additionalTypeImports: any = [];\n this.datasets.forEach((dataset) => {\n // get chart types from datasets so we can import additional configs\n if (dataset.type) {\n additionalTypeImports.push(\n import(`../../common/config/chartTypes/${dataset.type}.js`)\n );\n }\n });\n\n // import main and additional chart type configs\n const chartTypeConfigs = await Promise.all([\n import(`../../common/config/chartTypes/${this.type}.js`),\n ...additionalTypeImports,\n ]);\n\n // start with global options\n let mergedOptions: any = globalOptions(this);\n\n // merge global type options\n if (radialTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsRadial(this));\n } else if (!ignoredTypes.includes(this.type)) {\n mergedOptions = deepmerge(mergedOptions, globalOptionsNonRadial(this));\n }\n\n const mergedDatasets: any = JSON.parse(JSON.stringify(this.datasets));\n\n chartTypeConfigs.forEach((chartTypeConfig: any) => {\n // merge all of the imported chart type options with the global options\n mergedOptions = deepmerge(mergedOptions, chartTypeConfig.options(this));\n\n // merge all of the imported chart type dataset options\n mergedDatasets.forEach((dataset: any, index: number) => {\n if (\n (!dataset.type && chartTypeConfig.type === this.type) ||\n dataset.type === chartTypeConfig.type\n ) {\n mergedDatasets[index] = deepmerge(\n dataset,\n chartTypeConfig.datasetOptions(this, index)\n );\n }\n });\n });\n\n if (this.options) {\n // merge any consumer supplied options with defaults\n mergedOptions = deepmerge(mergedOptions, this.options);\n }\n this.mergedOptions = mergedOptions;\n\n // merge default chart type dataset options with consumer supplied datasets\n mergedDatasets.forEach((dataset: object, index: number) => {\n const customDeepmerge = deepmergeCustom({\n mergeArrays: false,\n });\n mergedDatasets[index] = customDeepmerge(dataset, this.datasets[index]);\n });\n\n this.mergedDatasets = mergedDatasets;\n }\n\n private getTableAxisLabel() {\n let label = '';\n\n if (this.options?.indexAxis === 'y') {\n if (this.options?.scales?.y?.title?.text) {\n label = this.options?.scales.y.title.text;\n } else {\n label = 'Y Axis';\n }\n } else {\n if (this.options?.scales?.x?.title?.text) {\n label = this.options?.scales.x.title.text;\n } else {\n label = 'X Axis';\n }\n }\n\n return label;\n }\n\n private handleViewToggle() {\n this.tableView = !this.tableView;\n }\n\n private checkType() {\n // chart types that can't have a data table view\n const blacklist: any = [];\n this.tableDisabled = blacklist.includes(this.type);\n }\n\n private handleDownloadImage(e: Event, jpeg: boolean) {\n e.preventDefault();\n\n const imgFormat = jpeg ? 'image/jpeg' : 'image/png';\n const fileExt = jpeg ? 'jpg' : 'png';\n const a = document.createElement('a');\n\n a.href = this.chart.toBase64Image(imgFormat, 1);\n a.download = this.chartTitle + '.' + fileExt;\n\n // trigger the download\n a.click();\n }\n\n private handleDownloadCsv(e: Event) {\n e.preventDefault();\n let csv = '';\n\n for (let i = 0; i < this.chart.data.datasets.length; i++) {\n csv += convertChartDataToCSV({\n data: this.chart.data.datasets[i],\n labels: this.labels,\n });\n }\n if (csv == null) return;\n\n const filename = this.chartTitle + '.csv';\n if (!csv.match(/^data:text\\/csv/i)) {\n csv = 'data:text/csv;charset=utf-8,' + csv;\n }\n\n // not sure if anything below this comment works\n const data = encodeURI(csv);\n const link = document.createElement('a');\n link.setAttribute('href', data);\n link.setAttribute('download', filename);\n document.body.appendChild(link); // Required for FF\n link.click();\n document.body.removeChild(link);\n }\n\n private handleFullscreen() {\n if (this.shadowRoot?.fullscreenElement) {\n document.exitFullscreen();\n } else {\n this.container.requestFullscreen();\n }\n }\n\n private handleFullscreenChange() {\n this.fullscreen = this.shadowRoot?.fullscreenElement !== null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'kd-chart': KDChart;\n }\n}\n"],"names":["Chart","register","ChoroplethController","BubbleMapController","GeoFeature","ColorScale","SizeScale","ProjectionScale","TreemapController","TreemapElement","annotationPlugin","datalabelsPlugin","KDChart","LitElement","constructor","this","chartTitle","description","type","options","plugins","height","width","hideDescription","hideCaptions","hideHeader","hideControls","noBorder","customLabels","toggleView","toggleFullscreen","downloadMenu","downloadCsv","downloadPng","downloadJpg","fullscreen","chart","tableView","tableDisabled","mergedOptions","mergedDatasets","_widget","_resizeObserver","ResizeObserver","debounce","_resizeChart","_themeObserver","MutationObserver","mergeOptions","then","initChart","render","Classes","container","widget","html","classMap","handleFullscreenChange","handleViewToggle","unsafeSVG","chartIcon","tableIcon","handleFullscreen","minimizeIcon","maximizeIcon","downloadIcon","e","handleDownloadCsv","handleDownloadImage","_a","labels","length","getTableAxisLabel","datasets","map","dataset","label","Array","isArray","tree","_value","labelKey","key","Object","entries","HtmlStrings","value","push","_subValue","_subSubValue","data","i","IndexAxis","indexAxis","NonIndexAxis","_b","scales","Date","toLocaleString","dataPoint","keys","Label","title","text","DisplayData","resize","connectedCallback","super","observe","document","querySelector","attributes","disconnectedCallback","disconnect","firstUpdated","el","shadowRoot","updated","changedProps","has","forEach","index","find","newDataset","splice","OldDataset","oldDataset","update","hasData","console","error","checkType","defaults","color","getTokenThemeVal","pluginSelectForDoghnutMeter","meterGaugePlugin","doughnutLabelPlugin","canvasBackgroundPlugin","includes","a11yPlugin","destroy","canvas","additionalTypeImports","__variableDynamicImportRuntime0__","chartTypeConfigs","Promise","all","__variableDynamicImportRuntime1__","globalOptions","deepmerge","globalOptionsRadial","globalOptionsNonRadial","JSON","parse","stringify","chartTypeConfig","datasetOptions","customDeepmerge","deepmergeCustom","mergeArrays","_e","_d","_c","y","_f","_k","_j","_h","_g","x","_l","jpeg","preventDefault","imgFormat","fileExt","a","createElement","href","toBase64Image","download","click","csv","convertChartDataToCSV","filename","match","encodeURI","link","setAttribute","body","appendChild","removeChild","fullscreenElement","exitFullscreen","requestFullscreen","styles","ChartScss","__decorate","property","String","prototype","Number","Boolean","state","query","customElement"],"mappings":"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"}
|
|
@@ -40,6 +40,9 @@ import'./../../external/@lit/reactive-element/reactive-element.js';import'./../.
|
|
|
40
40
|
padding: 24px;
|
|
41
41
|
border: 1px solid var(--kd-color-border-variants-light);
|
|
42
42
|
}
|
|
43
|
+
.container.fullscreen {
|
|
44
|
+
background: var(--kd-color-background-page-default);
|
|
45
|
+
}
|
|
43
46
|
.container.no-border {
|
|
44
47
|
border: none;
|
|
45
48
|
}
|
|
@@ -115,8 +118,8 @@ figure.hidden {
|
|
|
115
118
|
max-height: calc(100% - 32px);
|
|
116
119
|
}
|
|
117
120
|
|
|
118
|
-
canvas:focus,
|
|
119
|
-
div:focus {
|
|
121
|
+
canvas:focus-visible,
|
|
122
|
+
div:focus-visible {
|
|
120
123
|
border-radius: 4px;
|
|
121
124
|
outline: 2px solid var(--kd-color-border-variants-focus);
|
|
122
125
|
}
|
|
@@ -313,7 +316,7 @@ table tr:last-child td:last-child {
|
|
|
313
316
|
background: var(--kd-color-background-button-ghost-state-pressed);
|
|
314
317
|
color: var(--kd-color-text-button-dark-primary);
|
|
315
318
|
}
|
|
316
|
-
.controls .control-button:focus {
|
|
319
|
+
.controls .control-button:focus-visible {
|
|
317
320
|
outline-color: var(--kd-color-border-button-tertiary-state-focused);
|
|
318
321
|
}
|
|
319
322
|
.controls .download {
|
|
@@ -360,7 +363,7 @@ table tr:last-child td:last-child {
|
|
|
360
363
|
.controls .download-menu button:hover {
|
|
361
364
|
background: var(--kd-color-background-ui-hollow-hover);
|
|
362
365
|
}
|
|
363
|
-
.controls .download-menu button:focus {
|
|
366
|
+
.controls .download-menu button:focus-visible {
|
|
364
367
|
outline-color: var(--kd-color-border-variants-focus);
|
|
365
368
|
}
|
|
366
369
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chart.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -4,5 +4,5 @@ import{Color as t}from"../../../@kurkle/color/dist/color.esm.js";
|
|
|
4
4
|
* https://www.chartjs.org
|
|
5
5
|
* (c) 2023 Chart.js Contributors
|
|
6
6
|
* Released under the MIT License
|
|
7
|
-
*/function e(){}const n=(()=>{let t=0;return()=>t++})();function o(t){return null==t}function r(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function i(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function s(t,e){return a(t)?t:e}function c(t,e){return void 0===t?e:t}const l=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,u=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function h(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)}function f(t,e,n,o){let a,s,c;if(r(t))if(s=t.length,o)for(a=s-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<s;a++)e.call(n,t[a],a);else if(i(t))for(c=Object.keys(t),s=c.length,a=0;a<s;a++)e.call(n,t[c[a]],c[a])}function d(t,e){let n,o,r,i;if(!t||!e||t.length!==e.length)return!1;for(n=0,o=t.length;n<o;++n)if(r=t[n],i=e[n],r.datasetIndex!==i.datasetIndex||r.index!==i.index)return!1;return!0}function p(t){if(r(t))return t.map(p);if(i(t)){const e=Object.create(null),n=Object.keys(t),o=n.length;let r=0;for(;r<o;++r)e[n[r]]=p(t[n[r]]);return e}return t}function g(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function y(t,e,n,o){if(!g(t))return;const r=e[t],a=n[t];i(r)&&i(a)?b(r,a,o):e[t]=p(a)}function b(t,e,n){const o=r(e)?e:[e],a=o.length;if(!i(t))return t;const s=(n=n||{}).merger||y;let c;for(let e=0;e<a;++e){if(c=o[e],!i(c))continue;const r=Object.keys(c);for(let e=0,o=r.length;e<o;++e)s(r[e],t,c,n)}return t}function x(t,e){return b(t,e,{merger:m})}function m(t,e,n){if(!g(t))return;const o=e[t],r=n[t];i(o)&&i(r)?x(o,r):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=p(r))}const v={"":t=>t,x:t=>t.x,y:t=>t.y};function M(t){const e=t.split("."),n=[];let o="";for(const t of e)o+=t,o.endsWith("\\")?o=o.slice(0,-1)+".":(n.push(o),o="");return n}function w(t,e){const n=v[e]||(v[e]=function(t){const e=M(t);return t=>{for(const n of e){if(""===n)break;t=t&&t[n]}return t}}(e));return n(t)}function k(t){return t.charAt(0).toUpperCase()+t.slice(1)}const _=t=>void 0!==t,O=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const n of t)if(!e.has(n))return!1;return!0};function T(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const S=Math.PI,C=2*S,I=C+S,j=Number.POSITIVE_INFINITY,R=S/180,W=S/2,B=S/4,A=2*S/3,D=Math.log10,N=Math.sign;function L(t,e,n){return Math.abs(t-e)<n}function z(t){const e=Math.round(t);t=L(t,e,t/1e3)?e:t;const n=Math.pow(10,Math.floor(D(t))),o=t/n;return(o<=1?1:o<=2?2:o<=5?5:10)*n}function E(t){const e=[],n=Math.sqrt(t);let o;for(o=1;o<n;o++)t%o==0&&(e.push(o),e.push(t/o));return n===(0|n)&&e.push(n),e.sort(((t,e)=>t-e)).pop(),e}function H(t){return!isNaN(parseFloat(t))&&isFinite(t)}function F(t,e){const n=Math.round(t);return n-e<=t&&n+e>=t}function Q(t,e,n){let o,r,i;for(o=0,r=t.length;o<r;o++)i=t[o][n],isNaN(i)||(e.min=Math.min(e.min,i),e.max=Math.max(e.max,i))}function q(t){return t*(S/180)}function $(t){return t*(180/S)}function K(t){if(!a(t))return;let e=1,n=0;for(;Math.round(t*e)/e!==t;)e*=10,n++;return n}function J(t,e){const n=e.x-t.x,o=e.y-t.y,r=Math.sqrt(n*n+o*o);let i=Math.atan2(o,n);return i<-.5*S&&(i+=C),{angle:i,distance:r}}function V(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function G(t,e){return(t-e+I)%C-S}function Y(t){return(t%C+C)%C}function U(t,e,n,o){const r=Y(t),i=Y(e),a=Y(n),s=Y(i-r),c=Y(a-r),l=Y(r-i),u=Y(r-a);return r===i||r===a||o&&i===a||s>c&&l<u}function X(t,e,n){return Math.max(e,Math.min(n,t))}function Z(t){return X(t,-32768,32767)}function tt(t,e,n,o=1e-6){return t>=Math.min(e,n)-o&&t<=Math.max(e,n)+o}function et(t,e,n){n=n||(n=>t[n]<e);let o,r=t.length-1,i=0;for(;r-i>1;)o=i+r>>1,n(o)?i=o:r=o;return{lo:i,hi:r}}const nt=(t,e,n,o)=>et(t,n,o?o=>{const r=t[o][e];return r<n||r===n&&t[o+1][e]===n}:o=>t[o][e]<n),ot=(t,e,n)=>et(t,n,(o=>t[o][e]>=n));function rt(t,e,n){let o=0,r=t.length;for(;o<r&&t[o]<e;)o++;for(;r>o&&t[r-1]>n;)r--;return o>0||r<t.length?t.slice(o,r):t}const it=["push","pop","shift","splice","unshift"];function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),it.forEach((e=>{const n="_onData"+k(e),o=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const r=o.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[n]&&t[n](...e)})),r}})})))}function st(t,e){const n=t._chartjs;if(!n)return;const o=n.listeners,r=o.indexOf(e);-1!==r&&o.splice(r,1),o.length>0||(it.forEach((e=>{delete t[e]})),delete t._chartjs)}function ct(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const lt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ut(t,e){let n=[],o=!1;return function(...r){n=r,o||(o=!0,lt.call(window,(()=>{o=!1,t.apply(e,n)})))}}function ht(t,e){let n;return function(...o){return e?(clearTimeout(n),n=setTimeout(t,e,o)):t.apply(this,o),e}}const ft=t=>"start"===t?"left":"end"===t?"right":"center",dt=(t,e,n)=>"start"===t?e:"end"===t?n:(e+n)/2,pt=(t,e,n,o)=>t===(o?"left":"right")?n:"center"===t?(e+n)/2:e;function gt(t,e,n){const o=e.length;let r=0,i=o;if(t._sorted){const{iScale:a,_parsed:s}=t,c=a.axis,{min:l,max:u,minDefined:h,maxDefined:f}=a.getUserBounds();h&&(r=X(Math.min(nt(s,c,l).lo,n?o:nt(e,c,a.getPixelForValue(l)).lo),0,o-1)),i=f?X(Math.max(nt(s,a.axis,u,!0).hi+1,n?0:nt(e,c,a.getPixelForValue(u),!0).hi+1),r,o)-r:o-r}return{start:r,count:i}}function yt(t){const{xScale:e,yScale:n,_scaleRanges:o}=t,r={xmin:e.min,xmax:e.max,ymin:n.min,ymax:n.max};if(!o)return t._scaleRanges=r,!0;const i=o.xmin!==e.min||o.xmax!==e.max||o.ymin!==n.min||o.ymax!==n.max;return Object.assign(o,r),i}const bt=t=>0===t||1===t,xt=(t,e,n)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*C/n),mt=(t,e,n)=>Math.pow(2,-10*t)*Math.sin((t-e)*C/n)+1,vt={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*W),easeOutSine:t=>Math.sin(t*W),easeInOutSine:t=>-.5*(Math.cos(S*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>bt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>bt(t)?t:xt(t,.075,.3),easeOutElastic:t=>bt(t)?t:mt(t,.075,.3),easeInOutElastic(t){const e=.1125;return bt(t)?t:t<.5?.5*xt(2*t,e,.45):.5+.5*mt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-vt.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,n=2.75;return t<1/n?e*t*t:t<2/n?e*(t-=1.5/n)*t+.75:t<2.5/n?e*(t-=2.25/n)*t+.9375:e*(t-=2.625/n)*t+.984375},easeInOutBounce:t=>t<.5?.5*vt.easeInBounce(2*t):.5*vt.easeOutBounce(2*t-1)+.5};function Mt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function wt(e){return Mt(e)?e:new t(e)}function kt(e){return Mt(e)?e:new t(e).saturate(.5).darken(.1).hexString()}const _t=["x","y","borderWidth","radius","tension"],Ot=["color","borderColor","backgroundColor"];const Pt=new Map;function Tt(t,e,n){return function(t,e){e=e||{};const n=t+JSON.stringify(e);let o=Pt.get(n);return o||(o=new Intl.NumberFormat(t,e),Pt.set(n,o)),o}(e,n).format(t)}const St={values:t=>r(t)?t:""+t,numeric(t,e,n){if(0===t)return"0";const o=this.chart.options.locale;let r,i=t;if(n.length>1){const e=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(e<1e-4||e>1e15)&&(r="scientific"),i=function(t,e){let n=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(n)>=1&&t!==Math.floor(t)&&(n=t-Math.floor(t));return n}(t,n)}const a=D(Math.abs(i)),s=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),c={notation:r,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),Tt(t,o,c)},logarithmic(t,e,n){if(0===t)return"0";const o=n[e].significand||t/Math.pow(10,Math.floor(D(t)));return[1,2,3,5,10,15].includes(o)||e>.8*n.length?St.numeric.call(this,t,e,n):""}};var Ct={formatters:St};const It=Object.create(null),jt=Object.create(null);function Rt(t,e){if(!e)return t;const n=e.split(".");for(let e=0,o=n.length;e<o;++e){const o=n[e];t=t[o]||(t[o]=Object.create(null))}return t}function Wt(t,e,n){return"string"==typeof e?b(Rt(t,e),n):b(Rt(t,""),e)}class Bt{constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>kt(e.backgroundColor),this.hoverBorderColor=(t,e)=>kt(e.borderColor),this.hoverColor=(t,e)=>kt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return Wt(this,t,e)}get(t){return Rt(this,t)}describe(t,e){return Wt(jt,t,e)}override(t,e){return Wt(It,t,e)}route(t,e,n,o){const r=Rt(this,t),a=Rt(this,n),s="_"+e;Object.defineProperties(r,{[s]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[s],e=a[o];return i(t)?Object.assign({},e,t):c(t,e)},set(t){this[s]=t}}})}apply(t){t.forEach((t=>t(this)))}}var At=new Bt({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Ot},numbers:{type:"number",properties:_t}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Ct.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function Dt(t){return!t||o(t.size)||o(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Nt(t,e,n,o,r){let i=e[r];return i||(i=e[r]=t.measureText(r).width,n.push(r)),i>o&&(o=i),o}function Lt(t,e,n,o){let i=(o=o||{}).data=o.data||{},a=o.garbageCollect=o.garbageCollect||[];o.font!==e&&(i=o.data={},a=o.garbageCollect=[],o.font=e),t.save(),t.font=e;let s=0;const c=n.length;let l,u,h,f,d;for(l=0;l<c;l++)if(f=n[l],null==f||r(f)){if(r(f))for(u=0,h=f.length;u<h;u++)d=f[u],null==d||r(d)||(s=Nt(t,i,a,s,d))}else s=Nt(t,i,a,s,f);t.restore();const p=a.length/2;if(p>n.length){for(l=0;l<p;l++)delete i[a[l]];a.splice(0,p)}return s}function zt(t,e,n){const o=t.currentDevicePixelRatio,r=0!==n?Math.max(n/2,.5):0;return Math.round((e-r)*o)/o+r}function Et(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Ht(t,e,n,o){Ft(t,e,n,o,null)}function Ft(t,e,n,o,r){let i,a,s,c,l,u,h,f;const d=e.pointStyle,p=e.rotation,g=e.radius;let y=(p||0)*R;if(d&&"object"==typeof d&&(i=d.toString(),"[object HTMLImageElement]"===i||"[object HTMLCanvasElement]"===i))return t.save(),t.translate(n,o),t.rotate(y),t.drawImage(d,-d.width/2,-d.height/2,d.width,d.height),void t.restore();if(!(isNaN(g)||g<=0)){switch(t.beginPath(),d){default:r?t.ellipse(n,o,r/2,g,0,0,C):t.arc(n,o,g,0,C),t.closePath();break;case"triangle":u=r?r/2:g,t.moveTo(n+Math.sin(y)*u,o-Math.cos(y)*g),y+=A,t.lineTo(n+Math.sin(y)*u,o-Math.cos(y)*g),y+=A,t.lineTo(n+Math.sin(y)*u,o-Math.cos(y)*g),t.closePath();break;case"rectRounded":l=.516*g,c=g-l,a=Math.cos(y+B)*c,h=Math.cos(y+B)*(r?r/2-l:c),s=Math.sin(y+B)*c,f=Math.sin(y+B)*(r?r/2-l:c),t.arc(n-h,o-s,l,y-S,y-W),t.arc(n+f,o-a,l,y-W,y),t.arc(n+h,o+s,l,y,y+W),t.arc(n-f,o+a,l,y+W,y+S),t.closePath();break;case"rect":if(!p){c=Math.SQRT1_2*g,u=r?r/2:c,t.rect(n-u,o-c,2*u,2*c);break}y+=B;case"rectRot":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+f,o-a),t.lineTo(n+h,o+s),t.lineTo(n-f,o+a),t.closePath();break;case"crossRot":y+=B;case"cross":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a);break;case"star":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a),y+=B,h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a);break;case"line":a=r?r/2:Math.cos(y)*g,s=Math.sin(y)*g,t.moveTo(n-a,o-s),t.lineTo(n+a,o+s);break;case"dash":t.moveTo(n,o),t.lineTo(n+Math.cos(y)*(r?r/2:g),o+Math.sin(y)*g);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function Qt(t,e,n){return n=n||.5,!e||t&&t.x>e.left-n&&t.x<e.right+n&&t.y>e.top-n&&t.y<e.bottom+n}function qt(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function $t(t){t.restore()}function Kt(t,e,n,o,r){if(!e)return t.lineTo(n.x,n.y);if("middle"===r){const o=(e.x+n.x)/2;t.lineTo(o,e.y),t.lineTo(o,n.y)}else"after"===r!=!!o?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}function Jt(t,e,n,o){if(!e)return t.lineTo(n.x,n.y);t.bezierCurveTo(o?e.cp1x:e.cp2x,o?e.cp1y:e.cp2y,o?n.cp2x:n.cp1x,o?n.cp2y:n.cp1y,n.x,n.y)}function Vt(t,e,n,o,r){if(r.strikethrough||r.underline){const i=t.measureText(o),a=e-i.actualBoundingBoxLeft,s=e+i.actualBoundingBoxRight,c=n-i.actualBoundingBoxAscent,l=n+i.actualBoundingBoxDescent,u=r.strikethrough?(c+l)/2:l;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=r.decorationWidth||2,t.moveTo(a,u),t.lineTo(s,u),t.stroke()}}function Gt(t,e){const n=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.left,e.top,e.width,e.height),t.fillStyle=n}function Yt(t,e,n,i,a,s={}){const c=r(e)?e:[e],l=s.strokeWidth>0&&""!==s.strokeColor;let u,h;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),o(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,s),u=0;u<c.length;++u)h=c[u],s.backdrop&&Gt(t,s.backdrop),l&&(s.strokeColor&&(t.strokeStyle=s.strokeColor),o(s.strokeWidth)||(t.lineWidth=s.strokeWidth),t.strokeText(h,n,i,s.maxWidth)),t.fillText(h,n,i,s.maxWidth),Vt(t,n,i,h,s),i+=Number(a.lineHeight);t.restore()}function Ut(t,e){const{x:n,y:o,w:r,h:i,radius:a}=e;t.arc(n+a.topLeft,o+a.topLeft,a.topLeft,1.5*S,S,!0),t.lineTo(n,o+i-a.bottomLeft),t.arc(n+a.bottomLeft,o+i-a.bottomLeft,a.bottomLeft,S,W,!0),t.lineTo(n+r-a.bottomRight,o+i),t.arc(n+r-a.bottomRight,o+i-a.bottomRight,a.bottomRight,W,0,!0),t.lineTo(n+r,o+a.topRight),t.arc(n+r-a.topRight,o+a.topRight,a.topRight,0,-W,!0),t.lineTo(n+a.topLeft,o)}const Xt=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,Zt=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function te(t,e){const n=(""+t).match(Xt);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t}const ee=t=>+t||0;function ne(t,e){const n={},o=i(e),r=o?Object.keys(e):e,a=i(t)?o?n=>c(t[n],t[e[n]]):e=>t[e]:()=>t;for(const t of r)n[t]=ee(a(t));return n}function oe(t){return ne(t,{top:"y",right:"x",bottom:"y",left:"x"})}function re(t){return ne(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ie(t){const e=oe(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function ae(t,e){t=t||{},e=e||At.font;let n=c(t.size,e.size);"string"==typeof n&&(n=parseInt(n,10));let o=c(t.style,e.style);o&&!(""+o).match(Zt)&&(console.warn('Invalid font style specified: "'+o+'"'),o=void 0);const r={family:c(t.family,e.family),lineHeight:te(c(t.lineHeight,e.lineHeight),n),size:n,style:o,weight:c(t.weight,e.weight),string:""};return r.string=Dt(r),r}function se(t,e,n,o){let i,a,s,c=!0;for(i=0,a=t.length;i<a;++i)if(s=t[i],void 0!==s&&(void 0!==e&&"function"==typeof s&&(s=s(e),c=!1),void 0!==n&&r(s)&&(s=s[n%s.length],c=!1),void 0!==s))return o&&!c&&(o.cacheable=!1),s}function ce(t,e,n){const{min:o,max:r}=t,i=u(e,(r-o)/2),a=(t,e)=>n&&0===t?0:t+e;return{min:a(o,-Math.abs(i)),max:a(r,i)}}function le(t,e){return Object.assign(Object.create(t),e)}function ue(t,e=[""],n,o,r=(()=>t[0])){const i=n||t;void 0===o&&(o=Me("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:o,_getTarget:r,override:n=>ue([n,...t],e,i,o)};return new Proxy(a,{deleteProperty:(e,n)=>(delete e[n],delete e._keys,delete t[0][n],!0),get:(n,o)=>ge(n,o,(()=>function(t,e,n,o){let r;for(const i of e)if(r=Me(de(i,t),n),void 0!==r)return pe(t,r)?me(n,o,t,r):r}(o,e,t,n))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>we(t).includes(e),ownKeys:t=>we(t),set(t,e,n){const o=t._storage||(t._storage=r());return t[e]=o[e]=n,delete t._keys,!0}})}function he(t,e,n,o){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:n,_stack:new Set,_descriptors:fe(t,o),setContext:e=>he(t,e,n,o),override:r=>he(t.override(r),e,n,o)};return new Proxy(a,{deleteProperty:(e,n)=>(delete e[n],delete t[n],!0),get:(t,e,n)=>ge(t,e,(()=>function(t,e,n){const{_proxy:o,_context:a,_subProxy:s,_descriptors:c}=t;let l=o[e];O(l)&&c.isScriptable(e)&&(l=function(t,e,n,o){const{_proxy:r,_context:i,_subProxy:a,_stack:s}=n;if(s.has(t))throw new Error("Recursion detected: "+Array.from(s).join("->")+"->"+t);s.add(t);let c=e(i,a||o);s.delete(t),pe(t,c)&&(c=me(r._scopes,r,t,c));return c}(e,l,t,n));r(l)&&l.length&&(l=function(t,e,n,o){const{_proxy:r,_context:a,_subProxy:s,_descriptors:c}=n;if(void 0!==a.index&&o(t))return e[a.index%e.length];if(i(e[0])){const n=e,o=r._scopes.filter((t=>t!==n));e=[];for(const i of n){const n=me(o,r,t,i);e.push(he(n,a,s&&s[t],c))}}return e}(e,l,t,c.isIndexable));pe(e,l)&&(l=he(l,a,s&&s[e],c));return l}(t,e,n))),getOwnPropertyDescriptor:(e,n)=>e._descriptors.allKeys?Reflect.has(t,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,n),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,n)=>Reflect.has(t,n),ownKeys:()=>Reflect.ownKeys(t),set:(e,n,o)=>(t[n]=o,delete e[n],!0)})}function fe(t,e={scriptable:!0,indexable:!0}){const{_scriptable:n=e.scriptable,_indexable:o=e.indexable,_allKeys:r=e.allKeys}=t;return{allKeys:r,scriptable:n,indexable:o,isScriptable:O(n)?n:()=>n,isIndexable:O(o)?o:()=>o}}const de=(t,e)=>t?t+k(e):e,pe=(t,e)=>i(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ge(t,e,n){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const o=n();return t[e]=o,o}function ye(t,e,n){return O(t)?t(e,n):t}const be=(t,e)=>!0===t?e:"string"==typeof t?w(e,t):void 0;function xe(t,e,n,o,r){for(const i of e){const e=be(n,i);if(e){t.add(e);const i=ye(e._fallback,n,r);if(void 0!==i&&i!==n&&i!==o)return i}else if(!1===e&&void 0!==o&&n!==o)return null}return!1}function me(t,e,n,o){const a=e._rootScopes,s=ye(e._fallback,n,o),c=[...t,...a],l=new Set;l.add(o);let u=ve(l,c,n,s||n,o);return null!==u&&((void 0===s||s===n||(u=ve(l,c,s,u,o),null!==u))&&ue(Array.from(l),[""],a,s,(()=>function(t,e,n){const o=t._getTarget();e in o||(o[e]={});const a=o[e];if(r(a)&&i(n))return n;return a||{}}(e,n,o))))}function ve(t,e,n,o,r){for(;n;)n=xe(t,e,n,o,r);return n}function Me(t,e){for(const n of e){if(!n)continue;const e=n[t];if(void 0!==e)return e}}function we(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const n of t)for(const t of Object.keys(n).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ke(t,e,n,o){const{iScale:r}=t,{key:i="r"}=this._parsing,a=new Array(o);let s,c,l,u;for(s=0,c=o;s<c;++s)l=s+n,u=e[l],a[s]={r:r.parse(w(u,i),l)};return a}const _e=Number.EPSILON||1e-14,Oe=(t,e)=>e<t.length&&!t[e].skip&&t[e],Pe=t=>"x"===t?"y":"x";function Te(t,e,n,o){const r=t.skip?e:t,i=e,a=n.skip?e:n,s=V(i,r),c=V(a,i);let l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;const h=o*l,f=o*u;return{previous:{x:i.x-h*(a.x-r.x),y:i.y-h*(a.y-r.y)},next:{x:i.x+f*(a.x-r.x),y:i.y+f*(a.y-r.y)}}}function Se(t,e="x"){const n=Pe(e),o=t.length,r=Array(o).fill(0),i=Array(o);let a,s,c,l=Oe(t,0);for(a=0;a<o;++a)if(s=c,c=l,l=Oe(t,a+1),c){if(l){const t=l[e]-c[e];r[a]=0!==t?(l[n]-c[n])/t:0}i[a]=s?l?N(r[a-1])!==N(r[a])?0:(r[a-1]+r[a])/2:r[a-1]:r[a]}!function(t,e,n){const o=t.length;let r,i,a,s,c,l=Oe(t,0);for(let u=0;u<o-1;++u)c=l,l=Oe(t,u+1),c&&l&&(L(e[u],0,_e)?n[u]=n[u+1]=0:(r=n[u]/e[u],i=n[u+1]/e[u],s=Math.pow(r,2)+Math.pow(i,2),s<=9||(a=3/Math.sqrt(s),n[u]=r*a*e[u],n[u+1]=i*a*e[u])))}(t,r,i),function(t,e,n="x"){const o=Pe(n),r=t.length;let i,a,s,c=Oe(t,0);for(let l=0;l<r;++l){if(a=s,s=c,c=Oe(t,l+1),!s)continue;const r=s[n],u=s[o];a&&(i=(r-a[n])/3,s[`cp1${n}`]=r-i,s[`cp1${o}`]=u-i*e[l]),c&&(i=(c[n]-r)/3,s[`cp2${n}`]=r+i,s[`cp2${o}`]=u+i*e[l])}}(t,i,e)}function Ce(t,e,n){return Math.max(Math.min(t,n),e)}function Ie(t,e,n,o,r){let i,a,s,c;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)Se(t,r);else{let n=o?t[t.length-1]:t[0];for(i=0,a=t.length;i<a;++i)s=t[i],c=Te(n,s,t[Math.min(i+1,a-(o?0:1))%a],e.tension),s.cp1x=c.previous.x,s.cp1y=c.previous.y,s.cp2x=c.next.x,s.cp2y=c.next.y,n=s}e.capBezierPoints&&function(t,e){let n,o,r,i,a,s=Qt(t[0],e);for(n=0,o=t.length;n<o;++n)a=i,i=s,s=n<o-1&&Qt(t[n+1],e),i&&(r=t[n],a&&(r.cp1x=Ce(r.cp1x,e.left,e.right),r.cp1y=Ce(r.cp1y,e.top,e.bottom)),s&&(r.cp2x=Ce(r.cp2x,e.left,e.right),r.cp2y=Ce(r.cp2y,e.top,e.bottom)))}(t,n)}function je(){return"undefined"!=typeof window&&"undefined"!=typeof document}function Re(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function We(t,e,n){let o;return"string"==typeof t?(o=parseInt(t,10),-1!==t.indexOf("%")&&(o=o/100*e.parentNode[n])):o=t,o}const Be=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function Ae(t,e){return Be(t).getPropertyValue(e)}const De=["top","right","bottom","left"];function Ne(t,e,n){const o={};n=n?"-"+n:"";for(let r=0;r<4;r++){const i=De[r];o[i]=parseFloat(t[e+"-"+i+n])||0}return o.width=o.left+o.right,o.height=o.top+o.bottom,o}const Le=(t,e,n)=>(t>0||e>0)&&(!n||!n.shadowRoot);function ze(t,e){if("native"in t)return t;const{canvas:n,currentDevicePixelRatio:o}=e,r=Be(n),i="border-box"===r.boxSizing,a=Ne(r,"padding"),s=Ne(r,"border","width"),{x:c,y:l,box:u}=function(t,e){const n=t.touches,o=n&&n.length?n[0]:t,{offsetX:r,offsetY:i}=o;let a,s,c=!1;if(Le(r,i,t.target))a=r,s=i;else{const t=e.getBoundingClientRect();a=o.clientX-t.left,s=o.clientY-t.top,c=!0}return{x:a,y:s,box:c}}(t,n),h=a.left+(u&&s.left),f=a.top+(u&&s.top);let{width:d,height:p}=e;return i&&(d-=a.width+s.width,p-=a.height+s.height),{x:Math.round((c-h)/d*n.width/o),y:Math.round((l-f)/p*n.height/o)}}const Ee=t=>Math.round(10*t)/10;function He(t,e,n,o){const r=Be(t),i=Ne(r,"margin"),a=We(r.maxWidth,t,"clientWidth")||j,s=We(r.maxHeight,t,"clientHeight")||j,c=function(t,e,n){let o,r;if(void 0===e||void 0===n){const i=Re(t);if(i){const t=i.getBoundingClientRect(),a=Be(i),s=Ne(a,"border","width"),c=Ne(a,"padding");e=t.width-c.width-s.width,n=t.height-c.height-s.height,o=We(a.maxWidth,i,"clientWidth"),r=We(a.maxHeight,i,"clientHeight")}else e=t.clientWidth,n=t.clientHeight}return{width:e,height:n,maxWidth:o||j,maxHeight:r||j}}(t,e,n);let{width:l,height:u}=c;if("content-box"===r.boxSizing){const t=Ne(r,"border","width"),e=Ne(r,"padding");l-=e.width+t.width,u-=e.height+t.height}l=Math.max(0,l-i.width),u=Math.max(0,o?l/o:u-i.height),l=Ee(Math.min(l,a,c.maxWidth)),u=Ee(Math.min(u,s,c.maxHeight)),l&&!u&&(u=Ee(l/2));return(void 0!==e||void 0!==n)&&o&&c.height&&u>c.height&&(u=c.height,l=Ee(Math.floor(u*o))),{width:l,height:u}}function Fe(t,e,n){const o=e||1,r=Math.floor(t.height*o),i=Math.floor(t.width*o);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(n||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==o||a.height!==r||a.width!==i)&&(t.currentDevicePixelRatio=o,a.height=r,a.width=i,t.ctx.setTransform(o,0,0,o,0,0),!0)}const Qe=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function qe(t,e){const n=Ae(t,e),o=n&&n.match(/^(\d+)(\.\d+)?px$/);return o?+o[1]:void 0}function $e(t,e,n,o){return{x:t.x+n*(e.x-t.x),y:t.y+n*(e.y-t.y)}}function Ke(t,e,n,o){return{x:t.x+n*(e.x-t.x),y:"middle"===o?n<.5?t.y:e.y:"after"===o?n<1?t.y:e.y:n>0?e.y:t.y}}function Je(t,e,n,o){const r={x:t.cp2x,y:t.cp2y},i={x:e.cp1x,y:e.cp1y},a=$e(t,r,n),s=$e(r,i,n),c=$e(i,e,n),l=$e(a,s,n),u=$e(s,c,n);return $e(l,u,n)}function Ve(t,e,n){return t?function(t,e){return{x:n=>t+t+e-n,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,n):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ge(t,e){let n,o;"ltr"!==e&&"rtl"!==e||(n=t.canvas.style,o=[n.getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=o)}function Ye(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ue(t){return"angle"===t?{between:U,compare:G,normalize:Y}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Xe({start:t,end:e,count:n,loop:o,style:r}){return{start:t%n,end:e%n,loop:o&&(e-t+1)%n==0,style:r}}function Ze(t,e,n){if(!n)return[t];const{property:o,start:r,end:i}=n,a=e.length,{compare:s,between:c,normalize:l}=Ue(o),{start:u,end:h,loop:f,style:d}=function(t,e,n){const{property:o,start:r,end:i}=n,{between:a,normalize:s}=Ue(o),c=e.length;let l,u,{start:h,end:f,loop:d}=t;if(d){for(h+=c,f+=c,l=0,u=c;l<u&&a(s(e[h%c][o]),r,i);++l)h--,f--;h%=c,f%=c}return f<h&&(f+=c),{start:h,end:f,loop:d,style:t.style}}(t,e,n),p=[];let g,y,b,x=!1,m=null;const v=()=>x||c(r,b,g)&&0!==s(r,b),M=()=>!x||0===s(i,g)||c(i,b,g);for(let t=u,n=u;t<=h;++t)y=e[t%a],y.skip||(g=l(y[o]),g!==b&&(x=c(g,r,i),null===m&&v()&&(m=0===s(g,r)?t:n),null!==m&&M()&&(p.push(Xe({start:m,end:t,loop:f,count:a,style:d})),m=null),n=t,b=g));return null!==m&&p.push(Xe({start:m,end:h,loop:f,count:a,style:d})),p}function tn(t,e){const n=[],o=t.segments;for(let r=0;r<o.length;r++){const i=Ze(o[r],t.points,e);i.length&&n.push(...i)}return n}function en(t,e){const n=t.points,o=t.options.spanGaps,r=n.length;if(!r)return[];const i=!!t._loop,{start:a,end:s}=function(t,e,n,o){let r=0,i=e-1;if(n&&!o)for(;r<e&&!t[r].skip;)r++;for(;r<e&&t[r].skip;)r++;for(r%=e,n&&(i+=r);i>r&&t[i%e].skip;)i--;return i%=e,{start:r,end:i}}(n,r,i,o);if(!0===o)return nn(t,[{start:a,end:s,loop:i}],n,e);return nn(t,function(t,e,n,o){const r=t.length,i=[];let a,s=e,c=t[e];for(a=e+1;a<=n;++a){const n=t[a%r];n.skip||n.stop?c.skip||(o=!1,i.push({start:e%r,end:(a-1)%r,loop:o}),e=s=n.stop?a:null):(s=a,c.skip&&(e=a)),c=n}return null!==s&&i.push({start:e%r,end:s%r,loop:o}),i}(n,a,s<a?s+r:s,!!t._fullLoop&&0===a&&s===r-1),n,e)}function nn(t,e,n,o){return o&&o.setContext&&n?function(t,e,n,o){const r=t._chart.getContext(),i=on(t.options),{_datasetIndex:a,options:{spanGaps:s}}=t,c=n.length,l=[];let u=i,h=e[0].start,f=h;function d(t,e,o,r){const i=s?-1:1;if(t!==e){for(t+=c;n[t%c].skip;)t-=i;for(;n[e%c].skip;)e+=i;t%c!=e%c&&(l.push({start:t%c,end:e%c,loop:o,style:r}),u=r,h=e%c)}}for(const t of e){h=s?h:t.start;let e,i=n[h%c];for(f=h+1;f<=t.end;f++){const s=n[f%c];e=on(o.setContext(le(r,{type:"segment",p0:i,p1:s,p0DataIndex:(f-1)%c,p1DataIndex:f%c,datasetIndex:a}))),rn(e,u)&&d(h,f-1,t.loop,u),i=s,u=e}h<f-1&&d(h,f-1,t.loop,u)}return l}(t,e,n,o):e}function on(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function rn(t,e){if(!e)return!1;const n=[],o=function(t,e){return Mt(e)?(n.includes(e)||n.push(e),n.indexOf(e)):e};return JSON.stringify(t,o)!==JSON.stringify(e,o)}export{$t as $,ot as A,nt as B,Qt as C,J as D,ie as E,f as F,He as G,W as H,Re as I,qe as J,Qe as K,ut as L,je as M,E as N,s as O,S as P,h as Q,ce as R,X as S,C as T,$ as U,Nt as V,Z as W,zt as X,qt as Y,Yt as Z,ct as _,se as a,ae as a0,ft as a1,dt as a2,It as a3,b as a4,k as a5,jt as a6,O as a7,he as a8,ue as a9,Ge as aA,pt as aB,Ye as aC,Ft as aD,V as aE,e as aF,Q as aG,z as aH,F as aI,L as aJ,K as aK,Ct as aL,D as aM,Lt as aN,rt as aO,et as aP,Mt as aQ,kt as aR,p as aS,y as aT,m as aU,M as aW,Dt as aX,Te as aY,Se as aZ,Ae as a_,fe as aa,x as ab,n as ac,ht as ad,Fe as ae,Et as af,P as ag,d as ah,T as ai,tt as aj,ne as ak,Ie as al,en as am,tn as an,Ke as ao,Je as ap,$e as aq,Kt as ar,Jt as as,Ht as at,Ut as au,oe as av,re as aw,Ze as ax,Y as ay,Ve as az,r as b,te as b0,I as b1,j as b2,R as b3,B as b4,A as b5,G as b6,wt as c,At as d,vt as e,w as f,a as g,_ as h,i,le as j,o as k,at as l,l as m,u as n,Tt as o,U as p,gt as q,lt as r,N as s,q as t,st as u,c as v,yt as w,H as x,ke as y,ze as z};
|
|
7
|
+
*/function e(){}const n=(()=>{let t=0;return()=>t++})();function o(t){return null==t}function r(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function i(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function s(t,e){return a(t)?t:e}function c(t,e){return void 0===t?e:t}const l=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,u=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function h(t,e,n){if(t&&"function"==typeof t.call)return t.apply(n,e)}function f(t,e,n,o){let a,s,c;if(r(t))if(s=t.length,o)for(a=s-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<s;a++)e.call(n,t[a],a);else if(i(t))for(c=Object.keys(t),s=c.length,a=0;a<s;a++)e.call(n,t[c[a]],c[a])}function d(t,e){let n,o,r,i;if(!t||!e||t.length!==e.length)return!1;for(n=0,o=t.length;n<o;++n)if(r=t[n],i=e[n],r.datasetIndex!==i.datasetIndex||r.index!==i.index)return!1;return!0}function p(t){if(r(t))return t.map(p);if(i(t)){const e=Object.create(null),n=Object.keys(t),o=n.length;let r=0;for(;r<o;++r)e[n[r]]=p(t[n[r]]);return e}return t}function g(t){return-1===["__proto__","prototype","constructor"].indexOf(t)}function y(t,e,n,o){if(!g(t))return;const r=e[t],a=n[t];i(r)&&i(a)?b(r,a,o):e[t]=p(a)}function b(t,e,n){const o=r(e)?e:[e],a=o.length;if(!i(t))return t;const s=(n=n||{}).merger||y;let c;for(let e=0;e<a;++e){if(c=o[e],!i(c))continue;const r=Object.keys(c);for(let e=0,o=r.length;e<o;++e)s(r[e],t,c,n)}return t}function x(t,e){return b(t,e,{merger:m})}function m(t,e,n){if(!g(t))return;const o=e[t],r=n[t];i(o)&&i(r)?x(o,r):Object.prototype.hasOwnProperty.call(e,t)||(e[t]=p(r))}const v={"":t=>t,x:t=>t.x,y:t=>t.y};function M(t){const e=t.split("."),n=[];let o="";for(const t of e)o+=t,o.endsWith("\\")?o=o.slice(0,-1)+".":(n.push(o),o="");return n}function w(t,e){const n=v[e]||(v[e]=function(t){const e=M(t);return t=>{for(const n of e){if(""===n)break;t=t&&t[n]}return t}}(e));return n(t)}function k(t){return t.charAt(0).toUpperCase()+t.slice(1)}const _=t=>void 0!==t,O=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const n of t)if(!e.has(n))return!1;return!0};function T(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const S=Math.PI,C=2*S,I=C+S,j=Number.POSITIVE_INFINITY,R=S/180,W=S/2,B=S/4,A=2*S/3,D=Math.log10,N=Math.sign;function L(t,e,n){return Math.abs(t-e)<n}function z(t){const e=Math.round(t);t=L(t,e,t/1e3)?e:t;const n=Math.pow(10,Math.floor(D(t))),o=t/n;return(o<=1?1:o<=2?2:o<=5?5:10)*n}function E(t){const e=[],n=Math.sqrt(t);let o;for(o=1;o<n;o++)t%o==0&&(e.push(o),e.push(t/o));return n===(0|n)&&e.push(n),e.sort(((t,e)=>t-e)).pop(),e}function H(t){return!isNaN(parseFloat(t))&&isFinite(t)}function F(t,e){const n=Math.round(t);return n-e<=t&&n+e>=t}function Q(t,e,n){let o,r,i;for(o=0,r=t.length;o<r;o++)i=t[o][n],isNaN(i)||(e.min=Math.min(e.min,i),e.max=Math.max(e.max,i))}function q(t){return t*(S/180)}function $(t){return t*(180/S)}function K(t){if(!a(t))return;let e=1,n=0;for(;Math.round(t*e)/e!==t;)e*=10,n++;return n}function J(t,e){const n=e.x-t.x,o=e.y-t.y,r=Math.sqrt(n*n+o*o);let i=Math.atan2(o,n);return i<-.5*S&&(i+=C),{angle:i,distance:r}}function V(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))}function G(t,e){return(t-e+I)%C-S}function Y(t){return(t%C+C)%C}function U(t,e,n,o){const r=Y(t),i=Y(e),a=Y(n),s=Y(i-r),c=Y(a-r),l=Y(r-i),u=Y(r-a);return r===i||r===a||o&&i===a||s>c&&l<u}function X(t,e,n){return Math.max(e,Math.min(n,t))}function Z(t){return X(t,-32768,32767)}function tt(t,e,n,o=1e-6){return t>=Math.min(e,n)-o&&t<=Math.max(e,n)+o}function et(t,e,n){n=n||(n=>t[n]<e);let o,r=t.length-1,i=0;for(;r-i>1;)o=i+r>>1,n(o)?i=o:r=o;return{lo:i,hi:r}}const nt=(t,e,n,o)=>et(t,n,o?o=>{const r=t[o][e];return r<n||r===n&&t[o+1][e]===n}:o=>t[o][e]<n),ot=(t,e,n)=>et(t,n,(o=>t[o][e]>=n));function rt(t,e,n){let o=0,r=t.length;for(;o<r&&t[o]<e;)o++;for(;r>o&&t[r-1]>n;)r--;return o>0||r<t.length?t.slice(o,r):t}const it=["push","pop","shift","splice","unshift"];function at(t,e){t._chartjs?t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),it.forEach((e=>{const n="_onData"+k(e),o=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const r=o.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[n]&&t[n](...e)})),r}})})))}function st(t,e){const n=t._chartjs;if(!n)return;const o=n.listeners,r=o.indexOf(e);-1!==r&&o.splice(r,1),o.length>0||(it.forEach((e=>{delete t[e]})),delete t._chartjs)}function ct(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const lt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ut(t,e){let n=[],o=!1;return function(...r){n=r,o||(o=!0,lt.call(window,(()=>{o=!1,t.apply(e,n)})))}}function ht(t,e){let n;return function(...o){return e?(clearTimeout(n),n=setTimeout(t,e,o)):t.apply(this,o),e}}const ft=t=>"start"===t?"left":"end"===t?"right":"center",dt=(t,e,n)=>"start"===t?e:"end"===t?n:(e+n)/2,pt=(t,e,n,o)=>t===(o?"left":"right")?n:"center"===t?(e+n)/2:e;function gt(t,e,n){const o=e.length;let r=0,i=o;if(t._sorted){const{iScale:a,_parsed:s}=t,c=a.axis,{min:l,max:u,minDefined:h,maxDefined:f}=a.getUserBounds();h&&(r=X(Math.min(nt(s,c,l).lo,n?o:nt(e,c,a.getPixelForValue(l)).lo),0,o-1)),i=f?X(Math.max(nt(s,a.axis,u,!0).hi+1,n?0:nt(e,c,a.getPixelForValue(u),!0).hi+1),r,o)-r:o-r}return{start:r,count:i}}function yt(t){const{xScale:e,yScale:n,_scaleRanges:o}=t,r={xmin:e.min,xmax:e.max,ymin:n.min,ymax:n.max};if(!o)return t._scaleRanges=r,!0;const i=o.xmin!==e.min||o.xmax!==e.max||o.ymin!==n.min||o.ymax!==n.max;return Object.assign(o,r),i}const bt=t=>0===t||1===t,xt=(t,e,n)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*C/n),mt=(t,e,n)=>Math.pow(2,-10*t)*Math.sin((t-e)*C/n)+1,vt={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*W),easeOutSine:t=>Math.sin(t*W),easeInOutSine:t=>-.5*(Math.cos(S*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>bt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>bt(t)?t:xt(t,.075,.3),easeOutElastic:t=>bt(t)?t:mt(t,.075,.3),easeInOutElastic(t){const e=.1125;return bt(t)?t:t<.5?.5*xt(2*t,e,.45):.5+.5*mt(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-vt.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,n=2.75;return t<1/n?e*t*t:t<2/n?e*(t-=1.5/n)*t+.75:t<2.5/n?e*(t-=2.25/n)*t+.9375:e*(t-=2.625/n)*t+.984375},easeInOutBounce:t=>t<.5?.5*vt.easeInBounce(2*t):.5*vt.easeOutBounce(2*t-1)+.5};function Mt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function wt(e){return Mt(e)?e:new t(e)}function kt(e){return Mt(e)?e:new t(e).saturate(.5).darken(.1).hexString()}const _t=["x","y","borderWidth","radius","tension"],Ot=["color","borderColor","backgroundColor"];const Pt=new Map;function Tt(t,e,n){return function(t,e){e=e||{};const n=t+JSON.stringify(e);let o=Pt.get(n);return o||(o=new Intl.NumberFormat(t,e),Pt.set(n,o)),o}(e,n).format(t)}const St={values:t=>r(t)?t:""+t,numeric(t,e,n){if(0===t)return"0";const o=this.chart.options.locale;let r,i=t;if(n.length>1){const e=Math.max(Math.abs(n[0].value),Math.abs(n[n.length-1].value));(e<1e-4||e>1e15)&&(r="scientific"),i=function(t,e){let n=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(n)>=1&&t!==Math.floor(t)&&(n=t-Math.floor(t));return n}(t,n)}const a=D(Math.abs(i)),s=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),c={notation:r,minimumFractionDigits:s,maximumFractionDigits:s};return Object.assign(c,this.options.ticks.format),Tt(t,o,c)},logarithmic(t,e,n){if(0===t)return"0";const o=n[e].significand||t/Math.pow(10,Math.floor(D(t)));return[1,2,3,5,10,15].includes(o)||e>.8*n.length?St.numeric.call(this,t,e,n):""}};var Ct={formatters:St};const It=Object.create(null),jt=Object.create(null);function Rt(t,e){if(!e)return t;const n=e.split(".");for(let e=0,o=n.length;e<o;++e){const o=n[e];t=t[o]||(t[o]=Object.create(null))}return t}function Wt(t,e,n){return"string"==typeof e?b(Rt(t,e),n):b(Rt(t,""),e)}class Bt{constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=t=>t.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>kt(e.backgroundColor),this.hoverBorderColor=(t,e)=>kt(e.borderColor),this.hoverColor=(t,e)=>kt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return Wt(this,t,e)}get(t){return Rt(this,t)}describe(t,e){return Wt(jt,t,e)}override(t,e){return Wt(It,t,e)}route(t,e,n,o){const r=Rt(this,t),a=Rt(this,n),s="_"+e;Object.defineProperties(r,{[s]:{value:r[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[s],e=a[o];return i(t)?Object.assign({},e,t):c(t,e)},set(t){this[s]=t}}})}apply(t){t.forEach((t=>t(this)))}}var At=new Bt({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Ot},numbers:{type:"number",properties:_t}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:Ct.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function Dt(t){return!t||o(t.size)||o(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Nt(t,e,n,o,r){let i=e[r];return i||(i=e[r]=t.measureText(r).width,n.push(r)),i>o&&(o=i),o}function Lt(t,e,n,o){let i=(o=o||{}).data=o.data||{},a=o.garbageCollect=o.garbageCollect||[];o.font!==e&&(i=o.data={},a=o.garbageCollect=[],o.font=e),t.save(),t.font=e;let s=0;const c=n.length;let l,u,h,f,d;for(l=0;l<c;l++)if(f=n[l],null==f||r(f)){if(r(f))for(u=0,h=f.length;u<h;u++)d=f[u],null==d||r(d)||(s=Nt(t,i,a,s,d))}else s=Nt(t,i,a,s,f);t.restore();const p=a.length/2;if(p>n.length){for(l=0;l<p;l++)delete i[a[l]];a.splice(0,p)}return s}function zt(t,e,n){const o=t.currentDevicePixelRatio,r=0!==n?Math.max(n/2,.5):0;return Math.round((e-r)*o)/o+r}function Et(t,e){(e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore()}function Ht(t,e,n,o){Ft(t,e,n,o,null)}function Ft(t,e,n,o,r){let i,a,s,c,l,u,h,f;const d=e.pointStyle,p=e.rotation,g=e.radius;let y=(p||0)*R;if(d&&"object"==typeof d&&(i=d.toString(),"[object HTMLImageElement]"===i||"[object HTMLCanvasElement]"===i))return t.save(),t.translate(n,o),t.rotate(y),t.drawImage(d,-d.width/2,-d.height/2,d.width,d.height),void t.restore();if(!(isNaN(g)||g<=0)){switch(t.beginPath(),d){default:r?t.ellipse(n,o,r/2,g,0,0,C):t.arc(n,o,g,0,C),t.closePath();break;case"triangle":u=r?r/2:g,t.moveTo(n+Math.sin(y)*u,o-Math.cos(y)*g),y+=A,t.lineTo(n+Math.sin(y)*u,o-Math.cos(y)*g),y+=A,t.lineTo(n+Math.sin(y)*u,o-Math.cos(y)*g),t.closePath();break;case"rectRounded":l=.516*g,c=g-l,a=Math.cos(y+B)*c,h=Math.cos(y+B)*(r?r/2-l:c),s=Math.sin(y+B)*c,f=Math.sin(y+B)*(r?r/2-l:c),t.arc(n-h,o-s,l,y-S,y-W),t.arc(n+f,o-a,l,y-W,y),t.arc(n+h,o+s,l,y,y+W),t.arc(n-f,o+a,l,y+W,y+S),t.closePath();break;case"rect":if(!p){c=Math.SQRT1_2*g,u=r?r/2:c,t.rect(n-u,o-c,2*u,2*c);break}y+=B;case"rectRot":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+f,o-a),t.lineTo(n+h,o+s),t.lineTo(n-f,o+a),t.closePath();break;case"crossRot":y+=B;case"cross":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a);break;case"star":h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a),y+=B,h=Math.cos(y)*(r?r/2:g),a=Math.cos(y)*g,s=Math.sin(y)*g,f=Math.sin(y)*(r?r/2:g),t.moveTo(n-h,o-s),t.lineTo(n+h,o+s),t.moveTo(n+f,o-a),t.lineTo(n-f,o+a);break;case"line":a=r?r/2:Math.cos(y)*g,s=Math.sin(y)*g,t.moveTo(n-a,o-s),t.lineTo(n+a,o+s);break;case"dash":t.moveTo(n,o),t.lineTo(n+Math.cos(y)*(r?r/2:g),o+Math.sin(y)*g);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function Qt(t,e,n){return n=n||.5,!e||t&&t.x>e.left-n&&t.x<e.right+n&&t.y>e.top-n&&t.y<e.bottom+n}function qt(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()}function $t(t){t.restore()}function Kt(t,e,n,o,r){if(!e)return t.lineTo(n.x,n.y);if("middle"===r){const o=(e.x+n.x)/2;t.lineTo(o,e.y),t.lineTo(o,n.y)}else"after"===r!=!!o?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y);t.lineTo(n.x,n.y)}function Jt(t,e,n,o){if(!e)return t.lineTo(n.x,n.y);t.bezierCurveTo(o?e.cp1x:e.cp2x,o?e.cp1y:e.cp2y,o?n.cp2x:n.cp1x,o?n.cp2y:n.cp1y,n.x,n.y)}function Vt(t,e,n,o,r){if(r.strikethrough||r.underline){const i=t.measureText(o),a=e-i.actualBoundingBoxLeft,s=e+i.actualBoundingBoxRight,c=n-i.actualBoundingBoxAscent,l=n+i.actualBoundingBoxDescent,u=r.strikethrough?(c+l)/2:l;t.strokeStyle=t.fillStyle,t.beginPath(),t.lineWidth=r.decorationWidth||2,t.moveTo(a,u),t.lineTo(s,u),t.stroke()}}function Gt(t,e){const n=t.fillStyle;t.fillStyle=e.color,t.fillRect(e.left,e.top,e.width,e.height),t.fillStyle=n}function Yt(t,e,n,i,a,s={}){const c=r(e)?e:[e],l=s.strokeWidth>0&&""!==s.strokeColor;let u,h;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),o(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,s),u=0;u<c.length;++u)h=c[u],s.backdrop&&Gt(t,s.backdrop),l&&(s.strokeColor&&(t.strokeStyle=s.strokeColor),o(s.strokeWidth)||(t.lineWidth=s.strokeWidth),t.strokeText(h,n,i,s.maxWidth)),t.fillText(h,n,i,s.maxWidth),Vt(t,n,i,h,s),i+=Number(a.lineHeight);t.restore()}function Ut(t,e){const{x:n,y:o,w:r,h:i,radius:a}=e;t.arc(n+a.topLeft,o+a.topLeft,a.topLeft,1.5*S,S,!0),t.lineTo(n,o+i-a.bottomLeft),t.arc(n+a.bottomLeft,o+i-a.bottomLeft,a.bottomLeft,S,W,!0),t.lineTo(n+r-a.bottomRight,o+i),t.arc(n+r-a.bottomRight,o+i-a.bottomRight,a.bottomRight,W,0,!0),t.lineTo(n+r,o+a.topRight),t.arc(n+r-a.topRight,o+a.topRight,a.topRight,0,-W,!0),t.lineTo(n+a.topLeft,o)}const Xt=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,Zt=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function te(t,e){const n=(""+t).match(Xt);if(!n||"normal"===n[1])return 1.2*e;switch(t=+n[2],n[3]){case"px":return t;case"%":t/=100}return e*t}function ee(t,e){const n={},o=i(e),r=o?Object.keys(e):e,a=i(t)?o?n=>c(t[n],t[e[n]]):e=>t[e]:()=>t;for(const t of r)n[t]=+a(t)||0;return n}function ne(t){return ee(t,{top:"y",right:"x",bottom:"y",left:"x"})}function oe(t){return ee(t,["topLeft","topRight","bottomLeft","bottomRight"])}function re(t){const e=ne(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function ie(t,e){t=t||{},e=e||At.font;let n=c(t.size,e.size);"string"==typeof n&&(n=parseInt(n,10));let o=c(t.style,e.style);o&&!(""+o).match(Zt)&&(console.warn('Invalid font style specified: "'+o+'"'),o=void 0);const r={family:c(t.family,e.family),lineHeight:te(c(t.lineHeight,e.lineHeight),n),size:n,style:o,weight:c(t.weight,e.weight),string:""};return r.string=Dt(r),r}function ae(t,e,n,o){let i,a,s,c=!0;for(i=0,a=t.length;i<a;++i)if(s=t[i],void 0!==s&&(void 0!==e&&"function"==typeof s&&(s=s(e),c=!1),void 0!==n&&r(s)&&(s=s[n%s.length],c=!1),void 0!==s))return o&&!c&&(o.cacheable=!1),s}function se(t,e,n){const{min:o,max:r}=t,i=u(e,(r-o)/2),a=(t,e)=>n&&0===t?0:t+e;return{min:a(o,-Math.abs(i)),max:a(r,i)}}function ce(t,e){return Object.assign(Object.create(t),e)}function le(t,e=[""],n,o,r=()=>t[0]){const i=n||t;void 0===o&&(o=ve("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:i,_fallback:o,_getTarget:r,override:n=>le([n,...t],e,i,o)};return new Proxy(a,{deleteProperty:(e,n)=>(delete e[n],delete e._keys,delete t[0][n],!0),get:(n,o)=>pe(n,o,(()=>function(t,e,n,o){let r;for(const i of e)if(r=ve(fe(i,t),n),void 0!==r)return de(t,r)?xe(n,o,t,r):r}(o,e,t,n))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Me(t).includes(e),ownKeys:t=>Me(t),set(t,e,n){const o=t._storage||(t._storage=r());return t[e]=o[e]=n,delete t._keys,!0}})}function ue(t,e,n,o){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:n,_stack:new Set,_descriptors:he(t,o),setContext:e=>ue(t,e,n,o),override:r=>ue(t.override(r),e,n,o)};return new Proxy(a,{deleteProperty:(e,n)=>(delete e[n],delete t[n],!0),get:(t,e,n)=>pe(t,e,(()=>function(t,e,n){const{_proxy:o,_context:a,_subProxy:s,_descriptors:c}=t;let l=o[e];O(l)&&c.isScriptable(e)&&(l=function(t,e,n,o){const{_proxy:r,_context:i,_subProxy:a,_stack:s}=n;if(s.has(t))throw new Error("Recursion detected: "+Array.from(s).join("->")+"->"+t);s.add(t);let c=e(i,a||o);s.delete(t),de(t,c)&&(c=xe(r._scopes,r,t,c));return c}(e,l,t,n));r(l)&&l.length&&(l=function(t,e,n,o){const{_proxy:r,_context:a,_subProxy:s,_descriptors:c}=n;if(void 0!==a.index&&o(t))return e[a.index%e.length];if(i(e[0])){const n=e,o=r._scopes.filter((t=>t!==n));e=[];for(const i of n){const n=xe(o,r,t,i);e.push(ue(n,a,s&&s[t],c))}}return e}(e,l,t,c.isIndexable));de(e,l)&&(l=ue(l,a,s&&s[e],c));return l}(t,e,n))),getOwnPropertyDescriptor:(e,n)=>e._descriptors.allKeys?Reflect.has(t,n)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,n),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,n)=>Reflect.has(t,n),ownKeys:()=>Reflect.ownKeys(t),set:(e,n,o)=>(t[n]=o,delete e[n],!0)})}function he(t,e={scriptable:!0,indexable:!0}){const{_scriptable:n=e.scriptable,_indexable:o=e.indexable,_allKeys:r=e.allKeys}=t;return{allKeys:r,scriptable:n,indexable:o,isScriptable:O(n)?n:()=>n,isIndexable:O(o)?o:()=>o}}const fe=(t,e)=>t?t+k(e):e,de=(t,e)=>i(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function pe(t,e,n){if(Object.prototype.hasOwnProperty.call(t,e))return t[e];const o=n();return t[e]=o,o}function ge(t,e,n){return O(t)?t(e,n):t}const ye=(t,e)=>!0===t?e:"string"==typeof t?w(e,t):void 0;function be(t,e,n,o,r){for(const i of e){const e=ye(n,i);if(e){t.add(e);const i=ge(e._fallback,n,r);if(void 0!==i&&i!==n&&i!==o)return i}else if(!1===e&&void 0!==o&&n!==o)return null}return!1}function xe(t,e,n,o){const a=e._rootScopes,s=ge(e._fallback,n,o),c=[...t,...a],l=new Set;l.add(o);let u=me(l,c,n,s||n,o);return null!==u&&((void 0===s||s===n||(u=me(l,c,s,u,o),null!==u))&&le(Array.from(l),[""],a,s,(()=>function(t,e,n){const o=t._getTarget();e in o||(o[e]={});const a=o[e];if(r(a)&&i(n))return n;return a||{}}(e,n,o))))}function me(t,e,n,o,r){for(;n;)n=be(t,e,n,o,r);return n}function ve(t,e){for(const n of e){if(!n)continue;const e=n[t];if(void 0!==e)return e}}function Me(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const n of t)for(const t of Object.keys(n).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function we(t,e,n,o){const{iScale:r}=t,{key:i="r"}=this._parsing,a=new Array(o);let s,c,l,u;for(s=0,c=o;s<c;++s)l=s+n,u=e[l],a[s]={r:r.parse(w(u,i),l)};return a}const ke=Number.EPSILON||1e-14,_e=(t,e)=>e<t.length&&!t[e].skip&&t[e],Oe=t=>"x"===t?"y":"x";function Pe(t,e,n,o){const r=t.skip?e:t,i=e,a=n.skip?e:n,s=V(i,r),c=V(a,i);let l=s/(s+c),u=c/(s+c);l=isNaN(l)?0:l,u=isNaN(u)?0:u;const h=o*l,f=o*u;return{previous:{x:i.x-h*(a.x-r.x),y:i.y-h*(a.y-r.y)},next:{x:i.x+f*(a.x-r.x),y:i.y+f*(a.y-r.y)}}}function Te(t,e="x"){const n=Oe(e),o=t.length,r=Array(o).fill(0),i=Array(o);let a,s,c,l=_e(t,0);for(a=0;a<o;++a)if(s=c,c=l,l=_e(t,a+1),c){if(l){const t=l[e]-c[e];r[a]=0!==t?(l[n]-c[n])/t:0}i[a]=s?l?N(r[a-1])!==N(r[a])?0:(r[a-1]+r[a])/2:r[a-1]:r[a]}!function(t,e,n){const o=t.length;let r,i,a,s,c,l=_e(t,0);for(let u=0;u<o-1;++u)c=l,l=_e(t,u+1),c&&l&&(L(e[u],0,ke)?n[u]=n[u+1]=0:(r=n[u]/e[u],i=n[u+1]/e[u],s=Math.pow(r,2)+Math.pow(i,2),s<=9||(a=3/Math.sqrt(s),n[u]=r*a*e[u],n[u+1]=i*a*e[u])))}(t,r,i),function(t,e,n="x"){const o=Oe(n),r=t.length;let i,a,s,c=_e(t,0);for(let l=0;l<r;++l){if(a=s,s=c,c=_e(t,l+1),!s)continue;const r=s[n],u=s[o];a&&(i=(r-a[n])/3,s[`cp1${n}`]=r-i,s[`cp1${o}`]=u-i*e[l]),c&&(i=(c[n]-r)/3,s[`cp2${n}`]=r+i,s[`cp2${o}`]=u+i*e[l])}}(t,i,e)}function Se(t,e,n){return Math.max(Math.min(t,n),e)}function Ce(t,e,n,o,r){let i,a,s,c;if(e.spanGaps&&(t=t.filter((t=>!t.skip))),"monotone"===e.cubicInterpolationMode)Te(t,r);else{let n=o?t[t.length-1]:t[0];for(i=0,a=t.length;i<a;++i)s=t[i],c=Pe(n,s,t[Math.min(i+1,a-(o?0:1))%a],e.tension),s.cp1x=c.previous.x,s.cp1y=c.previous.y,s.cp2x=c.next.x,s.cp2y=c.next.y,n=s}e.capBezierPoints&&function(t,e){let n,o,r,i,a,s=Qt(t[0],e);for(n=0,o=t.length;n<o;++n)a=i,i=s,s=n<o-1&&Qt(t[n+1],e),i&&(r=t[n],a&&(r.cp1x=Se(r.cp1x,e.left,e.right),r.cp1y=Se(r.cp1y,e.top,e.bottom)),s&&(r.cp2x=Se(r.cp2x,e.left,e.right),r.cp2y=Se(r.cp2y,e.top,e.bottom)))}(t,n)}function Ie(){return"undefined"!=typeof window&&"undefined"!=typeof document}function je(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function Re(t,e,n){let o;return"string"==typeof t?(o=parseInt(t,10),-1!==t.indexOf("%")&&(o=o/100*e.parentNode[n])):o=t,o}const We=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function Be(t,e){return We(t).getPropertyValue(e)}const Ae=["top","right","bottom","left"];function De(t,e,n){const o={};n=n?"-"+n:"";for(let r=0;r<4;r++){const i=Ae[r];o[i]=parseFloat(t[e+"-"+i+n])||0}return o.width=o.left+o.right,o.height=o.top+o.bottom,o}function Ne(t,e){if("native"in t)return t;const{canvas:n,currentDevicePixelRatio:o}=e,r=We(n),i="border-box"===r.boxSizing,a=De(r,"padding"),s=De(r,"border","width"),{x:c,y:l,box:u}=function(t,e){const n=t.touches,o=n&&n.length?n[0]:t,{offsetX:r,offsetY:i}=o;let a,s,c=!1;if(((t,e,n)=>(t>0||e>0)&&(!n||!n.shadowRoot))(r,i,t.target))a=r,s=i;else{const t=e.getBoundingClientRect();a=o.clientX-t.left,s=o.clientY-t.top,c=!0}return{x:a,y:s,box:c}}(t,n),h=a.left+(u&&s.left),f=a.top+(u&&s.top);let{width:d,height:p}=e;return i&&(d-=a.width+s.width,p-=a.height+s.height),{x:Math.round((c-h)/d*n.width/o),y:Math.round((l-f)/p*n.height/o)}}const Le=t=>Math.round(10*t)/10;function ze(t,e,n,o){const r=We(t),i=De(r,"margin"),a=Re(r.maxWidth,t,"clientWidth")||j,s=Re(r.maxHeight,t,"clientHeight")||j,c=function(t,e,n){let o,r;if(void 0===e||void 0===n){const i=je(t);if(i){const t=i.getBoundingClientRect(),a=We(i),s=De(a,"border","width"),c=De(a,"padding");e=t.width-c.width-s.width,n=t.height-c.height-s.height,o=Re(a.maxWidth,i,"clientWidth"),r=Re(a.maxHeight,i,"clientHeight")}else e=t.clientWidth,n=t.clientHeight}return{width:e,height:n,maxWidth:o||j,maxHeight:r||j}}(t,e,n);let{width:l,height:u}=c;if("content-box"===r.boxSizing){const t=De(r,"border","width"),e=De(r,"padding");l-=e.width+t.width,u-=e.height+t.height}l=Math.max(0,l-i.width),u=Math.max(0,o?l/o:u-i.height),l=Le(Math.min(l,a,c.maxWidth)),u=Le(Math.min(u,s,c.maxHeight)),l&&!u&&(u=Le(l/2));return(void 0!==e||void 0!==n)&&o&&c.height&&u>c.height&&(u=c.height,l=Le(Math.floor(u*o))),{width:l,height:u}}function Ee(t,e,n){const o=e||1,r=Math.floor(t.height*o),i=Math.floor(t.width*o);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(n||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==o||a.height!==r||a.width!==i)&&(t.currentDevicePixelRatio=o,a.height=r,a.width=i,t.ctx.setTransform(o,0,0,o,0,0),!0)}const He=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(t){}return t}();function Fe(t,e){const n=Be(t,e),o=n&&n.match(/^(\d+)(\.\d+)?px$/);return o?+o[1]:void 0}function Qe(t,e,n,o){return{x:t.x+n*(e.x-t.x),y:t.y+n*(e.y-t.y)}}function qe(t,e,n,o){return{x:t.x+n*(e.x-t.x),y:"middle"===o?n<.5?t.y:e.y:"after"===o?n<1?t.y:e.y:n>0?e.y:t.y}}function $e(t,e,n,o){const r={x:t.cp2x,y:t.cp2y},i={x:e.cp1x,y:e.cp1y},a=Qe(t,r,n),s=Qe(r,i,n),c=Qe(i,e,n),l=Qe(a,s,n),u=Qe(s,c,n);return Qe(l,u,n)}function Ke(t,e,n){return t?function(t,e){return{x:n=>t+t+e-n,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,n):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Je(t,e){let n,o;"ltr"!==e&&"rtl"!==e||(n=t.canvas.style,o=[n.getPropertyValue("direction"),n.getPropertyPriority("direction")],n.setProperty("direction",e,"important"),t.prevTextDirection=o)}function Ve(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Ge(t){return"angle"===t?{between:U,compare:G,normalize:Y}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ye({start:t,end:e,count:n,loop:o,style:r}){return{start:t%n,end:e%n,loop:o&&(e-t+1)%n==0,style:r}}function Ue(t,e,n){if(!n)return[t];const{property:o,start:r,end:i}=n,a=e.length,{compare:s,between:c,normalize:l}=Ge(o),{start:u,end:h,loop:f,style:d}=function(t,e,n){const{property:o,start:r,end:i}=n,{between:a,normalize:s}=Ge(o),c=e.length;let l,u,{start:h,end:f,loop:d}=t;if(d){for(h+=c,f+=c,l=0,u=c;l<u&&a(s(e[h%c][o]),r,i);++l)h--,f--;h%=c,f%=c}return f<h&&(f+=c),{start:h,end:f,loop:d,style:t.style}}(t,e,n),p=[];let g,y,b,x=!1,m=null;const v=()=>x||c(r,b,g)&&0!==s(r,b),M=()=>!x||0===s(i,g)||c(i,b,g);for(let t=u,n=u;t<=h;++t)y=e[t%a],y.skip||(g=l(y[o]),g!==b&&(x=c(g,r,i),null===m&&v()&&(m=0===s(g,r)?t:n),null!==m&&M()&&(p.push(Ye({start:m,end:t,loop:f,count:a,style:d})),m=null),n=t,b=g));return null!==m&&p.push(Ye({start:m,end:h,loop:f,count:a,style:d})),p}function Xe(t,e){const n=[],o=t.segments;for(let r=0;r<o.length;r++){const i=Ue(o[r],t.points,e);i.length&&n.push(...i)}return n}function Ze(t,e){const n=t.points,o=t.options.spanGaps,r=n.length;if(!r)return[];const i=!!t._loop,{start:a,end:s}=function(t,e,n,o){let r=0,i=e-1;if(n&&!o)for(;r<e&&!t[r].skip;)r++;for(;r<e&&t[r].skip;)r++;for(r%=e,n&&(i+=r);i>r&&t[i%e].skip;)i--;return i%=e,{start:r,end:i}}(n,r,i,o);if(!0===o)return tn(t,[{start:a,end:s,loop:i}],n,e);return tn(t,function(t,e,n,o){const r=t.length,i=[];let a,s=e,c=t[e];for(a=e+1;a<=n;++a){const n=t[a%r];n.skip||n.stop?c.skip||(o=!1,i.push({start:e%r,end:(a-1)%r,loop:o}),e=s=n.stop?a:null):(s=a,c.skip&&(e=a)),c=n}return null!==s&&i.push({start:e%r,end:s%r,loop:o}),i}(n,a,s<a?s+r:s,!!t._fullLoop&&0===a&&s===r-1),n,e)}function tn(t,e,n,o){return o&&o.setContext&&n?function(t,e,n,o){const r=t._chart.getContext(),i=en(t.options),{_datasetIndex:a,options:{spanGaps:s}}=t,c=n.length,l=[];let u=i,h=e[0].start,f=h;function d(t,e,o,r){const i=s?-1:1;if(t!==e){for(t+=c;n[t%c].skip;)t-=i;for(;n[e%c].skip;)e+=i;t%c!=e%c&&(l.push({start:t%c,end:e%c,loop:o,style:r}),u=r,h=e%c)}}for(const t of e){h=s?h:t.start;let e,i=n[h%c];for(f=h+1;f<=t.end;f++){const s=n[f%c];e=en(o.setContext(ce(r,{type:"segment",p0:i,p1:s,p0DataIndex:(f-1)%c,p1DataIndex:f%c,datasetIndex:a}))),nn(e,u)&&d(h,f-1,t.loop,u),i=s,u=e}h<f-1&&d(h,f-1,t.loop,u)}return l}(t,e,n,o):e}function en(t){return{backgroundColor:t.backgroundColor,borderCapStyle:t.borderCapStyle,borderDash:t.borderDash,borderDashOffset:t.borderDashOffset,borderJoinStyle:t.borderJoinStyle,borderWidth:t.borderWidth,borderColor:t.borderColor}}function nn(t,e){if(!e)return!1;const n=[],o=function(t,e){return Mt(e)?(n.includes(e)||n.push(e),n.indexOf(e)):e};return JSON.stringify(t,o)!==JSON.stringify(e,o)}export{$t as $,ot as A,nt as B,Qt as C,J as D,re as E,f as F,ze as G,W as H,je as I,Fe as J,He as K,ut as L,Ie as M,E as N,s as O,S as P,h as Q,se as R,X as S,C as T,$ as U,Nt as V,Z as W,zt as X,qt as Y,Yt as Z,ct as _,ae as a,ie as a0,ft as a1,dt as a2,It as a3,b as a4,k as a5,jt as a6,O as a7,ue as a8,le as a9,Je as aA,pt as aB,Ve as aC,Ft as aD,V as aE,e as aF,Q as aG,z as aH,F as aI,L as aJ,K as aK,Ct as aL,D as aM,Lt as aN,rt as aO,et as aP,Mt as aQ,kt as aR,p as aS,y as aT,m as aU,M as aW,Dt as aX,Pe as aY,Te as aZ,Be as a_,he as aa,x as ab,n as ac,ht as ad,Ee as ae,Et as af,P as ag,d as ah,T as ai,tt as aj,ee as ak,Ce as al,Ze as am,Xe as an,qe as ao,$e as ap,Qe as aq,Kt as ar,Jt as as,Ht as at,Ut as au,ne as av,oe as aw,Ue as ax,Y as ay,Ke as az,r as b,te as b0,I as b1,j as b2,R as b3,B as b4,A as b5,G as b6,wt as c,At as d,vt as e,w as f,a as g,_ as h,i,ce as j,o as k,at as l,l as m,u as n,Tt as o,U as p,gt as q,lt as r,N as s,q as t,st as u,c as v,yt as w,H as x,we as y,Ne as z};
|
|
8
8
|
//# sourceMappingURL=helpers.segment.js.map
|