@esfaenza/es-charts 12.2.13 → 13.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/esfaenza-es-charts.d.ts +1 -6
  2. package/esm2020/esfaenza-es-charts.mjs +5 -0
  3. package/esm2020/lib/adapters/classes/BaseAdapter.mjs +50 -0
  4. package/{esm2015/lib/adapters/classes/IBaseAdapter.js → esm2020/lib/adapters/classes/IBaseAdapter.mjs} +0 -0
  5. package/{esm2015/lib/adapters/index.js → esm2020/lib/adapters/index.mjs} +0 -0
  6. package/esm2020/lib/components/base/base-chart.component.mjs +339 -0
  7. package/esm2020/lib/components/chart-pager/chart-pager.component.mjs +89 -0
  8. package/{esm2015/lib/components/index.js → esm2020/lib/components/index.mjs} +0 -0
  9. package/esm2020/lib/components/specializations/es-area-chart.component.mjs +78 -0
  10. package/esm2020/lib/components/specializations/es-chart.component.mjs +111 -0
  11. package/esm2020/lib/components/specializations/es-line-chart.component.mjs +110 -0
  12. package/esm2020/lib/components/specializations/es-pie-chart.component.mjs +99 -0
  13. package/esm2020/lib/components/specializations/es-vertical-2d-chart.component.mjs +96 -0
  14. package/esm2020/lib/components/specializations/es-vertical-chart.component.mjs +93 -0
  15. package/esm2020/lib/components/specializations/es-vertical-stacked-chart.component.mjs +93 -0
  16. package/esm2020/lib/es-charts.module.mjs +61 -0
  17. package/{esm2015/lib/models/EsChaartsModuleConfig.js → esm2020/lib/models/EsChaartsModuleConfig.mjs} +0 -0
  18. package/esm2020/lib/models/core/classes/ChartDispatcher.mjs +91 -0
  19. package/{esm2015/lib/models/core/classes/ChartLoader.js → esm2020/lib/models/core/classes/ChartLoader.mjs} +0 -0
  20. package/{esm2015/lib/models/core/classes/ChartThemes.js → esm2020/lib/models/core/classes/ChartThemes.mjs} +0 -0
  21. package/{esm2015/lib/models/core/index.js → esm2020/lib/models/core/index.mjs} +0 -0
  22. package/{esm2015/lib/models/data/classes/AreaChartData.js → esm2020/lib/models/data/classes/AreaChartData.mjs} +0 -0
  23. package/{esm2015/lib/models/data/classes/LineChartData.js → esm2020/lib/models/data/classes/LineChartData.mjs} +0 -0
  24. package/{esm2015/lib/models/data/classes/PagedChartData.js → esm2020/lib/models/data/classes/PagedChartData.mjs} +0 -0
  25. package/{esm2015/lib/models/data/classes/PieChartData.js → esm2020/lib/models/data/classes/PieChartData.mjs} +0 -0
  26. package/{esm2015/lib/models/data/classes/Vertical2DChartData.js → esm2020/lib/models/data/classes/Vertical2DChartData.mjs} +0 -0
  27. package/{esm2015/lib/models/data/classes/VerticalChartData.js → esm2020/lib/models/data/classes/VerticalChartData.mjs} +0 -0
  28. package/{esm2015/lib/models/data/classes/VerticalStackedChartData.js → esm2020/lib/models/data/classes/VerticalStackedChartData.mjs} +0 -0
  29. package/{esm2015/lib/models/data/classes/base/DateValue.js → esm2020/lib/models/data/classes/base/DateValue.mjs} +0 -0
  30. package/{esm2015/lib/models/data/classes/base/KeyValue.js → esm2020/lib/models/data/classes/base/KeyValue.mjs} +0 -0
  31. package/{esm2015/lib/models/data/classes/base/KeyValueColor.js → esm2020/lib/models/data/classes/base/KeyValueColor.mjs} +0 -0
  32. package/{esm2015/lib/models/data/classes/base/Limit.js → esm2020/lib/models/data/classes/base/Limit.mjs} +0 -0
  33. package/{esm2015/lib/models/data/classes/base/LineSerie.js → esm2020/lib/models/data/classes/base/LineSerie.mjs} +0 -0
  34. package/{esm2015/lib/models/data/index.js → esm2020/lib/models/data/index.mjs} +0 -0
  35. package/{esm2015/lib/models/settings/classes/AreaChartSettings.js → esm2020/lib/models/settings/classes/AreaChartSettings.mjs} +0 -0
  36. package/{esm2015/lib/models/settings/classes/LineChartSettings.js → esm2020/lib/models/settings/classes/LineChartSettings.mjs} +0 -0
  37. package/{esm2015/lib/models/settings/classes/PieChartSettings.js → esm2020/lib/models/settings/classes/PieChartSettings.mjs} +0 -0
  38. package/{esm2015/lib/models/settings/classes/Vertical2DChartSettings.js → esm2020/lib/models/settings/classes/Vertical2DChartSettings.mjs} +0 -0
  39. package/{esm2015/lib/models/settings/classes/VerticalChartSettings.js → esm2020/lib/models/settings/classes/VerticalChartSettings.mjs} +0 -0
  40. package/{esm2015/lib/models/settings/classes/VerticalStackedChartSettings.js → esm2020/lib/models/settings/classes/VerticalStackedChartSettings.mjs} +0 -0
  41. package/{esm2015/lib/models/settings/classes/base/BaseInterval.js → esm2020/lib/models/settings/classes/base/BaseInterval.mjs} +0 -0
  42. package/{esm2015/lib/models/settings/classes/base/BaseSettings.js → esm2020/lib/models/settings/classes/base/BaseSettings.mjs} +0 -0
  43. package/{esm2015/lib/models/settings/classes/base/LegendPad.js → esm2020/lib/models/settings/classes/base/LegendPad.mjs} +0 -0
  44. package/{esm2015/lib/models/settings/index.js → esm2020/lib/models/settings/index.mjs} +0 -0
  45. package/esm2020/lib/services/classes/AreaChartService.mjs +134 -0
  46. package/esm2020/lib/services/classes/LineChartService.mjs +356 -0
  47. package/esm2020/lib/services/classes/PieChartService.mjs +111 -0
  48. package/esm2020/lib/services/classes/Vertical2DChartService.mjs +160 -0
  49. package/esm2020/lib/services/classes/VerticalChartService.mjs +103 -0
  50. package/esm2020/lib/services/classes/VerticalStackedChartService.mjs +124 -0
  51. package/{esm2015/lib/services/classes/base/IBaseService.js → esm2020/lib/services/classes/base/IBaseService.mjs} +0 -0
  52. package/{esm2015/lib/services/index.js → esm2020/lib/services/index.mjs} +0 -0
  53. package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +0 -0
  54. package/esm2020/public-api.mjs +38 -0
  55. package/fesm2015/{esfaenza-es-charts.js → esfaenza-es-charts.mjs} +530 -384
  56. package/fesm2015/esfaenza-es-charts.mjs.map +1 -0
  57. package/fesm2020/esfaenza-es-charts.mjs +2747 -0
  58. package/fesm2020/esfaenza-es-charts.mjs.map +1 -0
  59. package/lib/adapters/classes/BaseAdapter.d.ts +3 -0
  60. package/lib/components/base/base-chart.component.d.ts +12 -0
  61. package/lib/components/chart-pager/chart-pager.component.d.ts +3 -0
  62. package/lib/components/specializations/es-area-chart.component.d.ts +3 -0
  63. package/lib/components/specializations/es-chart.component.d.ts +3 -0
  64. package/lib/components/specializations/es-line-chart.component.d.ts +3 -0
  65. package/lib/components/specializations/es-pie-chart.component.d.ts +3 -0
  66. package/lib/components/specializations/es-vertical-2d-chart.component.d.ts +3 -0
  67. package/lib/components/specializations/es-vertical-chart.component.d.ts +3 -0
  68. package/lib/components/specializations/es-vertical-stacked-chart.component.d.ts +3 -0
  69. package/lib/es-charts.module.d.ts +13 -0
  70. package/lib/models/core/classes/ChartDispatcher.d.ts +3 -0
  71. package/lib/services/classes/LineChartService.d.ts +4 -0
  72. package/package.json +22 -10
  73. package/public-api.d.ts +2 -0
  74. package/bundles/esfaenza-es-charts.umd.js +0 -3212
  75. package/bundles/esfaenza-es-charts.umd.js.map +0 -1
  76. package/esfaenza-es-charts.metadata.json +0 -1
  77. package/esm2015/esfaenza-es-charts.js +0 -11
  78. package/esm2015/lib/adapters/classes/BaseAdapter.js +0 -47
  79. package/esm2015/lib/components/base/base-chart.component.js +0 -311
  80. package/esm2015/lib/components/chart-pager/chart-pager.component.js +0 -84
  81. package/esm2015/lib/components/specializations/es-area-chart.component.js +0 -75
  82. package/esm2015/lib/components/specializations/es-chart.component.js +0 -108
  83. package/esm2015/lib/components/specializations/es-line-chart.component.js +0 -98
  84. package/esm2015/lib/components/specializations/es-pie-chart.component.js +0 -89
  85. package/esm2015/lib/components/specializations/es-vertical-2d-chart.component.js +0 -87
  86. package/esm2015/lib/components/specializations/es-vertical-chart.component.js +0 -85
  87. package/esm2015/lib/components/specializations/es-vertical-stacked-chart.component.js +0 -85
  88. package/esm2015/lib/es-charts.module.js +0 -42
  89. package/esm2015/lib/models/core/classes/ChartDispatcher.js +0 -88
  90. package/esm2015/lib/services/classes/AreaChartService.js +0 -135
  91. package/esm2015/lib/services/classes/LineChartService.js +0 -326
  92. package/esm2015/lib/services/classes/PieChartService.js +0 -112
  93. package/esm2015/lib/services/classes/Vertical2DChartService.js +0 -163
  94. package/esm2015/lib/services/classes/VerticalChartService.js +0 -105
  95. package/esm2015/lib/services/classes/VerticalStackedChartService.js +0 -127
  96. package/esm2015/public-api.js +0 -36
  97. package/fesm2015/esfaenza-es-charts.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ import * as am4core from "@amcharts/amcharts4/core";
