@nstudio/ncharts 1.0.3 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/angular/fesm2022/nstudio-ncharts-angular.mjs +14 -280
  2. package/angular/fesm2022/nstudio-ncharts-angular.mjs.map +1 -1
  3. package/angular/types/nstudio-ncharts-angular.d.ts +8 -36
  4. package/charts/bar-chart.android.d.ts +12 -1
  5. package/charts/bar-chart.android.js +123 -16
  6. package/charts/bar-chart.android.js.map +1 -1
  7. package/charts/bar-chart.ios.d.ts +12 -1
  8. package/charts/bar-chart.ios.js +122 -26
  9. package/charts/bar-chart.ios.js.map +1 -1
  10. package/charts/bubble-chart.android.d.ts +3 -1
  11. package/charts/bubble-chart.android.js +11 -3
  12. package/charts/bubble-chart.android.js.map +1 -1
  13. package/charts/bubble-chart.ios.d.ts +3 -1
  14. package/charts/bubble-chart.ios.js +21 -15
  15. package/charts/bubble-chart.ios.js.map +1 -1
  16. package/charts/candlestick-chart.android.d.ts +3 -1
  17. package/charts/candlestick-chart.android.js +11 -3
  18. package/charts/candlestick-chart.android.js.map +1 -1
  19. package/charts/candlestick-chart.ios.d.ts +3 -1
  20. package/charts/candlestick-chart.ios.js +21 -15
  21. package/charts/candlestick-chart.ios.js.map +1 -1
  22. package/charts/chart-paging-detector/chart-paging-detector-base.d.ts +30 -0
  23. package/charts/chart-paging-detector/chart-paging-detector-base.js +115 -0
  24. package/charts/chart-paging-detector/chart-paging-detector-base.js.map +1 -0
  25. package/charts/chart-paging-detector/chart-paging-detector.android.d.ts +28 -0
  26. package/charts/chart-paging-detector/chart-paging-detector.android.js +136 -0
  27. package/charts/chart-paging-detector/chart-paging-detector.android.js.map +1 -0
  28. package/charts/chart-paging-detector/chart-paging-detector.ios.d.ts +34 -0
  29. package/charts/chart-paging-detector/chart-paging-detector.ios.js +88 -0
  30. package/charts/chart-paging-detector/chart-paging-detector.ios.js.map +1 -0
  31. package/charts/combined-chart.android.d.ts +13 -1
  32. package/charts/combined-chart.android.js +163 -13
  33. package/charts/combined-chart.android.js.map +1 -1
  34. package/charts/combined-chart.ios.d.ts +13 -1
  35. package/charts/combined-chart.ios.js +222 -72
  36. package/charts/combined-chart.ios.js.map +1 -1
  37. package/charts/default-marker.android.d.ts +29 -0
  38. package/charts/default-marker.android.js +133 -0
  39. package/charts/default-marker.android.js.map +1 -0
  40. package/charts/default-marker.ios.d.ts +21 -0
  41. package/charts/default-marker.ios.js +119 -0
  42. package/charts/default-marker.ios.js.map +1 -0
  43. package/charts/formatters/custom-labels-array-formatter.android.d.ts +7 -0
  44. package/charts/formatters/custom-labels-array-formatter.android.js +26 -0
  45. package/charts/formatters/custom-labels-array-formatter.android.js.map +1 -0
  46. package/charts/formatters/custom-labels-array-formatter.ios.d.ts +16 -0
  47. package/charts/formatters/custom-labels-array-formatter.ios.js +53 -0
  48. package/charts/formatters/custom-labels-array-formatter.ios.js.map +1 -0
  49. package/charts/formatters/date-formatters.android.d.ts +34 -0
  50. package/charts/formatters/date-formatters.android.js +74 -0
  51. package/charts/formatters/date-formatters.android.js.map +1 -0
  52. package/charts/formatters/date-formatters.ios.d.ts +33 -0
  53. package/charts/formatters/date-formatters.ios.js +75 -0
  54. package/charts/formatters/date-formatters.ios.js.map +1 -0
  55. package/charts/formatters/decimal-value-formatter.android.d.ts +13 -0
  56. package/charts/formatters/decimal-value-formatter.android.js +64 -0
  57. package/charts/formatters/decimal-value-formatter.android.js.map +1 -0
  58. package/charts/formatters/suffix-value-formatter.android.d.ts +13 -0
  59. package/charts/formatters/suffix-value-formatter.android.js +78 -0
  60. package/charts/formatters/suffix-value-formatter.android.js.map +1 -0
  61. package/charts/formatters/suffix-value-formatter.ios.d.ts +15 -0
  62. package/charts/formatters/suffix-value-formatter.ios.js +76 -0
  63. package/charts/formatters/suffix-value-formatter.ios.js.map +1 -0
  64. package/charts/formatters/value-formatter-helpers.d.ts +1 -0
  65. package/charts/formatters/value-formatter-helpers.js +29 -0
  66. package/charts/formatters/value-formatter-helpers.js.map +1 -0
  67. package/charts/line-chart.android.d.ts +12 -1
  68. package/charts/line-chart.android.js +121 -11
  69. package/charts/line-chart.android.js.map +1 -1
  70. package/charts/line-chart.ios.d.ts +12 -1
  71. package/charts/line-chart.ios.js +120 -21
  72. package/charts/line-chart.ios.js.map +1 -1
  73. package/charts/pie-chart.android.d.ts +23 -4
  74. package/charts/pie-chart.android.js +166 -55
  75. package/charts/pie-chart.android.js.map +1 -1
  76. package/charts/pie-chart.ios.d.ts +23 -4
  77. package/charts/pie-chart.ios.js +182 -90
  78. package/charts/pie-chart.ios.js.map +1 -1
  79. package/charts/radar-chart.android.d.ts +4 -1
  80. package/charts/radar-chart.android.js +16 -3
  81. package/charts/radar-chart.android.js.map +1 -1
  82. package/charts/radar-chart.ios.d.ts +4 -1
  83. package/charts/radar-chart.ios.js +27 -15
  84. package/charts/radar-chart.ios.js.map +1 -1
  85. package/charts/renderers/bar-chart-renderer.android.d.ts +19 -0
  86. package/charts/renderers/bar-chart-renderer.android.js +118 -0
  87. package/charts/renderers/bar-chart-renderer.android.js.map +1 -0
  88. package/charts/renderers/bar-chart-renderer.ios.d.ts +48 -0
  89. package/charts/renderers/bar-chart-renderer.ios.js +152 -0
  90. package/charts/renderers/bar-chart-renderer.ios.js.map +1 -0
  91. package/charts/renderers/combined-chart-renderer.android.d.ts +13 -0
  92. package/charts/renderers/combined-chart-renderer.android.js +57 -0
  93. package/charts/renderers/combined-chart-renderer.android.js.map +1 -0
  94. package/charts/renderers/combined-chart-renderer.ios.d.ts +12 -0
  95. package/charts/renderers/combined-chart-renderer.ios.js +66 -0
  96. package/charts/renderers/combined-chart-renderer.ios.js.map +1 -0
  97. package/charts/renderers/line-chart-plotbands-renderer.android.d.ts +13 -0
  98. package/charts/renderers/line-chart-plotbands-renderer.android.js +37 -0
  99. package/charts/renderers/line-chart-plotbands-renderer.android.js.map +1 -0
  100. package/charts/renderers/line-chart-plotbands-renderer.ios.d.ts +10 -0
  101. package/charts/renderers/line-chart-plotbands-renderer.ios.js +34 -0
  102. package/charts/renderers/line-chart-plotbands-renderer.ios.js.map +1 -0
  103. package/charts/renderers/plotband-drawer.android.d.ts +33 -0
  104. package/charts/renderers/plotband-drawer.android.js +200 -0
  105. package/charts/renderers/plotband-drawer.android.js.map +1 -0
  106. package/charts/renderers/plotband-drawer.ios.d.ts +15 -0
  107. package/charts/renderers/plotband-drawer.ios.js +183 -0
  108. package/charts/renderers/plotband-drawer.ios.js.map +1 -0
  109. package/charts/scatter-chart.android.d.ts +3 -1
  110. package/charts/scatter-chart.android.js +11 -3
  111. package/charts/scatter-chart.android.js.map +1 -1
  112. package/charts/scatter-chart.ios.d.ts +3 -1
  113. package/charts/scatter-chart.ios.js +21 -15
  114. package/charts/scatter-chart.ios.js.map +1 -1
  115. package/charts/style-helpers.android.d.ts +7 -5
  116. package/charts/style-helpers.android.js +125 -5
  117. package/charts/style-helpers.android.js.map +1 -1
  118. package/charts/style-helpers.ios.d.ts +7 -5
  119. package/charts/style-helpers.ios.js +138 -5
  120. package/charts/style-helpers.ios.js.map +1 -1
  121. package/common.d.ts +56 -2
  122. package/common.js +181 -14
  123. package/common.js.map +1 -1
  124. package/package.json +2 -2
  125. package/types/android!MPAndroidChart.d.ts +7955 -0
  126. package/types/objc!DGCharts.d.ts +5265 -0
  127. package/types.d.ts +67 -3
