@devexperts/dxcharts-lite 2.7.13 → 2.7.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chart/bootstrap.js +1 -1
- package/dist/chart/components/chart/chart.model.js +5 -1
- package/dist/chart/components/grid/grid.component.d.ts +1 -1
- package/dist/chart/components/grid/grid.component.js +2 -2
- package/dist/chart/components/grid/grid.drawer.d.ts +2 -1
- package/dist/chart/components/grid/grid.drawer.js +4 -2
- package/dist/chart/components/pane/pane.component.js +4 -4
- package/dist/chart/components/y_axis/y-axis-base-labels.model.js +4 -2
- package/dist/chart/components/y_axis/y-axis.component.d.ts +9 -1
- package/dist/chart/components/y_axis/y-axis.component.js +13 -1
- package/dist/dxchart.min.js +4 -4
- package/package.json +43 -43
package/dist/chart/bootstrap.js
CHANGED
|
@@ -181,7 +181,7 @@ export default class ChartBootstrap {
|
|
|
181
181
|
this.volumesComponent = new VolumesComponent(this.dynamicObjectsCanvasModel, chartComponent, scaleModel, canvasBoundsContainer, drawingManager, config, paneManager, this.dynamicObjects);
|
|
182
182
|
this.chartComponents.push(this.volumesComponent);
|
|
183
183
|
// grid component
|
|
184
|
-
const verticalGridComponent = new GridComponent(mainCanvasModel, scaleModel, config, this.yAxisComponent.state, 'GRID', drawingManager, () => this.canvasBoundsContainer.getBounds(CanvasElement.ALL_PANES), () => this.canvasBoundsContainer.getBounds(chartPaneId), () => this.xAxisComponent.xAxisLabelsGenerator.labels, () => [], undefined, () => config.components.grid.visible);
|
|
184
|
+
const verticalGridComponent = new GridComponent(mainCanvasModel, scaleModel, config, this.yAxisComponent.state, 'GRID', drawingManager, () => this.canvasBoundsContainer.getBounds(CanvasElement.ALL_PANES), () => this.canvasBoundsContainer.getBounds(chartPaneId), () => this.xAxisComponent.xAxisLabelsGenerator.labels, () => [], undefined, undefined, () => config.components.grid.visible);
|
|
185
185
|
this.chartComponents.push(verticalGridComponent);
|
|
186
186
|
this.hoverProducer = new HoverProducerComponent(this.crossEventProducer, scaleModel, config, chartModel, canvasInputListener, this.canvasBoundsContainer, this.paneManager, timeZoneModel, chartPanComponent.mainCanvasTouchHandler, formatterFactory);
|
|
187
187
|
this.chartComponents.push(this.hoverProducer);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* If a copy of the MPL was not distributed with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
5
5
|
*/
|
|
6
6
|
import { Subject, merge } from 'rxjs';
|
|
7
|
-
import { distinctUntilChanged } from 'rxjs/operators';
|
|
7
|
+
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
|
8
8
|
import { CHART_UUID, CanvasElement, areBoundsChanged, } from '../../canvas/canvas-bounds-container';
|
|
9
9
|
import { getDefaultConfig } from '../../chart.config';
|
|
10
10
|
import { CandleSeriesModel } from '../../model/candle-series.model';
|
|
@@ -25,6 +25,7 @@ import { ChartInstrument } from './chart.component';
|
|
|
25
25
|
import { fakeCandle } from './fake-candles';
|
|
26
26
|
import { SecondaryChartColorsPool } from './secondary-chart-colors-pool';
|
|
27
27
|
import { uuid } from '../../utils/uuid.utils';
|
|
28
|
+
import { ONE_FRAME_MS } from '../../utils/numeric-constants.utils';
|
|
28
29
|
export class ChartModel extends ChartBaseElement {
|
|
29
30
|
get mainCandleSeries() {
|
|
30
31
|
return this.candleSeries[0];
|
|
@@ -101,6 +102,9 @@ export class ChartModel extends ChartBaseElement {
|
|
|
101
102
|
.subscribe(bounds => {
|
|
102
103
|
this.handleChartResize(bounds);
|
|
103
104
|
}));
|
|
105
|
+
this.addRxSubscription(this.scale.changed
|
|
106
|
+
.pipe(debounceTime(ONE_FRAME_MS))
|
|
107
|
+
.subscribe(() => this.paneManager.yExtents.forEach(e => e.yAxis.updateOrderedLabels(true))));
|
|
104
108
|
}
|
|
105
109
|
/**
|
|
106
110
|
* This method keeps the same candle width on chart canvas resize, so chart candles aren't squeezed when canvas becomes smaller
|
|
@@ -15,7 +15,7 @@ export declare class GridComponent extends ChartBaseElement {
|
|
|
15
15
|
private drawerName;
|
|
16
16
|
private drawingManager;
|
|
17
17
|
private readonly drawer;
|
|
18
|
-
constructor(canvasModel: CanvasModel, viewportModel: ViewportModel, config: FullChartConfig, yAxisState: YAxisConfig, drawerName: string, drawingManager: DrawingManager | CompositeDrawer, xBoundsProvider: BoundsProvider, yBoundsProvider: BoundsProvider, xLabelsProvider: () => NumericAxisLabel[], yLabelsProvider: () => NumericAxisLabel[], getBaseline?: () => Unit, drawPredicate?: () => boolean);
|
|
18
|
+
constructor(canvasModel: CanvasModel, viewportModel: ViewportModel, config: FullChartConfig, yAxisState: YAxisConfig, drawerName: string, drawingManager: DrawingManager | CompositeDrawer, xBoundsProvider: BoundsProvider, yBoundsProvider: BoundsProvider, xLabelsProvider: () => NumericAxisLabel[], yLabelsProvider: () => NumericAxisLabel[], extentIdx?: number, getBaseline?: () => Unit, drawPredicate?: () => boolean);
|
|
19
19
|
/**
|
|
20
20
|
* This method is used to deactivate the drawer and remove it from the drawing manager.
|
|
21
21
|
* @protected
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
import { ChartBaseElement } from '../../model/chart-base-element';
|
|
7
7
|
import { GridDrawer } from './grid.drawer';
|
|
8
8
|
export class GridComponent extends ChartBaseElement {
|
|
9
|
-
constructor(canvasModel, viewportModel, config, yAxisState, drawerName, drawingManager, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, getBaseline, drawPredicate) {
|
|
9
|
+
constructor(canvasModel, viewportModel, config, yAxisState, drawerName, drawingManager, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, extentIdx, getBaseline, drawPredicate) {
|
|
10
10
|
super();
|
|
11
11
|
this.drawerName = drawerName;
|
|
12
12
|
this.drawingManager = drawingManager;
|
|
13
|
-
this.drawer = new GridDrawer(canvasModel, viewportModel, config, yAxisState, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, drawPredicate, getBaseline);
|
|
13
|
+
this.drawer = new GridDrawer(canvasModel, viewportModel, config, yAxisState, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, drawPredicate, extentIdx, getBaseline);
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* This method is used to deactivate the drawer and remove it from the drawing manager.
|
|
@@ -26,8 +26,9 @@ export declare class GridDrawer implements Drawer {
|
|
|
26
26
|
private xLabelsProvider;
|
|
27
27
|
private yLabelsProvider;
|
|
28
28
|
private drawPredicate;
|
|
29
|
+
private extentIdx?;
|
|
29
30
|
private getBaseline?;
|
|
30
|
-
constructor(canvasModel: CanvasModel, viewportModel: ViewportModel, config: FullChartConfig, yAxisState: YAxisConfig, xBoundsProvider: BoundsProvider, yBoundsProvider: BoundsProvider, xLabelsProvider: () => NumericAxisLabel[], yLabelsProvider: () => NumericAxisLabel[], drawPredicate?: () => boolean, getBaseline?: (() => Unit) | undefined);
|
|
31
|
+
constructor(canvasModel: CanvasModel, viewportModel: ViewportModel, config: FullChartConfig, yAxisState: YAxisConfig, xBoundsProvider: BoundsProvider, yBoundsProvider: BoundsProvider, xLabelsProvider: () => NumericAxisLabel[], yLabelsProvider: () => NumericAxisLabel[], drawPredicate?: () => boolean, extentIdx?: number | undefined, getBaseline?: (() => Unit) | undefined);
|
|
31
32
|
/**
|
|
32
33
|
* Draws the chart on the canvas if the drawPredicate is true.
|
|
33
34
|
* @returns {void}
|
|
@@ -11,7 +11,7 @@ import { floorToDPR } from '../../utils/device/device-pixel-ratio.utils';
|
|
|
11
11
|
* Draws grid lines on chart.
|
|
12
12
|
*/
|
|
13
13
|
export class GridDrawer {
|
|
14
|
-
constructor(canvasModel, viewportModel, config, yAxisState, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, drawPredicate = () => true, getBaseline) {
|
|
14
|
+
constructor(canvasModel, viewportModel, config, yAxisState, xBoundsProvider, yBoundsProvider, xLabelsProvider, yLabelsProvider, drawPredicate = () => true, extentIdx, getBaseline) {
|
|
15
15
|
this.canvasModel = canvasModel;
|
|
16
16
|
this.viewportModel = viewportModel;
|
|
17
17
|
this.config = config;
|
|
@@ -21,6 +21,7 @@ export class GridDrawer {
|
|
|
21
21
|
this.xLabelsProvider = xLabelsProvider;
|
|
22
22
|
this.yLabelsProvider = yLabelsProvider;
|
|
23
23
|
this.drawPredicate = drawPredicate;
|
|
24
|
+
this.extentIdx = extentIdx;
|
|
24
25
|
this.getBaseline = getBaseline;
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
@@ -41,7 +42,8 @@ export class GridDrawer {
|
|
|
41
42
|
*/
|
|
42
43
|
drawZeroLine(ctx) {
|
|
43
44
|
const yAxisLabels = this.yLabelsProvider();
|
|
44
|
-
if (this.
|
|
45
|
+
if (this.extentIdx === 0 &&
|
|
46
|
+
this.getBaseline &&
|
|
45
47
|
this.yAxisState.type === 'percent' &&
|
|
46
48
|
this.yAxisState.zeroPercentLine &&
|
|
47
49
|
yAxisLabels.length) {
|
|
@@ -94,9 +94,9 @@ export class PaneComponent extends ChartBaseElement {
|
|
|
94
94
|
* @param {() => Unit} yAxisBaselineGetter
|
|
95
95
|
* @returns {GridComponent} - The newly created GridComponent instance.
|
|
96
96
|
*/
|
|
97
|
-
createGridComponent(uuid, scale, yAxisState, yAxisLabelsGetter, yAxisBaselineGetter) {
|
|
97
|
+
createGridComponent(uuid, extentIdx, scale, yAxisState, yAxisLabelsGetter, yAxisBaselineGetter) {
|
|
98
98
|
const chartPaneId = CanvasElement.PANE_UUID(uuid);
|
|
99
|
-
const gridComponent = new GridComponent(this.mainCanvasModel, scale, this.config, yAxisState, `PANE_${uuid}_grid_drawer`, this.drawingManager, () => this.canvasBoundsContainer.getBounds(chartPaneId), () => this.canvasBoundsContainer.getBounds(chartPaneId), () => [], yAxisLabelsGetter, yAxisBaselineGetter, () => this.config.components.grid.visible);
|
|
99
|
+
const gridComponent = new GridComponent(this.mainCanvasModel, scale, this.config, yAxisState, `PANE_${uuid}_${extentIdx}_grid_drawer`, this.drawingManager, () => this.canvasBoundsContainer.getBounds(chartPaneId), () => this.canvasBoundsContainer.getBounds(chartPaneId), () => [], yAxisLabelsGetter, extentIdx, yAxisBaselineGetter, () => this.config.components.grid.visible);
|
|
100
100
|
return gridComponent;
|
|
101
101
|
}
|
|
102
102
|
/**
|
|
@@ -132,7 +132,7 @@ export class PaneComponent extends ChartBaseElement {
|
|
|
132
132
|
const [unsub, dragNDrop] = this.createYPanHandler(this.uuid, scaleModel);
|
|
133
133
|
// creating partially resolved constructor except formatter & dataSeriesProvider - bcs it's not possible to provide formatter
|
|
134
134
|
// before y-extent is created
|
|
135
|
-
const createYAxisComponent = (formatter, dataSeriesProvider) => new YAxisComponent(this.eventBus, this.config, this.yAxisLabelsCanvasModel, scaleModel, this.canvasInputListener, this.canvasBoundsContainer, this.chartPanComponent, this.cursorHandler, formatter, dataSeriesProvider, this.uuid, extentIdx, this.hitTestCanvasModel, this.chartResizeHandler, initialYAxisState);
|
|
135
|
+
const createYAxisComponent = (formatter, dataSeriesProvider) => new YAxisComponent(this.eventBus, this.config, this.mainCanvasModel, this.yAxisLabelsCanvasModel, scaleModel, this.canvasInputListener, this.canvasBoundsContainer, this.chartPanComponent, this.cursorHandler, formatter, dataSeriesProvider, this.uuid, extentIdx, this.hitTestCanvasModel, this.chartResizeHandler, initialYAxisState);
|
|
136
136
|
const yExtentComponent = new YExtentComponent(this.config.components.yAxis, this.uuid, extentIdx, this, this.chartBaseModel, this.canvasBoundsContainer, this.hitTestController, this.dynamicObjectsCanvasModel, scaleModel, createYAxisComponent, dragNDrop);
|
|
137
137
|
yExtentComponent.addSubscription(unsub);
|
|
138
138
|
yExtentComponent.addSubscription(this.addCursors(extentIdx, yExtentComponent.yAxis));
|
|
@@ -143,7 +143,7 @@ export class PaneComponent extends ChartBaseElement {
|
|
|
143
143
|
if (useDefaultHighLow) {
|
|
144
144
|
scaleModel.autoScaleModel.setHighLowProvider('default', createCandlesOffsetProvider(() => ({ top: 10, bottom: 10, left: 0, right: 0, visible: true }), createDefaultYExtentHighLowProvider(yExtentComponent)));
|
|
145
145
|
}
|
|
146
|
-
const gridComponent = this.createGridComponent(this.uuid, scaleModel, yExtentComponent.yAxis.state, () => yExtentComponent.yAxis.model.baseLabelsModel.labels, () => yExtentComponent.toY(yExtentComponent.getBaseline()));
|
|
146
|
+
const gridComponent = this.createGridComponent(this.uuid, yExtentComponent.idx, scaleModel, yExtentComponent.yAxis.state, () => yExtentComponent.yAxis.model.baseLabelsModel.labels, () => yExtentComponent.toY(yExtentComponent.getBaseline()));
|
|
147
147
|
yExtentComponent.addChildEntity(gridComponent);
|
|
148
148
|
yExtentComponent.activate();
|
|
149
149
|
this.yExtentComponents.push(yExtentComponent);
|
|
@@ -55,7 +55,9 @@ export class YAxisBaseLabelsModel extends ChartBaseElement {
|
|
|
55
55
|
* Then, it calls the updateYAxisWidth method to update the width of the y-axis.
|
|
56
56
|
*/
|
|
57
57
|
updateLabels() {
|
|
58
|
-
this.
|
|
59
|
-
|
|
58
|
+
animationFrameThrottledPrior(this.animFrameId, () => {
|
|
59
|
+
this.labels = this.labelsGenerator.generateNumericLabels();
|
|
60
|
+
this.canvasBoundsContainer.updateYAxisWidths();
|
|
61
|
+
});
|
|
60
62
|
}
|
|
61
63
|
}
|
|
@@ -30,6 +30,7 @@ export type LabelColorResolver = (priceMovement: PriceMovement, colors: FullChar
|
|
|
30
30
|
export declare class YAxisComponent extends ChartBaseElement {
|
|
31
31
|
private eventBus;
|
|
32
32
|
private config;
|
|
33
|
+
private mainCanvasModel;
|
|
33
34
|
private canvasModel;
|
|
34
35
|
scale: ScaleModel;
|
|
35
36
|
private canvasInputListeners;
|
|
@@ -47,7 +48,7 @@ export declare class YAxisComponent extends ChartBaseElement {
|
|
|
47
48
|
axisAlignSetSubject: Subject<YAxisAlign>;
|
|
48
49
|
axisAlignMovedSubject: Subject<YAxisAlign>;
|
|
49
50
|
readonly state: YAxisConfig;
|
|
50
|
-
constructor(eventBus: EventBus, config: FullChartConfig, canvasModel: CanvasModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent, cursors: CursorHandler, valueFormatter: (value: number) => string, dataSeriesProvider: () => DataSeriesModel | undefined, paneUUID: string, extentIdx: number, hitTestCanvasModel: HitTestCanvasModel, chartResizeHandler: ChartResizeHandler, initialState?: YAxisConfig);
|
|
51
|
+
constructor(eventBus: EventBus, config: FullChartConfig, mainCanvasModel: CanvasModel, canvasModel: CanvasModel, scale: ScaleModel, canvasInputListeners: CanvasInputListenerComponent, canvasBoundsContainer: CanvasBoundsContainer, chartPanComponent: ChartPanComponent, cursors: CursorHandler, valueFormatter: (value: number) => string, dataSeriesProvider: () => DataSeriesModel | undefined, paneUUID: string, extentIdx: number, hitTestCanvasModel: HitTestCanvasModel, chartResizeHandler: ChartResizeHandler, initialState?: YAxisConfig);
|
|
51
52
|
setExtentIdx(extentIdx: number): void;
|
|
52
53
|
/**
|
|
53
54
|
* Registers default label color resolvers for different chart types.
|
|
@@ -88,10 +89,17 @@ export declare class YAxisComponent extends ChartBaseElement {
|
|
|
88
89
|
/**
|
|
89
90
|
* An easier way to manage custom y-axis labels, than y-axis labels providers.
|
|
90
91
|
* However, overlapping avoidance is not supported
|
|
92
|
+
* deprecated because of naming, use updateCustomYAxisLabel instead
|
|
91
93
|
* @param name
|
|
92
94
|
* @param label
|
|
93
95
|
*/
|
|
94
96
|
addSimpleYAxisLabel(name: string, label: VisualYAxisLabel): void;
|
|
97
|
+
/**
|
|
98
|
+
* Update custom y-axis label
|
|
99
|
+
* @param name
|
|
100
|
+
* @param label
|
|
101
|
+
*/
|
|
102
|
+
updateCustomYAxisLabel(name: string, label: VisualYAxisLabel): void;
|
|
95
103
|
/**
|
|
96
104
|
* @param name
|
|
97
105
|
*/
|
|
@@ -17,10 +17,11 @@ import { cloneUnsafe } from '../../utils/object.utils';
|
|
|
17
17
|
* Y axis component. Contains all Y axis related logic.
|
|
18
18
|
*/
|
|
19
19
|
export class YAxisComponent extends ChartBaseElement {
|
|
20
|
-
constructor(eventBus, config, canvasModel, scale, canvasInputListeners, canvasBoundsContainer, chartPanComponent, cursors, valueFormatter, dataSeriesProvider, paneUUID, extentIdx, hitTestCanvasModel, chartResizeHandler, initialState) {
|
|
20
|
+
constructor(eventBus, config, mainCanvasModel, canvasModel, scale, canvasInputListeners, canvasBoundsContainer, chartPanComponent, cursors, valueFormatter, dataSeriesProvider, paneUUID, extentIdx, hitTestCanvasModel, chartResizeHandler, initialState) {
|
|
21
21
|
super();
|
|
22
22
|
this.eventBus = eventBus;
|
|
23
23
|
this.config = config;
|
|
24
|
+
this.mainCanvasModel = mainCanvasModel;
|
|
24
25
|
this.canvasModel = canvasModel;
|
|
25
26
|
this.scale = scale;
|
|
26
27
|
this.canvasInputListeners = canvasInputListeners;
|
|
@@ -138,6 +139,7 @@ export class YAxisComponent extends ChartBaseElement {
|
|
|
138
139
|
/**
|
|
139
140
|
* An easier way to manage custom y-axis labels, than y-axis labels providers.
|
|
140
141
|
* However, overlapping avoidance is not supported
|
|
142
|
+
* deprecated because of naming, use updateCustomYAxisLabel instead
|
|
141
143
|
* @param name
|
|
142
144
|
* @param label
|
|
143
145
|
*/
|
|
@@ -145,6 +147,15 @@ export class YAxisComponent extends ChartBaseElement {
|
|
|
145
147
|
this.model.fancyLabelsModel.customLabels[name] = label;
|
|
146
148
|
this.canvasModel.fireDraw();
|
|
147
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Update custom y-axis label
|
|
152
|
+
* @param name
|
|
153
|
+
* @param label
|
|
154
|
+
*/
|
|
155
|
+
updateCustomYAxisLabel(name, label) {
|
|
156
|
+
this.model.fancyLabelsModel.customLabels[name] = label;
|
|
157
|
+
this.canvasModel.fireDraw();
|
|
158
|
+
}
|
|
148
159
|
/**
|
|
149
160
|
* @param name
|
|
150
161
|
*/
|
|
@@ -187,6 +198,7 @@ export class YAxisComponent extends ChartBaseElement {
|
|
|
187
198
|
this.scale.autoScale(true);
|
|
188
199
|
this.model.fancyLabelsModel.updateLabels(true);
|
|
189
200
|
this.updateCursor();
|
|
201
|
+
this.mainCanvasModel.fireDraw();
|
|
190
202
|
}
|
|
191
203
|
}
|
|
192
204
|
/**
|