@operato/scene-scichart 7.2.6 → 7.2.7
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/CHANGELOG.md +11 -0
- package/db.sqlite +0 -0
- package/dist/charts/ox-scichart-multiple copy.d.ts +53 -0
- package/dist/charts/ox-scichart-multiple copy.js +411 -0
- package/dist/charts/ox-scichart-multiple copy.js.map +1 -0
- package/dist/charts/ox-scichart-multiple.d.ts +9 -8
- package/dist/charts/ox-scichart-multiple.js +209 -85
- package/dist/charts/ox-scichart-multiple.js.map +1 -1
- package/dist/charts/scichart-builder copy.d.ts +22 -0
- package/dist/charts/scichart-builder copy.js +420 -0
- package/dist/charts/scichart-builder copy.js.map +1 -0
- package/dist/charts/scichart-builder.d.ts +2 -0
- package/dist/charts/scichart-builder.js +44 -30
- package/dist/charts/scichart-builder.js.map +1 -1
- package/dist/charts/scichart-overview-builder.d.ts +13 -0
- package/dist/charts/scichart-overview-builder.js +219 -0
- package/dist/charts/scichart-overview-builder.js.map +1 -0
- package/dist/templates/scichart-multiple-timeseries.d.ts +1 -1
- package/dist/templates/scichart-multiple-timeseries.js +1 -1
- package/dist/templates/scichart-multiple-timeseries.js.map +1 -1
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +20 -10
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +15 -0
- package/logs/{application-2024-08-02-17.log → application-2024-08-04-01.log} +8 -8
- package/logs/application-2024-08-04-04.log +420 -0
- package/logs/application-2024-08-04-18.log +2 -0
- package/logs/{application-2024-08-02-18.log → application-2024-08-04-19.log} +8 -8
- package/logs/connections-2024-08-04-01.log +50 -0
- package/logs/connections-2024-08-04-04.log +200 -0
- package/logs/connections-2024-08-04-19.log +50 -0
- package/package.json +2 -2
- package/src/charts/ox-scichart-multiple.ts +256 -99
- package/src/charts/scichart-builder.ts +47 -30
- package/src/templates/scichart-multiple-timeseries.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
import { TinyColor } from '@ctrl/tinycolor';
|
|
2
|
+
import { SciChartSurface, SciChartJSLightTheme, SciChartJSDarkv2Theme, XyDataSeries, FastLineRenderableSeries, SplineLineRenderableSeries, FastColumnRenderableSeries, StackedColumnRenderableSeries, StackedMountainRenderableSeries, StackedColumnCollection, StackedMountainCollection, NumericAxis, DateTimeNumericAxis, EAutoRange, EAxisAlignment, EExecuteOn, ECoordinateMode, EHorizontalAnchorPoint, EVerticalAnchorPoint, NumberRange, MouseWheelZoomModifier, RubberBandXyZoomModifier, ZoomPanModifier, ZoomExtentsModifier, RolloverModifier, NumericLabelProvider, SmartDateLabelProvider, EllipsePointMarker, SquarePointMarker, TrianglePointMarker, CrossPointMarker, XPointMarker, WaveAnimation, LegendModifier, ELegendPlacement, EXyDirection, XAxisDragModifier, YAxisDragModifier, TextAnnotation, LineAnnotation, BoxAnnotation, HorizontalLineAnnotation, VerticalLineAnnotation, OverviewRangeSelectionModifier, ENumericFormat } from 'scichart';
|
|
3
|
+
SciChartSurface.UseCommunityLicense();
|
|
4
|
+
SciChartSurface.configure({
|
|
5
|
+
dataUrl: `/node_modules/scichart/_wasm/scichart2d.data`,
|
|
6
|
+
wasmUrl: `/node_modules/scichart/_wasm/scichart2d.wasm`
|
|
7
|
+
});
|
|
8
|
+
const DEFAULT_COLOR = '#FF6600';
|
|
9
|
+
const DEFAULT_STROKE = '#000000';
|
|
10
|
+
const POINT_MARKER_SIZE = 10;
|
|
11
|
+
const STROKE_THICKNESS = 2;
|
|
12
|
+
const ANIMATION_DURATION = 1000;
|
|
13
|
+
function getLocalTimeOffset() {
|
|
14
|
+
const now = new Date();
|
|
15
|
+
return now.getTimezoneOffset() * -60;
|
|
16
|
+
}
|
|
17
|
+
function getBaseColorFromTheme(theme) {
|
|
18
|
+
return new TinyColor(theme == 'dark' ? '#fff' : '#000');
|
|
19
|
+
}
|
|
20
|
+
function getThemeFromBrowser() {
|
|
21
|
+
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
22
|
+
}
|
|
23
|
+
export function convertColor(color, defaultColor) {
|
|
24
|
+
const tinyColor = new TinyColor(color);
|
|
25
|
+
return tinyColor.toHex8String() || defaultColor;
|
|
26
|
+
}
|
|
27
|
+
export function calculatePrecision(format = '') {
|
|
28
|
+
const formatString = format.toString();
|
|
29
|
+
if (formatString.indexOf('.') !== -1) {
|
|
30
|
+
return formatString.split('.')[1].length;
|
|
31
|
+
}
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
function createPointMarker(wasmContext, dataset, color = DEFAULT_COLOR) {
|
|
35
|
+
const { pointStyle, pointRadius = POINT_MARKER_SIZE } = dataset || {};
|
|
36
|
+
if (!pointStyle) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const pointMarkerOptions = {
|
|
40
|
+
width: pointRadius,
|
|
41
|
+
height: pointRadius,
|
|
42
|
+
strokeThickness: STROKE_THICKNESS,
|
|
43
|
+
fill: color,
|
|
44
|
+
stroke: DEFAULT_STROKE
|
|
45
|
+
};
|
|
46
|
+
switch (pointStyle) {
|
|
47
|
+
case 'triangle':
|
|
48
|
+
return new TrianglePointMarker(wasmContext, pointMarkerOptions);
|
|
49
|
+
case 'rect':
|
|
50
|
+
return new SquarePointMarker(wasmContext, pointMarkerOptions);
|
|
51
|
+
case 'cross':
|
|
52
|
+
return new CrossPointMarker(wasmContext, pointMarkerOptions);
|
|
53
|
+
case 'crossRot':
|
|
54
|
+
return new XPointMarker(wasmContext, pointMarkerOptions);
|
|
55
|
+
default:
|
|
56
|
+
return new EllipsePointMarker(wasmContext, pointMarkerOptions);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function createAxis(wasmContext, axis, index, isXAxis, fontColor, fontFamily, fontSize, precision, options) {
|
|
60
|
+
const { axisTitle, ticks } = axis;
|
|
61
|
+
const { autoMax, autoMin, min, max, stepSize, beginAtZero, color = fontColor, textStrokeColor = fontColor, display = false } = ticks || {};
|
|
62
|
+
const axisOptions = {
|
|
63
|
+
axisTitle,
|
|
64
|
+
autoRange: autoMin || autoMax ? EAutoRange.Always : EAutoRange.Once,
|
|
65
|
+
axisAlignment: isXAxis ? EAxisAlignment.Bottom : index === 0 ? EAxisAlignment.Left : EAxisAlignment.Right,
|
|
66
|
+
visibleRange: min !== undefined && max !== undefined ? new NumberRange(min, max) : undefined,
|
|
67
|
+
majorDelta: stepSize,
|
|
68
|
+
growBy: beginAtZero ? new NumberRange(0.1, 0.1) : undefined,
|
|
69
|
+
labelStyle: {
|
|
70
|
+
fontFamily,
|
|
71
|
+
fontSize,
|
|
72
|
+
color
|
|
73
|
+
},
|
|
74
|
+
axisTitleStyle: {
|
|
75
|
+
fontFamily,
|
|
76
|
+
fontSize,
|
|
77
|
+
color: textStrokeColor
|
|
78
|
+
},
|
|
79
|
+
...options,
|
|
80
|
+
drawLabels: display
|
|
81
|
+
};
|
|
82
|
+
const labelProvider = isXAxis
|
|
83
|
+
? new SmartDateLabelProvider({
|
|
84
|
+
showWiderDateOnFirstLabel: true,
|
|
85
|
+
showYearOnWiderDate: false,
|
|
86
|
+
dateOffset: getLocalTimeOffset()
|
|
87
|
+
})
|
|
88
|
+
: new NumericLabelProvider();
|
|
89
|
+
if (isXAxis) {
|
|
90
|
+
labelProvider.cursorNumericFormat = ENumericFormat.Date_HHMMSS;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
labelProvider.numericFormat = ENumericFormat.Decimal;
|
|
94
|
+
labelProvider.precision = precision || calculatePrecision(stepSize || 0.1);
|
|
95
|
+
labelProvider.cursorNumericFormat = ENumericFormat.NoFormat;
|
|
96
|
+
}
|
|
97
|
+
return isXAxis
|
|
98
|
+
? new DateTimeNumericAxis(wasmContext, {
|
|
99
|
+
...axisOptions,
|
|
100
|
+
labelProvider
|
|
101
|
+
})
|
|
102
|
+
: new NumericAxis(wasmContext, {
|
|
103
|
+
...axisOptions,
|
|
104
|
+
id: index !== 0 ? `yAxis${index}` : undefined,
|
|
105
|
+
labelProvider
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function createSeries(wasmContext, dataset, index, stacked, animation, yAxisId) {
|
|
109
|
+
const dataSeries = new XyDataSeries(wasmContext, {
|
|
110
|
+
dataSeriesName: dataset.label,
|
|
111
|
+
containsNaN: false
|
|
112
|
+
});
|
|
113
|
+
const stackGroupId = dataset.stack || `__stack${index}__`;
|
|
114
|
+
const color = convertColor(dataset.backgroundColor, DEFAULT_COLOR);
|
|
115
|
+
const strokeColor = convertColor(dataset.color, DEFAULT_COLOR);
|
|
116
|
+
const borderWidth = dataset.borderWidth || STROKE_THICKNESS;
|
|
117
|
+
const pointMarker = createPointMarker(wasmContext, dataset, strokeColor);
|
|
118
|
+
let series;
|
|
119
|
+
if (dataset.type === 'bar') {
|
|
120
|
+
series = stacked
|
|
121
|
+
? new StackedColumnRenderableSeries(wasmContext, {
|
|
122
|
+
dataSeries,
|
|
123
|
+
strokeThickness: borderWidth,
|
|
124
|
+
fill: color,
|
|
125
|
+
stackedGroupId: stackGroupId
|
|
126
|
+
})
|
|
127
|
+
: new FastColumnRenderableSeries(wasmContext, {
|
|
128
|
+
dataSeries,
|
|
129
|
+
strokeThickness: borderWidth,
|
|
130
|
+
fill: color,
|
|
131
|
+
animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,
|
|
132
|
+
yAxisId
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
series = stacked
|
|
137
|
+
? new StackedMountainRenderableSeries(wasmContext, {
|
|
138
|
+
dataSeries,
|
|
139
|
+
strokeThickness: borderWidth,
|
|
140
|
+
stroke: strokeColor,
|
|
141
|
+
fill: color
|
|
142
|
+
})
|
|
143
|
+
: dataset.lineTension && dataset.lineTension > 0
|
|
144
|
+
? new SplineLineRenderableSeries(wasmContext, {
|
|
145
|
+
dataSeries,
|
|
146
|
+
strokeThickness: borderWidth,
|
|
147
|
+
stroke: strokeColor,
|
|
148
|
+
pointMarker,
|
|
149
|
+
animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,
|
|
150
|
+
yAxisId
|
|
151
|
+
})
|
|
152
|
+
: new FastLineRenderableSeries(wasmContext, {
|
|
153
|
+
dataSeries,
|
|
154
|
+
strokeThickness: borderWidth,
|
|
155
|
+
stroke: strokeColor,
|
|
156
|
+
pointMarker,
|
|
157
|
+
animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,
|
|
158
|
+
yAxisId
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return { series, dataSeries };
|
|
162
|
+
}
|
|
163
|
+
export async function buildSciChart(config, container, { fontSize = 14, fontFamily = 'Roboto', fontColor }, { grouped, precision }) {
|
|
164
|
+
if (!config)
|
|
165
|
+
return;
|
|
166
|
+
const { type: chartType, options, data: fromData } = config;
|
|
167
|
+
const { datasets = [] } = fromData || {};
|
|
168
|
+
var { theme, tooltip = true, animation = true, legend = {
|
|
169
|
+
display: true,
|
|
170
|
+
position: 'top'
|
|
171
|
+
}, scales: fromScales, xGridLine = false, yGridLine = false, y2ndGridLine = false, stacked = false, multiAxis = false, annotations = [] } = options || {};
|
|
172
|
+
var baseColor = getBaseColorFromTheme(theme);
|
|
173
|
+
if (theme === 'auto') {
|
|
174
|
+
theme = getThemeFromBrowser();
|
|
175
|
+
}
|
|
176
|
+
fontColor = fontColor || baseColor.clone().toString();
|
|
177
|
+
const { xAxes = [], yAxes = [] } = fromScales || {};
|
|
178
|
+
const chart = await SciChartSurface.create(container, {
|
|
179
|
+
theme: theme == 'dark' ? new SciChartJSDarkv2Theme() : new SciChartJSLightTheme()
|
|
180
|
+
});
|
|
181
|
+
const { sciChartSurface, wasmContext } = chart;
|
|
182
|
+
xAxes.forEach((axis, index) => {
|
|
183
|
+
const xAxis = createAxis(wasmContext, axis, index, true, fontColor, fontFamily, fontSize, undefined, {
|
|
184
|
+
drawMajorTickLines: true,
|
|
185
|
+
drawMinorTickLines: true,
|
|
186
|
+
drawMajorGridLines: xGridLine,
|
|
187
|
+
drawMinorGridLines: xGridLine
|
|
188
|
+
});
|
|
189
|
+
sciChartSurface.xAxes.add(xAxis);
|
|
190
|
+
});
|
|
191
|
+
(multiAxis ? yAxes : [yAxes[0]]).forEach((axis, index) => {
|
|
192
|
+
const yAxis = createAxis(wasmContext, axis, index, false, fontColor, fontFamily, fontSize, precision, {
|
|
193
|
+
drawMajorTickLines: true,
|
|
194
|
+
drawMinorTickLines: true,
|
|
195
|
+
drawMajorGridLines: index == 0 ? yGridLine : y2ndGridLine,
|
|
196
|
+
drawMinorGridLines: index == 0 ? yGridLine : y2ndGridLine
|
|
197
|
+
});
|
|
198
|
+
sciChartSurface.yAxes.add(yAxis);
|
|
199
|
+
});
|
|
200
|
+
const dataSeriesArray = datasets.map((dataset, index) => {
|
|
201
|
+
const yAxisId = dataset.yAxisID == 'right' && multiAxis ? 'yAxis1' : undefined;
|
|
202
|
+
const { series, dataSeries } = createSeries(wasmContext, dataset, index, !!stacked, !!animation, yAxisId);
|
|
203
|
+
sciChartSurface.renderableSeries.add(series);
|
|
204
|
+
if (tooltip) {
|
|
205
|
+
const rolloverModifier = new RolloverModifier({
|
|
206
|
+
showTooltip: true,
|
|
207
|
+
showAxisLabel: true /* show x-axis label for cursor */,
|
|
208
|
+
modifierGroup: grouped,
|
|
209
|
+
tooltipDataTemplate: (seriesInfo) => {
|
|
210
|
+
const valuesWithLabels = [];
|
|
211
|
+
const xySeriesInfo = seriesInfo;
|
|
212
|
+
valuesWithLabels.push(xySeriesInfo.formattedYValue);
|
|
213
|
+
return valuesWithLabels;
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
sciChartSurface.chartModifiers.add(rolloverModifier);
|
|
217
|
+
}
|
|
218
|
+
return dataSeries;
|
|
219
|
+
});
|
|
220
|
+
if (stacked) {
|
|
221
|
+
const stackedColumnCollection = new StackedColumnCollection(wasmContext);
|
|
222
|
+
const stackedMountainCollection = new StackedMountainCollection(wasmContext);
|
|
223
|
+
sciChartSurface.renderableSeries.asArray().forEach((series) => {
|
|
224
|
+
if (series instanceof StackedColumnRenderableSeries) {
|
|
225
|
+
stackedColumnCollection.add(series);
|
|
226
|
+
}
|
|
227
|
+
else if (series instanceof StackedMountainRenderableSeries) {
|
|
228
|
+
stackedMountainCollection.add(series);
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
if (stackedColumnCollection.size() > 0) {
|
|
232
|
+
sciChartSurface.renderableSeries.add(stackedColumnCollection);
|
|
233
|
+
}
|
|
234
|
+
if (stackedMountainCollection.size() > 0) {
|
|
235
|
+
sciChartSurface.renderableSeries.add(stackedMountainCollection);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (annotations) {
|
|
239
|
+
annotations.forEach(annotation => {
|
|
240
|
+
let sciAnnotation;
|
|
241
|
+
let horizontalAnchorPoint = annotation.horizontalAnchorPoint == 'Right'
|
|
242
|
+
? EHorizontalAnchorPoint.Right
|
|
243
|
+
: annotation.horizontalAnchorPoint == 'Left'
|
|
244
|
+
? EHorizontalAnchorPoint.Left
|
|
245
|
+
: EHorizontalAnchorPoint.Center;
|
|
246
|
+
let verticalAnchorPoint = annotation.verticalAnchorPoint == 'Top'
|
|
247
|
+
? EVerticalAnchorPoint.Top
|
|
248
|
+
: annotation.verticalAnchorPoint == 'Bottom'
|
|
249
|
+
? EVerticalAnchorPoint.Bottom
|
|
250
|
+
: EVerticalAnchorPoint.Center;
|
|
251
|
+
switch (annotation.type) {
|
|
252
|
+
case 'text':
|
|
253
|
+
sciAnnotation = new TextAnnotation({
|
|
254
|
+
x1: annotation.x1,
|
|
255
|
+
y1: annotation.y1,
|
|
256
|
+
text: annotation.text,
|
|
257
|
+
horizontalAnchorPoint,
|
|
258
|
+
verticalAnchorPoint,
|
|
259
|
+
fontSize: annotation.fontSize,
|
|
260
|
+
fontFamily: annotation.fontFamily,
|
|
261
|
+
textColor: convertColor(annotation.stroke, fontColor),
|
|
262
|
+
xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue),
|
|
263
|
+
yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue)
|
|
264
|
+
});
|
|
265
|
+
break;
|
|
266
|
+
case 'line':
|
|
267
|
+
sciAnnotation = new LineAnnotation({
|
|
268
|
+
x1: annotation.x1,
|
|
269
|
+
y1: annotation.y1,
|
|
270
|
+
x2: annotation.x2,
|
|
271
|
+
y2: annotation.y2,
|
|
272
|
+
stroke: convertColor(annotation.stroke, '#FF0000'),
|
|
273
|
+
strokeThickness: annotation.strokeThickness,
|
|
274
|
+
xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue),
|
|
275
|
+
yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue)
|
|
276
|
+
});
|
|
277
|
+
break;
|
|
278
|
+
case 'box':
|
|
279
|
+
sciAnnotation = new BoxAnnotation({
|
|
280
|
+
x1: annotation.x1,
|
|
281
|
+
y1: annotation.y1,
|
|
282
|
+
x2: annotation.x2,
|
|
283
|
+
y2: annotation.y2,
|
|
284
|
+
fill: convertColor(annotation.fill, '#FF0000'),
|
|
285
|
+
stroke: convertColor(annotation.stroke, '#FF0000'),
|
|
286
|
+
strokeThickness: annotation.strokeThickness,
|
|
287
|
+
xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue),
|
|
288
|
+
yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue)
|
|
289
|
+
});
|
|
290
|
+
break;
|
|
291
|
+
case 'horizontalLine':
|
|
292
|
+
sciAnnotation = new HorizontalLineAnnotation({
|
|
293
|
+
y1: annotation.y1,
|
|
294
|
+
stroke: convertColor(annotation.stroke, '#FF0000'),
|
|
295
|
+
strokeThickness: annotation.strokeThickness,
|
|
296
|
+
xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue),
|
|
297
|
+
yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue)
|
|
298
|
+
});
|
|
299
|
+
break;
|
|
300
|
+
case 'verticalLine':
|
|
301
|
+
sciAnnotation = new VerticalLineAnnotation({
|
|
302
|
+
x1: annotation.x1,
|
|
303
|
+
stroke: convertColor(annotation.stroke, '#FF0000'),
|
|
304
|
+
strokeThickness: annotation.strokeThickness,
|
|
305
|
+
xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue),
|
|
306
|
+
yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue)
|
|
307
|
+
});
|
|
308
|
+
break;
|
|
309
|
+
default:
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
if (sciAnnotation) {
|
|
313
|
+
sciChartSurface.annotations.add(sciAnnotation);
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
sciChartSurface.chartModifiers.add(new RubberBandXyZoomModifier({ executeOn: EExecuteOn.MouseRightButton, modifierGroup: grouped }),
|
|
318
|
+
// new ZoomPanModifier({ xyDirection: EXyDirection.XDirection }),
|
|
319
|
+
new ZoomPanModifier({ xyDirection: EXyDirection.XDirection }), new MouseWheelZoomModifier({ xyDirection: EXyDirection.XDirection }), new ZoomExtentsModifier(), new XAxisDragModifier(), new YAxisDragModifier());
|
|
320
|
+
if (legend === null || legend === void 0 ? void 0 : legend.display) {
|
|
321
|
+
const legendModifier = new LegendModifier({
|
|
322
|
+
showCheckboxes: true,
|
|
323
|
+
showSeriesMarkers: true,
|
|
324
|
+
showLegend: true,
|
|
325
|
+
placement: legend.position == 'top'
|
|
326
|
+
? ELegendPlacement.TopLeft
|
|
327
|
+
: legend.position == 'left'
|
|
328
|
+
? ELegendPlacement.BottomLeft
|
|
329
|
+
: legend.position == 'bottom'
|
|
330
|
+
? ELegendPlacement.BottomRight
|
|
331
|
+
: ELegendPlacement.TopRight
|
|
332
|
+
});
|
|
333
|
+
sciChartSurface.chartModifiers.add(legendModifier);
|
|
334
|
+
}
|
|
335
|
+
return { chart, dataSeries: dataSeriesArray };
|
|
336
|
+
}
|
|
337
|
+
export async function buildSciChartOverview(config, container, { fontSize = 14, fontFamily = 'Roboto', fontColor }, axisSynchroniser) {
|
|
338
|
+
if (!config)
|
|
339
|
+
return;
|
|
340
|
+
const { type: chartType, options, data: fromData } = config;
|
|
341
|
+
const { datasets = [] } = fromData || {};
|
|
342
|
+
var { theme, scales: fromScales } = options || {};
|
|
343
|
+
var baseColor = getBaseColorFromTheme(theme);
|
|
344
|
+
if (theme === 'auto') {
|
|
345
|
+
theme = getThemeFromBrowser();
|
|
346
|
+
}
|
|
347
|
+
fontColor = fontColor || baseColor.clone().toString();
|
|
348
|
+
const { xAxes = [], yAxes = [] } = fromScales || {};
|
|
349
|
+
const chart = await SciChartSurface.create(container, {
|
|
350
|
+
theme: theme == 'dark' ? new SciChartJSDarkv2Theme() : new SciChartJSLightTheme()
|
|
351
|
+
});
|
|
352
|
+
const { sciChartSurface, wasmContext } = chart;
|
|
353
|
+
xAxes.forEach((axis, index) => {
|
|
354
|
+
const xAxis = createAxis(wasmContext, axis, index, true, fontColor, fontFamily, fontSize, undefined, {
|
|
355
|
+
drawMajorTickLines: false,
|
|
356
|
+
drawMinorTickLines: false,
|
|
357
|
+
drawMajorGridLines: false,
|
|
358
|
+
drawMinorGridLines: false
|
|
359
|
+
});
|
|
360
|
+
sciChartSurface.xAxes.add(xAxis);
|
|
361
|
+
});
|
|
362
|
+
const dataSeriesArray = datasets.map((dataset, index) => {
|
|
363
|
+
const yAxisId = `yAxis${index}`;
|
|
364
|
+
const dataSeries = new XyDataSeries(wasmContext, {
|
|
365
|
+
dataSeriesName: dataset.label,
|
|
366
|
+
containsNaN: false
|
|
367
|
+
});
|
|
368
|
+
const yAxis = new NumericAxis(wasmContext, {
|
|
369
|
+
id: yAxisId,
|
|
370
|
+
autoRange: EAutoRange.Always,
|
|
371
|
+
drawLabels: false,
|
|
372
|
+
drawMajorTickLines: false,
|
|
373
|
+
drawMinorTickLines: false,
|
|
374
|
+
drawMajorGridLines: false,
|
|
375
|
+
drawMinorGridLines: false
|
|
376
|
+
});
|
|
377
|
+
sciChartSurface.yAxes.add(yAxis);
|
|
378
|
+
const series = new FastLineRenderableSeries(wasmContext, {
|
|
379
|
+
dataSeries,
|
|
380
|
+
strokeThickness: 1,
|
|
381
|
+
stroke: convertColor(dataset.color, DEFAULT_COLOR),
|
|
382
|
+
yAxisId: yAxisId
|
|
383
|
+
});
|
|
384
|
+
sciChartSurface.renderableSeries.add(series);
|
|
385
|
+
return dataSeries;
|
|
386
|
+
});
|
|
387
|
+
if (dataSeriesArray.length == 0) {
|
|
388
|
+
getDefaultYAxis(wasmContext, sciChartSurface);
|
|
389
|
+
}
|
|
390
|
+
const rangeSelectionModifier = new OverviewRangeSelectionModifier();
|
|
391
|
+
rangeSelectionModifier.onSelectedAreaChanged = (selectedRange) => {
|
|
392
|
+
if (!selectedRange.equals(axisSynchroniser.visibleRange)) {
|
|
393
|
+
axisSynchroniser.publishChange({ visibleRange: selectedRange });
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
rangeSelectionModifier.selectedArea = axisSynchroniser.visibleRange;
|
|
397
|
+
sciChartSurface.chartModifiers.add(rangeSelectionModifier);
|
|
398
|
+
axisSynchroniser.visibleRangeChanged.subscribe(({ visibleRange }) => {
|
|
399
|
+
const xAxis = sciChartSurface.xAxes.get(0);
|
|
400
|
+
const updatedSelectedRange = visibleRange.clip(xAxis.visibleRange);
|
|
401
|
+
const shouldUpdateSelectedRange = !updatedSelectedRange.equals(rangeSelectionModifier.selectedArea);
|
|
402
|
+
if (shouldUpdateSelectedRange) {
|
|
403
|
+
rangeSelectionModifier.selectedArea = updatedSelectedRange;
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
return { chart, dataSeries: dataSeriesArray };
|
|
407
|
+
}
|
|
408
|
+
function getDefaultYAxis(wasmContext, sciChartSurface) {
|
|
409
|
+
const yAxis = new NumericAxis(wasmContext, {
|
|
410
|
+
id: 'DefaultAxisId',
|
|
411
|
+
autoRange: EAutoRange.Always,
|
|
412
|
+
drawLabels: false,
|
|
413
|
+
drawMajorTickLines: false,
|
|
414
|
+
drawMinorTickLines: false,
|
|
415
|
+
drawMajorGridLines: false,
|
|
416
|
+
drawMinorGridLines: false
|
|
417
|
+
});
|
|
418
|
+
sciChartSurface.yAxes.add(yAxis);
|
|
419
|
+
}
|
|
420
|
+
//# sourceMappingURL=scichart-builder%20copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scichart-builder copy.js","sourceRoot":"","sources":["../../src/charts/scichart-builder copy.ts"],"names":[],"mappings":"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","sourcesContent":["import { TinyColor } from '@ctrl/tinycolor'\nimport {\n SciChartSurface,\n SciChartJSLightTheme,\n SciChartJSDarkv2Theme,\n XyDataSeries,\n FastLineRenderableSeries,\n SplineLineRenderableSeries,\n FastColumnRenderableSeries,\n StackedColumnRenderableSeries,\n StackedMountainRenderableSeries,\n StackedColumnCollection,\n StackedMountainCollection,\n NumericAxis,\n DateTimeNumericAxis,\n EAutoRange,\n EAxisAlignment,\n EExecuteOn,\n ECoordinateMode,\n EHorizontalAnchorPoint,\n EVerticalAnchorPoint,\n NumberRange,\n MouseWheelZoomModifier,\n RubberBandXyZoomModifier,\n ZoomPanModifier,\n ZoomExtentsModifier,\n RolloverModifier,\n NumericLabelProvider,\n SmartDateLabelProvider,\n EllipsePointMarker,\n SquarePointMarker,\n TrianglePointMarker,\n CrossPointMarker,\n XPointMarker,\n WaveAnimation,\n LegendModifier,\n ELegendPlacement,\n EXyDirection,\n XAxisDragModifier,\n YAxisDragModifier,\n TextAnnotation,\n LineAnnotation,\n BoxAnnotation,\n HorizontalLineAnnotation,\n VerticalLineAnnotation,\n OverviewRangeSelectionModifier,\n ENumericFormat,\n XySeriesInfo\n} from 'scichart'\nimport { AxisSynchroniser } from './axis-synchronizer'\n\nSciChartSurface.UseCommunityLicense()\n\nSciChartSurface.configure({\n dataUrl: `/node_modules/scichart/_wasm/scichart2d.data`,\n wasmUrl: `/node_modules/scichart/_wasm/scichart2d.wasm`\n})\n\nconst DEFAULT_COLOR = '#FF6600'\nconst DEFAULT_STROKE = '#000000'\nconst POINT_MARKER_SIZE = 10\nconst STROKE_THICKNESS = 2\nconst ANIMATION_DURATION = 1000\n\nfunction getLocalTimeOffset() {\n const now = new Date()\n return now.getTimezoneOffset() * -60\n}\n\nfunction getBaseColorFromTheme(theme?: 'light' | 'dark' | 'auto') {\n return new TinyColor(theme == 'dark' ? '#fff' : '#000')\n}\n\nfunction getThemeFromBrowser() {\n return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\nexport function convertColor(color: string | string[] | undefined, defaultColor?: string) {\n const tinyColor = new TinyColor(color as string)\n return tinyColor.toHex8String() || defaultColor\n}\n\nexport function calculatePrecision(format: string | number = '') {\n const formatString = format.toString()\n\n if (formatString.indexOf('.') !== -1) {\n return formatString.split('.')[1].length\n }\n\n return 0\n}\n\nfunction createPointMarker(wasmContext: any, dataset: any, color: string = DEFAULT_COLOR) {\n const { pointStyle, pointRadius = POINT_MARKER_SIZE } = dataset || {}\n\n if (!pointStyle) {\n return\n }\n\n const pointMarkerOptions = {\n width: pointRadius,\n height: pointRadius,\n strokeThickness: STROKE_THICKNESS,\n fill: color,\n stroke: DEFAULT_STROKE\n }\n\n switch (pointStyle) {\n case 'triangle':\n return new TrianglePointMarker(wasmContext, pointMarkerOptions)\n case 'rect':\n return new SquarePointMarker(wasmContext, pointMarkerOptions)\n case 'cross':\n return new CrossPointMarker(wasmContext, pointMarkerOptions)\n case 'crossRot':\n return new XPointMarker(wasmContext, pointMarkerOptions)\n default:\n return new EllipsePointMarker(wasmContext, pointMarkerOptions)\n }\n}\n\nfunction createAxis(\n wasmContext: any,\n axis: any,\n index: number,\n isXAxis: boolean,\n fontColor: string,\n fontFamily?: string,\n fontSize?: number,\n precision?: number,\n options?: any\n) {\n const { axisTitle, ticks } = axis\n const {\n autoMax,\n autoMin,\n min,\n max,\n stepSize,\n beginAtZero,\n color = fontColor,\n textStrokeColor = fontColor,\n display = false\n } = ticks || {}\n\n const axisOptions = {\n axisTitle,\n autoRange: autoMin || autoMax ? EAutoRange.Always : EAutoRange.Once,\n axisAlignment: isXAxis ? EAxisAlignment.Bottom : index === 0 ? EAxisAlignment.Left : EAxisAlignment.Right,\n visibleRange: min !== undefined && max !== undefined ? new NumberRange(min, max) : undefined,\n majorDelta: stepSize,\n growBy: beginAtZero ? new NumberRange(0.1, 0.1) : undefined,\n labelStyle: {\n fontFamily,\n fontSize,\n color\n },\n axisTitleStyle: {\n fontFamily,\n fontSize,\n color: textStrokeColor\n },\n ...options,\n drawLabels: display\n }\n\n const labelProvider = isXAxis\n ? new SmartDateLabelProvider({\n showWiderDateOnFirstLabel: true,\n showYearOnWiderDate: false,\n dateOffset: getLocalTimeOffset()\n })\n : new NumericLabelProvider()\n\n if (isXAxis) {\n labelProvider!.cursorNumericFormat = ENumericFormat.Date_HHMMSS\n } else {\n labelProvider!.numericFormat = ENumericFormat.Decimal\n labelProvider!.precision = precision || calculatePrecision(stepSize || 0.1)\n labelProvider!.cursorNumericFormat = ENumericFormat.NoFormat\n }\n\n return isXAxis\n ? new DateTimeNumericAxis(wasmContext, {\n ...axisOptions,\n labelProvider\n })\n : new NumericAxis(wasmContext, {\n ...axisOptions,\n id: index !== 0 ? `yAxis${index}` : undefined,\n labelProvider\n })\n}\n\nfunction createSeries(\n wasmContext: any,\n dataset: any,\n index: number,\n stacked: boolean,\n animation: boolean,\n yAxisId: string | undefined\n) {\n const dataSeries = new XyDataSeries(wasmContext, {\n dataSeriesName: dataset.label,\n containsNaN: false\n })\n\n const stackGroupId = dataset.stack || `__stack${index}__`\n const color = convertColor(dataset.backgroundColor, DEFAULT_COLOR)\n const strokeColor = convertColor(dataset.color, DEFAULT_COLOR)\n const borderWidth = dataset.borderWidth || STROKE_THICKNESS\n const pointMarker = createPointMarker(wasmContext, dataset, strokeColor)\n\n let series\n if (dataset.type === 'bar') {\n series = stacked\n ? new StackedColumnRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: borderWidth,\n fill: color,\n stackedGroupId: stackGroupId\n })\n : new FastColumnRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: borderWidth,\n fill: color,\n animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,\n yAxisId\n })\n } else {\n series = stacked\n ? new StackedMountainRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: borderWidth,\n stroke: strokeColor,\n fill: color\n })\n : dataset.lineTension && dataset.lineTension > 0\n ? new SplineLineRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: borderWidth,\n stroke: strokeColor,\n pointMarker,\n animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,\n yAxisId\n })\n : new FastLineRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: borderWidth,\n stroke: strokeColor,\n pointMarker,\n animation: animation ? new WaveAnimation({ duration: ANIMATION_DURATION, fadeEffect: true }) : undefined,\n yAxisId\n })\n }\n\n return { series, dataSeries }\n}\n\nexport async function buildSciChart(\n config: OperatoChart.ChartConfig | undefined | null,\n container: any,\n { fontSize = 14, fontFamily = 'Roboto', fontColor }: { fontSize?: number; fontFamily?: string; fontColor?: string },\n { grouped, precision }: { grouped?: string; precision?: number }\n): Promise<{ chart: any; dataSeries: any[] } | undefined> {\n if (!config) return\n\n const { type: chartType, options, data: fromData } = config\n const { datasets = [] } = fromData || {}\n var {\n theme,\n tooltip = true,\n animation = true,\n legend = {\n display: true,\n position: 'top'\n },\n scales: fromScales,\n xGridLine = false,\n yGridLine = false,\n y2ndGridLine = false,\n stacked = false,\n multiAxis = false,\n annotations = []\n } = options || {}\n\n var baseColor = getBaseColorFromTheme(theme)\n\n if (theme === 'auto') {\n theme = getThemeFromBrowser()\n }\n\n fontColor = fontColor || baseColor.clone().toString()\n\n const { xAxes = [], yAxes = [] } = fromScales || {}\n\n const chart = await SciChartSurface.create(container, {\n theme: theme == 'dark' ? new SciChartJSDarkv2Theme() : new SciChartJSLightTheme()\n })\n const { sciChartSurface, wasmContext } = chart\n\n xAxes.forEach((axis, index) => {\n const xAxis = createAxis(wasmContext, axis, index, true, fontColor, fontFamily, fontSize, undefined, {\n drawMajorTickLines: true,\n drawMinorTickLines: true,\n drawMajorGridLines: xGridLine,\n drawMinorGridLines: xGridLine\n })\n sciChartSurface.xAxes.add(xAxis)\n })\n ;(multiAxis ? yAxes : [yAxes[0]]).forEach((axis, index) => {\n const yAxis = createAxis(wasmContext, axis, index, false, fontColor, fontFamily, fontSize, precision, {\n drawMajorTickLines: true,\n drawMinorTickLines: true,\n drawMajorGridLines: index == 0 ? yGridLine : y2ndGridLine,\n drawMinorGridLines: index == 0 ? yGridLine : y2ndGridLine\n })\n sciChartSurface.yAxes.add(yAxis)\n })\n\n const dataSeriesArray = datasets.map((dataset, index) => {\n const yAxisId = dataset.yAxisID == 'right' && multiAxis ? 'yAxis1' : undefined\n const { series, dataSeries } = createSeries(wasmContext, dataset, index, !!stacked, !!animation, yAxisId)\n\n sciChartSurface.renderableSeries.add(series)\n\n if (tooltip) {\n const rolloverModifier = new RolloverModifier({\n showTooltip: true,\n showAxisLabel: true /* show x-axis label for cursor */,\n modifierGroup: grouped,\n tooltipDataTemplate: (seriesInfo: XySeriesInfo): string[] => {\n const valuesWithLabels: string[] = []\n const xySeriesInfo = seriesInfo as XySeriesInfo\n valuesWithLabels.push(xySeriesInfo.formattedYValue)\n return valuesWithLabels\n }\n })\n\n sciChartSurface.chartModifiers.add(rolloverModifier)\n }\n\n return dataSeries\n })\n\n if (stacked) {\n const stackedColumnCollection = new StackedColumnCollection(wasmContext)\n const stackedMountainCollection = new StackedMountainCollection(wasmContext)\n\n sciChartSurface.renderableSeries.asArray().forEach((series: any) => {\n if (series instanceof StackedColumnRenderableSeries) {\n stackedColumnCollection.add(series)\n } else if (series instanceof StackedMountainRenderableSeries) {\n stackedMountainCollection.add(series)\n }\n })\n\n if (stackedColumnCollection.size() > 0) {\n sciChartSurface.renderableSeries.add(stackedColumnCollection)\n }\n\n if (stackedMountainCollection.size() > 0) {\n sciChartSurface.renderableSeries.add(stackedMountainCollection)\n }\n }\n\n if (annotations) {\n annotations.forEach(annotation => {\n let sciAnnotation\n let horizontalAnchorPoint: EHorizontalAnchorPoint =\n annotation.horizontalAnchorPoint == 'Right'\n ? EHorizontalAnchorPoint.Right\n : annotation.horizontalAnchorPoint == 'Left'\n ? EHorizontalAnchorPoint.Left\n : EHorizontalAnchorPoint.Center\n let verticalAnchorPoint: EVerticalAnchorPoint =\n annotation.verticalAnchorPoint == 'Top'\n ? EVerticalAnchorPoint.Top\n : annotation.verticalAnchorPoint == 'Bottom'\n ? EVerticalAnchorPoint.Bottom\n : EVerticalAnchorPoint.Center\n\n switch (annotation.type) {\n case 'text':\n sciAnnotation = new TextAnnotation({\n x1: annotation.x1,\n y1: annotation.y1,\n text: annotation.text,\n horizontalAnchorPoint,\n verticalAnchorPoint,\n fontSize: annotation.fontSize,\n fontFamily: annotation.fontFamily,\n textColor: convertColor(annotation.stroke, fontColor),\n xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode,\n yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode\n })\n break\n case 'line':\n sciAnnotation = new LineAnnotation({\n x1: annotation.x1,\n y1: annotation.y1,\n x2: annotation.x2,\n y2: annotation.y2,\n stroke: convertColor(annotation.stroke, '#FF0000'),\n strokeThickness: annotation.strokeThickness,\n xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode,\n yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode\n })\n break\n case 'box':\n sciAnnotation = new BoxAnnotation({\n x1: annotation.x1,\n y1: annotation.y1,\n x2: annotation.x2,\n y2: annotation.y2,\n fill: convertColor(annotation.fill, '#FF0000'),\n stroke: convertColor(annotation.stroke, '#FF0000'),\n strokeThickness: annotation.strokeThickness,\n xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode,\n yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode\n })\n break\n case 'horizontalLine':\n sciAnnotation = new HorizontalLineAnnotation({\n y1: annotation.y1,\n stroke: convertColor(annotation.stroke, '#FF0000'),\n strokeThickness: annotation.strokeThickness,\n xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode,\n yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode\n })\n break\n case 'verticalLine':\n sciAnnotation = new VerticalLineAnnotation({\n x1: annotation.x1,\n stroke: convertColor(annotation.stroke, '#FF0000'),\n strokeThickness: annotation.strokeThickness,\n xCoordinateMode: (annotation.xCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode,\n yCoordinateMode: (annotation.yCoordinateMode || ECoordinateMode.DataValue) as ECoordinateMode\n })\n break\n default:\n break\n }\n if (sciAnnotation) {\n sciChartSurface.annotations.add(sciAnnotation)\n }\n })\n }\n\n sciChartSurface.chartModifiers.add(\n new RubberBandXyZoomModifier({ executeOn: EExecuteOn.MouseRightButton, modifierGroup: grouped }),\n // new ZoomPanModifier({ xyDirection: EXyDirection.XDirection }),\n new ZoomPanModifier({ xyDirection: EXyDirection.XDirection }),\n new MouseWheelZoomModifier({ xyDirection: EXyDirection.XDirection }),\n new ZoomExtentsModifier(),\n new XAxisDragModifier(),\n new YAxisDragModifier()\n )\n\n if (legend?.display) {\n const legendModifier = new LegendModifier({\n showCheckboxes: true,\n showSeriesMarkers: true,\n showLegend: true,\n placement:\n legend.position == 'top'\n ? ELegendPlacement.TopLeft\n : legend.position == 'left'\n ? ELegendPlacement.BottomLeft\n : legend.position == 'bottom'\n ? ELegendPlacement.BottomRight\n : ELegendPlacement.TopRight\n })\n\n sciChartSurface.chartModifiers.add(legendModifier)\n }\n\n return { chart, dataSeries: dataSeriesArray }\n}\n\nexport async function buildSciChartOverview(\n config: OperatoChart.ChartConfig | undefined | null,\n container: any,\n { fontSize = 14, fontFamily = 'Roboto', fontColor }: { fontSize?: number; fontFamily?: string; fontColor?: string },\n axisSynchroniser: AxisSynchroniser\n): Promise<{ chart: any; dataSeries: any[] } | undefined> {\n if (!config) return\n\n const { type: chartType, options, data: fromData } = config\n const { datasets = [] } = fromData || {}\n var { theme, scales: fromScales } = options || {}\n\n var baseColor = getBaseColorFromTheme(theme)\n\n if (theme === 'auto') {\n theme = getThemeFromBrowser()\n }\n\n fontColor = fontColor || baseColor.clone().toString()\n\n const { xAxes = [], yAxes = [] } = fromScales || {}\n\n const chart = await SciChartSurface.create(container, {\n theme: theme == 'dark' ? new SciChartJSDarkv2Theme() : new SciChartJSLightTheme()\n })\n const { sciChartSurface, wasmContext } = chart\n\n xAxes.forEach((axis, index) => {\n const xAxis = createAxis(wasmContext, axis, index, true, fontColor, fontFamily, fontSize, undefined, {\n drawMajorTickLines: false,\n drawMinorTickLines: false,\n drawMajorGridLines: false,\n drawMinorGridLines: false\n })\n sciChartSurface.xAxes.add(xAxis)\n })\n\n const dataSeriesArray = datasets.map((dataset, index) => {\n const yAxisId = `yAxis${index}`\n const dataSeries = new XyDataSeries(wasmContext, {\n dataSeriesName: dataset.label,\n containsNaN: false\n })\n\n const yAxis = new NumericAxis(wasmContext, {\n id: yAxisId,\n autoRange: EAutoRange.Always,\n drawLabels: false,\n drawMajorTickLines: false,\n drawMinorTickLines: false,\n drawMajorGridLines: false,\n drawMinorGridLines: false\n })\n\n sciChartSurface.yAxes.add(yAxis)\n\n const series = new FastLineRenderableSeries(wasmContext, {\n dataSeries,\n strokeThickness: 1,\n stroke: convertColor(dataset.color, DEFAULT_COLOR),\n yAxisId: yAxisId\n })\n\n sciChartSurface.renderableSeries.add(series)\n\n return dataSeries\n })\n\n if (dataSeriesArray.length == 0) {\n getDefaultYAxis(wasmContext, sciChartSurface)\n }\n\n const rangeSelectionModifier = new OverviewRangeSelectionModifier()\n rangeSelectionModifier.onSelectedAreaChanged = (selectedRange?: NumberRange) => {\n if (!selectedRange!.equals(axisSynchroniser.visibleRange)) {\n axisSynchroniser.publishChange({ visibleRange: selectedRange! })\n }\n }\n\n rangeSelectionModifier.selectedArea = axisSynchroniser.visibleRange\n sciChartSurface.chartModifiers.add(rangeSelectionModifier)\n\n axisSynchroniser.visibleRangeChanged.subscribe(({ visibleRange }: any) => {\n const xAxis = sciChartSurface.xAxes.get(0)\n const updatedSelectedRange = visibleRange.clip(xAxis.visibleRange)\n const shouldUpdateSelectedRange = !updatedSelectedRange.equals(rangeSelectionModifier.selectedArea)\n if (shouldUpdateSelectedRange) {\n rangeSelectionModifier.selectedArea = updatedSelectedRange\n }\n })\n\n return { chart, dataSeries: dataSeriesArray }\n}\n\nfunction getDefaultYAxis(wasmContext: any, sciChartSurface: any): void {\n const yAxis = new NumericAxis(wasmContext, {\n id: 'DefaultAxisId',\n autoRange: EAutoRange.Always,\n drawLabels: false,\n drawMajorTickLines: false,\n drawMinorTickLines: false,\n drawMajorGridLines: false,\n drawMinorGridLines: false\n })\n\n sciChartSurface.yAxes.add(yAxis)\n}\n"]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { AxisSynchroniser } from './axis-synchronizer';
|
|
2
|
+
export declare const DEFAULT_COLOR = "#FF6600";
|
|
3
|
+
export declare function convertColor(color: string | string[] | undefined, defaultColor?: string): string | undefined;
|
|
2
4
|
export declare function calculatePrecision(format?: string | number): number;
|
|
3
5
|
export declare function buildSciChart(config: OperatoChart.ChartConfig | undefined | null, container: any, { fontSize, fontFamily, fontColor }: {
|
|
4
6
|
fontSize?: number;
|
|
@@ -5,7 +5,7 @@ SciChartSurface.configure({
|
|
|
5
5
|
dataUrl: `/node_modules/scichart/_wasm/scichart2d.data`,
|
|
6
6
|
wasmUrl: `/node_modules/scichart/_wasm/scichart2d.wasm`
|
|
7
7
|
});
|
|
8
|
-
const DEFAULT_COLOR = '#FF6600';
|
|
8
|
+
export const DEFAULT_COLOR = '#FF6600';
|
|
9
9
|
const DEFAULT_STROKE = '#000000';
|
|
10
10
|
const POINT_MARKER_SIZE = 10;
|
|
11
11
|
const STROKE_THICKNESS = 2;
|
|
@@ -20,7 +20,7 @@ function getBaseColorFromTheme(theme) {
|
|
|
20
20
|
function getThemeFromBrowser() {
|
|
21
21
|
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
22
22
|
}
|
|
23
|
-
function convertColor(color, defaultColor) {
|
|
23
|
+
export function convertColor(color, defaultColor) {
|
|
24
24
|
const tinyColor = new TinyColor(color);
|
|
25
25
|
return tinyColor.toHex8String() || defaultColor;
|
|
26
26
|
}
|
|
@@ -339,7 +339,7 @@ export async function buildSciChartOverview(config, container, { fontSize = 14,
|
|
|
339
339
|
return;
|
|
340
340
|
const { type: chartType, options, data: fromData } = config;
|
|
341
341
|
const { datasets = [] } = fromData || {};
|
|
342
|
-
var { theme,
|
|
342
|
+
var { theme, scales: fromScales } = options || {};
|
|
343
343
|
var baseColor = getBaseColorFromTheme(theme);
|
|
344
344
|
if (theme === 'auto') {
|
|
345
345
|
theme = getThemeFromBrowser();
|
|
@@ -359,31 +359,32 @@ export async function buildSciChartOverview(config, container, { fontSize = 14,
|
|
|
359
359
|
});
|
|
360
360
|
sciChartSurface.xAxes.add(xAxis);
|
|
361
361
|
});
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
362
|
+
getDefaultYAxis(wasmContext, sciChartSurface);
|
|
363
|
+
// const dataSeriesArray = datasets.map((dataset, index) => {
|
|
364
|
+
// const yAxisId = `yAxis${index}`
|
|
365
|
+
// const dataSeries = new XyDataSeries(wasmContext, {
|
|
366
|
+
// dataSeriesName: dataset.label,
|
|
367
|
+
// containsNaN: false
|
|
368
|
+
// })
|
|
369
|
+
// const yAxis = new NumericAxis(wasmContext, {
|
|
370
|
+
// id: yAxisId,
|
|
371
|
+
// autoRange: EAutoRange.Always,
|
|
372
|
+
// drawLabels: false,
|
|
373
|
+
// drawMajorTickLines: false,
|
|
374
|
+
// drawMinorTickLines: false,
|
|
375
|
+
// drawMajorGridLines: false,
|
|
376
|
+
// drawMinorGridLines: false
|
|
377
|
+
// })
|
|
378
|
+
// sciChartSurface.yAxes.add(yAxis)
|
|
379
|
+
// const series = new FastLineRenderableSeries(wasmContext, {
|
|
380
|
+
// dataSeries,
|
|
381
|
+
// strokeThickness: 1,
|
|
382
|
+
// stroke: convertColor(dataset.color, DEFAULT_COLOR),
|
|
383
|
+
// yAxisId: yAxisId
|
|
384
|
+
// })
|
|
385
|
+
// sciChartSurface.renderableSeries.add(series)
|
|
386
|
+
// return dataSeries
|
|
387
|
+
// })
|
|
387
388
|
const rangeSelectionModifier = new OverviewRangeSelectionModifier();
|
|
388
389
|
rangeSelectionModifier.onSelectedAreaChanged = (selectedRange) => {
|
|
389
390
|
if (!selectedRange.equals(axisSynchroniser.visibleRange)) {
|
|
@@ -393,12 +394,25 @@ export async function buildSciChartOverview(config, container, { fontSize = 14,
|
|
|
393
394
|
rangeSelectionModifier.selectedArea = axisSynchroniser.visibleRange;
|
|
394
395
|
sciChartSurface.chartModifiers.add(rangeSelectionModifier);
|
|
395
396
|
axisSynchroniser.visibleRangeChanged.subscribe(({ visibleRange }) => {
|
|
396
|
-
const
|
|
397
|
+
const xAxis = sciChartSurface.xAxes.get(0);
|
|
398
|
+
const updatedSelectedRange = visibleRange.clip(xAxis.visibleRange);
|
|
397
399
|
const shouldUpdateSelectedRange = !updatedSelectedRange.equals(rangeSelectionModifier.selectedArea);
|
|
398
400
|
if (shouldUpdateSelectedRange) {
|
|
399
401
|
rangeSelectionModifier.selectedArea = updatedSelectedRange;
|
|
400
402
|
}
|
|
401
403
|
});
|
|
402
|
-
return { chart, dataSeries:
|
|
404
|
+
return { chart, dataSeries: [] };
|
|
405
|
+
}
|
|
406
|
+
function getDefaultYAxis(wasmContext, sciChartSurface) {
|
|
407
|
+
const yAxis = new NumericAxis(wasmContext, {
|
|
408
|
+
id: 'DefaultAxisId',
|
|
409
|
+
autoRange: EAutoRange.Always,
|
|
410
|
+
drawLabels: false,
|
|
411
|
+
drawMajorTickLines: false,
|
|
412
|
+
drawMinorTickLines: false,
|
|
413
|
+
drawMajorGridLines: false,
|
|
414
|
+
drawMinorGridLines: false
|
|
415
|
+
});
|
|
416
|
+
sciChartSurface.yAxes.add(yAxis);
|
|
403
417
|
}
|
|
404
418
|
//# sourceMappingURL=scichart-builder.js.map
|