@@ -0,0 +1,28 @@
1
+ import { ChartPagingDetectorOptions, PageHandler } from './chart-paging-detector';
2
+ import { ChartPagingDetectorBase } from './chart-paging-detector-base';
3
+ export declare class ChartPagingDetector extends ChartPagingDetectorBase {
4
+ private readonly chartView;
5
+ private readonly nativeChart;
6
+ private lastX;
7
+ private lastY;
8
+ private startX;
9
+ private startY;
10
+ private horizontalPagingActive;
11
+ private gestureLocked;
12
+ private touchSlop;
13
+ private tracking;
14
+ private readonly touchHandler;
15
+ private readonly gestureListener;
16
+ constructor(chartView: any, onPage: PageHandler, opts?: ChartPagingDetectorOptions);
17
+ private _handleTouch;
18
+ handleScaled(): void;
19
+ detach(): void;
20
+ protected getLowestVisibleX(): number;
21
+ protected getHighestVisibleX(): number;
22
+ protected getScaleX(): number;
23
+ protected getScaleY(): number;
24
+ protected getDataXBounds(): {
25
+ dataMin: number;
26
+ dataMax: number;
27
+ } | null;
28
+ }
@@ -0,0 +1,136 @@
1
+ import { ChartPagingDetectorBase } from './chart-paging-detector-base';
2
+ export class ChartPagingDetector extends ChartPagingDetectorBase {
3
+ constructor(chartView, onPage, opts) {
4
+ super(onPage, opts);
5
+ this.lastX = 0;
6
+ this.lastY = 0;
7
+ this.startX = 0;
8
+ this.startY = 0;
9
+ this.horizontalPagingActive = false;
10
+ this.gestureLocked = false;
11
+ this.touchSlop = 8;
12
+ this.tracking = false;
13
+ this.chartView = chartView;
14
+ this.nativeChart = chartView.android;
15
+ this.touchHandler = (args) => {
16
+ this._handleTouch(args);
17
+ };
18
+ this.gestureListener = new com.github.mikephil.charting.listener.OnChartGestureListener({
19
+ onChartGestureStart: (me, lastPerformedGesture) => { },
20
+ onChartGestureEnd: (me, lastPerformedGesture) => { },
21
+ onChartLongPressed: (me) => { },
22
+ onChartDoubleTapped: (me) => { },
23
+ onChartSingleTapped: (me) => { },
24
+ onChartFling: (me1, me2, velocityX, velocityY) => { },
25
+ onChartScale: (me, scaleX, scaleY) => {
26
+ this.handleScaled();
27
+ },
28
+ onChartTranslate: (me, dX, dY) => { },
29
+ });
30
+ this.chartView.on('touch', this.touchHandler, this);
31
+ this.nativeChart.setOnChartGestureListener(this.gestureListener);
32
+ }
33
+ _handleTouch(args) {
34
+ const action = args.action;
35
+ const x = args.getX();
36
+ const y = args.getY();
37
+ switch (action) {
38
+ case 'down':
39
+ this.startX = x;
40
+ this.startY = y;
41
+ this.lastX = x;
42
+ this.lastY = y;
43
+ this.tracking = true;
44
+ this.horizontalPagingActive = false;
45
+ this.gestureLocked = false;
46
+ break;
47
+ case 'move':
48
+ // recovery path in case of missing down
49
+ if (!this.tracking) {
50
+ this.startX = x;
51
+ this.startY = y;
52
+ this.lastX = x;
53
+ this.lastY = y;
54
+ this.tracking = true;
55
+ this.horizontalPagingActive = false;
56
+ this.gestureLocked = false;
57
+ break;
58
+ }
59
+ const totalDx = x - this.startX;
60
+ const totalDy = y - this.startY;
61
+ const absTotalX = Math.abs(totalDx);
62
+ const absTotalY = Math.abs(totalDy);
63
+ // decision pending: Tap vs horizontal vs vertikal
64
+ if (!this.gestureLocked) {
65
+ // not enough displacement => Tap/Jitter
66
+ if (absTotalX < this.touchSlop && absTotalY < this.touchSlop) {
67
+ return;
68
+ }
69
+ // Horizontal dominates => activate paging
70
+ if (absTotalX > absTotalY * 1.5) {
71
+ this.gestureLocked = true;
72
+ this.horizontalPagingActive = true;
73
+ }
74
+ else {
75
+ // not enough horizontal => treat as non-paging
76
+ this.gestureLocked = true;
77
+ this.horizontalPagingActive = false;
78
+ return;
79
+ }
80
+ }
81
+ if (!this.horizontalPagingActive) {
82
+ return;
83
+ }
84
+ // use incremental deltas
85
+ const fingerDx = x - this.lastX;
86
+ this.lastX = x;
87
+ this.lastY = y;
88
+ // ignore jitter
89
+ if (Math.abs(fingerDx) < 1) {
90
+ return;
91
+ }
92
+ super.handleTranslated(fingerDx);
93
+ break;
94
+ case 'up':
95
+ case 'cancel':
96
+ this.tracking = false;
97
+ // only emit end when horizontal paging gesture has finished
98
+ if (this.horizontalPagingActive) {
99
+ super.handleEnd();
100
+ }
101
+ this.horizontalPagingActive = false;
102
+ this.gestureLocked = false;
103
+ break;
104
+ }
105
+ }
106
+ handleScaled() {
107
+ super.handleScaled();
108
+ }
109
+ detach() {
110
+ super.detach();
111
+ this.chartView.off('touch', this.touchHandler, this);
112
+ this.nativeChart.setOnChartGestureListener(null);
113
+ }
114
+ getLowestVisibleX() {
115
+ return this.nativeChart.getLowestVisibleX();
116
+ }
117
+ getHighestVisibleX() {
118
+ return this.nativeChart.getHighestVisibleX();
119
+ }
120
+ getScaleX() {
121
+ return this.nativeChart.getViewPortHandler().getScaleX();
122
+ }
123
+ getScaleY() {
124
+ return this.nativeChart.getViewPortHandler().getScaleY();
125
+ }
126
+ getDataXBounds() {
127
+ const data = this.nativeChart.getData();
128
+ if (!data)
129
+ return null;
130
+ return {
131
+ dataMin: data.getXMin(),
132
+ dataMax: data.getXMax(),
133
+ };
134
+ }
135
+ }
136
+ //# sourceMappingURL=chart-paging-detector.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-paging-detector.android.js","sourceRoot":"","sources":["../../../../../packages/ncharts/charts/chart-paging-detector/chart-paging-detector.android.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { ChartPagingDetectorBase } from './chart-paging-detector-base';
2
+ import { ChartPagingDetectorOptions, PageHandler } from './chart-paging-detector';
3
+ import { LineChartBase } from '../../common';
4
+ export declare class PanActionTarget extends NSObject implements UIGestureRecognizerDelegate {
5
+ static ObjCProtocols: {
6
+ prototype: UIGestureRecognizerDelegate;
7
+ }[];
8
+ static ObjCExposedMethods: {
9
+ 'handlePan:': {
10
+ returns: interop.Type<void>;
11
+ params: interop.Type<any>[];
12
+ };
13
+ };
14
+ private owner;
15
+ static initWithOwner(owner: any): PanActionTarget;
16
+ 'handlePan:'(recognizer: any): void;
17
+ gestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer?(gestureRecognizer: UIGestureRecognizer, otherGestureRecognizer: UIGestureRecognizer): boolean;
18
+ }
19
+ export declare class ChartPagingDetector extends ChartPagingDetectorBase {
20
+ private readonly nativeChart;
21
+ private readonly panTarget;
22
+ private readonly pan;
23
+ constructor(chartView: LineChartBase, onPage: PageHandler, opts?: ChartPagingDetectorOptions);
24
+ _handlePan(recognizer: UIPanGestureRecognizer): void;
25
+ handleScaled(): void;
26
+ protected getLowestVisibleX(): number;
27
+ protected getHighestVisibleX(): number;
28
+ protected getScaleX(): number;
29
+ protected getScaleY(): number;
30
+ protected getDataXBounds(): {
31
+ dataMin: number;
32
+ dataMax: number;
33
+ } | null;
34
+ }
@@ -0,0 +1,88 @@
1
+ import { ChartPagingDetectorBase } from './chart-paging-detector-base';
2
+ var PanActionTarget = (function (_super) {
3
+ __extends(PanActionTarget, _super);
4
+ function PanActionTarget() {
5
+ return _super !== null && _super.apply(this, arguments) || this;
6
+ }
7
+ PanActionTarget.initWithOwner = function (owner) {
8
+ var instance = PanActionTarget.alloc().init();
9
+ instance.owner = owner;
10
+ return instance;
11
+ };
12
+ PanActionTarget.prototype["handlePan:"] = function (recognizer) {
13
+ if (this.owner && this.owner._handlePan) {
14
+ this.owner._handlePan(recognizer);
15
+ }
16
+ };
17
+ PanActionTarget.prototype.gestureRecognizerShouldRecognizeSimultaneouslyWithGestureRecognizer = function (gestureRecognizer, otherGestureRecognizer) {
18
+ return true;
19
+ };
20
+ PanActionTarget.ObjCProtocols = [UIGestureRecognizerDelegate];
21
+ PanActionTarget.ObjCExposedMethods = {
22
+ "handlePan:": {
23
+ returns: interop.types.void,
24
+ params: [interop.types.id],
25
+ },
26
+ };
27
+ return PanActionTarget;
28
+ }(NSObject));
29
+ export { PanActionTarget };
30
+ export class ChartPagingDetector extends ChartPagingDetectorBase {
31
+ constructor(chartView, onPage, opts) {
32
+ super(onPage, opts);
33
+ this.nativeChart = chartView.ios;
34
+ // pan via custom recognizer as it should also work in case we are zoomed out
35
+ this.panTarget = PanActionTarget.initWithOwner(this);
36
+ this.pan = UIPanGestureRecognizer.alloc().initWithTargetAction(this.panTarget, 'handlePan:');
37
+ this.pan.cancelsTouchesInView = false;
38
+ this.pan.delegate = this.panTarget;
39
+ // deactivate pinzoom for custom gesture recognizer
40
+ this.pan.minimumNumberOfTouches = 1;
41
+ this.pan.maximumNumberOfTouches = 1;
42
+ this.nativeChart.addGestureRecognizer(this.pan);
43
+ }
44
+ _handlePan(recognizer) {
45
+ const tr = recognizer.translationInView(this.nativeChart);
46
+ const dx = tr.x;
47
+ const dy = tr.y;
48
+ // Reset translation early so we always work with deltas
49
+ recognizer.setTranslationInView(CGPointZero, this.nativeChart);
50
+ // Gate: ignore if gesture is primarily vertical (or too small)
51
+ const absX = Math.abs(dx);
52
+ const absY = Math.abs(dy);
53
+ // 1) minimum horizontal movement (avoid jitter)
54
+ if (absX < 3)
55
+ return;
56
+ // 2) horizontal dominance (tune factor 1.2..2.0)
57
+ if (absX < absY * 1.5)
58
+ return;
59
+ // Only now treat as horizontal paging intent
60
+ this.handleTranslated(dx);
61
+ const s = recognizer.state;
62
+ if (s === 3 /* UIGestureRecognizerState.Ended */ || s === 4 /* UIGestureRecognizerState.Cancelled */) {
63
+ this.handleEnd();
64
+ }
65
+ }
66
+ handleScaled() {
67
+ super.handleScaled();
68
+ }
69
+ getLowestVisibleX() {
70
+ return this.nativeChart.lowestVisibleX;
71
+ }
72
+ getHighestVisibleX() {
73
+ return this.nativeChart.highestVisibleX;
74
+ }
75
+ getScaleX() {
76
+ return this.nativeChart.scaleX;
77
+ }
78
+ getScaleY() {
79
+ return this.nativeChart.scaleY;
80
+ }
81
+ getDataXBounds() {
82
+ const data = this.nativeChart.data;
83
+ if (!data)
84
+ return null;
85
+ return { dataMin: this.nativeChart.chartXMin, dataMax: this.nativeChart.chartXMax };
86
+ }
87
+ }
88
+ //# sourceMappingURL=chart-paging-detector.ios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-paging-detector.ios.js","sourceRoot":"","sources":["../../../../../packages/ncharts/charts/chart-paging-detector/chart-paging-detector.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;;;;;IAIvE,CAAC;;;;;IAIa,CAAC;;;;QAQW,CAAC;IAAS,CAAC;;;IAKG,CAAC;;;;;;;;;AAMyH,CAAC;;AAKnK,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;IAK9D,YAAY,SAAwB,EAAE,MAAmB,EAAE,IAAiC;QAC1F,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEpB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,GAA2B,CAAC;QAEzD,6EAA6E;QAC7E,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,GAAG,GAAG,sBAAsB,CAAC,KAAK,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC7F,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAEnC,mDAAmD;QACnD,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,CAAC,CAAC;QAEpC,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IAEM,UAAU,CAAC,UAAkC;QAClD,MAAM,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEhB,wDAAwD;QACxD,UAAU,CAAC,oBAAoB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/D,+DAA+D;QAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE1B,gDAAgD;QAChD,IAAI,IAAI,GAAG,CAAC;YAAE,OAAO;QAErB,iDAAiD;QACjD,IAAI,IAAI,GAAG,IAAI,GAAG,GAAG;YAAE,OAAO;QAE9B,6CAA6C;QAC7C,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAE1B,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,2CAAmC,IAAI,CAAC,+CAAuC,EAAE,CAAC;YACrF,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IACM,YAAY;QACjB,KAAK,CAAC,YAAY,EAAE,CAAC;IACvB,CAAC;IAES,iBAAiB;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IACzC,CAAC;IAES,kBAAkB;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC1C,CAAC;IAES,SAAS;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IACS,SAAS;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAES,cAAc;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC;IACtF,CAAC;CACF"}
@@ -1,15 +1,27 @@
1
1
  /**
2
2
  * CombinedChart - Android Implementation
3
3
  */
