@operato/scene-chartjs 0.0.5

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 (114) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +21 -0
  4. package/assets/bar-chart.png +0 -0
  5. package/assets/doughnut-chart.png +0 -0
  6. package/assets/horizontal-bar-chart.png +0 -0
  7. package/assets/line-chart.png +0 -0
  8. package/assets/mixed-chart.png +0 -0
  9. package/assets/pie-chart.png +0 -0
  10. package/assets/polar-area-chart.png +0 -0
  11. package/assets/radar-chart.png +0 -0
  12. package/demo/bar.html +266 -0
  13. package/demo/chartjs.html +73 -0
  14. package/demo/index.html +547 -0
  15. package/demo/legend.html +267 -0
  16. package/demo/things-scene-chartjs.html +7 -0
  17. package/dist/chartjs.d.ts +27 -0
  18. package/dist/chartjs.js +109 -0
  19. package/dist/chartjs.js.map +1 -0
  20. package/dist/config-converter.d.ts +1 -0
  21. package/dist/config-converter.js +343 -0
  22. package/dist/config-converter.js.map +1 -0
  23. package/dist/editors/index.d.ts +5 -0
  24. package/dist/editors/index.js +11 -0
  25. package/dist/editors/index.js.map +1 -0
  26. package/dist/editors/property-editor-chartjs-abstract.d.ts +44 -0
  27. package/dist/editors/property-editor-chartjs-abstract.js +250 -0
  28. package/dist/editors/property-editor-chartjs-abstract.js.map +1 -0
  29. package/dist/editors/property-editor-chartjs-hbar.d.ts +9 -0
  30. package/dist/editors/property-editor-chartjs-hbar.js +160 -0
  31. package/dist/editors/property-editor-chartjs-hbar.js.map +1 -0
  32. package/dist/editors/property-editor-chartjs-mixed.d.ts +20 -0
  33. package/dist/editors/property-editor-chartjs-mixed.js +193 -0
  34. package/dist/editors/property-editor-chartjs-mixed.js.map +1 -0
  35. package/dist/editors/property-editor-chartjs-multi-series-abstract.d.ts +31 -0
  36. package/dist/editors/property-editor-chartjs-multi-series-abstract.js +373 -0
  37. package/dist/editors/property-editor-chartjs-multi-series-abstract.js.map +1 -0
  38. package/dist/editors/property-editor-chartjs-pie.d.ts +14 -0
  39. package/dist/editors/property-editor-chartjs-pie.js +70 -0
  40. package/dist/editors/property-editor-chartjs-pie.js.map +1 -0
  41. package/dist/editors/property-editor-chartjs-radar.d.ts +10 -0
  42. package/dist/editors/property-editor-chartjs-radar.js +42 -0
  43. package/dist/editors/property-editor-chartjs-radar.js.map +1 -0
  44. package/dist/editors/property-editor-chartjs-styles.d.ts +1 -0
  45. package/dist/editors/property-editor-chartjs-styles.js +165 -0
  46. package/dist/editors/property-editor-chartjs-styles.js.map +1 -0
  47. package/dist/editors/property-editor-chartjs.d.ts +14 -0
  48. package/dist/editors/property-editor-chartjs.js +83 -0
  49. package/dist/editors/property-editor-chartjs.js.map +1 -0
  50. package/dist/index.d.ts +5 -0
  51. package/dist/index.js +8 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/ox-chart.d.ts +20 -0
  54. package/dist/ox-chart.js +137 -0
  55. package/dist/ox-chart.js.map +1 -0
  56. package/dist/plugins/chart-series-highlight.d.ts +5 -0
  57. package/dist/plugins/chart-series-highlight.js +37 -0
  58. package/dist/plugins/chart-series-highlight.js.map +1 -0
  59. package/dist/plugins/chartjs-plugin-data-binder.d.ts +5 -0
  60. package/dist/plugins/chartjs-plugin-data-binder.js +111 -0
  61. package/dist/plugins/chartjs-plugin-data-binder.js.map +1 -0
  62. package/helps/scene/component/chartjs.ko.md +332 -0
  63. package/helps/scene/component/chartjs.md +333 -0
  64. package/helps/scene/component/chartjs.zh.md +331 -0
  65. package/helps/scene/images/chart-bar-01.png +0 -0
  66. package/helps/scene/images/chart-bar-02.png +0 -0
  67. package/helps/scene/images/chart-bar-03.png +0 -0
  68. package/helps/scene/images/chart-bar-08.png +0 -0
  69. package/helps/scene/images/chart-bar-12.png +0 -0
  70. package/helps/scene/images/chart-data-01.png +0 -0
  71. package/helps/scene/images/chart-data-04.png +0 -0
  72. package/helps/scene/images/chart-doughnut-01.png +0 -0
  73. package/helps/scene/images/chart-horizontal-bar-01.png +0 -0
  74. package/helps/scene/images/chart-line-01.png +0 -0
  75. package/helps/scene/images/chart-mix-01.png +0 -0
  76. package/helps/scene/images/chart-mix-02.png +0 -0
  77. package/helps/scene/images/chart-pie-01.png +0 -0
  78. package/helps/scene/images/chart-polar-01.png +0 -0
  79. package/helps/scene/images/chart-radar-01.png +0 -0
  80. package/package.json +78 -0
  81. package/src/chartjs.ts +134 -0
  82. package/src/config-converter.ts +401 -0
  83. package/src/editors/index.ts +11 -0
  84. package/src/editors/property-editor-chartjs-abstract.ts +301 -0
  85. package/src/editors/property-editor-chartjs-hbar.ts +163 -0
  86. package/src/editors/property-editor-chartjs-mixed.ts +204 -0
  87. package/src/editors/property-editor-chartjs-multi-series-abstract.ts +393 -0
  88. package/src/editors/property-editor-chartjs-pie.ts +79 -0
  89. package/src/editors/property-editor-chartjs-radar.ts +43 -0
  90. package/src/editors/property-editor-chartjs-styles.ts +165 -0
  91. package/src/editors/property-editor-chartjs.ts +88 -0
  92. package/src/index.ts +7 -0
  93. package/src/ox-chart.ts +150 -0
  94. package/src/plugins/chart-series-highlight.ts +43 -0
  95. package/src/plugins/chartjs-plugin-data-binder.ts +138 -0
  96. package/src/scene-chart.d.ts +152 -0
  97. package/templates/bar-chart.js +124 -0
  98. package/templates/doughnut-chart.js +58 -0
  99. package/templates/horizontal-bar-chart.js +121 -0
  100. package/templates/index.js +22 -0
  101. package/templates/line-chart.js +155 -0
  102. package/templates/mixed-chart.js +152 -0
  103. package/templates/pie-chart.js +58 -0
  104. package/templates/polar-area-chart.js +92 -0
  105. package/templates/radar-chart.js +98 -0
  106. package/test/basic-test.html +61 -0
  107. package/test/index.html +20 -0
  108. package/things-scene.config.js +7 -0
  109. package/translations/en.json +5 -0
  110. package/translations/ko.json +5 -0
  111. package/translations/ms.json +5 -0
  112. package/translations/zh.json +5 -0
  113. package/tsconfig.json +22 -0
  114. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,343 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { TinyColor } from '@ctrl/tinycolor';
