evui 3.3.36 → 3.3.39

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 (141) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +40 -40
  3. package/dist/evui.common.js +1907 -1832
  4. package/dist/evui.common.js.map +1 -1
  5. package/dist/evui.umd.js +1907 -1832
  6. package/dist/evui.umd.js.map +1 -1
  7. package/dist/evui.umd.min.js +1 -1
  8. package/dist/evui.umd.min.js.map +1 -1
  9. package/dist/img/{EVUI.7f3588fb.svg → EVUI.b82ee81a.svg} +292 -292
  10. package/dist/img/{icon_mysql.7ea26d5d.svg → icon_mysql.1085fdc9.svg} +78 -78
  11. package/dist/img/{icon_oracle.9009b108.svg → icon_oracle.0572d3ee.svg} +13 -13
  12. package/dist/img/{icon_postgresql.f8fffba9.svg → icon_postgresql.ee12bde8.svg} +58 -58
  13. package/package.json +61 -61
  14. package/src/common/emitter.js +20 -20
  15. package/src/common/utils.debounce.js +223 -223
  16. package/src/common/utils.js +134 -134
  17. package/src/common/utils.table.js +78 -78
  18. package/src/common/utils.throttle.js +83 -83
  19. package/src/common/utils.tree.js +18 -18
  20. package/src/components/button/Button.vue +198 -198
  21. package/src/components/button/index.js +7 -7
  22. package/src/components/buttonGroup/ButtonGroup.vue +11 -11
  23. package/src/components/buttonGroup/index.js +7 -7
  24. package/src/components/calendar/Calendar.vue +661 -661
  25. package/src/components/calendar/index.js +7 -7
  26. package/src/components/calendar/uses.js +1272 -1272
  27. package/src/components/chart/Chart.vue +189 -192
  28. package/src/components/chart/chart.core.js +870 -870
  29. package/src/components/chart/element/element.bar.js +524 -524
  30. package/src/components/chart/element/element.bar.time.js +156 -156
  31. package/src/components/chart/element/element.heatmap.js +533 -533
  32. package/src/components/chart/element/element.line.js +339 -339
  33. package/src/components/chart/element/element.pie.js +197 -197
  34. package/src/components/chart/element/element.scatter.js +184 -184
  35. package/src/components/chart/element/element.tip.js +550 -542
  36. package/src/components/chart/helpers/helpers.canvas.js +265 -265
  37. package/src/components/chart/helpers/helpers.constant.js +206 -206
  38. package/src/components/chart/helpers/helpers.util.js +346 -338
  39. package/src/components/chart/index.js +9 -9
  40. package/src/components/chart/model/index.js +4 -4
  41. package/src/components/chart/model/model.series.js +93 -93
  42. package/src/components/chart/model/model.store.js +977 -967
  43. package/src/components/chart/plugins/plugins.interaction.js +769 -769
  44. package/src/components/chart/plugins/plugins.legend.gradient.js +602 -602
  45. package/src/components/chart/plugins/plugins.legend.js +1155 -1151
  46. package/src/components/chart/plugins/plugins.pie.js +254 -254
  47. package/src/components/chart/plugins/plugins.title.js +56 -56
  48. package/src/components/chart/plugins/plugins.tooltip.js +692 -692
  49. package/src/components/chart/scale/scale.js +848 -848
  50. package/src/components/chart/scale/scale.linear.js +38 -38
  51. package/src/components/chart/scale/scale.logarithmic.js +128 -128
  52. package/src/components/chart/scale/scale.step.js +336 -336
  53. package/src/components/chart/scale/scale.time.category.js +277 -277
  54. package/src/components/chart/scale/scale.time.js +48 -48
  55. package/src/components/chart/style/chart.scss +312 -312
  56. package/src/components/chart/uses.js +264 -252
  57. package/src/components/checkbox/Checkbox.vue +200 -200
  58. package/src/components/checkbox/index.js +7 -7
  59. package/src/components/checkboxGroup/CheckboxGroup.vue +44 -44
  60. package/src/components/checkboxGroup/index.js +7 -7
  61. package/src/components/contextMenu/ContextMenu.vue +80 -80
  62. package/src/components/contextMenu/MenuList.vue +149 -149
  63. package/src/components/contextMenu/index.js +7 -7
  64. package/src/components/contextMenu/uses.js +203 -203
  65. package/src/components/datePicker/DatePicker.vue +437 -437
  66. package/src/components/datePicker/index.js +7 -7
  67. package/src/components/datePicker/uses.js +419 -419
  68. package/src/components/grid/Grid.vue +827 -827
  69. package/src/components/grid/grid.filter.window.vue +493 -493
  70. package/src/components/grid/grid.pagination.vue +75 -75
  71. package/src/components/grid/grid.summary.vue +265 -265
  72. package/src/components/grid/grid.toolbar.vue +26 -26
  73. package/src/components/grid/index.js +11 -11
  74. package/src/components/grid/style/grid.scss +263 -263
  75. package/src/components/grid/uses.js +1002 -1007
  76. package/src/components/icon/Icon.vue +49 -49
  77. package/src/components/icon/index.js +8 -8
  78. package/src/components/inputNumber/InputNumber.vue +212 -212
  79. package/src/components/inputNumber/index.js +7 -7
  80. package/src/components/inputNumber/uses.js +217 -217
  81. package/src/components/loading/Loading.vue +125 -125
  82. package/src/components/loading/index.js +7 -7
  83. package/src/components/menu/Menu.vue +68 -68
  84. package/src/components/menu/MenuItem.vue +187 -187
  85. package/src/components/menu/index.js +7 -7
  86. package/src/components/message/Message.vue +223 -223
  87. package/src/components/message/index.js +31 -31
  88. package/src/components/messageBox/MessageBox.vue +358 -358
  89. package/src/components/messageBox/index.js +22 -22
  90. package/src/components/notification/Notification.vue +316 -316
  91. package/src/components/notification/index.js +49 -49
  92. package/src/components/pagination/Pagination.vue +271 -271
  93. package/src/components/pagination/index.js +7 -7
  94. package/src/components/pagination/pageButton.vue +30 -30
  95. package/src/components/progress/Progress.vue +139 -139
  96. package/src/components/progress/index.js +7 -7
  97. package/src/components/radio/Radio.vue +159 -159
  98. package/src/components/radio/index.js +7 -7
  99. package/src/components/radioGroup/RadioGroup.vue +41 -41
  100. package/src/components/radioGroup/index.js +7 -7
  101. package/src/components/scheduler/Scheduler.vue +149 -149
  102. package/src/components/scheduler/index.js +7 -7
  103. package/src/components/scheduler/uses.js +183 -183
  104. package/src/components/select/Select.vue +440 -440
  105. package/src/components/select/index.js +7 -7
  106. package/src/components/select/uses.js +270 -270
  107. package/src/components/slider/Slider.vue +505 -505
  108. package/src/components/slider/index.js +7 -7
  109. package/src/components/slider/uses.js +390 -390
  110. package/src/components/tabPanel/TabPanel.vue +74 -74
  111. package/src/components/tabPanel/index.js +7 -7
  112. package/src/components/tabs/Tabs.vue +517 -517
  113. package/src/components/tabs/index.js +7 -7
  114. package/src/components/textField/TextField.vue +375 -375
  115. package/src/components/textField/index.js +7 -7
  116. package/src/components/timePicker/TimePicker.vue +352 -352
  117. package/src/components/timePicker/index.js +7 -7
  118. package/src/components/toggle/Toggle.vue +115 -115
  119. package/src/components/toggle/index.js +7 -7
  120. package/src/components/tree/Tree.vue +313 -313
  121. package/src/components/tree/TreeNode.vue +293 -293
  122. package/src/components/tree/index.js +7 -7
  123. package/src/components/treeGrid/TreeGrid.vue +758 -758
  124. package/src/components/treeGrid/TreeGridNode.vue +275 -275
  125. package/src/components/treeGrid/index.js +9 -9
  126. package/src/components/treeGrid/style/treeGrid.scss +261 -261
  127. package/src/components/treeGrid/treeGrid.toolbar.vue +26 -26
  128. package/src/components/treeGrid/uses.js +867 -867
  129. package/src/components/window/Window.vue +329 -329
  130. package/src/components/window/index.js +7 -7
  131. package/src/components/window/uses.js +899 -899
  132. package/src/directives/clickoutside.js +90 -90
  133. package/src/main.js +116 -116
  134. package/src/style/components/input.scss +108 -108
  135. package/src/style/functions.scss +3 -3
  136. package/src/style/index.scss +6 -6
  137. package/src/style/lib/fonts/EVUI.svg +292 -292
  138. package/src/style/lib/icon.css +888 -888
  139. package/src/style/mixins.scss +94 -94
  140. package/src/style/themes.scss +67 -67
  141. package/src/style/variables.scss +22 -22
