@devtable/dashboard 1.21.0 → 1.22.0

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.
@@ -36,7 +36,7 @@ var __publicField = (obj, key, value) => {
36
36
  import React from "react";
37
37
  import _ from "lodash";
38
38
  import RGL, { WidthProvider } from "react-grid-layout";
39
- import { Popover, Tooltip, Group, Text, ActionIcon, Box, Button, TextInput, LoadingOverlay, Table, Select, useMantineTheme, ColorSwatch, Switch, Slider, SegmentedControl, NumberInput, ColorInput, Accordion, JsonInput, Modal, AppShell, Tabs, Menu, Divider, Container, Textarea } from "@mantine/core";
39
+ import { Popover, Tooltip, Group, Text, ActionIcon, Box, Button, TextInput, LoadingOverlay, Table, Select, useMantineTheme, ColorSwatch, Switch, Slider, SegmentedControl, NumberInput, Accordion, ColorInput, JsonInput, Modal, AppShell, Tabs, Menu, Divider, Container, Textarea } from "@mantine/core";
40
40
  import { useRequest } from "ahooks";
41
41
  import axios from "axios";
42
42
  import { InfoCircle, DeviceFloppy, Refresh, Trash, PlaylistAdd, Settings, Resize, Paint, PlayerPlay, Database, Recycle, Share } from "tabler-icons-react";
@@ -196,6 +196,7 @@ const initialContext = {
196
196
  }
197
197
  };
198
198
  const DefinitionContext = React.createContext(initialContext);
199
+ var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
199
200
  var jsxRuntime = { exports: {} };
200
201
  var reactJsxRuntime_production_min = {};
