@operato/scene-chartjs 8.0.0-beta.1 → 8.0.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.
- package/package.json +7 -7
- package/CHANGELOG.md +0 -1060
- package/demo/bar.html +0 -266
- package/demo/chartjs.html +0 -73
- package/demo/index.html +0 -547
- package/demo/legend.html +0 -267
- package/demo/things-scene-chartjs.html +0 -7
- package/schema.graphql +0 -4458
- package/src/chartjs.ts +0 -139
- package/src/config-converter.ts +0 -404
- package/src/editors/index.ts +0 -8
- package/src/index.ts +0 -4
- package/src/ox-chart.ts +0 -170
- package/src/plugins/chart-series-highlight.ts +0 -41
- package/src/plugins/chartjs-plugin-data-binder.ts +0 -134
- package/src/scene-chart.d.ts +0 -102
- package/src/templates/bar-chart.ts +0 -121
- package/src/templates/doughnut-chart.ts +0 -55
- package/src/templates/horizontal-bar-chart.ts +0 -120
- package/src/templates/index.ts +0 -19
- package/src/templates/line-chart.ts +0 -152
- package/src/templates/mixed-chart.ts +0 -149
- package/src/templates/pie-chart.ts +0 -55
- package/src/templates/polar-area-chart.ts +0 -89
- package/src/templates/radar-chart.ts +0 -95
- package/src/text-formatter.ts +0 -106
- package/test/basic-test.html +0 -61
- package/test/index.html +0 -20
- package/tsconfig.json +0 -24
- package/tsconfig.tsbuildinfo +0 -1
package/src/chartjs.ts
DELETED
@@ -1,139 +0,0 @@
|
|
1
|
-
import './ox-chart'
|
2
|
-
|
3
|
-
import cloneDeep from 'lodash/cloneDeep'
|
4
|
-
|
5
|
-
import { Component, ComponentNature, error, HTMLOverlayElement, Properties } from '@hatiolab/things-scene'
|
6
|
-
|
7
|
-
import { OxChart } from './ox-chart'
|
8
|
-
|
9
|
-
const NATURE: ComponentNature = {
|
10
|
-
mutable: false,
|
11
|
-
resizable: true,
|
12
|
-
rotatable: true,
|
13
|
-
properties: [
|
14
|
-
{
|
15
|
-
type: 'chartjs',
|
16
|
-
label: '',
|
17
|
-
name: 'chart'
|
18
|
-
}
|
19
|
-
],
|
20
|
-
'value-property': 'data',
|
21
|
-
help: 'scene/component/chartjs'
|
22
|
-
}
|
23
|
-
|
24
|
-
export default class ChartJS extends HTMLOverlayElement {
|
25
|
-
private _isChartChanged = false
|
26
|
-
private _isDataChanged = false
|
27
|
-
|
28
|
-
get nature() {
|
29
|
-
return NATURE
|
30
|
-
}
|
31
|
-
|
32
|
-
get hasTextProperty() {
|
33
|
-
return false
|
34
|
-
}
|
35
|
-
|
36
|
-
get tagName() {
|
37
|
-
return 'ox-chart'
|
38
|
-
}
|
39
|
-
|
40
|
-
dispose(): void {
|
41
|
-
;(this.element as OxChart)?.dispose()
|
42
|
-
|
43
|
-
super.dispose()
|
44
|
-
}
|
45
|
-
|
46
|
-
isShadowable() {
|
47
|
-
return false
|
48
|
-
}
|
49
|
-
|
50
|
-
createElement() {
|
51
|
-
super.createElement()
|
52
|
-
|
53
|
-
var { width, height } = this.bounds
|
54
|
-
var element = this.element as OxChart
|
55
|
-
var data = this.data
|
56
|
-
|
57
|
-
element.width = width
|
58
|
-
element.height = height
|
59
|
-
|
60
|
-
this._setChartConfig(element)
|
61
|
-
element.data = data
|
62
|
-
}
|
63
|
-
|
64
|
-
/* component.property => element.property */
|
65
|
-
setElementProperties(element: OxChart) {
|
66
|
-
this.setState('lineWidth', 0) // border 표현이 자연스럽게 바뀌면 지울것.
|
67
|
-
|
68
|
-
var { chart: chartConfig } = this.state
|
69
|
-
var { width, height } = this.bounds
|
70
|
-
var data = this.data
|
71
|
-
|
72
|
-
try {
|
73
|
-
element.width = width
|
74
|
-
element.height = height
|
75
|
-
|
76
|
-
if (chartConfig && this._isChartChanged) {
|
77
|
-
this._setChartConfig(element)
|
78
|
-
this._isChartChanged = false
|
79
|
-
}
|
80
|
-
|
81
|
-
if (this._isDataChanged) {
|
82
|
-
element.data = data
|
83
|
-
this._isDataChanged = false
|
84
|
-
}
|
85
|
-
} catch (e) {
|
86
|
-
error(e)
|
87
|
-
}
|
88
|
-
}
|
89
|
-
|
90
|
-
_setChartConfig(element: OxChart) {
|
91
|
-
var { chart: chartConfig, fontSize = 12, fontFamily, fontColor, shadow } = this.state
|
92
|
-
var { left = 0, top = 0, blurSize = 0, color = 'transparent' } = shadow || {}
|
93
|
-
|
94
|
-
const fontOption = {
|
95
|
-
defaultFontSize: fontSize,
|
96
|
-
defaultFontFamily: fontFamily,
|
97
|
-
defaultFontColor: fontColor
|
98
|
-
}
|
99
|
-
|
100
|
-
const shadowOption = {
|
101
|
-
shadowOffsetX: left,
|
102
|
-
shadowOffsetY: top,
|
103
|
-
shadowBlur: blurSize,
|
104
|
-
shadowColor: color
|
105
|
-
}
|
106
|
-
|
107
|
-
var cloneChartConf = cloneDeep(chartConfig)
|
108
|
-
|
109
|
-
cloneChartConf.options = {
|
110
|
-
...cloneChartConf.options,
|
111
|
-
...fontOption,
|
112
|
-
tooltips: false
|
113
|
-
}
|
114
|
-
|
115
|
-
cloneChartConf.data.datasets = cloneChartConf.data.datasets.map((dataset: any) => {
|
116
|
-
return {
|
117
|
-
...dataset,
|
118
|
-
...shadowOption
|
119
|
-
}
|
120
|
-
})
|
121
|
-
|
122
|
-
element.options = cloneChartConf
|
123
|
-
}
|
124
|
-
|
125
|
-
onchange(after: Properties, before: Properties) {
|
126
|
-
this._isChartChanged = false
|
127
|
-
|
128
|
-
if ('chart' in after || 'fontSize' in after || 'fontFamily' in after || 'fontColor' in after || 'shadow' in after)
|
129
|
-
this._isChartChanged = true
|
130
|
-
|
131
|
-
super.onchange(after, before)
|
132
|
-
}
|
133
|
-
|
134
|
-
onchangeData(data: any) {
|
135
|
-
this._isDataChanged = true
|
136
|
-
}
|
137
|
-
}
|
138
|
-
|
139
|
-
Component.register('chartjs', ChartJS)
|
package/src/config-converter.ts
DELETED
@@ -1,404 +0,0 @@
|
|
1
|
-
import { TinyColor } from '@ctrl/tinycolor'
|
2
|
-
import { format as formatText } from '@operato/utils/format.js'
|
3
|
-
|
4
|
-
export function convertConfigure(chart: SceneChart.ChartConfig) {
|
5
|
-
if (!chart) return
|
6
|
-
|
7
|
-
var data = chart.data || {}
|
8
|
-
var datasets = data.datasets || []
|
9
|
-
var options = chart.options || {}
|
10
|
-
var scales = options.scales || {}
|
11
|
-
var xAxes: Array<SceneChart.ChartXAxe>
|
12
|
-
var yAxes: Array<SceneChart.ChartYAxe>
|
13
|
-
var scale
|
14
|
-
var legend = options.legend || {}
|
15
|
-
var tooltips = options.tooltip === false ? undefined : (options.tooltips = options.tooltips || {})
|
16
|
-
var multiAxis = options.multiAxis
|
17
|
-
var stacked = false
|
18
|
-
var yStacked = [false, false]
|
19
|
-
var fontSize = Number(options.defaultFontSize)
|
20
|
-
var fontFamily = options.defaultFontFamily
|
21
|
-
var fontColor = options.defaultFontColor
|
22
|
-
var theme = options.theme
|
23
|
-
|
24
|
-
// backward compatible
|
25
|
-
_configureBackwardsCompatible(chart.type, options)
|
26
|
-
|
27
|
-
// setup series configure
|
28
|
-
for (let i in datasets) {
|
29
|
-
let series = datasets[i]
|
30
|
-
|
31
|
-
if (options.stacked && !series.stack) {
|
32
|
-
series.stack = 'A'
|
33
|
-
}
|
34
|
-
|
35
|
-
/*
|
36
|
-
* TODO from chartjs 2.9, categoryPercentage, barPercentage properties move to dataset.
|
37
|
-
* so need to move related properties - categorySpacing, barSpacing should be moved to series.
|
38
|
-
*/
|
39
|
-
if (chart.type == 'bar') {
|
40
|
-
let categorySpacing = (scales.xAxes && scales.xAxes[0].categorySpacing) || 0
|
41
|
-
let barSpacing = (scales.xAxes && scales.xAxes[0].barSpacing) || 0
|
42
|
-
|
43
|
-
series.categoryPercentage = 1 - categorySpacing || 1
|
44
|
-
series.barPercentage = 1 - barSpacing || 0.8
|
45
|
-
} else if (chart.type == 'horizontalBar') {
|
46
|
-
let categorySpacing = (scales.yAxes && scales.yAxes[0].categorySpacing) || 0
|
47
|
-
let barSpacing = (scales.yAxes && scales.yAxes[0].barSpacing) || 0
|
48
|
-
|
49
|
-
series.categoryPercentage = 1 - categorySpacing || 1
|
50
|
-
series.barPercentage = 1 - barSpacing || 0.8
|
51
|
-
}
|
52
|
-
|
53
|
-
_setSeriesConfigures(series, chart)
|
54
|
-
|
55
|
-
if (!multiAxis) {
|
56
|
-
if (series.yAxisID == 'right') series.yAxisID = 'left'
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
delete options.stacked
|
61
|
-
|
62
|
-
var leftSeries = datasets.filter(d => d.yAxisID == 'left')
|
63
|
-
var rightSeries = datasets.filter(d => d.yAxisID == 'right')
|
64
|
-
|
65
|
-
leftSeries.forEach(s => {
|
66
|
-
var filtered = leftSeries.filter(ss => s.stack == ss.stack)
|
67
|
-
if (filtered.length > 1) {
|
68
|
-
yStacked[0] = true
|
69
|
-
return
|
70
|
-
}
|
71
|
-
})
|
72
|
-
|
73
|
-
rightSeries.forEach(s => {
|
74
|
-
var filtered = rightSeries.filter(ss => s.stack == ss.stack)
|
75
|
-
if (filtered.length > 1) {
|
76
|
-
yStacked[1] = true
|
77
|
-
return
|
78
|
-
}
|
79
|
-
})
|
80
|
-
|
81
|
-
stacked = yStacked[0] || yStacked[1]
|
82
|
-
|
83
|
-
// setup options
|
84
|
-
// 1. setup scales
|
85
|
-
switch (chart.type) {
|
86
|
-
case 'line':
|
87
|
-
case 'bar':
|
88
|
-
case 'horizontalBar':
|
89
|
-
xAxes = scales.xAxes || []
|
90
|
-
yAxes = scales.yAxes || []
|
91
|
-
|
92
|
-
if (chart.type == 'horizontalBar') {
|
93
|
-
xAxes = scales.yAxes || []
|
94
|
-
yAxes = scales.xAxes || []
|
95
|
-
}
|
96
|
-
|
97
|
-
// 1-1. setup xAxes
|
98
|
-
for (let i in xAxes) {
|
99
|
-
let axis = xAxes[i]
|
100
|
-
_setStacked(axis, stacked)
|
101
|
-
_setScalesFont(axis, {
|
102
|
-
fontSize,
|
103
|
-
fontFamily
|
104
|
-
})
|
105
|
-
_setScalesAutoMinMax(axis)
|
106
|
-
_setScalesTickRotation(axis)
|
107
|
-
_setAxisTitle(axis)
|
108
|
-
_setScalesTheme(axis, theme, fontColor)
|
109
|
-
_appendTickCallback(axis.ticks)
|
110
|
-
|
111
|
-
axis.gridLines!.display = options.xGridLine
|
112
|
-
}
|
113
|
-
|
114
|
-
// 1-2. setup yAxes
|
115
|
-
for (let i in yAxes) {
|
116
|
-
let axis = yAxes[i]
|
117
|
-
|
118
|
-
//@ts-ignore
|
119
|
-
if (i == 1) {
|
120
|
-
_setMultiAxis(axis, multiAxis)
|
121
|
-
}
|
122
|
-
_setStacked(axis, yStacked[i])
|
123
|
-
_setScalesFont(axis, {
|
124
|
-
fontSize,
|
125
|
-
fontFamily
|
126
|
-
})
|
127
|
-
_setScalesAutoMinMax(axis)
|
128
|
-
_setAxisTitle(axis)
|
129
|
-
_setScalesTheme(axis, theme, fontColor)
|
130
|
-
_appendTickCallback(axis.ticks)
|
131
|
-
|
132
|
-
//@ts-ignore
|
133
|
-
if (i == 0) axis.gridLines.display = options.yGridLine
|
134
|
-
|
135
|
-
//@ts-ignore
|
136
|
-
if (i == 1) axis.gridLines.display = options.y2ndGridLine
|
137
|
-
}
|
138
|
-
|
139
|
-
break
|
140
|
-
case 'pie':
|
141
|
-
case 'doughnut':
|
142
|
-
break
|
143
|
-
default:
|
144
|
-
scale = options.scale || {}
|
145
|
-
_setScalesFont(scale, {
|
146
|
-
fontSize,
|
147
|
-
fontFamily
|
148
|
-
})
|
149
|
-
break
|
150
|
-
}
|
151
|
-
|
152
|
-
// 2. setup legend
|
153
|
-
_setLegendFont(legend, {
|
154
|
-
fontSize,
|
155
|
-
fontFamily
|
156
|
-
})
|
157
|
-
legend.labels && (legend.labels.boxWidth = 15)
|
158
|
-
_setLegendTheme(legend, theme, fontColor)
|
159
|
-
|
160
|
-
// 3. setup tooltips
|
161
|
-
options.tooltip &&
|
162
|
-
_setTooltipFont(tooltips!, {
|
163
|
-
fontSize,
|
164
|
-
fontFamily
|
165
|
-
})
|
166
|
-
options.tooltip && _setTooltipCallback(tooltips!)
|
167
|
-
}
|
168
|
-
|
169
|
-
function _configureBackwardsCompatible(type: string, options: SceneChart.ChartOptions) {
|
170
|
-
switch (type) {
|
171
|
-
case 'horizontalBar':
|
172
|
-
if (!options.scales) options.scales = {}
|
173
|
-
break
|
174
|
-
case 'radar':
|
175
|
-
case 'polarArea':
|
176
|
-
if (options.defaultFontColor) {
|
177
|
-
options.scale!.ticks!.fontColor = options.defaultFontColor
|
178
|
-
if (options.scale.pointLabels) {
|
179
|
-
options.scale.pointLabels.fontColor = options.defaultFontColor
|
180
|
-
} else {
|
181
|
-
options.scale.pointLabels = { fontColor: options.defaultFontColor }
|
182
|
-
}
|
183
|
-
}
|
184
|
-
options.scale!.ticks!.backdropColor = options.fillStyle ? options.fillStyle : '#00ff0000'
|
185
|
-
break
|
186
|
-
case 'line':
|
187
|
-
case 'bar':
|
188
|
-
if (!options.scales) options.scales = {}
|
189
|
-
if (!options.scales.yAxes) options.scales.yAxes = []
|
190
|
-
|
191
|
-
if (options.scales.yAxes.length === 1) {
|
192
|
-
let yAxes = options.scales.yAxes
|
193
|
-
yAxes.push({
|
194
|
-
position: 'right',
|
195
|
-
id: 'right',
|
196
|
-
display: options.multiAxis || false,
|
197
|
-
gridLines: {
|
198
|
-
display: (yAxes[0] && yAxes[0].gridLines && yAxes[0].gridLines.display) || false
|
199
|
-
},
|
200
|
-
ticks: {
|
201
|
-
beginAtZero: false,
|
202
|
-
callback: function (value: any, index: number, values: any[]) {
|
203
|
-
var returnValue = value
|
204
|
-
if (typeof returnValue == 'number') {
|
205
|
-
returnValue = returnValue.toLocaleString()
|
206
|
-
}
|
207
|
-
|
208
|
-
return returnValue
|
209
|
-
}
|
210
|
-
}
|
211
|
-
})
|
212
|
-
}
|
213
|
-
break
|
214
|
-
case 'pie':
|
215
|
-
case 'doughnut':
|
216
|
-
break
|
217
|
-
default:
|
218
|
-
if (!options.scale) options.scale = {}
|
219
|
-
|
220
|
-
break
|
221
|
-
}
|
222
|
-
}
|
223
|
-
|
224
|
-
function _setStacked(axis: SceneChart.ChartXAxe, stacked: boolean) {
|
225
|
-
axis.stacked = stacked
|
226
|
-
}
|
227
|
-
|
228
|
-
function _setMultiAxis(axis: SceneChart.ChartXAxe, multiAxis: boolean) {
|
229
|
-
axis.display = multiAxis
|
230
|
-
}
|
231
|
-
|
232
|
-
function _setAxisTitle(axis: SceneChart.ChartXAxe) {
|
233
|
-
if (!axis.scaleLabel) axis.scaleLabel = {}
|
234
|
-
axis.scaleLabel.labelString = axis.axisTitle
|
235
|
-
axis.scaleLabel.display = axis.axisTitle ? true : false
|
236
|
-
}
|
237
|
-
|
238
|
-
function _setScalesFont(
|
239
|
-
axis: SceneChart.ChartXAxe | SceneChart.RadialLinearScale,
|
240
|
-
{ fontSize, fontFamily }: { fontSize: number; fontFamily: string }
|
241
|
-
) {
|
242
|
-
axis.ticks = axis.ticks ? axis.ticks : {}
|
243
|
-
axis.ticks.fontSize = fontSize
|
244
|
-
|
245
|
-
if (fontFamily) {
|
246
|
-
axis.ticks.fontFamily = fontFamily
|
247
|
-
}
|
248
|
-
|
249
|
-
;(axis as SceneChart.RadialLinearScale).pointLabels = {
|
250
|
-
fontSize,
|
251
|
-
fontFamily
|
252
|
-
}
|
253
|
-
}
|
254
|
-
|
255
|
-
function _setScalesAutoMinMax(axis: SceneChart.ChartXAxe) {
|
256
|
-
axis.ticks = axis.ticks ? axis.ticks : {}
|
257
|
-
|
258
|
-
let autoMin = axis.ticks.autoMin
|
259
|
-
let autoMax = axis.ticks.autoMax
|
260
|
-
|
261
|
-
if (autoMin === true) {
|
262
|
-
delete axis.ticks.min
|
263
|
-
}
|
264
|
-
if (autoMax === true) {
|
265
|
-
delete axis.ticks.max
|
266
|
-
}
|
267
|
-
}
|
268
|
-
|
269
|
-
function _setScalesTickRotation(axis: SceneChart.ChartXAxe) {
|
270
|
-
axis.ticks = axis.ticks ? axis.ticks : {}
|
271
|
-
// axis.ticks.maxRotation = 0
|
272
|
-
}
|
273
|
-
|
274
|
-
function _setScalesTheme(axis: SceneChart.ChartXAxe, theme: SceneChart.Theme, fontColor: string) {
|
275
|
-
var baseColor = _getBaseColorFromTheme(theme)
|
276
|
-
|
277
|
-
axis.gridLines = axis.gridLines ? axis.gridLines : {}
|
278
|
-
if (axis.gridLines) {
|
279
|
-
axis.gridLines.zeroLineColor = baseColor.clone().setAlpha(0.5).toString()
|
280
|
-
axis.gridLines.color = baseColor.clone().setAlpha(0.1).toString()
|
281
|
-
}
|
282
|
-
|
283
|
-
axis.ticks = axis.ticks ? axis.ticks : {}
|
284
|
-
axis.ticks.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString()
|
285
|
-
}
|
286
|
-
|
287
|
-
function _setLegendFont(
|
288
|
-
legend: SceneChart.ChartLegendOptions,
|
289
|
-
{ fontFamily, fontSize }: { fontFamily: string; fontSize: number }
|
290
|
-
) {
|
291
|
-
legend.labels = legend.labels ? legend.labels : {}
|
292
|
-
legend.labels.fontSize = fontSize
|
293
|
-
if (fontFamily) legend.labels.fontFamily = fontFamily
|
294
|
-
}
|
295
|
-
|
296
|
-
function _setLegendTheme(legend: SceneChart.ChartLegendOptions, theme: SceneChart.Theme, fontColor: string) {
|
297
|
-
var baseColor = _getBaseColorFromTheme(theme)
|
298
|
-
|
299
|
-
legend.labels = legend.labels ? legend.labels : {}
|
300
|
-
legend.labels.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString()
|
301
|
-
}
|
302
|
-
|
303
|
-
function _getBaseColorFromTheme(theme: SceneChart.Theme) {
|
304
|
-
let darkColor = '#000'
|
305
|
-
let lightColor = '#fff'
|
306
|
-
|
307
|
-
var baseColor
|
308
|
-
|
309
|
-
switch (theme) {
|
310
|
-
case 'light':
|
311
|
-
baseColor = lightColor
|
312
|
-
break
|
313
|
-
case 'dark':
|
314
|
-
default:
|
315
|
-
baseColor = darkColor
|
316
|
-
break
|
317
|
-
}
|
318
|
-
|
319
|
-
baseColor = new TinyColor(baseColor)
|
320
|
-
|
321
|
-
return baseColor
|
322
|
-
}
|
323
|
-
|
324
|
-
function _setSeriesConfigures(series: SceneChart.ChartDataSets, chart: SceneChart.ChartConfig) {
|
325
|
-
var type = series.type || chart.type
|
326
|
-
var stackGroup = `${type} ${series.yAxisID} ${series.stack || series.dataKey}`
|
327
|
-
var color = series.color ? series.color : series.backgroundColor
|
328
|
-
|
329
|
-
var dataLabelAnchor = series.dataLabelAnchor || 'center'
|
330
|
-
var dataLabelOffset = series.dataLabelOffset || 0
|
331
|
-
var dataLabelRotation = series.dataLabelRotation || 0
|
332
|
-
|
333
|
-
switch (type) {
|
334
|
-
case 'bar':
|
335
|
-
case 'horizontalBar':
|
336
|
-
series.borderColor = series.backgroundColor = color
|
337
|
-
break
|
338
|
-
|
339
|
-
case 'line':
|
340
|
-
case 'radar':
|
341
|
-
color = series.color ? series.color : series.borderColor
|
342
|
-
series.pointBackgroundColor = series.pointBorderColor = series.borderColor = series.backgroundColor = color
|
343
|
-
series.pointBorderWidth = (series.borderWidth as number) * 0.5
|
344
|
-
series.pointHoverRadius = series.pointRadius
|
345
|
-
if (series.fill == undefined) series.fill = false
|
346
|
-
break
|
347
|
-
|
348
|
-
default:
|
349
|
-
series.borderColor = series.backgroundColor = color
|
350
|
-
break
|
351
|
-
}
|
352
|
-
|
353
|
-
series.stack = stackGroup
|
354
|
-
|
355
|
-
series.dataLabelAnchor = dataLabelAnchor
|
356
|
-
series.dataLabelOffset = dataLabelOffset
|
357
|
-
series.dataLabelRotation = dataLabelRotation
|
358
|
-
}
|
359
|
-
|
360
|
-
function _appendTickCallback(ticks: SceneChart.TickOptions | undefined) {
|
361
|
-
if (!ticks) {
|
362
|
-
return
|
363
|
-
}
|
364
|
-
|
365
|
-
ticks.callback = function (value, index, values) {
|
366
|
-
var returnValue
|
367
|
-
if (!Number.isNaN(Number(value))) {
|
368
|
-
returnValue = Number(value).toLocaleString()
|
369
|
-
} else {
|
370
|
-
returnValue = value
|
371
|
-
}
|
372
|
-
|
373
|
-
if (returnValue) return returnValue
|
374
|
-
}
|
375
|
-
}
|
376
|
-
|
377
|
-
function _setTooltipFont(
|
378
|
-
tooltips: SceneChart.ChartTooltipOptions,
|
379
|
-
{ fontSize, fontFamily }: { fontSize: number; fontFamily: string }
|
380
|
-
) {
|
381
|
-
tooltips.titleFontSize = tooltips.bodyFontSize = tooltips.footerFontSize = fontSize
|
382
|
-
if (fontFamily) tooltips.titleFontFamily = tooltips.bodyFontFamily = tooltips.footerFontFamily = fontFamily
|
383
|
-
}
|
384
|
-
|
385
|
-
function _setTooltipCallback(tooltips: SceneChart.ChartTooltipOptions) {
|
386
|
-
tooltips.callbacks = tooltips.callbacks || {}
|
387
|
-
|
388
|
-
tooltips.intersect = false
|
389
|
-
tooltips.mode = 'index'
|
390
|
-
|
391
|
-
tooltips.callbacks.label = function (tooltipItem: SceneChart.ChartTooltipItem, data: SceneChart.ChartData) {
|
392
|
-
var value: any = data.datasets?.[tooltipItem.datasetIndex || 0].data?.[tooltipItem.index || 0]
|
393
|
-
var datasetLabel = data.datasets?.[tooltipItem.datasetIndex || 0].label
|
394
|
-
var label = datasetLabel || data.labels?.[tooltipItem.index || 0]
|
395
|
-
|
396
|
-
var format = data.datasets?.[tooltipItem.datasetIndex || 0].valueFormat || ''
|
397
|
-
var prefix = data.datasets?.[tooltipItem.datasetIndex || 0].valuePrefix || ''
|
398
|
-
var suffix = data.datasets?.[tooltipItem.datasetIndex || 0].valueSuffix || ''
|
399
|
-
|
400
|
-
var stringValue = format ? formatText(format, Number(value)) : Number(value).toLocaleString()
|
401
|
-
|
402
|
-
return `${label}: ${prefix + stringValue + suffix}`
|
403
|
-
}
|
404
|
-
}
|
package/src/editors/index.ts
DELETED
package/src/index.ts
DELETED