@@ -1,265 +1,265 @@
1
- import Util from './helpers.util';
2
-
3
- export default {
4
- /**
5
- * Calculate X position
6
- * @param {any} value graph value
7
- * @param {number} min min value
8
- * @param {number} max max value
9
- * @param {number} area height for axis
10
- * @param {number} startPoint startPoint
11
- *
12
- * @returns {any} position
13
- */
14
- calculateX(value, min, max, area, startPoint = 0) {
15
- if (value === null || value === undefined) {
16
- return null;
17
- }
18
-
19
- if (value > max || value < min) {
20
- return null;
21
- }
22
-
23
- const scalingFactor = area / (max - min);
24
- return Math.ceil(startPoint + (scalingFactor * (value - min)));
25
- },
26
-
27
- /**
28
- * Calculate X position (for timebar)
29
- * @param {any} value graph value
30
- * @param {number} min min value
31
- * @param {number} max max value
32
- * @param {number} area height for axis
33
- * @param {number} startPoint startPoint
34
- *
35
- * @returns {any} position
36
- */
37
- calculateSubX(value, min, max, area, startPoint = 0) {
38
- if (value === null || value === undefined) {
39
- return null;
40
- }
41
-
42
- const scalingFactor = area / (max - min);
43
- return Math.ceil(startPoint + (scalingFactor * (value - min)));
44
- },
45
-
46
- /**
47
- * Calculate Y position
48
- * @param {any} value graph value
49
- * @param {number} min min value
50
- * @param {number} max max value
51
- * @param {number} area height for axis
52
- * @param {number} startPoint startPoint
53
- *
54
- * @returns {any} position
55
- */
56
- calculateY(value, min, max, area, startPoint = 0) {
57
- let calcY;
58
-
59
- if (value === null || value === undefined) {
60
- return null;
61
- }
62
-
63
- if (value > max || value < min) {
64
- return null;
65
- }
66
- // Bar차트의 fillRect처리를 위해 invert값 추가 하여 Y값을 처리
67
- const scalingFactor = area / (max - min);
68
- if (startPoint) {
69
- calcY = startPoint - (scalingFactor * (value - (min || 0)));
70
- } else {
71
- calcY = -(scalingFactor * (value - (min || 0)));
72
- }
73
- return Math.floor(calcY);
74
- },
75
-
76
- /**
77
- * Draw point for chart
78
- * @param {object} ctx canvas context
79
- * @param {string} style point style
80
- * @param {number} radius radius
81
- * @param {number} x x position
82
- * @param {number} y y position
83
- *
84
- * @returns {undefined}
85
- */
86
- drawPoint(ctx, style, radius, x, y) {
87
- let edgeLength;
88
- let xOffset;
89
- let yOffset;
90
- let height;
91
- let size;
92
-
93
- if (isNaN(radius) || radius <= 0) {
94
- return;
95
- }
96
-
97
- let offset;
98
- let leftX;
99
- let topY;
100
- let sideSize;
101
-
102
- switch (style) {
103
- // Default includes circle
104
- case 'triangle':
105
- ctx.beginPath();
106
- edgeLength = (3 * radius) / Math.sqrt(3);
107
- height = (edgeLength * Math.sqrt(3)) / 2;
108
- ctx.moveTo(x - (edgeLength / 2), y + (height / 3));
109
- ctx.lineTo(x + (edgeLength / 2), y + (height / 3));
110
- ctx.lineTo(x, y - ((2 * height) / 3));
111
- ctx.closePath();
112
- ctx.fill();
113
- break;
114
- case 'rect':
115
- size = (1 / Math.SQRT2) * radius;
116
- ctx.beginPath();
117
- ctx.fillRect(x - size, y - size, 2 * size, 2 * size);
118
- ctx.strokeRect(x - size, y - size, 2 * size, 2 * size);
119
- break;
120
- case 'rectRounded':
121
- offset = radius / Math.SQRT2;
122
- leftX = x - offset;
123
- topY = y - offset;
124
- sideSize = Math.SQRT2 * radius;
125
- ctx.beginPath();
126
- this.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius / 2);
127
- ctx.closePath();
128
- ctx.fill();
129
- break;
130
- case 'rectRot':
131
- size = (1 / Math.SQRT2) * radius;
132
- ctx.beginPath();
133
- ctx.moveTo(x - size, y);
134
- ctx.lineTo(x, y + size);
135
- ctx.lineTo(x + size, y);
136
- ctx.lineTo(x, y - size);
137
- ctx.closePath();
138
- ctx.fill();
139
- break;
140
- case 'cross':
141
- ctx.beginPath();
142
- ctx.moveTo(x, y + radius);
143
- ctx.lineTo(x, y - radius);
144
- ctx.moveTo(x - radius, y);
145
- ctx.lineTo(x + radius, y);
146
- ctx.closePath();
147
- break;
148
- case 'crossRot':
149
- ctx.beginPath();
150
- xOffset = Math.cos(Math.PI / 4) * radius;
151
- yOffset = Math.sin(Math.PI / 4) * radius;
152
- ctx.moveTo(x - xOffset, y - yOffset);
153
- ctx.lineTo(x + xOffset, y + yOffset);
154
- ctx.moveTo(x - xOffset, y + yOffset);
155
- ctx.lineTo(x + xOffset, y - yOffset);
156
- ctx.closePath();
157
- break;
158
- case 'star':
159
- ctx.beginPath();
160
- ctx.moveTo(x, y + radius);
161
- ctx.lineTo(x, y - radius);
162
- ctx.moveTo(x - radius, y);
163
- ctx.lineTo(x + radius, y);
164
- xOffset = Math.cos(Math.PI / 4) * radius;
165
- yOffset = Math.sin(Math.PI / 4) * radius;
166
- ctx.moveTo(x - xOffset, y - yOffset);
167
- ctx.lineTo(x + xOffset, y + yOffset);
168
- ctx.moveTo(x - xOffset, y + yOffset);
169
- ctx.lineTo(x + xOffset, y - yOffset);
170
- ctx.closePath();
171
- break;
172
- case 'line':
173
- ctx.beginPath();
174
- ctx.moveTo(x - radius, y);
175
- ctx.lineTo(x + radius, y);
176
- ctx.closePath();
177
- break;
178
- default:
179
- ctx.beginPath();
180
- ctx.arc(x, y, radius, 0, Math.PI * 2);
181
- ctx.closePath();
182
- ctx.fill();
183
- break;
184
- }
185
-
186
- ctx.stroke();
187
- },
188
-
189
- /**
190
- * Draw roundedRect point for chart
191
- * @param {object} ctx canvas context
192
- * @param {number} x x position
193
- * @param {number} y y position
194
- * @param {string} width width
195
- * @param {number} height height
196
- * @param {number} radius radius
197
- *
198
- * @returns {undefined}
199
- */
200
- roundedRect(ctx, x, y, width, height, radius) {
201
- const pi = Math.PI;
202
- const halfPi = pi / 2;
203
-
204
- if (radius) {
205
- const r = Math.min(radius, height / 2, width / 2);
206
- const left = x + r;
207
- const top = y + r;
208
- const right = (x + width) - r;
209
- const bottom = (y + height) - r;
210
-
211
- ctx.moveTo(x, top);
212
- if (left < right && top < bottom) {
213
- ctx.arc(left, top, r, -pi, -halfPi);
214
- ctx.arc(right, top, r, -halfPi, 0);
215
- ctx.arc(right, bottom, r, 0, halfPi);
216
- ctx.arc(left, bottom, r, halfPi, pi);
217
- } else if (left < right) {
218
- ctx.moveTo(left, y);
219
- ctx.arc(right, top, r, -halfPi, halfPi);
220
- ctx.arc(left, top, r, halfPi, pi + halfPi);
221
- } else if (top < bottom) {
222
- ctx.arc(left, top, r, -pi, 0);
223
- ctx.arc(left, bottom, r, 0, pi);
224
- } else {
225
- ctx.arc(left, top, r, -pi, pi);
226
- }
227
- ctx.closePath();
228
- ctx.moveTo(x, y);
229
- } else {
230
- ctx.rect(x, y, width, height);
231
- }
232
- },
233
-
234
- /**
235
- * create Linear Gradient
236
- * @param ctx
237
- * @param isHorizontal
238
- * @param positions
239
- * @param stops
240
- * @param isDownplay
241
- *
242
- * @returns {object} gradient
243
- */
244
- createGradient(ctx, isHorizontal, positions, stops, isDownplay) {
245
- const { x, y, w, h } = positions;
246
- let gradient;
247
-
248
- if (isHorizontal) {
249
- gradient = ctx.createLinearGradient(x, 0, x + w, 0);
250
- } else {
251
- gradient = ctx.createLinearGradient(0, y, 0, y + h);
252
- }
253
-
254
- for (let ix = 0; ix < stops.length; ix++) {
255
- const stopIdx = stops[ix][0] ?? 0;
256
- const stopColor = stops[ix][1] ?? 'rgba(255, 255, 255, 0)';
257
- const noneDownplayOpacity = stopColor.includes('rgba') ? Util.getOpacity(stopColor) : 1;
258
- const opacity = isDownplay ? 0.1 : noneDownplayOpacity;
259
-
260
- gradient.addColorStop(stopIdx, Util.colorStringToRgba(stopColor, opacity));
261
- }
262
-
263
- return gradient;
264
- },
265
- };
1
+ import Util from './helpers.util';
2
+
3
+ export default {
4
+ /**
5
+ * Calculate X position
6
+ * @param {any} value graph value
7
+ * @param {number} min min value
8
+ * @param {number} max max value
9
+ * @param {number} area height for axis
10
+ * @param {number} startPoint startPoint
11
+ *
12
+ * @returns {any} position
13
+ */
14
+ calculateX(value, min, max, area, startPoint = 0) {
15
+ if (value === null || value === undefined) {
16
+ return null;
17
+ }
18
+
19
+ if (value > max || value < min) {
20
+ return null;
21
+ }
22
+
23
+ const scalingFactor = area / (max - min);
24
+ return Math.ceil(startPoint + (scalingFactor * (value - min)));
25
+ },
26
+
27
+ /**
28
+ * Calculate X position (for timebar)
29
+ * @param {any} value graph value
30
+ * @param {number} min min value
31
+ * @param {number} max max value
32
+ * @param {number} area height for axis
33
+ * @param {number} startPoint startPoint
34
+ *
35
+ * @returns {any} position
36
+ */
37
+ calculateSubX(value, min, max, area, startPoint = 0) {
38
+ if (value === null || value === undefined) {
39
+ return null;
40
+ }
41
+
42
+ const scalingFactor = area / (max - min);
43
+ return Math.ceil(startPoint + (scalingFactor * (value - min)));
44
+ },
45
+
46
+ /**
47
+ * Calculate Y position
48
+ * @param {any} value graph value
49
+ * @param {number} min min value
50
+ * @param {number} max max value
51
+ * @param {number} area height for axis
52
+ * @param {number} startPoint startPoint
53
+ *
54
+ * @returns {any} position
55
+ */
56
+ calculateY(value, min, max, area, startPoint = 0) {
57
+ let calcY;
58
+
59
+ if (value === null || value === undefined) {
60
+ return null;
61
+ }
62
+
63
+ if (value > max || value < min) {
64
+ return null;
65
+ }
66
+ // Bar차트의 fillRect처리를 위해 invert값 추가 하여 Y값을 처리
67
+ const scalingFactor = area / (max - min);
68
+ if (startPoint) {
69
+ calcY = startPoint - (scalingFactor * (value - (min || 0)));
70
+ } else {
71
+ calcY = -(scalingFactor * (value - (min || 0)));
72
+ }
73
+ return Math.floor(calcY);
74
+ },
75
+
76
+ /**
77
+ * Draw point for chart
78
+ * @param {object} ctx canvas context
79
+ * @param {string} style point style
80
+ * @param {number} radius radius
81
+ * @param {number} x x position
82
+ * @param {number} y y position
83
+ *
84
+ * @returns {undefined}
85
+ */
86
+ drawPoint(ctx, style, radius, x, y) {
87
+ let edgeLength;
88
+ let xOffset;
89
+ let yOffset;
90
+ let height;
91
+ let size;
92
+
93
+ if (isNaN(radius) || radius <= 0) {
94
+ return;
95
+ }
96
+
97
+ let offset;
98
+ let leftX;
99
+ let topY;
100
+ let sideSize;
101
+
102
+ switch (style) {
103
+ // Default includes circle
104
+ case 'triangle':
105
+ ctx.beginPath();
106
+ edgeLength = (3 * radius) / Math.sqrt(3);
107
+ height = (edgeLength * Math.sqrt(3)) / 2;
108
+ ctx.moveTo(x - (edgeLength / 2), y + (height / 3));
109
+ ctx.lineTo(x + (edgeLength / 2), y + (height / 3));
110
+ ctx.lineTo(x, y - ((2 * height) / 3));
111
+ ctx.closePath();
112
+ ctx.fill();
113
+ break;
114
+ case 'rect':
115
+ size = (1 / Math.SQRT2) * radius;
116
+ ctx.beginPath();
117
+ ctx.fillRect(x - size, y - size, 2 * size, 2 * size);
118
+ ctx.strokeRect(x - size, y - size, 2 * size, 2 * size);
119
+ break;
120
+ case 'rectRounded':
121
+ offset = radius / Math.SQRT2;
122
+ leftX = x - offset;
123
+ topY = y - offset;
124
+ sideSize = Math.SQRT2 * radius;
125
+ ctx.beginPath();
126
+ this.roundedRect(ctx, leftX, topY, sideSize, sideSize, radius / 2);
127
+ ctx.closePath();
128
+ ctx.fill();
129
+ break;
130
+ case 'rectRot':
131
+ size = (1 / Math.SQRT2) * radius;
132
+ ctx.beginPath();
133
+ ctx.moveTo(x - size, y);
134
+ ctx.lineTo(x, y + size);
135
+ ctx.lineTo(x + size, y);
136
+ ctx.lineTo(x, y - size);
137
+ ctx.closePath();
138
+ ctx.fill();
139
+ break;
140
+ case 'cross':
141
+ ctx.beginPath();
142
+ ctx.moveTo(x, y + radius);
143
+ ctx.lineTo(x, y - radius);
144
+ ctx.moveTo(x - radius, y);
145
+ ctx.lineTo(x + radius, y);
146
+ ctx.closePath();
147
+ break;
148
+ case 'crossRot':
149
+ ctx.beginPath();
150
+ xOffset = Math.cos(Math.PI / 4) * radius;
151
+ yOffset = Math.sin(Math.PI / 4) * radius;
152
+ ctx.moveTo(x - xOffset, y - yOffset);
153
+ ctx.lineTo(x + xOffset, y + yOffset);
154
+ ctx.moveTo(x - xOffset, y + yOffset);
155
+ ctx.lineTo(x + xOffset, y - yOffset);
156
+ ctx.closePath();
157
+ break;
158
+ case 'star':
159
+ ctx.beginPath();
160
+ ctx.moveTo(x, y + radius);
161
+ ctx.lineTo(x, y - radius);
162
+ ctx.moveTo(x - radius, y);
163
+ ctx.lineTo(x + radius, y);
164
+ xOffset = Math.cos(Math.PI / 4) * radius;
165
+ yOffset = Math.sin(Math.PI / 4) * radius;
166
+ ctx.moveTo(x - xOffset, y - yOffset);
167
+ ctx.lineTo(x + xOffset, y + yOffset);
168
+ ctx.moveTo(x - xOffset, y + yOffset);
169
+ ctx.lineTo(x + xOffset, y - yOffset);
170
+ ctx.closePath();
171
+ break;
172
+ case 'line':
173
+ ctx.beginPath();
174
+ ctx.moveTo(x - radius, y);
175
+ ctx.lineTo(x + radius, y);
176
+ ctx.closePath();
177
+ break;
178
+ default:
179
+ ctx.beginPath();
180
+ ctx.arc(x, y, radius, 0, Math.PI * 2);
181
+ ctx.closePath();
182
+ ctx.fill();
183
+ break;
184
+ }
185
+
186
+ ctx.stroke();
187
+ },
188
+
189
+ /**
190
+ * Draw roundedRect point for chart
191
+ * @param {object} ctx canvas context
192
+ * @param {number} x x position
193
+ * @param {number} y y position
194
+ * @param {string} width width
195
+ * @param {number} height height
196
+ * @param {number} radius radius
197
+ *
198
+ * @returns {undefined}
199
+ */
200
+ roundedRect(ctx, x, y, width, height, radius) {
201
+ const pi = Math.PI;
202
+ const halfPi = pi / 2;
203
+
204
+ if (radius) {
205
+ const r = Math.min(radius, height / 2, width / 2);
206
+ const left = x + r;
207
+ const top = y + r;
208
+ const right = (x + width) - r;
209
+ const bottom = (y + height) - r;
210
+
211
+ ctx.moveTo(x, top);
212
+ if (left < right && top < bottom) {
213
+ ctx.arc(left, top, r, -pi, -halfPi);
214
+ ctx.arc(right, top, r, -halfPi, 0);
215
+ ctx.arc(right, bottom, r, 0, halfPi);
216
+ ctx.arc(left, bottom, r, halfPi, pi);
217
+ } else if (left < right) {
218
+ ctx.moveTo(left, y);
219
+ ctx.arc(right, top, r, -halfPi, halfPi);
220
+ ctx.arc(left, top, r, halfPi, pi + halfPi);
221
+ } else if (top < bottom) {
222
+ ctx.arc(left, top, r, -pi, 0);
223
+ ctx.arc(left, bottom, r, 0, pi);
224
+ } else {
225
+ ctx.arc(left, top, r, -pi, pi);
226
+ }
227
+ ctx.closePath();
228
+ ctx.moveTo(x, y);
229
+ } else {
230
+ ctx.rect(x, y, width, height);
231
+ }
232
+ },
233
+
234
+ /**
235
+ * create Linear Gradient
236
+ * @param ctx
237
+ * @param isHorizontal
238
+ * @param positions
239
+ * @param stops
240
+ * @param isDownplay
241
+ *
242
+ * @returns {object} gradient
243
+ */
244
+ createGradient(ctx, isHorizontal, positions, stops, isDownplay) {
245
+ const { x, y, w, h } = positions;
246
+ let gradient;
247
+
248
+ if (isHorizontal) {
249
+ gradient = ctx.createLinearGradient(x, 0, x + w, 0);
250
+ } else {
251
+ gradient = ctx.createLinearGradient(0, y, 0, y + h);
252
+ }
253
+
254
+ for (let ix = 0; ix < stops.length; ix++) {
255
+ const stopIdx = stops[ix][0] ?? 0;
256
+ const stopColor = stops[ix][1] ?? 'rgba(255, 255, 255, 0)';
257
+ const noneDownplayOpacity = stopColor.includes('rgba') ? Util.getOpacity(stopColor) : 1;
258
+ const opacity = isDownplay ? 0.1 : noneDownplayOpacity;
259
+
260
+ gradient.addColorStop(stopIdx, Util.colorStringToRgba(stopColor, opacity));
261
+ }
262
+
263
+ return gradient;
264
+ },
265
+ };