4
- import { CombinedChartBase, ChartAnimation, LegendConfig, XAxisConfig, ChartDescription, MarkerConfig, Highlight } from '../common';
4
+ import { CombinedChartBase, ChartAnimation, LegendConfig, XAxisConfig, ChartDescription, MarkerConfig, Highlight, ViewPortOffset, extraOffsetsProperty, touchEnabledProperty, dragEnabledProperty, scaleEnabledProperty, pinchZoomProperty, highlightPerDragEnabledProperty, highlightPerTapEnabledProperty } from '../common';
5
5
  export declare class CombinedChart extends CombinedChartBase {
6
+ [extraOffsetsProperty.setNative]: (value: ViewPortOffset) => void;
7
+ [touchEnabledProperty.setNative]: (value: boolean) => void;
8
+ [dragEnabledProperty.setNative]: (value: boolean) => void;
9
+ [scaleEnabledProperty.setNative]: (value: boolean) => void;
10
+ [pinchZoomProperty.setNative]: (value: boolean) => void;
11
+ [highlightPerDragEnabledProperty.setNative]: (value: boolean) => void;
12
+ [highlightPerTapEnabledProperty.setNative]: (value: boolean) => void;
6
13
  private _native;
7
14
  private _selectionListener;
15
+ private _combinedRenderer;
16
+ private _pageDetector;
17
+ private _retainedChartObjects;
18
+ private _retainedDataObjects;
8
19
  createNativeView(): any;
9
20
  initNativeView(): void;
10
21
  disposeNativeView(): void;
11
22
  get nativeChart(): any;
12
23
  applyData(): void;
24
+ private _updateCustomRenderer;
13
25
  protected _applyAnimation(animation: ChartAnimation): void;
14
26
  protected _applyHighlights(highlights: Highlight[] | null): void;
15
27
  protected _invalidateChart(): void;
@@ -1,10 +1,14 @@
1
1
  /**
2
2
  * CombinedChart - Android Implementation
3
3
  */
4
- import { CombinedChartBase, nchartsLog } from '../common';
4
+ import { CombinedChartBase, nchartsLog, extraOffsetsProperty, touchEnabledProperty, dragEnabledProperty, scaleEnabledProperty, pinchZoomProperty, highlightPerDragEnabledProperty, highlightPerTapEnabledProperty } from '../common';
5
5
  import { toAndroidColor } from './utils';
6
- import { applyNoDataTextColorAndroid, applyLegendAndroid, applyXAxisAndroid, applyYAxisDualAndroid, applyDescriptionAndroid } from './style-helpers.android';
7
- function applyLineDataSetConfig(dataSet, config) {
6
+ import { applyNoDataTextColorAndroid, applyLegendAndroid, applyXAxisAndroid, applyYAxisDualAndroid, applyDescriptionAndroid, applyMarkerAndroid } from './style-helpers.android';
7
+ import { NSCustomLabelsArrayFormatter } from './formatters/custom-labels-array-formatter.android';
8
+ import { NSCombinedChartRenderer } from './renderers/combined-chart-renderer.android';
9
+ import { NSSuffixValueFormatter } from './formatters/suffix-value-formatter.android';
10
+ import { ChartPagingDetector } from './chart-paging-detector/chart-paging-detector';
11
+ function applyLineDataSetConfig(dataSet, config, retainedDataObjects) {
8
12
  if (!dataSet || !config)
9
13
  return;
10
14
  if (config.color) {
@@ -90,8 +94,18 @@ function applyLineDataSetConfig(dataSet, config) {
90
94
  }
91
95
  if (config.drawCubicIntensity !== undefined)
92
96
  dataSet.setCubicIntensity(config.drawCubicIntensity);
97
+ if (config.valueFormatter === 'number') {
98
+ const vf = NSSuffixValueFormatter.initWithPattern(config.valueFormatterPattern);
99
+ dataSet.setValueFormatter(vf);
100
+ retainedDataObjects.push(vf);
101
+ }
102
+ else if (Array.isArray(config.valueFormatter)) {
103
+ const vf = new NSCustomLabelsArrayFormatter(config.valueFormatter);
104
+ dataSet.setValueFormatter(vf);
105
+ retainedDataObjects.push(vf);
106
+ }
93
107
  }
94
- function applyBarDataSetConfig(dataSet, config) {
108
+ function applyBarDataSetConfig(dataSet, config, retainedDataObjects) {
95
109
  if (!dataSet || !config)
96
110
  return;
97
111
  if (config.color) {
@@ -108,6 +122,9 @@ function applyBarDataSetConfig(dataSet, config) {
108
122
  });
109
123
  dataSet.setColors(colors);
110
124
  }
125
+ if (config.axisDependency) {
126
+ dataSet.setAxisDependency(config.axisDependency === 'RIGHT' ? com.github.mikephil.charting.components.YAxis.AxisDependency.RIGHT : com.github.mikephil.charting.components.YAxis.AxisDependency.LEFT);
127
+ }
111
128
  if (config.highlightEnabled !== undefined)
112
129
  dataSet.setHighlightEnabled(config.highlightEnabled);
113
130
  if (config.drawValues !== undefined)
@@ -128,6 +145,19 @@ function applyBarDataSetConfig(dataSet, config) {
128
145
  }
129
146
  if (config.highlightAlpha !== undefined)
130
147
  dataSet.setHighLightAlpha(Math.round(config.highlightAlpha));
148
+ if (config.barBorderWidth !== undefined) {
149
+ dataSet.setBarBorderWidth(config.barBorderWidth);
150
+ }
151
+ if (config.barBorderColor) {
152
+ const color = toAndroidColor(config.barBorderColor);
153
+ if (color !== undefined)
154
+ dataSet.setBarBorderColor(color);
155
+ }
156
+ if (config.valueFormatter === 'percent' || config.valueFormatter === 'suffix') {
157
+ const vf = NSSuffixValueFormatter.initWithPattern(config.valueFormatterPattern);
158
+ dataSet.setValueFormatter(vf);
159
+ retainedDataObjects.push(vf);
160
+ }
131
161
  }
132
162
  function applyScatterDataSetConfig(dataSet, config) {
133
163
  if (!dataSet || !config)
@@ -305,6 +335,10 @@ export class CombinedChart extends CombinedChartBase {
305
335
  super(...arguments);
306
336
  this._native = null;
307
337
  this._selectionListener = null;
338
+ this._combinedRenderer = null;
339
+ this._pageDetector = null;
340
+ this._retainedChartObjects = [];
341
+ this._retainedDataObjects = [];
308
342
  }
309
343
  createNativeView() {
310
344
  nchartsLog('[ncharts] CombinedChart.createNativeView()');
@@ -316,7 +350,6 @@ export class CombinedChart extends CombinedChartBase {
316
350
  nchartsLog('[ncharts] CombinedChart.initNativeView()');
317
351
  super.initNativeView();
318
352
  const instance = this._native;
319
- instance.setHighlightPerTapEnabled(this.highlightPerTapEnabled);
320
353
  if (this.chartBackgroundColor) {
321
354
  const color = toAndroidColor(this.chartBackgroundColor);
322
355
  if (color !== undefined)
@@ -325,6 +358,17 @@ export class CombinedChart extends CombinedChartBase {
325
358
  if (this.noDataText)
326
359
  instance.setNoDataText(this.noDataText);
327
360
  applyNoDataTextColorAndroid(instance, this.noDataTextColor);
361
+ // angular directive does not await presence of native chart, hence setup needs to happen here
362
+ if (this.touchEnabled !== undefined)
363
+ instance.setTouchEnabled(this.touchEnabled);
364
+ if (this.dragEnabled !== undefined)
365
+ instance.setDragEnabled(this.dragEnabled);
366
+ if (this.scaleEnabled !== undefined)
367
+ instance.setScaleEnabled(this.scaleEnabled);
368
+ if (this.pinchZoom !== undefined)
369
+ instance.setPinchZoom(this.pinchZoom);
370
+ if (this.highlightPerDragEnabled !== undefined)
371
+ instance.setHighlightPerDragEnabled(this.highlightPerDragEnabled);
328
372
  // Set up selection listener
329
373
  const owner = new WeakRef(this);
330
374
  this._selectionListener = new com.github.mikephil.charting.listener.OnChartValueSelectedListener({
@@ -349,6 +393,15 @@ export class CombinedChart extends CombinedChartBase {
349
393
  },
350
394
  });
351
395
  instance.setOnChartValueSelectedListener(this._selectionListener);
396
+ // Set up page change detector
397
+ this._pageDetector = new ChartPagingDetector(this, async (dir, info) => {
398
+ this.notify({
399
+ eventName: CombinedChart.pageEvent,
400
+ object: this,
401
+ dir,
402
+ info,
403
+ });
404
+ }, { idleMs: 160, edgeRatio: 0.08, cooldownMs: 500, pagingMaxScaleX: 1, pagingMaxScaleY: 1 });
352
405
  if (this.legend)
353
406
  this._applyLegend(this.legend);
354
407
  if (this.xAxis)
@@ -361,6 +414,12 @@ export class CombinedChart extends CombinedChartBase {
361
414
  this.applyData();
362
415
  }
363
416
  disposeNativeView() {
417
+ this._pageDetector?.detach();
418
+ this._pageDetector = null;
419
+ this._combinedRenderer?.detach();
420
+ this._combinedRenderer = null;
421
+ this._retainedChartObjects.length = 0;
422
+ this._retainedDataObjects.length = 0;
364
423
  this._selectionListener = null;
365
424
  this._native = null;
366
425
  this._nativeChart = null;
@@ -374,6 +433,18 @@ export class CombinedChart extends CombinedChartBase {
374
433
  return;
375
434
  nchartsLog('[ncharts] CombinedChart._applyDataAndroid called');
376
435
  const instance = this._native;
436
+ // remove retained data objects
437
+ this._retainedDataObjects.length = 0;
438
+ // Setup of non-default draw order, order matters (before setting data)
439
+ if (this.data?.drawOrder) {
440
+ const order = this.data.drawOrder;
441
+ const toAndroidDrawOrder = (value) => com.github.mikephil.charting.charts.CombinedChart.DrawOrder[value];
442
+ const orderArray = java.lang.reflect.Array.newInstance(com.github.mikephil.charting.charts.CombinedChart.DrawOrder.class, order.length);
443
+ for (let i = 0; i < order.length; i++) {
444
+ orderArray[i] = toAndroidDrawOrder(order[i]);
445
+ }
446
+ instance.setDrawOrder(orderArray);
447
+ }
377
448
  const combinedData = new com.github.mikephil.charting.data.CombinedData();
378
449
  // Line data
379
450
  if (this.data.lineData) {
@@ -386,13 +457,19 @@ export class CombinedChart extends CombinedChartBase {
386
457
  entry = new com.github.mikephil.charting.data.Entry(index, value);
387
458
  }
388
459
  else {
389
- entry = new com.github.mikephil.charting.data.Entry(value.x ?? index, value.y);
460
+ const x = value.x ?? index;
461
+ if (!value.marker) {
462
+ entry = new com.github.mikephil.charting.data.Entry(x, value.y);
463
+ }
464
+ else {
465
+ entry = new com.github.mikephil.charting.data.Entry(x, value.y, value.marker);
466
+ }
390
467
  }
391
468
  entries.add(entry);
392
469
  });
393
470
  const dataSet = new com.github.mikephil.charting.data.LineDataSet(entries, ds.label);
394
471
  if (ds.config)
395
- applyLineDataSetConfig(dataSet, ds.config);
472
+ applyLineDataSetConfig(dataSet, ds.config, this._retainedDataObjects);
396
473
  lineDataSets.add(dataSet);
397
474
  }
398
475
  const lineData = new com.github.mikephil.charting.data.LineData(lineDataSets);
@@ -409,16 +486,31 @@ export class CombinedChart extends CombinedChartBase {
409
486
  entry = new com.github.mikephil.charting.data.BarEntry(index, value);
410
487
  }
411
488
  else if (Array.isArray(value.y)) {
412
- entry = new com.github.mikephil.charting.data.BarEntry(value.x ?? index, value.y);
489
+ const x = value.x ?? index;
490
+ const stack = Array.create('float', value.y.length);
491
+ for (let i = 0; i < value.y.length; i++) {
492
+ stack[i] = value.y[i];
493
+ }
494
+ if (!value.marker) {
495
+ entry = new com.github.mikephil.charting.data.BarEntry(x, stack);
496
+ }
497
+ else {
498
+ entry = new com.github.mikephil.charting.data.BarEntry(x, stack, value.marker);
499
+ }
413
500
  }
414
501
  else {
415
- entry = new com.github.mikephil.charting.data.BarEntry(value.x ?? index, value.y);
502
+ if (!value.marker) {
503
+ entry = new com.github.mikephil.charting.data.BarEntry(value.x ?? index, value.y);
504
+ }
505
+ else {
506
+ entry = new com.github.mikephil.charting.data.BarEntry(value.x ?? index, value.y, value.marker);
507
+ }
416
508
  }
417
509
  entries.add(entry);
418
510
  });
419
511
  const dataSet = new com.github.mikephil.charting.data.BarDataSet(entries, ds.label);
420
512
  if (ds.config)
421
- applyBarDataSetConfig(dataSet, ds.config);
513
+ applyBarDataSetConfig(dataSet, ds.config, this._retainedDataObjects);
422
514
  barDataSets.add(dataSet);
423
515
  }
424
516
  const barData = new com.github.mikephil.charting.data.BarData(barDataSets);
@@ -484,8 +576,27 @@ export class CombinedChart extends CombinedChartBase {
484
576
  const candleData = new com.github.mikephil.charting.data.CandleData(candleDataSets);
485
577
  combinedData.setData(candleData);
486
578
  }
579
+ // install custom renderer if needed
580
+ this._updateCustomRenderer();
487
581
  instance.setData(combinedData);
488
582
  instance.invalidate();
583
+ // data and animation properties cannot be set in a guranteed order
584
+ // hence after each data update an animation needs to be executed
585
+ if (this.animation)
586
+ this._applyAnimation(this.animation);
587
+ }
588
+ _updateCustomRenderer() {
589
+ const barConfigs = this.data?.barData?.dataSets?.map((ds) => ds.config).filter(Boolean) ?? [];
590
+ const needsCustomRenderer = this.yAxis?.plotBands?.length || barConfigs.some((cfg) => cfg?.drawValuesInside);
591
+ if (!needsCustomRenderer) {
592
+ this._combinedRenderer?.detach();
593
+ this._combinedRenderer = null;
594
+ }
595
+ else {
596
+ this._combinedRenderer?.detach();
597
+ this._combinedRenderer = NSCombinedChartRenderer.create(this._native, barConfigs, this.yAxis?.plotBands);
598
+ this._native.notifyDataSetChanged();
599
+ }
489
600
  }
490
601
  _applyAnimation(animation) {
491
602
  if (!this._native)
@@ -524,19 +635,58 @@ export class CombinedChart extends CombinedChartBase {
524
635
  applyLegendAndroid(this._native, legend);
525
636
  }
526
637
  _applyXAxis(xAxis) {
527
- applyXAxisAndroid(this._native, xAxis);
638
+ applyXAxisAndroid(this._native, xAxis, this._retainedChartObjects);
528
639
  }
529
640
  _applyYAxis(yAxis) {
530
- applyYAxisDualAndroid(this._native, yAxis);
641
+ applyYAxisDualAndroid(this._native, yAxis, this._retainedChartObjects);
642
+ this._updateCustomRenderer();
531
643
  }
532
644
  _applyDescription(description) {
533
645
  applyDescriptionAndroid(this._native, description);
534
646
  }
535
- _applyMarker(marker) { }
647
+ _applyMarker(marker) {
648
+ applyMarkerAndroid(this._native, marker, this._retainedChartObjects);
649
+ }
536
650
  _moveViewToX(xValue) { }
537
651
  _moveViewTo(xValue, yValue, axisDependency) { }
538
652
  _centerViewTo(xValue, yValue, axisDependency) { }
539
653
  _zoom(scaleX, scaleY, x, y) { }
540
654
  _fitScreen() { }
655
+ [extraOffsetsProperty.setNative](value) {
656
+ if (this._native && value) {
657
+ this._native.setExtraOffsets(value.left, value.top, value.right, value.bottom);
658
+ this._native.invalidate();
659
+ }
660
+ }
661
+ [touchEnabledProperty.setNative](value) {
662
+ if (this._native) {
663
+ this._native.setTouchEnabled(value);
664
+ }
665
+ }
666
+ [dragEnabledProperty.setNative](value) {
667
+ if (this._native) {
668
+ this._native.setDragEnabled(value);
669
+ }
670
+ }
671
+ [scaleEnabledProperty.setNative](value) {
672
+ if (this._native) {
673
+ this._native.setScaleEnabled(value);
674
+ }
675
+ }
676
+ [pinchZoomProperty.setNative](value) {
677
+ if (this._native) {
678
+ this._native.setPinchZoom(value);
679
+ }
680
+ }
681
+ [highlightPerDragEnabledProperty.setNative](value) {
682
+ if (this._native) {
683
+ this._native.setHighlightPerDragEnabled(value);
684
+ }
685
+ }
686
+ [highlightPerTapEnabledProperty.setNative](value) {
687
+ if (this._native) {
688
+ this._native.setHighlightPerTapEnabled(value);
689
+ }
690
+ }
541
691
  }
542
692
  //# sourceMappingURL=combined-chart.android.js.map