5
+ export function convertConfigure(chart) {
6
+ if (!chart)
7
+ return;
8
+ var data = chart.data || {};
9
+ var datasets = data.datasets || [];
10
+ var options = chart.options || {};
11
+ var scales = options.scales || {};
12
+ var xAxes;
13
+ var yAxes;
14
+ var scale;
15
+ var legend = options.legend || {};
16
+ var tooltips = (options.tooltips = options.tooltips || {});
17
+ var multiAxis = options.multiAxis;
18
+ var stacked = false;
19
+ var yStacked = [false, false];
20
+ var fontSize = Number(options.defaultFontSize);
21
+ var fontFamily = options.defaultFontFamily;
22
+ var fontColor = options.defaultFontColor;
23
+ var theme = options.theme;
24
+ // backward compatible
25
+ _configureBackwardsCompatible(chart.type, options);
26
+ // setup series configure
27
+ for (let i in datasets) {
28
+ let series = datasets[i];
29
+ if (options.stacked && !series.stack) {
30
+ series.stack = 'A';
31
+ }
32
+ /*
33
+ * TODO from chartjs 2.9, categoryPercentage, barPercentage properties move to dataset.
34
+ * so need to move related properties - categorySpacing, barSpacing should be moved to series.
35
+ */
36
+ if (chart.type == 'bar') {
37
+ let categorySpacing = (scales.xAxes && scales.xAxes[0].categorySpacing) || 0;
38
+ let barSpacing = (scales.xAxes && scales.xAxes[0].barSpacing) || 0;
39
+ series.categoryPercentage = 1 - categorySpacing || 1;
40
+ series.barPercentage = 1 - barSpacing || 0.8;
41
+ }
42
+ else if (chart.type == 'horizontalBar') {
43
+ let categorySpacing = (scales.yAxes && scales.yAxes[0].categorySpacing) || 0;
44
+ let barSpacing = (scales.yAxes && scales.yAxes[0].barSpacing) || 0;
45
+ series.categoryPercentage = 1 - categorySpacing || 1;
46
+ series.barPercentage = 1 - barSpacing || 0.8;
47
+ }
48
+ _setSeriesConfigures(series, chart);
49
+ if (!multiAxis) {
50
+ if (series.yAxisID == 'right')
51
+ series.yAxisID = 'left';
52
+ }
53
+ }
54
+ delete options.stacked;
55
+ var leftSeries = datasets.filter(d => d.yAxisID == 'left');
56
+ var rightSeries = datasets.filter(d => d.yAxisID == 'right');
57
+ leftSeries.forEach(s => {
58
+ var filtered = leftSeries.filter(ss => s.stack == ss.stack);
59
+ if (filtered.length > 1) {
60
+ yStacked[0] = true;
61
+ return;
62
+ }
63
+ });
64
+ rightSeries.forEach(s => {
65
+ var filtered = rightSeries.filter(ss => s.stack == ss.stack);
66
+ if (filtered.length > 1) {
67
+ yStacked[1] = true;
68
+ return;
69
+ }
70
+ });
71
+ stacked = yStacked[0] || yStacked[1];
72
+ // setup options
73
+ // 1. setup scales
74
+ switch (chart.type) {
75
+ case 'line':
76
+ case 'bar':
77
+ case 'horizontalBar':
78
+ xAxes = scales.xAxes || [];
79
+ yAxes = scales.yAxes || [];
80
+ if (chart.type == 'horizontalBar') {
81
+ xAxes = scales.yAxes || [];
82
+ yAxes = scales.xAxes || [];
83
+ }
84
+ // 1-1. setup xAxes
85
+ for (let i in xAxes) {
86
+ let axis = xAxes[i];
87
+ _setStacked(axis, stacked);
88
+ _setScalesFont(axis, {
89
+ fontSize,
90
+ fontFamily
91
+ });
92
+ _setScalesAutoMinMax(axis);
93
+ _setScalesTickRotation(axis);
94
+ _setAxisTitle(axis);
95
+ _setScalesTheme(axis, theme, fontColor);
96
+ _appendTickCallback(axis.ticks);
97
+ axis.gridLines.display = options.xGridLine;
98
+ }
99
+ // 1-2. setup yAxes
100
+ for (let i in yAxes) {
101
+ let axis = yAxes[i];
102
+ //@ts-ignore
103
+ if (i == 1) {
104
+ _setMultiAxis(axis, multiAxis);
105
+ }
106
+ _setStacked(axis, yStacked[i]);
107
+ _setScalesFont(axis, {
108
+ fontSize,
109
+ fontFamily
110
+ });
111
+ _setScalesAutoMinMax(axis);
112
+ _setAxisTitle(axis);
113
+ _setScalesTheme(axis, theme, fontColor);
114
+ _appendTickCallback(axis.ticks);
115
+ //@ts-ignore
116
+ if (i == 0)
117
+ axis.gridLines.display = options.yGridLine;
118
+ //@ts-ignore
119
+ if (i == 1)
120
+ axis.gridLines.display = options.y2ndGridLine;
121
+ }
122
+ break;
123
+ case 'pie':
124
+ case 'doughnut':
125
+ break;
126
+ default:
127
+ scale = options.scale || {};
128
+ _setScalesFont(scale, {
129
+ fontSize,
130
+ fontFamily
131
+ });
132
+ break;
133
+ }
134
+ // 2. setup legend
135
+ _setLegendFont(legend, {
136
+ fontSize,
137
+ fontFamily
138
+ });
139
+ legend.labels && (legend.labels.boxWidth = 15);
140
+ _setLegendTheme(legend, theme, fontColor);
141
+ // 3. setup tooltips
142
+ _setTooltipFont(tooltips, {
143
+ fontSize,
144
+ fontFamily
145
+ });
146
+ _setTooltipCallback(tooltips);
147
+ }
148
+ function _configureBackwardsCompatible(type, options) {
149
+ switch (type) {
150
+ case 'horizontalBar':
151
+ if (!options.scales)
152
+ options.scales = {};
153
+ break;
154
+ case 'radar':
155
+ case 'polarArea':
156
+ if (options.defaultFontColor) {
157
+ options.scale.ticks.fontColor = options.defaultFontColor;
158
+ if (options.scale.pointLabels) {
159
+ options.scale.pointLabels.fontColor = options.defaultFontColor;
160
+ }
161
+ else {
162
+ options.scale.pointLabels = { fontColor: options.defaultFontColor };
163
+ }
164
+ }
165
+ options.scale.ticks.backdropColor = options.fillStyle ? options.fillStyle : '#00ff0000';
166
+ break;
167
+ case 'line':
168
+ case 'bar':
169
+ if (!options.scales)
170
+ options.scales = {};
171
+ if (!options.scales.yAxes)
172
+ options.scales.yAxes = [];
173
+ if (options.scales.yAxes.length === 1) {
174
+ let yAxes = options.scales.yAxes;
175
+ yAxes.push({
176
+ position: 'right',
177
+ id: 'right',
178
+ display: options.multiAxis || false,
179
+ gridLines: {
180
+ display: (yAxes[0] && yAxes[0].gridLines && yAxes[0].gridLines.display) || false
181
+ },
182
+ ticks: {
183
+ beginAtZero: false,
184
+ callback: function (value, index, values) {
185
+ var returnValue = value;
186
+ if (typeof returnValue == 'number') {
187
+ returnValue = returnValue.toLocaleString();
188
+ }
189
+ return returnValue;
190
+ }
191
+ }
192
+ });
193
+ }
194
+ break;
195
+ case 'pie':
196
+ case 'doughnut':
197
+ break;
198
+ default:
199
+ if (!options.scale)
200
+ options.scale = {};
201
+ break;
202
+ }
203
+ }
204
+ function _setStacked(axis, stacked) {
205
+ axis.stacked = stacked;
206
+ }
207
+ function _setMultiAxis(axis, multiAxis) {
208
+ axis.display = multiAxis;
209
+ }
210
+ function _setAxisTitle(axis) {
211
+ if (!axis.scaleLabel)
212
+ axis.scaleLabel = {};
213
+ axis.scaleLabel.labelString = axis.axisTitle;
214
+ axis.scaleLabel.display = axis.axisTitle ? true : false;
215
+ }
216
+ function _setScalesFont(axis, { fontSize, fontFamily }) {
217
+ axis.ticks = axis.ticks ? axis.ticks : {};
218
+ axis.ticks.fontSize = fontSize;
219
+ if (fontFamily) {
220
+ axis.ticks.fontFamily = fontFamily;
221
+ }
222
+ ;
223
+ axis.pointLabels = {
224
+ fontSize,
225
+ fontFamily
226
+ };
227
+ }
228
+ function _setScalesAutoMinMax(axis) {
229
+ axis.ticks = axis.ticks ? axis.ticks : {};
230
+ let autoMin = axis.ticks.autoMin;
231
+ let autoMax = axis.ticks.autoMax;
232
+ if (autoMin === true) {
233
+ delete axis.ticks.min;
234
+ }
235
+ if (autoMax === true) {
236
+ delete axis.ticks.max;
237
+ }
238
+ }
239
+ function _setScalesTickRotation(axis) {
240
+ axis.ticks = axis.ticks ? axis.ticks : {};
241
+ // axis.ticks.maxRotation = 0
242
+ }
243
+ function _setScalesTheme(axis, theme, fontColor) {
244
+ var baseColor = _getBaseColorFromTheme(theme);
245
+ axis.gridLines = axis.gridLines ? axis.gridLines : {};
246
+ if (axis.gridLines) {
247
+ axis.gridLines.zeroLineColor = baseColor.clone().setAlpha(0.5).toString();
248
+ axis.gridLines.color = baseColor.clone().setAlpha(0.1).toString();
249
+ }
250
+ axis.ticks = axis.ticks ? axis.ticks : {};
251
+ axis.ticks.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString();
252
+ }
253
+ function _setLegendFont(legend, { fontFamily, fontSize }) {
254
+ legend.labels = legend.labels ? legend.labels : {};
255
+ legend.labels.fontSize = fontSize;
256
+ if (fontFamily)
257
+ legend.labels.fontFamily = fontFamily;
258
+ }
259
+ function _setLegendTheme(legend, theme, fontColor) {
260
+ var baseColor = _getBaseColorFromTheme(theme);
261
+ legend.labels = legend.labels ? legend.labels : {};
262
+ legend.labels.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString();
263
+ }
264
+ function _getBaseColorFromTheme(theme) {
265
+ let darkColor = '#000';
266
+ let lightColor = '#fff';
267
+ var baseColor;
268
+ switch (theme) {
269
+ case 'light':
270
+ baseColor = lightColor;
271
+ break;
272
+ case 'dark':
273
+ default:
274
+ baseColor = darkColor;
275
+ break;
276
+ }
277
+ baseColor = new TinyColor(baseColor);
278
+ return baseColor;
279
+ }
280
+ function _setSeriesConfigures(series, chart) {
281
+ var type = series.type || chart.type;
282
+ var stackGroup = `${type} ${series.yAxisID} ${series.stack || series.dataKey}`;
283
+ var color = series.color ? series.color : series.backgroundColor;
284
+ switch (type) {
285
+ case 'bar':
286
+ case 'horizontalBar':
287
+ series.borderColor = series.backgroundColor = color;
288
+ break;
289
+ case 'line':
290
+ case 'radar':
291
+ color = series.color ? series.color : series.borderColor;
292
+ series.pointBackgroundColor = series.pointBorderColor = series.borderColor = series.backgroundColor = color;
293
+ series.pointBorderWidth = series.borderWidth * 0.5;
294
+ series.pointHoverRadius = series.pointRadius;
295
+ if (series.fill == undefined)
296
+ series.fill = false;
297
+ break;
298
+ default:
299
+ series.borderColor = series.backgroundColor = color;
300
+ break;
301
+ }
302
+ series.stack = stackGroup;
303
+ }
304
+ function _appendTickCallback(ticks) {
305
+ if (!ticks) {
306
+ return;
307
+ }
308
+ ticks.callback = function (value, index, values) {
309
+ var returnValue;
310
+ if (!Number.isNaN(Number(value))) {
311
+ returnValue = Number(value).toLocaleString();
312
+ }
313
+ else {
314
+ returnValue = value;
315
+ }
316
+ if (returnValue)
317
+ return returnValue;
318
+ };
319
+ }
320
+ function _setTooltipFont(tooltips, { fontSize, fontFamily }) {
321
+ tooltips.titleFontSize = tooltips.bodyFontSize = tooltips.footerFontSize = fontSize;
322
+ if (fontFamily)
323
+ tooltips.titleFontFamily = tooltips.bodyFontFamily = tooltips.footerFontFamily = fontFamily;
324
+ }
325
+ function _setTooltipCallback(tooltips) {
326
+ tooltips.callbacks = tooltips.callbacks || {};
327
+ tooltips.intersect = false;
328
+ tooltips.mode = 'index';
329
+ tooltips.callbacks.label = function (tooltipItem, data) {
330
+ var _a, _b, _c, _d, _e, _f;
331
+ var value = (_b = (_a = data.datasets) === null || _a === void 0 ? void 0 : _a[tooltipItem.datasetIndex || 0].data) === null || _b === void 0 ? void 0 : _b[tooltipItem.index || 0];
332
+ var datasetLabel = (_c = data.datasets) === null || _c === void 0 ? void 0 : _c[tooltipItem.datasetIndex || 0].label;
333
+ var label = datasetLabel || ((_d = data.labels) === null || _d === void 0 ? void 0 : _d[tooltipItem.index || 0]);
334
+ var toNumValue = Number(value);
335
+ if (!isNaN(toNumValue)) {
336
+ value = toNumValue;
337
+ }
338
+ var prefix = ((_e = data.datasets) === null || _e === void 0 ? void 0 : _e[tooltipItem.datasetIndex || 0].valuePrefix) || '';
339
+ var suffix = ((_f = data.datasets) === null || _f === void 0 ? void 0 : _f[tooltipItem.datasetIndex || 0].valueSuffix) || '';
340
+ return `${label}: ${prefix + (value === null || value === void 0 ? void 0 : value.toLocaleString()) + suffix}`;
341
+ };
342
+ }
343
+ //# sourceMappingURL=config-converter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-converter.js","sourceRoot":"","sources":["../src/config-converter.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { TinyColor } from '@ctrl/tinycolor'\n\nexport function convertConfigure(chart: SceneChart.ChartConfig) {\n if (!chart) return\n\n var data = chart.data || {}\n var datasets = data.datasets || []\n var options = chart.options || {}\n var scales = options.scales || {}\n var xAxes: Array<SceneChart.ChartXAxe>\n var yAxes: Array<SceneChart.ChartYAxe>\n var scale\n var legend = options.legend || {}\n var tooltips = (options.tooltips = options.tooltips || {})\n\n var multiAxis = options.multiAxis\n var stacked = false\n var yStacked = [false, false]\n var fontSize = Number(options.defaultFontSize)\n var fontFamily = options.defaultFontFamily\n var fontColor = options.defaultFontColor\n var theme = options.theme\n\n // backward compatible\n _configureBackwardsCompatible(chart.type, options)\n\n // setup series configure\n for (let i in datasets) {\n let series = datasets[i]\n\n if (options.stacked && !series.stack) {\n series.stack = 'A'\n }\n\n /*\n * TODO from chartjs 2.9, categoryPercentage, barPercentage properties move to dataset.\n * so need to move related properties - categorySpacing, barSpacing should be moved to series.\n */\n if (chart.type == 'bar') {\n let categorySpacing = (scales.xAxes && scales.xAxes[0].categorySpacing) || 0\n let barSpacing = (scales.xAxes && scales.xAxes[0].barSpacing) || 0\n\n series.categoryPercentage = 1 - categorySpacing || 1\n series.barPercentage = 1 - barSpacing || 0.8\n } else if (chart.type == 'horizontalBar') {\n let categorySpacing = (scales.yAxes && scales.yAxes[0].categorySpacing) || 0\n let barSpacing = (scales.yAxes && scales.yAxes[0].barSpacing) || 0\n\n series.categoryPercentage = 1 - categorySpacing || 1\n series.barPercentage = 1 - barSpacing || 0.8\n }\n\n _setSeriesConfigures(series, chart)\n\n if (!multiAxis) {\n if (series.yAxisID == 'right') series.yAxisID = 'left'\n }\n }\n\n delete options.stacked\n\n var leftSeries = datasets.filter(d => d.yAxisID == 'left')\n var rightSeries = datasets.filter(d => d.yAxisID == 'right')\n\n leftSeries.forEach(s => {\n var filtered = leftSeries.filter(ss => s.stack == ss.stack)\n if (filtered.length > 1) {\n yStacked[0] = true\n return\n }\n })\n\n rightSeries.forEach(s => {\n var filtered = rightSeries.filter(ss => s.stack == ss.stack)\n if (filtered.length > 1) {\n yStacked[1] = true\n return\n }\n })\n\n stacked = yStacked[0] || yStacked[1]\n\n // setup options\n // 1. setup scales\n switch (chart.type) {\n case 'line':\n case 'bar':\n case 'horizontalBar':\n xAxes = scales.xAxes || []\n yAxes = scales.yAxes || []\n\n if (chart.type == 'horizontalBar') {\n xAxes = scales.yAxes || []\n yAxes = scales.xAxes || []\n }\n\n // 1-1. setup xAxes\n for (let i in xAxes) {\n let axis = xAxes[i]\n _setStacked(axis, stacked)\n _setScalesFont(axis, {\n fontSize,\n fontFamily\n })\n _setScalesAutoMinMax(axis)\n _setScalesTickRotation(axis)\n _setAxisTitle(axis)\n _setScalesTheme(axis, theme, fontColor)\n _appendTickCallback(axis.ticks)\n\n axis.gridLines!.display = options.xGridLine\n }\n\n // 1-2. setup yAxes\n for (let i in yAxes) {\n let axis = yAxes[i]\n\n //@ts-ignore\n if (i == 1) {\n _setMultiAxis(axis, multiAxis)\n }\n _setStacked(axis, yStacked[i])\n _setScalesFont(axis, {\n fontSize,\n fontFamily\n })\n _setScalesAutoMinMax(axis)\n _setAxisTitle(axis)\n _setScalesTheme(axis, theme, fontColor)\n _appendTickCallback(axis.ticks)\n\n //@ts-ignore\n if (i == 0) axis.gridLines.display = options.yGridLine\n\n //@ts-ignore\n if (i == 1) axis.gridLines.display = options.y2ndGridLine\n }\n\n break\n case 'pie':\n case 'doughnut':\n break\n default:\n scale = options.scale || {}\n _setScalesFont(scale, {\n fontSize,\n fontFamily\n })\n break\n }\n\n // 2. setup legend\n _setLegendFont(legend, {\n fontSize,\n fontFamily\n })\n legend.labels && (legend.labels.boxWidth = 15)\n _setLegendTheme(legend, theme, fontColor)\n\n // 3. setup tooltips\n _setTooltipFont(tooltips, {\n fontSize,\n fontFamily\n })\n _setTooltipCallback(tooltips)\n}\n\nfunction _configureBackwardsCompatible(type: string, options: SceneChart.ChartOptions) {\n switch (type) {\n case 'horizontalBar':\n if (!options.scales) options.scales = {}\n break\n case 'radar':\n case 'polarArea':\n if (options.defaultFontColor) {\n options.scale!.ticks!.fontColor = options.defaultFontColor\n if (options.scale.pointLabels) {\n options.scale.pointLabels.fontColor = options.defaultFontColor\n } else {\n options.scale.pointLabels = { fontColor: options.defaultFontColor }\n }\n }\n options.scale!.ticks!.backdropColor = options.fillStyle ? options.fillStyle : '#00ff0000'\n break\n case 'line':\n case 'bar':\n if (!options.scales) options.scales = {}\n if (!options.scales.yAxes) options.scales.yAxes = []\n\n if (options.scales.yAxes.length === 1) {\n let yAxes = options.scales.yAxes\n yAxes.push({\n position: 'right',\n id: 'right',\n display: options.multiAxis || false,\n gridLines: {\n display: (yAxes[0] && yAxes[0].gridLines && yAxes[0].gridLines.display) || false\n },\n ticks: {\n beginAtZero: false,\n callback: function (value: any, index: number, values: any[]) {\n var returnValue = value\n if (typeof returnValue == 'number') {\n returnValue = returnValue.toLocaleString()\n }\n\n return returnValue\n }\n }\n })\n }\n break\n case 'pie':\n case 'doughnut':\n break\n default:\n if (!options.scale) options.scale = {}\n\n break\n }\n}\n\nfunction _setStacked(axis: SceneChart.ChartXAxe, stacked: boolean) {\n axis.stacked = stacked\n}\n\nfunction _setMultiAxis(axis: SceneChart.ChartXAxe, multiAxis: boolean) {\n axis.display = multiAxis\n}\n\nfunction _setAxisTitle(axis: SceneChart.ChartXAxe) {\n if (!axis.scaleLabel) axis.scaleLabel = {}\n axis.scaleLabel.labelString = axis.axisTitle\n axis.scaleLabel.display = axis.axisTitle ? true : false\n}\n\nfunction _setScalesFont(\n axis: SceneChart.ChartXAxe | SceneChart.RadialLinearScale,\n { fontSize, fontFamily }: { fontSize: number; fontFamily: string }\n) {\n axis.ticks = axis.ticks ? axis.ticks : {}\n axis.ticks.fontSize = fontSize\n\n if (fontFamily) {\n axis.ticks.fontFamily = fontFamily\n }\n\n ;(axis as SceneChart.RadialLinearScale).pointLabels = {\n fontSize,\n fontFamily\n }\n}\n\nfunction _setScalesAutoMinMax(axis: SceneChart.ChartXAxe) {\n axis.ticks = axis.ticks ? axis.ticks : {}\n\n let autoMin = axis.ticks.autoMin\n let autoMax = axis.ticks.autoMax\n\n if (autoMin === true) {\n delete axis.ticks.min\n }\n if (autoMax === true) {\n delete axis.ticks.max\n }\n}\n\nfunction _setScalesTickRotation(axis: SceneChart.ChartXAxe) {\n axis.ticks = axis.ticks ? axis.ticks : {}\n // axis.ticks.maxRotation = 0\n}\n\nfunction _setScalesTheme(axis: SceneChart.ChartXAxe, theme: SceneChart.Theme, fontColor: string) {\n var baseColor = _getBaseColorFromTheme(theme)\n\n axis.gridLines = axis.gridLines ? axis.gridLines : {}\n if (axis.gridLines) {\n axis.gridLines.zeroLineColor = baseColor.clone().setAlpha(0.5).toString()\n axis.gridLines.color = baseColor.clone().setAlpha(0.1).toString()\n }\n\n axis.ticks = axis.ticks ? axis.ticks : {}\n axis.ticks.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString()\n}\n\nfunction _setLegendFont(\n legend: SceneChart.ChartLegendOptions,\n { fontFamily, fontSize }: { fontFamily: string; fontSize: number }\n) {\n legend.labels = legend.labels ? legend.labels : {}\n legend.labels.fontSize = fontSize\n if (fontFamily) legend.labels.fontFamily = fontFamily\n}\n\nfunction _setLegendTheme(legend: SceneChart.ChartLegendOptions, theme: SceneChart.Theme, fontColor: string) {\n var baseColor = _getBaseColorFromTheme(theme)\n\n legend.labels = legend.labels ? legend.labels : {}\n legend.labels.fontColor = fontColor ? fontColor : baseColor.clone().setAlpha(0.5).toString()\n}\n\nfunction _getBaseColorFromTheme(theme: SceneChart.Theme) {\n let darkColor = '#000'\n let lightColor = '#fff'\n\n var baseColor\n\n switch (theme) {\n case 'light':\n baseColor = lightColor\n break\n case 'dark':\n default:\n baseColor = darkColor\n break\n }\n\n baseColor = new TinyColor(baseColor)\n\n return baseColor\n}\n\nfunction _setSeriesConfigures(series: SceneChart.ChartDataSets, chart: SceneChart.ChartConfig) {\n var type = series.type || chart.type\n var stackGroup = `${type} ${series.yAxisID} ${series.stack || series.dataKey}`\n var color = series.color ? series.color : series.backgroundColor\n\n switch (type) {\n case 'bar':\n case 'horizontalBar':\n series.borderColor = series.backgroundColor = color\n break\n\n case 'line':\n case 'radar':\n color = series.color ? series.color : series.borderColor\n series.pointBackgroundColor = series.pointBorderColor = series.borderColor = series.backgroundColor = color\n series.pointBorderWidth = (series.borderWidth as number) * 0.5\n series.pointHoverRadius = series.pointRadius\n if (series.fill == undefined) series.fill = false\n break\n\n default:\n series.borderColor = series.backgroundColor = color\n break\n }\n\n series.stack = stackGroup\n}\n\nfunction _appendTickCallback(ticks: SceneChart.TickOptions | undefined) {\n if (!ticks) {\n return\n }\n\n ticks.callback = function (value, index, values) {\n var returnValue\n if (!Number.isNaN(Number(value))) {\n returnValue = Number(value).toLocaleString()\n } else {\n returnValue = value\n }\n\n if (returnValue) return returnValue\n }\n}\n\nfunction _setTooltipFont(\n tooltips: SceneChart.ChartTooltipOptions,\n { fontSize, fontFamily }: { fontSize: number; fontFamily: string }\n) {\n tooltips.titleFontSize = tooltips.bodyFontSize = tooltips.footerFontSize = fontSize\n if (fontFamily) tooltips.titleFontFamily = tooltips.bodyFontFamily = tooltips.footerFontFamily = fontFamily\n}\n\nfunction _setTooltipCallback(tooltips: SceneChart.ChartTooltipOptions) {\n tooltips.callbacks = tooltips.callbacks || {}\n\n tooltips.intersect = false\n tooltips.mode = 'index'\n\n tooltips.callbacks.label = function (tooltipItem: SceneChart.ChartTooltipItem, data: SceneChart.ChartData) {\n var value = data.datasets?.[tooltipItem.datasetIndex || 0].data?.[tooltipItem.index || 0]\n var datasetLabel = data.datasets?.[tooltipItem.datasetIndex || 0].label\n var label = datasetLabel || data.labels?.[tooltipItem.index || 0]\n var toNumValue = Number(value)\n\n if (!isNaN(toNumValue)) {\n value = toNumValue\n }\n\n var prefix = data.datasets?.[tooltipItem.datasetIndex || 0].valuePrefix || ''\n var suffix = data.datasets?.[tooltipItem.datasetIndex || 0].valueSuffix || ''\n\n return `${label}: ${prefix + value?.toLocaleString() + suffix}`\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ type: string;
3
+ element: string;
4
+ }[];
5
+ export default _default;
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import ChartJSEditor from './property-editor-chartjs';
5
+ export default [
6
+ {
7
+ type: 'chartjs',
8
+ element: ChartJSEditor.is
9
+ }
10
+ ];
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editors/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,aAAa,MAAM,2BAA2B,CAAA;AAErD,eAAe;IACb;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,aAAa,CAAC,EAAE;KAC1B;CACF,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport ChartJSEditor from './property-editor-chartjs'\n\nexport default [\n {\n type: 'chartjs',\n element: ChartJSEditor.is\n }\n]\n"]}
@@ -0,0 +1,44 @@
1
+ import { LitElement } from 'lit';
2
+ import { TinyColor } from '@ctrl/tinycolor';
3
+ export default class PropertyEditorChartJSAbstract extends LitElement {
4
+ static styles: import("lit").CSSResult[];
5
+ value: any;
6
+ currentSeriesIndex: number;
7
+ render(): import("lit-html").TemplateResult<1>;
8
+ firstUpdated(): void;
9
+ displayValueTemplate(): import("lit-html").TemplateResult<1>;
10
+ editorTemplate(props: any): import("lit-html").TemplateResult<1>;
11
+ get data(): any;
12
+ set data(data: any);
13
+ get datasets(): any;
14
+ set datasets(datasets: any);
15
+ get series(): any;
16
+ set series(series: any);
17
+ set dataKey(key: any);
18
+ get dataKey(): any;
19
+ get legend(): any;
20
+ set legend(legend: any);
21
+ get theme(): any;
22
+ set theme(theme: any);
23
+ get scales(): any;
24
+ set scales(scales: any);
25
+ get display(): any;
26
+ set display(display: any);
27
+ get position(): any;
28
+ set position(position: any);
29
+ get stacked(): any;
30
+ set stacked(stacked: any);
31
+ get labelDataKey(): any;
32
+ set labelDataKey(labelDataKey: any);
33
+ set options(options: any);
34
+ get options(): any;
35
+ onValuesChanged(e: Event): void;
36
+ onTapAddTab(e: Event): void;
37
+ onTapRemoveCurrentTab(e: Event): void;
38
+ _getSeriesModel({ chartType, datasetsLength, lastSeriesColor }: {
39
+ chartType: any;
40
+ datasetsLength: number;
41
+ lastSeriesColor: TinyColor;
42
+ }): any;
43
+ _getElementValue(element: HTMLElement): any;
44
+ }