@semcore/d3-chart 2.2.6 → 2.3.0-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 (217) hide show
  1. package/CHANGELOG.md +3 -9
  2. package/lib/cjs/Area.js +16 -9
  3. package/lib/cjs/Area.js.map +1 -1
  4. package/lib/cjs/Axis.js +56 -17
  5. package/lib/cjs/Axis.js.map +1 -1
  6. package/lib/cjs/Bar.js +20 -9
  7. package/lib/cjs/Bar.js.map +1 -1
  8. package/lib/cjs/Bubble.js +20 -11
  9. package/lib/cjs/Bubble.js.map +1 -1
  10. package/lib/cjs/ClipPath.js +1 -0
  11. package/lib/cjs/ClipPath.js.map +1 -1
  12. package/lib/cjs/Donut.js +22 -12
  13. package/lib/cjs/Donut.js.map +1 -1
  14. package/lib/cjs/Dots.js +10 -9
  15. package/lib/cjs/Dots.js.map +1 -1
  16. package/lib/cjs/GroupBar.js +12 -8
  17. package/lib/cjs/GroupBar.js.map +1 -1
  18. package/lib/cjs/HorizontalBar.js +20 -9
  19. package/lib/cjs/HorizontalBar.js.map +1 -1
  20. package/lib/cjs/Hover.js +8 -4
  21. package/lib/cjs/Hover.js.map +1 -1
  22. package/lib/cjs/Line.js +15 -9
  23. package/lib/cjs/Line.js.map +1 -1
  24. package/lib/cjs/Plot.js +46 -8
  25. package/lib/cjs/Plot.js.map +1 -1
  26. package/lib/cjs/RadialTree.js +25 -13
  27. package/lib/cjs/RadialTree.js.map +1 -1
  28. package/lib/cjs/ReferenceLine.js +10 -10
  29. package/lib/cjs/ResponsiveContainer.js +0 -1
  30. package/lib/cjs/ResponsiveContainer.js.map +1 -1
  31. package/lib/cjs/ScatterPlot.js +17 -8
  32. package/lib/cjs/ScatterPlot.js.map +1 -1
  33. package/lib/cjs/StackBar.js +12 -8
  34. package/lib/cjs/StackBar.js.map +1 -1
  35. package/lib/cjs/StackedArea.js +8 -7
  36. package/lib/cjs/StackedArea.js.map +1 -1
  37. package/lib/cjs/Tooltip.js +8 -8
  38. package/lib/cjs/Venn.js +25 -9
  39. package/lib/cjs/Venn.js.map +1 -1
  40. package/lib/cjs/a11y/PlotA11yModule.js +185 -0
  41. package/lib/cjs/a11y/PlotA11yModule.js.map +1 -0
  42. package/lib/cjs/a11y/PlotA11yView.js +285 -0
  43. package/lib/cjs/a11y/PlotA11yView.js.map +1 -0
  44. package/lib/cjs/a11y/bezier.js +44 -0
  45. package/lib/cjs/a11y/bezier.js.map +1 -0
  46. package/lib/cjs/a11y/datasets/charts-a11y.js +591 -0
  47. package/lib/cjs/a11y/datasets/charts-a11y.js.map +1 -0
  48. package/lib/cjs/a11y/datasets/gold.json +7961 -0
  49. package/lib/cjs/a11y/datasets/imdb.json +10002 -0
  50. package/lib/cjs/a11y/datasets/readme.md +5 -0
  51. package/lib/cjs/a11y/datasets/stores.json +6274 -0
  52. package/lib/cjs/a11y/datasets/titanic.json +5436 -0
  53. package/lib/cjs/a11y/focus.js +57 -0
  54. package/lib/cjs/a11y/focus.js.map +1 -0
  55. package/lib/cjs/a11y/hints.js +141 -0
  56. package/lib/cjs/a11y/hints.js.map +1 -0
  57. package/lib/cjs/a11y/insights.js +785 -0
  58. package/lib/cjs/a11y/insights.js.map +1 -0
  59. package/lib/cjs/a11y/intl.js +31 -0
  60. package/lib/cjs/a11y/intl.js.map +1 -0
  61. package/lib/cjs/a11y/locale.js +48 -0
  62. package/lib/cjs/a11y/locale.js.map +1 -0
  63. package/lib/cjs/a11y/serialize.js +439 -0
  64. package/lib/cjs/a11y/serialize.js.map +1 -0
  65. package/lib/cjs/a11y/summarize.js +21 -0
  66. package/lib/cjs/a11y/summarize.js.map +1 -0
  67. package/lib/cjs/a11y/translations/module/de.json +5 -0
  68. package/lib/cjs/a11y/translations/module/en.json +5 -0
  69. package/lib/cjs/a11y/translations/module/es.json +5 -0
  70. package/lib/cjs/a11y/translations/module/fr.json +5 -0
  71. package/lib/cjs/a11y/translations/module/it.json +5 -0
  72. package/lib/cjs/a11y/translations/module/ja.json +5 -0
  73. package/lib/cjs/a11y/translations/module/ko.json +5 -0
  74. package/lib/cjs/a11y/translations/module/pt.json +5 -0
  75. package/lib/cjs/a11y/translations/module/tr.json +5 -0
  76. package/lib/cjs/a11y/translations/module/translations.js +46 -0
  77. package/lib/cjs/a11y/translations/module/translations.js.map +1 -0
  78. package/lib/cjs/a11y/translations/module/vi.json +5 -0
  79. package/lib/cjs/a11y/translations/module/zh.json +5 -0
  80. package/lib/cjs/a11y/translations/view/de.json +42 -0
  81. package/lib/cjs/a11y/translations/view/en.csv +41 -0
  82. package/lib/cjs/a11y/translations/view/en.json +42 -0
  83. package/lib/cjs/a11y/translations/view/es.json +42 -0
  84. package/lib/cjs/a11y/translations/view/fr.json +42 -0
  85. package/lib/cjs/a11y/translations/view/it.json +42 -0
  86. package/lib/cjs/a11y/translations/view/ja.json +42 -0
  87. package/lib/cjs/a11y/translations/view/ko.json +42 -0
  88. package/lib/cjs/a11y/translations/view/pt.json +42 -0
  89. package/lib/cjs/a11y/translations/view/tr.json +42 -0
  90. package/lib/cjs/a11y/translations/view/translations.js +46 -0
  91. package/lib/cjs/a11y/translations/view/translations.js.map +1 -0
  92. package/lib/cjs/a11y/translations/view/vi.json +42 -0
  93. package/lib/cjs/a11y/translations/view/zh.json +42 -0
  94. package/lib/cjs/createElement.js +3 -1
  95. package/lib/cjs/createElement.js.map +1 -1
  96. package/lib/cjs/style/plot.shadow.css +10 -0
  97. package/lib/cjs/style/plotA11yModule.shadow.css +13 -0
  98. package/lib/cjs/style/plotA11yView.shadow.css +39 -0
  99. package/lib/cjs/types/Plot.d.ts +75 -0
  100. package/lib/cjs/utils.js +9 -1
  101. package/lib/cjs/utils.js.map +1 -1
  102. package/lib/es6/Area.js +16 -9
  103. package/lib/es6/Area.js.map +1 -1
  104. package/lib/es6/Axis.js +56 -17
  105. package/lib/es6/Axis.js.map +1 -1
  106. package/lib/es6/Bar.js +20 -9
  107. package/lib/es6/Bar.js.map +1 -1
  108. package/lib/es6/Bubble.js +20 -11
  109. package/lib/es6/Bubble.js.map +1 -1
  110. package/lib/es6/ClipPath.js +1 -0
  111. package/lib/es6/ClipPath.js.map +1 -1
  112. package/lib/es6/Donut.js +22 -12
  113. package/lib/es6/Donut.js.map +1 -1
  114. package/lib/es6/Dots.js +10 -9
  115. package/lib/es6/Dots.js.map +1 -1
  116. package/lib/es6/GroupBar.js +12 -8
  117. package/lib/es6/GroupBar.js.map +1 -1
  118. package/lib/es6/HorizontalBar.js +20 -9
  119. package/lib/es6/HorizontalBar.js.map +1 -1
  120. package/lib/es6/Hover.js +8 -4
  121. package/lib/es6/Hover.js.map +1 -1
  122. package/lib/es6/Line.js +15 -9
  123. package/lib/es6/Line.js.map +1 -1
  124. package/lib/es6/Plot.js +48 -9
  125. package/lib/es6/Plot.js.map +1 -1
  126. package/lib/es6/RadialTree.js +25 -13
  127. package/lib/es6/RadialTree.js.map +1 -1
  128. package/lib/es6/ReferenceLine.js +10 -10
  129. package/lib/es6/ResponsiveContainer.js +0 -1
  130. package/lib/es6/ResponsiveContainer.js.map +1 -1
  131. package/lib/es6/ScatterPlot.js +17 -8
  132. package/lib/es6/ScatterPlot.js.map +1 -1
  133. package/lib/es6/StackBar.js +12 -8
  134. package/lib/es6/StackBar.js.map +1 -1
  135. package/lib/es6/StackedArea.js +8 -7
  136. package/lib/es6/StackedArea.js.map +1 -1
  137. package/lib/es6/Tooltip.js +8 -8
  138. package/lib/es6/Venn.js +25 -9
  139. package/lib/es6/Venn.js.map +1 -1
  140. package/lib/es6/a11y/PlotA11yModule.js +160 -0
  141. package/lib/es6/a11y/PlotA11yModule.js.map +1 -0
  142. package/lib/es6/a11y/PlotA11yView.js +254 -0
  143. package/lib/es6/a11y/PlotA11yView.js.map +1 -0
  144. package/lib/es6/a11y/bezier.js +35 -0
  145. package/lib/es6/a11y/bezier.js.map +1 -0
  146. package/lib/es6/a11y/datasets/charts-a11y.js +590 -0
  147. package/lib/es6/a11y/datasets/charts-a11y.js.map +1 -0
  148. package/lib/es6/a11y/datasets/gold.json +7961 -0
  149. package/lib/es6/a11y/datasets/imdb.json +10002 -0
  150. package/lib/es6/a11y/datasets/readme.md +5 -0
  151. package/lib/es6/a11y/datasets/stores.json +6274 -0
  152. package/lib/es6/a11y/datasets/titanic.json +5436 -0
  153. package/lib/es6/a11y/focus.js +48 -0
  154. package/lib/es6/a11y/focus.js.map +1 -0
  155. package/lib/es6/a11y/hints.js +123 -0
  156. package/lib/es6/a11y/hints.js.map +1 -0
  157. package/lib/es6/a11y/insights.js +779 -0
  158. package/lib/es6/a11y/insights.js.map +1 -0
  159. package/lib/es6/a11y/intl.js +18 -0
  160. package/lib/es6/a11y/intl.js.map +1 -0
  161. package/lib/es6/a11y/locale.js +36 -0
  162. package/lib/es6/a11y/locale.js.map +1 -0
  163. package/lib/es6/a11y/serialize.js +423 -0
  164. package/lib/es6/a11y/serialize.js.map +1 -0
  165. package/lib/es6/a11y/summarize.js +10 -0
  166. package/lib/es6/a11y/summarize.js.map +1 -0
  167. package/lib/es6/a11y/translations/module/de.json +5 -0
  168. package/lib/es6/a11y/translations/module/en.json +5 -0
  169. package/lib/es6/a11y/translations/module/es.json +5 -0
  170. package/lib/es6/a11y/translations/module/fr.json +5 -0
  171. package/lib/es6/a11y/translations/module/it.json +5 -0
  172. package/lib/es6/a11y/translations/module/ja.json +5 -0
  173. package/lib/es6/a11y/translations/module/ko.json +5 -0
  174. package/lib/es6/a11y/translations/module/pt.json +5 -0
  175. package/lib/es6/a11y/translations/module/tr.json +5 -0
  176. package/lib/es6/a11y/translations/module/translations.js +25 -0
  177. package/lib/es6/a11y/translations/module/translations.js.map +1 -0
  178. package/lib/es6/a11y/translations/module/vi.json +5 -0
  179. package/lib/es6/a11y/translations/module/zh.json +5 -0
  180. package/lib/es6/a11y/translations/view/de.json +42 -0
  181. package/lib/es6/a11y/translations/view/en.csv +41 -0
  182. package/lib/es6/a11y/translations/view/en.json +42 -0
  183. package/lib/es6/a11y/translations/view/es.json +42 -0
  184. package/lib/es6/a11y/translations/view/fr.json +42 -0
  185. package/lib/es6/a11y/translations/view/it.json +42 -0
  186. package/lib/es6/a11y/translations/view/ja.json +42 -0
  187. package/lib/es6/a11y/translations/view/ko.json +42 -0
  188. package/lib/es6/a11y/translations/view/pt.json +42 -0
  189. package/lib/es6/a11y/translations/view/tr.json +42 -0
  190. package/lib/es6/a11y/translations/view/translations.js +25 -0
  191. package/lib/es6/a11y/translations/view/translations.js.map +1 -0
  192. package/lib/es6/a11y/translations/view/vi.json +42 -0
  193. package/lib/es6/a11y/translations/view/zh.json +42 -0
  194. package/lib/es6/createElement.js +3 -1
  195. package/lib/es6/createElement.js.map +1 -1
  196. package/lib/es6/style/plot.shadow.css +10 -0
  197. package/lib/es6/style/plotA11yModule.shadow.css +13 -0
  198. package/lib/es6/style/plotA11yView.shadow.css +39 -0
  199. package/lib/es6/types/Plot.d.ts +75 -0
  200. package/lib/es6/utils.js +5 -0
  201. package/lib/es6/utils.js.map +1 -1
  202. package/lib/types/Plot.d.ts +75 -0
  203. package/lib/types/a11y/PlotA11yModule.d.ts +12 -0
  204. package/lib/types/a11y/PlotA11yView.d.ts +3 -0
  205. package/lib/types/a11y/bezier.d.ts +8 -0
  206. package/lib/types/a11y/datasets/charts-a11y.d.ts +0 -0
  207. package/lib/types/a11y/focus.d.ts +5 -0
  208. package/lib/types/a11y/hints.d.ts +99 -0
  209. package/lib/types/a11y/insights.d.ts +54 -0
  210. package/lib/types/a11y/intl.d.ts +8 -0
  211. package/lib/types/a11y/locale.d.ts +3 -0
  212. package/lib/types/a11y/serialize.d.ts +16 -0
  213. package/lib/types/a11y/summarize.d.ts +2 -0
  214. package/lib/types/a11y/translations/module/translations.d.ts +5 -0
  215. package/lib/types/a11y/translations/view/translations.d.ts +5 -0
  216. package/lib/types/utils.d.ts +1 -0
  217. package/package.json +3 -2
