@techie_doubts/tui.chart.2026 4.6.1

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 (284) hide show
  1. package/README.md +165 -0
  2. package/dist/esm/animator.d.ts +32 -0
  3. package/dist/esm/animator.js +102 -0
  4. package/dist/esm/brushes/axis.d.ts +3 -0
  5. package/dist/esm/brushes/axis.js +21 -0
  6. package/dist/esm/brushes/basic.d.ts +9 -0
  7. package/dist/esm/brushes/basic.js +95 -0
  8. package/dist/esm/brushes/boxPlot.d.ts +2 -0
  9. package/dist/esm/brushes/boxPlot.js +22 -0
  10. package/dist/esm/brushes/circleLegend.d.ts +2 -0
  11. package/dist/esm/brushes/circleLegend.js +26 -0
  12. package/dist/esm/brushes/dataLabel.d.ts +6 -0
  13. package/dist/esm/brushes/dataLabel.js +176 -0
  14. package/dist/esm/brushes/exportMenu.d.ts +2 -0
  15. package/dist/esm/brushes/exportMenu.js +55 -0
  16. package/dist/esm/brushes/gauge.d.ts +2 -0
  17. package/dist/esm/brushes/gauge.js +39 -0
  18. package/dist/esm/brushes/label.d.ts +34 -0
  19. package/dist/esm/brushes/label.js +165 -0
  20. package/dist/esm/brushes/legend.d.ts +7 -0
  21. package/dist/esm/brushes/legend.js +162 -0
  22. package/dist/esm/brushes/lineSeries.d.ts +5 -0
  23. package/dist/esm/brushes/lineSeries.js +41 -0
  24. package/dist/esm/brushes/polygon.d.ts +2 -0
  25. package/dist/esm/brushes/polygon.js +24 -0
  26. package/dist/esm/brushes/resetButton.d.ts +3 -0
  27. package/dist/esm/brushes/resetButton.js +112 -0
  28. package/dist/esm/brushes/scatterSeries.d.ts +2 -0
  29. package/dist/esm/brushes/scatterSeries.js +125 -0
  30. package/dist/esm/brushes/sector.d.ts +2 -0
  31. package/dist/esm/brushes/sector.js +54 -0
  32. package/dist/esm/brushes/spectrumLegend.d.ts +14 -0
  33. package/dist/esm/brushes/spectrumLegend.js +199 -0
  34. package/dist/esm/charts/areaChart.d.ts +254 -0
  35. package/dist/esm/charts/areaChart.js +358 -0
  36. package/dist/esm/charts/barChart.d.ts +203 -0
  37. package/dist/esm/charts/barChart.js +300 -0
  38. package/dist/esm/charts/boxPlotChart.d.ts +209 -0
  39. package/dist/esm/charts/boxPlotChart.js +288 -0
  40. package/dist/esm/charts/bubbleChart.d.ts +188 -0
  41. package/dist/esm/charts/bubbleChart.js +263 -0
  42. package/dist/esm/charts/bulletChart.d.ts +199 -0
  43. package/dist/esm/charts/bulletChart.js +278 -0
  44. package/dist/esm/charts/chart.d.ts +133 -0
  45. package/dist/esm/charts/chart.js +484 -0
  46. package/dist/esm/charts/columnChart.d.ts +205 -0
  47. package/dist/esm/charts/columnChart.js +299 -0
  48. package/dist/esm/charts/columnLineChart.d.ts +271 -0
  49. package/dist/esm/charts/columnLineChart.js +386 -0
  50. package/dist/esm/charts/gaugeChart.d.ts +191 -0
  51. package/dist/esm/charts/gaugeChart.js +279 -0
  52. package/dist/esm/charts/heatmapChart.d.ts +199 -0
  53. package/dist/esm/charts/heatmapChart.js +292 -0
  54. package/dist/esm/charts/lineAreaChart.d.ts +271 -0
  55. package/dist/esm/charts/lineAreaChart.js +374 -0
  56. package/dist/esm/charts/lineChart.d.ts +253 -0
  57. package/dist/esm/charts/lineChart.js +360 -0
  58. package/dist/esm/charts/lineScatterChart.d.ts +200 -0
  59. package/dist/esm/charts/lineScatterChart.js +285 -0
  60. package/dist/esm/charts/nestedPieChart.d.ts +192 -0
  61. package/dist/esm/charts/nestedPieChart.js +268 -0
  62. package/dist/esm/charts/pieChart.d.ts +156 -0
  63. package/dist/esm/charts/pieChart.js +224 -0
  64. package/dist/esm/charts/radarChart.d.ts +169 -0
  65. package/dist/esm/charts/radarChart.js +240 -0
  66. package/dist/esm/charts/radialBarChart.d.ts +172 -0
  67. package/dist/esm/charts/radialBarChart.js +251 -0
  68. package/dist/esm/charts/scatterChart.d.ts +184 -0
  69. package/dist/esm/charts/scatterChart.js +279 -0
  70. package/dist/esm/charts/treemapChart.d.ts +166 -0
  71. package/dist/esm/charts/treemapChart.js +239 -0
  72. package/dist/esm/component/areaSeries.d.ts +96 -0
  73. package/dist/esm/component/areaSeries.js +474 -0
  74. package/dist/esm/component/axis.d.ts +40 -0
  75. package/dist/esm/component/axis.js +176 -0
  76. package/dist/esm/component/axisTitle.d.ts +25 -0
  77. package/dist/esm/component/axisTitle.js +67 -0
  78. package/dist/esm/component/axisUsingCenterY.d.ts +32 -0
  79. package/dist/esm/component/axisUsingCenterY.js +175 -0
  80. package/dist/esm/component/backButton.d.ts +13 -0
  81. package/dist/esm/component/backButton.js +26 -0
  82. package/dist/esm/component/background.d.ts +10 -0
  83. package/dist/esm/component/background.js +15 -0
  84. package/dist/esm/component/boxPlotSeries.d.ts +126 -0
  85. package/dist/esm/component/boxPlotSeries.js +410 -0
  86. package/dist/esm/component/boxSeries.d.ts +211 -0
  87. package/dist/esm/component/boxSeries.js +603 -0
  88. package/dist/esm/component/boxStackSeries.d.ts +62 -0
  89. package/dist/esm/component/boxStackSeries.js +447 -0
  90. package/dist/esm/component/bubbleSeries.d.ts +35 -0
  91. package/dist/esm/component/bubbleSeries.js +174 -0
  92. package/dist/esm/component/bulletSeries.d.ts +89 -0
  93. package/dist/esm/component/bulletSeries.js +392 -0
  94. package/dist/esm/component/circleLegend.d.ts +10 -0
  95. package/dist/esm/component/circleLegend.js +37 -0
  96. package/dist/esm/component/component.d.ts +64 -0
  97. package/dist/esm/component/component.js +170 -0
  98. package/dist/esm/component/componentManager.d.ts +23 -0
  99. package/dist/esm/component/componentManager.js +45 -0
  100. package/dist/esm/component/dataLabels.d.ts +23 -0
  101. package/dist/esm/component/dataLabels.js +134 -0
  102. package/dist/esm/component/exportMenu.d.ts +38 -0
  103. package/dist/esm/component/exportMenu.js +147 -0
  104. package/dist/esm/component/gaugeSeries.d.ts +160 -0
  105. package/dist/esm/component/gaugeSeries.js +447 -0
  106. package/dist/esm/component/heatmapSeries.d.ts +64 -0
  107. package/dist/esm/component/heatmapSeries.js +152 -0
  108. package/dist/esm/component/hoveredSeries.d.ts +27 -0
  109. package/dist/esm/component/hoveredSeries.js +95 -0
  110. package/dist/esm/component/legend.d.ts +26 -0
  111. package/dist/esm/component/legend.js +149 -0
  112. package/dist/esm/component/lineSeries.d.ts +69 -0
  113. package/dist/esm/component/lineSeries.js +319 -0
  114. package/dist/esm/component/noDataText.d.ts +9 -0
  115. package/dist/esm/component/noDataText.js +31 -0
  116. package/dist/esm/component/pieSeries.d.ts +137 -0
  117. package/dist/esm/component/pieSeries.js +390 -0
  118. package/dist/esm/component/plot.d.ts +37 -0
  119. package/dist/esm/component/plot.js +163 -0
  120. package/dist/esm/component/radarSeries.d.ts +85 -0
  121. package/dist/esm/component/radarSeries.js +222 -0
  122. package/dist/esm/component/radialAxis.d.ts +26 -0
  123. package/dist/esm/component/radialAxis.js +210 -0
  124. package/dist/esm/component/radialBarSeries.d.ts +111 -0
  125. package/dist/esm/component/radialBarSeries.js +349 -0
  126. package/dist/esm/component/radialPlot.d.ts +55 -0
  127. package/dist/esm/component/radialPlot.js +188 -0
  128. package/dist/esm/component/rangeSelection.d.ts +61 -0
  129. package/dist/esm/component/rangeSelection.js +150 -0
  130. package/dist/esm/component/resetButton.d.ts +13 -0
  131. package/dist/esm/component/resetButton.js +26 -0
  132. package/dist/esm/component/scatterSeries.d.ts +34 -0
  133. package/dist/esm/component/scatterSeries.js +159 -0
  134. package/dist/esm/component/selectedSeries.d.ts +26 -0
  135. package/dist/esm/component/selectedSeries.js +109 -0
  136. package/dist/esm/component/spectrumLegend.d.ts +15 -0
  137. package/dist/esm/component/spectrumLegend.js +76 -0
  138. package/dist/esm/component/title.d.ts +12 -0
  139. package/dist/esm/component/title.js +53 -0
  140. package/dist/esm/component/tooltip.d.ts +41 -0
  141. package/dist/esm/component/tooltip.js +131 -0
  142. package/dist/esm/component/treemapSeries.d.ts +57 -0
  143. package/dist/esm/component/treemapSeries.js +191 -0
  144. package/dist/esm/component/zeroAxis.d.ts +9 -0
  145. package/dist/esm/component/zeroAxis.js +49 -0
  146. package/dist/esm/eventEmitter.d.ts +8 -0
  147. package/dist/esm/eventEmitter.js +15 -0
  148. package/dist/esm/helpers/arrayUtil.d.ts +10 -0
  149. package/dist/esm/helpers/arrayUtil.js +54 -0
  150. package/dist/esm/helpers/axes.d.ts +67 -0
  151. package/dist/esm/helpers/axes.js +345 -0
  152. package/dist/esm/helpers/boxSeries.d.ts +5 -0
  153. package/dist/esm/helpers/boxSeries.js +71 -0
  154. package/dist/esm/helpers/calculator.d.ts +19 -0
  155. package/dist/esm/helpers/calculator.js +153 -0
  156. package/dist/esm/helpers/color.d.ts +153 -0
  157. package/dist/esm/helpers/color.js +218 -0
  158. package/dist/esm/helpers/colorSpectrum.d.ts +5 -0
  159. package/dist/esm/helpers/colorSpectrum.js +17 -0
  160. package/dist/esm/helpers/coordinate.d.ts +9 -0
  161. package/dist/esm/helpers/coordinate.js +51 -0
  162. package/dist/esm/helpers/dataLabels.d.ts +36 -0
  163. package/dist/esm/helpers/dataLabels.js +405 -0
  164. package/dist/esm/helpers/dom.d.ts +2 -0
  165. package/dist/esm/helpers/dom.js +8 -0
  166. package/dist/esm/helpers/downloader.d.ts +7 -0
  167. package/dist/esm/helpers/downloader.js +287 -0
  168. package/dist/esm/helpers/formatDate.d.ts +16 -0
  169. package/dist/esm/helpers/formatDate.js +140 -0
  170. package/dist/esm/helpers/geometric.d.ts +3 -0
  171. package/dist/esm/helpers/geometric.js +35 -0
  172. package/dist/esm/helpers/googleAnalytics.d.ts +1 -0
  173. package/dist/esm/helpers/googleAnalytics.js +39 -0
  174. package/dist/esm/helpers/htmlSanitizer.d.ts +1 -0
  175. package/dist/esm/helpers/htmlSanitizer.js +86 -0
  176. package/dist/esm/helpers/legend.d.ts +9 -0
  177. package/dist/esm/helpers/legend.js +47 -0
  178. package/dist/esm/helpers/pieSeries.d.ts +15 -0
  179. package/dist/esm/helpers/pieSeries.js +72 -0
  180. package/dist/esm/helpers/plot.d.ts +2 -0
  181. package/dist/esm/helpers/plot.js +4 -0
  182. package/dist/esm/helpers/radarSeries.d.ts +1 -0
  183. package/dist/esm/helpers/radarSeries.js +7 -0
  184. package/dist/esm/helpers/range.d.ts +6 -0
  185. package/dist/esm/helpers/range.js +16 -0
  186. package/dist/esm/helpers/responders.d.ts +37 -0
  187. package/dist/esm/helpers/responders.js +197 -0
  188. package/dist/esm/helpers/sector.d.ts +55 -0
  189. package/dist/esm/helpers/sector.js +117 -0
  190. package/dist/esm/helpers/squarifier.d.ts +8 -0
  191. package/dist/esm/helpers/squarifier.js +110 -0
  192. package/dist/esm/helpers/style.d.ts +14 -0
  193. package/dist/esm/helpers/style.js +48 -0
  194. package/dist/esm/helpers/theme.d.ts +58 -0
  195. package/dist/esm/helpers/theme.js +557 -0
  196. package/dist/esm/helpers/tooltip.d.ts +2 -0
  197. package/dist/esm/helpers/tooltip.js +18 -0
  198. package/dist/esm/helpers/tooltipTemplate.d.ts +21 -0
  199. package/dist/esm/helpers/tooltipTemplate.js +147 -0
  200. package/dist/esm/helpers/utils.d.ts +42 -0
  201. package/dist/esm/helpers/utils.js +268 -0
  202. package/dist/esm/helpers/validation.d.ts +6 -0
  203. package/dist/esm/helpers/validation.js +16 -0
  204. package/dist/esm/index.d.ts +40 -0
  205. package/dist/esm/index.js +75 -0
  206. package/dist/esm/message.d.ts +11 -0
  207. package/dist/esm/message.js +11 -0
  208. package/dist/esm/painter.d.ts +27 -0
  209. package/dist/esm/painter.js +88 -0
  210. package/dist/esm/responderDetectors.d.ts +6 -0
  211. package/dist/esm/responderDetectors.js +124 -0
  212. package/dist/esm/scale/coordinateScaleCalculator.d.ts +24 -0
  213. package/dist/esm/scale/coordinateScaleCalculator.js +174 -0
  214. package/dist/esm/scale/datetimeScaleCalculator.d.ts +20 -0
  215. package/dist/esm/scale/datetimeScaleCalculator.js +59 -0
  216. package/dist/esm/store/axes.d.ts +30 -0
  217. package/dist/esm/store/axes.js +282 -0
  218. package/dist/esm/store/category.d.ts +4 -0
  219. package/dist/esm/store/category.js +73 -0
  220. package/dist/esm/store/colorValueScale.d.ts +3 -0
  221. package/dist/esm/store/colorValueScale.js +56 -0
  222. package/dist/esm/store/dataRange.d.ts +4 -0
  223. package/dist/esm/store/dataRange.js +170 -0
  224. package/dist/esm/store/gaugeAxes.d.ts +4 -0
  225. package/dist/esm/store/gaugeAxes.js +175 -0
  226. package/dist/esm/store/heatmapAxes.d.ts +3 -0
  227. package/dist/esm/store/heatmapAxes.js +98 -0
  228. package/dist/esm/store/heatmapSeriesData.d.ts +3 -0
  229. package/dist/esm/store/heatmapSeriesData.js +34 -0
  230. package/dist/esm/store/layout.d.ts +12 -0
  231. package/dist/esm/store/layout.js +487 -0
  232. package/dist/esm/store/legend.d.ts +3 -0
  233. package/dist/esm/store/legend.js +435 -0
  234. package/dist/esm/store/nestedPieSeriesData.d.ts +3 -0
  235. package/dist/esm/store/nestedPieSeriesData.js +49 -0
  236. package/dist/esm/store/options.d.ts +3 -0
  237. package/dist/esm/store/options.js +62 -0
  238. package/dist/esm/store/plot.d.ts +3 -0
  239. package/dist/esm/store/plot.js +102 -0
  240. package/dist/esm/store/radialAxes.d.ts +8 -0
  241. package/dist/esm/store/radialAxes.js +199 -0
  242. package/dist/esm/store/reactive.d.ts +11 -0
  243. package/dist/esm/store/reactive.js +196 -0
  244. package/dist/esm/store/root.d.ts +3 -0
  245. package/dist/esm/store/root.js +46 -0
  246. package/dist/esm/store/scale.d.ts +3 -0
  247. package/dist/esm/store/scale.js +102 -0
  248. package/dist/esm/store/seriesData.d.ts +3 -0
  249. package/dist/esm/store/seriesData.js +299 -0
  250. package/dist/esm/store/stackSeriesData.d.ts +8 -0
  251. package/dist/esm/store/stackSeriesData.js +192 -0
  252. package/dist/esm/store/store.d.ts +20 -0
  253. package/dist/esm/store/store.js +112 -0
  254. package/dist/esm/store/theme.d.ts +3 -0
  255. package/dist/esm/store/theme.js +139 -0
  256. package/dist/esm/store/treemapSeriesData.d.ts +4 -0
  257. package/dist/esm/store/treemapSeriesData.js +93 -0
  258. package/dist/td-chart.css +127 -0
  259. package/dist/td-chart.js +41463 -0
  260. package/dist/td-chart.min.css +6 -0
  261. package/dist/td-chart.min.js +9 -0
  262. package/package.json +112 -0
  263. package/types/brushes.d.ts +30 -0
  264. package/types/charts.d.ts +152 -0
  265. package/types/components/axis.d.ts +71 -0
  266. package/types/components/circleLegend.d.ts +9 -0
  267. package/types/components/dataLabels.d.ts +119 -0
  268. package/types/components/exportMenu.d.ts +14 -0
  269. package/types/components/legend.d.ts +27 -0
  270. package/types/components/plot.d.ts +8 -0
  271. package/types/components/radialAxis.d.ts +22 -0
  272. package/types/components/radialPlot.d.ts +11 -0
  273. package/types/components/rangeSelection.d.ts +3 -0
  274. package/types/components/resetButton.d.ts +13 -0
  275. package/types/components/series.d.ts +386 -0
  276. package/types/components/spectrumLegend.d.ts +25 -0
  277. package/types/components/tooltip.d.ts +58 -0
  278. package/types/components/zoom.d.ts +3 -0
  279. package/types/eventEmitter.d.ts +12 -0
  280. package/types/index.d.ts +615 -0
  281. package/types/options.d.ts +833 -0
  282. package/types/resizeObserver.d.ts +54 -0
  283. package/types/store/store.d.ts +564 -0
  284. package/types/theme.d.ts +670 -0