2
+ import * as am4charts from "@amcharts/amcharts4/charts";
3
+ /**
4
+ * Classe il cui unico scopo è gestire il setup e rendering di un PieChart
5
+ */
6
+ export class PieChartService {
7
+ /** @ignore */
8
+ constructor(Adapter) {
9
+ this.Adapter = Adapter;
10
+ /** @ignore */
11
+ this.ViewAbsoluteValues = true;
12
+ }
13
+ /**
14
+ * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un PieChart
15
+ */
16
+ graphicate(data, settings) {
17
+ if (settings.Timeline) {
18
+ console.error("Timeline not supported for pie chart");
19
+ return null;
20
+ }
21
+ //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
22
+ am4core.options.autoDispose = true;
23
+ this.ChartInstance = am4core.create(settings.Name, settings.Mode3D ? am4charts.PieChart3D : am4charts.PieChart);
24
+ this.ChartInstance.innerRadius = ((settings.DonutRadiusPercentage || 15) / 100) * settings.ContainerHeight;
25
+ let series = this.ChartInstance.series.push(settings.Mode3D ? new am4charts.PieSeries3D() : new am4charts.PieSeries());
26
+ series.dataFields.value = "v";
27
+ series.dataFields.category = "k";
28
+ //Il default sono valori percentuali
29
+ if (this.ViewAbsoluteValues) {
30
+ series.legendSettings.valueText = "{value}";
31
+ series.labels.template.text = "{category}: [bold]{value}[/]";
32
+ }
33
+ series.slices.template.stroke = am4core.color("#fff");
34
+ series.slices.template.strokeOpacity = 1;
35
+ series.slices.template.togglable = false;
36
+ series.hiddenState.properties.opacity = 1;
37
+ series.hiddenState.properties.endAngle = -90;
38
+ series.hiddenState.properties.startAngle = -90;
39
+ if (settings.HideZeroes == null ? true : settings.HideZeroes) {
40
+ series.ticks.template.events.on("ready", this.hideZeroes);
41
+ series.ticks.template.events.on("visibilitychanged", this.hideZeroes);
42
+ series.labels.template.events.on("ready", this.hideZeroes);
43
+ series.labels.template.events.on("visibilitychanged", this.hideZeroes);
44
+ }
45
+ series.slices.template.events.on("hit", (ev) => {
46
+ if (settings.OnSeriesClickCallback) {
47
+ let clickedSeries = ev.target.dataItem.dataContext.k;
48
+ settings.OnSeriesClickCallback(clickedSeries);
49
+ }
50
+ });
51
+ let dataConverted = this.Adapter ? this.Adapter.adaptDataForPieChart(data) : data;
52
+ let defaultIndex = 0;
53
+ for (let i = 0; i < dataConverted.values.length; i++) {
54
+ if (!dataConverted.values[i].c) {
55
+ dataConverted.values[i].c = this.ChartInstance.colors.list[defaultIndex % this.ChartInstance.colors.list.length];
56
+ defaultIndex++;
57
+ }
58
+ else
59
+ dataConverted.values[i].c = am4core.color(dataConverted.values[i].c);
60
+ }
61
+ series.slices.template.propertyFields.fill = "c";
62
+ this.ChartInstance.data = dataConverted.values;
63
+ if (!settings.LabelsVisible) {
64
+ series.labels.template.disabled = true;
65
+ series.ticks.template.disabled = true;
66
+ }
67
+ else if (settings.LabelsWrap || settings.LabelsTruncate) {
68
+ series.labels.template.maxWidth = settings.LabelsWidth || 100;
69
+ if (settings.LabelsWrap)
70
+ series.labels.template.wrap = true;
71
+ else if (settings.LabelsTruncate)
72
+ series.labels.template.truncate = true;
73
+ }
74
+ if (settings.Legend) {
75
+ let legend = new am4charts.Legend();
76
+ this.ChartInstance.legend = legend;
77
+ legend.position = settings?.LegendPosition || "bottom";
78
+ legend.itemContainers.template.togglable = settings.HideSeriesOnLabelClick === true;
79
+ legend.itemContainers.template.tooltipText = "{category}";
80
+ //Se la legenda non fa il toggle della serie la considero come se fosse un click sulla serie in se
81
+ if (!settings.HideSeriesOnLabelClick) {
82
+ legend.itemContainers.template.events.on("hit", (ev) => {
83
+ if (settings.OnSeriesClickCallback) {
84
+ let clickedSeries = ev.target.dataItem.dataContext.legendDataItem.name;
85
+ settings.OnSeriesClickCallback(clickedSeries);
86
+ }
87
+ });
88
+ }
89
+ if (settings.LegendPadding) {
90
+ let template = this.ChartInstance.legend.itemContainers.template;
91
+ template.paddingTop = settings.LegendPadding.top ?? 0;
92
+ template.paddingBottom = settings.LegendPadding.bottom ?? 0;
93
+ template.paddingLeft = settings.LegendPadding.left ?? 0;
94
+ template.paddingRight = settings.LegendPadding.right ?? 0;
95
+ }
96
+ }
97
+ return this;
98
+ }
99
+ /** @ignore */
100
+ refreshData(data) {
101
+ //TODO:IMPL
102
+ }
103
+ /** @ignore */
104
+ hideZeroes(ev) {
105
+ if (ev.target.dataItem && (ev.target.dataItem.values.value.percent == 0))
106
+ ev.target.hide();
107
+ else
108
+ ev.target.show();
109
+ }
110
+ }
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGllQ2hhcnRTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvc2VydmljZXMvY2xhc3Nlcy9QaWVDaGFydFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLDRCQUE0QixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFNeEIsY0FBYztJQUNkLFlBQW1CLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFKdkMsY0FBYztRQUNOLHVCQUFrQixHQUFZLElBQUksQ0FBQztJQUdBLENBQUM7SUFFNUM7O09BRUc7SUFDSSxVQUFVLENBQUMsSUFBd0IsRUFBRSxRQUEwQjtRQUNsRSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCx1RUFBdUU7UUFDdkUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5DLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFTLFFBQVMsQ0FBQyxlQUFlLENBQUM7UUFFbEgsSUFBSSxNQUFNLEdBQWdELElBQUksQ0FBQyxhQUFhLENBQUMsTUFB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Q0FBQztnQkFDeEQsUUFBUSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7YUFDN0Q7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjO0lBQ1AsV0FBVyxDQUFDLElBQXdCO1FBQ3ZDLFdBQVc7SUFDZixDQUFDO0lBRUQsY0FBYztJQUNOLFVBQVUsQ0FBQyxFQUFFO1FBQ2pCLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUM7WUFDcEUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7WUFFakIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UvSUJhc2VTZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycyc7XHJcbmltcG9ydCB7IFBpZUNoYXJ0RGF0YSwgS2V5VmFsdWVDb2xvciB9IGZyb20gJy4uLy4uL21vZGVscy9kYXRhJztcclxuaW1wb3J0IHsgUGllQ2hhcnRTZXR0aW5ncyB9IGZyb20gJy4uLy4uL21vZGVscy9zZXR0aW5ncyc7XHJcblxyXG5pbXBvcnQgKiBhcyBhbTRjb3JlIGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM0L2NvcmVcIjtcclxuaW1wb3J0ICogYXMgYW00Y2hhcnRzIGZyb20gXCJAYW1jaGFydHMvYW1jaGFydHM0L2NoYXJ0c1wiO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBpbCBjdWkgdW5pY28gc2NvcG8gw6ggZ2VzdGlyZSBpbCBzZXR1cCBlIHJlbmRlcmluZyBkaSB1biBQaWVDaGFydFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBpZUNoYXJ0U2VydmljZSBpbXBsZW1lbnRzIElCYXNlU2VydmljZTxhbTRjaGFydHMuUGllQ2hhcnQ+e1xyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBDaGFydEluc3RhbmNlOiBhbTRjaGFydHMuUGllQ2hhcnQzRCB8IGFtNGNoYXJ0cy5QaWVDaGFydDtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIFZpZXdBYnNvbHV0ZVZhbHVlczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBBZGFwdGVyOiBCYXNlQWRhcHRlcikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGRhdGEgdW5hIGNvcHBpYSBEYXRpIC0gSW1wb3N0YXppb25pIGxpIHV0aWxpenphIHBlciBjcmVhcmUgZSB2aXN1YWxpenphcmUgdW4gUGllQ2hhcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyYXBoaWNhdGUoZGF0YTogUGllQ2hhcnREYXRhIHwgYW55LCBzZXR0aW5nczogUGllQ2hhcnRTZXR0aW5ncyk6IElCYXNlU2VydmljZTxhbTRjaGFydHMuUGllQ2hhcnQ+IHtcclxuICAgICAgICBpZiAoc2V0dGluZ3MuVGltZWxpbmUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRpbWVsaW5lIG5vdCBzdXBwb3J0ZWQgZm9yIHBpZSBjaGFydFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1BlciBldml0YXJlIGRpIGRpbWVudGljYXJtZWxpIGUgZ2VzdGlyZSBjb211bnF1ZSBiZW5lIGdsaSBuZ2lmIGVjYy4uLlxyXG4gICAgICAgIGFtNGNvcmUub3B0aW9ucy5hdXRvRGlzcG9zZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuQ2hhcnRJbnN0YW5jZSA9IGFtNGNvcmUuY3JlYXRlKHNldHRpbmdzLk5hbWUsIHNldHRpbmdzLk1vZGUzRCA/IGFtNGNoYXJ0cy5QaWVDaGFydDNEIDogYW00Y2hhcnRzLlBpZUNoYXJ0KTtcclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuaW5uZXJSYWRpdXMgPSAoKHNldHRpbmdzLkRvbnV0UmFkaXVzUGVyY2VudGFnZSB8fCAxNSkgLyAxMDApICogKDxhbnk+c2V0dGluZ3MpLkNvbnRhaW5lckhlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IHNlcmllczogYW00Y2hhcnRzLlBpZVNlcmllczNEIHwgYW00Y2hhcnRzLlBpZVNlcmllcyA9IHRoaXMuQ2hhcnRJbnN0YW5jZS5zZXJpZXMucHVzaChzZXR0aW5ncy5Nb2RlM0QgPyBuZXcgYW00Y2hhcnRzLlBpZVNlcmllczNEKCkgOiBuZXcgYW00Y2hhcnRzLlBpZVNlcmllcygpKTtcclxuICAgICAgICBzZXJpZXMuZGF0YUZpZWxkcy52YWx1ZSA9IFwidlwiO1xyXG4gICAgICAgIHNlcmllcy5kYXRhRmllbGRzLmNhdGVnb3J5ID0gXCJrXCI7XHJcbiAgICAgICAgLy9JbCBkZWZhdWx0IHNvbm8gdmFsb3JpIHBlcmNlbnR1YWxpXHJcbiAgICAgICAgaWYgKHRoaXMuVmlld0Fic29sdXRlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHNlcmllcy5sZWdlbmRTZXR0aW5ncy52YWx1ZVRleHQgPSBcInt2YWx1ZX1cIjtcclxuICAgICAgICAgICAgc2VyaWVzLmxhYmVscy50ZW1wbGF0ZS50ZXh0ID0gXCJ7Y2F0ZWdvcnl9OiBbYm9sZF17dmFsdWV9Wy9dXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgc2VyaWVzLnNsaWNlcy50ZW1wbGF0ZS5zdHJva2UgPSBhbTRjb3JlLmNvbG9yKFwiI2ZmZlwiKTtcclxuICAgICAgICBzZXJpZXMuc2xpY2VzLnRlbXBsYXRlLnN0cm9rZU9wYWNpdHkgPSAxO1xyXG4gICAgICAgIHNlcmllcy5zbGljZXMudGVtcGxhdGUudG9nZ2xhYmxlID0gZmFsc2U7XHJcbiAgICAgICAgc2VyaWVzLmhpZGRlblN0YXRlLnByb3BlcnRpZXMub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgc2VyaWVzLmhpZGRlblN0YXRlLnByb3BlcnRpZXMuZW5kQW5nbGUgPSAtOTA7XHJcbiAgICAgICAgc2VyaWVzLmhpZGRlblN0YXRlLnByb3BlcnRpZXMuc3RhcnRBbmdsZSA9IC05MDtcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLkhpZGVaZXJvZXMgPT0gbnVsbCA/IHRydWUgOiBzZXR0aW5ncy5IaWRlWmVyb2VzKSB7XHJcbiAgICAgICAgICAgIHNlcmllcy50aWNrcy50ZW1wbGF0ZS5ldmVudHMub24oXCJyZWFkeVwiLCB0aGlzLmhpZGVaZXJvZXMpO1xyXG4gICAgICAgICAgICBzZXJpZXMudGlja3MudGVtcGxhdGUuZXZlbnRzLm9uKFwidmlzaWJpbGl0eWNoYW5nZWRcIiwgdGhpcy5oaWRlWmVyb2VzKTtcclxuICAgICAgICAgICAgc2VyaWVzLmxhYmVscy50ZW1wbGF0ZS5ldmVudHMub24oXCJyZWFkeVwiLCB0aGlzLmhpZGVaZXJvZXMpO1xyXG4gICAgICAgICAgICBzZXJpZXMubGFiZWxzLnRlbXBsYXRlLmV2ZW50cy5vbihcInZpc2liaWxpdHljaGFuZ2VkXCIsIHRoaXMuaGlkZVplcm9lcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXJpZXMuc2xpY2VzLnRlbXBsYXRlLmV2ZW50cy5vbihcImhpdFwiLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgaWYgKCg8YW55PnNldHRpbmdzKS5PblNlcmllc0NsaWNrQ2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgIGxldCBjbGlja2VkU2VyaWVzID0gKDxLZXlWYWx1ZUNvbG9yPmV2LnRhcmdldC5kYXRhSXRlbS5kYXRhQ29udGV4dCkuaztcclxuICAgICAgICAgICAgICAgICg8YW55PnNldHRpbmdzKS5PblNlcmllc0NsaWNrQ2FsbGJhY2soY2xpY2tlZFNlcmllcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRhdGFDb252ZXJ0ZWQ6IFBpZUNoYXJ0RGF0YSA9IHRoaXMuQWRhcHRlciA/IHRoaXMuQWRhcHRlci5hZGFwdERhdGFGb3JQaWVDaGFydChkYXRhKSA6IGRhdGE7XHJcblxyXG4gICAgICAgIGxldCBkZWZhdWx0SW5kZXggPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUNvbnZlcnRlZC52YWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhQ29udmVydGVkLnZhbHVlc1tpXS5jKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRhQ29udmVydGVkLnZhbHVlc1tpXS5jID0gPGFueT50aGlzLkNoYXJ0SW5zdGFuY2UuY29sb3JzLmxpc3RbZGVmYXVsdEluZGV4ICUgdGhpcy5DaGFydEluc3RhbmNlLmNvbG9ycy5saXN0Lmxlbmd0aF07XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0SW5kZXgrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBkYXRhQ29udmVydGVkLnZhbHVlc1tpXS5jID0gPGFueT5hbTRjb3JlLmNvbG9yKGRhdGFDb252ZXJ0ZWQudmFsdWVzW2ldLmMpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXJpZXMuc2xpY2VzLnRlbXBsYXRlLnByb3BlcnR5RmllbGRzLmZpbGwgPSBcImNcIjtcclxuICAgICAgICB0aGlzLkNoYXJ0SW5zdGFuY2UuZGF0YSA9IGRhdGFDb252ZXJ0ZWQudmFsdWVzO1xyXG5cclxuICAgICAgICBpZiAoIXNldHRpbmdzLkxhYmVsc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgc2VyaWVzLmxhYmVscy50ZW1wbGF0ZS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHNlcmllcy50aWNrcy50ZW1wbGF0ZS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNldHRpbmdzLkxhYmVsc1dyYXAgfHwgc2V0dGluZ3MuTGFiZWxzVHJ1bmNhdGUpIHtcclxuICAgICAgICAgICAgc2VyaWVzLmxhYmVscy50ZW1wbGF0ZS5tYXhXaWR0aCA9IHNldHRpbmdzLkxhYmVsc1dpZHRoIHx8IDEwMDtcclxuICAgICAgICAgICAgaWYgKHNldHRpbmdzLkxhYmVsc1dyYXApXHJcbiAgICAgICAgICAgICAgICBzZXJpZXMubGFiZWxzLnRlbXBsYXRlLndyYXAgPSB0cnVlO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChzZXR0aW5ncy5MYWJlbHNUcnVuY2F0ZSlcclxuICAgICAgICAgICAgICAgIHNlcmllcy5sYWJlbHMudGVtcGxhdGUudHJ1bmNhdGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLkxlZ2VuZCkge1xyXG4gICAgICAgICAgICBsZXQgbGVnZW5kID0gbmV3IGFtNGNoYXJ0cy5MZWdlbmQoKTtcclxuICAgICAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZCA9IGxlZ2VuZFxyXG4gICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSBzZXR0aW5ncz8uTGVnZW5kUG9zaXRpb24gfHwgXCJib3R0b21cIjtcclxuICAgICAgICAgICAgbGVnZW5kLml0ZW1Db250YWluZXJzLnRlbXBsYXRlLnRvZ2dsYWJsZSA9IHNldHRpbmdzLkhpZGVTZXJpZXNPbkxhYmVsQ2xpY2sgPT09IHRydWU7XHJcbiAgICAgICAgICAgIGxlZ2VuZC5pdGVtQ29udGFpbmVycy50ZW1wbGF0ZS50b29sdGlwVGV4dCA9IFwie2NhdGVnb3J5fVwiO1xyXG5cclxuICAgICAgICAgICAgLy9TZSBsYSBsZWdlbmRhIG5vbiBmYSBpbCB0b2dnbGUgZGVsbGEgc2VyaWUgbGEgY29uc2lkZXJvIGNvbWUgc2UgZm9zc2UgdW4gY2xpY2sgc3VsbGEgc2VyaWUgaW4gc2VcclxuICAgICAgICAgICAgaWYgKCFzZXR0aW5ncy5IaWRlU2VyaWVzT25MYWJlbENsaWNrKSB7XHJcbiAgICAgICAgICAgICAgICBsZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGUuZXZlbnRzLm9uKFwiaGl0XCIsIChldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoPGFueT5zZXR0aW5ncykuT25TZXJpZXNDbGlja0NhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGlja2VkU2VyaWVzID0gKDxhbnk+ZXYudGFyZ2V0LmRhdGFJdGVtLmRhdGFDb250ZXh0KS5sZWdlbmREYXRhSXRlbS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAoPGFueT5zZXR0aW5ncykuT25TZXJpZXNDbGlja0NhbGxiYWNrKGNsaWNrZWRTZXJpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MuTGVnZW5kUGFkZGluZykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlID0gdGhpcy5DaGFydEluc3RhbmNlLmxlZ2VuZC5pdGVtQ29udGFpbmVycy50ZW1wbGF0ZTtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdUb3AgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLnRvcCA/PyAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUucGFkZGluZ0JvdHRvbSA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcuYm90dG9tID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nTGVmdCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcubGVmdCA/PyAwO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUucGFkZGluZ1JpZ2h0ID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZy5yaWdodCA/PyAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZnJlc2hEYXRhKGRhdGE6IFBpZUNoYXJ0RGF0YSB8IGFueSl7XHJcbiAgICAgICAgLy9UT0RPOklNUExcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBoaWRlWmVyb2VzKGV2KSB7XHJcbiAgICAgICAgaWYgKGV2LnRhcmdldC5kYXRhSXRlbSAmJiAoZXYudGFyZ2V0LmRhdGFJdGVtLnZhbHVlcy52YWx1ZS5wZXJjZW50ID09IDApKVxyXG4gICAgICAgICAgICBldi50YXJnZXQuaGlkZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZXYudGFyZ2V0LnNob3coKTtcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,160 @@
1
+ import * as am4core from "@amcharts/amcharts4/core";
2
+ import * as am4charts from "@amcharts/amcharts4/charts";
3
+ /**
4
+ * Classe il cui unico scopo è gestire il setup e rendering di un Vertical2DChart
5
+ */
6
+ export class Vertical2DChartService {
7
+ /** @ignore */
8
+ constructor(Adapter) {
9
+ this.Adapter = Adapter;
10
+ /** @ignore */
11
+ this.DefaultGroupPaddingPercentage = 5;
12
+ /** @ignore */
13
+ this.dangerZone = 50;
14
+ /** @ignore */
15
+ this.LabelWidth = 150;
16
+ /** @ignore */
17
+ this.LabelRightWhenCompressed = 20;
18
+ /** @ignore */
19
+ this.LabelTopWhenCompressed = -5;
20
+ /** @ignore */
21
+ this.DefaultColumnWidthPercentage = 85;
22
+ }
23
+ /**
24
+ * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un Vertical2DChart
25
+ */
26
+ graphicate(data, settings) {
27
+ if (settings.Timeline) {
28
+ console.error("Timeline not supported for vertical chart");
29
+ return null;
30
+ }
31
+ //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
32
+ am4core.options.autoDispose = true;
33
+ this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);
34
+ let ChartInstanceCasted = this.ChartInstance;
35
+ if (settings.Legend) {
36
+ ChartInstanceCasted.legend = new am4charts.Legend();
37
+ ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';
38
+ ChartInstanceCasted.legend.itemContainers.template.tooltipText = "{category}";
39
+ if (settings.LegendPadding) {
40
+ let template = this.ChartInstance.legend.itemContainers.template;
41
+ template.paddingTop = settings.LegendPadding.top ?? 0;
42
+ template.paddingBottom = settings.LegendPadding.bottom ?? 0;
43
+ template.paddingLeft = settings.LegendPadding.left ?? 0;
44
+ template.paddingRight = settings.LegendPadding.right ?? 0;
45
+ }
46
+ }
47
+ let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());
48
+ if (settings.YAxisTitle) {
49
+ yAxis.title.text = settings.YAxisTitle;
50
+ yAxis.title.fontWeight = "bold";
51
+ }
52
+ let categoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis());
53
+ if (settings.XAxisTitle) {
54
+ categoryAxis.title.text = settings.XAxisTitle;
55
+ categoryAxis.title.fontWeight = "bold";
56
+ }
57
+ yAxis.min = 0;
58
+ categoryAxis.dataFields.category = 'key';
59
+ categoryAxis.renderer.cellStartLocation = am4core.percent(settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage).value;
60
+ categoryAxis.renderer.cellEndLocation = am4core.percent(100 - (settings.GroupPaddingPercentage ?? this.DefaultGroupPaddingPercentage)).value;
61
+ categoryAxis.renderer.grid.template.location = 0;
62
+ categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;
63
+ let label = categoryAxis.renderer.labels.template;
64
+ label.truncate = true;
65
+ label.maxWidth = settings.LabelWidth ?? this.LabelWidth;
66
+ label.tooltipText = "{category}";
67
+ if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {
68
+ categoryAxis.events.on("sizechanged", (ev) => {
69
+ let axis = ev.target;
70
+ var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);
71
+ if (cellWidth < axis.renderer.labels.template.maxWidth) {
72
+ let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);
73
+ axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;
74
+ axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;
75
+ axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;
76
+ axis.renderer.labels.template.horizontalCenter = "right";
77
+ axis.renderer.labels.template.verticalCenter = "middle";
78
+ }
79
+ else {
80
+ axis.renderer.labels.template.rotation = 0;
81
+ axis.renderer.labels.template.dx = 0;
82
+ axis.renderer.labels.template.dy = 0;
83
+ axis.renderer.labels.template.horizontalCenter = "middle";
84
+ axis.renderer.labels.template.verticalCenter = "top";
85
+ }
86
+ });
87
+ }
88
+ let dataPreConverted = this.Adapter ? this.Adapter.adaptDataForVertical2DChart(data) : data;
89
+ let dataConverted = [];
90
+ for (let i = 0; i < dataPreConverted.groups.length; i++) {
91
+ let item = dataPreConverted.groups[i];
92
+ let obj = { key: item.name };
93
+ for (let p = 0; p < item.values.length; p++) {
94
+ let value = item.values[p];
95
+ obj[value.k] = value.v;
96
+ }
97
+ dataConverted.push(obj);
98
+ }
99
+ ChartInstanceCasted.data = dataConverted;
100
+ if (dataPreConverted.colorInfos)
101
+ ChartInstanceCasted.colors.list = dataPreConverted.colorInfos.map(c => am4core.color(c.color));
102
+ //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie
103
+ for (let prop in dataConverted[0])
104
+ if (prop !== "key")
105
+ this.createSeries(ChartInstanceCasted, settings, prop, prop);
106
+ return this;
107
+ }
108
+ /** @ignore */
109
+ refreshData(data) {
110
+ //TODO:IMPL
111
+ }
112
+ /** @ignore */
113
+ createSeries(chart, settings, value, name) {
114
+ let series = chart.series.push(new am4charts.ColumnSeries());
115
+ series.dataFields.valueY = value;
116
+ series.dataFields.categoryX = 'key';
117
+ series.name = name;
118
+ series.columns.template.tooltipText = "{name} {categoryX}: [bold]{valueY}[/]";
119
+ series.columns.template.fillOpacity = .8;
120
+ series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);
121
+ series.events.on("hidden", () => this.arrangeColumns);
122
+ series.events.on("shown", () => this.arrangeColumns);
123
+ return series;
124
+ }
125
+ /** @ignore */
126
+ arrangeColumns() {
127
+ let ChartInstanceCasted = this.ChartInstance;
128
+ let series = ChartInstanceCasted.series.getIndex(0);
129
+ let xAxis = ChartInstanceCasted.xAxes.getIndex(0);
130
+ let w = 1 - xAxis.renderer.cellStartLocation - (1 - xAxis.renderer.cellEndLocation);
131
+ if (series.dataItems.length > 1) {
132
+ let x0 = xAxis.getX(series.dataItems.getIndex(0), "categoryX");
133
+ let x1 = xAxis.getX(series.dataItems.getIndex(1), "categoryX");
134
+ let delta = ((x1 - x0) / ChartInstanceCasted.series.length) * w;
135
+ if (am4core.isNumber(delta)) {
136
+ let middle = ChartInstanceCasted.series.length / 2;
137
+ let newIndex = 0;
138
+ ChartInstanceCasted.series.each((series) => {
139
+ if (!series.isHidden && !series.isHiding) {
140
+ series.dummyData = newIndex;
141
+ newIndex++;
142
+ }
143
+ else {
144
+ series.dummyData = ChartInstanceCasted.series.indexOf(series);
145
+ }
146
+ });
147
+ let visibleCount = newIndex;
148
+ let newMiddle = visibleCount / 2;
149
+ ChartInstanceCasted.series.each((series) => {
150
+ let trueIndex = ChartInstanceCasted.series.indexOf(series);
151
+ let newIndex = series.dummyData;
152
+ let dx = (newIndex - trueIndex + middle - newMiddle) * delta;
153
+ series.animate({ property: "dx", to: dx }, series.interpolationDuration, series.interpolationEasing);
154
+ series.bulletsContainer.animate({ property: "dx", to: dx }, series.interpolationDuration, series.interpolationEasing);
155
+ });
156
+ }
157
+ }
158
+ }
159
+ }
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVydGljYWwyRENoYXJ0U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWNoYXJ0cy9zcmMvbGliL3NlcnZpY2VzL2NsYXNzZXMvVmVydGljYWwyRENoYXJ0U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEtBQUssT0FBTyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxTQUFTLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sc0JBQXNCO0lBZ0JqQyxjQUFjO0lBQ2QsWUFBbUIsT0FBb0I7UUFBcEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQWR2QyxjQUFjO1FBQ04sa0NBQTZCLEdBQVcsQ0FBQyxDQUFDO1FBQ2xELGNBQWM7UUFDTixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLGNBQWM7UUFDTixlQUFVLEdBQVcsR0FBRyxDQUFDO1FBQ2pDLGNBQWM7UUFDTiw2QkFBd0IsR0FBVyxFQUFFLENBQUM7UUFDOUMsY0FBYztRQUNOLDJCQUFzQixHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzVDLGNBQWM7UUFDTixpQ0FBNEIsR0FBVyxFQUFFLENBQUM7SUFHUCxDQUFDO0lBRTVDOztPQUVHO0lBQ0ksVUFBVSxDQUFDLElBQStCLEVBQUUsUUFBaUM7UUFFbEYsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztZQUMzRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsdUVBQXVFO1FBQ3ZFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUVuQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEUsSUFBSSxtQkFB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RCxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO29CQUNyRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN4SCxDQUFDLENBQUMsQ0FBQTthQUNIO1NBQ0Y7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UvSUJhc2VTZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycyc7XHJcbmltcG9ydCB7IFZlcnRpY2FsMkRDaGFydERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YSc7XHJcbmltcG9ydCB7IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NldHRpbmdzJztcclxuXHJcbmltcG9ydCAqIGFzIGFtNGNvcmUgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY29yZVwiO1xyXG5pbXBvcnQgKiBhcyBhbTRjaGFydHMgZnJvbSBcIkBhbWNoYXJ0cy9hbWNoYXJ0czQvY2hhcnRzXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGlsIGN1aSB1bmljbyBzY29wbyDDqCBnZXN0aXJlIGlsIHNldHVwIGUgcmVuZGVyaW5nIGRpIHVuIFZlcnRpY2FsMkRDaGFydFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsMkRDaGFydFNlcnZpY2UgaW1wbGVtZW50cyBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+e1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHVibGljIENoYXJ0SW5zdGFuY2U6IGFtNGNoYXJ0cy5YWUNoYXJ0O1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBEZWZhdWx0R3JvdXBQYWRkaW5nUGVyY2VudGFnZTogbnVtYmVyID0gNTtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgZGFuZ2VyWm9uZTogbnVtYmVyID0gNTA7XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIExhYmVsV2lkdGg6IG51bWJlciA9IDE1MDtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgTGFiZWxSaWdodFdoZW5Db21wcmVzc2VkOiBudW1iZXIgPSAyMDtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgTGFiZWxUb3BXaGVuQ29tcHJlc3NlZDogbnVtYmVyID0gLTU7XHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIERlZmF1bHRDb2x1bW5XaWR0aFBlcmNlbnRhZ2U6IG51bWJlciA9IDg1O1xyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBBZGFwdGVyOiBCYXNlQWRhcHRlcikgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgZGF0YSB1bmEgY29wcGlhIERhdGkgLSBJbXBvc3RhemlvbmkgbGkgdXRpbGl6emEgcGVyIGNyZWFyZSBlIHZpc3VhbGl6emFyZSB1biBWZXJ0aWNhbDJEQ2hhcnRcclxuICAgKi9cclxuICBwdWJsaWMgZ3JhcGhpY2F0ZShkYXRhOiBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgYW55LCBzZXR0aW5nczogVmVydGljYWwyRENoYXJ0U2V0dGluZ3MpOiBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+IHtcclxuXHJcbiAgICBpZiAoc2V0dGluZ3MuVGltZWxpbmUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlRpbWVsaW5lIG5vdCBzdXBwb3J0ZWQgZm9yIHZlcnRpY2FsIGNoYXJ0XCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvL1BlciBldml0YXJlIGRpIGRpbWVudGljYXJtZWxpIGUgZ2VzdGlyZSBjb211bnF1ZSBiZW5lIGdsaSBuZ2lmIGVjYy4uLlxyXG4gICAgYW00Y29yZS5vcHRpb25zLmF1dG9EaXNwb3NlID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLkNoYXJ0SW5zdGFuY2UgPSBhbTRjb3JlLmNyZWF0ZShzZXR0aW5ncy5OYW1lLCBhbTRjaGFydHMuWFlDaGFydCk7XHJcbiAgICBsZXQgQ2hhcnRJbnN0YW5jZUNhc3RlZCA9IDxhbTRjaGFydHMuWFlDaGFydD50aGlzLkNoYXJ0SW5zdGFuY2U7XHJcblxyXG4gICAgaWYgKHNldHRpbmdzLkxlZ2VuZCkge1xyXG4gICAgICBDaGFydEluc3RhbmNlQ2FzdGVkLmxlZ2VuZCA9IG5ldyBhbTRjaGFydHMuTGVnZW5kKCk7XHJcbiAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQubGVnZW5kLnBvc2l0aW9uID0gc2V0dGluZ3M/LkxlZ2VuZFBvc2l0aW9uID8/ICdyaWdodCc7XHJcbiAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQubGVnZW5kLml0ZW1Db250YWluZXJzLnRlbXBsYXRlLnRvb2x0aXBUZXh0ID0gXCJ7Y2F0ZWdvcnl9XCI7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoc2V0dGluZ3MuTGVnZW5kUGFkZGluZykge1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGU7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ1RvcCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcudG9wID8/IDA7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ0JvdHRvbSA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcuYm90dG9tID8/IDA7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ0xlZnQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmxlZnQgPz8gMDtcclxuICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nUmlnaHQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLnJpZ2h0ID8/IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnlBeGVzLnB1c2gobmV3IGFtNGNoYXJ0cy5WYWx1ZUF4aXMoKSk7XHJcbiAgICBpZiAoc2V0dGluZ3MuWUF4aXNUaXRsZSkge1xyXG4gICAgICB5QXhpcy50aXRsZS50ZXh0ID0gc2V0dGluZ3MuWUF4aXNUaXRsZVxyXG4gICAgICB5QXhpcy50aXRsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY2F0ZWdvcnlBeGlzOiBhbTRjaGFydHMuQ2F0ZWdvcnlBeGlzID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC54QXhlcy5wdXNoKG5ldyBhbTRjaGFydHMuQ2F0ZWdvcnlBeGlzKCkpXHJcbiAgICBpZiAoc2V0dGluZ3MuWEF4aXNUaXRsZSkge1xyXG4gICAgICBjYXRlZ29yeUF4aXMudGl0bGUudGV4dCA9IHNldHRpbmdzLlhBeGlzVGl0bGVcclxuICAgICAgY2F0ZWdvcnlBeGlzLnRpdGxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcclxuICAgIH1cclxuXHJcbiAgICB5QXhpcy5taW4gPSAwO1xyXG4gICAgY2F0ZWdvcnlBeGlzLmRhdGFGaWVsZHMuY2F0ZWdvcnkgPSAna2V5J1xyXG4gICAgY2F0ZWdvcnlBeGlzLnJlbmRlcmVyLmNlbGxTdGFydExvY2F0aW9uID0gYW00Y29yZS5wZXJjZW50KHNldHRpbmdzLkdyb3VwUGFkZGluZ1BlcmNlbnRhZ2UgPz8gdGhpcy5EZWZhdWx0R3JvdXBQYWRkaW5nUGVyY2VudGFnZSkudmFsdWVcclxuICAgIGNhdGVnb3J5QXhpcy5yZW5kZXJlci5jZWxsRW5kTG9jYXRpb24gPSBhbTRjb3JlLnBlcmNlbnQoMTAwIC0gKHNldHRpbmdzLkdyb3VwUGFkZGluZ1BlcmNlbnRhZ2UgPz8gdGhpcy5EZWZhdWx0R3JvdXBQYWRkaW5nUGVyY2VudGFnZSkpLnZhbHVlXHJcbiAgICBjYXRlZ29yeUF4aXMucmVuZGVyZXIuZ3JpZC50ZW1wbGF0ZS5sb2NhdGlvbiA9IDA7XHJcbiAgICBjYXRlZ29yeUF4aXMucmVuZGVyZXIubWluR3JpZERpc3RhbmNlID0gc2V0dGluZ3M/Lk1pbkdyaWREaXN0YW5jZSA/PyAzMDtcclxuXHJcbiAgICBsZXQgbGFiZWwgPSBjYXRlZ29yeUF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlO1xyXG4gICAgbGFiZWwudHJ1bmNhdGUgPSB0cnVlO1xyXG4gICAgbGFiZWwubWF4V2lkdGggPSBzZXR0aW5ncy5MYWJlbFdpZHRoID8/IHRoaXMuTGFiZWxXaWR0aDtcclxuICAgIGxhYmVsLnRvb2x0aXBUZXh0ID0gXCJ7Y2F0ZWdvcnl9XCI7XHJcblxyXG4gICAgaWYgKHNldHRpbmdzPy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uID09IG51bGwgPyB0cnVlIDogc2V0dGluZ3M/LkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb24pIHtcclxuICAgICAgY2F0ZWdvcnlBeGlzLmV2ZW50cy5vbihcInNpemVjaGFuZ2VkXCIsIChldikgPT4ge1xyXG4gICAgICAgIGxldCBheGlzID0gZXYudGFyZ2V0O1xyXG4gICAgICAgIHZhciBjZWxsV2lkdGggPSBheGlzLnBpeGVsV2lkdGggLyAoYXhpcy5lbmRJbmRleCAtIGF4aXMuc3RhcnRJbmRleCk7XHJcbiAgICAgICAgaWYgKGNlbGxXaWR0aCA8IGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLm1heFdpZHRoKSB7XHJcbiAgICAgICAgICBsZXQgYXJlV2VJbkRhbmdlclpvbmUgPSBjZWxsV2lkdGggPCAoc2V0dGluZ3M/LkxhYmVsVmVydGljYWxPcmllbnRhdGlvbkN1dG9mZldpZHRoID8/IHRoaXMuZGFuZ2VyWm9uZSk7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IGFyZVdlSW5EYW5nZXJab25lID8gLTkwIDogLTQ1O1xyXG4gICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuZHggPSBzZXR0aW5ncy5MYWJlbFJpZ2h0V2hlbkNvbXByZXNzZWQgPz8gYXJlV2VJbkRhbmdlclpvbmUgPyAwIDogdGhpcy5MYWJlbFJpZ2h0V2hlbkNvbXByZXNzZWQ7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keSA9IHNldHRpbmdzLkxhYmVsVG9wV2hlbkNvbXByZXNzZWQgPz8gdGhpcy5MYWJlbFRvcFdoZW5Db21wcmVzc2VkO1xyXG4gICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuaG9yaXpvbnRhbENlbnRlciA9IFwicmlnaHRcIjtcclxuICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLnZlcnRpY2FsQ2VudGVyID0gXCJtaWRkbGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keCA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keSA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5ob3Jpem9udGFsQ2VudGVyID0gXCJtaWRkbGVcIjtcclxuICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLnZlcnRpY2FsQ2VudGVyID0gXCJ0b3BcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhUHJlQ29udmVydGVkOiBWZXJ0aWNhbDJEQ2hhcnREYXRhID0gdGhpcy5BZGFwdGVyID8gdGhpcy5BZGFwdGVyLmFkYXB0RGF0YUZvclZlcnRpY2FsMkRDaGFydChkYXRhKSA6IGRhdGE7XHJcblxyXG4gICAgbGV0IGRhdGFDb252ZXJ0ZWQgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVByZUNvbnZlcnRlZC5ncm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGl0ZW0gPSBkYXRhUHJlQ29udmVydGVkLmdyb3Vwc1tpXTtcclxuICAgICAgbGV0IG9iaiA9IHsga2V5OiBpdGVtLm5hbWUgfTtcclxuICAgICAgZm9yIChsZXQgcCA9IDA7IHAgPCBpdGVtLnZhbHVlcy5sZW5ndGg7IHArKykge1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGl0ZW0udmFsdWVzW3BdO1xyXG4gICAgICAgIG9ialt2YWx1ZS5rXSA9IHZhbHVlLnY7XHJcbiAgICAgIH1cclxuICAgICAgZGF0YUNvbnZlcnRlZC5wdXNoKG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5kYXRhID0gZGF0YUNvbnZlcnRlZDtcclxuICAgIGlmIChkYXRhUHJlQ29udmVydGVkLmNvbG9ySW5mb3MpXHJcbiAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuY29sb3JzLmxpc3QgPSBkYXRhUHJlQ29udmVydGVkLmNvbG9ySW5mb3MubWFwKGMgPT4gYW00Y29yZS5jb2xvcihjLmNvbG9yKSk7XHJcblxyXG4gICAgLy9QcmVuZG8gbGEgcHJpbWEgY2F0ZWdvcmlhIGUgbWkgYmFzbyBzdWxsZSBwcm9wcmlldMOgIHBlciBkZmVpbmlyZSBsZSBzZXJpZVxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiBkYXRhQ29udmVydGVkWzBdKVxyXG4gICAgICBpZiAocHJvcCAhPT0gXCJrZXlcIilcclxuICAgICAgICB0aGlzLmNyZWF0ZVNlcmllcyhDaGFydEluc3RhbmNlQ2FzdGVkLCBzZXR0aW5ncywgcHJvcCwgcHJvcCk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHB1YmxpYyByZWZyZXNoRGF0YShkYXRhOiBWZXJ0aWNhbDJEQ2hhcnREYXRhIHwgYW55KSB7XHJcbiAgICAvL1RPRE86SU1QTFxyXG4gIH1cclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIGNyZWF0ZVNlcmllcyhjaGFydCwgc2V0dGluZ3M6IFZlcnRpY2FsMkRDaGFydFNldHRpbmdzLCB2YWx1ZSwgbmFtZSkge1xyXG4gICAgbGV0IHNlcmllczogYW00Y2hhcnRzLkNvbHVtblNlcmllcyA9IGNoYXJ0LnNlcmllcy5wdXNoKG5ldyBhbTRjaGFydHMuQ29sdW1uU2VyaWVzKCkpXHJcbiAgICBzZXJpZXMuZGF0YUZpZWxkcy52YWx1ZVkgPSB2YWx1ZTtcclxuICAgIHNlcmllcy5kYXRhRmllbGRzLmNhdGVnb3J5WCA9ICdrZXknO1xyXG4gICAgc2VyaWVzLm5hbWUgPSBuYW1lO1xyXG4gICAgc2VyaWVzLmNvbHVtbnMudGVtcGxhdGUudG9vbHRpcFRleHQgPSBcIntuYW1lfSB7Y2F0ZWdvcnlYfTogW2JvbGRde3ZhbHVlWX1bL11cIjtcclxuICAgIHNlcmllcy5jb2x1bW5zLnRlbXBsYXRlLmZpbGxPcGFjaXR5ID0gLjg7XHJcbiAgICBzZXJpZXMuY29sdW1ucy50ZW1wbGF0ZS53aWR0aCA9IGFtNGNvcmUucGVyY2VudChzZXR0aW5ncy5Db2x1bW5XaWR0aFBlcmNlbnRhZ2UgPz8gdGhpcy5EZWZhdWx0Q29sdW1uV2lkdGhQZXJjZW50YWdlKTtcclxuXHJcbiAgICBzZXJpZXMuZXZlbnRzLm9uKFwiaGlkZGVuXCIsICgpID0+IHRoaXMuYXJyYW5nZUNvbHVtbnMpO1xyXG4gICAgc2VyaWVzLmV2ZW50cy5vbihcInNob3duXCIsICgpID0+IHRoaXMuYXJyYW5nZUNvbHVtbnMpO1xyXG5cclxuICAgIHJldHVybiBzZXJpZXM7XHJcbiAgfVxyXG5cclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgYXJyYW5nZUNvbHVtbnMoKSB7XHJcbiAgICBsZXQgQ2hhcnRJbnN0YW5jZUNhc3RlZCA9IDxhbTRjaGFydHMuWFlDaGFydD50aGlzLkNoYXJ0SW5zdGFuY2U7XHJcbiAgICBsZXQgc2VyaWVzID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC5zZXJpZXMuZ2V0SW5kZXgoMCk7XHJcbiAgICBsZXQgeEF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnhBeGVzLmdldEluZGV4KDApO1xyXG5cclxuICAgIGxldCB3ID0gMSAtIHhBeGlzLnJlbmRlcmVyLmNlbGxTdGFydExvY2F0aW9uIC0gKDEgLSB4QXhpcy5yZW5kZXJlci5jZWxsRW5kTG9jYXRpb24pO1xyXG4gICAgaWYgKHNlcmllcy5kYXRhSXRlbXMubGVuZ3RoID4gMSkge1xyXG4gICAgICBsZXQgeDAgPSB4QXhpcy5nZXRYKHNlcmllcy5kYXRhSXRlbXMuZ2V0SW5kZXgoMCksIFwiY2F0ZWdvcnlYXCIpO1xyXG4gICAgICBsZXQgeDEgPSB4QXhpcy5nZXRYKHNlcmllcy5kYXRhSXRlbXMuZ2V0SW5kZXgoMSksIFwiY2F0ZWdvcnlYXCIpO1xyXG4gICAgICBsZXQgZGVsdGEgPSAoKHgxIC0geDApIC8gQ2hhcnRJbnN0YW5jZUNhc3RlZC5zZXJpZXMubGVuZ3RoKSAqIHc7XHJcbiAgICAgIGlmIChhbTRjb3JlLmlzTnVtYmVyKGRlbHRhKSkge1xyXG4gICAgICAgIGxldCBtaWRkbGUgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnNlcmllcy5sZW5ndGggLyAyO1xyXG5cclxuICAgICAgICBsZXQgbmV3SW5kZXggPSAwO1xyXG4gICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuc2VyaWVzLmVhY2goKHNlcmllcykgPT4ge1xyXG4gICAgICAgICAgaWYgKCFzZXJpZXMuaXNIaWRkZW4gJiYgIXNlcmllcy5pc0hpZGluZykge1xyXG4gICAgICAgICAgICBzZXJpZXMuZHVtbXlEYXRhID0gbmV3SW5kZXg7XHJcbiAgICAgICAgICAgIG5ld0luZGV4Kys7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgc2VyaWVzLmR1bW15RGF0YSA9IENoYXJ0SW5zdGFuY2VDYXN0ZWQuc2VyaWVzLmluZGV4T2Yoc2VyaWVzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGxldCB2aXNpYmxlQ291bnQgPSBuZXdJbmRleDtcclxuICAgICAgICBsZXQgbmV3TWlkZGxlID0gdmlzaWJsZUNvdW50IC8gMjtcclxuXHJcbiAgICAgICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5zZXJpZXMuZWFjaCgoc2VyaWVzKSA9PiB7XHJcbiAgICAgICAgICBsZXQgdHJ1ZUluZGV4ID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC5zZXJpZXMuaW5kZXhPZihzZXJpZXMpO1xyXG4gICAgICAgICAgbGV0IG5ld0luZGV4ID0gc2VyaWVzLmR1bW15RGF0YTtcclxuXHJcbiAgICAgICAgICBsZXQgZHggPSAobmV3SW5kZXggLSB0cnVlSW5kZXggKyBtaWRkbGUgLSBuZXdNaWRkbGUpICogZGVsdGFcclxuXHJcbiAgICAgICAgICBzZXJpZXMuYW5pbWF0ZSh7IHByb3BlcnR5OiBcImR4XCIsIHRvOiBkeCB9LCBzZXJpZXMuaW50ZXJwb2xhdGlvbkR1cmF0aW9uLCBzZXJpZXMuaW50ZXJwb2xhdGlvbkVhc2luZyk7XHJcbiAgICAgICAgICBzZXJpZXMuYnVsbGV0c0NvbnRhaW5lci5hbmltYXRlKHsgcHJvcGVydHk6IFwiZHhcIiwgdG86IGR4IH0sIHNlcmllcy5pbnRlcnBvbGF0aW9uRHVyYXRpb24sIHNlcmllcy5pbnRlcnBvbGF0aW9uRWFzaW5nKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59Il19
@@ -0,0 +1,103 @@
1
+ import * as am4core from "@amcharts/amcharts4/core";
2
+ import * as am4charts from "@amcharts/amcharts4/charts";
3
+ /**
4
+ * Classe il cui unico scopo è gestire il setup e rendering di un VerticalChart
5
+ */
6
+ export class VerticalChartService {
7
+ /** @ignore */
8
+ constructor(Adapter) {
9
+ this.Adapter = Adapter;
10
+ /** @ignore */
11
+ this.dangerZone = 50;
12
+ /** @ignore */
13
+ this.LabelWidth = 150;
14
+ /** @ignore */
15
+ this.LabelRightWhenCompressed = 20;
16
+ /** @ignore */
17
+ this.LabelTopWhenCompressed = -5;
18
+ /** @ignore */
19
+ this.DefaultColumnWidthPercentage = 85;
20
+ }
21
+ /**
22
+ * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalChart
23
+ */
24
+ graphicate(data, settings) {
25
+ if (settings.Timeline) {
26
+ console.error("Timeline not supported for vertical chart");
27
+ return null;
28
+ }
29
+ //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
30
+ am4core.options.autoDispose = true;
31
+ this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);
32
+ let ChartInstanceCasted = this.ChartInstance;
33
+ let dataConverted = this.Adapter ? this.Adapter.adaptDataForVerticalChart(data) : data;
34
+ ChartInstanceCasted.data = dataConverted.values;
35
+ if (settings.Legend) {
36
+ ChartInstanceCasted.legend = new am4charts.Legend();
37
+ ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';
38
+ ChartInstanceCasted.legend.itemContainers.template.tooltipText = "{category}";
39
+ if (settings.LegendPadding) {
40
+ let template = this.ChartInstance.legend.itemContainers.template;
41
+ template.paddingTop = settings.LegendPadding.top ?? 0;
42
+ template.paddingBottom = settings.LegendPadding.bottom ?? 0;
43
+ template.paddingLeft = settings.LegendPadding.left ?? 0;
44
+ template.paddingRight = settings.LegendPadding.right ?? 0;
45
+ }
46
+ }
47
+ let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());
48
+ if (settings.YAxisTitle) {
49
+ yAxis.title.text = settings.YAxisTitle;
50
+ yAxis.title.fontWeight = "bold";
51
+ }
52
+ let categoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis());
53
+ if (settings.XAxisTitle) {
54
+ categoryAxis.title.text = settings.XAxisTitle;
55
+ categoryAxis.title.fontWeight = "bold";
56
+ }
57
+ categoryAxis.dataFields.category = "k";
58
+ categoryAxis.renderer.grid.template.location = 0;
59
+ categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;
60
+ let label = categoryAxis.renderer.labels.template;
61
+ label.truncate = true;
62
+ label.maxWidth = settings.LabelWidth ?? this.LabelWidth;
63
+ label.tooltipText = "{category}";
64
+ if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {
65
+ categoryAxis.events.on("sizechanged", (ev) => {
66
+ let axis = ev.target;
67
+ var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);
68
+ if (cellWidth < axis.renderer.labels.template.maxWidth) {
69
+ let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);
70
+ axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;
71
+ axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;
72
+ axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;
73
+ axis.renderer.labels.template.horizontalCenter = "right";
74
+ axis.renderer.labels.template.verticalCenter = "middle";
75
+ }
76
+ else {
77
+ axis.renderer.labels.template.rotation = 0;
78
+ axis.renderer.labels.template.dx = 0;
79
+ axis.renderer.labels.template.dy = 0;
80
+ axis.renderer.labels.template.horizontalCenter = "middle";
81
+ axis.renderer.labels.template.verticalCenter = "top";
82
+ }
83
+ });
84
+ }
85
+ // Create series
86
+ let series = ChartInstanceCasted.series.push(new am4charts.ColumnSeries());
87
+ series.dataFields.valueY = "v";
88
+ series.dataFields.categoryX = "k";
89
+ series.name = "";
90
+ series.columns.template.tooltipText = "{categoryX}: [bold]{valueY}[/]";
91
+ series.columns.template.fillOpacity = .8;
92
+ series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);
93
+ let columnTemplate = series.columns.template;
94
+ columnTemplate.strokeWidth = 2;
95
+ columnTemplate.strokeOpacity = 1;
96
+ return this;
97
+ }
98
+ /** @ignore */
99
+ refreshData(data) {
100
+ //TODO:IMPL
101
+ }
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVydGljYWxDaGFydFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1jaGFydHMvc3JjL2xpYi9zZXJ2aWNlcy9jbGFzc2VzL1ZlcnRpY2FsQ2hhcnRTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE9BQU8sS0FBSyxPQUFPLE1BQU0sMEJBQTBCLENBQUM7QUFDcEQsT0FBTyxLQUFLLFNBQVMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RDs7R0FFRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFjN0IsY0FBYztJQUNkLFlBQW1CLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFadkMsY0FBYztRQUNOLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDaEMsY0FBYztRQUNOLGVBQVUsR0FBVyxHQUFHLENBQUM7UUFDakMsY0FBYztRQUNOLDZCQUF3QixHQUFXLEVBQUUsQ0FBQztRQUM5QyxjQUFjO1FBQ04sMkJBQXNCLEdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDNUMsY0FBYztRQUNOLGlDQUE0QixHQUFXLEVBQUUsQ0FBQztJQUdQLENBQUM7SUFFNUM7O09BRUc7SUFDSSxVQUFVLENBQUMsSUFBNkIsRUFBRSxRQUErQjtRQUU1RSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDbkIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQzNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCx1RUFBdUU7UUFDdkUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRW5DLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0RSxJQUFJLG1CQUFtQixHQUFzQixJQUFJLENBQUMsYUFBYSxDQUFDO1FBRWhFLElBQUksYUFB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Q29udGVudCI6WyJpbXBvcnQgeyBJQmFzZVNlcnZpY2UgfSBmcm9tICcuL2Jhc2UvSUJhc2VTZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9hZGFwdGVycyc7XHJcbmltcG9ydCB7IFZlcnRpY2FsQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2RhdGEnO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2V0dGluZ3MnO1xyXG5cclxuaW1wb3J0ICogYXMgYW00Y29yZSBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGFtNGNoYXJ0cyBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jaGFydHNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgaWwgY3VpIHVuaWNvIHNjb3BvIMOoIGdlc3RpcmUgaWwgc2V0dXAgZSByZW5kZXJpbmcgZGkgdW4gVmVydGljYWxDaGFydFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFZlcnRpY2FsQ2hhcnRTZXJ2aWNlIGltcGxlbWVudHMgSUJhc2VTZXJ2aWNlPGFtNGNoYXJ0cy5YWUNoYXJ0PntcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgQ2hhcnRJbnN0YW5jZTogYW00Y2hhcnRzLlhZQ2hhcnQ7XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBkYW5nZXJab25lOiBudW1iZXIgPSA1MDtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIExhYmVsV2lkdGg6IG51bWJlciA9IDE1MDtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIExhYmVsUmlnaHRXaGVuQ29tcHJlc3NlZDogbnVtYmVyID0gMjA7XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBMYWJlbFRvcFdoZW5Db21wcmVzc2VkOiBudW1iZXIgPSAtNTtcclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcml2YXRlIERlZmF1bHRDb2x1bW5XaWR0aFBlcmNlbnRhZ2U6IG51bWJlciA9IDg1O1xyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgQWRhcHRlcjogQmFzZUFkYXB0ZXIpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBkYXRhIHVuYSBjb3BwaWEgRGF0aSAtIEltcG9zdGF6aW9uaSBsaSB1dGlsaXp6YSBwZXIgY3JlYXJlIGUgdmlzdWFsaXp6YXJlIHVuIFZlcnRpY2FsQ2hhcnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyYXBoaWNhdGUoZGF0YTogVmVydGljYWxDaGFydERhdGEgfCBhbnksIHNldHRpbmdzOiBWZXJ0aWNhbENoYXJ0U2V0dGluZ3MpOiBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+IHtcclxuXHJcbiAgICAgICAgaWYgKHNldHRpbmdzLlRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUaW1lbGluZSBub3Qgc3VwcG9ydGVkIGZvciB2ZXJ0aWNhbCBjaGFydFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1BlciBldml0YXJlIGRpIGRpbWVudGljYXJtZWxpIGUgZ2VzdGlyZSBjb211bnF1ZSBiZW5lIGdsaSBuZ2lmIGVjYy4uLlxyXG4gICAgICAgIGFtNGNvcmUub3B0aW9ucy5hdXRvRGlzcG9zZSA9IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5DaGFydEluc3RhbmNlID0gYW00Y29yZS5jcmVhdGUoc2V0dGluZ3MuTmFtZSwgYW00Y2hhcnRzLlhZQ2hhcnQpO1xyXG4gICAgICAgIGxldCBDaGFydEluc3RhbmNlQ2FzdGVkID0gPGFtNGNoYXJ0cy5YWUNoYXJ0PnRoaXMuQ2hhcnRJbnN0YW5jZTtcclxuXHJcbiAgICAgICAgbGV0IGRhdGFDb252ZXJ0ZWQ6IFZlcnRpY2FsQ2hhcnREYXRhID0gdGhpcy5BZGFwdGVyID8gdGhpcy5BZGFwdGVyLmFkYXB0RGF0YUZvclZlcnRpY2FsQ2hhcnQoZGF0YSkgOiBkYXRhO1xyXG4gICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuZGF0YSA9IGRhdGFDb252ZXJ0ZWQudmFsdWVzO1xyXG5cclxuICAgICAgICBpZiAoc2V0dGluZ3MuTGVnZW5kKSB7XHJcbiAgICAgICAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQubGVnZW5kID0gbmV3IGFtNGNoYXJ0cy5MZWdlbmQoKTtcclxuICAgICAgICAgICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5sZWdlbmQucG9zaXRpb24gPSBzZXR0aW5ncz8uTGVnZW5kUG9zaXRpb24gPz8gJ3JpZ2h0JztcclxuICAgICAgICAgICAgQ2hhcnRJbnN0YW5jZUNhc3RlZC5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGUudG9vbHRpcFRleHQgPSBcIntjYXRlZ29yeX1cIjtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5MZWdlbmRQYWRkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSB0aGlzLkNoYXJ0SW5zdGFuY2UubGVnZW5kLml0ZW1Db250YWluZXJzLnRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGUucGFkZGluZ1RvcCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcudG9wID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nQm90dG9tID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZy5ib3R0b20gPz8gMDtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlLnBhZGRpbmdMZWZ0ID0gc2V0dGluZ3MuTGVnZW5kUGFkZGluZy5sZWZ0ID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nUmlnaHQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLnJpZ2h0ID8/IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB5QXhpcyA9IENoYXJ0SW5zdGFuY2VDYXN0ZWQueUF4ZXMucHVzaChuZXcgYW00Y2hhcnRzLlZhbHVlQXhpcygpKTtcclxuICAgICAgICBpZiAoc2V0dGluZ3MuWUF4aXNUaXRsZSkge1xyXG4gICAgICAgICAgICB5QXhpcy50aXRsZS50ZXh0ID0gc2V0dGluZ3MuWUF4aXNUaXRsZVxyXG4gICAgICAgICAgICB5QXhpcy50aXRsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjYXRlZ29yeUF4aXM6IGFtNGNoYXJ0cy5DYXRlZ29yeUF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnhBeGVzLnB1c2gobmV3IGFtNGNoYXJ0cy5DYXRlZ29yeUF4aXMoKSlcclxuICAgICAgICBpZiAoc2V0dGluZ3MuWEF4aXNUaXRsZSkge1xyXG4gICAgICAgICAgICBjYXRlZ29yeUF4aXMudGl0bGUudGV4dCA9IHNldHRpbmdzLlhBeGlzVGl0bGVcclxuICAgICAgICAgICAgY2F0ZWdvcnlBeGlzLnRpdGxlLmZvbnRXZWlnaHQgPSBcImJvbGRcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNhdGVnb3J5QXhpcy5kYXRhRmllbGRzLmNhdGVnb3J5ID0gXCJrXCI7XHJcbiAgICAgICAgY2F0ZWdvcnlBeGlzLnJlbmRlcmVyLmdyaWQudGVtcGxhdGUubG9jYXRpb24gPSAwO1xyXG4gICAgICAgIGNhdGVnb3J5QXhpcy5yZW5kZXJlci5taW5HcmlkRGlzdGFuY2UgPSBzZXR0aW5ncz8uTWluR3JpZERpc3RhbmNlID8/IDMwO1xyXG5cclxuICAgICAgICBsZXQgbGFiZWwgPSBjYXRlZ29yeUF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlO1xyXG4gICAgICAgIGxhYmVsLnRydW5jYXRlID0gdHJ1ZTtcclxuICAgICAgICBsYWJlbC5tYXhXaWR0aCA9IHNldHRpbmdzLkxhYmVsV2lkdGggPz8gdGhpcy5MYWJlbFdpZHRoO1xyXG4gICAgICAgIGxhYmVsLnRvb2x0aXBUZXh0ID0gXCJ7Y2F0ZWdvcnl9XCI7XHJcblxyXG4gICAgICAgIGlmIChzZXR0aW5ncz8uQWRhcHRMYWJlbFNpemVBbmRPcmllbnRhdGlvbiA9PSBudWxsID8gdHJ1ZSA6IHNldHRpbmdzPy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGNhdGVnb3J5QXhpcy5ldmVudHMub24oXCJzaXplY2hhbmdlZFwiLCAoZXYpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBheGlzID0gZXYudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgdmFyIGNlbGxXaWR0aCA9IGF4aXMucGl4ZWxXaWR0aCAvIChheGlzLmVuZEluZGV4IC0gYXhpcy5zdGFydEluZGV4KTtcclxuICAgICAgICAgICAgICAgIGlmIChjZWxsV2lkdGggPCBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5tYXhXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmVXZUluRGFuZ2VyWm9uZSA9IGNlbGxXaWR0aCA8IChzZXR0aW5ncz8uTGFiZWxWZXJ0aWNhbE9yaWVudGF0aW9uQ3V0b2ZmV2lkdGggPz8gdGhpcy5kYW5nZXJab25lKTtcclxuICAgICAgICAgICAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IGFyZVdlSW5EYW5nZXJab25lID8gLTkwIDogLTQ1O1xyXG4gICAgICAgICAgICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLmR4ID0gc2V0dGluZ3MuTGFiZWxSaWdodFdoZW5Db21wcmVzc2VkID8/IGFyZVdlSW5EYW5nZXJab25lID8gMCA6IHRoaXMuTGFiZWxSaWdodFdoZW5Db21wcmVzc2VkO1xyXG4gICAgICAgICAgICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLmR5ID0gc2V0dGluZ3MuTGFiZWxUb3BXaGVuQ29tcHJlc3NlZCA/PyB0aGlzLkxhYmVsVG9wV2hlbkNvbXByZXNzZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuaG9yaXpvbnRhbENlbnRlciA9IFwicmlnaHRcIjtcclxuICAgICAgICAgICAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS52ZXJ0aWNhbENlbnRlciA9IFwibWlkZGxlXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuZHggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLmR5ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5ob3Jpem9udGFsQ2VudGVyID0gXCJtaWRkbGVcIjtcclxuICAgICAgICAgICAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS52ZXJ0aWNhbENlbnRlciA9IFwidG9wXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHNlcmllc1xyXG4gICAgICAgIGxldCBzZXJpZXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnNlcmllcy5wdXNoKG5ldyBhbTRjaGFydHMuQ29sdW1uU2VyaWVzKCkpO1xyXG4gICAgICAgIHNlcmllcy5kYXRhRmllbGRzLnZhbHVlWSA9IFwidlwiO1xyXG4gICAgICAgIHNlcmllcy5kYXRhRmllbGRzLmNhdGVnb3J5WCA9IFwia1wiO1xyXG4gICAgICAgIHNlcmllcy5uYW1lID0gXCJcIjtcclxuICAgICAgICBzZXJpZXMuY29sdW1ucy50ZW1wbGF0ZS50b29sdGlwVGV4dCA9IFwie2NhdGVnb3J5WH06IFtib2xkXXt2YWx1ZVl9Wy9dXCI7XHJcbiAgICAgICAgc2VyaWVzLmNvbHVtbnMudGVtcGxhdGUuZmlsbE9wYWNpdHkgPSAuODtcclxuICAgICAgICBzZXJpZXMuY29sdW1ucy50ZW1wbGF0ZS53aWR0aCA9IGFtNGNvcmUucGVyY2VudChzZXR0aW5ncy5Db2x1bW5XaWR0aFBlcmNlbnRhZ2UgPz8gdGhpcy5EZWZhdWx0Q29sdW1uV2lkdGhQZXJjZW50YWdlKTtcclxuXHJcbiAgICAgICAgbGV0IGNvbHVtblRlbXBsYXRlID0gc2VyaWVzLmNvbHVtbnMudGVtcGxhdGU7XHJcbiAgICAgICAgY29sdW1uVGVtcGxhdGUuc3Ryb2tlV2lkdGggPSAyO1xyXG4gICAgICAgIGNvbHVtblRlbXBsYXRlLnN0cm9rZU9wYWNpdHkgPSAxO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZnJlc2hEYXRhKGRhdGE6IFZlcnRpY2FsQ2hhcnREYXRhIHwgYW55KSB7XHJcbiAgICAgICAgLy9UT0RPOklNUExcclxuICAgIH1cclxufSJdfQ==
@@ -0,0 +1,124 @@
1
+ import * as am4core from "@amcharts/amcharts4/core";
2
+ import * as am4charts from "@amcharts/amcharts4/charts";
3
+ /**
4
+ * Classe il cui unico scopo è gestire il setup e rendering di un VerticalStackedChart
5
+ */
6
+ export class VerticalStackedChartService {
7
+ /** @ignore */
8
+ constructor(Adapter) {
9
+ this.Adapter = Adapter;
10
+ /** @ignore */
11
+ this.dangerZone = 50;
12
+ /** @ignore */
13
+ this.LabelWidth = 150;
14
+ /** @ignore */
15
+ this.LabelRightWhenCompressed = 20;
16
+ /** @ignore */
17
+ this.LabelTopWhenCompressed = -5;
18
+ /** @ignore */
19
+ this.DefaultColumnWidthPercentage = 85;
20
+ }
21
+ /**
22
+ * Metodo che data una coppia Dati - Impostazioni li utilizza per creare e visualizzare un VerticalStackedChart
23
+ */
24
+ graphicate(data, settings) {
25
+ if (settings.Timeline) {
26
+ console.error("Timeline not supported for vertical chart");
27
+ return null;
28
+ }
29
+ //Per evitare di dimenticarmeli e gestire comunque bene gli ngif ecc...
30
+ am4core.options.autoDispose = true;
31
+ this.ChartInstance = am4core.create(settings.Name, am4charts.XYChart);
32
+ let ChartInstanceCasted = this.ChartInstance;
33
+ // Create axes
34
+ let yAxis = ChartInstanceCasted.yAxes.push(new am4charts.ValueAxis());
35
+ if (settings.YAxisTitle) {
36
+ yAxis.title.text = settings.YAxisTitle;
37
+ yAxis.title.fontWeight = "bold";
38
+ }
39
+ let categoryAxis = ChartInstanceCasted.xAxes.push(new am4charts.CategoryAxis());
40
+ if (settings.XAxisTitle) {
41
+ categoryAxis.title.text = settings.XAxisTitle;
42
+ categoryAxis.title.fontWeight = "bold";
43
+ }
44
+ yAxis.min = 0;
45
+ categoryAxis.dataFields.category = "key";
46
+ categoryAxis.renderer.grid.template.location = 0;
47
+ categoryAxis.renderer.minGridDistance = settings?.MinGridDistance ?? 30;
48
+ let label = categoryAxis.renderer.labels.template;
49
+ label.truncate = true;
50
+ label.maxWidth = settings.LabelWidth ?? this.LabelWidth;
51
+ label.tooltipText = "{category}";
52
+ if (settings?.AdaptLabelSizeAndOrientation == null ? true : settings?.AdaptLabelSizeAndOrientation) {
53
+ categoryAxis.events.on("sizechanged", (ev) => {
54
+ let axis = ev.target;
55
+ var cellWidth = axis.pixelWidth / (axis.endIndex - axis.startIndex);
56
+ if (cellWidth < axis.renderer.labels.template.maxWidth) {
57
+ let areWeInDangerZone = cellWidth < (settings?.LabelVerticalOrientationCutoffWidth ?? this.dangerZone);
58
+ axis.renderer.labels.template.rotation = areWeInDangerZone ? -90 : -45;
59
+ axis.renderer.labels.template.dx = settings.LabelRightWhenCompressed ?? areWeInDangerZone ? 0 : this.LabelRightWhenCompressed;
60
+ axis.renderer.labels.template.dy = settings.LabelTopWhenCompressed ?? this.LabelTopWhenCompressed;
61
+ axis.renderer.labels.template.horizontalCenter = "right";
62
+ axis.renderer.labels.template.verticalCenter = "middle";
63
+ }
64
+ else {
65
+ axis.renderer.labels.template.rotation = 0;
66
+ axis.renderer.labels.template.dx = 0;
67
+ axis.renderer.labels.template.dy = 0;
68
+ axis.renderer.labels.template.horizontalCenter = "middle";
69
+ axis.renderer.labels.template.verticalCenter = "top";
70
+ }
71
+ });
72
+ }
73
+ let dataPreConverted = this.Adapter ? this.Adapter.adaptDataForVerticalStackedChart(data) : data;
74
+ let dataConverted = [];
75
+ for (let i = 0; i < dataPreConverted.groups.length; i++) {
76
+ let item = dataPreConverted.groups[i];
77
+ let obj = { key: item.name };
78
+ for (let p = 0; p < item.values.length; p++) {
79
+ let value = item.values[p];
80
+ obj[value.k] = value.v;
81
+ }
82
+ dataConverted.push(obj);
83
+ }
84
+ ChartInstanceCasted.data = dataConverted;
85
+ //Prendo la prima categoria e mi baso sulle proprietà per dfeinire le serie
86
+ for (let prop in dataConverted[0]) {
87
+ if (prop !== "key")
88
+ this.createSeriesStacked(ChartInstanceCasted, settings, prop, prop);
89
+ }
90
+ if (settings.Legend) {
91
+ ChartInstanceCasted.legend = new am4charts.Legend();
92
+ ChartInstanceCasted.legend.position = settings?.LegendPosition ?? 'right';
93
+ ChartInstanceCasted.legend.itemContainers.template.tooltipText = "{category}";
94
+ if (settings.LegendPadding) {
95
+ let template = this.ChartInstance.legend.itemContainers.template;
96
+ template.paddingTop = settings.LegendPadding.top ?? 0;
97
+ template.paddingBottom = settings.LegendPadding.bottom ?? 0;
98
+ template.paddingLeft = settings.LegendPadding.left ?? 0;
99
+ template.paddingRight = settings.LegendPadding.right ?? 0;
100
+ }
101
+ }
102
+ return this;
103
+ }
104
+ /** @ignore */
105
+ refreshData(data) {
106
+ //TODO:IMPL
107
+ }
108
+ /** @ignore */
109
+ createSeriesStacked(chart, settings, field, name) {
110
+ // Set up series
111
+ let series = chart.series.push(new am4charts.ColumnSeries());
112
+ series.name = name;
113
+ series.dataFields.valueY = field;
114
+ series.dataFields.categoryX = "key";
115
+ series.sequencedInterpolation = true;
116
+ series.columns.template.tooltipText = "{name} {categoryX}: [bold]{valueY}[/]";
117
+ series.columns.template.fillOpacity = .8;
118
+ series.columns.template.width = am4core.percent(settings.ColumnWidthPercentage ?? this.DefaultColumnWidthPercentage);
119
+ // Make it stacked
120
+ series.stacked = true;
121
+ return series;
122
+ }
123
+ }
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVydGljYWxTdGFja2VkQ2hhcnRTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtY2hhcnRzL3NyYy9saWIvc2VydmljZXMvY2xhc3Nlcy9WZXJ0aWNhbFN0YWNrZWRDaGFydFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEtBQUssU0FBUyxNQUFNLDRCQUE0QixDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLDJCQUEyQjtJQWN0QyxjQUFjO0lBQ2QsWUFBbUIsT0FBb0I7UUFBcEIsWUFBTyxHQUFQLE9BQU8sQ0FBYTtRQVp2QyxjQUFjO1FBQ04sZUFBVSxHQUFXLEVBQUUsQ0FBQztRQUNoQyxjQUFjO1FBQ04sZUFBVSxHQUFXLEdBQUcsQ0FBQztRQUNqQyxjQUFjO1FBQ04sNkJBQXdCLEdBQVcsRUFBRSxDQUFDO1FBQzlDLGNBQWM7UUFDTiwyQkFBc0IsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1QyxjQUFjO1FBQ04saUNBQTRCLEdBQVcsRUFBRSxDQUFDO0lBR1AsQ0FBQztJQUU1Qzs7T0FFRztJQUNJLFVBQVUsQ0FBQyxJQUFvQyxFQUFFLFFBQXNDO1FBRTVGLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDM0QsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELHVFQUF1RTtRQUN2RSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLElBQUksbUJBQW1CLEdBQXNCLElBQUksQ0FBQyxhQUFhLENBQUM7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LENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7YUFDM0Q7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWM7SUFDUCxXQUFXLENBQUMsSUFBb0M7UUFDckQsV0FBVztJQUNiLENBQUM7SUFFRCxjQUFjO0lBQ04sbUJBQW1CLENBQUMsS0FBSyxFQUFFLFFBQXNDLEVBQUUsS0FBSyxFQUFFLElBQUk7UUFDcEYsZ0JBQWdCO1FBQ2hCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNwQyxNQUFNLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyx1Q0FBdUMsQ0FBQztRQUM5RSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUVySCxrQkFBa0I7UUFDbEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFdEIsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUJhc2VTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlL0lCYXNlU2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vYWRhcHRlcnMnO1xyXG5pbXBvcnQgeyBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgfSBmcm9tICcuLi8uLi9tb2RlbHMvZGF0YSc7XHJcbmltcG9ydCB7IFZlcnRpY2FsU3RhY2tlZENoYXJ0U2V0dGluZ3MgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2V0dGluZ3MnO1xyXG5cclxuaW1wb3J0ICogYXMgYW00Y29yZSBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jb3JlXCI7XHJcbmltcG9ydCAqIGFzIGFtNGNoYXJ0cyBmcm9tIFwiQGFtY2hhcnRzL2FtY2hhcnRzNC9jaGFydHNcIjtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgaWwgY3VpIHVuaWNvIHNjb3BvIMOoIGdlc3RpcmUgaWwgc2V0dXAgZSByZW5kZXJpbmcgZGkgdW4gVmVydGljYWxTdGFja2VkQ2hhcnRcclxuICovXHJcbmV4cG9ydCBjbGFzcyBWZXJ0aWNhbFN0YWNrZWRDaGFydFNlcnZpY2UgaW1wbGVtZW50cyBJQmFzZVNlcnZpY2U8YW00Y2hhcnRzLlhZQ2hhcnQ+e1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHVibGljIENoYXJ0SW5zdGFuY2U6IGFtNGNoYXJ0cy5YWUNoYXJ0O1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBkYW5nZXJab25lOiBudW1iZXIgPSA1MDtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgTGFiZWxXaWR0aDogbnVtYmVyID0gMTUwO1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBMYWJlbFJpZ2h0V2hlbkNvbXByZXNzZWQ6IG51bWJlciA9IDIwO1xyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgcHJpdmF0ZSBMYWJlbFRvcFdoZW5Db21wcmVzc2VkOiBudW1iZXIgPSAtNTtcclxuICAvKiogQGlnbm9yZSAqL1xyXG4gIHByaXZhdGUgRGVmYXVsdENvbHVtbldpZHRoUGVyY2VudGFnZTogbnVtYmVyID0gODU7XHJcblxyXG4gIC8qKiBAaWdub3JlICovXHJcbiAgY29uc3RydWN0b3IocHVibGljIEFkYXB0ZXI6IEJhc2VBZGFwdGVyKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIGNoZSBkYXRhIHVuYSBjb3BwaWEgRGF0aSAtIEltcG9zdGF6aW9uaSBsaSB1dGlsaXp6YSBwZXIgY3JlYXJlIGUgdmlzdWFsaXp6YXJlIHVuIFZlcnRpY2FsU3RhY2tlZENoYXJ0XHJcbiAgICovXHJcbiAgcHVibGljIGdyYXBoaWNhdGUoZGF0YTogVmVydGljYWxTdGFja2VkQ2hhcnREYXRhIHwgYW55LCBzZXR0aW5nczogVmVydGljYWxTdGFja2VkQ2hhcnRTZXR0aW5ncyk6IElCYXNlU2VydmljZTxhbTRjaGFydHMuWFlDaGFydD4ge1xyXG4gICAgXHJcbiAgICBpZiAoc2V0dGluZ3MuVGltZWxpbmUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlRpbWVsaW5lIG5vdCBzdXBwb3J0ZWQgZm9yIHZlcnRpY2FsIGNoYXJ0XCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvL1BlciBldml0YXJlIGRpIGRpbWVudGljYXJtZWxpIGUgZ2VzdGlyZSBjb211bnF1ZSBiZW5lIGdsaSBuZ2lmIGVjYy4uLlxyXG4gICAgYW00Y29yZS5vcHRpb25zLmF1dG9EaXNwb3NlID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLkNoYXJ0SW5zdGFuY2UgPSBhbTRjb3JlLmNyZWF0ZShzZXR0aW5ncy5OYW1lLCBhbTRjaGFydHMuWFlDaGFydCk7XHJcbiAgICBsZXQgQ2hhcnRJbnN0YW5jZUNhc3RlZCA9IDxhbTRjaGFydHMuWFlDaGFydD50aGlzLkNoYXJ0SW5zdGFuY2U7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGF4ZXMgXHJcbiAgICBsZXQgeUF4aXMgPSBDaGFydEluc3RhbmNlQ2FzdGVkLnlBeGVzLnB1c2gobmV3IGFtNGNoYXJ0cy5WYWx1ZUF4aXMoKSk7XHJcbiAgICBpZiAoc2V0dGluZ3MuWUF4aXNUaXRsZSkge1xyXG4gICAgICB5QXhpcy50aXRsZS50ZXh0ID0gc2V0dGluZ3MuWUF4aXNUaXRsZVxyXG4gICAgICB5QXhpcy50aXRsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XHJcbiAgICB9XHJcbiAgICBsZXQgY2F0ZWdvcnlBeGlzID0gQ2hhcnRJbnN0YW5jZUNhc3RlZC54QXhlcy5wdXNoKG5ldyBhbTRjaGFydHMuQ2F0ZWdvcnlBeGlzKCkpO1xyXG4gICAgaWYgKHNldHRpbmdzLlhBeGlzVGl0bGUpIHtcclxuICAgICAgY2F0ZWdvcnlBeGlzLnRpdGxlLnRleHQgPSBzZXR0aW5ncy5YQXhpc1RpdGxlXHJcbiAgICAgIGNhdGVnb3J5QXhpcy50aXRsZS5mb250V2VpZ2h0ID0gXCJib2xkXCI7XHJcbiAgICB9XHJcblxyXG4gICAgeUF4aXMubWluID0gMDtcclxuXHJcbiAgICBjYXRlZ29yeUF4aXMuZGF0YUZpZWxkcy5jYXRlZ29yeSA9IFwia2V5XCI7XHJcbiAgICBjYXRlZ29yeUF4aXMucmVuZGVyZXIuZ3JpZC50ZW1wbGF0ZS5sb2NhdGlvbiA9IDA7XHJcbiAgICBjYXRlZ29yeUF4aXMucmVuZGVyZXIubWluR3JpZERpc3RhbmNlID0gc2V0dGluZ3M/Lk1pbkdyaWREaXN0YW5jZSA/PyAzMDtcclxuXHJcbiAgICBsZXQgbGFiZWwgPSBjYXRlZ29yeUF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlO1xyXG4gICAgbGFiZWwudHJ1bmNhdGUgPSB0cnVlO1xyXG4gICAgbGFiZWwubWF4V2lkdGggPSBzZXR0aW5ncy5MYWJlbFdpZHRoID8/IHRoaXMuTGFiZWxXaWR0aDtcclxuICAgIGxhYmVsLnRvb2x0aXBUZXh0ID0gXCJ7Y2F0ZWdvcnl9XCI7XHJcblxyXG4gICAgaWYgKHNldHRpbmdzPy5BZGFwdExhYmVsU2l6ZUFuZE9yaWVudGF0aW9uID09IG51bGwgPyB0cnVlIDogc2V0dGluZ3M/LkFkYXB0TGFiZWxTaXplQW5kT3JpZW50YXRpb24pIHtcclxuICAgICAgY2F0ZWdvcnlBeGlzLmV2ZW50cy5vbihcInNpemVjaGFuZ2VkXCIsIChldikgPT4ge1xyXG4gICAgICAgIGxldCBheGlzID0gZXYudGFyZ2V0O1xyXG4gICAgICAgIHZhciBjZWxsV2lkdGggPSBheGlzLnBpeGVsV2lkdGggLyAoYXhpcy5lbmRJbmRleCAtIGF4aXMuc3RhcnRJbmRleCk7XHJcbiAgICAgICAgaWYgKGNlbGxXaWR0aCA8IGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLm1heFdpZHRoKSB7XHJcbiAgICAgICAgICBsZXQgYXJlV2VJbkRhbmdlclpvbmUgPSBjZWxsV2lkdGggPCAoc2V0dGluZ3M/LkxhYmVsVmVydGljYWxPcmllbnRhdGlvbkN1dG9mZldpZHRoID8/IHRoaXMuZGFuZ2VyWm9uZSk7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IGFyZVdlSW5EYW5nZXJab25lID8gLTkwIDogLTQ1O1xyXG4gICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuZHggPSBzZXR0aW5ncy5MYWJlbFJpZ2h0V2hlbkNvbXByZXNzZWQgPz8gYXJlV2VJbkRhbmdlclpvbmUgPyAwIDogdGhpcy5MYWJlbFJpZ2h0V2hlbkNvbXByZXNzZWQ7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keSA9IHNldHRpbmdzLkxhYmVsVG9wV2hlbkNvbXByZXNzZWQgPz8gdGhpcy5MYWJlbFRvcFdoZW5Db21wcmVzc2VkO1xyXG4gICAgICAgICAgYXhpcy5yZW5kZXJlci5sYWJlbHMudGVtcGxhdGUuaG9yaXpvbnRhbENlbnRlciA9IFwicmlnaHRcIjtcclxuICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLnZlcnRpY2FsQ2VudGVyID0gXCJtaWRkbGVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5yb3RhdGlvbiA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keCA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5keSA9IDA7XHJcbiAgICAgICAgICBheGlzLnJlbmRlcmVyLmxhYmVscy50ZW1wbGF0ZS5ob3Jpem9udGFsQ2VudGVyID0gXCJtaWRkbGVcIjtcclxuICAgICAgICAgIGF4aXMucmVuZGVyZXIubGFiZWxzLnRlbXBsYXRlLnZlcnRpY2FsQ2VudGVyID0gXCJ0b3BcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXRhUHJlQ29udmVydGVkOiBWZXJ0aWNhbFN0YWNrZWRDaGFydERhdGEgPSB0aGlzLkFkYXB0ZXIgPyB0aGlzLkFkYXB0ZXIuYWRhcHREYXRhRm9yVmVydGljYWxTdGFja2VkQ2hhcnQoZGF0YSkgOiBkYXRhO1xyXG5cclxuICAgIGxldCBkYXRhQ29udmVydGVkID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFQcmVDb252ZXJ0ZWQuZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBpdGVtID0gZGF0YVByZUNvbnZlcnRlZC5ncm91cHNbaV07XHJcbiAgICAgIGxldCBvYmogPSB7IGtleTogaXRlbS5uYW1lIH07XHJcbiAgICAgIGZvciAobGV0IHAgPSAwOyBwIDwgaXRlbS52YWx1ZXMubGVuZ3RoOyBwKyspIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSBpdGVtLnZhbHVlc1twXTtcclxuICAgICAgICBvYmpbdmFsdWUua10gPSB2YWx1ZS52O1xyXG4gICAgICB9XHJcbiAgICAgIGRhdGFDb252ZXJ0ZWQucHVzaChvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQuZGF0YSA9IGRhdGFDb252ZXJ0ZWQ7XHJcblxyXG4gICAgLy9QcmVuZG8gbGEgcHJpbWEgY2F0ZWdvcmlhIGUgbWkgYmFzbyBzdWxsZSBwcm9wcmlldMOgIHBlciBkZmVpbmlyZSBsZSBzZXJpZVxyXG4gICAgZm9yIChsZXQgcHJvcCBpbiBkYXRhQ29udmVydGVkWzBdKSB7XHJcbiAgICAgIGlmIChwcm9wICE9PSBcImtleVwiKVxyXG4gICAgICAgIHRoaXMuY3JlYXRlU2VyaWVzU3RhY2tlZChDaGFydEluc3RhbmNlQ2FzdGVkLCBzZXR0aW5ncywgcHJvcCwgcHJvcCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNldHRpbmdzLkxlZ2VuZCkge1xyXG4gICAgICBDaGFydEluc3RhbmNlQ2FzdGVkLmxlZ2VuZCA9IG5ldyBhbTRjaGFydHMuTGVnZW5kKCk7XHJcbiAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQubGVnZW5kLnBvc2l0aW9uID0gc2V0dGluZ3M/LkxlZ2VuZFBvc2l0aW9uID8/ICdyaWdodCc7XHJcbiAgICAgIENoYXJ0SW5zdGFuY2VDYXN0ZWQubGVnZW5kLml0ZW1Db250YWluZXJzLnRlbXBsYXRlLnRvb2x0aXBUZXh0ID0gXCJ7Y2F0ZWdvcnl9XCI7XHJcblxyXG4gICAgICBpZiAoc2V0dGluZ3MuTGVnZW5kUGFkZGluZykge1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IHRoaXMuQ2hhcnRJbnN0YW5jZS5sZWdlbmQuaXRlbUNvbnRhaW5lcnMudGVtcGxhdGU7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ1RvcCA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcudG9wID8/IDA7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ0JvdHRvbSA9IHNldHRpbmdzLkxlZ2VuZFBhZGRpbmcuYm90dG9tID8/IDA7XHJcbiAgICAgICAgdGVtcGxhdGUucGFkZGluZ0xlZnQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLmxlZnQgPz8gMDtcclxuICAgICAgICB0ZW1wbGF0ZS5wYWRkaW5nUmlnaHQgPSBzZXR0aW5ncy5MZWdlbmRQYWRkaW5nLnJpZ2h0ID8/IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwdWJsaWMgcmVmcmVzaERhdGEoZGF0YTogVmVydGljYWxTdGFja2VkQ2hhcnREYXRhIHwgYW55KSB7XHJcbiAgICAvL1RPRE86SU1QTFxyXG4gIH1cclxuXHJcbiAgLyoqIEBpZ25vcmUgKi9cclxuICBwcml2YXRlIGNyZWF0ZVNlcmllc1N0YWNrZWQoY2hhcnQsIHNldHRpbmdzOiBWZXJ0aWNhbFN0YWNrZWRDaGFydFNldHRpbmdzLCBmaWVsZCwgbmFtZSkge1xyXG4gICAgLy8gU2V0IHVwIHNlcmllc1xyXG4gICAgbGV0IHNlcmllcyA9IGNoYXJ0LnNlcmllcy5wdXNoKG5ldyBhbTRjaGFydHMuQ29sdW1uU2VyaWVzKCkpO1xyXG4gICAgc2VyaWVzLm5hbWUgPSBuYW1lO1xyXG4gICAgc2VyaWVzLmRhdGFGaWVsZHMudmFsdWVZID0gZmllbGQ7XHJcbiAgICBzZXJpZXMuZGF0YUZpZWxkcy5jYXRlZ29yeVggPSBcImtleVwiO1xyXG4gICAgc2VyaWVzLnNlcXVlbmNlZEludGVycG9sYXRpb24gPSB0cnVlO1xyXG4gICAgc2VyaWVzLmNvbHVtbnMudGVtcGxhdGUudG9vbHRpcFRleHQgPSBcIntuYW1lfSB7Y2F0ZWdvcnlYfTogW2JvbGRde3ZhbHVlWX1bL11cIjtcclxuICAgIHNlcmllcy5jb2x1bW5zLnRlbXBsYXRlLmZpbGxPcGFjaXR5ID0gLjg7XHJcbiAgICBzZXJpZXMuY29sdW1ucy50ZW1wbGF0ZS53aWR0aCA9IGFtNGNvcmUucGVyY2VudChzZXR0aW5ncy5Db2x1bW5XaWR0aFBlcmNlbnRhZ2UgPz8gdGhpcy5EZWZhdWx0Q29sdW1uV2lkdGhQZXJjZW50YWdlKTtcclxuXHJcbiAgICAvLyBNYWtlIGl0IHN0YWNrZWRcclxuICAgIHNlcmllcy5zdGFja2VkID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gc2VyaWVzO1xyXG4gIH1cclxufSJdfQ==