@@ -0,0 +1,785 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.extractDataInsights = void 0;
9
+
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
+
14
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
+
16
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
17
+
18
+ var _bezier = require("./bezier");
19
+
20
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
21
+
22
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
23
+
24
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
25
+
26
+ var getPropByPath = function getPropByPath(obj, path) {
27
+ if (typeof path === 'number') path = String(path);
28
+ if (typeof path === 'string') path = path.split('.');
29
+
30
+ for (var i = 0; i < path.length; i++) {
31
+ if ((0, _typeof2["default"])(obj) !== 'object' || obj === null) return obj;
32
+ obj = obj[path[i]];
33
+ }
34
+
35
+ return obj;
36
+ };
37
+
38
+ var movingAverage = function movingAverage(data, frame) {
39
+ var result = [];
40
+ frame = Math.floor(frame) % 2 === data.length % 2 ? Math.floor(frame) : Math.ceil(frame);
41
+
42
+ for (var i = 0; i < data.length; i++) {
43
+ var startIndex = Math.max(0, i - Math.floor(frame / 2));
44
+ var endIndex = Math.min(data.length, i + Math.ceil(frame / 2));
45
+ startIndex = Math.min(startIndex, Math.max(0, endIndex - frame));
46
+ endIndex = Math.max(endIndex, Math.min(data.length, startIndex + frame));
47
+ var part = data.slice(startIndex, endIndex);
48
+ var sum = part.reduce(function (sum, item) {
49
+ return sum + item;
50
+ }, 0);
51
+ var value = sum / part.length;
52
+ result.push(value);
53
+ }
54
+
55
+ return result;
56
+ };
57
+
58
+ var extractDataInsights = function extractDataInsights(data, hints, config) {
59
+ var _config$dataType, _hints$axesTitle$vert, _ref;
60
+
61
+ var insights = [];
62
+ var dataType = (_config$dataType = config.dataType) !== null && _config$dataType !== void 0 ? _config$dataType : hints.dataType;
63
+ var dataRange = [];
64
+ var groupKeys = (0, _toConsumableArray2["default"])(hints.groups);
65
+ var dataTitle = (_hints$axesTitle$vert = hints.axesTitle.vertical) !== null && _hints$axesTitle$vert !== void 0 ? _hints$axesTitle$vert : hints.axesTitle.horizontal;
66
+ var entitiesCount = 0;
67
+ var keysMap = Object.fromEntries(Object.keys((_ref = Array.isArray(data) ? data[0] : data) !== null && _ref !== void 0 ? _ref : {}).map(function (key) {
68
+ return [key, true];
69
+ }));
70
+
71
+ if (!dataType) {
72
+ if ((keysMap['y'] || keysMap['y1'] || keysMap['y2']) && keysMap['x'] && (keysMap['value'] || keysMap['label']) || hints.fields.horizontalAxes.size > 0 && hints.fields.verticalAxes.size > 0 && hints.fields.valueAxes.size > 0) {
73
+ dataType = 'points-cloud';
74
+ } else if (Array.isArray(data) && data.length > 6) {
75
+ dataType = 'time-series';
76
+ } else if (Array.isArray(data) && Object.keys(keysMap).length >= 3) {
77
+ var possibleGroupKeys = Object.keys(keysMap).filter(function (key) {
78
+ return typeof data[0][key] === 'string';
79
+ }).filter(function (key) {
80
+ var allData = data.map(function (row) {
81
+ return row[key];
82
+ });
83
+ return new Set(allData).size === allData.length;
84
+ });
85
+
86
+ if (possibleGroupKeys.length === 1) {
87
+ groupKeys = possibleGroupKeys;
88
+ dataType = 'grouped-values';
89
+ } else {
90
+ dataType = 'values-set';
91
+ }
92
+ } else {
93
+ dataType = 'values-set';
94
+ }
95
+ }
96
+
97
+ if (dataType === 'grouped-values' && groupKeys.length === 0) {
98
+ dataType = 'values-set';
99
+ }
100
+
101
+ if (Array.isArray(data)) {
102
+ if (dataType === 'time-series') {
103
+ var _ref2, _hints$titles$getHori, _hints$titles$getHori2, _hints$titles, _ref3, _hints$titles$getHori3, _hints$titles$getHori4, _hints$titles2;
104
+
105
+ var firstRow = data[0];
106
+ var lastRow = data[data.length - 1];
107
+ var possibleValueKeys = ['y', 'value'].concat((0, _toConsumableArray2["default"])(hints.fields.verticalAxes));
108
+ var valuesKeys = possibleValueKeys.filter(function (key) {
109
+ return keysMap[key];
110
+ });
111
+ var possibleLabelKeys = ['label', 'x'].concat((0, _toConsumableArray2["default"])(hints.fields.horizontalAxes));
112
+ var labelsKey = possibleLabelKeys.filter(function (key) {
113
+ return keysMap[key];
114
+ })[0];
115
+ entitiesCount = Object.keys(valuesKeys).length;
116
+ var fromKey = firstRow[labelsKey];
117
+ var toKey = lastRow[labelsKey];
118
+ var from = (_ref2 = (_hints$titles$getHori = (_hints$titles$getHori2 = (_hints$titles = hints.titles).getHorizontalAxesTitle) === null || _hints$titles$getHori2 === void 0 ? void 0 : _hints$titles$getHori2.call(_hints$titles, fromKey)) !== null && _hints$titles$getHori !== void 0 ? _hints$titles$getHori : hints.titles.horizontalAxes[fromKey]) !== null && _ref2 !== void 0 ? _ref2 : fromKey;
119
+ var to = (_ref3 = (_hints$titles$getHori3 = (_hints$titles$getHori4 = (_hints$titles2 = hints.titles).getHorizontalAxesTitle) === null || _hints$titles$getHori4 === void 0 ? void 0 : _hints$titles$getHori4.call(_hints$titles2, toKey)) !== null && _hints$titles$getHori3 !== void 0 ? _hints$titles$getHori3 : hints.titles.horizontalAxes[toKey]) !== null && _ref3 !== void 0 ? _ref3 : toKey;
120
+
121
+ if (entitiesCount > 0) {
122
+ var _hints$axesTitle$vert2;
123
+
124
+ dataRange.push({
125
+ from: from,
126
+ to: to,
127
+ label: (_hints$axesTitle$vert2 = hints.axesTitle.vertical) !== null && _hints$axesTitle$vert2 !== void 0 ? _hints$axesTitle$vert2 : labelsKey
128
+ });
129
+ }
130
+
131
+ var _iterator = _createForOfIteratorHelper(valuesKeys),
132
+ _step;
133
+
134
+ try {
135
+ var _loop = function _loop() {
136
+ var _config$movingAverage, _config$movingAverage2, _insights;
137
+
138
+ var valueKey = _step.value;
139
+ var values = data.map(function (row) {
140
+ return row[valueKey];
141
+ });
142
+ var sum = values.reduce(function (sum, value) {
143
+ return sum += value;
144
+ }, 0);
145
+ var average = sum / values.length;
146
+ var variance = 1 / values.length * values.map(function (value) {
147
+ return Math.pow(value - average, 2);
148
+ }).reduce(function (sum, item) {
149
+ return sum + item;
150
+ }, 0);
151
+ var standardDeviation = Math.sqrt(variance);
152
+ var trendStrengths = ['static', 'weak', 'medium', 'strong'];
153
+ var frameSize = Math.sqrt(values.length);
154
+ var longMovingAverageSize = (_config$movingAverage = config.movingAverage.longSize) !== null && _config$movingAverage !== void 0 ? _config$movingAverage : frameSize;
155
+ var shortMovingAverageSize = (_config$movingAverage2 = config.movingAverage.shortSize) !== null && _config$movingAverage2 !== void 0 ? _config$movingAverage2 : Math.sqrt(frameSize);
156
+ var longMovingAverage = movingAverage(values, longMovingAverageSize);
157
+ var shortMovingAverage = values.length < 8 ? values : movingAverage(values, shortMovingAverageSize);
158
+ var table = [];
159
+
160
+ for (var i in values) {
161
+ var _longMovingAverage$i, _shortMovingAverage$i;
162
+
163
+ table.push({
164
+ value: values[i].toFixed(2),
165
+ "long": ((_longMovingAverage$i = longMovingAverage[i]) !== null && _longMovingAverage$i !== void 0 ? _longMovingAverage$i : NaN).toFixed(2),
166
+ "short": ((_shortMovingAverage$i = shortMovingAverage[i]) !== null && _shortMovingAverage$i !== void 0 ? _shortMovingAverage$i : NaN).toFixed(2)
167
+ });
168
+ }
169
+
170
+ var strengthsMap = {
171
+ growth: {
172
+ "static": 'static',
173
+ weak: 'weak-growth',
174
+ medium: 'growth',
175
+ strong: 'strong-growth'
176
+ },
177
+ reduction: {
178
+ "static": 'static',
179
+ weak: 'weak-reduction',
180
+ medium: 'reduction',
181
+ strong: 'strong-reduction'
182
+ }
183
+ };
184
+
185
+ var recordTrend = function recordTrend(_ref4) {
186
+ var value = _ref4.value,
187
+ width = _ref4.width,
188
+ label = _ref4.label,
189
+ type = _ref4.type;
190
+
191
+ for (var _i = 0; _i < trendStrengths.length; _i++) {
192
+ var _hints$pointsDensity$, _hints$pointsDensity, _hints$pointsDensity$2, _hints$pointsDensity2;
193
+
194
+ var normalizedHeight = Math.abs(value.from - value.to) / ((_hints$pointsDensity$ = (_hints$pointsDensity = hints.pointsDensity) === null || _hints$pointsDensity === void 0 ? void 0 : _hints$pointsDensity.verticalAxes) !== null && _hints$pointsDensity$ !== void 0 ? _hints$pointsDensity$ : 1);
195
+ var normalizedWidth = width / ((_hints$pointsDensity$2 = (_hints$pointsDensity2 = hints.pointsDensity) === null || _hints$pointsDensity2 === void 0 ? void 0 : _hints$pointsDensity2.horizontalAxes) !== null && _hints$pointsDensity$2 !== void 0 ? _hints$pointsDensity$2 : 1);
196
+ var tang = normalizedHeight / normalizedWidth;
197
+ var trendStrength = trendStrengths[_i];
198
+
199
+ if (tang <= config.trendTangens[trendStrength] || _i === trendStrengths.length - 1) {
200
+ var strength = value.to > value.from ? strengthsMap.growth[trendStrength] : strengthsMap.reduction[trendStrength];
201
+ return {
202
+ type: type,
203
+ priority: _i,
204
+ change: {
205
+ from: value.from,
206
+ to: value.to,
207
+ strength: strength
208
+ },
209
+ from: label.from,
210
+ to: label.to,
211
+ dataKey: label.dataKey
212
+ };
213
+ }
214
+ }
215
+ };
216
+
217
+ var generalTrend = recordTrend({
218
+ type: 'general-trend',
219
+ value: {
220
+ from: shortMovingAverage[0],
221
+ to: shortMovingAverage[shortMovingAverage.length - 1]
222
+ },
223
+ width: data.length,
224
+ label: {
225
+ from: from,
226
+ to: to,
227
+ dataKey: valueKey
228
+ }
229
+ });
230
+ var localTrends = [];
231
+ {
232
+ var _config$movingAverage3;
233
+
234
+ var notableDiff = (_config$movingAverage3 = config.movingAverage.notableDiff) !== null && _config$movingAverage3 !== void 0 ? _config$movingAverage3 : standardDeviation / 10;
235
+ var lastSwitch = 0;
236
+ var lastSwitchValue = shortMovingAverage[lastSwitch];
237
+ var shortWasAbove = shortMovingAverage[0] > longMovingAverage[0];
238
+
239
+ for (var _i2 = 1; _i2 < data.length; _i2++) {
240
+ var _ref5, _hints$titles$getHori5, _hints$titles$getHori6, _hints$titles3, _ref6, _hints$titles$getHori7, _hints$titles$getHori8, _hints$titles4;
241
+
242
+ var shortIsAbove = shortMovingAverage[_i2] > longMovingAverage[_i2];
243
+ var diff = Math.abs(shortMovingAverage[_i2] - longMovingAverage[_i2]);
244
+ if (shortIsAbove === shortWasAbove) continue;
245
+ if (diff < notableDiff) continue;
246
+ if (_i2 === 0 && lastSwitch === data.length - 1) continue;
247
+ if (_i2 === data.length - 1 && lastSwitch === 0) continue;
248
+ _i2 = Math.min(_i2, data.length - 1);
249
+ var _fromKey = data[lastSwitch][labelsKey];
250
+ var _toKey = data[_i2][labelsKey];
251
+
252
+ var _from = (_ref5 = (_hints$titles$getHori5 = (_hints$titles$getHori6 = (_hints$titles3 = hints.titles).getHorizontalAxesTitle) === null || _hints$titles$getHori6 === void 0 ? void 0 : _hints$titles$getHori6.call(_hints$titles3, _fromKey)) !== null && _hints$titles$getHori5 !== void 0 ? _hints$titles$getHori5 : hints.titles.horizontalAxes[_fromKey]) !== null && _ref5 !== void 0 ? _ref5 : _fromKey;
253
+
254
+ var _to = (_ref6 = (_hints$titles$getHori7 = (_hints$titles$getHori8 = (_hints$titles4 = hints.titles).getHorizontalAxesTitle) === null || _hints$titles$getHori8 === void 0 ? void 0 : _hints$titles$getHori8.call(_hints$titles4, _toKey)) !== null && _hints$titles$getHori7 !== void 0 ? _hints$titles$getHori7 : hints.titles.horizontalAxes[_toKey]) !== null && _ref6 !== void 0 ? _ref6 : _toKey;
255
+
256
+ localTrends.push(recordTrend({
257
+ type: 'trend',
258
+ value: {
259
+ from: lastSwitchValue,
260
+ to: shortMovingAverage[_i2]
261
+ },
262
+ width: _i2 - lastSwitch,
263
+ label: {
264
+ from: _from,
265
+ to: _to,
266
+ dataKey: valueKey
267
+ }
268
+ }));
269
+ lastSwitch = _i2;
270
+ lastSwitchValue = shortMovingAverage[lastSwitch];
271
+ shortWasAbove = shortIsAbove;
272
+ }
273
+
274
+ if (lastSwitch !== 0) {
275
+ var lastIndex = shortMovingAverage.length - 1;
276
+ var lastValue = shortMovingAverage[lastIndex];
277
+
278
+ if (Math.abs(lastSwitchValue - lastValue) > notableDiff) {
279
+ localTrends.push(recordTrend({
280
+ type: 'trend',
281
+ value: {
282
+ from: lastSwitchValue,
283
+ to: lastValue
284
+ },
285
+ width: lastIndex - lastSwitch,
286
+ label: {
287
+ from: data[lastSwitch][labelsKey],
288
+ to: data[lastIndex][labelsKey],
289
+ dataKey: valueKey
290
+ }
291
+ }));
292
+ }
293
+ }
294
+ }
295
+ insights.push(generalTrend);
296
+
297
+ (_insights = insights).push.apply(_insights, localTrends);
298
+ };
299
+
300
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
301
+ _loop();
302
+ }
303
+ } catch (err) {
304
+ _iterator.e(err);
305
+ } finally {
306
+ _iterator.f();
307
+ }
308
+ } else if (dataType === 'points-cloud') {
309
+ var _ref7, _config$clustersGridS, _relativeSizeDistrivu, _insights2;
310
+
311
+ var guessedXKey = [].concat((0, _toConsumableArray2["default"])(hints.fields.horizontalAxes.values()), ['x'])[0];
312
+ var guessedYKey = [].concat((0, _toConsumableArray2["default"])(hints.fields.verticalAxes.values()), ['y'])[0];
313
+ var guessedValueKey = [].concat((0, _toConsumableArray2["default"])(hints.fields.valueAxes.values()), ['value'])[0];
314
+ var guessedLabelKey = keysMap['label'] ? 'label' : guessedValueKey;
315
+ var normalized = data.map(function (row) {
316
+ return {
317
+ x: row[guessedXKey],
318
+ y: row[guessedYKey],
319
+ label: row[guessedLabelKey],
320
+ value: row[guessedValueKey]
321
+ };
322
+ });
323
+ var gridSize = (_ref7 = (_config$clustersGridS = config.clustersGridSize) !== null && _config$clustersGridS !== void 0 ? _config$clustersGridS : hints.grid.verticalAxes) !== null && _ref7 !== void 0 ? _ref7 : hints.grid.horizontalAxes;
324
+
325
+ if (!gridSize) {
326
+ var usedX = new Set();
327
+ var usedY = new Set();
328
+
329
+ var _iterator2 = _createForOfIteratorHelper(normalized),
330
+ _step2;
331
+
332
+ try {
333
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
334
+ var _step2$value = _step2.value,
335
+ _x = _step2$value.x,
336
+ _y = _step2$value.y;
337
+ usedX.add(_x);
338
+ usedY.add(_y);
339
+ }
340
+ } catch (err) {
341
+ _iterator2.e(err);
342
+ } finally {
343
+ _iterator2.f();
344
+ }
345
+
346
+ var orderedX = (0, _toConsumableArray2["default"])(usedX).sort(function (a, b) {
347
+ return a - b;
348
+ });
349
+ var orderedY = (0, _toConsumableArray2["default"])(usedY).sort(function (a, b) {
350
+ return a - b;
351
+ });
352
+ var distancesX = orderedX.slice(0, -1).map(function (x, index) {
353
+ return orderedX[index + 1] - x;
354
+ });
355
+ var distancesY = orderedY.slice(0, -1).map(function (y, index) {
356
+ return orderedY[index + 1] - y;
357
+ });
358
+ var avgDistanceX = distancesX.reduce(function (sum, x) {
359
+ return sum + x;
360
+ }, 0) / distancesX.length;
361
+ var avgDistanceY = distancesY.reduce(function (sum, y) {
362
+ return sum + y;
363
+ }, 0) / distancesY.length;
364
+ var belowAvgDistancesX = distancesX.filter(function (x) {
365
+ return x < avgDistanceX;
366
+ });
367
+ var belowAvgDistancesY = distancesY.filter(function (y) {
368
+ return y < avgDistanceY;
369
+ });
370
+ var betweenDistanceX = belowAvgDistancesX.reduce(function (sum, x) {
371
+ return sum + x;
372
+ }, 0) / belowAvgDistancesX.length;
373
+ var betweenDistanceY = belowAvgDistancesY.reduce(function (sum, y) {
374
+ return sum + y;
375
+ }, 0) / belowAvgDistancesY.length;
376
+ var avgDistance = 0;
377
+
378
+ if (!Number.isNaN(betweenDistanceX) && !Number.isNaN(betweenDistanceY)) {
379
+ avgDistance = (betweenDistanceX + betweenDistanceY) / 2;
380
+ } else if (!Number.isNaN(betweenDistanceX)) {
381
+ avgDistance = betweenDistanceX;
382
+ } else if (!Number.isNaN(betweenDistanceY)) {
383
+ avgDistance = betweenDistanceY;
384
+ } else {
385
+ avgDistance = (avgDistanceX + avgDistanceY) / 2;
386
+ }
387
+
388
+ gridSize = Math.sqrt(Math.sqrt(avgDistance));
389
+ }
390
+
391
+ var grid = {};
392
+ var takenY = new Set();
393
+ var takenX = new Set();
394
+
395
+ for (var i = 0; i < normalized.length; i++) {
396
+ var _grid$gridX, _grid$gridX$gridY;
397
+
398
+ var _normalized$i = normalized[i],
399
+ _x2 = _normalized$i.x,
400
+ _y2 = _normalized$i.y;
401
+ var gridX = Math.round(_x2 / gridSize);
402
+ var gridY = Math.round(_y2 / gridSize);
403
+ takenY.add(_y2);
404
+ takenX.add(_x2);
405
+ grid[gridX] = (_grid$gridX = grid[gridX]) !== null && _grid$gridX !== void 0 ? _grid$gridX : {};
406
+ grid[gridX][gridY] = (_grid$gridX$gridY = grid[gridX][gridY]) !== null && _grid$gridX$gridY !== void 0 ? _grid$gridX$gridY : {
407
+ clusterId: "".concat(gridX, "_").concat(gridY),
408
+ members: []
409
+ };
410
+ grid[gridX][gridY].members.push(normalized[i]);
411
+ }
412
+
413
+ var clusters = {};
414
+
415
+ var _iterator3 = _createForOfIteratorHelper(Object.keys(grid).map(function (x) {
416
+ return parseInt(x, 10);
417
+ })),
418
+ _step3;
419
+
420
+ try {
421
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
422
+ var _x4 = _step3.value;
423
+
424
+ var _iterator4 = _createForOfIteratorHelper(Object.keys(grid[_x4]).map(function (y) {
425
+ return parseInt(y, 10);
426
+ })),
427
+ _step4;
428
+
429
+ try {
430
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
431
+ var _clusters$grid$_x4$_y, _clusters$grid$_x4$_y2;
432
+
433
+ var _y4 = _step4.value;
434
+ var pointHandled = false;
435
+
436
+ for (var _i4 = 0, _arr = [_x4 - 1, _x4, _x4 + 1]; _i4 < _arr.length; _i4++) {
437
+ var xNeighbour = _arr[_i4];
438
+
439
+ for (var _i5 = 0, _arr2 = [_y4 - 1, _y4, _y4 + 1]; _i5 < _arr2.length; _i5++) {
440
+ var _grid$xNeighbour;
441
+
442
+ var yNeighbour = _arr2[_i5];
443
+ if (xNeighbour === undefined || yNeighbour === undefined) continue;
444
+ if (xNeighbour === _x4 && yNeighbour === _y4) continue;
445
+ if (!((_grid$xNeighbour = grid[xNeighbour]) !== null && _grid$xNeighbour !== void 0 && _grid$xNeighbour[yNeighbour])) continue;
446
+ pointHandled = true;
447
+ grid[_x4][_y4].clusterId = grid[xNeighbour][yNeighbour].clusterId;
448
+ break;
449
+ }
450
+
451
+ if (pointHandled) break;
452
+ }
453
+
454
+ clusters[grid[_x4][_y4].clusterId] = (_clusters$grid$_x4$_y = clusters[grid[_x4][_y4].clusterId]) !== null && _clusters$grid$_x4$_y !== void 0 ? _clusters$grid$_x4$_y : [];
455
+
456
+ (_clusters$grid$_x4$_y2 = clusters[grid[_x4][_y4].clusterId]).push.apply(_clusters$grid$_x4$_y2, (0, _toConsumableArray2["default"])(grid[_x4][_y4].members));
457
+ }
458
+ } catch (err) {
459
+ _iterator4.e(err);
460
+ } finally {
461
+ _iterator4.f();
462
+ }
463
+ }
464
+ } catch (err) {
465
+ _iterator3.e(err);
466
+ } finally {
467
+ _iterator3.f();
468
+ }
469
+
470
+ var clustersInsights = [];
471
+
472
+ for (var _clusterId in clusters) {
473
+ var _hints$axesTitle$hori, _hints$axesTitle$vert3;
474
+
475
+ var size = clusters[_clusterId].reduce(function (sum, _ref8) {
476
+ var value = _ref8.value;
477
+ return sum + (value !== null && value !== void 0 ? value : 1);
478
+ }, 0);
479
+
480
+ var labels = (0, _toConsumableArray2["default"])(clusters[_clusterId]).sort(function (a, b) {
481
+ return b.value - a.value;
482
+ }).map(function (_ref9) {
483
+ var label = _ref9.label;
484
+ return label;
485
+ }).filter(function (label) {
486
+ return label !== undefined;
487
+ });
488
+ var uniqueLabels = (0, _toConsumableArray2["default"])(new Set(labels));
489
+
490
+ var _x3 = clusters[_clusterId].reduce(function (sum, _ref10) {
491
+ var x = _ref10.x;
492
+ return sum + x;
493
+ }, 0) / clusters[_clusterId].length;
494
+
495
+ var _y3 = clusters[_clusterId].reduce(function (sum, _ref11) {
496
+ var y = _ref11.y;
497
+ return sum + y;
498
+ }, 0) / clusters[_clusterId].length;
499
+
500
+ clustersInsights.push({
501
+ type: 'cluster',
502
+ priority: 1,
503
+ size: size,
504
+ labels: uniqueLabels,
505
+ relativeSize: 'average',
506
+ center: {
507
+ x: _x3,
508
+ y: _y3,
509
+ xLabel: (_hints$axesTitle$hori = hints.axesTitle.horizontal) !== null && _hints$axesTitle$hori !== void 0 ? _hints$axesTitle$hori : guessedXKey,
510
+ yLabel: (_hints$axesTitle$vert3 = hints.axesTitle.vertical) !== null && _hints$axesTitle$vert3 !== void 0 ? _hints$axesTitle$vert3 : guessedYKey
511
+ }
512
+ });
513
+ }
514
+
515
+ entitiesCount = Object.keys(clusters).length;
516
+ clustersInsights.sort(function (a, b) {
517
+ return b.size - a.size;
518
+ });
519
+ var relativeSizeDistrivution = (_relativeSizeDistrivu = {}, (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'significantly-bigger', {
520
+ max: Infinity,
521
+ min: 0.85
522
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'bigger', {
523
+ min: 0.7,
524
+ max: 0.85
525
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'slightly-bigger', {
526
+ min: 0.6,
527
+ max: 0.7
528
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'average', {
529
+ min: 0.4,
530
+ max: 0.6
531
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'slightly-smaller', {
532
+ max: 0.4,
533
+ min: 0.3
534
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'smaller', {
535
+ min: 0.15,
536
+ max: 0.3
537
+ }), (0, _defineProperty2["default"])(_relativeSizeDistrivu, 'significantly-smaller', {
538
+ min: -Infinity,
539
+ max: 0.15
540
+ }), _relativeSizeDistrivu);
541
+ var averageSize = clustersInsights.reduce(function (sum, cluster) {
542
+ return sum + cluster.size;
543
+ }, 0) / clustersInsights.length;
544
+ var smallerClusters = clustersInsights.filter(function (cluster) {
545
+ return cluster.size < averageSize;
546
+ });
547
+ var smallerSize = smallerClusters.reduce(function (sum, cluster) {
548
+ return sum + cluster.size;
549
+ }, 0) / smallerClusters.length;
550
+ var biggerClusters = clustersInsights.filter(function (cluster) {
551
+ return cluster.size > averageSize;
552
+ });
553
+ var biggerSize = biggerClusters.reduce(function (sum, cluster) {
554
+ return sum + cluster.size;
555
+ }, 0) / biggerClusters.length;
556
+ var normalizingSize = averageSize * 2;
557
+ var averageSizeNormalized = averageSize / normalizingSize;
558
+ var smallerSizeNormalized = smallerSize / normalizingSize;
559
+ var biggerSizeNormalized = biggerSize / normalizingSize;
560
+ smallerSizeNormalized = !Number.isNaN(smallerSizeNormalized) ? smallerSizeNormalized : 0.25;
561
+ averageSizeNormalized = !Number.isNaN(averageSizeNormalized) ? averageSizeNormalized : 0.5;
562
+ biggerSizeNormalized = !Number.isNaN(biggerSizeNormalized) ? biggerSizeNormalized : 0.75;
563
+ var sizeMapBezier = (0, _bezier.makeBezier)([{
564
+ x: 0,
565
+ y: 0
566
+ }, {
567
+ x: 0.25,
568
+ y: smallerSizeNormalized,
569
+ weight: 10
570
+ }, {
571
+ x: 0.5,
572
+ y: averageSizeNormalized
573
+ }, {
574
+ x: 0.75,
575
+ y: biggerSizeNormalized,
576
+ weight: 10
577
+ }, {
578
+ x: 1,
579
+ y: 1
580
+ }], {
581
+ width: 1,
582
+ height: 1
583
+ });
584
+
585
+ for (var _i3 = 0, _clustersInsights = clustersInsights; _i3 < _clustersInsights.length; _i3++) {
586
+ var clustersInsight = _clustersInsights[_i3];
587
+ var _size = clustersInsight.size;
588
+ var mappedSize = sizeMapBezier(_size / normalizingSize);
589
+
590
+ for (var relativeSize in relativeSizeDistrivution) {
591
+ var _relativeSizeDistrivu2 = relativeSizeDistrivution[relativeSize],
592
+ min = _relativeSizeDistrivu2.min,
593
+ max = _relativeSizeDistrivu2.max;
594
+
595
+ if (mappedSize > min && mappedSize <= max) {
596
+ clustersInsight.relativeSize = relativeSize;
597
+ break;
598
+ }
599
+ }
600
+ }
601
+
602
+ (_insights2 = insights).push.apply(_insights2, clustersInsights);
603
+
604
+ if (hints.axesTitle.horizontal) {
605
+ var sortedX = (0, _toConsumableArray2["default"])(takenX).sort(function (a, b) {
606
+ return a - b;
607
+ });
608
+ dataRange.push({
609
+ from: sortedX[0],
610
+ to: sortedX[sortedX.length - 1],
611
+ label: hints.axesTitle.horizontal
612
+ });
613
+ }
614
+
615
+ if (hints.axesTitle.vertical) {
616
+ var sortedY = (0, _toConsumableArray2["default"])(takenY).sort(function (a, b) {
617
+ return a - b;
618
+ });
619
+ dataRange.push({
620
+ from: sortedY[0],
621
+ to: sortedY[sortedY.length - 1],
622
+ label: hints.axesTitle.vertical
623
+ });
624
+ }
625
+ } else if (dataType === 'grouped-values') {
626
+ var _insights3;
627
+
628
+ var makeRowKey = function makeRowKey(row) {
629
+ return groupKeys.map(function (key, index) {
630
+ return "".concat(index, "-").concat(getPropByPath(row, key));
631
+ }).join('-');
632
+ };
633
+
634
+ var allRowsIds = data.map(makeRowKey);
635
+ var groupedValues = {};
636
+
637
+ for (var _i6 = 0; _i6 < data.length; _i6++) {
638
+ var _groupedValues$key;
639
+
640
+ var row = data[_i6];
641
+ var key = allRowsIds[_i6];
642
+ groupedValues[key] = (_groupedValues$key = groupedValues[key]) !== null && _groupedValues$key !== void 0 ? _groupedValues$key : {
643
+ groupName: getPropByPath(row, groupKeys[0]),
644
+ rows: []
645
+ };
646
+ groupedValues[key].rows.push(row);
647
+ }
648
+
649
+ var fields = (0, _toConsumableArray2["default"])(hints.fields.values);
650
+ var grouppingKeys = Object.fromEntries(groupKeys.map(function (key) {
651
+ return [key, true];
652
+ }));
653
+
654
+ if (fields.length === 0) {
655
+ var _fields;
656
+
657
+ (_fields = fields).push.apply(_fields, (0, _toConsumableArray2["default"])(Object.keys(keysMap)));
658
+ }
659
+
660
+ fields = fields.filter(function (key) {
661
+ return !grouppingKeys[key];
662
+ });
663
+ var groups = Object.entries(groupedValues).map(function (_ref12) {
664
+ var _group$groupName;
665
+
666
+ var _ref13 = (0, _slicedToArray2["default"])(_ref12, 2),
667
+ groupKey = _ref13[0],
668
+ group = _ref13[1];
669
+
670
+ var values = [];
671
+
672
+ var _iterator5 = _createForOfIteratorHelper(group.rows),
673
+ _step5;
674
+
675
+ try {
676
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
677
+ var _row = _step5.value;
678
+
679
+ var _iterator6 = _createForOfIteratorHelper(fields),
680
+ _step6;
681
+
682
+ try {
683
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
684
+ var _ref15, _hints$titles$getVert, _hints$titles$getVert2, _hints$titles5;
685
+
686
+ var field = _step6.value;
687
+ values.push({
688
+ label: (_ref15 = (_hints$titles$getVert = (_hints$titles$getVert2 = (_hints$titles5 = hints.titles).getVerticalAxesTitle) === null || _hints$titles$getVert2 === void 0 ? void 0 : _hints$titles$getVert2.call(_hints$titles5, field)) !== null && _hints$titles$getVert !== void 0 ? _hints$titles$getVert : hints.titles.valuesAxes[field]) !== null && _ref15 !== void 0 ? _ref15 : field,
689
+ value: getPropByPath(_row, field)
690
+ });
691
+ }
692
+ } catch (err) {
693
+ _iterator6.e(err);
694
+ } finally {
695
+ _iterator6.f();
696
+ }
697
+ }
698
+ } catch (err) {
699
+ _iterator5.e(err);
700
+ } finally {
701
+ _iterator5.f();
702
+ }
703
+
704
+ values.sort(function (a, b) {
705
+ if (typeof a.value !== 'number' || typeof b.value !== 'number') return 0;
706
+ return b.value - a.value;
707
+ });
708
+ var averageValue = values.reduce(function (sum, _ref14) {
709
+ var value = _ref14.value;
710
+ return sum + value;
711
+ }, 0) / values.length;
712
+ return {
713
+ label: (_group$groupName = group.groupName) !== null && _group$groupName !== void 0 ? _group$groupName : groupKey,
714
+ values: values,
715
+ averageValue: !Number.isNaN(averageValue) ? averageValue : undefined
716
+ };
717
+ });
718
+ groups.sort(function (a, b) {
719
+ if (typeof a.averageValue !== 'number' || typeof b.averageValue !== 'number') return 0;
720
+ return b.averageValue - a.averageValue;
721
+ });
722
+ entitiesCount = groups.length;
723
+
724
+ (_insights3 = insights).push.apply(_insights3, (0, _toConsumableArray2["default"])(groups.map(function (group) {
725
+ return {
726
+ type: 'comparison',
727
+ label: group.label,
728
+ values: group.values,
729
+ priority: 1
730
+ };
731
+ })));
732
+ }
733
+ }
734
+
735
+ if (dataType === 'values-set') {
736
+ var _fields2 = (0, _toConsumableArray2["default"])(hints.fields.values);
737
+
738
+ if (_fields2.length === 0) {
739
+ _fields2.push.apply(_fields2, (0, _toConsumableArray2["default"])(Object.keys(keysMap)));
740
+ }
741
+
742
+ var values = _fields2.map(function (field) {
743
+ var _ref16, _hints$titles$getValu, _hints$titles$getValu2, _hints$titles6;
744
+
745
+ return {
746
+ label: (_ref16 = (_hints$titles$getValu = (_hints$titles$getValu2 = (_hints$titles6 = hints.titles).getValueAxesTitle) === null || _hints$titles$getValu2 === void 0 ? void 0 : _hints$titles$getValu2.call(_hints$titles6, field)) !== null && _hints$titles$getValu !== void 0 ? _hints$titles$getValu : hints.titles.valuesAxes[field]) !== null && _ref16 !== void 0 ? _ref16 : field,
747
+ value: getPropByPath(data, field)
748
+ };
749
+ });
750
+
751
+ entitiesCount = values.length;
752
+ values.sort(function (a, b) {
753
+ if (typeof a.value !== 'number' || typeof b.value !== 'number') return 0;
754
+ return b.value - a.value;
755
+ });
756
+ insights.push({
757
+ type: 'comparison',
758
+ values: values,
759
+ priority: 1
760
+ });
761
+ }
762
+
763
+ var hasHighPriorityInsights = insights.some(function (insight) {
764
+ return insight.priority > 0;
765
+ });
766
+
767
+ if (hasHighPriorityInsights) {
768
+ insights = insights.filter(function (insight) {
769
+ return insight.priority > 0;
770
+ });
771
+ } else {
772
+ insights = insights.slice(0, 1);
773
+ }
774
+
775
+ return {
776
+ insights: insights,
777
+ dataType: dataType,
778
+ dataRange: dataRange,
779
+ dataTitle: dataTitle,
780
+ entitiesCount: entitiesCount
781
+ };
782
+ };
783
+
784
+ exports.extractDataInsights = extractDataInsights;
785
+ //# sourceMappingURL=insights.js.map