@@ -0,0 +1,287 @@
1
+ import { isString, isUndefined, isNumber, includes, isNull, range, getFirstValidValue, } from "./utils";
2
+ import { getCoordinateXValue, getCoordinateYValue } from "./coordinate";
3
+ const DATA_URI_HEADERS = {
4
+ xls: 'data:application/vnd.ms-excel;base64,',
5
+ csv: 'data:text/csv;charset=utf-8,%EF%BB%BF' /* BOM for utf-8 */,
6
+ };
7
+ function getDownloadMethod() {
8
+ let method;
9
+ const isDownloadAttributeSupported = !isUndefined(document.createElement('a').download);
10
+ const isMSSaveOrOpenBlobSupported = !isUndefined(window.Blob && window.navigator.msSaveOrOpenBlob);
11
+ if (isMSSaveOrOpenBlobSupported) {
12
+ method = downloadWithMSSaveOrOpenBlob;
13
+ }
14
+ else if (isDownloadAttributeSupported) {
15
+ method = downloadWithAnchorElementDownloadAttribute;
16
+ }
17
+ return method;
18
+ }
19
+ /**
20
+ * Base64 string to blob
21
+ * original source ref: https://github.com/miguelmota/base64toblob/blob/master/base64toblob.js
22
+ * Licence: MIT Licence
23
+ */
24
+ function base64toBlob(base64String) {
25
+ const contentType = base64String
26
+ .substr(0, base64String.indexOf(';base64,'))
27
+ .substr(base64String.indexOf(':') + 1);
28
+ const sliceSize = 1024;
29
+ const byteCharacters = atob(base64String.substr(base64String.indexOf(',') + 1));
30
+ const byteArrays = [];
31
+ for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
32
+ const slice = byteCharacters.slice(offset, offset + sliceSize);
33
+ const byteNumbers = new Array(slice.length);
34
+ for (let i = 0; i < slice.length; i += 1) {
35
+ byteNumbers[i] = slice.charCodeAt(i);
36
+ }
37
+ byteArrays.push(new window.Uint8Array(byteNumbers));
38
+ }
39
+ try {
40
+ // for IE 11
41
+ return new Blob(byteArrays, { type: contentType });
42
+ }
43
+ catch (e) {
44
+ // for IE 10
45
+ return new Blob(byteArrays.map((byteArr) => byteArr.buffer), { type: contentType });
46
+ }
47
+ }
48
+ function isImageExtension(extension) {
49
+ return extension === 'jpeg' || extension === 'png';
50
+ }
51
+ function downloadWithMSSaveOrOpenBlob(fileName, extension, content, contentType) {
52
+ const blobObject = isImageExtension(extension)
53
+ ? base64toBlob(content)
54
+ : new Blob([content], { type: contentType });
55
+ window.navigator.msSaveOrOpenBlob(blobObject, `${fileName}.${extension}`);
56
+ }
57
+ function downloadWithAnchorElementDownloadAttribute(fileName, extension, content) {
58
+ if (content) {
59
+ const anchorElement = document.createElement('a');
60
+ anchorElement.href = content;
61
+ anchorElement.target = '_blank';
62
+ anchorElement.download = `${fileName}.${extension}`;
63
+ document.body.appendChild(anchorElement);
64
+ anchorElement.click();
65
+ anchorElement.remove();
66
+ }
67
+ }
68
+ function oneLineTrim(...args) {
69
+ const normalTag = (template, ...expressions) => template.reduce((accumulator, part, i) => accumulator + expressions[i - 1] + part);
70
+ return normalTag(...args).replace(/\n\s*/g, '');
71
+ }
72
+ function isNeedDataEncoding() {
73
+ const isDownloadAttributeSupported = !isUndefined(document.createElement('a').download);
74
+ const isMSSaveOrOpenBlobSupported = !isUndefined(window.Blob && window.navigator.msSaveOrOpenBlob);
75
+ return !isMSSaveOrOpenBlobSupported && isDownloadAttributeSupported;
76
+ }
77
+ function getBulletLongestArrayLength(arr, field) {
78
+ return arr.reduce((acc, cur, idx) => { var _a, _b; return (!idx || acc < ((_b = (_a = cur) === null || _a === void 0 ? void 0 : _a[field]) === null || _b === void 0 ? void 0 : _b.length) ? cur[field].length : acc); }, 0);
79
+ }
80
+ function makeBulletExportData({ series }) {
81
+ const seriesData = series.bullet.data;
82
+ const markerCount = getBulletLongestArrayLength(seriesData, 'markers');
83
+ const rangeCount = getBulletLongestArrayLength(seriesData, 'ranges');
84
+ const rangesHeaders = range(0, rangeCount).map((idx) => `Range ${idx + 1}`);
85
+ const markerHeaders = range(0, markerCount).map((idx) => `Marker ${idx + 1}`);
86
+ return seriesData.reduce((acc, { data, markers, name, ranges }) => {
87
+ const rangeDatum = rangesHeaders.map((_, index) => {
88
+ var _a;
89
+ const rangeData = (_a = ranges) === null || _a === void 0 ? void 0 : _a[index];
90
+ return rangeData ? `${rangeData[0]} ~ ${rangeData[1]}` : '';
91
+ });
92
+ const markerDatum = markerHeaders.map((_, index) => { var _a, _b; return _b = (_a = markers) === null || _a === void 0 ? void 0 : _a[index], (_b !== null && _b !== void 0 ? _b : ''); });
93
+ return [...acc, [name, (data !== null && data !== void 0 ? data : ''), ...rangeDatum, ...markerDatum]];
94
+ }, [['', 'Actual', ...rangesHeaders, ...markerHeaders]]);
95
+ }
96
+ function makeHeatmapExportData({ categories, series }) {
97
+ const xCategories = categories.x;
98
+ return series.heatmap.data.reduce((acc, { data, yCategory }) => [
99
+ ...acc,
100
+ [yCategory, ...data.map((datum) => (isNull(datum) ? '' : datum))],
101
+ ], [['', ...xCategories]]);
102
+ }
103
+ function recursiveTreemapData({ label, data, children = [] }, result) {
104
+ if (data) {
105
+ result.push([label, data]);
106
+ }
107
+ children.forEach((childrenData) => recursiveTreemapData(childrenData, result));
108
+ return result;
109
+ }
110
+ function makeTreemapExportData(exportData) {
111
+ const { series } = exportData;
112
+ const result = [['Label', 'Data']];
113
+ series.treemap.data.forEach((datum) => {
114
+ recursiveTreemapData(datum, result);
115
+ });
116
+ return result;
117
+ }
118
+ function makeBubbleExportData(exportData) {
119
+ const { series } = exportData;
120
+ return series.bubble.data.reduce((acc, { name, data }) => [
121
+ ...acc,
122
+ ...data.map((datum) => isNull(datum) ? [] : [name, datum.label, String(datum.x), datum.y, datum.r]),
123
+ ], [['Name', 'Label', 'X', 'Y', 'Radius']]);
124
+ }
125
+ function makeBoxPlotExportData(exportData) {
126
+ var _a;
127
+ const { series } = exportData;
128
+ const categories = (_a = exportData.categories, (_a !== null && _a !== void 0 ? _a : []));
129
+ return series.boxPlot.data.reduce((acc, { name, data, outliers }) => {
130
+ const values = ((data !== null && data !== void 0 ? data : [])).map((rawData, index) => {
131
+ var _a;
132
+ const outlierValue = (_a = ((outliers !== null && outliers !== void 0 ? outliers : [])).find((outlier) => outlier[0] === index)) === null || _a === void 0 ? void 0 : _a[1];
133
+ const value = outlierValue ? [...rawData, outlierValue] : [...rawData];
134
+ return value.join();
135
+ });
136
+ return [...acc, [name, ...values]];
137
+ }, [['', ...categories]]);
138
+ }
139
+ function makePieExportData(exportData) {
140
+ var _a;
141
+ const { series } = exportData;
142
+ const categories = (_a = exportData.categories, (_a !== null && _a !== void 0 ? _a : []));
143
+ return series.pie.data.reduce((acc, { name, data }) => {
144
+ const values = Array.isArray(data)
145
+ ? ((data !== null && data !== void 0 ? data : [])).reduce((accNestedPieValue, value) => {
146
+ var _a;
147
+ return [...accNestedPieValue, [value.name, (_a = value.data, (_a !== null && _a !== void 0 ? _a : ''))]];
148
+ }, [])
149
+ : [[name, (data !== null && data !== void 0 ? data : '')]];
150
+ return [...acc, ...values];
151
+ }, categories.length ? [['', ...categories]] : []);
152
+ }
153
+ function makeCoordinateExportDataValues(type, categories, data) {
154
+ return categories.map((category, index) => {
155
+ if (type === 'area' && Array.isArray(data[index])) {
156
+ return data[index].join();
157
+ }
158
+ const foundItem = data.find((value) => category === String(getCoordinateXValue(value)));
159
+ return foundItem ? getCoordinateYValue(foundItem) : '';
160
+ });
161
+ }
162
+ function makeExportData(exportData) {
163
+ const { series } = exportData;
164
+ const categories = exportData.categories;
165
+ return Object.keys(series).reduce((acc, type) => {
166
+ const result = series[type].data.map(({ name, data }) => {
167
+ const values = !isNumber(getFirstValidValue(data)) && includes(['line', 'area', 'scatter'], type)
168
+ ? makeCoordinateExportDataValues(type, categories, data)
169
+ : data.map((value) => (Array.isArray(value) ? value.join() : value));
170
+ return [name, ...values];
171
+ });
172
+ return [...acc, ...result];
173
+ }, series.gauge ? [] : [['', ...categories]]);
174
+ }
175
+ function get2DArrayFromRawData(exportData) {
176
+ let result;
177
+ const { series } = exportData;
178
+ if (series.bullet) {
179
+ result = makeBulletExportData(exportData);
180
+ }
181
+ else if (series.heatmap) {
182
+ result = makeHeatmapExportData(exportData);
183
+ }
184
+ else if (series.bubble) {
185
+ result = makeBubbleExportData(exportData);
186
+ }
187
+ else if (series.boxPlot) {
188
+ result = makeBoxPlotExportData(exportData);
189
+ }
190
+ else if (series.pie) {
191
+ result = makePieExportData(exportData);
192
+ }
193
+ else if (series.treemap) {
194
+ result = makeTreemapExportData(exportData);
195
+ }
196
+ else {
197
+ result = makeExportData(exportData);
198
+ }
199
+ return result;
200
+ }
201
+ function getTableElementStringForXLS(chartData2DArray) {
202
+ let tableElementString = '<table>';
203
+ chartData2DArray.forEach((row, rowIndex) => {
204
+ const cellTagName = rowIndex === 0 ? 'th' : 'td';
205
+ tableElementString += '<tr>';
206
+ row.forEach((cell, cellIndex) => {
207
+ const cellNumberClass = rowIndex !== 0 || cellIndex === 0 ? ' class="number"' : '';
208
+ const cellString = `<${cellTagName}${cellNumberClass}>${cell}</${cellTagName}>`;
209
+ tableElementString += cellString;
210
+ });
211
+ tableElementString += '</tr>';
212
+ });
213
+ tableElementString += '</table>';
214
+ return tableElementString;
215
+ }
216
+ function makeXLSBodyWithRawData(chartData2DArray) {
217
+ return oneLineTrim `<html xmlns:o="urn:schemas-microsoft-com:office:office"
218
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
219
+ xmlns="http://www.w3.org/TR/REC-html40">
220
+ <head>
221
+ <!--[if gte mso 9]>
222
+ <xml>
223
+ <x:ExcelWorkbook>
224
+ <x:ExcelWorksheets>
225
+ <x:ExcelWorksheet>
226
+ <x:Name>Ark1</x:Name>
227
+ <x:WorksheetOptions>
228
+ <x:DisplayGridlines/>
229
+ </x:WorksheetOptions>
230
+ </x:ExcelWorksheet>
231
+ </x:ExcelWorksheets>
232
+ </x:ExcelWorkbook>
233
+ </xml>
234
+ <![endif]-->
235
+ <meta name=ProgId content=Excel.Sheet>
236
+ <meta charset=UTF-8>
237
+ </head>
238
+ <body>
239
+ ${getTableElementStringForXLS(chartData2DArray)}
240
+ </body>
241
+ </html>`;
242
+ }
243
+ function makeCSVBodyWithRawData(chartData2DArray, option = {}) {
244
+ const { lineDelimiter = '\u000a', itemDelimiter = ',' } = option;
245
+ const lastRowIndex = chartData2DArray.length - 1;
246
+ let csvText = '';
247
+ chartData2DArray.forEach((row, rowIndex) => {
248
+ const lastCellIndex = row.length - 1;
249
+ row.forEach((cell, cellIndex) => {
250
+ const cellContent = isNumber(cell) ? cell : `"${cell}"`;
251
+ csvText += cellContent;
252
+ if (cellIndex < lastCellIndex) {
253
+ csvText += itemDelimiter;
254
+ }
255
+ });
256
+ if (rowIndex < lastRowIndex) {
257
+ csvText += lineDelimiter;
258
+ }
259
+ });
260
+ return csvText;
261
+ }
262
+ export function execDownload(fileName, extension, content, contentType) {
263
+ const downloadMethod = getDownloadMethod();
264
+ if (!isString(content) || !downloadMethod) {
265
+ return;
266
+ }
267
+ downloadMethod(fileName, extension, content, contentType);
268
+ }
269
+ export function downloadSpreadSheet(fileName, extension, data) {
270
+ const chartData2DArray = get2DArrayFromRawData(data);
271
+ const contentType = DATA_URI_HEADERS[extension].replace(/(data:|;base64,|,%EF%BB%BF)/g, '');
272
+ let content = '';
273
+ if (extension === 'csv') {
274
+ content = encodeURIComponent(makeCSVBodyWithRawData(chartData2DArray));
275
+ }
276
+ else {
277
+ content = makeXLSBodyWithRawData(chartData2DArray);
278
+ }
279
+ if (isNeedDataEncoding()) {
280
+ if (extension !== 'csv') {
281
+ // base64 encoding for data URI scheme.
282
+ content = window.btoa(unescape(encodeURIComponent(content)));
283
+ }
284
+ content = DATA_URI_HEADERS[extension] + content;
285
+ }
286
+ execDownload(fileName, extension, content, contentType);
287
+ }
@@ -0,0 +1,16 @@
1
+ import { DateOption } from "../../types/options";
2
+ export declare const DEFAULT_DATE_FORMAT = "YY-MM-DD hh:mm:ss";
3
+ export declare function getDateFormat(date?: DateOption): string | undefined;
4
+ export declare function formatDate(form: string, date: Date | {
5
+ year: number;
6
+ month: number;
7
+ date: number;
8
+ hour: number;
9
+ minute: number;
10
+ second: number;
11
+ }, option?: {
12
+ meridiemSet: {
13
+ AM?: string;
14
+ PM?: string;
15
+ };
16
+ }): string;
@@ -0,0 +1,140 @@
1
+ // https://github.com/nhn/tui.code-snippet/blob/master/formatDate/formatDate.js
2
+ import { isDate, isObject } from "./utils";
3
+ export const DEFAULT_DATE_FORMAT = 'YY-MM-DD hh:mm:ss';
4
+ export function getDateFormat(date) {
5
+ if (!date) {
6
+ return;
7
+ }
8
+ return isObject(date) ? date.format : DEFAULT_DATE_FORMAT;
9
+ }
10
+ const tokens = /[\\]*YYYY|[\\]*YY|[\\]*MMMM|[\\]*MMM|[\\]*MM|[\\]*M|[\\]*DD|[\\]*D|[\\]*HH|[\\]*H|[\\]*mm|[\\]*m|[\\]*ss|[\\]*s|[\\]*A/gi;
11
+ const MONTH_STR = [
12
+ 'Invalid month',
13
+ 'January',
14
+ 'February',
15
+ 'March',
16
+ 'April',
17
+ 'May',
18
+ 'Jun',
19
+ 'Jul',
20
+ 'August',
21
+ 'September',
22
+ 'October',
23
+ 'November',
24
+ 'December',
25
+ ];
26
+ const MONTH_DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
27
+ const replaceMap = {
28
+ M: (date) => Number(date.month),
29
+ MM: (date) => {
30
+ const month = date.month;
31
+ return Number(month) < 10 ? `0${month}` : month;
32
+ },
33
+ MMM: (date) => MONTH_STR[Number(date.month)].substr(0, 3),
34
+ MMMM: (date) => MONTH_STR[Number(date.month)],
35
+ D: (date) => Number(date.date),
36
+ d: (date) => replaceMap.D(date),
37
+ DD: (date) => {
38
+ const dayInMonth = date.date;
39
+ return Number(dayInMonth) < 10 ? `0${dayInMonth}` : dayInMonth;
40
+ },
41
+ dd: (date) => replaceMap.DD(date),
42
+ YY: (date) => Number(date.year) % 100,
43
+ yy: (date) => replaceMap.YY(date),
44
+ YYYY: (date) => {
45
+ let prefix = '20';
46
+ const year = date.year;
47
+ if (year > 69 && year < 100) {
48
+ prefix = '19';
49
+ }
50
+ return Number(year) < 100 ? prefix + String(year) : year;
51
+ },
52
+ yyyy: (date) => replaceMap.YYYY(date),
53
+ A: (date) => date.meridiem,
54
+ a: (date) => date.meridiem,
55
+ hh: (date) => {
56
+ const hour = date.hour;
57
+ return Number(hour) < 10 ? '0' + hour : hour;
58
+ },
59
+ HH: (date) => replaceMap.hh(date),
60
+ h: (date) => String(Number(date.hour)),
61
+ H: (date) => replaceMap.h(date),
62
+ m: (date) => String(Number(date.minute)),
63
+ mm: (date) => {
64
+ const minute = date.minute;
65
+ return Number(minute) < 10 ? `0${minute}` : minute;
66
+ },
67
+ s: (date) => String(Number(date.second)),
68
+ ss: (date) => {
69
+ const second = date.second;
70
+ return Number(second) < 10 ? `0${second}` : second;
71
+ },
72
+ };
73
+ function isLeapYear(month, year) {
74
+ return month === 2 && year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
75
+ }
76
+ function isValidDate(y, m, d) {
77
+ const year = Number(y);
78
+ const month = Number(m);
79
+ const date = Number(d);
80
+ const isValidYear = (year > -1 && year < 100) || (year > 1969 && year < 2070);
81
+ const isValidMonth = month > 0 && month < 13;
82
+ if (!isValidYear || !isValidMonth) {
83
+ return false;
84
+ }
85
+ const lastDayInMonth = isLeapYear(month, year) ? 29 : MONTH_DAYS[month];
86
+ return date > 0 && date <= lastDayInMonth;
87
+ }
88
+ /*
89
+ * key | Shorthand
90
+ * --------------- |-----------------------
91
+ * years | YY / YYYY / yy / yyyy
92
+ * months(n) | M / MM
93
+ * months(str) | MMM / MMMM
94
+ * days | D / DD / d / dd
95
+ * hours | H / HH / h / hh
96
+ * minutes | m / mm
97
+ * seconds | s / ss
98
+ * meridiem(AM,PM) | A / a
99
+ */
100
+ export function formatDate(form, date, option) {
101
+ var _a, _b, _c;
102
+ const am = (_b = (_a = option) === null || _a === void 0 ? void 0 : _a.meridiemSet.AM, (_b !== null && _b !== void 0 ? _b : 'AM'));
103
+ const pm = ((_c = option) === null || _c === void 0 ? void 0 : _c.meridiemSet.PM) || 'PM';
104
+ let nDate;
105
+ if (isDate(date)) {
106
+ nDate = {
107
+ year: date.getFullYear(),
108
+ month: date.getMonth() + 1,
109
+ date: date.getDate(),
110
+ hour: date.getHours(),
111
+ minute: date.getMinutes(),
112
+ second: date.getSeconds(),
113
+ };
114
+ }
115
+ else {
116
+ const { year, month, hour, minute, second } = date;
117
+ nDate = { year, month, date: date.date, hour, minute, second };
118
+ }
119
+ if (!isValidDate(nDate.year, nDate.month, nDate.date)) {
120
+ return '';
121
+ }
122
+ nDate.meridiem = '';
123
+ if (/([^\\]|^)[aA]\b/.test(form)) {
124
+ if (nDate.hour > 12) {
125
+ // See the clock system: https://en.wikipedia.org/wiki/12-hour_clock
126
+ nDate.hour %= 12;
127
+ }
128
+ if (nDate.hour === 0) {
129
+ nDate.hour = 12;
130
+ }
131
+ nDate.meridiem = nDate.hour > 11 ? pm : am;
132
+ }
133
+ return form.replace(tokens, (key) => {
134
+ if (key.indexOf('\\') > -1) {
135
+ // escape character
136
+ return key.replace(/\\/, '');
137
+ }
138
+ return replaceMap[key](nDate) || '';
139
+ });
140
+ }
@@ -0,0 +1,3 @@
1
+ export declare const ANGLE_CANDIDATES: number[];
2
+ export declare function calculateRotatedWidth(degree: number, width: number, height: number): number;
3
+ export declare function calculateRotatedHeight(degree: number, width: number, height: number): number;
@@ -0,0 +1,35 @@
1
+ const RAD = Math.PI / 180;
2
+ const ANGLE_90 = 90;
3
+ export const ANGLE_CANDIDATES = [0, 25, 45, 65, 85, 90];
4
+ /**
5
+ * Calculate adjacent.
6
+ *
7
+ * H : Hypotenuse
8
+ * A : Adjacent
9
+ * O : Opposite
10
+ * D : Degree
11
+ *
12
+ * /|
13
+ * / |
14
+ * H / | O
15
+ * / |
16
+ * /\ D |
17
+ * -----
18
+ * A
19
+ */
20
+ function calculateAdjacent(degree, hypotenuse) {
21
+ return Math.cos(degree * RAD) * hypotenuse;
22
+ }
23
+ function calculateOpposite(degree, hypotenuse) {
24
+ return Math.sin(degree * RAD) * hypotenuse;
25
+ }
26
+ export function calculateRotatedWidth(degree, width, height) {
27
+ const centerHalf = calculateAdjacent(degree, width / 2);
28
+ const sideHalf = calculateAdjacent(ANGLE_90 - degree, height / 2);
29
+ return (centerHalf + sideHalf) * 2;
30
+ }
31
+ export function calculateRotatedHeight(degree, width, height) {
32
+ const centerHalf = calculateOpposite(degree, width / 2);
33
+ const sideHalf = calculateOpposite(ANGLE_90 - degree, height / 2);
34
+ return (centerHalf + sideHalf) * 2;
35
+ }
@@ -0,0 +1 @@
1
+ export declare function sendHostname(): void;
@@ -0,0 +1,39 @@
1
+ const MS_7_DAYS = 7 * 24 * 60 * 60 * 1000;
2
+ function isExpired(date) {
3
+ const now = new Date().getTime();
4
+ return now - date > MS_7_DAYS;
5
+ }
6
+ function imagePing(url, trackingInfo) {
7
+ const queryString = Object.keys(trackingInfo)
8
+ .map((id, index) => `${index ? '&' : ''}${id}=${trackingInfo[id]}`)
9
+ .join('');
10
+ const trackingElement = document.createElement('img');
11
+ trackingElement.src = `${url}?${queryString}`;
12
+ trackingElement.style.display = 'none';
13
+ document.body.appendChild(trackingElement);
14
+ document.body.removeChild(trackingElement);
15
+ return trackingElement;
16
+ }
17
+ export function sendHostname() {
18
+ const hostname = location.hostname;
19
+ const applicationKeyForStorage = `TOAST UI chart for ${hostname}: Statistics`;
20
+ const date = window.localStorage.getItem(applicationKeyForStorage);
21
+ if (date && !isExpired(Number(date))) {
22
+ return;
23
+ }
24
+ window.localStorage.setItem(applicationKeyForStorage, String(new Date().getTime()));
25
+ setTimeout(() => {
26
+ if (document.readyState === 'interactive' || document.readyState === 'complete') {
27
+ imagePing('https://www.google-analytics.com/collect', {
28
+ v: 1,
29
+ t: 'event',
30
+ tid: 'UA-129983528-2',
31
+ cid: hostname,
32
+ dp: hostname,
33
+ dh: 'chart',
34
+ el: 'chart',
35
+ ec: 'use',
36
+ });
37
+ }
38
+ }, 1000);
39
+ }
@@ -0,0 +1 @@
1
+ export declare function sanitizeHTML(html: string): string;
@@ -0,0 +1,86 @@
1
+ import { findNodes, removeNode } from "./dom";
2
+ import { isString, toArray } from "./utils";
3
+ const HTML_ATTR_LIST_RX = new RegExp('^(abbr|align|alt|axis|bgcolor|border|cellpadding|cellspacing|class|clear|' +
4
+ 'color|cols|compact|coords|dir|face|headers|height|hreflang|hspace|' +
5
+ 'ismap|lang|language|nohref|nowrap|rel|rev|rows|rules|' +
6
+ 'scope|scrolling|shape|size|span|start|summary|tabindex|target|title|type|' +
7
+ 'valign|value|vspace|width|checked|mathvariant|encoding|id|name|' +
8
+ 'background|cite|href|longdesc|src|usemap|xlink:href|data-+|checked|style)', 'g');
9
+ const SVG_ATTR_LIST_RX = new RegExp('^(accent-height|accumulate|additive|alphabetic|arabic-form|ascent|' +
10
+ 'baseProfile|bbox|begin|by|calcMode|cap-height|class|color|color-rendering|content|' +
11
+ 'cx|cy|d|dx|dy|descent|display|dur|end|fill|fill-rule|font-family|font-size|font-stretch|' +
12
+ 'font-style|font-variant|font-weight|from|fx|fy|g1|g2|glyph-name|gradientUnits|hanging|' +
13
+ 'height|horiz-adv-x|horiz-origin-x|ideographic|k|keyPoints|keySplines|keyTimes|lang|' +
14
+ 'marker-end|marker-mid|marker-start|markerHeight|markerUnits|markerWidth|mathematical|' +
15
+ 'max|min|offset|opacity|orient|origin|overline-position|overline-thickness|panose-1|' +
16
+ 'path|pathLength|points|preserveAspectRatio|r|refX|refY|repeatCount|repeatDur|' +
17
+ 'requiredExtensions|requiredFeatures|restart|rotate|rx|ry|slope|stemh|stemv|stop-color|' +
18
+ 'stop-opacity|strikethrough-position|strikethrough-thickness|stroke|stroke-dasharray|' +
19
+ 'stroke-dashoffset|stroke-linecap|stroke-linejoin|stroke-miterlimit|stroke-opacity|' +
20
+ 'stroke-width|systemLanguage|target|text-anchor|to|transform|type|u1|u2|underline-position|' +
21
+ 'underline-thickness|unicode|unicode-range|units-per-em|values|version|viewBox|visibility|' +
22
+ 'width|widths|x|x-height|x1|x2|xlink:actuate|xlink:arcrole|xlink:role|xlink:show|xlink:title|' +
23
+ 'xlink:type|xml:base|xml:lang|xml:space|xmlns|xmlns:xlink|y|y1|y2|zoomAndPan)', 'g');
24
+ const DEFAULT_TAG_DENY_LIST = [
25
+ 'script',
26
+ 'iframe',
27
+ 'textarea',
28
+ 'form',
29
+ 'button',
30
+ 'select',
31
+ 'input',
32
+ 'meta',
33
+ 'style',
34
+ 'link',
35
+ 'title',
36
+ 'embed',
37
+ 'object',
38
+ ];
39
+ const XSS_ATTR_RX = /href|src|background/gi;
40
+ const XSS_VALUE_RX = /((java|vb|live)script|x):/gi;
41
+ const ON_EVENT_RX = /^on\S+/;
42
+ export function sanitizeHTML(html) {
43
+ const root = document.createElement('div');
44
+ if (isString(html)) {
45
+ html = html.replace(/<!--[\s\S]*?-->/g, '');
46
+ root.innerHTML = html;
47
+ }
48
+ else {
49
+ root.appendChild(html);
50
+ }
51
+ removeUnnecessaryTags(root);
52
+ leaveOnlyWhitelistAttribute(root);
53
+ return root.innerHTML;
54
+ }
55
+ function removeUnnecessaryTags(html) {
56
+ const removedTags = findNodes(html, DEFAULT_TAG_DENY_LIST.join(','));
57
+ removedTags.forEach((node) => {
58
+ removeNode(node);
59
+ });
60
+ }
61
+ function isXSSAttribute(attrName, attrValue) {
62
+ return attrName.match(XSS_ATTR_RX) && attrValue.match(XSS_VALUE_RX);
63
+ }
64
+ function removeBlacklistAttributes(node, blacklistAttrs) {
65
+ blacklistAttrs.forEach(({ name }) => {
66
+ if (ON_EVENT_RX.test(name)) {
67
+ node[name] = null;
68
+ }
69
+ if (node.getAttribute(name)) {
70
+ node.removeAttribute(name);
71
+ }
72
+ });
73
+ }
74
+ function leaveOnlyWhitelistAttribute(html) {
75
+ findNodes(html, '*').forEach((node) => {
76
+ const { attributes } = node;
77
+ const blacklist = toArray(attributes).filter((attr) => {
78
+ const { name, value } = attr;
79
+ const htmlAttr = name.match(HTML_ATTR_LIST_RX);
80
+ const svgAttr = name.match(SVG_ATTR_LIST_RX);
81
+ const xssAttr = htmlAttr && isXSSAttribute(name, value);
82
+ return (!htmlAttr && !svgAttr) || xssAttr;
83
+ });
84
+ removeBlacklistAttributes(node, blacklist);
85
+ });
86
+ }
@@ -0,0 +1,9 @@
1
+ import { ChartType, Legend, LegendIconType, Options, RawSeries, Series } from "../../types/store/store";
2
+ import { BubbleChartOptions, HeatmapChartOptions, TreemapChartOptions, GaugeChartOptions } from "../../types/options";
3
+ export declare type OptionsWithNormalLegendType = Exclude<Options, TreemapChartOptions | HeatmapChartOptions | GaugeChartOptions>;
4
+ export declare function getActiveSeriesMap(legend: Legend): {};
5
+ export declare function showCircleLegend(options: BubbleChartOptions): boolean;
6
+ export declare function showLegend(options: Options, series: Series | RawSeries): boolean;
7
+ export declare function showCheckbox(options: OptionsWithNormalLegendType): boolean;
8
+ export declare function getIconType(type: ChartType): LegendIconType;
9
+ export declare function getLegendAlign(options: Options): import("../../types/components/axis").ArrowDirection;
@@ -0,0 +1,47 @@
1
+ import { includes, isUndefined } from "./utils";
2
+ export function getActiveSeriesMap(legend) {
3
+ return legend.data.reduce((acc, { active, label }) => (Object.assign(Object.assign({}, acc), { [label]: active })), {});
4
+ }
5
+ export function showCircleLegend(options) {
6
+ var _a, _b, _c;
7
+ return _c = (_b = (_a = options) === null || _a === void 0 ? void 0 : _a.circleLegend) === null || _b === void 0 ? void 0 : _b.visible, (_c !== null && _c !== void 0 ? _c : true);
8
+ }
9
+ export function showLegend(options, series) {
10
+ var _a, _b, _c;
11
+ if (series.gauge ||
12
+ (series.treemap && !((_a = options.series) === null || _a === void 0 ? void 0 : _a.useColorValue))) {
13
+ return false;
14
+ }
15
+ return isUndefined((_b = options.legend) === null || _b === void 0 ? void 0 : _b.visible) ? true : !!((_c = options.legend) === null || _c === void 0 ? void 0 : _c.visible);
16
+ }
17
+ export function showCheckbox(options) {
18
+ var _a, _b;
19
+ return isUndefined((_a = options.legend) === null || _a === void 0 ? void 0 : _a.showCheckbox) ? true : !!((_b = options.legend) === null || _b === void 0 ? void 0 : _b.showCheckbox);
20
+ }
21
+ // @TODO: Need to manage with chart type constant/Enum
22
+ function useRectIcon(type) {
23
+ return includes(['bar', 'column', 'area', 'pie', 'boxPlot', 'bullet', 'radialBar'], type);
24
+ }
25
+ function useCircleIcon(type) {
26
+ return includes(['bubble', 'scatter'], type);
27
+ }
28
+ function useLineIcon(type) {
29
+ return includes(['line', 'radar'], type);
30
+ }
31
+ export function getIconType(type) {
32
+ let iconType = 'spectrum';
33
+ if (useCircleIcon(type)) {
34
+ iconType = 'circle';
35
+ }
36
+ else if (useRectIcon(type)) {
37
+ iconType = 'rect';
38
+ }
39
+ else if (useLineIcon(type)) {
40
+ iconType = 'line';
41
+ }
42
+ return iconType;
43
+ }
44
+ export function getLegendAlign(options) {
45
+ var _a, _b;
46
+ return _b = (_a = options.legend) === null || _a === void 0 ? void 0 : _a.align, (_b !== null && _b !== void 0 ? _b : 'right');
47
+ }