201
202
  /**
@@ -688,7 +689,1307 @@ function Sunbrust({
688
689
  }
689
690
  });
690
691
  }
691
- echarts.use([BarChart, LineChart, ScatterChart, GridComponent, LegendComponent, TooltipComponent, CanvasRenderer]);
692
+ var ecStat = { exports: {} };
693
+ (function(module, exports) {
694
+ (function webpackUniversalModuleDefinition(root, factory) {
695
+ module.exports = factory();
696
+ })(commonjsGlobal, function() {
697
+ return function(modules) {
698
+ var installedModules = {};
699
+ function __webpack_require__(moduleId) {
700
+ if (installedModules[moduleId])
701
+ return installedModules[moduleId].exports;
702
+ var module2 = installedModules[moduleId] = {
703
+ exports: {},
704
+ id: moduleId,
705
+ loaded: false
706
+ };
707
+ modules[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__);
708
+ module2.loaded = true;
709
+ return module2.exports;
710
+ }
711
+ __webpack_require__.m = modules;
712
+ __webpack_require__.c = installedModules;
713
+ __webpack_require__.p = "";
714
+ return __webpack_require__(0);
715
+ }([
716
+ function(module2, exports2, __webpack_require__) {
717
+ var __WEBPACK_AMD_DEFINE_RESULT__;
718
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
719
+ return {
720
+ clustering: __webpack_require__(1),
721
+ regression: __webpack_require__(5),
722
+ statistics: __webpack_require__(6),
723
+ histogram: __webpack_require__(15),
724
+ transform: {
725
+ regression: __webpack_require__(18),
726
+ histogram: __webpack_require__(21),
727
+ clustering: __webpack_require__(22)
728
+ }
729
+ };
730
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
731
+ },
732
+ function(module2, exports2, __webpack_require__) {
733
+ var __WEBPACK_AMD_DEFINE_RESULT__;
734
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
735
+ var dataProcess = __webpack_require__(2);
736
+ var dataPreprocess = dataProcess.dataPreprocess;
737
+ var normalizeDimensions = dataProcess.normalizeDimensions;
738
+ var arrayUtil = __webpack_require__(3);
739
+ var numberUtil = __webpack_require__(4);
740
+ var arraySize = arrayUtil.size;
741
+ var sumOfColumn = arrayUtil.sumOfColumn;
742
+ var arraySum = arrayUtil.sum;
743
+ var zeros = arrayUtil.zeros;
744
+ var numberUtil = __webpack_require__(4);
745
+ var isNumber = numberUtil.isNumber;
746
+ var mathPow = Math.pow;
747
+ var OutputType = {
748
+ SINGLE: "single",
749
+ MULTIPLE: "multiple"
750
+ };
751
+ function kMeans(data, k2, dataMeta) {
752
+ var clusterAssigned = zeros(data.length, 2);
753
+ var centroids = createRandCent(k2, calcExtents(data, dataMeta.dimensions));
754
+ var clusterChanged = true;
755
+ var minDist;
756
+ var minIndex;
757
+ var distIJ;
758
+ var ptsInClust;
759
+ while (clusterChanged) {
760
+ clusterChanged = false;
761
+ for (var i = 0; i < data.length; i++) {
762
+ minDist = Infinity;
763
+ minIndex = -1;
764
+ for (var j = 0; j < k2; j++) {
765
+ distIJ = distEuclid(data[i], centroids[j], dataMeta);
766
+ if (distIJ < minDist) {
767
+ minDist = distIJ;
768
+ minIndex = j;
769
+ }
770
+ }
771
+ if (clusterAssigned[i][0] !== minIndex) {
772
+ clusterChanged = true;
773
+ }
774
+ clusterAssigned[i][0] = minIndex;
775
+ clusterAssigned[i][1] = minDist;
776
+ }
777
+ for (var i = 0; i < k2; i++) {
778
+ ptsInClust = [];
779
+ for (var j = 0; j < clusterAssigned.length; j++) {
780
+ if (clusterAssigned[j][0] === i) {
781
+ ptsInClust.push(data[j]);
782
+ }
783
+ }
784
+ centroids[i] = meanInColumns(ptsInClust, dataMeta);
785
+ }
786
+ }
787
+ var clusterWithKmeans = {
788
+ centroids,
789
+ clusterAssigned
790
+ };
791
+ return clusterWithKmeans;
792
+ }
793
+ function meanInColumns(dataList, dataMeta) {
794
+ var meanArray = [];
795
+ var sum;
796
+ var mean;
797
+ for (var j = 0; j < dataMeta.dimensions.length; j++) {
798
+ var dimIdx = dataMeta.dimensions[j];
799
+ sum = 0;
800
+ for (var i = 0; i < dataList.length; i++) {
801
+ sum += dataList[i][dimIdx];
802
+ }
803
+ mean = sum / dataList.length;
804
+ meanArray.push(mean);
805
+ }
806
+ return meanArray;
807
+ }
808
+ function hierarchicalKMeans(data, clusterCountOrConfig, stepByStep) {
809
+ var config = (isNumber(clusterCountOrConfig) ? { clusterCount: clusterCountOrConfig, stepByStep } : clusterCountOrConfig) || { clusterCount: 2 };
810
+ var k2 = config.clusterCount;
811
+ if (k2 < 2) {
812
+ return;
813
+ }
814
+ var dataMeta = parseDataMeta(data, config);
815
+ var isOutputTypeSingle = dataMeta.outputType === OutputType.SINGLE;
816
+ var dataSet = dataPreprocess(data, { dimensions: dataMeta.dimensions });
817
+ var clusterAssment = zeros(dataSet.length, 2);
818
+ var outputSingleData;
819
+ var setClusterIndex;
820
+ var getClusterIndex;
821
+ function setDistance(dataIndex, dist2) {
822
+ clusterAssment[dataIndex][1] = dist2;
823
+ }
824
+ function getDistance(dataIndex) {
825
+ return clusterAssment[dataIndex][1];
826
+ }
827
+ if (isOutputTypeSingle) {
828
+ outputSingleData = [];
829
+ var outputClusterIndexDimension = dataMeta.outputClusterIndexDimension;
830
+ setClusterIndex = function(dataIndex, clusterIndex) {
831
+ outputSingleData[dataIndex][outputClusterIndexDimension] = clusterIndex;
832
+ };
833
+ getClusterIndex = function(dataIndex) {
834
+ return outputSingleData[dataIndex][outputClusterIndexDimension];
835
+ };
836
+ for (var i = 0; i < dataSet.length; i++) {
837
+ outputSingleData.push(dataSet[i].slice());
838
+ setDistance(i, 0);
839
+ setClusterIndex(i, 0);
840
+ }
841
+ } else {
842
+ setClusterIndex = function(dataIndex, clusterIndex) {
843
+ clusterAssment[dataIndex][0] = clusterIndex;
844
+ };
845
+ getClusterIndex = function(dataIndex) {
846
+ return clusterAssment[dataIndex][0];
847
+ };
848
+ }
849
+ var centroid0 = meanInColumns(dataSet, dataMeta);
850
+ var centList = [centroid0];
851
+ for (var i = 0; i < dataSet.length; i++) {
852
+ var dist = distEuclid(dataSet[i], centroid0, dataMeta);
853
+ setDistance(i, dist);
854
+ }
855
+ var lowestSSE;
856
+ var ptsInClust;
857
+ var ptsNotClust;
858
+ var clusterInfo;
859
+ var sseSplit;
860
+ var sseNotSplit;
861
+ var index2 = 1;
862
+ var result = {
863
+ data: outputSingleData,
864
+ centroids: centList,
865
+ isEnd: false
866
+ };
867
+ if (!isOutputTypeSingle) {
868
+ result.clusterAssment = clusterAssment;
869
+ }
870
+ function oneStep() {
871
+ if (index2 < k2) {
872
+ lowestSSE = Infinity;
873
+ var centSplit;
874
+ var newCentroid;
875
+ var newClusterAss;
876
+ for (var j = 0; j < centList.length; j++) {
877
+ ptsInClust = [];
878
+ ptsNotClust = [];
879
+ for (var i2 = 0; i2 < dataSet.length; i2++) {
880
+ if (getClusterIndex(i2) === j) {
881
+ ptsInClust.push(dataSet[i2]);
882
+ } else {
883
+ ptsNotClust.push(getDistance(i2));
884
+ }
885
+ }
886
+ clusterInfo = kMeans(ptsInClust, 2, dataMeta);
887
+ sseSplit = sumOfColumn(clusterInfo.clusterAssigned, 1);
888
+ sseNotSplit = arraySum(ptsNotClust);
889
+ if (sseSplit + sseNotSplit < lowestSSE) {
890
+ lowestSSE = sseNotSplit + sseSplit;
891
+ centSplit = j;
892
+ newCentroid = clusterInfo.centroids;
893
+ newClusterAss = clusterInfo.clusterAssigned;
894
+ }
895
+ }
896
+ for (var i2 = 0; i2 < newClusterAss.length; i2++) {
897
+ if (newClusterAss[i2][0] === 0) {
898
+ newClusterAss[i2][0] = centSplit;
899
+ } else if (newClusterAss[i2][0] === 1) {
900
+ newClusterAss[i2][0] = centList.length;
901
+ }
902
+ }
903
+ centList[centSplit] = newCentroid[0];
904
+ centList.push(newCentroid[1]);
905
+ for (var i2 = 0, j = 0; i2 < dataSet.length && j < newClusterAss.length; i2++) {
906
+ if (getClusterIndex(i2) === centSplit) {
907
+ setClusterIndex(i2, newClusterAss[j][0]);
908
+ setDistance(i2, newClusterAss[j++][1]);
909
+ }
910
+ }
911
+ var pointInClust = [];
912
+ if (!isOutputTypeSingle) {
913
+ for (var i2 = 0; i2 < centList.length; i2++) {
914
+ pointInClust[i2] = [];
915
+ for (var j = 0; j < dataSet.length; j++) {
916
+ if (getClusterIndex(j) === i2) {
917
+ pointInClust[i2].push(dataSet[j]);
918
+ }
919
+ }
920
+ }
921
+ result.pointsInCluster = pointInClust;
922
+ }
923
+ index2++;
924
+ } else {
925
+ result.isEnd = true;
926
+ }
927
+ }
928
+ if (!config.stepByStep) {
929
+ while (oneStep(), !result.isEnd)
930
+ ;
931
+ } else {
932
+ result.next = function() {
933
+ oneStep();
934
+ setCentroidToResultData(result, dataMeta);
935
+ return result;
936
+ };
937
+ }
938
+ setCentroidToResultData(result, dataMeta);
939
+ return result;
940
+ }
941
+ function setCentroidToResultData(result, dataMeta) {
942
+ var outputCentroidDimensions = dataMeta.outputCentroidDimensions;
943
+ if (dataMeta.outputType !== OutputType.SINGLE || outputCentroidDimensions == null) {
944
+ return;
945
+ }
946
+ var outputSingleData = result.data;
947
+ var centroids = result.centroids;
948
+ for (var i = 0; i < outputSingleData.length; i++) {
949
+ var line = outputSingleData[i];
950
+ var clusterIndex = line[dataMeta.outputClusterIndexDimension];
951
+ var centroid = centroids[clusterIndex];
952
+ var dimLen = Math.min(centroid.length, outputCentroidDimensions.length);
953
+ for (var j = 0; j < dimLen; j++) {
954
+ line[outputCentroidDimensions[j]] = centroid[j];
955
+ }
956
+ }
957
+ }
958
+ function createRandCent(k2, extents) {
959
+ var centroids = zeros(k2, extents.length);
960
+ for (var j = 0; j < extents.length; j++) {
961
+ var extentItem = extents[j];
962
+ for (var i = 0; i < k2; i++) {
963
+ centroids[i][j] = extentItem.min + extentItem.span * Math.random();
964
+ }
965
+ }
966
+ return centroids;
967
+ }
968
+ function distEuclid(dataItem, centroid, dataMeta) {
969
+ var powerSum = 0;
970
+ var dimensions = dataMeta.dimensions;
971
+ var extents = dataMeta.rawExtents;
972
+ for (var i = 0; i < dimensions.length; i++) {
973
+ var span = extents[i].span;
974
+ if (span) {
975
+ var dimIdx = dimensions[i];
976
+ var dist = (dataItem[dimIdx] - centroid[i]) / span;
977
+ powerSum += mathPow(dist, 2);
978
+ }
979
+ }
980
+ return powerSum;
981
+ }
982
+ function parseDataMeta(dataSet, config) {
983
+ var size = arraySize(dataSet);
984
+ if (size.length < 1) {
985
+ throw new Error("The input data of clustering should be two-dimension array.");
986
+ }
987
+ var colCount = size[1];
988
+ var defaultDimensions = [];
989
+ for (var i = 0; i < colCount; i++) {
990
+ defaultDimensions.push(i);
991
+ }
992
+ var dimensions = normalizeDimensions(config.dimensions, defaultDimensions);
993
+ var outputType = config.outputType || OutputType.MULTIPLE;
994
+ var outputClusterIndexDimension = config.outputClusterIndexDimension;
995
+ if (outputType === OutputType.SINGLE && !numberUtil.isNumber(outputClusterIndexDimension)) {
996
+ throw new Error("outputClusterIndexDimension is required as a number.");
997
+ }
998
+ var extents = calcExtents(dataSet, dimensions);
999
+ return {
1000
+ dimensions,
1001
+ rawExtents: extents,
1002
+ outputType,
1003
+ outputClusterIndexDimension,
1004
+ outputCentroidDimensions: config.outputCentroidDimensions
1005
+ };
1006
+ }
1007
+ function calcExtents(dataSet, dimensions) {
1008
+ var extents = [];
1009
+ var dimLen = dimensions.length;
1010
+ for (var i = 0; i < dimLen; i++) {
1011
+ extents.push({ min: Infinity, max: -Infinity });
1012
+ }
1013
+ for (var i = 0; i < dataSet.length; i++) {
1014
+ var line = dataSet[i];
1015
+ for (var j = 0; j < dimLen; j++) {
1016
+ var extentItem = extents[j];
1017
+ var val = line[dimensions[j]];
1018
+ extentItem.min > val && (extentItem.min = val);
1019
+ extentItem.max < val && (extentItem.max = val);
1020
+ }
1021
+ }
1022
+ for (var i = 0; i < dimLen; i++) {
1023
+ extents[i].span = extents[i].max - extents[i].min;
1024
+ }
1025
+ return extents;
1026
+ }
1027
+ return {
1028
+ OutputType,
1029
+ hierarchicalKMeans
1030
+ };
1031
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1032
+ },
1033
+ function(module2, exports2, __webpack_require__) {
1034
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1035
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1036
+ var array = __webpack_require__(3);
1037
+ var isArray = array.isArray;
1038
+ var size = array.size;
1039
+ var number2 = __webpack_require__(4);
1040
+ var isNumber = number2.isNumber;
1041
+ function normalizeDimensions(dimensions, defaultDimensions) {
1042
+ return typeof dimensions === "number" ? [dimensions] : dimensions == null ? defaultDimensions : dimensions;
1043
+ }
1044
+ function dataPreprocess(data, opt) {
1045
+ opt = opt || {};
1046
+ var dimensions = opt.dimensions;
1047
+ var numberDimensionMap = {};
1048
+ if (dimensions != null) {
1049
+ for (var i = 0; i < dimensions.length; i++) {
1050
+ numberDimensionMap[dimensions[i]] = true;
1051
+ }
1052
+ }
1053
+ var targetOneDim = opt.toOneDimensionArray ? dimensions ? dimensions[0] : 0 : null;
1054
+ function shouldBeNumberDimension(dimIdx) {
1055
+ return !dimensions || numberDimensionMap.hasOwnProperty(dimIdx);
1056
+ }
1057
+ if (!isArray(data)) {
1058
+ throw new Error("Invalid data type, you should input an array");
1059
+ }
1060
+ var predata = [];
1061
+ var arraySize = size(data);
1062
+ if (arraySize.length === 1) {
1063
+ for (var i = 0; i < arraySize[0]; i++) {
1064
+ var item = data[i];
1065
+ if (isNumber(item)) {
1066
+ predata.push(item);
1067
+ }
1068
+ }
1069
+ } else if (arraySize.length === 2) {
1070
+ for (var i = 0; i < arraySize[0]; i++) {
1071
+ var isCorrect = true;
1072
+ var item = data[i];
1073
+ for (var j = 0; j < arraySize[1]; j++) {
1074
+ if (shouldBeNumberDimension(j) && !isNumber(item[j])) {
1075
+ isCorrect = false;
1076
+ }
1077
+ }
1078
+ if (isCorrect) {
1079
+ predata.push(targetOneDim != null ? item[targetOneDim] : item);
1080
+ }
1081
+ }
1082
+ }
1083
+ return predata;
1084
+ }
1085
+ function getPrecision(val) {
1086
+ var str = val.toString();
1087
+ var dotIndex = str.indexOf(".");
1088
+ return dotIndex < 0 ? 0 : str.length - 1 - dotIndex;
1089
+ }
1090
+ return {
1091
+ normalizeDimensions,
1092
+ dataPreprocess,
1093
+ getPrecision
1094
+ };
1095
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1096
+ },
1097
+ function(module2, exports2, __webpack_require__) {
1098
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1099
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1100
+ var objToString = Object.prototype.toString;
1101
+ var arrayProto = Array.prototype;
1102
+ var nativeMap = arrayProto.map;
1103
+ function size(data) {
1104
+ var s = [];
1105
+ while (isArray(data)) {
1106
+ s.push(data.length);
1107
+ data = data[0];
1108
+ }
1109
+ return s;
1110
+ }
1111
+ function isArray(value) {
1112
+ return objToString.call(value) === "[object Array]";
1113
+ }
1114
+ function zeros(m2, n2) {
1115
+ var zeroArray = [];
1116
+ for (var i = 0; i < m2; i++) {
1117
+ zeroArray[i] = [];
1118
+ for (var j = 0; j < n2; j++) {
1119
+ zeroArray[i][j] = 0;
1120
+ }
1121
+ }
1122
+ return zeroArray;
1123
+ }
1124
+ function sum(vector) {
1125
+ var sum2 = 0;
1126
+ for (var i = 0; i < vector.length; i++) {
1127
+ sum2 += vector[i];
1128
+ }
1129
+ return sum2;
1130
+ }
1131
+ function sumOfColumn(dataList, n2) {
1132
+ var sum2 = 0;
1133
+ for (var i = 0; i < dataList.length; i++) {
1134
+ sum2 += dataList[i][n2];
1135
+ }
1136
+ return sum2;
1137
+ }
1138
+ function ascending(a, b) {
1139
+ return a > b ? 1 : a < b ? -1 : a === b ? 0 : NaN;
1140
+ }
1141
+ function bisect(array, value, start, end) {
1142
+ if (start == null) {
1143
+ start = 0;
1144
+ }
1145
+ if (end == null) {
1146
+ end = array.length;
1147
+ }
1148
+ while (start < end) {
1149
+ var mid = Math.floor((start + end) / 2);
1150
+ var compare = ascending(array[mid], value);
1151
+ if (compare > 0) {
1152
+ end = mid;
1153
+ } else if (compare < 0) {
1154
+ start = mid + 1;
1155
+ } else {
1156
+ return mid + 1;
1157
+ }
1158
+ }
1159
+ return start;
1160
+ }
1161
+ function map(obj, cb, context) {
1162
+ if (!(obj && cb)) {
1163
+ return;
1164
+ }
1165
+ if (obj.map && obj.map === nativeMap) {
1166
+ return obj.map(cb, context);
1167
+ } else {
1168
+ var result = [];
1169
+ for (var i = 0, len = obj.length; i < len; i++) {
1170
+ result.push(cb.call(context, obj[i], i, obj));
1171
+ }
1172
+ return result;
1173
+ }
1174
+ }
1175
+ return {
1176
+ size,
1177
+ isArray,
1178
+ zeros,
1179
+ sum,
1180
+ sumOfColumn,
1181
+ ascending,
1182
+ bisect,
1183
+ map
1184
+ };
1185
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1186
+ },
1187
+ function(module2, exports2, __webpack_require__) {
1188
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1189
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1190
+ function isNumber(value) {
1191
+ value = value === null ? NaN : +value;
1192
+ return typeof value === "number" && !isNaN(value);
1193
+ }
1194
+ function isInteger(value) {
1195
+ return isFinite(value) && value === Math.round(value);
1196
+ }
1197
+ function quantityExponent(val) {
1198
+ if (val === 0) {
1199
+ return 0;
1200
+ }
1201
+ var exp = Math.floor(Math.log(val) / Math.LN10);
1202
+ if (val / Math.pow(10, exp) >= 10) {
1203
+ exp++;
1204
+ }
1205
+ return exp;
1206
+ }
1207
+ return {
1208
+ isNumber,
1209
+ isInteger,
1210
+ quantityExponent
1211
+ };
1212
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1213
+ },
1214
+ function(module2, exports2, __webpack_require__) {
1215
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1216
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1217
+ var dataProcess = __webpack_require__(2);
1218
+ var dataPreprocess = dataProcess.dataPreprocess;
1219
+ var normalizeDimensions = dataProcess.normalizeDimensions;
1220
+ var regreMethods = {
1221
+ linear: function(predata, opt) {
1222
+ var xDimIdx = opt.dimensions[0];
1223
+ var yDimIdx = opt.dimensions[1];
1224
+ var sumX = 0;
1225
+ var sumY = 0;
1226
+ var sumXY = 0;
1227
+ var sumXX = 0;
1228
+ var len = predata.length;
1229
+ for (var i = 0; i < len; i++) {
1230
+ var rawItem = predata[i];
1231
+ sumX += rawItem[xDimIdx];
1232
+ sumY += rawItem[yDimIdx];
1233
+ sumXY += rawItem[xDimIdx] * rawItem[yDimIdx];
1234
+ sumXX += rawItem[xDimIdx] * rawItem[xDimIdx];
1235
+ }
1236
+ var gradient = (len * sumXY - sumX * sumY) / (len * sumXX - sumX * sumX);
1237
+ var intercept = sumY / len - gradient * sumX / len;
1238
+ var result = [];
1239
+ for (var j = 0; j < predata.length; j++) {
1240
+ var rawItem = predata[j];
1241
+ var resultItem = rawItem.slice();
1242
+ resultItem[xDimIdx] = rawItem[xDimIdx];
1243
+ resultItem[yDimIdx] = gradient * rawItem[xDimIdx] + intercept;
1244
+ result.push(resultItem);
1245
+ }
1246
+ var expression = "y = " + Math.round(gradient * 100) / 100 + "x + " + Math.round(intercept * 100) / 100;
1247
+ return {
1248
+ points: result,
1249
+ parameter: {
1250
+ gradient,
1251
+ intercept
1252
+ },
1253
+ expression
1254
+ };
1255
+ },
1256
+ linearThroughOrigin: function(predata, opt) {
1257
+ var xDimIdx = opt.dimensions[0];
1258
+ var yDimIdx = opt.dimensions[1];
1259
+ var sumXX = 0;
1260
+ var sumXY = 0;
1261
+ for (var i = 0; i < predata.length; i++) {
1262
+ var rawItem = predata[i];
1263
+ sumXX += rawItem[xDimIdx] * rawItem[xDimIdx];
1264
+ sumXY += rawItem[xDimIdx] * rawItem[yDimIdx];
1265
+ }
1266
+ var gradient = sumXY / sumXX;
1267
+ var result = [];
1268
+ for (var j = 0; j < predata.length; j++) {
1269
+ var rawItem = predata[j];
1270
+ var resultItem = rawItem.slice();
1271
+ resultItem[xDimIdx] = rawItem[xDimIdx];
1272
+ resultItem[yDimIdx] = rawItem[xDimIdx] * gradient;
1273
+ result.push(resultItem);
1274
+ }
1275
+ var expression = "y = " + Math.round(gradient * 100) / 100 + "x";
1276
+ return {
1277
+ points: result,
1278
+ parameter: {
1279
+ gradient
1280
+ },
1281
+ expression
1282
+ };
1283
+ },
1284
+ exponential: function(predata, opt) {
1285
+ var xDimIdx = opt.dimensions[0];
1286
+ var yDimIdx = opt.dimensions[1];
1287
+ var sumX = 0;
1288
+ var sumY = 0;
1289
+ var sumXXY = 0;
1290
+ var sumYlny = 0;
1291
+ var sumXYlny = 0;
1292
+ var sumXY = 0;
1293
+ for (var i = 0; i < predata.length; i++) {
1294
+ var rawItem = predata[i];
1295
+ sumX += rawItem[xDimIdx];
1296
+ sumY += rawItem[yDimIdx];
1297
+ sumXY += rawItem[xDimIdx] * rawItem[yDimIdx];
1298
+ sumXXY += rawItem[xDimIdx] * rawItem[xDimIdx] * rawItem[yDimIdx];
1299
+ sumYlny += rawItem[yDimIdx] * Math.log(rawItem[yDimIdx]);
1300
+ sumXYlny += rawItem[xDimIdx] * rawItem[yDimIdx] * Math.log(rawItem[yDimIdx]);
1301
+ }
1302
+ var denominator = sumY * sumXXY - sumXY * sumXY;
1303
+ var coefficient = Math.pow(Math.E, (sumXXY * sumYlny - sumXY * sumXYlny) / denominator);
1304
+ var index2 = (sumY * sumXYlny - sumXY * sumYlny) / denominator;
1305
+ var result = [];
1306
+ for (var j = 0; j < predata.length; j++) {
1307
+ var rawItem = predata[j];
1308
+ var resultItem = rawItem.slice();
1309
+ resultItem[xDimIdx] = rawItem[xDimIdx];
1310
+ resultItem[yDimIdx] = coefficient * Math.pow(Math.E, index2 * rawItem[xDimIdx]);
1311
+ result.push(resultItem);
1312
+ }
1313
+ var expression = "y = " + Math.round(coefficient * 100) / 100 + "e^(" + Math.round(index2 * 100) / 100 + "x)";
1314
+ return {
1315
+ points: result,
1316
+ parameter: {
1317
+ coefficient,
1318
+ index: index2
1319
+ },
1320
+ expression
1321
+ };
1322
+ },
1323
+ logarithmic: function(predata, opt) {
1324
+ var xDimIdx = opt.dimensions[0];
1325
+ var yDimIdx = opt.dimensions[1];
1326
+ var sumlnx = 0;
1327
+ var sumYlnx = 0;
1328
+ var sumY = 0;
1329
+ var sumlnxlnx = 0;
1330
+ for (var i = 0; i < predata.length; i++) {
1331
+ var rawItem = predata[i];
1332
+ sumlnx += Math.log(rawItem[xDimIdx]);
1333
+ sumYlnx += rawItem[yDimIdx] * Math.log(rawItem[xDimIdx]);
1334
+ sumY += rawItem[yDimIdx];
1335
+ sumlnxlnx += Math.pow(Math.log(rawItem[xDimIdx]), 2);
1336
+ }
1337
+ var gradient = (i * sumYlnx - sumY * sumlnx) / (i * sumlnxlnx - sumlnx * sumlnx);
1338
+ var intercept = (sumY - gradient * sumlnx) / i;
1339
+ var result = [];
1340
+ for (var j = 0; j < predata.length; j++) {
1341
+ var rawItem = predata[j];
1342
+ var resultItem = rawItem.slice();
1343
+ resultItem[xDimIdx] = rawItem[xDimIdx];
1344
+ resultItem[yDimIdx] = gradient * Math.log(rawItem[xDimIdx]) + intercept;
1345
+ result.push(resultItem);
1346
+ }
1347
+ var expression = "y = " + Math.round(intercept * 100) / 100 + " + " + Math.round(gradient * 100) / 100 + "ln(x)";
1348
+ return {
1349
+ points: result,
1350
+ parameter: {
1351
+ gradient,
1352
+ intercept
1353
+ },
1354
+ expression
1355
+ };
1356
+ },
1357
+ polynomial: function(predata, opt) {
1358
+ var xDimIdx = opt.dimensions[0];
1359
+ var yDimIdx = opt.dimensions[1];
1360
+ var order = opt.order;
1361
+ if (order == null) {
1362
+ order = 2;
1363
+ }
1364
+ var coeMatrix = [];
1365
+ var lhs = [];
1366
+ var k2 = order + 1;
1367
+ for (var i = 0; i < k2; i++) {
1368
+ var sumA = 0;
1369
+ for (var n2 = 0; n2 < predata.length; n2++) {
1370
+ var rawItem = predata[n2];
1371
+ sumA += rawItem[yDimIdx] * Math.pow(rawItem[xDimIdx], i);
1372
+ }
1373
+ lhs.push(sumA);
1374
+ var temp = [];
1375
+ for (var j = 0; j < k2; j++) {
1376
+ var sumB = 0;
1377
+ for (var m2 = 0; m2 < predata.length; m2++) {
1378
+ sumB += Math.pow(predata[m2][xDimIdx], i + j);
1379
+ }
1380
+ temp.push(sumB);
1381
+ }
1382
+ coeMatrix.push(temp);
1383
+ }
1384
+ coeMatrix.push(lhs);
1385
+ var coeArray = gaussianElimination(coeMatrix, k2);
1386
+ var result = [];
1387
+ for (var i = 0; i < predata.length; i++) {
1388
+ var value = 0;
1389
+ var rawItem = predata[i];
1390
+ for (var n2 = 0; n2 < coeArray.length; n2++) {
1391
+ value += coeArray[n2] * Math.pow(rawItem[xDimIdx], n2);
1392
+ }
1393
+ var resultItem = rawItem.slice();
1394
+ resultItem[xDimIdx] = rawItem[xDimIdx];
1395
+ resultItem[yDimIdx] = value;
1396
+ result.push(resultItem);
1397
+ }
1398
+ var expression = "y = ";
1399
+ for (var i = coeArray.length - 1; i >= 0; i--) {
1400
+ if (i > 1) {
1401
+ expression += Math.round(coeArray[i] * Math.pow(10, i + 1)) / Math.pow(10, i + 1) + "x^" + i + " + ";
1402
+ } else if (i === 1) {
1403
+ expression += Math.round(coeArray[i] * 100) / 100 + "x + ";
1404
+ } else {
1405
+ expression += Math.round(coeArray[i] * 100) / 100;
1406
+ }
1407
+ }
1408
+ return {
1409
+ points: result,
1410
+ parameter: coeArray,
1411
+ expression
1412
+ };
1413
+ }
1414
+ };
1415
+ function gaussianElimination(matrix, number2) {
1416
+ for (var i = 0; i < matrix.length - 1; i++) {
1417
+ var maxColumn = i;
1418
+ for (var j = i + 1; j < matrix.length - 1; j++) {
1419
+ if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][maxColumn])) {
1420
+ maxColumn = j;
1421
+ }
1422
+ }
1423
+ for (var k2 = i; k2 < matrix.length; k2++) {
1424
+ var temp = matrix[k2][i];
1425
+ matrix[k2][i] = matrix[k2][maxColumn];
1426
+ matrix[k2][maxColumn] = temp;
1427
+ }
1428
+ for (var n2 = i + 1; n2 < matrix.length - 1; n2++) {
1429
+ for (var m2 = matrix.length - 1; m2 >= i; m2--) {
1430
+ matrix[m2][n2] -= matrix[m2][i] / matrix[i][i] * matrix[i][n2];
1431
+ }
1432
+ }
1433
+ }
1434
+ var data = new Array(number2);
1435
+ var len = matrix.length - 1;
1436
+ for (var j = matrix.length - 2; j >= 0; j--) {
1437
+ var temp = 0;
1438
+ for (var i = j + 1; i < matrix.length - 1; i++) {
1439
+ temp += matrix[i][j] * data[i];
1440
+ }
1441
+ data[j] = (matrix[len][j] - temp) / matrix[j][j];
1442
+ }
1443
+ return data;
1444
+ }
1445
+ var regression = function(regreMethod, data, optOrOrder) {
1446
+ var opt = typeof optOrOrder === "number" ? { order: optOrOrder } : optOrOrder || {};
1447
+ var dimensions = normalizeDimensions(opt.dimensions, [0, 1]);
1448
+ var predata = dataPreprocess(data, { dimensions });
1449
+ var result = regreMethods[regreMethod](predata, {
1450
+ order: opt.order,
1451
+ dimensions
1452
+ });
1453
+ var xDimIdx = dimensions[0];
1454
+ result.points.sort(function(itemA, itemB) {
1455
+ return itemA[xDimIdx] - itemB[xDimIdx];
1456
+ });
1457
+ return result;
1458
+ };
1459
+ return regression;
1460
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1461
+ },
1462
+ function(module2, exports2, __webpack_require__) {
1463
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1464
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1465
+ var statistics = {};
1466
+ statistics.max = __webpack_require__(7);
1467
+ statistics.deviation = __webpack_require__(8);
1468
+ statistics.mean = __webpack_require__(10);
1469
+ statistics.median = __webpack_require__(12);
1470
+ statistics.min = __webpack_require__(14);
1471
+ statistics.quantile = __webpack_require__(13);
1472
+ statistics.sampleVariance = __webpack_require__(9);
1473
+ statistics.sum = __webpack_require__(11);
1474
+ return statistics;
1475
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1476
+ },
1477
+ function(module2, exports2, __webpack_require__) {
1478
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1479
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1480
+ var number2 = __webpack_require__(4);
1481
+ var isNumber = number2.isNumber;
1482
+ function max(data) {
1483
+ var maxData = -Infinity;
1484
+ for (var i = 0; i < data.length; i++) {
1485
+ if (isNumber(data[i]) && data[i] > maxData) {
1486
+ maxData = data[i];
1487
+ }
1488
+ }
1489
+ return maxData;
1490
+ }
1491
+ return max;
1492
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1493
+ },
1494
+ function(module2, exports2, __webpack_require__) {
1495
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1496
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1497
+ var variance = __webpack_require__(9);
1498
+ return function(data) {
1499
+ var squaredDeviation = variance(data);
1500
+ return squaredDeviation ? Math.sqrt(squaredDeviation) : squaredDeviation;
1501
+ };
1502
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1503
+ },
1504
+ function(module2, exports2, __webpack_require__) {
1505
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1506
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1507
+ var number2 = __webpack_require__(4);
1508
+ var isNumber = number2.isNumber;
1509
+ var mean = __webpack_require__(10);
1510
+ function sampleVariance(data) {
1511
+ var len = data.length;
1512
+ if (!len || len < 2) {
1513
+ return 0;
1514
+ }
1515
+ if (data.length >= 2) {
1516
+ var meanValue = mean(data);
1517
+ var sum = 0;
1518
+ var temple;
1519
+ for (var i = 0; i < data.length; i++) {
1520
+ if (isNumber(data[i])) {
1521
+ temple = data[i] - meanValue;
1522
+ sum += temple * temple;
1523
+ }
1524
+ }
1525
+ return sum / (data.length - 1);
1526
+ }
1527
+ }
1528
+ return sampleVariance;
1529
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1530
+ },
1531
+ function(module2, exports2, __webpack_require__) {
1532
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1533
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1534
+ var sum = __webpack_require__(11);
1535
+ function mean(data) {
1536
+ var len = data.length;
1537
+ if (!len) {
1538
+ return 0;
1539
+ }
1540
+ return sum(data) / data.length;
1541
+ }
1542
+ return mean;
1543
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1544
+ },
1545
+ function(module2, exports2, __webpack_require__) {
1546
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1547
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1548
+ var number2 = __webpack_require__(4);
1549
+ var isNumber = number2.isNumber;
1550
+ function sum(data) {
1551
+ var len = data.length;
1552
+ if (!len) {
1553
+ return 0;
1554
+ }
1555
+ var sumData = 0;
1556
+ for (var i = 0; i < len; i++) {
1557
+ if (isNumber(data[i])) {
1558
+ sumData += data[i];
1559
+ }
1560
+ }
1561
+ return sumData;
1562
+ }
1563
+ return sum;
1564
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1565
+ },
1566
+ function(module2, exports2, __webpack_require__) {
1567
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1568
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1569
+ var quantile = __webpack_require__(13);
1570
+ function median(data) {
1571
+ return quantile(data, 0.5);
1572
+ }
1573
+ return median;
1574
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1575
+ },
1576
+ function(module2, exports2, __webpack_require__) {
1577
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1578
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1579
+ return function(data, p2) {
1580
+ var len = data.length;
1581
+ if (!len) {
1582
+ return 0;
1583
+ }
1584
+ if (p2 <= 0 || len < 2) {
1585
+ return data[0];
1586
+ }
1587
+ if (p2 >= 1) {
1588
+ return data[len - 1];
1589
+ }
1590
+ var h = (len - 1) * p2;
1591
+ var i = Math.floor(h);
1592
+ var a = data[i];
1593
+ var b = data[i + 1];
1594
+ return a + (b - a) * (h - i);
1595
+ };
1596
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1597
+ },
1598
+ function(module2, exports2, __webpack_require__) {
1599
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1600
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1601
+ var number2 = __webpack_require__(4);
1602
+ var isNumber = number2.isNumber;
1603
+ function min(data) {
1604
+ var minData = Infinity;
1605
+ for (var i = 0; i < data.length; i++) {
1606
+ if (isNumber(data[i]) && data[i] < minData) {
1607
+ minData = data[i];
1608
+ }
1609
+ }
1610
+ return minData;
1611
+ }
1612
+ return min;
1613
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1614
+ },
1615
+ function(module2, exports2, __webpack_require__) {
1616
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1617
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1618
+ var max = __webpack_require__(7);
1619
+ var min = __webpack_require__(14);
1620
+ var quantile = __webpack_require__(13);
1621
+ var deviation = __webpack_require__(8);
1622
+ var dataProcess = __webpack_require__(2);
1623
+ var dataPreprocess = dataProcess.dataPreprocess;
1624
+ var normalizeDimensions = dataProcess.normalizeDimensions;
1625
+ var array = __webpack_require__(3);
1626
+ var ascending = array.ascending;
1627
+ var map = array.map;
1628
+ var range = __webpack_require__(16);
1629
+ var bisect = array.bisect;
1630
+ var tickStep = __webpack_require__(17);
1631
+ function computeBins(data, optOrMethod) {
1632
+ var opt = typeof optOrMethod === "string" ? { method: optOrMethod } : optOrMethod || {};
1633
+ var threshold = opt.method == null ? thresholdMethod.squareRoot : thresholdMethod[opt.method];
1634
+ var dimensions = normalizeDimensions(opt.dimensions);
1635
+ var values = dataPreprocess(data, {
1636
+ dimensions,
1637
+ toOneDimensionArray: true
1638
+ });
1639
+ var maxValue = max(values);
1640
+ var minValue = min(values);
1641
+ var binsNumber = threshold(values, minValue, maxValue);
1642
+ var tickStepResult = tickStep(minValue, maxValue, binsNumber);
1643
+ var step = tickStepResult.step;
1644
+ var toFixedPrecision = tickStepResult.toFixedPrecision;
1645
+ var rangeArray = range(+(Math.ceil(minValue / step) * step).toFixed(toFixedPrecision), +(Math.floor(maxValue / step) * step).toFixed(toFixedPrecision), step, toFixedPrecision);
1646
+ var len = rangeArray.length;
1647
+ var bins = new Array(len + 1);
1648
+ for (var i = 0; i <= len; i++) {
1649
+ bins[i] = {};
1650
+ bins[i].sample = [];
1651
+ bins[i].x0 = i > 0 ? rangeArray[i - 1] : rangeArray[i] - minValue === step ? minValue : rangeArray[i] - step;
1652
+ bins[i].x1 = i < len ? rangeArray[i] : maxValue - rangeArray[i - 1] === step ? maxValue : rangeArray[i - 1] + step;
1653
+ }
1654
+ for (var i = 0; i < values.length; i++) {
1655
+ if (minValue <= values[i] && values[i] <= maxValue) {
1656
+ bins[bisect(rangeArray, values[i], 0, len)].sample.push(values[i]);
1657
+ }
1658
+ }
1659
+ var data = map(bins, function(bin) {
1660
+ return [
1661
+ +((bin.x0 + bin.x1) / 2).toFixed(toFixedPrecision),
1662
+ bin.sample.length,
1663
+ bin.x0,
1664
+ bin.x1,
1665
+ bin.x0 + " - " + bin.x1
1666
+ ];
1667
+ });
1668
+ var customData = map(bins, function(bin) {
1669
+ return [bin.x0, bin.x1, bin.sample.length];
1670
+ });
1671
+ return {
1672
+ bins,
1673
+ data,
1674
+ customData
1675
+ };
1676
+ }
1677
+ var thresholdMethod = {
1678
+ squareRoot: function(data) {
1679
+ var bins = Math.ceil(Math.sqrt(data.length));
1680
+ return bins > 50 ? 50 : bins;
1681
+ },
1682
+ scott: function(data, min2, max2) {
1683
+ return Math.ceil((max2 - min2) / (3.5 * deviation(data) * Math.pow(data.length, -1 / 3)));
1684
+ },
1685
+ freedmanDiaconis: function(data, min2, max2) {
1686
+ data.sort(ascending);
1687
+ return Math.ceil((max2 - min2) / (2 * (quantile(data, 0.75) - quantile(data, 0.25)) * Math.pow(data.length, -1 / 3)));
1688
+ },
1689
+ sturges: function(data) {
1690
+ return Math.ceil(Math.log(data.length) / Math.LN2) + 1;
1691
+ }
1692
+ };
1693
+ return computeBins;
1694
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1695
+ },
1696
+ function(module2, exports2, __webpack_require__) {
1697
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1698
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1699
+ var dataProcess = __webpack_require__(2);
1700
+ var getPrecision = dataProcess.getPrecision;
1701
+ return function(start, end, step, precision) {
1702
+ var len = arguments.length;
1703
+ if (len < 2) {
1704
+ end = start;
1705
+ start = 0;
1706
+ step = 1;
1707
+ } else if (len < 3) {
1708
+ step = 1;
1709
+ } else if (len < 4) {
1710
+ step = +step;
1711
+ precision = getPrecision(step);
1712
+ } else {
1713
+ precision = +precision;
1714
+ }
1715
+ var n2 = Math.ceil(((end - start) / step).toFixed(precision));
1716
+ var range = new Array(n2 + 1);
1717
+ for (var i = 0; i < n2 + 1; i++) {
1718
+ range[i] = +(start + i * step).toFixed(precision);
1719
+ }
1720
+ return range;
1721
+ };
1722
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1723
+ },
1724
+ function(module2, exports2, __webpack_require__) {
1725
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1726
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1727
+ var numberUtil = __webpack_require__(4);
1728
+ return function(start, stop, count) {
1729
+ var step0 = Math.abs(stop - start) / count;
1730
+ var precision = numberUtil.quantityExponent(step0);
1731
+ var step1 = Math.pow(10, precision);
1732
+ var error = step0 / step1;
1733
+ if (error >= Math.sqrt(50)) {
1734
+ step1 *= 10;
1735
+ } else if (error >= Math.sqrt(10)) {
1736
+ step1 *= 5;
1737
+ } else if (error >= Math.sqrt(2)) {
1738
+ step1 *= 2;
1739
+ }
1740
+ var toFixedPrecision = precision < 0 ? -precision : 0;
1741
+ var resultStep = +(stop >= start ? step1 : -step1).toFixed(toFixedPrecision);
1742
+ return {
1743
+ step: resultStep,
1744
+ toFixedPrecision
1745
+ };
1746
+ };
1747
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1748
+ },
1749
+ function(module2, exports2, __webpack_require__) {
1750
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1751
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1752
+ var regression = __webpack_require__(5);
1753
+ var transformHelper = __webpack_require__(19);
1754
+ var FORMULA_DIMENSION = 2;
1755
+ return {
1756
+ type: "ecStat:regression",
1757
+ transform: function transform(params) {
1758
+ var upstream = params.upstream;
1759
+ var config = params.config || {};
1760
+ var method = config.method || "linear";
1761
+ var result = regression(method, upstream.cloneRawData(), {
1762
+ order: config.order,
1763
+ dimensions: transformHelper.normalizeExistingDimensions(params, config.dimensions)
1764
+ });
1765
+ var points = result.points;
1766
+ var formulaOn = config.formulaOn;
1767
+ if (formulaOn == null) {
1768
+ formulaOn = "end";
1769
+ }
1770
+ var dimensions;
1771
+ if (formulaOn !== "none") {
1772
+ for (var i = 0; i < points.length; i++) {
1773
+ points[i][FORMULA_DIMENSION] = formulaOn === "start" && i === 0 || formulaOn === "all" || formulaOn === "end" && i === points.length - 1 ? result.expression : "";
1774
+ }
1775
+ dimensions = upstream.cloneAllDimensionInfo();
1776
+ dimensions[FORMULA_DIMENSION] = {};
1777
+ }
1778
+ return [{
1779
+ dimensions,
1780
+ data: points
1781
+ }];
1782
+ }
1783
+ };
1784
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1785
+ },
1786
+ function(module2, exports2, __webpack_require__) {
1787
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1788
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1789
+ var arrayUtil = __webpack_require__(3);
1790
+ var numberUtil = __webpack_require__(4);
1791
+ var objectUtil = __webpack_require__(20);
1792
+ function normalizeExistingDimensions(transformParams, dimensionsConfig) {
1793
+ if (dimensionsConfig == null) {
1794
+ return;
1795
+ }
1796
+ var upstream = transformParams.upstream;
1797
+ if (arrayUtil.isArray(dimensionsConfig)) {
1798
+ var result = [];
1799
+ for (var i = 0; i < dimensionsConfig.length; i++) {
1800
+ var dimInfo = upstream.getDimensionInfo(dimensionsConfig[i]);
1801
+ validateDimensionExists(dimInfo, dimensionsConfig[i]);
1802
+ result[i] = dimInfo.index;
1803
+ }
1804
+ return result;
1805
+ } else {
1806
+ var dimInfo = upstream.getDimensionInfo(dimensionsConfig);
1807
+ validateDimensionExists(dimInfo, dimensionsConfig);
1808
+ return dimInfo.index;
1809
+ }
1810
+ function validateDimensionExists(dimInfo2, dimConfig) {
1811
+ if (!dimInfo2) {
1812
+ throw new Error("Can not find dimension by " + dimConfig);
1813
+ }
1814
+ }
1815
+ }
1816
+ function normalizeNewDimensions(dimensionsConfig) {
1817
+ if (arrayUtil.isArray(dimensionsConfig)) {
1818
+ var names = [];
1819
+ var indices = [];
1820
+ for (var i = 0; i < dimensionsConfig.length; i++) {
1821
+ var item = parseDimensionNewItem(dimensionsConfig[i]);
1822
+ names.push(item.name);
1823
+ indices.push(item.index);
1824
+ }
1825
+ return { name: names, index: indices };
1826
+ } else if (dimensionsConfig != null) {
1827
+ return parseDimensionNewItem(dimensionsConfig);
1828
+ }
1829
+ function parseDimensionNewItem(dimConfig) {
1830
+ if (numberUtil.isNumber(dimConfig)) {
1831
+ return { index: dimConfig };
1832
+ } else if (objectUtil.isObject(dimConfig) && numberUtil.isNumber(dimConfig.index)) {
1833
+ return dimConfig;
1834
+ }
1835
+ throw new Error("Illegle new dimensions config. Expect `{ name: string, index: number }`.");
1836
+ }
1837
+ }
1838
+ return {
1839
+ normalizeExistingDimensions,
1840
+ normalizeNewDimensions
1841
+ };
1842
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1843
+ },
1844
+ function(module2, exports2, __webpack_require__) {
1845
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1846
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1847
+ function extend(target, source) {
1848
+ if (Object.assign) {
1849
+ Object.assign(target, source);
1850
+ } else {
1851
+ for (var key in source) {
1852
+ if (source.hasOwnProperty(key)) {
1853
+ target[key] = source[key];
1854
+ }
1855
+ }
1856
+ }
1857
+ return target;
1858
+ }
1859
+ function isObject(value) {
1860
+ const type = typeof value;
1861
+ return type === "function" || !!value && type === "object";
1862
+ }
1863
+ return {
1864
+ extend,
1865
+ isObject
1866
+ };
1867
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1868
+ },
1869
+ function(module2, exports2, __webpack_require__) {
1870
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1871
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1872
+ var histogram = __webpack_require__(15);
1873
+ var transformHelper = __webpack_require__(19);
1874
+ return {
1875
+ type: "ecStat:histogram",
1876
+ transform: function transform(params) {
1877
+ var upstream = params.upstream;
1878
+ var config = params.config || {};
1879
+ var result = histogram(upstream.cloneRawData(), {
1880
+ method: config.method,
1881
+ dimensions: transformHelper.normalizeExistingDimensions(params, config.dimensions)
1882
+ });
1883
+ return [{
1884
+ dimensions: ["MeanOfV0V1", "VCount", "V0", "V1", "DisplayableName"],
1885
+ data: result.data
1886
+ }, {
1887
+ data: result.customData
1888
+ }];
1889
+ }
1890
+ };
1891
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1892
+ },
1893
+ function(module2, exports2, __webpack_require__) {
1894
+ var __WEBPACK_AMD_DEFINE_RESULT__;
1895
+ !(__WEBPACK_AMD_DEFINE_RESULT__ = function(require2) {
1896
+ var clustering = __webpack_require__(1);
1897
+ var numberUtil = __webpack_require__(4);
1898
+ var transformHelper = __webpack_require__(19);
1899
+ var isNumber = numberUtil.isNumber;
1900
+ return {
1901
+ type: "ecStat:clustering",
1902
+ transform: function transform(params) {
1903
+ var upstream = params.upstream;
1904
+ var config = params.config || {};
1905
+ var clusterCount = config.clusterCount;
1906
+ if (!isNumber(clusterCount) || clusterCount <= 0) {
1907
+ throw new Error('config param "clusterCount" need to be specified as an interger greater than 1.');
1908
+ }
1909
+ if (clusterCount === 1) {
1910
+ return [{}, {
1911
+ data: []
1912
+ }];
1913
+ }
1914
+ var outputClusterIndexDimension = transformHelper.normalizeNewDimensions(config.outputClusterIndexDimension);
1915
+ var outputCentroidDimensions = transformHelper.normalizeNewDimensions(config.outputCentroidDimensions);
1916
+ if (outputClusterIndexDimension == null) {
1917
+ throw new Error("outputClusterIndexDimension is required as a number.");
1918
+ }
1919
+ var result = clustering.hierarchicalKMeans(upstream.cloneRawData(), {
1920
+ clusterCount,
1921
+ stepByStep: false,
1922
+ dimensions: transformHelper.normalizeExistingDimensions(params, config.dimensions),
1923
+ outputType: clustering.OutputType.SINGLE,
1924
+ outputClusterIndexDimension: outputClusterIndexDimension.index,
1925
+ outputCentroidDimensions: (outputCentroidDimensions || {}).index
1926
+ });
1927
+ var sourceDimAll = upstream.cloneAllDimensionInfo();
1928
+ var resultDimsDef = [];
1929
+ for (var i = 0; i < sourceDimAll.length; i++) {
1930
+ var sourceDimItem = sourceDimAll[i];
1931
+ resultDimsDef.push(sourceDimItem.name);
1932
+ }
1933
+ resultDimsDef[outputClusterIndexDimension.index] = outputClusterIndexDimension.name;
1934
+ if (outputCentroidDimensions) {
1935
+ for (var i = 0; i < outputCentroidDimensions.index.length; i++) {
1936
+ if (outputCentroidDimensions.name[i] != null) {
1937
+ resultDimsDef[outputCentroidDimensions.index[i]] = outputCentroidDimensions.name[i];
1938
+ }
1939
+ }
1940
+ }
1941
+ return [{
1942
+ dimensions: resultDimsDef,
1943
+ data: result.data
1944
+ }, {
1945
+ data: result.centroids
1946
+ }];
1947
+ }
1948
+ };
1949
+ }.call(exports2, __webpack_require__, exports2, module2), __WEBPACK_AMD_DEFINE_RESULT__ !== void 0 && (module2.exports = __WEBPACK_AMD_DEFINE_RESULT__));
1950
+ }
1951
+ ]);
1952
+ });
1953
+ })(ecStat);
1954
+ var echartsStat = ecStat.exports;
1955
+ function getRegressionConfs({ regressions = [] }, data) {
1956
+ const regressionDataSets = [];
1957
+ const regressionSeries = [];
1958
+ const regressionXAxes = [];
1959
+ if (data.length === 0) {
1960
+ return { regressionDataSets, regressionSeries, regressionXAxes };
1961
+ }
1962
+ regressions.forEach(({ transform, plot, name, y_axis_data_key }) => {
1963
+ const xAxisId = `x-axis-for-${name}`;
1964
+ const rawDatasetId = `dataset-for-${name}--raw`;
1965
+ const regDatasetId = `dataset-for-${name}--transformed`;
1966
+ regressionDataSets.push({
1967
+ id: rawDatasetId,
1968
+ source: data.map((d, i) => [i, d[y_axis_data_key]])
1969
+ });
1970
+ regressionDataSets.push({
1971
+ transform,
1972
+ id: regDatasetId,
1973
+ fromDatasetId: rawDatasetId
1974
+ });
1975
+ regressionSeries.push(__spreadProps(__spreadValues({}, plot), {
1976
+ name,
1977
+ datasetId: regDatasetId,
1978
+ xAxisId,
1979
+ showSymbol: false,
1980
+ tooltip: {
1981
+ show: false
1982
+ }
1983
+ }));
1984
+ regressionXAxes.push({
1985
+ type: "category",
1986
+ id: xAxisId,
1987
+ datasetId: regDatasetId,
1988
+ show: false
1989
+ });
1990
+ });
1991
+ return { regressionDataSets, regressionSeries, regressionXAxes };
1992
+ }
692
1993
  const defaultOption$1 = {
693
1994
  legend: {
694
1995
  show: true,
@@ -714,115 +2015,103 @@ const defaultOption$1 = {
714
2015
  containLabel: true
715
2016
  }
716
2017
  };
717
- function VizCartesianChart({
718
- conf,
719
- data,
720
- width,
721
- height
722
- }) {
723
- const option = React.useMemo(() => {
724
- var _c;
725
- const labelFormatters = conf.y_axes.reduce((ret, {
726
- label_formatter
727
- }, index2) => {
728
- ret[index2] = function formatter(payload) {
729
- const value = typeof payload === "object" ? payload.value : payload;
730
- if (!label_formatter) {
731
- return value;
732
- }
733
- try {
734
- return numbro(value).format(label_formatter);
735
- } catch (error) {
736
- console.error(error);
737
- return value;
738
- }
739
- };
740
- return ret;
741
- }, {
742
- default: ({
743
- value
744
- }) => value
745
- });
746
- const yAxisIndexMap = conf.series.reduce((ret, {
747
- yAxisIndex,
748
- name
749
- }) => {
750
- ret[name] = yAxisIndex;
751
- return ret;
752
- }, {});
753
- const series = conf.series.map((_a) => {
754
- var _b = _a, {
755
- y_axis_data_key,
756
- yAxisIndex,
757
- label_position,
758
- name
759
- } = _b, rest = __objRest(_b, [
760
- "y_axis_data_key",
761
- "yAxisIndex",
762
- "label_position",
763
- "name"
764
- ]);
765
- const ret = __spreadValues({
766
- data: data.map((d) => d[y_axis_data_key]),
767
- label: {
768
- show: !!label_position,
769
- position: label_position,
770
- formatter: labelFormatters[yAxisIndex != null ? yAxisIndex : "default"]
771
- },
772
- name,
773
- yAxisIndex
774
- }, rest);
775
- return ret;
776
- });
777
- const customOptions = {
778
- xAxis: {
2018
+ function getOption(conf, data) {
2019
+ var _c;
2020
+ const labelFormatters = conf.y_axes.reduce((ret, { label_formatter }, index2) => {
2021
+ ret[index2] = function formatter(payload) {
2022
+ const value = typeof payload === "object" ? payload.value : payload;
2023
+ if (!label_formatter) {
2024
+ return value;
2025
+ }
2026
+ try {
2027
+ return numbro(value).format(label_formatter);
2028
+ } catch (error) {
2029
+ console.error(error);
2030
+ return value;
2031
+ }
2032
+ };
2033
+ return ret;
2034
+ }, {
2035
+ default: ({ value }) => value
2036
+ });
2037
+ const yAxisIndexMap = conf.series.reduce((ret, { yAxisIndex, name }) => {
2038
+ ret[name] = yAxisIndex;
2039
+ return ret;
2040
+ }, {});
2041
+ const series = conf.series.map((_a) => {
2042
+ var _b = _a, { y_axis_data_key, yAxisIndex, label_position, name } = _b, rest = __objRest(_b, ["y_axis_data_key", "yAxisIndex", "label_position", "name"]);
2043
+ const ret = __spreadValues({
2044
+ data: data.map((d) => d[y_axis_data_key]),
2045
+ label: {
2046
+ show: !!label_position,
2047
+ position: label_position,
2048
+ formatter: labelFormatters[yAxisIndex != null ? yAxisIndex : "default"]
2049
+ },
2050
+ name,
2051
+ xAxisId: "main-x-axis",
2052
+ yAxisIndex
2053
+ }, rest);
2054
+ return ret;
2055
+ });
2056
+ const { regressionDataSets, regressionSeries, regressionXAxes } = getRegressionConfs(conf, data);
2057
+ const customOptions = {
2058
+ xAxis: [
2059
+ {
779
2060
  data: data.map((d) => d[conf.x_axis_data_key]),
780
- name: (_c = conf.x_axis_name) != null ? _c : ""
2061
+ name: (_c = conf.x_axis_name) != null ? _c : "",
2062
+ id: "main-x-axis"
781
2063
  },
782
- yAxis: conf.y_axes.map((_d, index2) => {
783
- var _e = _d, {
784
- label_formatter
785
- } = _e, rest = __objRest(_e, [
786
- "label_formatter"
787
- ]);
788
- var _a;
789
- return __spreadProps(__spreadValues({}, rest), {
790
- axisLabel: {
791
- show: true,
792
- formatter: (_a = labelFormatters[index2]) != null ? _a : labelFormatters.default
2064
+ ...regressionXAxes
2065
+ ],
2066
+ yAxis: conf.y_axes.map((_d, index2) => {
2067
+ var _e = _d, { label_formatter } = _e, rest = __objRest(_e, ["label_formatter"]);
2068
+ var _a;
2069
+ return __spreadProps(__spreadValues({}, rest), {
2070
+ axisLabel: {
2071
+ show: true,
2072
+ formatter: (_a = labelFormatters[index2]) != null ? _a : labelFormatters.default
2073
+ }
2074
+ });
2075
+ }),
2076
+ dataset: [
2077
+ ...regressionDataSets
2078
+ ],
2079
+ series: [
2080
+ ...series,
2081
+ ...regressionSeries
2082
+ ],
2083
+ tooltip: {
2084
+ formatter: function(params) {
2085
+ const arr = Array.isArray(params) ? params : [params];
2086
+ if (arr.length === 0) {
2087
+ return "";
2088
+ }
2089
+ const lines = arr.map(({ seriesName, value }) => {
2090
+ var _a;
2091
+ if (!seriesName) {
2092
+ return value;
793
2093
  }
2094
+ const yAxisIndex = yAxisIndexMap[seriesName];
2095
+ const formatter = (_a = labelFormatters[yAxisIndex]) != null ? _a : labelFormatters.default;
2096
+ return `${seriesName}: ${formatter({ value })}`;
794
2097
  });
795
- }),
796
- dataset: {
797
- source: data
798
- },
799
- series,
800
- tooltip: {
801
- formatter: function(params) {
802
- const arr = Array.isArray(params) ? params : [params];
803
- if (arr.length === 0) {
804
- return "";
805
- }
806
- const lines = arr.map(({
807
- seriesName,
808
- value
809
- }) => {
810
- var _a;
811
- if (!seriesName) {
812
- return value;
813
- }
814
- const yAxisIndex = yAxisIndexMap[seriesName];
815
- const formatter = (_a = labelFormatters[yAxisIndex]) != null ? _a : labelFormatters.default;
816
- return `${seriesName}: ${formatter({
817
- value
818
- })}`;
819
- });
820
- lines.unshift(`<strong>${arr[0].name}</strong>`);
821
- return lines.join("<br />");
822
- }
2098
+ lines.unshift(`<strong>${arr[0].name}</strong>`);
2099
+ return lines.join("<br />");
823
2100
  }
824
- };
825
- return _.merge({}, defaultOption$1, customOptions);
2101
+ }
2102
+ };
2103
+ return _.merge({}, defaultOption$1, customOptions);
2104
+ }
2105
+ echarts.use([BarChart, LineChart, ScatterChart, GridComponent, LegendComponent, TooltipComponent, CanvasRenderer]);
2106
+ echarts.registerTransform(echartsStat.transform.regression);
2107
+ function VizCartesianChart({
2108
+ conf,
2109
+ data,
2110
+ width,
2111
+ height
2112
+ }) {
2113
+ const option = React.useMemo(() => {
2114
+ return getOption(conf, data);
826
2115
  }, [conf, data]);
827
2116
  if (!width || !height) {
828
2117
  return null;
@@ -1610,7 +2899,6 @@ function renderViz(width, height, data, viz) {
1610
2899
  switch (viz.type) {
1611
2900
  case "sunburst":
1612
2901
  return /* @__PURE__ */ jsx(Sunbrust, __spreadValues({}, props));
