@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,137 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ import 'chartjs-plugin-datalabels';
6
+ import 'chartjs-plugin-style';
7
+ import { LitElement, html } from 'lit';
8
+ import { customElement, property, query } from 'lit/decorators.js';
9
+ import { Chart } from 'chart.js';
10
+ import DataBinderPlugin from './plugins/chartjs-plugin-data-binder';
11
+ import { convertConfigure } from './config-converter';
12
+ Chart.plugins.register(DataBinderPlugin);
13
+ let OxChart = class OxChart extends LitElement {
14
+ firstUpdated() {
15
+ this.initChart();
16
+ }
17
+ render() {
18
+ return html ` <canvas></canvas> `;
19
+ }
20
+ updated(changes) {
21
+ if (changes.has('width') || changes.has('height')) {
22
+ this.updateChartSize();
23
+ }
24
+ if (changes.has('options')) {
25
+ this.updateChartConfig();
26
+ }
27
+ if (changes.has('data')) {
28
+ this._chart.data.rawData = this.data;
29
+ this._chart.update();
30
+ }
31
+ }
32
+ initChart() {
33
+ const { data, options, type } = this.options;
34
+ options.maintainAspectRatio = false;
35
+ this.attachPluginOptions(options);
36
+ convertConfigure(this.options);
37
+ this._chart = new Chart(this._canvas, {
38
+ type,
39
+ data,
40
+ options
41
+ });
42
+ this.updateChartSize();
43
+ this._initialized = true;
44
+ }
45
+ updateChartSize() {
46
+ const width = Math.floor(this.width);
47
+ const height = Math.floor(this.height);
48
+ this._canvas.style.width = `${width}px`;
49
+ this._canvas.style.height = `${height}px`;
50
+ const _ = () => {
51
+ if (this._canvas.offsetWidth == 0 || this._canvas.offsetHeight == 0) {
52
+ requestAnimationFrame(_);
53
+ }
54
+ else {
55
+ /*
56
+ 주의 : chart.resize() 내에서 pixel ratio를 감안해서, canvas 의 width, height를 설정하기때문에,
57
+ 별도 처리가 필요하지 않다.
58
+ */
59
+ this._chart.resize();
60
+ }
61
+ };
62
+ requestAnimationFrame(_);
63
+ }
64
+ updateChartConfig() {
65
+ if (!this._chart)
66
+ return;
67
+ const { data, options, type } = this.options;
68
+ options.maintainAspectRatio = false;
69
+ this.attachPluginOptions(options);
70
+ convertConfigure(this.options);
71
+ this._chart.type = type;
72
+ this._chart.data = data;
73
+ this._chart.options = options;
74
+ this._chart.data.rawData = this.data;
75
+ this._chart.update();
76
+ }
77
+ attachPluginOptions(options) {
78
+ if (!options.plugins) {
79
+ options.plugins = {};
80
+ }
81
+ this.attachDatalabelPluginOptions(options.plugins);
82
+ }
83
+ attachDatalabelPluginOptions(pluginOptions) {
84
+ pluginOptions.datalabels = {
85
+ ...pluginOptions.datalabels,
86
+ display: function (context) {
87
+ //@ts-ignore
88
+ return !!context.dataset.displayValue;
89
+ },
90
+ anchor: function (context) {
91
+ //@ts-ignore
92
+ return context.dataset.dataLabelAnchor || 'center';
93
+ },
94
+ color: function (context) {
95
+ //@ts-ignore
96
+ return context.dataset.defaultFontColor || '#000';
97
+ },
98
+ font: function (context) {
99
+ return {
100
+ //@ts-ignore
101
+ size: context.dataset.defaultFontSize
102
+ };
103
+ },
104
+ clamp: true,
105
+ formatter: function (value, context) {
106
+ //@ts-ignore
107
+ var prefix = context.dataset.valuePrefix || '';
108
+ //@ts-ignore
109
+ var suffix = context.dataset.valueSuffix || '';
110
+ if (value == undefined)
111
+ return value;
112
+ var stringValue = String(value);
113
+ return prefix + stringValue.toLocaleString() + suffix;
114
+ }
115
+ };
116
+ }
117
+ };
118
+ __decorate([
119
+ property({ type: Number })
120
+ ], OxChart.prototype, "width", void 0);
121
+ __decorate([
122
+ property({ type: Number })
123
+ ], OxChart.prototype, "height", void 0);
124
+ __decorate([
125
+ property({ type: Object })
126
+ ], OxChart.prototype, "options", void 0);
127
+ __decorate([
128
+ property({ type: Object })
129
+ ], OxChart.prototype, "data", void 0);
130
+ __decorate([
131
+ query('canvas')
132
+ ], OxChart.prototype, "_canvas", void 0);
133
+ OxChart = __decorate([
134
+ customElement('ox-chart')
135
+ ], OxChart);
136
+ export { OxChart };
137
+ //# sourceMappingURL=ox-chart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ox-chart.js","sourceRoot":"","sources":["../src/ox-chart.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,OAAO,2BAA2B,CAAA;AAClC,OAAO,sBAAsB,CAAA;AAE7B,OAAO,EAAE,UAAU,EAAkB,IAAI,EAAE,MAAM,KAAK,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,gBAAgB,MAAM,sCAAsC,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;AAGxC,IAAa,OAAO,GAApB,MAAa,OAAQ,SAAQ,UAAU;IAWrC,YAAY;QACV,IAAI,CAAC,SAAS,EAAE,CAAA;IAClB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAA,qBAAqB,CAAA;IAClC,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACjD,IAAI,CAAC,eAAe,EAAE,CAAA;SACvB;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAA;SACzB;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACvB,IAAI,CAAC,MAAO,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;YACrC,IAAI,CAAC,MAAO,CAAC,MAAM,EAAE,CAAA;SACtB;IACH,CAAC;IAED,SAAS;QACP,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5C,OAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAA;QAEpC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACjC,gBAAgB,CAAC,IAAI,CAAC,OAAiC,CAAC,CAAA;QAExD,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;YACpC,IAAI;YACJ,IAAI;YACJ,OAAO;SACR,CAAe,CAAA;QAEhB,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAED,eAAe;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEtC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,CAAA;QACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAA;QAEzC,MAAM,CAAC,GAAG,GAAG,EAAE;YACb,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,EAAE;gBACnE,qBAAqB,CAAC,CAAC,CAAC,CAAA;aACzB;iBAAM;gBACL;;;kBAGE;gBACF,IAAI,CAAC,MAAO,CAAC,MAAM,EAAE,CAAA;aACtB;QACH,CAAC,CAAA;QAED,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAM;QAExB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5C,OAAQ,CAAC,mBAAmB,GAAG,KAAK,CAAA;QAEpC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;QACjC,gBAAgB,CAAC,IAAI,CAAC,OAAiC,CAAC,CAAA;QAExD,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAA;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;QACpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAA;IACtB,CAAC;IAED,mBAAmB,CAAC,OAAgC;QAClD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB,OAAO,CAAC,OAAO,GAAG,EAAE,CAAA;SACrB;QAED,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACpD,CAAC;IAED,4BAA4B,CAAC,aAA6C;QACxE,aAAa,CAAC,UAAU,GAAG;YACzB,GAAG,aAAa,CAAC,UAAU;YAC3B,OAAO,EAAE,UAAU,OAAO;gBACxB,YAAY;gBACZ,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAA;YACvC,CAAC;YACD,MAAM,EAAE,UAAU,OAAO;gBACvB,YAAY;gBACZ,OAAO,OAAO,CAAC,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAA;YACpD,CAAC;YACD,KAAK,EAAE,UAAU,OAAO;gBACtB,YAAY;gBACZ,OAAO,OAAO,CAAC,OAAO,CAAC,gBAAgB,IAAI,MAAM,CAAA;YACnD,CAAC;YACD,IAAI,EAAE,UAAU,OAAO;gBACrB,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe;iBACtC,CAAA;YACH,CAAC;YACD,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,UAAU,KAAK,EAAE,OAAO;gBACjC,YAAY;gBACZ,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAA;gBAC9C,YAAY;gBACZ,IAAI,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAA;gBAC9C,IAAI,KAAK,IAAI,SAAS;oBAAE,OAAO,KAAK,CAAA;gBAEpC,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;gBAC/B,OAAO,MAAM,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,MAAM,CAAA;YACvD,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAA;AAnI6B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;sCAAe;AACd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;uCAAgB;AACf;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;wCAAiC;AAChC;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;qCAA4B;AAKtC;IAAhB,KAAK,CAAC,QAAQ,CAAC;wCAA4B;AATjC,OAAO;IADnB,aAAa,CAAC,UAAU,CAAC;GACb,OAAO,CAoInB;SApIY,OAAO","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport 'chartjs-plugin-datalabels'\nimport 'chartjs-plugin-style'\n\nimport { LitElement, PropertyValues, html } from 'lit'\nimport { customElement, property, query } from 'lit/decorators.js'\n\nimport { Chart } from 'chart.js'\nimport DataBinderPlugin from './plugins/chartjs-plugin-data-binder'\nimport { convertConfigure } from './config-converter'\n\nChart.plugins.register(DataBinderPlugin)\n\n@customElement('ox-chart')\nexport class OxChart extends LitElement {\n @property({ type: Number }) width!: number\n @property({ type: Number }) height!: number\n @property({ type: Object }) options!: SceneChart.ChartConfig\n @property({ type: Object }) data!: SceneChart.ChartData\n\n private _initialized?: boolean\n private _chart?: SceneChart\n\n @query('canvas') _canvas!: HTMLCanvasElement\n\n firstUpdated() {\n this.initChart()\n }\n\n render() {\n return html` <canvas></canvas> `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('width') || changes.has('height')) {\n this.updateChartSize()\n }\n\n if (changes.has('options')) {\n this.updateChartConfig()\n }\n\n if (changes.has('data')) {\n this._chart!.data.rawData = this.data\n this._chart!.update()\n }\n }\n\n initChart() {\n const { data, options, type } = this.options\n options!.maintainAspectRatio = false\n\n this.attachPluginOptions(options)\n convertConfigure(this.options as SceneChart.ChartConfig)\n\n this._chart = new Chart(this._canvas, {\n type,\n data,\n options\n }) as SceneChart\n\n this.updateChartSize()\n\n this._initialized = true\n }\n\n updateChartSize() {\n const width = Math.floor(this.width)\n const height = Math.floor(this.height)\n\n this._canvas.style.width = `${width}px`\n this._canvas.style.height = `${height}px`\n\n const _ = () => {\n if (this._canvas.offsetWidth == 0 || this._canvas.offsetHeight == 0) {\n requestAnimationFrame(_)\n } else {\n /*\n 주의 : chart.resize() 내에서 pixel ratio를 감안해서, canvas 의 width, height를 설정하기때문에,\n 별도 처리가 필요하지 않다.\n */\n this._chart!.resize()\n }\n }\n\n requestAnimationFrame(_)\n }\n\n updateChartConfig() {\n if (!this._chart) return\n\n const { data, options, type } = this.options\n options!.maintainAspectRatio = false\n\n this.attachPluginOptions(options)\n convertConfigure(this.options as SceneChart.ChartConfig)\n\n this._chart.type = type\n this._chart.data = data\n this._chart.options = options\n this._chart.data.rawData = this.data\n this._chart.update()\n }\n\n attachPluginOptions(options: SceneChart.ChartOptions) {\n if (!options.plugins) {\n options.plugins = {}\n }\n\n this.attachDatalabelPluginOptions(options.plugins)\n }\n\n attachDatalabelPluginOptions(pluginOptions: SceneChart.ChartPluginsOptions) {\n pluginOptions.datalabels = {\n ...pluginOptions.datalabels,\n display: function (context) {\n //@ts-ignore\n return !!context.dataset.displayValue\n },\n anchor: function (context) {\n //@ts-ignore\n return context.dataset.dataLabelAnchor || 'center'\n },\n color: function (context) {\n //@ts-ignore\n return context.dataset.defaultFontColor || '#000'\n },\n font: function (context) {\n return {\n //@ts-ignore\n size: context.dataset.defaultFontSize\n }\n },\n clamp: true,\n formatter: function (value, context) {\n //@ts-ignore\n var prefix = context.dataset.valuePrefix || ''\n //@ts-ignore\n var suffix = context.dataset.valueSuffix || ''\n if (value == undefined) return value\n\n var stringValue = String(value)\n return prefix + stringValue.toLocaleString() + suffix\n }\n }\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ id: string;
3
+ beforeDraw: (chartInstance: SceneChart) => void;
4
+ };
5
+ export default _default;
@@ -0,0 +1,37 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ function seriesHighlight(chartInstance, seriesData) {
5
+ var _a;
6
+ (_a = chartInstance.data.datasets) === null || _a === void 0 ? void 0 : _a.forEach(dataset => {
7
+ let highlight = dataset.highlight;
8
+ if (!highlight) {
9
+ return;
10
+ }
11
+ let highlightColor = highlight.color;
12
+ let highlightCondition = highlight.condition;
13
+ seriesData.forEach((sdata, sIndex) => {
14
+ sdata.forEach((data, i) => {
15
+ if (!eval(highlightCondition)) {
16
+ return;
17
+ }
18
+ let meta = chartInstance.getDatasetMeta(sIndex);
19
+ meta.data[i]._model.backgroundColor = highlightColor;
20
+ //@ts-ignore
21
+ meta.data[i]._model.hoverBackgroundColor = highlightColor;
22
+ // dataset.backgroundColor = highlightColor
23
+ });
24
+ });
25
+ });
26
+ }
27
+ export default {
28
+ id: 'chart-series-highlight',
29
+ beforeDraw: function (chartInstance) {
30
+ if (!chartInstance.data.rawData) {
31
+ return;
32
+ }
33
+ let seriesData = chartInstance.data.rawData.seriesData;
34
+ seriesHighlight(chartInstance, seriesData);
35
+ }
36
+ };
37
+ //# sourceMappingURL=chart-series-highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-series-highlight.js","sourceRoot":"","sources":["../../src/plugins/chart-series-highlight.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,SAAS,eAAe,CAAC,aAAyB,EAAE,UAAiC;;IACnF,MAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,0CAAE,OAAO,CAAC,OAAO,CAAC,EAAE;QAC7C,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QACjC,IAAI,CAAC,SAAS,EAAE;YACd,OAAM;SACP;QAED,IAAI,cAAc,GAAG,SAAS,CAAC,KAAK,CAAA;QACpC,IAAI,kBAAkB,GAAG,SAAS,CAAC,SAAS,CAAA;QAE5C,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACnC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAqB,EAAE,CAAS,EAAE,EAAE;gBACjD,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,EAAE;oBAC7B,OAAM;iBACP;gBAED,IAAI,IAAI,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;gBAC/C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,GAAG,cAAc,CAAA;gBACpD,YAAY;gBACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,oBAAoB,GAAG,cAAc,CAAA;gBAEzD,2CAA2C;YAC7C,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,eAAe;IACb,EAAE,EAAE,wBAAwB;IAC5B,UAAU,EAAE,UAAU,aAAyB;QAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE;YAC/B,OAAM;SACP;QAED,IAAI,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAA;QACtD,eAAe,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IAC5C,CAAC;CACF,CAAA","sourcesContent":["import Chart from 'chart.js'\n\n/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nfunction seriesHighlight(chartInstance: SceneChart, seriesData: SceneChart.DataSeries) {\n chartInstance.data.datasets?.forEach(dataset => {\n let highlight = dataset.highlight\n if (!highlight) {\n return\n }\n\n let highlightColor = highlight.color\n let highlightCondition = highlight.condition\n\n seriesData.forEach((sdata, sIndex) => {\n sdata.forEach((data: SceneChart.Data, i: number) => {\n if (!eval(highlightCondition)) {\n return\n }\n\n let meta = chartInstance.getDatasetMeta(sIndex)\n meta.data[i]._model.backgroundColor = highlightColor\n //@ts-ignore\n meta.data[i]._model.hoverBackgroundColor = highlightColor\n\n // dataset.backgroundColor = highlightColor\n })\n })\n })\n}\n\nexport default {\n id: 'chart-series-highlight',\n beforeDraw: function (chartInstance: SceneChart) {\n if (!chartInstance.data.rawData) {\n return\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n seriesHighlight(chartInstance, seriesData)\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ id: string;
3
+ beforeUpdate: (chartInstance: SceneChart) => void;
4
+ };
5
+ export default _default;
@@ -0,0 +1,111 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ function convertObject(dataArray, chartInstance) {
5
+ if (!dataArray) {
6
+ return null;
7
+ }
8
+ if (typeof dataArray == 'string') {
9
+ try {
10
+ dataArray = JSON.parse(dataArray);
11
+ }
12
+ catch (e) {
13
+ console.warn('invalid chart data format', e);
14
+ return null;
15
+ }
16
+ }
17
+ if (!(dataArray instanceof Array)) {
18
+ // is not Array
19
+ if (dataArray instanceof Object) {
20
+ return dataArray;
21
+ }
22
+ return null;
23
+ }
24
+ if (dataArray.length === 0) {
25
+ return null;
26
+ }
27
+ // modeling중 변수 기본값에 대한 처리
28
+ if (dataArray[0].hasOwnProperty('__field1')) {
29
+ dataArray = toObjectArrayValue(dataArray);
30
+ }
31
+ let label = chartInstance.data.labelDataKey;
32
+ let seriesKeys = [];
33
+ for (let i in chartInstance.data.datasets) {
34
+ seriesKeys.push(chartInstance.data.datasets[Number(i)].dataKey);
35
+ }
36
+ let seriesData = [];
37
+ let labelData = [];
38
+ let convertedObject = {
39
+ seriesData,
40
+ labelData
41
+ };
42
+ for (let i in dataArray) {
43
+ let currData = dataArray[Number(i)];
44
+ labelData.push(currData[label]);
45
+ for (let i in seriesKeys) {
46
+ if (!seriesKeys[i])
47
+ continue;
48
+ if (!seriesData[i])
49
+ seriesData[i] = [];
50
+ // 값이 NaN 경우엔 차트를 그리지 않음
51
+ if (Number(currData[seriesKeys[i]]) == NaN) {
52
+ currData[seriesKeys[i]] = NaN;
53
+ }
54
+ seriesData[i].push(currData[seriesKeys[i]]);
55
+ }
56
+ }
57
+ return convertedObject;
58
+ }
59
+ function toObjectArrayValue(array) {
60
+ if (!array || array.length === 0) {
61
+ return null;
62
+ }
63
+ let indexKeyMap = {};
64
+ let value = [];
65
+ for (let key in array[0]) {
66
+ indexKeyMap[key] = array[0][key];
67
+ }
68
+ for (var i = 1; i < array.length; i++) {
69
+ let object = {};
70
+ let thisObject = array[i];
71
+ for (let key in indexKeyMap) {
72
+ let k = indexKeyMap[key];
73
+ let v = thisObject[key];
74
+ object[k] = v;
75
+ }
76
+ value.push(object);
77
+ }
78
+ return value;
79
+ }
80
+ function updateSeriesDatas(chartInstance) {
81
+ if (!chartInstance.data.rawData) {
82
+ return;
83
+ }
84
+ let seriesData = chartInstance.data.rawData.seriesData;
85
+ if (!seriesData || seriesData.length === 0)
86
+ seriesData = [null];
87
+ for (let key in chartInstance.data.datasets) {
88
+ chartInstance.data.datasets[Number(key)].data = seriesData[key] || [];
89
+ }
90
+ }
91
+ function updateLabelDatas(chartInstance) {
92
+ let labelData = chartInstance.data.rawData.labelData;
93
+ chartInstance.config.data.labels = labelData || [];
94
+ }
95
+ export default {
96
+ id: 'data-binder',
97
+ beforeUpdate: function (chartInstance) {
98
+ if (!chartInstance.data)
99
+ return;
100
+ if (!chartInstance.data.rawData)
101
+ chartInstance.data.rawData = [];
102
+ chartInstance.data.rawData = convertObject(chartInstance.data.rawData, chartInstance) || {
103
+ seriesData: [],
104
+ labelData: []
105
+ };
106
+ let seriesData = chartInstance.data.rawData.seriesData;
107
+ updateLabelDatas(chartInstance);
108
+ updateSeriesDatas(chartInstance);
109
+ }
110
+ };
111
+ //# sourceMappingURL=chartjs-plugin-data-binder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chartjs-plugin-data-binder.js","sourceRoot":"","sources":["../../src/plugins/chartjs-plugin-data-binder.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nfunction convertObject(\n dataArray: string | SceneChart.DataSeries | Object,\n chartInstance: SceneChart\n): null | Object | SceneChart.DataSeries {\n if (!dataArray) {\n return null\n }\n\n if (typeof dataArray == 'string') {\n try {\n dataArray = JSON.parse(dataArray)\n } catch (e) {\n console.warn('invalid chart data format', e)\n return null\n }\n }\n\n if (!(dataArray instanceof Array)) {\n // is not Array\n if (dataArray instanceof Object) {\n return dataArray\n }\n return null\n }\n\n if (dataArray.length === 0) {\n return null\n }\n\n // modeling중 변수 기본값에 대한 처리\n if (dataArray[0].hasOwnProperty('__field1')) {\n dataArray = toObjectArrayValue(dataArray) as SceneChart.DataSeries\n }\n\n let label = chartInstance.data.labelDataKey\n let seriesKeys = []\n\n for (let i in chartInstance.data.datasets) {\n seriesKeys.push(chartInstance.data.datasets[Number(i)].dataKey)\n }\n\n let seriesData: SceneChart.DataSeries = []\n let labelData: SceneChart.DataSeries = []\n\n let convertedObject = {\n seriesData,\n labelData\n }\n\n for (let i in dataArray) {\n let currData: SceneChart.Data = (dataArray as SceneChart.DataSeries)[Number(i)]\n labelData.push(currData[label!])\n\n for (let i in seriesKeys) {\n if (!seriesKeys[i]) continue\n\n if (!seriesData[i]) seriesData[i] = []\n\n // 값이 NaN 경우엔 차트를 그리지 않음\n if (Number(currData[seriesKeys[i]]) == NaN) {\n currData[seriesKeys[i]] = NaN\n }\n\n seriesData[i].push(currData[seriesKeys[i]])\n }\n }\n\n return convertedObject\n}\n\nfunction toObjectArrayValue(array: SceneChart.DataSeries): SceneChart.DataSeries | null {\n if (!array || array.length === 0) {\n return null\n }\n\n let indexKeyMap: SceneChart.Data = {}\n let value = []\n\n for (let key in array[0]) {\n indexKeyMap[key] = array[0][key]\n }\n\n for (var i = 1; i < array.length; i++) {\n let object: SceneChart.Data = {}\n let thisObject = array[i]\n\n for (let key in indexKeyMap) {\n let k = indexKeyMap[key]\n let v = thisObject[key]\n object[k] = v\n }\n\n value.push(object)\n }\n\n return value\n}\n\nfunction updateSeriesDatas(chartInstance: SceneChart) {\n if (!chartInstance.data.rawData) {\n return\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n\n if (!seriesData || seriesData.length === 0) seriesData = [null]\n\n for (let key in chartInstance.data.datasets) {\n chartInstance.data.datasets[Number(key)].data = seriesData[key] || []\n }\n}\n\nfunction updateLabelDatas(chartInstance: SceneChart) {\n let labelData = chartInstance.data.rawData.labelData\n chartInstance.config.data!.labels = labelData || []\n}\n\nexport default {\n id: 'data-binder',\n beforeUpdate: function (chartInstance: SceneChart) {\n if (!chartInstance.data) return\n\n if (!chartInstance.data.rawData) chartInstance.data.rawData = []\n\n chartInstance.data.rawData = convertObject(chartInstance.data.rawData, chartInstance) || {\n seriesData: [],\n labelData: []\n }\n\n let seriesData = chartInstance.data.rawData.seriesData\n updateLabelDatas(chartInstance)\n updateSeriesDatas(chartInstance)\n }\n}\n"]}