@devtable/dashboard 1.19.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.
- package/dist/dashboard.es.js +1840 -193
- package/dist/dashboard.umd.js +8 -8
- package/dist/panel/viz/cartesian/index.d.ts +2 -1
- package/dist/panel/viz/cartesian/option/regression.d.ts +20 -0
- package/dist/panel/viz/cartesian/panel/regressions/index.d.ts +11 -0
- package/dist/panel/viz/cartesian/panel/regressions/regression-item.d.ts +16 -0
- package/dist/panel/viz/cartesian/panel/series/fields.bar.d.ts +9 -0
- package/dist/panel/viz/cartesian/panel/series/fields.line.d.ts +9 -0
- package/dist/panel/viz/cartesian/panel/series/fields.scatter.d.ts +9 -0
- package/dist/panel/viz/cartesian/panel/{series.d.ts → series/index.d.ts} +1 -1
- package/dist/panel/viz/cartesian/panel/series/series-item.d.ts +16 -0
- package/dist/panel/viz/cartesian/type.d.ts +4 -1
- package/package.json +2 -1
- package/dist/panel/viz/bar-3d/type.d.ts +0 -4
package/dist/dashboard.es.js
CHANGED
|
@@ -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,
|
|
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";
|
|
@@ -44,7 +44,7 @@ import RichTextEditor, { RichTextEditor as RichTextEditor$1 } from "@mantine/rte
|
|
|
44
44
|
import { useInputState, useElementSize, randomId } from "@mantine/hooks";
|
|
45
45
|
import ReactEChartsCore from "echarts-for-react/lib/core";
|
|
46
46
|
import * as echarts from "echarts/core";
|
|
47
|
-
import { SunburstChart, BarChart, LineChart, PieChart } from "echarts/charts";
|
|
47
|
+
import { SunburstChart, BarChart, LineChart, ScatterChart, PieChart } from "echarts/charts";
|
|
48
48
|
import { CanvasRenderer } from "echarts/renderers";
|
|
49
49
|
import { GridComponent, LegendComponent, TooltipComponent, VisualMapComponent } from "echarts/components";
|
|
50
50
|
import numbro from "numbro";
|
|
@@ -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
|
-
|
|
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,6 +2015,95 @@ const defaultOption$1 = {
|
|
|
714
2015
|
containLabel: true
|
|
715
2016
|
}
|
|
716
2017
|
};
|
|
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
|
+
{
|
|
2060
|
+
data: data.map((d) => d[conf.x_axis_data_key]),
|
|
2061
|
+
name: (_c = conf.x_axis_name) != null ? _c : "",
|
|
2062
|
+
id: "main-x-axis"
|
|
2063
|
+
},
|
|
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;
|
|
2093
|
+
}
|
|
2094
|
+
const yAxisIndex = yAxisIndexMap[seriesName];
|
|
2095
|
+
const formatter = (_a = labelFormatters[yAxisIndex]) != null ? _a : labelFormatters.default;
|
|
2096
|
+
return `${seriesName}: ${formatter({ value })}`;
|
|
2097
|
+
});
|
|
2098
|
+
lines.unshift(`<strong>${arr[0].name}</strong>`);
|
|
2099
|
+
return lines.join("<br />");
|
|
2100
|
+
}
|
|
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);
|
|
717
2107
|
function VizCartesianChart({
|
|
718
2108
|
conf,
|
|
719
2109
|
data,
|
|
@@ -721,108 +2111,7 @@ function VizCartesianChart({
|
|
|
721
2111
|
height
|
|
722
2112
|
}) {
|
|
723
2113
|
const option = React.useMemo(() => {
|
|
724
|
-
|
|
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: {
|
|
779
|
-
data: data.map((d) => d[conf.x_axis_data_key]),
|
|
780
|
-
name: (_c = conf.x_axis_name) != null ? _c : ""
|
|
781
|
-
},
|
|
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
|
|
793
|
-
}
|
|
794
|
-
});
|
|
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
|
-
}
|
|
823
|
-
}
|
|
824
|
-
};
|
|
825
|
-
return _.merge({}, defaultOption$1, customOptions);
|
|
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":
|
|
@@ -1913,6 +3201,139 @@ function _MantineColorSelector({
|
|
|
1913
3201
|
});
|
|
1914
3202
|
}
|
|
1915
3203
|
const MantineColorSelector = React.forwardRef(_MantineColorSelector);
|
|
3204
|
+
function BarFields({
|
|
3205
|
+
control,
|
|
3206
|
+
index: index2
|
|
3207
|
+
}) {
|
|
3208
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
3209
|
+
direction: "row",
|
|
3210
|
+
grow: true,
|
|
3211
|
+
align: "top",
|
|
3212
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3213
|
+
name: `series.${index2}.stack`,
|
|
3214
|
+
control,
|
|
3215
|
+
render: ({
|
|
3216
|
+
field
|
|
3217
|
+
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
3218
|
+
label: "Stack",
|
|
3219
|
+
placeholder: "Stack bars by this ID",
|
|
3220
|
+
sx: {
|
|
3221
|
+
flexGrow: 1
|
|
3222
|
+
}
|
|
3223
|
+
}, field))
|
|
3224
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
3225
|
+
name: `series.${index2}.barWidth`,
|
|
3226
|
+
control,
|
|
3227
|
+
render: ({
|
|
3228
|
+
field
|
|
3229
|
+
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
3230
|
+
label: "Bar Width",
|
|
3231
|
+
sx: {
|
|
3232
|
+
flexGrow: 1
|
|
3233
|
+
}
|
|
3234
|
+
}, field))
|
|
3235
|
+
})]
|
|
3236
|
+
});
|
|
3237
|
+
}
|
|
3238
|
+
const stepOptions = [{
|
|
3239
|
+
label: "off",
|
|
3240
|
+
value: "false"
|
|
3241
|
+
}, {
|
|
3242
|
+
label: "start",
|
|
3243
|
+
value: "start"
|
|
3244
|
+
}, {
|
|
3245
|
+
label: "middle",
|
|
3246
|
+
value: "middle"
|
|
3247
|
+
}, {
|
|
3248
|
+
label: "end",
|
|
3249
|
+
value: "end"
|
|
3250
|
+
}];
|
|
3251
|
+
function LineFields({
|
|
3252
|
+
control,
|
|
3253
|
+
index: index2
|
|
3254
|
+
}) {
|
|
3255
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
3256
|
+
direction: "row",
|
|
3257
|
+
grow: true,
|
|
3258
|
+
align: "center",
|
|
3259
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3260
|
+
name: `series.${index2}.step`,
|
|
3261
|
+
control,
|
|
3262
|
+
render: ({
|
|
3263
|
+
field
|
|
3264
|
+
}) => /* @__PURE__ */ jsx(Select, __spreadProps(__spreadValues({
|
|
3265
|
+
label: "Step",
|
|
3266
|
+
data: stepOptions,
|
|
3267
|
+
sx: {
|
|
3268
|
+
flexGrow: 1,
|
|
3269
|
+
maxWidth: "48%"
|
|
3270
|
+
}
|
|
3271
|
+
}, field), {
|
|
3272
|
+
value: String(field.value),
|
|
3273
|
+
onChange: (v) => {
|
|
3274
|
+
const step = v === "false" ? false : v;
|
|
3275
|
+
field.onChange(step);
|
|
3276
|
+
}
|
|
3277
|
+
}))
|
|
3278
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
3279
|
+
name: `series.${index2}.smooth`,
|
|
3280
|
+
control,
|
|
3281
|
+
render: ({
|
|
3282
|
+
field
|
|
3283
|
+
}) => /* @__PURE__ */ jsx(Box, {
|
|
3284
|
+
sx: {
|
|
3285
|
+
flexGrow: 1
|
|
3286
|
+
},
|
|
3287
|
+
children: /* @__PURE__ */ jsx(Switch, {
|
|
3288
|
+
label: "Smooth Line",
|
|
3289
|
+
checked: field.value,
|
|
3290
|
+
onChange: (event) => field.onChange(event.currentTarget.checked)
|
|
3291
|
+
})
|
|
3292
|
+
})
|
|
3293
|
+
})]
|
|
3294
|
+
});
|
|
3295
|
+
}
|
|
3296
|
+
const symbolSizeOptions = Array.from(new Array(9), (_2, i) => ({
|
|
3297
|
+
label: String(i + 1),
|
|
3298
|
+
value: i + 1
|
|
3299
|
+
}));
|
|
3300
|
+
function ScatterFields({
|
|
3301
|
+
control,
|
|
3302
|
+
index: index2
|
|
3303
|
+
}) {
|
|
3304
|
+
return /* @__PURE__ */ jsx(Group, {
|
|
3305
|
+
direction: "row",
|
|
3306
|
+
grow: true,
|
|
3307
|
+
align: "center",
|
|
3308
|
+
children: /* @__PURE__ */ jsx(Controller, {
|
|
3309
|
+
name: `series.${index2}.symbolSize`,
|
|
3310
|
+
control,
|
|
3311
|
+
render: ({
|
|
3312
|
+
field
|
|
3313
|
+
}) => /* @__PURE__ */ jsxs(Group, {
|
|
3314
|
+
direction: "column",
|
|
3315
|
+
noWrap: true,
|
|
3316
|
+
sx: {
|
|
3317
|
+
flexGrow: 1
|
|
3318
|
+
},
|
|
3319
|
+
pb: 16,
|
|
3320
|
+
spacing: 4,
|
|
3321
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
3322
|
+
size: "sm",
|
|
3323
|
+
children: "Size"
|
|
3324
|
+
}), /* @__PURE__ */ jsx(Slider, __spreadProps(__spreadValues({
|
|
3325
|
+
min: 1,
|
|
3326
|
+
max: 10,
|
|
3327
|
+
marks: symbolSizeOptions
|
|
3328
|
+
}, field), {
|
|
3329
|
+
sx: {
|
|
3330
|
+
width: "100%"
|
|
3331
|
+
}
|
|
3332
|
+
}))]
|
|
3333
|
+
})
|
|
3334
|
+
})
|
|
3335
|
+
});
|
|
3336
|
+
}
|
|
1916
3337
|
const labelPositions = [{
|
|
1917
3338
|
label: "off",
|
|
1918
3339
|
value: ""
|
|
@@ -1993,8 +3414,7 @@ function SeriesItemField({
|
|
|
1993
3414
|
value: "bar"
|
|
1994
3415
|
}, {
|
|
1995
3416
|
label: "Scatter",
|
|
1996
|
-
value: "scatter"
|
|
1997
|
-
disabled: true
|
|
3417
|
+
value: "scatter"
|
|
1998
3418
|
}, {
|
|
1999
3419
|
label: "Boxplot",
|
|
2000
3420
|
value: "boxplot",
|
|
@@ -2061,37 +3481,18 @@ function SeriesItemField({
|
|
|
2061
3481
|
sx: {
|
|
2062
3482
|
flex: 1
|
|
2063
3483
|
}
|
|
2064
|
-
}));
|
|
2065
|
-
}
|
|
2066
|
-
})]
|
|
2067
|
-
}), type === "bar" && /* @__PURE__ */ jsxs(Group, {
|
|
2068
|
-
direction: "row",
|
|
2069
|
-
grow: true,
|
|
2070
|
-
align: "top",
|
|
2071
|
-
children: [/* @__PURE__ */ jsx(Controller, {
|
|
2072
|
-
name: `series.${index2}.stack`,
|
|
2073
|
-
control,
|
|
2074
|
-
render: ({
|
|
2075
|
-
field
|
|
2076
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
2077
|
-
label: "Stack",
|
|
2078
|
-
placeholder: "Stack bars by this ID",
|
|
2079
|
-
sx: {
|
|
2080
|
-
flexGrow: 1
|
|
2081
|
-
}
|
|
2082
|
-
}, field))
|
|
2083
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
2084
|
-
name: `series.${index2}.barWidth`,
|
|
2085
|
-
control,
|
|
2086
|
-
render: ({
|
|
2087
|
-
field
|
|
2088
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
2089
|
-
label: "Bar Width",
|
|
2090
|
-
sx: {
|
|
2091
|
-
flexGrow: 1
|
|
2092
|
-
}
|
|
2093
|
-
}, field))
|
|
3484
|
+
}));
|
|
3485
|
+
}
|
|
2094
3486
|
})]
|
|
3487
|
+
}), type === "line" && /* @__PURE__ */ jsx(LineFields, {
|
|
3488
|
+
index: index2,
|
|
3489
|
+
control
|
|
3490
|
+
}), type === "bar" && /* @__PURE__ */ jsx(BarFields, {
|
|
3491
|
+
index: index2,
|
|
3492
|
+
control
|
|
3493
|
+
}), type === "scatter" && /* @__PURE__ */ jsx(ScatterFields, {
|
|
3494
|
+
index: index2,
|
|
3495
|
+
control
|
|
2095
3496
|
}), /* @__PURE__ */ jsx(Controller, {
|
|
2096
3497
|
name: `series.${index2}.label_position`,
|
|
2097
3498
|
control,
|
|
@@ -2144,7 +3545,7 @@ function SeriesField({
|
|
|
2144
3545
|
control,
|
|
2145
3546
|
name: "series"
|
|
2146
3547
|
});
|
|
2147
|
-
const watchFieldArray = watch("
|
|
3548
|
+
const watchFieldArray = watch("series");
|
|
2148
3549
|
const controlledFields = fields.map((field, index2) => {
|
|
2149
3550
|
return __spreadValues(__spreadValues({}, field), watchFieldArray[index2]);
|
|
2150
3551
|
});
|
|
@@ -2152,11 +3553,14 @@ function SeriesField({
|
|
|
2152
3553
|
type: "bar",
|
|
2153
3554
|
name: randomId(),
|
|
2154
3555
|
showSymbol: false,
|
|
3556
|
+
symbolSize: 5,
|
|
2155
3557
|
y_axis_data_key: "value",
|
|
2156
3558
|
yAxisIndex: 0,
|
|
2157
3559
|
label_position: "top",
|
|
2158
3560
|
stack: "",
|
|
2159
|
-
color: "#000"
|
|
3561
|
+
color: "#000",
|
|
3562
|
+
step: false,
|
|
3563
|
+
smooth: false
|
|
2160
3564
|
});
|
|
2161
3565
|
const yAxisOptions = React.useMemo(() => {
|
|
2162
3566
|
return getValues().y_axes.map(({
|
|
@@ -2169,11 +3573,7 @@ function SeriesField({
|
|
|
2169
3573
|
return /* @__PURE__ */ jsxs(Group, {
|
|
2170
3574
|
direction: "column",
|
|
2171
3575
|
grow: true,
|
|
2172
|
-
children: [/* @__PURE__ */ jsx(
|
|
2173
|
-
mt: "xl",
|
|
2174
|
-
mb: 0,
|
|
2175
|
-
children: "Series"
|
|
2176
|
-
}), controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
|
|
3576
|
+
children: [controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
|
|
2177
3577
|
control,
|
|
2178
3578
|
index: index2,
|
|
2179
3579
|
remove,
|
|
@@ -2334,11 +3734,7 @@ function YAxesField({
|
|
|
2334
3734
|
return /* @__PURE__ */ jsxs(Group, {
|
|
2335
3735
|
direction: "column",
|
|
2336
3736
|
grow: true,
|
|
2337
|
-
children: [/* @__PURE__ */ jsx(
|
|
2338
|
-
mt: "xl",
|
|
2339
|
-
mb: 0,
|
|
2340
|
-
children: "Y Axes"
|
|
2341
|
-
}), controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
|
|
3737
|
+
children: [controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
|
|
2342
3738
|
control,
|
|
2343
3739
|
index: index2,
|
|
2344
3740
|
remove
|
|
@@ -2352,28 +3748,248 @@ function YAxesField({
|
|
|
2352
3748
|
})]
|
|
2353
3749
|
});
|
|
2354
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
|
+
}
|
|
2355
3965
|
function withDefaults(series) {
|
|
2356
3966
|
function setDefaults({
|
|
2357
3967
|
type,
|
|
2358
3968
|
name,
|
|
2359
3969
|
showSymbol,
|
|
3970
|
+
symbolSize = 5,
|
|
2360
3971
|
y_axis_data_key = "value",
|
|
2361
3972
|
yAxisIndex = 0,
|
|
2362
3973
|
label_position = "top",
|
|
2363
3974
|
stack = "1",
|
|
2364
3975
|
color: color2 = "black",
|
|
2365
|
-
barWidth = "30"
|
|
3976
|
+
barWidth = "30",
|
|
3977
|
+
smooth = false,
|
|
3978
|
+
step = false
|
|
2366
3979
|
}) {
|
|
2367
3980
|
return {
|
|
2368
3981
|
type,
|
|
2369
3982
|
name,
|
|
2370
3983
|
showSymbol,
|
|
3984
|
+
symbolSize,
|
|
2371
3985
|
y_axis_data_key,
|
|
2372
3986
|
yAxisIndex,
|
|
2373
3987
|
label_position,
|
|
2374
3988
|
stack,
|
|
2375
3989
|
color: color2,
|
|
2376
|
-
barWidth
|
|
3990
|
+
barWidth,
|
|
3991
|
+
smooth,
|
|
3992
|
+
step
|
|
2377
3993
|
};
|
|
2378
3994
|
}
|
|
2379
3995
|
return series.map(setDefaults);
|
|
@@ -2415,13 +4031,15 @@ function VizCartesianChartPanel({
|
|
|
2415
4031
|
control,
|
|
2416
4032
|
handleSubmit,
|
|
2417
4033
|
watch,
|
|
2418
|
-
formState: {
|
|
2419
|
-
isDirty
|
|
2420
|
-
},
|
|
2421
4034
|
getValues
|
|
2422
4035
|
} = useForm({
|
|
2423
4036
|
defaultValues
|
|
2424
4037
|
});
|
|
4038
|
+
watch(["x_axis_data_key", "x_axis_name"]);
|
|
4039
|
+
const values = getValues();
|
|
4040
|
+
const changed = React.useMemo(() => {
|
|
4041
|
+
return !_.isEqual(values, conf);
|
|
4042
|
+
}, [values, conf]);
|
|
2425
4043
|
return /* @__PURE__ */ jsx(Group, {
|
|
2426
4044
|
direction: "column",
|
|
2427
4045
|
mt: "md",
|
|
@@ -2430,10 +4048,12 @@ function VizCartesianChartPanel({
|
|
|
2430
4048
|
children: /* @__PURE__ */ jsxs("form", {
|
|
2431
4049
|
onSubmit: handleSubmit(setConf),
|
|
2432
4050
|
children: [/* @__PURE__ */ jsxs(Group, {
|
|
2433
|
-
position: "
|
|
2434
|
-
|
|
4051
|
+
position: "left",
|
|
4052
|
+
py: "md",
|
|
4053
|
+
pl: "md",
|
|
2435
4054
|
sx: {
|
|
2436
|
-
|
|
4055
|
+
borderBottom: "1px solid #eee",
|
|
4056
|
+
background: "#efefef"
|
|
2437
4057
|
},
|
|
2438
4058
|
children: [/* @__PURE__ */ jsx(Text, {
|
|
2439
4059
|
children: "Chart Config"
|
|
@@ -2442,46 +4062,73 @@ function VizCartesianChartPanel({
|
|
|
2442
4062
|
mr: 5,
|
|
2443
4063
|
variant: "filled",
|
|
2444
4064
|
color: "blue",
|
|
2445
|
-
disabled: !
|
|
4065
|
+
disabled: !changed,
|
|
2446
4066
|
children: /* @__PURE__ */ jsx(DeviceFloppy, {
|
|
2447
4067
|
size: 20
|
|
2448
4068
|
})
|
|
2449
4069
|
})]
|
|
2450
|
-
}), /* @__PURE__ */ jsxs(
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
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
|
+
})
|
|
2476
4131
|
})]
|
|
2477
|
-
}), /* @__PURE__ */ jsx(YAxesField, {
|
|
2478
|
-
control,
|
|
2479
|
-
watch
|
|
2480
|
-
}), /* @__PURE__ */ jsx(SeriesField, {
|
|
2481
|
-
control,
|
|
2482
|
-
watch,
|
|
2483
|
-
getValues,
|
|
2484
|
-
data
|
|
2485
4132
|
})]
|
|
2486
4133
|
})
|
|
2487
4134
|
});
|