1613
- case "line-bar":
1614
2902
  case "cartesian":
1615
2903
  return /* @__PURE__ */ jsx(VizCartesianChart, __spreadValues({}, props));
1616
2904
  case "table":
@@ -2285,11 +3573,7 @@ function SeriesField({
2285
3573
  return /* @__PURE__ */ jsxs(Group, {
2286
3574
  direction: "column",
2287
3575
  grow: true,
2288
- children: [/* @__PURE__ */ jsx(Text, {
2289
- mt: "xl",
2290
- mb: 0,
2291
- children: "Series"
2292
- }), controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
3576
+ children: [controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
2293
3577
  control,
2294
3578
  index: index2,
2295
3579
  remove,
@@ -2450,11 +3734,7 @@ function YAxesField({
2450
3734
  return /* @__PURE__ */ jsxs(Group, {
2451
3735
  direction: "column",
2452
3736
  grow: true,
2453
- children: [/* @__PURE__ */ jsx(Text, {
2454
- mt: "xl",
2455
- mb: 0,
2456
- children: "Y Axes"
2457
- }), controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
3737
+ children: [controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
2458
3738
  control,
2459
3739
  index: index2,
2460
3740
  remove
@@ -2468,6 +3748,220 @@ function YAxesField({
2468
3748
  })]
2469
3749
  });
2470
3750
  }
3751
+ const regressionOptions = [{
3752
+ label: "Linear",
3753
+ value: "linear"
3754
+ }, {
3755
+ label: "Exponential",
3756
+ value: "exponential"
3757
+ }, {
3758
+ label: "Logarithmic",
3759
+ value: "logarithmic"
3760
+ }, {
3761
+ label: "Polynomial",
3762
+ value: "polynomial"
3763
+ }];
3764
+ function RegressionField({
3765
+ control,
3766
+ regressionItem,
3767
+ index: index2,
3768
+ remove,
3769
+ yAxisOptions,
3770
+ data
3771
+ }) {
3772
+ const method = regressionItem.transform.config.method;
3773
+ return /* @__PURE__ */ jsxs(Group, {
3774
+ direction: "column",
3775
+ grow: true,
3776
+ my: 0,
3777
+ p: "md",
3778
+ pr: 40,
3779
+ sx: {
3780
+ border: "1px solid #eee",
3781
+ position: "relative"
3782
+ },
3783
+ children: [/* @__PURE__ */ jsx(Controller, {
3784
+ name: `regressions.${index2}.name`,
3785
+ control,
3786
+ render: ({
3787
+ field
3788
+ }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
3789
+ label: "Name",
3790
+ required: true,
3791
+ sx: {
3792
+ flex: 1
3793
+ }
3794
+ }, field))
3795
+ }), /* @__PURE__ */ jsxs(Group, {
3796
+ direction: "row",
3797
+ grow: true,
3798
+ noWrap: true,
3799
+ children: [/* @__PURE__ */ jsx(Controller, {
3800
+ name: `regressions.${index2}.y_axis_data_key`,
3801
+ control,
3802
+ render: ({
3803
+ field
3804
+ }) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
3805
+ label: "Value Field",
3806
+ required: true,
3807
+ data,
3808
+ sx: {
3809
+ flex: 1
3810
+ }
3811
+ }, field))
3812
+ }), /* @__PURE__ */ jsx(Controller, {
3813
+ name: `regressions.${index2}.plot.yAxisIndex`,
3814
+ control,
3815
+ render: (_a) => {
3816
+ var {
3817
+ field: _b
3818
+ } = _a, _c = _b, {
3819
+ value,
3820
+ onChange
3821
+ } = _c, rest = __objRest(_c, [
3822
+ "value",
3823
+ "onChange"
3824
+ ]);
3825
+ var _a2;
3826
+ return /* @__PURE__ */ jsx(Select, __spreadProps(__spreadValues({
3827
+ label: "Y Axis",
3828
+ data: yAxisOptions,
3829
+ disabled: yAxisOptions.length === 0
3830
+ }, rest), {
3831
+ value: (_a2 = value == null ? void 0 : value.toString()) != null ? _a2 : "",
3832
+ onChange: (value2) => {
3833
+ if (!value2) {
3834
+ onChange(0);
3835
+ return;
3836
+ }
3837
+ onChange(Number(value2));
3838
+ },
3839
+ sx: {
3840
+ flex: 1
3841
+ }
3842
+ }));
3843
+ }
3844
+ })]
3845
+ }), /* @__PURE__ */ jsxs(Group, {
3846
+ direction: "row",
3847
+ grow: true,
3848
+ noWrap: true,
3849
+ children: [/* @__PURE__ */ jsx(Controller, {
3850
+ name: `regressions.${index2}.transform.config.method`,
3851
+ control,
3852
+ render: ({
3853
+ field
3854
+ }) => /* @__PURE__ */ jsx(Select, __spreadValues({
3855
+ label: "Method",
3856
+ data: regressionOptions,
3857
+ sx: {
3858
+ flex: 1
3859
+ }
3860
+ }, field))
3861
+ }), method === "polynomial" && /* @__PURE__ */ jsx(Controller, {
3862
+ name: `regressions.${index2}.transform.config.order`,
3863
+ control,
3864
+ render: ({
3865
+ field
3866
+ }) => /* @__PURE__ */ jsx(NumberInput, __spreadValues({
3867
+ label: "Order",
3868
+ sx: {
3869
+ flex: 1
3870
+ }
3871
+ }, field))
3872
+ })]
3873
+ }), /* @__PURE__ */ jsxs(Group, {
3874
+ direction: "column",
3875
+ grow: true,
3876
+ spacing: 4,
3877
+ children: [/* @__PURE__ */ jsx(Text, {
3878
+ size: "sm",
3879
+ children: "Color"
3880
+ }), /* @__PURE__ */ jsx(Controller, {
3881
+ name: `regressions.${index2}.plot.color`,
3882
+ control,
3883
+ render: ({
3884
+ field
3885
+ }) => /* @__PURE__ */ jsx(MantineColorSelector, __spreadValues({}, field))
3886
+ })]
3887
+ }), /* @__PURE__ */ jsx(ActionIcon, {
3888
+ color: "red",
3889
+ variant: "hover",
3890
+ onClick: () => remove(index2),
3891
+ sx: {
3892
+ position: "absolute",
3893
+ top: 15,
3894
+ right: 5
3895
+ },
3896
+ children: /* @__PURE__ */ jsx(Trash, {
3897
+ size: 16
3898
+ })
3899
+ })]
3900
+ }, index2);
3901
+ }
3902
+ function RegressionsField({
3903
+ control,
3904
+ watch,
3905
+ getValues,
3906
+ data
3907
+ }) {
3908
+ const {
3909
+ fields,
3910
+ append,
3911
+ remove
3912
+ } = useFieldArray({
3913
+ control,
3914
+ name: "regressions"
3915
+ });
3916
+ const watchFieldArray = watch("regressions");
3917
+ const controlledFields = fields.map((field, index2) => {
3918
+ return __spreadValues(__spreadValues({}, field), watchFieldArray[index2]);
3919
+ });
3920
+ const yAxisOptions = React.useMemo(() => {
3921
+ return getValues().y_axes.map(({
3922
+ name
3923
+ }, index2) => ({
3924
+ label: name,
3925
+ value: index2.toString()
3926
+ }));
3927
+ }, [getValues]);
3928
+ const add = () => append({
3929
+ transform: {
3930
+ type: "ecStat:regression",
3931
+ config: {
3932
+ method: "linear",
3933
+ order: 1,
3934
+ formulaOn: "end"
3935
+ }
3936
+ },
3937
+ name: "",
3938
+ y_axis_data_key: "",
3939
+ plot: {
3940
+ type: "line",
3941
+ yAxisIndex: 0,
3942
+ color: "#666666"
3943
+ }
3944
+ });
3945
+ return /* @__PURE__ */ jsxs(Group, {
3946
+ direction: "column",
3947
+ grow: true,
3948
+ children: [controlledFields.map((regressionItem, index2) => /* @__PURE__ */ jsx(RegressionField, {
3949
+ regressionItem,
3950
+ control,
3951
+ index: index2,
3952
+ remove,
3953
+ yAxisOptions,
3954
+ data
3955
+ })), /* @__PURE__ */ jsx(Group, {
3956
+ position: "center",
3957
+ mt: "xs",
3958
+ children: /* @__PURE__ */ jsx(Button, {
3959
+ onClick: add,
3960
+ children: "Add a Regression Line"
3961
+ })
3962
+ })]
3963
+ });
3964
+ }
2471
3965
  function withDefaults(series) {
2472
3966
  function setDefaults({
2473
3967
  type,
@@ -2541,6 +4035,7 @@ function VizCartesianChartPanel({
2541
4035
  } = useForm({
2542
4036
  defaultValues
2543
4037
  });
4038
+ watch(["x_axis_data_key", "x_axis_name"]);
2544
4039
  const values = getValues();
2545
4040
  const changed = React.useMemo(() => {
2546
4041
  return !_.isEqual(values, conf);
@@ -2553,10 +4048,12 @@ function VizCartesianChartPanel({
2553
4048
  children: /* @__PURE__ */ jsxs("form", {
2554
4049
  onSubmit: handleSubmit(setConf),
2555
4050
  children: [/* @__PURE__ */ jsxs(Group, {
2556
- position: "apart",
2557
- mb: "lg",
4051
+ position: "left",
4052
+ py: "md",
4053
+ pl: "md",
2558
4054
  sx: {
2559
- position: "relative"
4055
+ borderBottom: "1px solid #eee",
4056
+ background: "#efefef"
2560
4057
  },
2561
4058
  children: [/* @__PURE__ */ jsx(Text, {
2562
4059
  children: "Chart Config"
@@ -2570,41 +4067,68 @@ function VizCartesianChartPanel({
2570
4067
  size: 20
2571
4068
  })
2572
4069
  })]
2573
- }), /* @__PURE__ */ jsxs(Group, {
2574
- direction: "column",
2575
- grow: true,
2576
- noWrap: true,
2577
- mb: "lg",
2578
- children: [/* @__PURE__ */ jsx(Controller, {
2579
- name: "x_axis_data_key",
2580
- control,
2581
- render: ({
2582
- field
2583
- }) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
2584
- label: "X Axis Data Field",
2585
- required: true,
2586
- data,
2587
- sx: {
2588
- flex: 1
2589
- }
2590
- }, field))
2591
- }), /* @__PURE__ */ jsx(Controller, {
2592
- name: "x_axis_name",
2593
- control,
2594
- render: ({
2595
- field
2596
- }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
2597
- label: "X Axis Name"
2598
- }, field))
4070
+ }), /* @__PURE__ */ jsxs(Accordion, {
4071
+ offsetIcon: false,
4072
+ multiple: true,
4073
+ initialState: {
4074
+ 0: true,
4075
+ 1: true
4076
+ },
4077
+ children: [/* @__PURE__ */ jsx(Accordion.Item, {
4078
+ label: "X Axis",
4079
+ children: /* @__PURE__ */ jsxs(Group, {
4080
+ direction: "row",
4081
+ grow: true,
4082
+ noWrap: true,
4083
+ children: [/* @__PURE__ */ jsx(Controller, {
4084
+ name: "x_axis_data_key",
4085
+ control,
4086
+ render: ({
4087
+ field
4088
+ }) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
4089
+ label: "X Axis Data Field",
4090
+ required: true,
4091
+ data,
4092
+ sx: {
4093
+ flex: 1
4094
+ }
4095
+ }, field))
4096
+ }), /* @__PURE__ */ jsx(Controller, {
4097
+ name: "x_axis_name",
4098
+ control,
4099
+ render: ({
4100
+ field
4101
+ }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
4102
+ label: "X Axis Name",
4103
+ sx: {
4104
+ flex: 1
4105
+ }
4106
+ }, field))
4107
+ })]
4108
+ })
4109
+ }), /* @__PURE__ */ jsx(Accordion.Item, {
4110
+ label: "Y Axes",
4111
+ children: /* @__PURE__ */ jsx(YAxesField, {
4112
+ control,
4113
+ watch
4114
+ })
4115
+ }), /* @__PURE__ */ jsx(Accordion.Item, {
4116
+ label: "Series",
4117
+ children: /* @__PURE__ */ jsx(SeriesField, {
4118
+ control,
4119
+ watch,
4120
+ getValues,
4121
+ data
4122
+ })
4123
+ }), /* @__PURE__ */ jsx(Accordion.Item, {
4124
+ label: "Regression Lines",
4125
+ children: /* @__PURE__ */ jsx(RegressionsField, {
4126
+ control,
4127
+ watch,
4128
+ getValues,
4129
+ data
4130
+ })
2599
4131
  })]
2600
- }), /* @__PURE__ */ jsx(YAxesField, {
2601
- control,
2602
- watch
2603
- }), /* @__PURE__ */ jsx(SeriesField, {
2604
- control,
2605
- watch,
2606
- getValues,
2607
- data
2608
4132
  })]
2609
4133
  })
2610
4134
  });