cats-charts 0.0.9 → 0.0.11

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.
@@ -8,6 +8,197 @@ import { CanvasRenderer } from 'echarts/renderers';
8
8
 
9
9
  class Charts {
10
10
  legendSelected = {};
11
+ // buildGraphicLegend(total: number, config: any, chartInstance: any) {
12
+ // const pillHeight = 28;
13
+ // const spacing = 14;
14
+ // const indicatorWidth = 12;
15
+ // const horizontalPadding = 8;
16
+ // const gapAfterIndicator = 4;
17
+ // const font = '14px sans-serif';
18
+ // const isVertical = config.legendDirection === 'vertical';
19
+ // // 🔹 Initialize selected state once
20
+ // // if (Object.keys(this.legendSelected).length === 0) {
21
+ // // config.data.forEach((d: any) => {
22
+ // // this.legendSelected[d.name] = true;
23
+ // // });
24
+ // // }
25
+ // // 🔹 Build pills
26
+ // const pills = config.data.map((item: any, index: number) => {
27
+ // const color =
28
+ // config.colors?.[index] ?? ['#3b82f6', '#f59e0b', '#16a34a', '#ef4444'][index % 4];
29
+ // const percentage = ((item.value / total) * 100).toFixed(1) + '%';
30
+ // const nameRect = echarts.format.getTextRect(item.name, font);
31
+ // const valueRect = echarts.format.getTextRect(String(item.value), font);
32
+ // const pillWidth =
33
+ // horizontalPadding +
34
+ // indicatorWidth +
35
+ // gapAfterIndicator +
36
+ // nameRect.width +
37
+ // 8 +
38
+ // valueRect.width +
39
+ // horizontalPadding;
40
+ // return { item, color, pillWidth, percentage };
41
+ // });
42
+ // const totalWidth = isVertical
43
+ // ? Math.max(...pills.map((p: any) => p.pillWidth))
44
+ // : pills.reduce((sum: any, p: any) => sum + p.pillWidth, 0) + spacing * (pills.length - 1);
45
+ // const totalHeight = isVertical
46
+ // ? pills.length * pillHeight + spacing * (pills.length - 1)
47
+ // : pillHeight;
48
+ // let currentOffset = 0;
49
+ // // 🔹 Position logic
50
+ // const positionConfig: any = {};
51
+ // switch (config.legendPosition) {
52
+ // case 'top':
53
+ // positionConfig.top = 20;
54
+ // break;
55
+ // case 'bottom':
56
+ // positionConfig.bottom = 20;
57
+ // break;
58
+ // case 'left':
59
+ // positionConfig.left = 20;
60
+ // break;
61
+ // case 'right':
62
+ // positionConfig.right = 20;
63
+ // break;
64
+ // }
65
+ // // ALIGNMENT (Cross-Axis)
66
+ // if (config.legendPosition === 'top' || config.legendPosition === 'bottom') {
67
+ // // Horizontal area → align horizontally
68
+ // if (config.legendAlign === 'center') {
69
+ // positionConfig.left = 'center';
70
+ // } else if (config.legendAlign === 'right') {
71
+ // positionConfig.right = 20;
72
+ // } else {
73
+ // positionConfig.left = 20;
74
+ // }
75
+ // } else {
76
+ // // Vertical area → align vertically
77
+ // if (config.legendAlign === 'center') {
78
+ // positionConfig.top = 'middle';
79
+ // } else if (config.legendAlign === 'right') {
80
+ // positionConfig.bottom = 20;
81
+ // } else {
82
+ // positionConfig.top = 20;
83
+ // }
84
+ // }
85
+ // return [
86
+ // {
87
+ // id: 'customLegend', // IMPORTANT
88
+ // type: 'group',
89
+ // ...positionConfig,
90
+ // width: totalWidth,
91
+ // height: totalHeight,
92
+ // children: pills.map((pill: any) => {
93
+ // const offset = currentOffset;
94
+ // currentOffset += (isVertical ? pillHeight : pill.pillWidth) + spacing;
95
+ // let isSelected = this.legendSelected[pill.item.name];
96
+ // return {
97
+ // type: 'group',
98
+ // top: isVertical ? offset : 0,
99
+ // left: isVertical ? 0 : offset,
100
+ // width: pill.pillWidth,
101
+ // height: pillHeight,
102
+ // cursor: 'pointer',
103
+ // // onclick: () => {
104
+ // // // 🔹 Toggle selected state
105
+ // // this.legendSelected[pill.item.name] = !this.legendSelected[pill.item.name];
106
+ // // chartInstance?.dispatchAction({
107
+ // // type: 'legendToggleSelect',
108
+ // // name: pill.item.name,
109
+ // // });
110
+ // // chartInstance?.setOption({
111
+ // // graphic: {
112
+ // // id: 'customLegend',
113
+ // // // $action: 'replace',
114
+ // // ...this.buildGraphicLegend(total, config, chartInstance)[0],
115
+ // // },
116
+ // // });
117
+ // // },
118
+ // onclick: () => {
119
+ // chartInstance.dispatchAction({
120
+ // type: 'legendToggleSelect',
121
+ // name: pill.item.name,
122
+ // });
123
+ // // 🔥 Read fresh selected state from chart
124
+ // const selectedMap = chartInstance.getOption()?.legend?.[0]?.selected || {};
125
+ // this.legendSelected = { ...selectedMap };
126
+ // chartInstance.setOption({
127
+ // graphic: {
128
+ // id: 'customLegend',
129
+ // $action: 'replace',
130
+ // ...this.buildGraphicLegend(total, config, chartInstance),
131
+ // },
132
+ // });
133
+ // },
134
+ // children: [
135
+ // // 🔹 Pill Background
136
+ // {
137
+ // type: 'rect',
138
+ // shape: {
139
+ // width: pill.pillWidth,
140
+ // height: pillHeight,
141
+ // r: 4,
142
+ // },
143
+ // style: {
144
+ // fill: !isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',
145
+ // stroke: !isSelected ? pill.color : '#D1D1D6',
146
+ // // fill: this.hexToRgba(pill.color, 0.08),
147
+ // // stroke: pill.color,
148
+ // lineWidth: 1,
149
+ // },
150
+ // },
151
+ // // 🔹 Color Indicator
152
+ // {
153
+ // type: 'rect',
154
+ // shape: {
155
+ // width: indicatorWidth,
156
+ // height: indicatorWidth,
157
+ // r: 2,
158
+ // },
159
+ // left: horizontalPadding,
160
+ // top: (pillHeight - indicatorWidth) / 2,
161
+ // // style: {
162
+ // // fill: pill.color,
163
+ // // },
164
+ // style: {
165
+ // fill: !isSelected ? pill.color : '#C7C7CC',
166
+ // },
167
+ // },
168
+ // // 🔹 Label
169
+ // {
170
+ // type: 'text',
171
+ // left: horizontalPadding + indicatorWidth + gapAfterIndicator,
172
+ // top: (pillHeight - indicatorWidth) / 2,
173
+ // style: {
174
+ // text: pill.item.name,
175
+ // fontSize: 14,
176
+ // // fill: '#1C1C1E',
177
+ // fill: !isSelected ? '#1C1C1E' : '#8E8E93',
178
+ // textVerticalAlign: 'middle',
179
+ // },
180
+ // },
181
+ // // 🔹 value text
182
+ // {
183
+ // type: 'text',
184
+ // left: pill.pillWidth - horizontalPadding - indicatorWidth - gapAfterIndicator,
185
+ // top: (pillHeight - indicatorWidth) / 2,
186
+ // style: {
187
+ // text: pill.item.value,
188
+ // fontSize: 14,
189
+ // fontWeight: 500,
190
+ // // fill: '#1C1C1E',
191
+ // fill: !isSelected ? '#1C1C1E' : '#8E8E93',
192
+ // textAlign: 'right',
193
+ // textVerticalAlign: 'middle',
194
+ // },
195
+ // },
196
+ // ],
197
+ // };
198
+ // }),
199
+ // },
200
+ // ];
201
+ // }
11
202
  buildGraphicLegend(total, config, chartInstance) {
12
203
  const pillHeight = 28;
13
204
  const spacing = 14;
@@ -17,15 +208,9 @@ class Charts {
17
208
  const font = '14px sans-serif';
18
209
  const isVertical = config.legendDirection === 'vertical';
19
210
  // 🔹 Initialize selected state once
20
- if (Object.keys(this.legendSelected).length === 0) {
21
- config.data.forEach((d) => {
22
- this.legendSelected[d.name] = true;
23
- });
24
- }
25
- // 🔹 Build pills
211
+ const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};
26
212
  const pills = config.data.map((item, index) => {
27
213
  const color = config.colors?.[index] ?? ['#3b82f6', '#f59e0b', '#16a34a', '#ef4444'][index % 4];
28
- const percentage = ((item.value / total) * 100).toFixed(1) + '%';
29
214
  const nameRect = echarts.format.getTextRect(item.name, font);
30
215
  const valueRect = echarts.format.getTextRect(String(item.value), font);
31
216
  const pillWidth = horizontalPadding +
@@ -35,7 +220,7 @@ class Charts {
35
220
  8 +
36
221
  valueRect.width +
37
222
  horizontalPadding;
38
- return { item, color, pillWidth, percentage };
223
+ return { item, color, pillWidth };
39
224
  });
40
225
  const totalWidth = isVertical
41
226
  ? Math.max(...pills.map((p) => p.pillWidth))
@@ -95,7 +280,7 @@ class Charts {
95
280
  children: pills.map((pill) => {
96
281
  const offset = currentOffset;
97
282
  currentOffset += (isVertical ? pillHeight : pill.pillWidth) + spacing;
98
- let isSelected = this.legendSelected[pill.item.name];
283
+ const isSelected = selectedMap[pill.item.name] !== false;
99
284
  return {
100
285
  type: 'group',
101
286
  top: isVertical ? offset : 0,
@@ -103,17 +288,15 @@ class Charts {
103
288
  width: pill.pillWidth,
104
289
  height: pillHeight,
105
290
  cursor: 'pointer',
106
- onclick: (dt, v) => {
107
- // 🔹 Toggle selected state
108
- this.legendSelected[pill.item.name] = !this.legendSelected[pill.item.name];
109
- chartInstance?.dispatchAction({
291
+ onclick: () => {
292
+ chartInstance.dispatchAction({
110
293
  type: 'legendToggleSelect',
111
294
  name: pill.item.name,
112
295
  });
113
- chartInstance?.setOption({
296
+ chartInstance.setOption({
114
297
  graphic: {
115
298
  id: 'customLegend',
116
- // $action: 'replace',
299
+ // $action: 'replace',
117
300
  ...this.buildGraphicLegend(total, config, chartInstance)[0],
118
301
  },
119
302
  });
@@ -128,10 +311,8 @@ class Charts {
128
311
  r: 4,
129
312
  },
130
313
  style: {
131
- fill: !isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',
132
- stroke: !isSelected ? pill.color : '#D1D1D6',
133
- // fill: this.hexToRgba(pill.color, 0.08),
134
- // stroke: pill.color,
314
+ fill: isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',
315
+ stroke: isSelected ? pill.color : '#D1D1D6',
135
316
  lineWidth: 1,
136
317
  },
137
318
  },
@@ -145,11 +326,8 @@ class Charts {
145
326
  },
146
327
  left: horizontalPadding,
147
328
  top: (pillHeight - indicatorWidth) / 2,
148
- // style: {
149
- // fill: pill.color,
150
- // },
151
329
  style: {
152
- fill: !isSelected ? pill.color : '#C7C7CC',
330
+ fill: isSelected ? pill.color : '#C7C7CC',
153
331
  },
154
332
  },
155
333
  // 🔹 Label
@@ -160,8 +338,7 @@ class Charts {
160
338
  style: {
161
339
  text: pill.item.name,
162
340
  fontSize: 14,
163
- // fill: '#1C1C1E',
164
- fill: !isSelected ? '#1C1C1E' : '#8E8E93',
341
+ fill: isSelected ? '#1C1C1E' : '#8E8E93',
165
342
  textVerticalAlign: 'middle',
166
343
  },
167
344
  },
@@ -174,8 +351,7 @@ class Charts {
174
351
  text: pill.item.value,
175
352
  fontSize: 14,
176
353
  fontWeight: 500,
177
- // fill: '#1C1C1E',
178
- fill: !isSelected ? '#1C1C1E' : '#8E8E93',
354
+ fill: isSelected ? '#1C1C1E' : '#8E8E93',
179
355
  textAlign: 'right',
180
356
  textVerticalAlign: 'middle',
181
357
  },
@@ -520,7 +696,6 @@ class PieChart {
520
696
  /* -------------------- Local State -------------------- */
521
697
  chartOption;
522
698
  chartInstance;
523
- chartsContainer;
524
699
  openCard = false;
525
700
  cardPosition = { x: 0, y: 0 };
526
701
  constructor(chartService) {
@@ -540,15 +715,14 @@ class PieChart {
540
715
  this.chartInstance?.dispose();
541
716
  }
542
717
  /* -------------------- Chart Init -------------------- */
543
- onChartInit(ec, container) {
718
+ onChartInit(ec) {
544
719
  this.chartInstance = ec;
545
- this.chartsContainer = container;
546
720
  this.buildOption();
547
721
  this.bindEvents();
548
722
  }
549
723
  /* -------------------- Build Option -------------------- */
550
724
  buildOption() {
551
- const total = this.config.data.reduce((sum, item) => sum + item.value, 0);
725
+ const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);
552
726
  this.chartOption = {
553
727
  backgroundColor: this.config.backgroundColor ?? 'transparent',
554
728
  title: {
@@ -559,16 +733,18 @@ class PieChart {
559
733
  tooltip: {
560
734
  show: this.config.showTooltip ?? true,
561
735
  trigger: 'item',
562
- backgroundColor: '#fff', // remove default box
736
+ backgroundColor: 'transparent', // remove default box
563
737
  borderWidth: 0,
564
738
  padding: 0,
565
- extraCssText: 'box-shadow:none;',
739
+ confine: true,
566
740
  formatter: (params) => this.config.tooltipFormatter
567
741
  ? this.config.tooltipFormatter(params, this.config)
568
742
  : this.chartService.pieTooltipFormatter(params, this.config),
569
743
  },
570
744
  legend: { show: false },
571
- graphic: this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),
745
+ graphic: this.chartInstance && !this.config.hideLegend
746
+ ? this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)
747
+ : undefined,
572
748
  series: [
573
749
  {
574
750
  type: 'pie',
@@ -615,7 +791,8 @@ class PieChart {
615
791
  this.chartInstance.on(eventName, (params) => {
616
792
  if (eventName === 'contextmenu') {
617
793
  params.event?.event?.preventDefault();
618
- const rect = this.chartsContainer.getBoundingClientRect();
794
+ const container = this.chartInstance.getDom();
795
+ const rect = container.getBoundingClientRect();
619
796
  this.cardPosition = {
620
797
  x: params.event.event.clientX - rect.left,
621
798
  y: params.event.event.clientY - rect.top,
@@ -634,11 +811,11 @@ class PieChart {
634
811
  this.openCard = false;
635
812
  }
636
813
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PieChart, deps: [{ token: Charts }], target: i0.ɵɵFactoryTarget.Component });
637
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: PieChart, isStandalone: true, selector: "lib-pie-chart", inputs: { config: "config", theme: "theme", events: "events", cardOptions: "cardOptions" }, outputs: { chartEvent: "chartEvent", cardOptionClick: "cardOptionClick" }, host: { listeners: { "document:click": "closeCard()" } }, providers: [provideEchartsCore({ echarts })], usesOnChanges: true, ngImport: i0, template: "<div\n #chartsContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event, chartsContainer)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\">\n </lib-right-click-card>\n}", styles: [".chart-container{width:100%;height:400px;position:relative}\n"], dependencies: [{ kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "component", type: RightClickCard, selector: "lib-right-click-card", inputs: ["cardPosition", "cardOptions"], outputs: ["contextMenuClick"] }] });
814
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: PieChart, isStandalone: true, selector: "lib-pie-chart", inputs: { config: "config", theme: "theme", events: "events", cardOptions: "cardOptions" }, outputs: { chartEvent: "chartEvent", cardOptionClick: "cardOptionClick" }, host: { listeners: { "document:click": "closeCard()" } }, providers: [provideEchartsCore({ echarts })], usesOnChanges: true, ngImport: i0, template: "<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\"\n >\n </lib-right-click-card>\n}\n", styles: [".chart-container{width:100%;height:100%;position:relative}\n"], dependencies: [{ kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "component", type: RightClickCard, selector: "lib-right-click-card", inputs: ["cardPosition", "cardOptions"], outputs: ["contextMenuClick"] }] });
638
815
  }
639
816
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: PieChart, decorators: [{
640
817
  type: Component,
641
- args: [{ selector: 'lib-pie-chart', imports: [NgxEchartsDirective, RightClickCard], providers: [provideEchartsCore({ echarts })], template: "<div\n #chartsContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event, chartsContainer)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\">\n </lib-right-click-card>\n}", styles: [".chart-container{width:100%;height:400px;position:relative}\n"] }]
818
+ args: [{ selector: 'lib-pie-chart', imports: [NgxEchartsDirective, RightClickCard], providers: [provideEchartsCore({ echarts })], template: "<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\"\n >\n </lib-right-click-card>\n}\n", styles: [".chart-container{width:100%;height:100%;position:relative}\n"] }]
642
819
  }], ctorParameters: () => [{ type: Charts }], propDecorators: { config: [{
643
820
  type: Input
644
821
  }], theme: [{
@@ -673,7 +850,6 @@ class DoughnutChart {
673
850
  showContextMenu = false;
674
851
  contextMenuClick = new EventEmitter();
675
852
  chartEvent = new EventEmitter();
676
- chartsContainer;
677
853
  cardPosition = { x: 0, y: 0 };
678
854
  openCard = false;
679
855
  chartOption;
@@ -730,20 +906,23 @@ class DoughnutChart {
730
906
  tooltip: {
731
907
  show: this.config.showTooltip ?? true,
732
908
  trigger: 'item',
733
- backgroundColor: '#fff', // remove default box
909
+ backgroundColor: 'transparent', // remove default box
734
910
  borderWidth: 0,
735
911
  padding: 0,
736
- extraCssText: 'box-shadow:none;',
912
+ confine: true,
737
913
  formatter: (params) => this.config.tooltipFormatter
738
914
  ? this.config.tooltipFormatter(params, this.config)
739
915
  : this.chartService.pieTooltipFormatter(params, this.config),
740
916
  },
741
917
  legend: { show: false },
742
- // graphic: this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),
743
- graphic: [
744
- ...this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),
745
- ...this.chartService.buildCenterGraphic(this.config, total),
746
- ],
918
+ graphic: this.chartInstance
919
+ ? [
920
+ ...(this.config.hideLegend
921
+ ? []
922
+ : this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)),
923
+ ...this.chartService.buildCenterGraphic(this.config, total),
924
+ ]
925
+ : undefined,
747
926
  series: [
748
927
  {
749
928
  type: 'pie',
@@ -760,6 +939,9 @@ class DoughnutChart {
760
939
  borderColor: this.config.borderColor || '#fff',
761
940
  borderWidth: this.config.borderWidth ?? 2,
762
941
  },
942
+ emphasis: {
943
+ scale: this.config.emphasisScale,
944
+ },
763
945
  },
764
946
  ],
765
947
  };
@@ -771,9 +953,8 @@ class DoughnutChart {
771
953
  * @param ec
772
954
  * @param [container]
773
955
  */
774
- onChartInit(ec, container) {
956
+ onChartInit(ec) {
775
957
  this.chartInstance = ec;
776
- this.chartsContainer = container;
777
958
  this.buildOption();
778
959
  this.bindEvents();
779
960
  }
@@ -793,7 +974,8 @@ class DoughnutChart {
793
974
  if (eventName === 'contextmenu' && params.event?.event) {
794
975
  params.event.event.preventDefault();
795
976
  if (eventName === 'contextmenu') {
796
- const rect = this.chartsContainer.getBoundingClientRect();
977
+ const container = this.chartInstance.getDom();
978
+ const rect = container.getBoundingClientRect();
797
979
  this.cardPosition = {
798
980
  x: params.event?.event.clientX - rect.left,
799
981
  y: params.event?.event.clientY - rect.top,
@@ -813,11 +995,11 @@ class DoughnutChart {
813
995
  this.chartInstance?.dispose();
814
996
  }
815
997
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DoughnutChart, deps: [{ token: Charts }], target: i0.ɵɵFactoryTarget.Component });
816
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DoughnutChart, isStandalone: true, selector: "lib-doughnut-chart", inputs: { config: "config", theme: "theme", events: "events", contextMenuOptions: "contextMenuOptions", showContextMenu: "showContextMenu" }, outputs: { contextMenuClick: "contextMenuClick", chartEvent: "chartEvent" }, host: { listeners: { "document:click": "closeCard()" } }, providers: [provideEchartsCore({ echarts })], usesOnChanges: true, ngImport: i0, template: "<div\n echarts\n #chartsConainer\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event,chartsConainer)\" \n >\n</div>\n @if (openCard) {\n <lib-right-click-card [cardOptions]=\"contextMenuOptions\" (contextMenuClick)=\"onMenuClick($event)\" [cardPosition]=\"cardPosition\"></lib-right-click-card>\n }", styles: [".chart-container{width:100%;height:400px;position:relative}\n"], dependencies: [{ kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "component", type: RightClickCard, selector: "lib-right-click-card", inputs: ["cardPosition", "cardOptions"], outputs: ["contextMenuClick"] }] });
998
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: DoughnutChart, isStandalone: true, selector: "lib-doughnut-chart", inputs: { config: "config", theme: "theme", events: "events", contextMenuOptions: "contextMenuOptions", showContextMenu: "showContextMenu" }, outputs: { contextMenuClick: "contextMenuClick", chartEvent: "chartEvent" }, host: { listeners: { "document:click": "closeCard()" } }, providers: [provideEchartsCore({ echarts })], usesOnChanges: true, ngImport: i0, template: "<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n", styles: [".chart-container{width:100%;height:100%;position:relative}\n"], dependencies: [{ kind: "directive", type: NgxEchartsDirective, selector: "echarts, [echarts]", inputs: ["options", "theme", "initOpts", "merge", "autoResize", "loading", "loadingType", "loadingOpts"], outputs: ["chartInit", "optionsError", "chartClick", "chartDblClick", "chartMouseDown", "chartMouseMove", "chartMouseUp", "chartMouseOver", "chartMouseOut", "chartGlobalOut", "chartContextMenu", "chartHighlight", "chartDownplay", "chartSelectChanged", "chartLegendSelectChanged", "chartLegendSelected", "chartLegendUnselected", "chartLegendLegendSelectAll", "chartLegendLegendInverseSelect", "chartLegendScroll", "chartDataZoom", "chartDataRangeSelected", "chartGraphRoam", "chartGeoRoam", "chartTreeRoam", "chartTimelineChanged", "chartTimelinePlayChanged", "chartRestore", "chartDataViewChanged", "chartMagicTypeChanged", "chartGeoSelectChanged", "chartGeoSelected", "chartGeoUnselected", "chartAxisAreaSelected", "chartBrush", "chartBrushEnd", "chartBrushSelected", "chartGlobalCursorTaken", "chartRendered", "chartFinished"], exportAs: ["echarts"] }, { kind: "component", type: RightClickCard, selector: "lib-right-click-card", inputs: ["cardPosition", "cardOptions"], outputs: ["contextMenuClick"] }] });
817
999
  }
818
1000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: DoughnutChart, decorators: [{
819
1001
  type: Component,
820
- args: [{ selector: 'lib-doughnut-chart', imports: [NgxEchartsDirective, RightClickCard], providers: [provideEchartsCore({ echarts })], template: "<div\n echarts\n #chartsConainer\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event,chartsConainer)\" \n >\n</div>\n @if (openCard) {\n <lib-right-click-card [cardOptions]=\"contextMenuOptions\" (contextMenuClick)=\"onMenuClick($event)\" [cardPosition]=\"cardPosition\"></lib-right-click-card>\n }", styles: [".chart-container{width:100%;height:400px;position:relative}\n"] }]
1002
+ args: [{ selector: 'lib-doughnut-chart', imports: [NgxEchartsDirective, RightClickCard], providers: [provideEchartsCore({ echarts })], template: "<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n", styles: [".chart-container{width:100%;height:100%;position:relative}\n"] }]
821
1003
  }], ctorParameters: () => [{ type: Charts }], propDecorators: { config: [{
822
1004
  type: Input
823
1005
  }], theme: [{
@@ -1 +1 @@
1
- {"version":3,"file":"cats-charts.mjs","sources":["../../../projects/charts-lib/src/lib/service/charts.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.html","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.ts","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.html","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.ts","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.html","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.ts","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.html","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.ts","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.html","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.ts","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.html","../../../projects/charts-lib/src/lib/components/area-chart/area-chart.ts","../../../projects/charts-lib/src/lib/components/area-chart/area-chart.html","../../../projects/charts-lib/src/cats-charts.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts } from 'echarts/core';\nimport { DoughnutChartConfig, PieChartConfig } from '../modal/charts-modal';\n@Injectable({\n providedIn: 'root',\n})\nexport class Charts {\n legendSelected: Record<string, boolean> = {};\n buildGraphicLegend(total: number, config: any, chartInstance: any) {\n const pillHeight = 28;\n const spacing = 14;\n const indicatorWidth = 12;\n const horizontalPadding = 8;\n const gapAfterIndicator = 4;\n const font = '14px sans-serif';\n\n const isVertical = config.legendDirection === 'vertical';\n\n // 🔹 Initialize selected state once\n if (Object.keys(this.legendSelected).length === 0) {\n config.data.forEach((d: any) => {\n this.legendSelected[d.name] = true;\n });\n }\n\n // 🔹 Build pills\n const pills = config.data.map((item: any, index: number) => {\n const color =\n config.colors?.[index] ?? ['#3b82f6', '#f59e0b', '#16a34a', '#ef4444'][index % 4];\n const percentage = ((item.value / total) * 100).toFixed(1) + '%';\n const nameRect = echarts.format.getTextRect(item.name, font);\n const valueRect = echarts.format.getTextRect(String(item.value), font);\n\n const pillWidth =\n horizontalPadding +\n indicatorWidth +\n gapAfterIndicator +\n nameRect.width +\n 8 +\n valueRect.width +\n horizontalPadding;\n\n return { item, color, pillWidth, percentage };\n });\n\n const totalWidth = isVertical\n ? Math.max(...pills.map((p: any) => p.pillWidth))\n : pills.reduce((sum: any, p: any) => sum + p.pillWidth, 0) + spacing * (pills.length - 1);\n\n const totalHeight = isVertical\n ? pills.length * pillHeight + spacing * (pills.length - 1)\n : pillHeight;\n\n let currentOffset = 0;\n\n // 🔹 Position logic\n const positionConfig: any = {};\n switch (config.legendPosition) {\n case 'top':\n positionConfig.top = 20;\n break;\n case 'bottom':\n positionConfig.bottom = 20;\n break;\n case 'left':\n positionConfig.left = 20;\n break;\n case 'right':\n positionConfig.right = 20;\n break;\n }\n\n // ALIGNMENT (Cross-Axis)\n if (config.legendPosition === 'top' || config.legendPosition === 'bottom') {\n // Horizontal area → align horizontally\n if (config.legendAlign === 'center') {\n positionConfig.left = 'center';\n } else if (config.legendAlign === 'right') {\n positionConfig.right = 20;\n } else {\n positionConfig.left = 20;\n }\n } else {\n // Vertical area → align vertically\n if (config.legendAlign === 'center') {\n positionConfig.top = 'middle';\n } else if (config.legendAlign === 'right') {\n positionConfig.bottom = 20;\n } else {\n positionConfig.top = 20;\n }\n }\n\n return [\n {\n id: 'customLegend', // IMPORTANT\n type: 'group',\n ...positionConfig,\n width: totalWidth,\n height: totalHeight,\n\n children: pills.map((pill: any) => {\n const offset = currentOffset;\n currentOffset += (isVertical ? pillHeight : pill.pillWidth) + spacing;\n\n let isSelected = this.legendSelected[pill.item.name];\n return {\n type: 'group',\n top: isVertical ? offset : 0,\n left: isVertical ? 0 : offset,\n width: pill.pillWidth,\n height: pillHeight,\n cursor: 'pointer',\n onclick: (dt: any, v: any) => {\n // 🔹 Toggle selected state\n this.legendSelected[pill.item.name] = !this.legendSelected[pill.item.name];\n\n chartInstance?.dispatchAction({\n type: 'legendToggleSelect',\n name: pill.item.name,\n });\n chartInstance?.setOption({\n graphic: {\n id: 'customLegend',\n // $action: 'replace',\n ...this.buildGraphicLegend(total, config, chartInstance)[0],\n },\n });\n },\n children: [\n // 🔹 Pill Background\n\n {\n type: 'rect',\n shape: {\n width: pill.pillWidth,\n height: pillHeight,\n r: 4,\n },\n style: {\n fill: !isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',\n stroke: !isSelected ? pill.color : '#D1D1D6',\n // fill: this.hexToRgba(pill.color, 0.08),\n // stroke: pill.color,\n lineWidth: 1,\n },\n },\n\n // 🔹 Color Indicator\n {\n type: 'rect',\n shape: {\n width: indicatorWidth,\n height: indicatorWidth,\n r: 2,\n },\n left: horizontalPadding,\n top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // fill: pill.color,\n // },\n style: {\n fill: !isSelected ? pill.color : '#C7C7CC',\n },\n },\n\n // 🔹 Label\n {\n type: 'text',\n left: horizontalPadding + indicatorWidth + gapAfterIndicator,\n top: (pillHeight - indicatorWidth) / 2,\n style: {\n text: pill.item.name,\n fontSize: 14,\n // fill: '#1C1C1E',\n fill: !isSelected ? '#1C1C1E' : '#8E8E93',\n textVerticalAlign: 'middle',\n },\n },\n\n // 🔹 value text\n {\n type: 'text',\n left: pill.pillWidth - horizontalPadding - indicatorWidth - gapAfterIndicator,\n top: (pillHeight - indicatorWidth) / 2,\n style: {\n text: pill.item.value,\n fontSize: 14,\n fontWeight: 500,\n // fill: '#1C1C1E',\n fill: !isSelected ? '#1C1C1E' : '#8E8E93',\n textAlign: 'right',\n textVerticalAlign: 'middle',\n },\n },\n ],\n };\n }),\n },\n ];\n }\n buildCenterGraphic(config: any, total: number) {\n if (!config?.centerLabel?.show) return [];\n\n const centerConfig = config.centerLabel;\n\n // 🔹 Calculate selected total\n\n // 🔹 Safe total check\n const safeTotal = total === 0 ? 1 : total;\n\n // 🔹 Decide what value to show\n let displayValue = '';\n\n switch (centerConfig.type) {\n case 'value':\n displayValue = total.toString();\n break;\n\n case 'custom':\n if (typeof centerConfig.formatter === 'function') {\n displayValue = centerConfig.formatter(total, total, config.data);\n }\n break;\n\n case 'percentage':\n default:\n displayValue = ((total / safeTotal) * 100).toFixed(0) + '%';\n break;\n }\n\n return [\n {\n id: 'centerLabel',\n type: 'group',\n left: 'center',\n top: 'center',\n silent: true, // no mouse interaction\n children: [\n {\n type: 'text',\n top: -10,\n style: {\n text: centerConfig.title ?? '',\n fontSize: centerConfig.fontSizeTitle ?? 14,\n fill: centerConfig.titleColor ?? '#666',\n textAlign: 'center',\n },\n },\n {\n type: 'text',\n top: 12,\n style: {\n text: displayValue,\n fontSize: centerConfig.fontSizeValue ?? 22,\n fontWeight: 'bold',\n fill: centerConfig.valueColor ?? '#000',\n textAlign: 'center',\n },\n },\n ],\n },\n ];\n }\n hexToRgba(hex: string, alpha: number) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n pieTooltipFormatter(params: any, config: PieChartConfig | DoughnutChartConfig) {\n const color = params.color;\n const name = params.name;\n const value = params.value;\n const percent = params.percent;\n\n return `<div style=\"\n position: relative;\n background-color: #fff;\n padding: 8px 16px;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.08);\n display: flex;\n align-items: center;\n gap: 10px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n top: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n\n <span style=\"\n width: 14px;\n height: 14px;\n background: ${color};\n border-radius: 3px;\n display: inline-block;\n \"></span>\n\n <span style=\"\n font-size: 12px;\n color: #434A51;\n \">\n ${name}: <b style=\"color:#111; font-weight:600;\">${value}</b> ${config.showTooltipPercent ? '(' + percent + '%)' : ''}\n </span>\n </div>\n `;\n }\n}\n","\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n LineChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n]);\n\n@Component({\n selector: 'lib-line-chart',\n standalone: true,\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './line-chart.html',\n styleUrls: ['./line-chart.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinesChart {\n @Input() config!: LineChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n private chartInstance!: ECharts;\nconstructor(private chartService:Charts){}\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n this.chartOption = this.buildOption(this.config);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption(config: LineChartConfig): EChartsCoreOption {\n const total = config.series?.reduce((seriesSum, series) => {\n const dataSum = series.data?.reduce((sum, value) => sum + value, 0) || 0;\n return seriesSum + dataSum;\n }, 0);\n return {\n backgroundColor: config.backgroundColor || 'transparent',\n\n title: {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: 'center',\n },\n\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'axis',\n },\n\n legend: {\n show: false,\n },\n // graphic: this.chartService?.buildGraphicLegend(total, this.config, this.chartInstance),\n\n grid: {\n left: config.grid?.left ?? '3%',\n right: config.grid?.right ?? '4%',\n bottom: config.grid?.bottom ?? '3%',\n top: config.grid?.top ?? '10%',\n containLabel: true,\n },\n\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: config.xAxisData,\n },\n\n yAxis: {\n type: 'value',\n },\n\n series: config.series.map((s) => ({\n name: s.name,\n type: 'line',\n smooth: s.smooth ?? true,\n data: s.data,\n areaStyle: s.area ? {} : undefined,\n color: s.color,\n })),\n };\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","\n<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\">\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\n\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { BarChart as EBarChart } from 'echarts/charts';\n\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\n\necharts.use([\n EBarChart,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-bar-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n})\nexport class BarChart {\n @Input() options!: EChartsCoreOption;\n @Input() events: string[] = [];\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Input() theme: any;\n private chartInstance!: ECharts;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && !changes['theme'].firstChange) {\n // Dispose and let ngx-echarts recreate chart with new theme\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n if (this.chartInstance && this.options) {\n this.chartInstance.setOption(this.options, true);\n }\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"options\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\">\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-right-click-card',\n imports: [],\n templateUrl: './right-click-card.html',\n styleUrl: './right-click-card.scss',\n})\nexport class RightClickCard {\n @Input() cardPosition: any;\n @Input() cardOptions: any;\n @Output() contextMenuClick = new EventEmitter<any>();\n \n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n // this.closeMenu();\n }\n}\n"," <div\n class=\"context-card\"\n [style.left.px]=\"cardPosition.x\"\n [style.top.px]=\"cardPosition.y\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (item of cardOptions; track item.value) {\n <div class=\"context-item\" (click)=\"onMenuClick(item)\">\n \n @if (item.icon) {\n <!-- <img src=\"assets/images/infoIcon.svg\" alt=\"\"> -->\n }\n\n <span>{{ item.label }}</span>\n </div>\n }\n </div>","import { Component, Input, Output, EventEmitter, SimpleChanges, HostListener } from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { PieChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-pie-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n})\nexport class PieChart {\n /* -------------------- Inputs -------------------- */\n\n @Input() config!: PieChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() cardOptions: any[] = [];\n\n /* -------------------- Outputs -------------------- */\n\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() cardOptionClick = new EventEmitter<any>();\n\n /* -------------------- Local State -------------------- */\n\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n private chartsContainer!: HTMLElement;\n\n openCard = false;\n cardPosition = { x: 0, y: 0 };\n\n constructor(private chartService: Charts) {}\n\n /* -------------------- Lifecycle -------------------- */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n\n /* -------------------- Chart Init -------------------- */\n\n onChartInit(ec: ECharts, container: HTMLElement) {\n this.chartInstance = ec;\n this.chartsContainer = container;\n this.buildOption();\n this.bindEvents();\n }\n\n /* -------------------- Build Option -------------------- */\n\n private buildOption(): void {\n const total = this.config.data.reduce((sum, item) => sum + item.value, 0);\n\n this.chartOption = {\n backgroundColor: this.config.backgroundColor ?? 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition ?? 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: '#fff', // remove default box\n borderWidth: 0,\n padding: 0,\n extraCssText: 'box-shadow:none;',\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n\n graphic: this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),\n\n series: [\n {\n type: 'pie',\n radius: this.config.radius ?? '60%',\n center: this.config.center ?? ['50%', '50%'],\n data: this.config.data,\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n formatter: (params: any) => {\n const percent = ((params.value / total) * 100).toFixed(1);\n\n let text = params.name;\n if (this.config.showLabelValue) text += `\\n${params.value}`;\n if (this.config.showLabelPercentage) text += `\\n${percent}%`;\n\n return text;\n },\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 0,\n borderColor: this.config.borderColor ?? '#fff',\n borderWidth: this.config.borderWidth ?? 0,\n },\n\n emphasis:\n (this.config.enableHoverEffect ?? true)\n ? {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n },\n }\n : undefined,\n },\n ],\n };\n }\n\n /* -------------------- Events -------------------- */\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu') {\n params.event?.event?.preventDefault();\n\n const rect = this.chartsContainer.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event.event.clientX - rect.left,\n y: params.event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n }\n\n this.chartEvent.emit({ type: eventName, data: params });\n });\n });\n }\n\n onMenuClick(item: any) {\n this.cardOptionClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n}\n","<div\n #chartsContainer\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event, chartsContainer)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\">\n </lib-right-click-card>\n}","import { Component, Input, Output, EventEmitter, SimpleChanges, HostListener } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport {\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GraphicComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { DoughnutChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n EPieChart,\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GraphicComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-doughnut-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './doughnut-chart.html',\n styleUrl: './doughnut-chart.scss',\n})\nexport class DoughnutChart {\n @Input() config!: DoughnutChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n chartsContainer: any;\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n constructor(private chartService: Charts) {}\n /* ------------------ CONFIG CHANGE ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n // Rebuild option when config changes\n this.buildOption();\n }\n // card open on right click\n /**\n * @description Determines whether menu click on\n * @author Shiva Kant\n * @param item\n */\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n\n /**\n * @description Hosts listener\n * @author Shiva Kant\n */\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n /* ------------------ OPTION BUILDER ------------------ */\n /**\n * @description Builds option\n * @author Shiva Kant\n * @param config\n * @returns option\n */\n buildOption() {\n const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);\n\n const innerRadius = this.config.innerRadius ?? '70%';\n const outerRadius = this.config.outerRadius ?? '90%';\n\n this.chartOption = {\n backgroundColor: this.config.backgroundColor || 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: '#fff', // remove default box\n borderWidth: 0,\n padding: 0,\n extraCssText: 'box-shadow:none;',\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n // graphic: this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),\n graphic: [\n ...this.chartService.buildGraphicLegend(total, this.config, this.chartInstance),\n ...this.chartService.buildCenterGraphic(this.config, total),\n ],\n series: [\n {\n type: 'pie',\n radius: [innerRadius, outerRadius],\n center: this.config.center ?? ['50%', '50%'],\n data: this.config.data,\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 8,\n borderColor: this.config.borderColor || '#fff',\n borderWidth: this.config.borderWidth ?? 2,\n },\n },\n ],\n };\n }\n\n /* ------------------ INIT ------------------ */\n /**\n * @description Determines whether chart init on\n * @author Shiva Kant\n * @param ec\n * @param [container]\n */\n onChartInit(ec: ECharts, container?: HTMLElement) {\n this.chartInstance = ec;\n this.chartsContainer = container;\n this.buildOption();\n this.bindEvents();\n }\n\n /* ------------------ EVENTS ------------------ */\n /**\n * @description Binds events\n * @author Shiva Kant\n * @returns\n */\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n // Prevent browser context menu\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n if (eventName === 'contextmenu') {\n const rect = this.chartsContainer.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event?.event.clientX - rect.left,\n y: params.event?.event.clientY - rect.top,\n };\n\n this.openCard = true;\n }\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","<div\n echarts\n #chartsConainer\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event,chartsConainer)\" \n >\n</div>\n @if (openCard) {\n <lib-right-click-card [cardOptions]=\"contextMenuOptions\" (contextMenuClick)=\"onMenuClick($event)\" [cardPosition]=\"cardPosition\"></lib-right-click-card>\n }","import { Component, Input } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChartsCoreOption } from 'echarts/core';\nimport { SimpleChanges } from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-stacked-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './stacked-area-chart.html',\n styleUrl: './stacked-area-chart.scss',\n})\nexport class StackedAreaChart {\n @Input() data: any;\n @Input() title: string = 'Protocol Traffic Overview';\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data']) {\n this.buildChart();\n }\n }\n\n buildChart() {\n this.chartOption = {\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n data: this.data.series.map((s: any) => s.name),\n top: 10,\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.data.time,\n },\n yAxis: {\n type: 'value',\n },\n series: this.data.series.map((s: any) => ({\n name: s.name,\n type: 'line',\n smooth: true,\n data: s.values,\n areaStyle: {\n opacity: 0.15,\n },\n })),\n };\n }\n}\n","<div\n echarts\n class=\"chart-container\"\n [options]=\"chartOption\"\n ></div>","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ECharts, EChartsCoreOption } from 'echarts';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { TooltipComponent, GridComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChart } from 'echarts/charts';\nimport { AreaChartConfig } from '../../modal/charts-modal';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n\n@Component({\n selector: 'lib-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './area-chart.html',\n styleUrl: './area-chart.scss',\n})\nexport class AreaChart {\n @Input() config!: AreaChartConfig;\n @Input() theme: any;\n\n private chartInstance!: ECharts;\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && !changes['theme'].firstChange) {\n // Dispose and let ngx-echarts recreate chart with new theme\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n if (this.config) {\n this.buildOption();\n }\n }\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n }\n buildOption() {\n this.chartOption = {\n backgroundColor: this.config.backgroundColor || 'transparent',\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'axis',\n },\n legned:\ntrue,\n grid: {\n left: this.config.grid?.left ?? 20,\n right: this.config.grid?.right ?? 20,\n top: this.config.grid?.top ?? 20,\n bottom: this.config.grid?.bottom ?? 20,\n containLabel: true,\n },\n\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.config.xAxisData,\n show: this.config.showXAxis ?? true,\n axisLine: { show: this.config.showXAxisLine ?? true },\n axisTick: { show: this.config.showXAxisTick ?? true },\n axisLabel: { show: this.config.showXAxisLabel ?? true },\n },\n\n yAxis: {\n type: 'value',\n show: this.config.showYAxis ?? true,\n axisLine: { show: this.config.showYAxisLine ?? true },\n axisTick: { show: this.config.showYAxisTick ?? true },\n axisLabel: { show: this.config.showYAxisLabel ?? true },\n splitLine: { show: this.config.showGridLines ?? true },\n },\n\n series: [\n {\n type: 'line',\n data: this.config.seriesData,\n smooth: this.config.smooth ?? true,\n showSymbol: this.config.showSymbol ?? false,\n\n lineStyle: {\n width: this.config.lineWidth ?? 2,\n color: this.config.lineColor || '#16a34a',\n },\n\n itemStyle: {\n color: this.config.lineColor || '#16a34a',\n },\n\n areaStyle: {\n color: this.config.areaColor || 'rgba(22,163,74,0.25)',\n },\n },\n ],\n };\n }\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n \n class=\"chart-container\"\n>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Charts","EBarChart","EPieChart"],"mappings":"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"}
1
+ {"version":3,"file":"cats-charts.mjs","sources":["../../../projects/charts-lib/src/lib/service/charts.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.ts","../../../projects/charts-lib/src/lib/components/line-chart/line-chart.html","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.ts","../../../projects/charts-lib/src/lib/components/bar-chart/bar-chart.html","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.ts","../../../projects/charts-lib/src/lib/components/right-click-card/right-click-card.html","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.ts","../../../projects/charts-lib/src/lib/components/pie-chart/pie-chart.html","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.ts","../../../projects/charts-lib/src/lib/components/doughnut-chart/doughnut-chart.html","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.ts","../../../projects/charts-lib/src/lib/components/stacked-area-chart/stacked-area-chart.html","../../../projects/charts-lib/src/lib/components/area-chart/area-chart.ts","../../../projects/charts-lib/src/lib/components/area-chart/area-chart.html","../../../projects/charts-lib/src/cats-charts.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts } from 'echarts/core';\nimport { DoughnutChartConfig, PieChartConfig } from '../modal/charts-modal';\n@Injectable({\n providedIn: 'root',\n})\nexport class Charts {\n legendSelected: Record<string, boolean> = {};\n // buildGraphicLegend(total: number, config: any, chartInstance: any) {\n // const pillHeight = 28;\n // const spacing = 14;\n // const indicatorWidth = 12;\n // const horizontalPadding = 8;\n // const gapAfterIndicator = 4;\n // const font = '14px sans-serif';\n\n // const isVertical = config.legendDirection === 'vertical';\n\n // // 🔹 Initialize selected state once\n // // if (Object.keys(this.legendSelected).length === 0) {\n // // config.data.forEach((d: any) => {\n // // this.legendSelected[d.name] = true;\n // // });\n // // }\n\n // // 🔹 Build pills\n // const pills = config.data.map((item: any, index: number) => {\n // const color =\n // config.colors?.[index] ?? ['#3b82f6', '#f59e0b', '#16a34a', '#ef4444'][index % 4];\n // const percentage = ((item.value / total) * 100).toFixed(1) + '%';\n // const nameRect = echarts.format.getTextRect(item.name, font);\n // const valueRect = echarts.format.getTextRect(String(item.value), font);\n\n // const pillWidth =\n // horizontalPadding +\n // indicatorWidth +\n // gapAfterIndicator +\n // nameRect.width +\n // 8 +\n // valueRect.width +\n // horizontalPadding;\n\n // return { item, color, pillWidth, percentage };\n // });\n\n // const totalWidth = isVertical\n // ? Math.max(...pills.map((p: any) => p.pillWidth))\n // : pills.reduce((sum: any, p: any) => sum + p.pillWidth, 0) + spacing * (pills.length - 1);\n\n // const totalHeight = isVertical\n // ? pills.length * pillHeight + spacing * (pills.length - 1)\n // : pillHeight;\n\n // let currentOffset = 0;\n\n // // 🔹 Position logic\n // const positionConfig: any = {};\n // switch (config.legendPosition) {\n // case 'top':\n // positionConfig.top = 20;\n // break;\n // case 'bottom':\n // positionConfig.bottom = 20;\n // break;\n // case 'left':\n // positionConfig.left = 20;\n // break;\n // case 'right':\n // positionConfig.right = 20;\n // break;\n // }\n\n // // ALIGNMENT (Cross-Axis)\n // if (config.legendPosition === 'top' || config.legendPosition === 'bottom') {\n // // Horizontal area → align horizontally\n // if (config.legendAlign === 'center') {\n // positionConfig.left = 'center';\n // } else if (config.legendAlign === 'right') {\n // positionConfig.right = 20;\n // } else {\n // positionConfig.left = 20;\n // }\n // } else {\n // // Vertical area → align vertically\n // if (config.legendAlign === 'center') {\n // positionConfig.top = 'middle';\n // } else if (config.legendAlign === 'right') {\n // positionConfig.bottom = 20;\n // } else {\n // positionConfig.top = 20;\n // }\n // }\n // return [\n // {\n // id: 'customLegend', // IMPORTANT\n // type: 'group',\n // ...positionConfig,\n // width: totalWidth,\n // height: totalHeight,\n\n // children: pills.map((pill: any) => {\n // const offset = currentOffset;\n // currentOffset += (isVertical ? pillHeight : pill.pillWidth) + spacing;\n\n // let isSelected = this.legendSelected[pill.item.name];\n // return {\n // type: 'group',\n // top: isVertical ? offset : 0,\n // left: isVertical ? 0 : offset,\n // width: pill.pillWidth,\n // height: pillHeight,\n // cursor: 'pointer',\n // // onclick: () => {\n // // // 🔹 Toggle selected state\n // // this.legendSelected[pill.item.name] = !this.legendSelected[pill.item.name];\n\n // // chartInstance?.dispatchAction({\n // // type: 'legendToggleSelect',\n // // name: pill.item.name,\n // // });\n // // chartInstance?.setOption({\n // // graphic: {\n // // id: 'customLegend',\n // // // $action: 'replace',\n // // ...this.buildGraphicLegend(total, config, chartInstance)[0],\n // // },\n // // });\n // // },\n // onclick: () => {\n // chartInstance.dispatchAction({\n // type: 'legendToggleSelect',\n // name: pill.item.name,\n // });\n\n // // 🔥 Read fresh selected state from chart\n // const selectedMap = chartInstance.getOption()?.legend?.[0]?.selected || {};\n\n // this.legendSelected = { ...selectedMap };\n\n // chartInstance.setOption({\n // graphic: {\n // id: 'customLegend',\n // $action: 'replace',\n // ...this.buildGraphicLegend(total, config, chartInstance),\n // },\n // });\n // },\n // children: [\n // // 🔹 Pill Background\n\n // {\n // type: 'rect',\n // shape: {\n // width: pill.pillWidth,\n // height: pillHeight,\n // r: 4,\n // },\n // style: {\n // fill: !isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',\n // stroke: !isSelected ? pill.color : '#D1D1D6',\n // // fill: this.hexToRgba(pill.color, 0.08),\n // // stroke: pill.color,\n // lineWidth: 1,\n // },\n // },\n\n // // 🔹 Color Indicator\n // {\n // type: 'rect',\n // shape: {\n // width: indicatorWidth,\n // height: indicatorWidth,\n // r: 2,\n // },\n // left: horizontalPadding,\n // top: (pillHeight - indicatorWidth) / 2,\n // // style: {\n // // fill: pill.color,\n // // },\n // style: {\n // fill: !isSelected ? pill.color : '#C7C7CC',\n // },\n // },\n\n // // 🔹 Label\n // {\n // type: 'text',\n // left: horizontalPadding + indicatorWidth + gapAfterIndicator,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text: pill.item.name,\n // fontSize: 14,\n // // fill: '#1C1C1E',\n // fill: !isSelected ? '#1C1C1E' : '#8E8E93',\n // textVerticalAlign: 'middle',\n // },\n // },\n\n // // 🔹 value text\n // {\n // type: 'text',\n // left: pill.pillWidth - horizontalPadding - indicatorWidth - gapAfterIndicator,\n // top: (pillHeight - indicatorWidth) / 2,\n // style: {\n // text: pill.item.value,\n // fontSize: 14,\n // fontWeight: 500,\n // // fill: '#1C1C1E',\n // fill: !isSelected ? '#1C1C1E' : '#8E8E93',\n // textAlign: 'right',\n // textVerticalAlign: 'middle',\n // },\n // },\n // ],\n // };\n // }),\n // },\n // ];\n // }\n buildGraphicLegend(total: number, config: any, chartInstance: any) {\n const pillHeight = 28;\n const spacing = 14;\n const indicatorWidth = 12;\n const horizontalPadding = 8;\n const gapAfterIndicator = 4;\n const font = '14px sans-serif';\n\n const isVertical = config.legendDirection === 'vertical';\n\n // 🔹 Initialize selected state once\n const selectedMap = chartInstance?.getOption()?.legend?.[0]?.selected || {};\n\n const pills = config.data.map((item: any, index: number) => {\n const color =\n config.colors?.[index] ?? ['#3b82f6', '#f59e0b', '#16a34a', '#ef4444'][index % 4];\n\n const nameRect = echarts.format.getTextRect(item.name, font);\n const valueRect = echarts.format.getTextRect(String(item.value), font);\n\n const pillWidth =\n horizontalPadding +\n indicatorWidth +\n gapAfterIndicator +\n nameRect.width +\n 8 +\n valueRect.width +\n horizontalPadding;\n\n return { item, color, pillWidth };\n });\n\n const totalWidth = isVertical\n ? Math.max(...pills.map((p: any) => p.pillWidth))\n : pills.reduce((sum: any, p: any) => sum + p.pillWidth, 0) + spacing * (pills.length - 1);\n\n const totalHeight = isVertical\n ? pills.length * pillHeight + spacing * (pills.length - 1)\n : pillHeight;\n\n let currentOffset = 0;\n\n // 🔹 Position logic\n const positionConfig: any = {};\n switch (config.legendPosition) {\n case 'top':\n positionConfig.top = 20;\n break;\n case 'bottom':\n positionConfig.bottom = 20;\n break;\n case 'left':\n positionConfig.left = 20;\n break;\n case 'right':\n positionConfig.right = 20;\n break;\n }\n\n // ALIGNMENT (Cross-Axis)\n if (config.legendPosition === 'top' || config.legendPosition === 'bottom') {\n // Horizontal area → align horizontally\n if (config.legendAlign === 'center') {\n positionConfig.left = 'center';\n } else if (config.legendAlign === 'right') {\n positionConfig.right = 20;\n } else {\n positionConfig.left = 20;\n }\n } else {\n // Vertical area → align vertically\n if (config.legendAlign === 'center') {\n positionConfig.top = 'middle';\n } else if (config.legendAlign === 'right') {\n positionConfig.bottom = 20;\n } else {\n positionConfig.top = 20;\n }\n }\n\n return [\n {\n id: 'customLegend', // IMPORTANT\n type: 'group',\n ...positionConfig,\n width: totalWidth,\n height: totalHeight,\n\n children: pills.map((pill: any) => {\n const offset = currentOffset;\n currentOffset += (isVertical ? pillHeight : pill.pillWidth) + spacing;\n\n const isSelected = selectedMap[pill.item.name] !== false;\n\n return {\n type: 'group',\n top: isVertical ? offset : 0,\n left: isVertical ? 0 : offset,\n width: pill.pillWidth,\n height: pillHeight,\n cursor: 'pointer',\n\n onclick: () => {\n chartInstance.dispatchAction({\n type: 'legendToggleSelect',\n name: pill.item.name,\n });\n chartInstance.setOption({\n graphic: {\n id: 'customLegend',\n // $action: 'replace',\n ...this.buildGraphicLegend(total, config, chartInstance)[0],\n },\n });\n },\n children: [\n // 🔹 Pill Background\n\n {\n type: 'rect',\n shape: {\n width: pill.pillWidth,\n height: pillHeight,\n r: 4,\n },\n style: {\n fill: isSelected ? this.hexToRgba(pill.color, 0.08) : '#F2F2F7',\n stroke: isSelected ? pill.color : '#D1D1D6',\n lineWidth: 1,\n },\n },\n\n // 🔹 Color Indicator\n {\n type: 'rect',\n shape: {\n width: indicatorWidth,\n height: indicatorWidth,\n r: 2,\n },\n left: horizontalPadding,\n top: (pillHeight - indicatorWidth) / 2,\n style: {\n fill: isSelected ? pill.color : '#C7C7CC',\n },\n },\n\n // 🔹 Label\n {\n type: 'text',\n left: horizontalPadding + indicatorWidth + gapAfterIndicator,\n top: (pillHeight - indicatorWidth) / 2,\n style: {\n text: pill.item.name,\n fontSize: 14,\n fill: isSelected ? '#1C1C1E' : '#8E8E93',\n textVerticalAlign: 'middle',\n },\n },\n\n // 🔹 value text\n {\n type: 'text',\n left: pill.pillWidth - horizontalPadding - indicatorWidth - gapAfterIndicator,\n top: (pillHeight - indicatorWidth) / 2,\n style: {\n text: pill.item.value,\n fontSize: 14,\n fontWeight: 500,\n fill: isSelected ? '#1C1C1E' : '#8E8E93',\n textAlign: 'right',\n textVerticalAlign: 'middle',\n },\n },\n ],\n };\n }),\n },\n ];\n }\n buildCenterGraphic(config: any, total: number) {\n if (!config?.centerLabel?.show) return [];\n\n const centerConfig = config.centerLabel;\n\n // 🔹 Calculate selected total\n\n // 🔹 Safe total check\n const safeTotal = total === 0 ? 1 : total;\n\n // 🔹 Decide what value to show\n let displayValue = '';\n\n switch (centerConfig.type) {\n case 'value':\n displayValue = total.toString();\n break;\n\n case 'custom':\n if (typeof centerConfig.formatter === 'function') {\n displayValue = centerConfig.formatter(total, total, config.data);\n }\n break;\n\n case 'percentage':\n default:\n displayValue = ((total / safeTotal) * 100).toFixed(0) + '%';\n break;\n }\n\n return [\n {\n id: 'centerLabel',\n type: 'group',\n left: 'center',\n top: 'center',\n silent: true, // no mouse interaction\n children: [\n {\n type: 'text',\n top: -10,\n style: {\n text: centerConfig.title ?? '',\n fontSize: centerConfig.fontSizeTitle ?? 14,\n fill: centerConfig.titleColor ?? '#666',\n textAlign: 'center',\n },\n },\n {\n type: 'text',\n top: 12,\n style: {\n text: displayValue,\n fontSize: centerConfig.fontSizeValue ?? 22,\n fontWeight: 'bold',\n fill: centerConfig.valueColor ?? '#000',\n textAlign: 'center',\n },\n },\n ],\n },\n ];\n }\n hexToRgba(hex: string, alpha: number) {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n }\n pieTooltipFormatter(params: any, config: PieChartConfig | DoughnutChartConfig) {\n const color = params.color;\n const name = params.name;\n const value = params.value;\n const percent = params.percent;\n\n return `<div style=\"\n position: relative;\n background-color: #fff;\n padding: 8px 16px;\n border-radius: 8px;\n box-shadow: 0 4px 16px rgba(0,0,0,0.08);\n display: flex;\n align-items: center;\n gap: 10px;\n \">\n <div style=\"\n position: absolute;\n left: -10px;\n top: 10px;\n width: 0;\n height: 0;\n border-top: 10px solid transparent;\n border-bottom: 10px solid transparent;\n border-right: 10px solid #ffffff;\n \"></div>\n\n <span style=\"\n width: 14px;\n height: 14px;\n background: ${color};\n border-radius: 3px;\n display: inline-block;\n \"></span>\n\n <span style=\"\n font-size: 12px;\n color: #434A51;\n \">\n ${name}: <b style=\"color:#111; font-weight:600;\">${value}</b> ${config.showTooltipPercent ? '(' + percent + '%)' : ''}\n </span>\n </div>\n `;\n }\n}\n","\nimport {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ChangeDetectionStrategy,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\n\nimport { LineChart } from 'echarts/charts';\nimport {\n GridComponent,\n TooltipComponent,\n LegendComponent,\n TitleComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n LineChart,\n GridComponent,\n TooltipComponent,\n LegendComponent,\n CanvasRenderer,\n TitleComponent,\n]);\n\n@Component({\n selector: 'lib-line-chart',\n standalone: true,\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './line-chart.html',\n styleUrls: ['./line-chart.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinesChart {\n @Input() config!: LineChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n\n chartOption: EChartsCoreOption = {};\n private chartInstance!: ECharts;\nconstructor(private chartService:Charts){}\n /* ------------------ CHANGE HANDLING ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n this.chartOption = this.buildOption(this.config);\n\n if (this.chartInstance) {\n this.chartInstance.setOption(this.chartOption, true);\n }\n }\n\n /* ------------------ OPTION BUILDER ------------------ */\n private buildOption(config: LineChartConfig): EChartsCoreOption {\n const total = config.series?.reduce((seriesSum, series) => {\n const dataSum = series.data?.reduce((sum, value) => sum + value, 0) || 0;\n return seriesSum + dataSum;\n }, 0);\n return {\n backgroundColor: config.backgroundColor || 'transparent',\n\n title: {\n show: config.showTitle ?? !!config.title,\n text: config.title,\n left: 'center',\n },\n\n tooltip: {\n show: config.showTooltip ?? true,\n trigger: 'axis',\n },\n\n legend: {\n show: false,\n },\n // graphic: this.chartService?.buildGraphicLegend(total, this.config, this.chartInstance),\n\n grid: {\n left: config.grid?.left ?? '3%',\n right: config.grid?.right ?? '4%',\n bottom: config.grid?.bottom ?? '3%',\n top: config.grid?.top ?? '10%',\n containLabel: true,\n },\n\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: config.xAxisData,\n },\n\n yAxis: {\n type: 'value',\n },\n\n series: config.series.map((s) => ({\n name: s.name,\n type: 'line',\n smooth: s.smooth ?? true,\n data: s.data,\n areaStyle: s.area ? {} : undefined,\n color: s.color,\n })),\n };\n }\n\n /* ------------------ INIT ------------------ */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n /* ------------------ EVENTS ------------------ */\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","\n<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n (chartInit)=\"onChartInit($event)\"\n class=\"chart-container\">\n</div>\n","import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n} from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\n\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { BarChart as EBarChart } from 'echarts/charts';\n\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n} from 'echarts/components';\n\nimport { CanvasRenderer } from 'echarts/renderers';\n\necharts.use([\n EBarChart,\n TitleComponent,\n TooltipComponent,\n GridComponent,\n LegendComponent,\n DatasetComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-bar-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './bar-chart.html',\n styleUrl: './bar-chart.scss',\n})\nexport class BarChart {\n @Input() options!: EChartsCoreOption;\n @Input() events: string[] = [];\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n @Input() theme: any;\n private chartInstance!: ECharts;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && !changes['theme'].firstChange) {\n // Dispose and let ngx-echarts recreate chart with new theme\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n if (this.chartInstance && this.options) {\n this.chartInstance.setOption(this.options, true);\n }\n }\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.bindEvents();\n }\n\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"options\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\">\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'lib-right-click-card',\n imports: [],\n templateUrl: './right-click-card.html',\n styleUrl: './right-click-card.scss',\n})\nexport class RightClickCard {\n @Input() cardPosition: any;\n @Input() cardOptions: any;\n @Output() contextMenuClick = new EventEmitter<any>();\n \n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n // this.closeMenu();\n }\n}\n"," <div\n class=\"context-card\"\n [style.left.px]=\"cardPosition.x\"\n [style.top.px]=\"cardPosition.y\"\n (click)=\"$event.stopPropagation()\"\n >\n @for (item of cardOptions; track item.value) {\n <div class=\"context-item\" (click)=\"onMenuClick(item)\">\n \n @if (item.icon) {\n <!-- <img src=\"assets/images/infoIcon.svg\" alt=\"\"> -->\n }\n\n <span>{{ item.label }}</span>\n </div>\n }\n </div>","import { Component, Input, Output, EventEmitter, SimpleChanges, HostListener } from '@angular/core';\n\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport { TitleComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { PieChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([EPieChart, TitleComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-pie-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './pie-chart.html',\n styleUrl: './pie-chart.scss',\n})\nexport class PieChart {\n /* -------------------- Inputs -------------------- */\n\n @Input() config!: PieChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() cardOptions: any[] = [];\n\n /* -------------------- Outputs -------------------- */\n\n @Output() chartEvent = new EventEmitter<{ type: string; data: any }>();\n @Output() cardOptionClick = new EventEmitter<any>();\n\n /* -------------------- Local State -------------------- */\n\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n\n openCard = false;\n cardPosition = { x: 0, y: 0 };\n\n constructor(private chartService: Charts) {}\n\n /* -------------------- Lifecycle -------------------- */\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n\n this.buildOption();\n }\n\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n\n /* -------------------- Chart Init -------------------- */\n\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n /* -------------------- Build Option -------------------- */\n\n private buildOption(): void {\n const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);\n\n this.chartOption = {\n backgroundColor: this.config.backgroundColor ?? 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition ?? 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n\n graphic:\n this.chartInstance && !this.config.hideLegend\n ? this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)\n : undefined,\n\n series: [\n {\n type: 'pie',\n radius: this.config.radius ?? '60%',\n center: this.config.center ?? ['50%', '50%'],\n data: this.config.data,\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n formatter: (params: any) => {\n const percent = ((params.value / total) * 100).toFixed(1);\n\n let text = params.name;\n if (this.config.showLabelValue) text += `\\n${params.value}`;\n if (this.config.showLabelPercentage) text += `\\n${percent}%`;\n\n return text;\n },\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 0,\n borderColor: this.config.borderColor ?? '#fff',\n borderWidth: this.config.borderWidth ?? 0,\n },\n\n emphasis:\n (this.config.enableHoverEffect ?? true)\n ? {\n itemStyle: {\n shadowBlur: 10,\n shadowOffsetX: 0,\n },\n }\n : undefined,\n },\n ],\n };\n }\n\n /* -------------------- Events -------------------- */\n\n private bindEvents(): void {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n if (eventName === 'contextmenu') {\n params.event?.event?.preventDefault();\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event.event.clientX - rect.left,\n y: params.event.event.clientY - rect.top,\n };\n\n this.openCard = true;\n }\n\n this.chartEvent.emit({ type: eventName, data: params });\n });\n });\n }\n\n onMenuClick(item: any) {\n this.cardOptionClick.emit(item);\n this.closeCard();\n }\n\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"cardOptions\"\n [cardPosition]=\"cardPosition\"\n (contextMenuClick)=\"onMenuClick($event)\"\n >\n </lib-right-click-card>\n}\n","import { Component, Input, Output, EventEmitter, SimpleChanges, HostListener } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { ECharts, EChartsCoreOption } from 'echarts/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport { PieChart as EPieChart } from 'echarts/charts';\nimport {\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GraphicComponent,\n} from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { RightClickCard } from '../right-click-card';\nimport { DoughnutChartConfig } from '../../modal/charts-modal';\nimport { Charts } from '../../service/charts';\n\necharts.use([\n EPieChart,\n TitleComponent,\n TooltipComponent,\n LegendComponent,\n GraphicComponent,\n CanvasRenderer,\n]);\n\n@Component({\n selector: 'lib-doughnut-chart',\n imports: [NgxEchartsDirective, RightClickCard],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './doughnut-chart.html',\n styleUrl: './doughnut-chart.scss',\n})\nexport class DoughnutChart {\n @Input() config!: DoughnutChartConfig;\n @Input() theme: any;\n @Input() events: string[] = [];\n @Input() contextMenuOptions: any[] = [];\n @Input() showContextMenu: boolean = false;\n\n @Output() contextMenuClick = new EventEmitter<any>();\n @Output() chartEvent = new EventEmitter<{\n type: string;\n data: any;\n }>();\n cardPosition = { x: 0, y: 0 };\n openCard: boolean = false;\n chartOption!: EChartsCoreOption;\n private chartInstance!: ECharts;\n constructor(private chartService: Charts) {}\n /* ------------------ CONFIG CHANGE ------------------ */\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.config) return;\n // If theme changes → dispose instance\n if (changes['theme'] && this.chartInstance) {\n this.chartInstance.dispose();\n }\n // Rebuild option when config changes\n this.buildOption();\n }\n // card open on right click\n /**\n * @description Determines whether menu click on\n * @author Shiva Kant\n * @param item\n */\n onMenuClick(item: any) {\n this.contextMenuClick.emit(item);\n\n this.closeCard();\n }\n\n /**\n * @description Hosts listener\n * @author Shiva Kant\n */\n @HostListener('document:click')\n closeCard() {\n this.openCard = false;\n }\n /* ------------------ OPTION BUILDER ------------------ */\n /**\n * @description Builds option\n * @author Shiva Kant\n * @param config\n * @returns option\n */\n buildOption() {\n const total = this.config.data?.reduce((sum, item) => sum + item.value, 0);\n\n const innerRadius = this.config.innerRadius ?? '70%';\n const outerRadius = this.config.outerRadius ?? '90%';\n\n this.chartOption = {\n backgroundColor: this.config.backgroundColor || 'transparent',\n\n title: {\n show: this.config.showTitle ?? !!this.config.title,\n text: this.config.title,\n left: this.config.titlePosition || 'center',\n },\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'item',\n backgroundColor: 'transparent', // remove default box\n borderWidth: 0,\n padding: 0,\n confine: true,\n formatter: (params: any) =>\n this.config.tooltipFormatter\n ? this.config.tooltipFormatter(params, this.config)\n : this.chartService.pieTooltipFormatter(params, this.config),\n },\n\n legend: { show: false },\n graphic: this.chartInstance\n ? [\n ...(this.config.hideLegend\n ? []\n : this.chartService.buildGraphicLegend(total, this.config, this.chartInstance)),\n ...this.chartService.buildCenterGraphic(this.config, total),\n ]\n : undefined,\n series: [\n {\n type: 'pie',\n radius: [innerRadius, outerRadius],\n center: this.config.center ?? ['50%', '50%'],\n data: this.config.data,\n color: this.config.colors,\n\n label: {\n show: this.config.showLabel ?? false,\n position: this.config.labelPosition ?? 'outside',\n },\n\n itemStyle: {\n borderRadius: this.config.borderRadius ?? 8,\n borderColor: this.config.borderColor || '#fff',\n borderWidth: this.config.borderWidth ?? 2,\n },\n emphasis: {\n scale: this.config.emphasisScale,\n },\n },\n ],\n };\n }\n\n /* ------------------ INIT ------------------ */\n /**\n * @description Determines whether chart init on\n * @author Shiva Kant\n * @param ec\n * @param [container]\n */\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n this.buildOption();\n this.bindEvents();\n }\n\n /* ------------------ EVENTS ------------------ */\n /**\n * @description Binds events\n * @author Shiva Kant\n * @returns\n */\n private bindEvents() {\n if (!this.chartInstance) return;\n\n this.chartInstance.off();\n\n this.events.forEach((eventName) => {\n this.chartInstance.on(eventName, (params: any) => {\n // Prevent browser context menu\n if (eventName === 'contextmenu' && params.event?.event) {\n params.event.event.preventDefault();\n if (eventName === 'contextmenu') {\n const container = this.chartInstance.getDom();\n const rect = container.getBoundingClientRect();\n\n this.cardPosition = {\n x: params.event?.event.clientX - rect.left,\n y: params.event?.event.clientY - rect.top,\n };\n\n this.openCard = true;\n }\n }\n\n this.chartEvent.emit({\n type: eventName,\n data: params,\n });\n });\n });\n }\n\n /* ------------------ DESTROY ------------------ */\n ngOnDestroy(): void {\n this.chartInstance?.dispose();\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n class=\"chart-container\"\n (chartInit)=\"onChartInit($event)\"\n></div>\n@if (openCard) {\n <lib-right-click-card\n [cardOptions]=\"contextMenuOptions\"\n (contextMenuClick)=\"onMenuClick($event)\"\n [cardPosition]=\"cardPosition\"\n ></lib-right-click-card>\n}\n","import { Component, Input } from '@angular/core';\nimport * as echarts from 'echarts/core';\nimport { LineChart } from 'echarts/charts';\nimport { GridComponent, TooltipComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { EChartsCoreOption } from 'echarts/core';\nimport { SimpleChanges } from '@angular/core';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n@Component({\n selector: 'lib-stacked-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './stacked-area-chart.html',\n styleUrl: './stacked-area-chart.scss',\n})\nexport class StackedAreaChart {\n @Input() data: any;\n @Input() title: string = 'Protocol Traffic Overview';\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['data']) {\n this.buildChart();\n }\n }\n\n buildChart() {\n this.chartOption = {\n tooltip: {\n trigger: 'axis',\n },\n legend: {\n data: this.data.series.map((s: any) => s.name),\n top: 10,\n },\n grid: {\n left: '3%',\n right: '4%',\n bottom: '3%',\n containLabel: true,\n },\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.data.time,\n },\n yAxis: {\n type: 'value',\n },\n series: this.data.series.map((s: any) => ({\n name: s.name,\n type: 'line',\n smooth: true,\n data: s.values,\n areaStyle: {\n opacity: 0.15,\n },\n })),\n };\n }\n}\n","<div\n echarts\n class=\"chart-container\"\n [options]=\"chartOption\"\n ></div>","import { Component, Input, SimpleChanges } from '@angular/core';\nimport { ECharts, EChartsCoreOption } from 'echarts';\nimport { NgxEchartsDirective, provideEchartsCore } from 'ngx-echarts';\nimport * as echarts from 'echarts/core';\nimport { TooltipComponent, GridComponent, LegendComponent } from 'echarts/components';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport { LineChart } from 'echarts/charts';\nimport { AreaChartConfig } from '../../modal/charts-modal';\necharts.use([LineChart, GridComponent, TooltipComponent, LegendComponent, CanvasRenderer]);\n\n@Component({\n selector: 'lib-area-chart',\n imports: [NgxEchartsDirective],\n providers: [provideEchartsCore({ echarts })],\n templateUrl: './area-chart.html',\n styleUrl: './area-chart.scss',\n})\nexport class AreaChart {\n @Input() config!: AreaChartConfig;\n @Input() theme: any;\n\n private chartInstance!: ECharts;\n\n chartOption!: EChartsCoreOption;\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['theme'] && !changes['theme'].firstChange) {\n // Dispose and let ngx-echarts recreate chart with new theme\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n if (this.config) {\n this.buildOption();\n }\n }\n onChartInit(ec: ECharts) {\n this.chartInstance = ec;\n }\n buildOption() {\n this.chartOption = {\n backgroundColor: this.config.backgroundColor || 'transparent',\n\n tooltip: {\n show: this.config.showTooltip ?? true,\n trigger: 'axis',\n },\n legned:\ntrue,\n grid: {\n left: this.config.grid?.left ?? 20,\n right: this.config.grid?.right ?? 20,\n top: this.config.grid?.top ?? 20,\n bottom: this.config.grid?.bottom ?? 20,\n containLabel: true,\n },\n\n xAxis: {\n type: 'category',\n boundaryGap: false,\n data: this.config.xAxisData,\n show: this.config.showXAxis ?? true,\n axisLine: { show: this.config.showXAxisLine ?? true },\n axisTick: { show: this.config.showXAxisTick ?? true },\n axisLabel: { show: this.config.showXAxisLabel ?? true },\n },\n\n yAxis: {\n type: 'value',\n show: this.config.showYAxis ?? true,\n axisLine: { show: this.config.showYAxisLine ?? true },\n axisTick: { show: this.config.showYAxisTick ?? true },\n axisLabel: { show: this.config.showYAxisLabel ?? true },\n splitLine: { show: this.config.showGridLines ?? true },\n },\n\n series: [\n {\n type: 'line',\n data: this.config.seriesData,\n smooth: this.config.smooth ?? true,\n showSymbol: this.config.showSymbol ?? false,\n\n lineStyle: {\n width: this.config.lineWidth ?? 2,\n color: this.config.lineColor || '#16a34a',\n },\n\n itemStyle: {\n color: this.config.lineColor || '#16a34a',\n },\n\n areaStyle: {\n color: this.config.areaColor || 'rgba(22,163,74,0.25)',\n },\n },\n ],\n };\n }\n ngOnDestroy(): void {\n if (this.chartInstance) {\n this.chartInstance.dispose();\n }\n }\n}\n","<div\n echarts\n [options]=\"chartOption\"\n [theme]=\"theme\"\n \n class=\"chart-container\"\n>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.Charts","EBarChart","EPieChart"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -15,6 +15,7 @@ interface PieChartConfig {
15
15
  showTooltip?: boolean;
16
16
  showTooltipPercent?: boolean;
17
17
  tooltipFormatter?: (params: any, config: PieChartConfig) => void;
18
+ hideLegend?: boolean;
18
19
  legendPosition?: 'top' | 'bottom' | 'left' | 'right' | string;
19
20
  legendAlign?: 'left' | 'center' | 'right' | string;
20
21
  legendDirection?: 'horizontal' | 'vertical' | string;
@@ -80,7 +81,7 @@ interface DoughnutChartConfig {
80
81
  showTooltip?: boolean;
81
82
  showTooltipPercent?: boolean;
82
83
  tooltipFormatter?: (params: any, config: DoughnutChartConfig) => void;
83
- showLegend?: boolean;
84
+ hideLegend?: boolean;
84
85
  legendBottom?: number;
85
86
  legendPosition?: 'top' | 'bottom' | 'left' | 'right' | string;
86
87
  legendAlign?: 'left' | 'center' | 'right' | string;
@@ -91,6 +92,7 @@ interface DoughnutChartConfig {
91
92
  labelPosition?: 'inside' | 'outside' | 'center';
92
93
  showLabelValue?: boolean;
93
94
  showLabelPercentage?: boolean;
95
+ emphasisScale?: boolean;
94
96
  borderRadius?: number;
95
97
  borderColor?: string;
96
98
  borderWidth?: number;
@@ -206,7 +208,6 @@ declare class PieChart {
206
208
  cardOptionClick: EventEmitter<any>;
207
209
  chartOption: EChartsCoreOption;
208
210
  private chartInstance;
209
- private chartsContainer;
210
211
  openCard: boolean;
211
212
  cardPosition: {
212
213
  x: number;
@@ -215,7 +216,7 @@ declare class PieChart {
215
216
  constructor(chartService: Charts);
216
217
  ngOnChanges(changes: SimpleChanges): void;
217
218
  ngOnDestroy(): void;
218
- onChartInit(ec: ECharts, container: HTMLElement): void;
219
+ onChartInit(ec: ECharts): void;
219
220
  private buildOption;
220
221
  private bindEvents;
221
222
  onMenuClick(item: any): void;
@@ -236,7 +237,6 @@ declare class DoughnutChart {
236
237
  type: string;
237
238
  data: any;
238
239
  }>;
239
- chartsContainer: any;
240
240
  cardPosition: {
241
241
  x: number;
242
242
  y: number;
@@ -270,7 +270,7 @@ declare class DoughnutChart {
270
270
  * @param ec
271
271
  * @param [container]
272
272
  */
273
- onChartInit(ec: ECharts, container?: HTMLElement): void;
273
+ onChartInit(ec: ECharts): void;
274
274
  /**
275
275
  * @description Binds events
276
276
  * @author Shiva Kant
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cats-charts",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=17.0.0",
6
6
  "@angular/core": ">=17.0.0",