@devtable/dashboard 1.20.0 → 1.24.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 +2368 -448
- package/dist/dashboard.umd.js +9 -8
- package/dist/panel/settings/common/aggregation-selector.d.ts +9 -0
- 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.scatter.d.ts +9 -0
- package/dist/panel/viz/cartesian/type.d.ts +22 -1
- package/dist/panel/viz/rich-text/index.d.ts +10 -0
- package/dist/panel/viz/rich-text/panel.d.ts +3 -0
- package/dist/panel/viz/rich-text/type.d.ts +8 -0
- package/dist/panel/viz/stats/index.d.ts +1 -1
- package/dist/panel/viz/stats/panel/index.d.ts +10 -0
- package/dist/panel/viz/stats/panel/variable.d.ts +11 -0
- package/dist/panel/viz/stats/panel/variables.d.ts +10 -0
- package/dist/panel/viz/stats/update/index.d.ts +15 -0
- package/dist/utils/aggregation.d.ts +2 -0
- package/dist/utils/color-mapping.d.ts +1 -2
- package/dist/utils/template/editor.d.ts +15 -0
- package/dist/utils/template/render.d.ts +3 -0
- package/package.json +16 -15
- package/dist/panel/viz/stats/panel.d.ts +0 -3
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, Switch, SegmentedControl, NumberInput,
|
|
39
|
+
import { Popover, Tooltip, Group, Text, ActionIcon, Box, Button, TextInput, LoadingOverlay, Table, Select, useMantineTheme, ColorSwatch, Switch, Slider, SegmentedControl, NumberInput, Accordion, ColorInput, Divider, JsonInput, Modal, AppShell, Tabs, Menu, 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";
|
|
@@ -109,20 +109,20 @@ function explainSQL(sql, context, definitions) {
|
|
|
109
109
|
const APIClient = {
|
|
110
110
|
baseURL: "http://localhost:31200",
|
|
111
111
|
getRequest(method) {
|
|
112
|
-
return (url, data,
|
|
112
|
+
return (url, data, options2 = {}) => {
|
|
113
113
|
const headers = __spreadValues({
|
|
114
114
|
"X-Requested-With": "XMLHttpRequest",
|
|
115
|
-
"Content-Type":
|
|
116
|
-
},
|
|
115
|
+
"Content-Type": options2.string ? "application/x-www-form-urlencoded" : "application/json"
|
|
116
|
+
}, options2.headers);
|
|
117
117
|
const conf = {
|
|
118
118
|
baseURL: this.baseURL,
|
|
119
119
|
method,
|
|
120
120
|
url,
|
|
121
|
-
params: method === "GET" ? data :
|
|
121
|
+
params: method === "GET" ? data : options2.params,
|
|
122
122
|
headers
|
|
123
123
|
};
|
|
124
124
|
if (method === "POST") {
|
|
125
|
-
conf.data =
|
|
125
|
+
conf.data = options2.string ? JSON.stringify(data) : data;
|
|
126
126
|
}
|
|
127
127
|
return axios(conf).then((res) => {
|
|
128
128
|
return res.data;
|
|
@@ -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
|
/**
|
|
@@ -590,7 +591,7 @@ function PickQuery({}) {
|
|
|
590
591
|
data,
|
|
591
592
|
loading
|
|
592
593
|
} = React.useContext(PanelContext);
|
|
593
|
-
const
|
|
594
|
+
const options2 = React.useMemo(() => {
|
|
594
595
|
return queries.map((d) => ({
|
|
595
596
|
value: d.id,
|
|
596
597
|
label: d.id
|
|
@@ -609,7 +610,7 @@ function PickQuery({}) {
|
|
|
609
610
|
children: [/* @__PURE__ */ jsx(Text, {
|
|
610
611
|
children: "Select a Query"
|
|
611
612
|
}), /* @__PURE__ */ jsx(Select, {
|
|
612
|
-
data:
|
|
613
|
+
data: options2,
|
|
613
614
|
value: queryID,
|
|
614
615
|
onChange: setQueryID,
|
|
615
616
|
allowDeselect: false,
|
|
@@ -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 median2(data) {
|
|
1571
|
+
return quantile(data, 0.5);
|
|
1572
|
+
}
|
|
1573
|
+
return median2;
|
|
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
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
},
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
},
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
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
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
@@ -1171,6 +2460,32 @@ function VizPie({
|
|
|
1171
2460
|
}
|
|
1172
2461
|
});
|
|
1173
2462
|
}
|
|
2463
|
+
function median(numbers) {
|
|
2464
|
+
const sorted = Array.from(numbers).sort((a, b) => a - b);
|
|
2465
|
+
const middle = Math.floor(sorted.length / 2);
|
|
2466
|
+
if (sorted.length % 2 === 0) {
|
|
2467
|
+
return (sorted[middle - 1] + sorted[middle]) / 2;
|
|
2468
|
+
}
|
|
2469
|
+
return sorted[middle];
|
|
2470
|
+
}
|
|
2471
|
+
function aggregateValue(data, data_field, aggregation) {
|
|
2472
|
+
var _a, _b, _c;
|
|
2473
|
+
const numbers = data.map((d) => d[data_field]);
|
|
2474
|
+
switch (aggregation) {
|
|
2475
|
+
case "sum":
|
|
2476
|
+
return _.sum(numbers);
|
|
2477
|
+
case "mean":
|
|
2478
|
+
return _.mean(numbers);
|
|
2479
|
+
case "median":
|
|
2480
|
+
return median(numbers);
|
|
2481
|
+
case "max":
|
|
2482
|
+
return (_a = _.max(numbers)) != null ? _a : 0;
|
|
2483
|
+
case "min":
|
|
2484
|
+
return (_b = _.min(numbers)) != null ? _b : 0;
|
|
2485
|
+
default:
|
|
2486
|
+
return (_c = data[0]) == null ? void 0 : _c[data_field];
|
|
2487
|
+
}
|
|
2488
|
+
}
|
|
1174
2489
|
var invariant = function() {
|
|
1175
2490
|
};
|
|
1176
2491
|
const clamp$1 = (min, max, v) => Math.min(Math.max(v, min), max);
|
|
@@ -1537,14 +2852,12 @@ class InterpolateColor {
|
|
|
1537
2852
|
return this.mapper(value);
|
|
1538
2853
|
}
|
|
1539
2854
|
}
|
|
1540
|
-
function getColorByColorConf(conf,
|
|
2855
|
+
function getColorByColorConf(conf, value) {
|
|
1541
2856
|
if (conf.type === "static") {
|
|
1542
2857
|
return conf.staticColor;
|
|
1543
2858
|
}
|
|
1544
2859
|
if (conf.type === "continuous") {
|
|
1545
|
-
|
|
1546
|
-
const value = dataRow[conf.valueField];
|
|
1547
|
-
return mapper.getColor(value);
|
|
2860
|
+
return new InterpolateColor(conf).getColor(value);
|
|
1548
2861
|
}
|
|
1549
2862
|
return "black";
|
|
1550
2863
|
}
|
|
@@ -1560,46 +2873,108 @@ function getNonStatsDataText(data) {
|
|
|
1560
2873
|
}
|
|
1561
2874
|
return data.toString();
|
|
1562
2875
|
}
|
|
1563
|
-
function
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
2876
|
+
function variablesToElements(variables, data) {
|
|
2877
|
+
const ret = {};
|
|
2878
|
+
variables.forEach(({
|
|
2879
|
+
name,
|
|
2880
|
+
color: color2,
|
|
2881
|
+
data_field,
|
|
2882
|
+
aggregation,
|
|
1568
2883
|
size,
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
"
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
return getColorByColorConf(color2, data[0]);
|
|
1579
|
-
}, [color2, data]);
|
|
1580
|
-
const finalContent = React.useMemo(() => {
|
|
1581
|
-
var _a2;
|
|
1582
|
-
const {
|
|
1583
|
-
prefix,
|
|
1584
|
-
postfix,
|
|
1585
|
-
data_field,
|
|
1586
|
-
formatter
|
|
1587
|
-
} = content;
|
|
1588
|
-
const contentData = (_a2 = data == null ? void 0 : data[0]) == null ? void 0 : _a2[data_field];
|
|
1589
|
-
if (!["string", "number"].includes(typeof contentData)) {
|
|
1590
|
-
return getNonStatsDataText(contentData);
|
|
2884
|
+
weight,
|
|
2885
|
+
formatter
|
|
2886
|
+
}) => {
|
|
2887
|
+
const value = aggregateValue(data, data_field, aggregation);
|
|
2888
|
+
let valueContent = "";
|
|
2889
|
+
if (!["string", "number"].includes(typeof value)) {
|
|
2890
|
+
valueContent = getNonStatsDataText(value);
|
|
2891
|
+
} else {
|
|
2892
|
+
valueContent = numbro(value).format(formatter);
|
|
1591
2893
|
}
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
2894
|
+
ret[name] = /* @__PURE__ */ jsx(Text, {
|
|
2895
|
+
sx: {
|
|
2896
|
+
fontSize: size,
|
|
2897
|
+
display: "inline"
|
|
2898
|
+
},
|
|
2899
|
+
color: getColorByColorConf(color2, value),
|
|
2900
|
+
weight,
|
|
2901
|
+
children: valueContent
|
|
2902
|
+
});
|
|
2903
|
+
});
|
|
2904
|
+
return ret;
|
|
2905
|
+
}
|
|
2906
|
+
function preserveWhiteSpaces(text) {
|
|
2907
|
+
return text.split(" ").map((s) => /* @__PURE__ */ jsxs(Fragment, {
|
|
2908
|
+
children: [s, "\xA0"]
|
|
1601
2909
|
}));
|
|
1602
2910
|
}
|
|
2911
|
+
function withLineBreaks(text) {
|
|
2912
|
+
const normalized = text.replaceAll("<br />", "<br/>").replaceAll("\n", "<br/>");
|
|
2913
|
+
const splitted = normalized.split("<br/>");
|
|
2914
|
+
const ret = splitted.map((t, i) => {
|
|
2915
|
+
const arr = [preserveWhiteSpaces(t)];
|
|
2916
|
+
if (i !== splitted.length - 1) {
|
|
2917
|
+
arr.push(/* @__PURE__ */ jsx("br", {}));
|
|
2918
|
+
}
|
|
2919
|
+
return arr;
|
|
2920
|
+
}).flat().filter((t) => t !== void 0);
|
|
2921
|
+
return ret;
|
|
2922
|
+
}
|
|
2923
|
+
function textToJSX(text) {
|
|
2924
|
+
return withLineBreaks(text);
|
|
2925
|
+
}
|
|
2926
|
+
function templateToJSX(template, variables, data) {
|
|
2927
|
+
const variableElements = variablesToElements(variables, data);
|
|
2928
|
+
const regx = /^\{(.+)\}(.*)$/;
|
|
2929
|
+
return template.split("$").map((text) => {
|
|
2930
|
+
var _a;
|
|
2931
|
+
const match = regx.exec(text);
|
|
2932
|
+
if (!match) {
|
|
2933
|
+
return textToJSX(text);
|
|
2934
|
+
}
|
|
2935
|
+
const element = variableElements[match[1]];
|
|
2936
|
+
if (!element) {
|
|
2937
|
+
return textToJSX(text);
|
|
2938
|
+
}
|
|
2939
|
+
const rest = (_a = match[2]) != null ? _a : "";
|
|
2940
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
2941
|
+
children: [element, textToJSX(rest)]
|
|
2942
|
+
});
|
|
2943
|
+
});
|
|
2944
|
+
}
|
|
2945
|
+
function VizStats({
|
|
2946
|
+
conf: {
|
|
2947
|
+
template,
|
|
2948
|
+
variables,
|
|
2949
|
+
align
|
|
2950
|
+
},
|
|
2951
|
+
data
|
|
2952
|
+
}) {
|
|
2953
|
+
const contents = React.useMemo(() => {
|
|
2954
|
+
return templateToJSX(template, variables, data);
|
|
2955
|
+
}, [template, variables, data]);
|
|
2956
|
+
return /* @__PURE__ */ jsx(Text, {
|
|
2957
|
+
align,
|
|
2958
|
+
children: Object.values(contents).map((c) => c)
|
|
2959
|
+
});
|
|
2960
|
+
}
|
|
2961
|
+
function VizRichText({
|
|
2962
|
+
conf,
|
|
2963
|
+
width,
|
|
2964
|
+
height
|
|
2965
|
+
}) {
|
|
2966
|
+
if (!width || !height) {
|
|
2967
|
+
return null;
|
|
2968
|
+
}
|
|
2969
|
+
return /* @__PURE__ */ jsx(RichTextEditor, {
|
|
2970
|
+
readOnly: true,
|
|
2971
|
+
value: conf.content,
|
|
2972
|
+
onChange: _.noop,
|
|
2973
|
+
sx: {
|
|
2974
|
+
border: "none"
|
|
2975
|
+
}
|
|
2976
|
+
});
|
|
2977
|
+
}
|
|
1603
2978
|
function renderViz(width, height, data, viz) {
|
|
1604
2979
|
const props = {
|
|
1605
2980
|
width,
|
|
@@ -1610,7 +2985,6 @@ function renderViz(width, height, data, viz) {
|
|
|
1610
2985
|
switch (viz.type) {
|
|
1611
2986
|
case "sunburst":
|
|
1612
2987
|
return /* @__PURE__ */ jsx(Sunbrust, __spreadValues({}, props));
|
|
1613
|
-
case "line-bar":
|
|
1614
2988
|
case "cartesian":
|
|
1615
2989
|
return /* @__PURE__ */ jsx(VizCartesianChart, __spreadValues({}, props));
|
|
1616
2990
|
case "table":
|
|
@@ -1619,6 +2993,8 @@ function renderViz(width, height, data, viz) {
|
|
|
1619
2993
|
return /* @__PURE__ */ jsx(VizText, __spreadValues({}, props));
|
|
1620
2994
|
case "stats":
|
|
1621
2995
|
return /* @__PURE__ */ jsx(VizStats, __spreadValues({}, props));
|
|
2996
|
+
case "rich-text":
|
|
2997
|
+
return /* @__PURE__ */ jsx(VizRichText, __spreadValues({}, props));
|
|
1622
2998
|
case "bar-3d":
|
|
1623
2999
|
return /* @__PURE__ */ jsx(VizBar3D, __spreadValues({}, props));
|
|
1624
3000
|
case "pie":
|
|
@@ -1627,6 +3003,7 @@ function renderViz(width, height, data, viz) {
|
|
|
1627
3003
|
return null;
|
|
1628
3004
|
}
|
|
1629
3005
|
}
|
|
3006
|
+
const typesDontNeedData = ["rich-text"];
|
|
1630
3007
|
function Viz({
|
|
1631
3008
|
viz,
|
|
1632
3009
|
data,
|
|
@@ -1637,6 +3014,16 @@ function Viz({
|
|
|
1637
3014
|
width,
|
|
1638
3015
|
height
|
|
1639
3016
|
} = useElementSize();
|
|
3017
|
+
const needData = !typesDontNeedData.includes(viz.type);
|
|
3018
|
+
if (!needData) {
|
|
3019
|
+
return /* @__PURE__ */ jsx("div", {
|
|
3020
|
+
className: "viz-root",
|
|
3021
|
+
ref,
|
|
3022
|
+
children: /* @__PURE__ */ jsx(ErrorBoundary, {
|
|
3023
|
+
children: renderViz(width, height, data, viz)
|
|
3024
|
+
})
|
|
3025
|
+
});
|
|
3026
|
+
}
|
|
1640
3027
|
const empty = React.useMemo(() => !Array.isArray(data) || data.length === 0, [data]);
|
|
1641
3028
|
if (loading) {
|
|
1642
3029
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -1680,7 +3067,7 @@ function _DataFieldSelector({
|
|
|
1680
3067
|
data,
|
|
1681
3068
|
sx
|
|
1682
3069
|
}, ref) {
|
|
1683
|
-
const
|
|
3070
|
+
const options2 = React.useMemo(() => {
|
|
1684
3071
|
if (!Array.isArray(data) || data.length === 0) {
|
|
1685
3072
|
return [];
|
|
1686
3073
|
}
|
|
@@ -1693,7 +3080,7 @@ function _DataFieldSelector({
|
|
|
1693
3080
|
return /* @__PURE__ */ jsx(Select, {
|
|
1694
3081
|
ref,
|
|
1695
3082
|
label,
|
|
1696
|
-
data:
|
|
3083
|
+
data: options2,
|
|
1697
3084
|
value,
|
|
1698
3085
|
onChange,
|
|
1699
3086
|
required,
|
|
@@ -1876,7 +3263,7 @@ function _MantineColorSelector({
|
|
|
1876
3263
|
}, [value, themeColors]);
|
|
1877
3264
|
return /* @__PURE__ */ jsxs(Group, {
|
|
1878
3265
|
position: "apart",
|
|
1879
|
-
spacing:
|
|
3266
|
+
spacing: 4,
|
|
1880
3267
|
children: [/* @__PURE__ */ jsx(TextInput, {
|
|
1881
3268
|
placeholder: "Set any color",
|
|
1882
3269
|
value: !isThemeColor ? value : "",
|
|
@@ -1887,7 +3274,7 @@ function _MantineColorSelector({
|
|
|
1887
3274
|
}),
|
|
1888
3275
|
variant: !isThemeColor ? "default" : "filled",
|
|
1889
3276
|
sx: {
|
|
1890
|
-
maxWidth: "
|
|
3277
|
+
maxWidth: "46%",
|
|
1891
3278
|
flexGrow: 1
|
|
1892
3279
|
}
|
|
1893
3280
|
}), /* @__PURE__ */ jsx(Text, {
|
|
@@ -1906,7 +3293,7 @@ function _MantineColorSelector({
|
|
|
1906
3293
|
radius: 4
|
|
1907
3294
|
}),
|
|
1908
3295
|
sx: {
|
|
1909
|
-
maxWidth: "
|
|
3296
|
+
maxWidth: "46%",
|
|
1910
3297
|
flexGrow: 1
|
|
1911
3298
|
}
|
|
1912
3299
|
})]
|
|
@@ -2005,6 +3392,47 @@ function LineFields({
|
|
|
2005
3392
|
})]
|
|
2006
3393
|
});
|
|
2007
3394
|
}
|
|
3395
|
+
const symbolSizeOptions = Array.from(new Array(9), (_2, i) => ({
|
|
3396
|
+
label: String(i + 1),
|
|
3397
|
+
value: i + 1
|
|
3398
|
+
}));
|
|
3399
|
+
function ScatterFields({
|
|
3400
|
+
control,
|
|
3401
|
+
index: index2
|
|
3402
|
+
}) {
|
|
3403
|
+
return /* @__PURE__ */ jsx(Group, {
|
|
3404
|
+
direction: "row",
|
|
3405
|
+
grow: true,
|
|
3406
|
+
align: "center",
|
|
3407
|
+
children: /* @__PURE__ */ jsx(Controller, {
|
|
3408
|
+
name: `series.${index2}.symbolSize`,
|
|
3409
|
+
control,
|
|
3410
|
+
render: ({
|
|
3411
|
+
field
|
|
3412
|
+
}) => /* @__PURE__ */ jsxs(Group, {
|
|
3413
|
+
direction: "column",
|
|
3414
|
+
noWrap: true,
|
|
3415
|
+
sx: {
|
|
3416
|
+
flexGrow: 1
|
|
3417
|
+
},
|
|
3418
|
+
pb: 16,
|
|
3419
|
+
spacing: 4,
|
|
3420
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
3421
|
+
size: "sm",
|
|
3422
|
+
children: "Size"
|
|
3423
|
+
}), /* @__PURE__ */ jsx(Slider, __spreadProps(__spreadValues({
|
|
3424
|
+
min: 1,
|
|
3425
|
+
max: 10,
|
|
3426
|
+
marks: symbolSizeOptions
|
|
3427
|
+
}, field), {
|
|
3428
|
+
sx: {
|
|
3429
|
+
width: "100%"
|
|
3430
|
+
}
|
|
3431
|
+
}))]
|
|
3432
|
+
})
|
|
3433
|
+
})
|
|
3434
|
+
});
|
|
3435
|
+
}
|
|
2008
3436
|
const labelPositions = [{
|
|
2009
3437
|
label: "off",
|
|
2010
3438
|
value: ""
|
|
@@ -2085,8 +3513,7 @@ function SeriesItemField({
|
|
|
2085
3513
|
value: "bar"
|
|
2086
3514
|
}, {
|
|
2087
3515
|
label: "Scatter",
|
|
2088
|
-
value: "scatter"
|
|
2089
|
-
disabled: true
|
|
3516
|
+
value: "scatter"
|
|
2090
3517
|
}, {
|
|
2091
3518
|
label: "Boxplot",
|
|
2092
3519
|
value: "boxplot",
|
|
@@ -2162,6 +3589,9 @@ function SeriesItemField({
|
|
|
2162
3589
|
}), type === "bar" && /* @__PURE__ */ jsx(BarFields, {
|
|
2163
3590
|
index: index2,
|
|
2164
3591
|
control
|
|
3592
|
+
}), type === "scatter" && /* @__PURE__ */ jsx(ScatterFields, {
|
|
3593
|
+
index: index2,
|
|
3594
|
+
control
|
|
2165
3595
|
}), /* @__PURE__ */ jsx(Controller, {
|
|
2166
3596
|
name: `series.${index2}.label_position`,
|
|
2167
3597
|
control,
|
|
@@ -2222,6 +3652,7 @@ function SeriesField({
|
|
|
2222
3652
|
type: "bar",
|
|
2223
3653
|
name: randomId(),
|
|
2224
3654
|
showSymbol: false,
|
|
3655
|
+
symbolSize: 5,
|
|
2225
3656
|
y_axis_data_key: "value",
|
|
2226
3657
|
yAxisIndex: 0,
|
|
2227
3658
|
label_position: "top",
|
|
@@ -2241,11 +3672,7 @@ function SeriesField({
|
|
|
2241
3672
|
return /* @__PURE__ */ jsxs(Group, {
|
|
2242
3673
|
direction: "column",
|
|
2243
3674
|
grow: true,
|
|
2244
|
-
children: [/* @__PURE__ */ jsx(
|
|
2245
|
-
mt: "xl",
|
|
2246
|
-
mb: 0,
|
|
2247
|
-
children: "Series"
|
|
2248
|
-
}), controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
|
|
3675
|
+
children: [controlledFields.map((seriesItem, index2) => /* @__PURE__ */ jsx(SeriesItemField, {
|
|
2249
3676
|
control,
|
|
2250
3677
|
index: index2,
|
|
2251
3678
|
remove,
|
|
@@ -2399,27 +3826,237 @@ function YAxesField({
|
|
|
2399
3826
|
const controlledFields = fields.map((field, index2) => {
|
|
2400
3827
|
return __spreadValues(__spreadValues({}, field), watchFieldArray[index2]);
|
|
2401
3828
|
});
|
|
2402
|
-
const addYAxis = () => append({
|
|
3829
|
+
const addYAxis = () => append({
|
|
3830
|
+
name: "",
|
|
3831
|
+
label_formatter: defaultNumbroFormat
|
|
3832
|
+
});
|
|
3833
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
3834
|
+
direction: "column",
|
|
3835
|
+
grow: true,
|
|
3836
|
+
children: [controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
|
|
3837
|
+
control,
|
|
3838
|
+
index: index2,
|
|
3839
|
+
remove
|
|
3840
|
+
})), /* @__PURE__ */ jsx(Group, {
|
|
3841
|
+
position: "center",
|
|
3842
|
+
mt: "xs",
|
|
3843
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
3844
|
+
onClick: addYAxis,
|
|
3845
|
+
children: "Add a Y Axis"
|
|
3846
|
+
})
|
|
3847
|
+
})]
|
|
3848
|
+
});
|
|
3849
|
+
}
|
|
3850
|
+
const regressionOptions = [{
|
|
3851
|
+
label: "Linear",
|
|
3852
|
+
value: "linear"
|
|
3853
|
+
}, {
|
|
3854
|
+
label: "Exponential",
|
|
3855
|
+
value: "exponential"
|
|
3856
|
+
}, {
|
|
3857
|
+
label: "Logarithmic",
|
|
3858
|
+
value: "logarithmic"
|
|
3859
|
+
}, {
|
|
3860
|
+
label: "Polynomial",
|
|
3861
|
+
value: "polynomial"
|
|
3862
|
+
}];
|
|
3863
|
+
function RegressionField({
|
|
3864
|
+
control,
|
|
3865
|
+
regressionItem,
|
|
3866
|
+
index: index2,
|
|
3867
|
+
remove,
|
|
3868
|
+
yAxisOptions,
|
|
3869
|
+
data
|
|
3870
|
+
}) {
|
|
3871
|
+
const method = regressionItem.transform.config.method;
|
|
3872
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
3873
|
+
direction: "column",
|
|
3874
|
+
grow: true,
|
|
3875
|
+
my: 0,
|
|
3876
|
+
p: "md",
|
|
3877
|
+
pr: 40,
|
|
3878
|
+
sx: {
|
|
3879
|
+
border: "1px solid #eee",
|
|
3880
|
+
position: "relative"
|
|
3881
|
+
},
|
|
3882
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3883
|
+
name: `regressions.${index2}.name`,
|
|
3884
|
+
control,
|
|
3885
|
+
render: ({
|
|
3886
|
+
field
|
|
3887
|
+
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
3888
|
+
label: "Name",
|
|
3889
|
+
required: true,
|
|
3890
|
+
sx: {
|
|
3891
|
+
flex: 1
|
|
3892
|
+
}
|
|
3893
|
+
}, field))
|
|
3894
|
+
}), /* @__PURE__ */ jsxs(Group, {
|
|
3895
|
+
direction: "row",
|
|
3896
|
+
grow: true,
|
|
3897
|
+
noWrap: true,
|
|
3898
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3899
|
+
name: `regressions.${index2}.y_axis_data_key`,
|
|
3900
|
+
control,
|
|
3901
|
+
render: ({
|
|
3902
|
+
field
|
|
3903
|
+
}) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
|
|
3904
|
+
label: "Value Field",
|
|
3905
|
+
required: true,
|
|
3906
|
+
data,
|
|
3907
|
+
sx: {
|
|
3908
|
+
flex: 1
|
|
3909
|
+
}
|
|
3910
|
+
}, field))
|
|
3911
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
3912
|
+
name: `regressions.${index2}.plot.yAxisIndex`,
|
|
3913
|
+
control,
|
|
3914
|
+
render: (_a) => {
|
|
3915
|
+
var {
|
|
3916
|
+
field: _b
|
|
3917
|
+
} = _a, _c = _b, {
|
|
3918
|
+
value,
|
|
3919
|
+
onChange
|
|
3920
|
+
} = _c, rest = __objRest(_c, [
|
|
3921
|
+
"value",
|
|
3922
|
+
"onChange"
|
|
3923
|
+
]);
|
|
3924
|
+
var _a2;
|
|
3925
|
+
return /* @__PURE__ */ jsx(Select, __spreadProps(__spreadValues({
|
|
3926
|
+
label: "Y Axis",
|
|
3927
|
+
data: yAxisOptions,
|
|
3928
|
+
disabled: yAxisOptions.length === 0
|
|
3929
|
+
}, rest), {
|
|
3930
|
+
value: (_a2 = value == null ? void 0 : value.toString()) != null ? _a2 : "",
|
|
3931
|
+
onChange: (value2) => {
|
|
3932
|
+
if (!value2) {
|
|
3933
|
+
onChange(0);
|
|
3934
|
+
return;
|
|
3935
|
+
}
|
|
3936
|
+
onChange(Number(value2));
|
|
3937
|
+
},
|
|
3938
|
+
sx: {
|
|
3939
|
+
flex: 1
|
|
3940
|
+
}
|
|
3941
|
+
}));
|
|
3942
|
+
}
|
|
3943
|
+
})]
|
|
3944
|
+
}), /* @__PURE__ */ jsxs(Group, {
|
|
3945
|
+
direction: "row",
|
|
3946
|
+
grow: true,
|
|
3947
|
+
noWrap: true,
|
|
3948
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3949
|
+
name: `regressions.${index2}.transform.config.method`,
|
|
3950
|
+
control,
|
|
3951
|
+
render: ({
|
|
3952
|
+
field
|
|
3953
|
+
}) => /* @__PURE__ */ jsx(Select, __spreadValues({
|
|
3954
|
+
label: "Method",
|
|
3955
|
+
data: regressionOptions,
|
|
3956
|
+
sx: {
|
|
3957
|
+
flex: 1
|
|
3958
|
+
}
|
|
3959
|
+
}, field))
|
|
3960
|
+
}), method === "polynomial" && /* @__PURE__ */ jsx(Controller, {
|
|
3961
|
+
name: `regressions.${index2}.transform.config.order`,
|
|
3962
|
+
control,
|
|
3963
|
+
render: ({
|
|
3964
|
+
field
|
|
3965
|
+
}) => /* @__PURE__ */ jsx(NumberInput, __spreadValues({
|
|
3966
|
+
label: "Order",
|
|
3967
|
+
sx: {
|
|
3968
|
+
flex: 1
|
|
3969
|
+
}
|
|
3970
|
+
}, field))
|
|
3971
|
+
})]
|
|
3972
|
+
}), /* @__PURE__ */ jsxs(Group, {
|
|
3973
|
+
direction: "column",
|
|
3974
|
+
grow: true,
|
|
3975
|
+
spacing: 4,
|
|
3976
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
3977
|
+
size: "sm",
|
|
3978
|
+
children: "Color"
|
|
3979
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
3980
|
+
name: `regressions.${index2}.plot.color`,
|
|
3981
|
+
control,
|
|
3982
|
+
render: ({
|
|
3983
|
+
field
|
|
3984
|
+
}) => /* @__PURE__ */ jsx(MantineColorSelector, __spreadValues({}, field))
|
|
3985
|
+
})]
|
|
3986
|
+
}), /* @__PURE__ */ jsx(ActionIcon, {
|
|
3987
|
+
color: "red",
|
|
3988
|
+
variant: "hover",
|
|
3989
|
+
onClick: () => remove(index2),
|
|
3990
|
+
sx: {
|
|
3991
|
+
position: "absolute",
|
|
3992
|
+
top: 15,
|
|
3993
|
+
right: 5
|
|
3994
|
+
},
|
|
3995
|
+
children: /* @__PURE__ */ jsx(Trash, {
|
|
3996
|
+
size: 16
|
|
3997
|
+
})
|
|
3998
|
+
})]
|
|
3999
|
+
}, index2);
|
|
4000
|
+
}
|
|
4001
|
+
function RegressionsField({
|
|
4002
|
+
control,
|
|
4003
|
+
watch,
|
|
4004
|
+
getValues,
|
|
4005
|
+
data
|
|
4006
|
+
}) {
|
|
4007
|
+
const {
|
|
4008
|
+
fields,
|
|
4009
|
+
append,
|
|
4010
|
+
remove
|
|
4011
|
+
} = useFieldArray({
|
|
4012
|
+
control,
|
|
4013
|
+
name: "regressions"
|
|
4014
|
+
});
|
|
4015
|
+
const watchFieldArray = watch("regressions");
|
|
4016
|
+
const controlledFields = fields.map((field, index2) => {
|
|
4017
|
+
return __spreadValues(__spreadValues({}, field), watchFieldArray[index2]);
|
|
4018
|
+
});
|
|
4019
|
+
const yAxisOptions = React.useMemo(() => {
|
|
4020
|
+
return getValues().y_axes.map(({
|
|
4021
|
+
name
|
|
4022
|
+
}, index2) => ({
|
|
4023
|
+
label: name,
|
|
4024
|
+
value: index2.toString()
|
|
4025
|
+
}));
|
|
4026
|
+
}, [getValues]);
|
|
4027
|
+
const add = () => append({
|
|
4028
|
+
transform: {
|
|
4029
|
+
type: "ecStat:regression",
|
|
4030
|
+
config: {
|
|
4031
|
+
method: "linear",
|
|
4032
|
+
order: 1,
|
|
4033
|
+
formulaOn: "end"
|
|
4034
|
+
}
|
|
4035
|
+
},
|
|
2403
4036
|
name: "",
|
|
2404
|
-
|
|
4037
|
+
y_axis_data_key: "",
|
|
4038
|
+
plot: {
|
|
4039
|
+
type: "line",
|
|
4040
|
+
yAxisIndex: 0,
|
|
4041
|
+
color: "#666666"
|
|
4042
|
+
}
|
|
2405
4043
|
});
|
|
2406
4044
|
return /* @__PURE__ */ jsxs(Group, {
|
|
2407
4045
|
direction: "column",
|
|
2408
4046
|
grow: true,
|
|
2409
|
-
children: [/* @__PURE__ */ jsx(
|
|
2410
|
-
|
|
2411
|
-
mb: 0,
|
|
2412
|
-
children: "Y Axes"
|
|
2413
|
-
}), controlledFields.map((field, index2) => /* @__PURE__ */ jsx(YAxisField, {
|
|
4047
|
+
children: [controlledFields.map((regressionItem, index2) => /* @__PURE__ */ jsx(RegressionField, {
|
|
4048
|
+
regressionItem,
|
|
2414
4049
|
control,
|
|
2415
4050
|
index: index2,
|
|
2416
|
-
remove
|
|
4051
|
+
remove,
|
|
4052
|
+
yAxisOptions,
|
|
4053
|
+
data
|
|
2417
4054
|
})), /* @__PURE__ */ jsx(Group, {
|
|
2418
4055
|
position: "center",
|
|
2419
4056
|
mt: "xs",
|
|
2420
4057
|
children: /* @__PURE__ */ jsx(Button, {
|
|
2421
|
-
onClick:
|
|
2422
|
-
children: "Add a
|
|
4058
|
+
onClick: add,
|
|
4059
|
+
children: "Add a Regression Line"
|
|
2423
4060
|
})
|
|
2424
4061
|
})]
|
|
2425
4062
|
});
|
|
@@ -2429,6 +4066,7 @@ function withDefaults(series) {
|
|
|
2429
4066
|
type,
|
|
2430
4067
|
name,
|
|
2431
4068
|
showSymbol,
|
|
4069
|
+
symbolSize = 5,
|
|
2432
4070
|
y_axis_data_key = "value",
|
|
2433
4071
|
yAxisIndex = 0,
|
|
2434
4072
|
label_position = "top",
|
|
@@ -2442,6 +4080,7 @@ function withDefaults(series) {
|
|
|
2442
4080
|
type,
|
|
2443
4081
|
name,
|
|
2444
4082
|
showSymbol,
|
|
4083
|
+
symbolSize,
|
|
2445
4084
|
y_axis_data_key,
|
|
2446
4085
|
yAxisIndex,
|
|
2447
4086
|
label_position,
|
|
@@ -2495,6 +4134,7 @@ function VizCartesianChartPanel({
|
|
|
2495
4134
|
} = useForm({
|
|
2496
4135
|
defaultValues
|
|
2497
4136
|
});
|
|
4137
|
+
watch(["x_axis_data_key", "x_axis_name"]);
|
|
2498
4138
|
const values = getValues();
|
|
2499
4139
|
const changed = React.useMemo(() => {
|
|
2500
4140
|
return !_.isEqual(values, conf);
|
|
@@ -2507,10 +4147,12 @@ function VizCartesianChartPanel({
|
|
|
2507
4147
|
children: /* @__PURE__ */ jsxs("form", {
|
|
2508
4148
|
onSubmit: handleSubmit(setConf),
|
|
2509
4149
|
children: [/* @__PURE__ */ jsxs(Group, {
|
|
2510
|
-
position: "
|
|
2511
|
-
|
|
4150
|
+
position: "left",
|
|
4151
|
+
py: "md",
|
|
4152
|
+
pl: "md",
|
|
2512
4153
|
sx: {
|
|
2513
|
-
|
|
4154
|
+
borderBottom: "1px solid #eee",
|
|
4155
|
+
background: "#efefef"
|
|
2514
4156
|
},
|
|
2515
4157
|
children: [/* @__PURE__ */ jsx(Text, {
|
|
2516
4158
|
children: "Chart Config"
|
|
@@ -2524,41 +4166,68 @@ function VizCartesianChartPanel({
|
|
|
2524
4166
|
size: 20
|
|
2525
4167
|
})
|
|
2526
4168
|
})]
|
|
2527
|
-
}), /* @__PURE__ */ jsxs(
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
|
|
2537
|
-
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
4169
|
+
}), /* @__PURE__ */ jsxs(Accordion, {
|
|
4170
|
+
offsetIcon: false,
|
|
4171
|
+
multiple: true,
|
|
4172
|
+
initialState: {
|
|
4173
|
+
0: true,
|
|
4174
|
+
1: true
|
|
4175
|
+
},
|
|
4176
|
+
children: [/* @__PURE__ */ jsx(Accordion.Item, {
|
|
4177
|
+
label: "X Axis",
|
|
4178
|
+
children: /* @__PURE__ */ jsxs(Group, {
|
|
4179
|
+
direction: "row",
|
|
4180
|
+
grow: true,
|
|
4181
|
+
noWrap: true,
|
|
4182
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
4183
|
+
name: "x_axis_data_key",
|
|
4184
|
+
control,
|
|
4185
|
+
render: ({
|
|
4186
|
+
field
|
|
4187
|
+
}) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
|
|
4188
|
+
label: "X Axis Data Field",
|
|
4189
|
+
required: true,
|
|
4190
|
+
data,
|
|
4191
|
+
sx: {
|
|
4192
|
+
flex: 1
|
|
4193
|
+
}
|
|
4194
|
+
}, field))
|
|
4195
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
4196
|
+
name: "x_axis_name",
|
|
4197
|
+
control,
|
|
4198
|
+
render: ({
|
|
4199
|
+
field
|
|
4200
|
+
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
4201
|
+
label: "X Axis Name",
|
|
4202
|
+
sx: {
|
|
4203
|
+
flex: 1
|
|
4204
|
+
}
|
|
4205
|
+
}, field))
|
|
4206
|
+
})]
|
|
4207
|
+
})
|
|
4208
|
+
}), /* @__PURE__ */ jsx(Accordion.Item, {
|
|
4209
|
+
label: "Y Axes",
|
|
4210
|
+
children: /* @__PURE__ */ jsx(YAxesField, {
|
|
4211
|
+
control,
|
|
4212
|
+
watch
|
|
4213
|
+
})
|
|
4214
|
+
}), /* @__PURE__ */ jsx(Accordion.Item, {
|
|
4215
|
+
label: "Series",
|
|
4216
|
+
children: /* @__PURE__ */ jsx(SeriesField, {
|
|
4217
|
+
control,
|
|
4218
|
+
watch,
|
|
4219
|
+
getValues,
|
|
4220
|
+
data
|
|
4221
|
+
})
|
|
4222
|
+
}), /* @__PURE__ */ jsx(Accordion.Item, {
|
|
4223
|
+
label: "Regression Lines",
|
|
4224
|
+
children: /* @__PURE__ */ jsx(RegressionsField, {
|
|
4225
|
+
control,
|
|
4226
|
+
watch,
|
|
4227
|
+
getValues,
|
|
4228
|
+
data
|
|
4229
|
+
})
|
|
2553
4230
|
})]
|
|
2554
|
-
}), /* @__PURE__ */ jsx(YAxesField, {
|
|
2555
|
-
control,
|
|
2556
|
-
watch
|
|
2557
|
-
}), /* @__PURE__ */ jsx(SeriesField, {
|
|
2558
|
-
control,
|
|
2559
|
-
watch,
|
|
2560
|
-
getValues,
|
|
2561
|
-
data
|
|
2562
4231
|
})]
|
|
2563
4232
|
})
|
|
2564
4233
|
});
|
|
@@ -2625,55 +4294,147 @@ function VizPiePanel({
|
|
|
2625
4294
|
})
|
|
2626
4295
|
});
|
|
2627
4296
|
}
|
|
2628
|
-
|
|
2629
|
-
|
|
2630
|
-
|
|
4297
|
+
function VizRichTextPanel({
|
|
4298
|
+
conf,
|
|
4299
|
+
setConf
|
|
4300
|
+
}) {
|
|
4301
|
+
const defaultValues = React.useMemo(() => {
|
|
4302
|
+
const {
|
|
4303
|
+
content = ""
|
|
4304
|
+
} = conf;
|
|
4305
|
+
return {
|
|
4306
|
+
content
|
|
4307
|
+
};
|
|
4308
|
+
}, [conf]);
|
|
4309
|
+
React.useEffect(() => {
|
|
4310
|
+
const configMalformed = !_.isEqual(conf, defaultValues);
|
|
4311
|
+
if (configMalformed) {
|
|
4312
|
+
setConf(defaultValues);
|
|
4313
|
+
}
|
|
4314
|
+
}, [conf, defaultValues]);
|
|
4315
|
+
const {
|
|
4316
|
+
control,
|
|
4317
|
+
handleSubmit,
|
|
4318
|
+
watch,
|
|
4319
|
+
getValues
|
|
4320
|
+
} = useForm({
|
|
4321
|
+
defaultValues
|
|
4322
|
+
});
|
|
4323
|
+
watch("content");
|
|
4324
|
+
const values = getValues();
|
|
4325
|
+
const changed = React.useMemo(() => {
|
|
4326
|
+
return !_.isEqual(values, conf);
|
|
4327
|
+
}, [values, conf]);
|
|
4328
|
+
return /* @__PURE__ */ jsx(Group, {
|
|
4329
|
+
direction: "column",
|
|
4330
|
+
mt: "md",
|
|
4331
|
+
spacing: "xs",
|
|
4332
|
+
grow: true,
|
|
4333
|
+
children: /* @__PURE__ */ jsxs("form", {
|
|
4334
|
+
onSubmit: handleSubmit(setConf),
|
|
4335
|
+
children: [/* @__PURE__ */ jsxs(Group, {
|
|
4336
|
+
position: "left",
|
|
4337
|
+
py: "md",
|
|
4338
|
+
pl: "md",
|
|
4339
|
+
sx: {
|
|
4340
|
+
borderBottom: "1px solid #eee",
|
|
4341
|
+
background: "#efefef"
|
|
4342
|
+
},
|
|
4343
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
4344
|
+
children: "Content"
|
|
4345
|
+
}), /* @__PURE__ */ jsx(ActionIcon, {
|
|
4346
|
+
type: "submit",
|
|
4347
|
+
mr: 5,
|
|
4348
|
+
variant: "filled",
|
|
4349
|
+
color: "blue",
|
|
4350
|
+
disabled: !changed,
|
|
4351
|
+
children: /* @__PURE__ */ jsx(DeviceFloppy, {
|
|
4352
|
+
size: 20
|
|
4353
|
+
})
|
|
4354
|
+
})]
|
|
4355
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
4356
|
+
name: "content",
|
|
4357
|
+
control,
|
|
4358
|
+
render: ({
|
|
4359
|
+
field
|
|
4360
|
+
}) => /* @__PURE__ */ jsx(RichTextEditor, __spreadValues({
|
|
4361
|
+
sx: {
|
|
4362
|
+
flex: 1
|
|
4363
|
+
}
|
|
4364
|
+
}, field))
|
|
4365
|
+
})]
|
|
4366
|
+
})
|
|
4367
|
+
});
|
|
4368
|
+
}
|
|
4369
|
+
function updateSchema(legacyConf) {
|
|
4370
|
+
if ("variables" in legacyConf) {
|
|
4371
|
+
return legacyConf;
|
|
4372
|
+
}
|
|
4373
|
+
const {
|
|
4374
|
+
align,
|
|
4375
|
+
size,
|
|
4376
|
+
weight,
|
|
4377
|
+
color: color2,
|
|
4378
|
+
content: {
|
|
4379
|
+
prefix = "",
|
|
4380
|
+
data_field = "value",
|
|
4381
|
+
formatter = {
|
|
4382
|
+
output: "number",
|
|
4383
|
+
mantissa: 0
|
|
4384
|
+
},
|
|
4385
|
+
postfix = ""
|
|
4386
|
+
} = {}
|
|
4387
|
+
} = legacyConf;
|
|
4388
|
+
return {
|
|
4389
|
+
align,
|
|
4390
|
+
template: `${prefix} \${value} ${postfix}`,
|
|
4391
|
+
variables: [
|
|
4392
|
+
{
|
|
4393
|
+
name: "value",
|
|
4394
|
+
data_field,
|
|
4395
|
+
aggregation: "none",
|
|
4396
|
+
formatter,
|
|
4397
|
+
color: color2,
|
|
4398
|
+
weight,
|
|
4399
|
+
size
|
|
4400
|
+
}
|
|
4401
|
+
]
|
|
4402
|
+
};
|
|
4403
|
+
}
|
|
4404
|
+
const options = [{
|
|
4405
|
+
label: "None",
|
|
4406
|
+
value: "none"
|
|
2631
4407
|
}, {
|
|
2632
|
-
label: "
|
|
2633
|
-
value:
|
|
4408
|
+
label: "Sum",
|
|
4409
|
+
value: "sum"
|
|
2634
4410
|
}, {
|
|
2635
|
-
label: "
|
|
2636
|
-
value:
|
|
4411
|
+
label: "Mean",
|
|
4412
|
+
value: "mean"
|
|
2637
4413
|
}, {
|
|
2638
|
-
label: "
|
|
2639
|
-
value:
|
|
4414
|
+
label: "Median",
|
|
4415
|
+
value: "median"
|
|
2640
4416
|
}, {
|
|
2641
|
-
label: "
|
|
2642
|
-
value:
|
|
4417
|
+
label: "Max",
|
|
4418
|
+
value: "max"
|
|
4419
|
+
}, {
|
|
4420
|
+
label: "Min",
|
|
4421
|
+
value: "min"
|
|
2643
4422
|
}];
|
|
2644
|
-
function
|
|
4423
|
+
function _AggregationSelector({
|
|
2645
4424
|
label,
|
|
2646
4425
|
value,
|
|
2647
4426
|
onChange
|
|
2648
4427
|
}, ref) {
|
|
2649
|
-
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
}
|
|
2656
|
-
}, [mark]);
|
|
2657
|
-
return /* @__PURE__ */ jsxs(Group, {
|
|
2658
|
-
direction: "column",
|
|
2659
|
-
grow: true,
|
|
2660
|
-
spacing: "xs",
|
|
2661
|
-
mb: "lg",
|
|
2662
|
-
children: [/* @__PURE__ */ jsx(Text, {
|
|
2663
|
-
children: label
|
|
2664
|
-
}), /* @__PURE__ */ jsx(Slider, {
|
|
2665
|
-
label: null,
|
|
2666
|
-
marks,
|
|
2667
|
-
value: mark,
|
|
2668
|
-
onChange: setMark,
|
|
2669
|
-
step: 25,
|
|
2670
|
-
placeholder: "Pick a font size",
|
|
2671
|
-
ref
|
|
2672
|
-
})]
|
|
4428
|
+
return /* @__PURE__ */ jsx(Select, {
|
|
4429
|
+
ref,
|
|
4430
|
+
label,
|
|
4431
|
+
data: options,
|
|
4432
|
+
value,
|
|
4433
|
+
onChange
|
|
2673
4434
|
});
|
|
2674
4435
|
}
|
|
2675
|
-
const
|
|
2676
|
-
function
|
|
4436
|
+
const AggregationSelector = React.forwardRef(_AggregationSelector);
|
|
4437
|
+
function _ColorArrayInput({
|
|
2677
4438
|
label,
|
|
2678
4439
|
value,
|
|
2679
4440
|
onChange
|
|
@@ -2694,6 +4455,10 @@ function _TextArrayInput({
|
|
|
2694
4455
|
const submit = () => {
|
|
2695
4456
|
onChange(values.map((s) => s.toString()));
|
|
2696
4457
|
};
|
|
4458
|
+
const theme = useMantineTheme();
|
|
4459
|
+
const swatches = React.useMemo(() => {
|
|
4460
|
+
return Object.entries(theme.colors).map(([_color, profile]) => profile[6]);
|
|
4461
|
+
}, [theme]);
|
|
2697
4462
|
return /* @__PURE__ */ jsxs(Fragment, {
|
|
2698
4463
|
children: [/* @__PURE__ */ jsxs(Group, {
|
|
2699
4464
|
position: "left",
|
|
@@ -2711,15 +4476,15 @@ function _TextArrayInput({
|
|
|
2711
4476
|
})
|
|
2712
4477
|
})]
|
|
2713
4478
|
}), /* @__PURE__ */ jsxs(Group, {
|
|
2714
|
-
children: [values.map((v, i) => /* @__PURE__ */ jsx(
|
|
4479
|
+
children: [values.map((v, i) => /* @__PURE__ */ jsx(ColorInput, {
|
|
2715
4480
|
value: v,
|
|
2716
|
-
onChange: (
|
|
2717
|
-
const newValue = event.currentTarget.value;
|
|
4481
|
+
onChange: (color2) => {
|
|
2718
4482
|
setValues((s) => {
|
|
2719
|
-
s.splice(i, 1,
|
|
4483
|
+
s.splice(i, 1, color2);
|
|
2720
4484
|
return [...s];
|
|
2721
4485
|
});
|
|
2722
4486
|
},
|
|
4487
|
+
swatches,
|
|
2723
4488
|
rightSection: /* @__PURE__ */ jsx(ActionIcon, {
|
|
2724
4489
|
onClick: () => del(i),
|
|
2725
4490
|
color: "red",
|
|
@@ -2741,8 +4506,58 @@ function _TextArrayInput({
|
|
|
2741
4506
|
})]
|
|
2742
4507
|
});
|
|
2743
4508
|
}
|
|
2744
|
-
const
|
|
2745
|
-
|
|
4509
|
+
const ColorArrayInput = React.forwardRef(_ColorArrayInput);
|
|
4510
|
+
const marks = [{
|
|
4511
|
+
label: "initial",
|
|
4512
|
+
value: 0
|
|
4513
|
+
}, {
|
|
4514
|
+
label: "500",
|
|
4515
|
+
value: 25
|
|
4516
|
+
}, {
|
|
4517
|
+
label: "700",
|
|
4518
|
+
value: 50
|
|
4519
|
+
}, {
|
|
4520
|
+
label: "semibold",
|
|
4521
|
+
value: 75
|
|
4522
|
+
}, {
|
|
4523
|
+
label: "bold",
|
|
4524
|
+
value: 100
|
|
4525
|
+
}];
|
|
4526
|
+
function _MantineFontWeightSlider({
|
|
4527
|
+
label,
|
|
4528
|
+
value,
|
|
4529
|
+
onChange
|
|
4530
|
+
}, ref) {
|
|
4531
|
+
var _a, _b;
|
|
4532
|
+
const [mark, setMark] = React.useState((_b = (_a = marks.find((m2) => m2.label === value)) == null ? void 0 : _a.value) != null ? _b : marks[0].value);
|
|
4533
|
+
React.useEffect(() => {
|
|
4534
|
+
const match = marks.find((s) => s.value === mark);
|
|
4535
|
+
if (match) {
|
|
4536
|
+
onChange(match.label);
|
|
4537
|
+
}
|
|
4538
|
+
}, [mark]);
|
|
4539
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
4540
|
+
direction: "column",
|
|
4541
|
+
grow: true,
|
|
4542
|
+
spacing: 0,
|
|
4543
|
+
mt: "sm",
|
|
4544
|
+
mb: "lg",
|
|
4545
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
4546
|
+
size: "sm",
|
|
4547
|
+
children: label
|
|
4548
|
+
}), /* @__PURE__ */ jsx(Slider, {
|
|
4549
|
+
label: null,
|
|
4550
|
+
marks,
|
|
4551
|
+
value: mark,
|
|
4552
|
+
onChange: setMark,
|
|
4553
|
+
step: 25,
|
|
4554
|
+
placeholder: "Pick a font size",
|
|
4555
|
+
ref
|
|
4556
|
+
})]
|
|
4557
|
+
});
|
|
4558
|
+
}
|
|
4559
|
+
const MantineFontWeightSlider = React.forwardRef(_MantineFontWeightSlider);
|
|
4560
|
+
function _TextArrayInput({
|
|
2746
4561
|
label,
|
|
2747
4562
|
value,
|
|
2748
4563
|
onChange
|
|
@@ -2763,10 +4578,6 @@ function _ColorArrayInput({
|
|
|
2763
4578
|
const submit = () => {
|
|
2764
4579
|
onChange(values.map((s) => s.toString()));
|
|
2765
4580
|
};
|
|
2766
|
-
const theme = useMantineTheme();
|
|
2767
|
-
const swatches = React.useMemo(() => {
|
|
2768
|
-
return Object.entries(theme.colors).map(([_color, profile]) => profile[6]);
|
|
2769
|
-
}, [theme]);
|
|
2770
4581
|
return /* @__PURE__ */ jsxs(Fragment, {
|
|
2771
4582
|
children: [/* @__PURE__ */ jsxs(Group, {
|
|
2772
4583
|
position: "left",
|
|
@@ -2784,15 +4595,15 @@ function _ColorArrayInput({
|
|
|
2784
4595
|
})
|
|
2785
4596
|
})]
|
|
2786
4597
|
}), /* @__PURE__ */ jsxs(Group, {
|
|
2787
|
-
children: [values.map((v, i) => /* @__PURE__ */ jsx(
|
|
4598
|
+
children: [values.map((v, i) => /* @__PURE__ */ jsx(TextInput, {
|
|
2788
4599
|
value: v,
|
|
2789
|
-
onChange: (
|
|
4600
|
+
onChange: (event) => {
|
|
4601
|
+
const newValue = event.currentTarget.value;
|
|
2790
4602
|
setValues((s) => {
|
|
2791
|
-
s.splice(i, 1,
|
|
4603
|
+
s.splice(i, 1, newValue);
|
|
2792
4604
|
return [...s];
|
|
2793
4605
|
});
|
|
2794
4606
|
},
|
|
2795
|
-
swatches,
|
|
2796
4607
|
rightSection: /* @__PURE__ */ jsx(ActionIcon, {
|
|
2797
4608
|
onClick: () => del(i),
|
|
2798
4609
|
color: "red",
|
|
@@ -2814,42 +4625,281 @@ function _ColorArrayInput({
|
|
|
2814
4625
|
})]
|
|
2815
4626
|
});
|
|
2816
4627
|
}
|
|
2817
|
-
const
|
|
2818
|
-
function
|
|
2819
|
-
|
|
2820
|
-
|
|
4628
|
+
const TextArrayInput = React.forwardRef(_TextArrayInput);
|
|
4629
|
+
const TemplateInput = React.forwardRef(function TemplateInput2(_a, ref) {
|
|
4630
|
+
var _b = _a, {
|
|
4631
|
+
value,
|
|
4632
|
+
onChange
|
|
4633
|
+
} = _b, rest = __objRest(_b, [
|
|
4634
|
+
"value",
|
|
4635
|
+
"onChange"
|
|
4636
|
+
]);
|
|
4637
|
+
return /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
4638
|
+
ref,
|
|
4639
|
+
value,
|
|
4640
|
+
onChange
|
|
4641
|
+
}, rest));
|
|
4642
|
+
});
|
|
4643
|
+
function TemplateVariableField({
|
|
4644
|
+
value,
|
|
4645
|
+
onChange,
|
|
2821
4646
|
data
|
|
2822
4647
|
}) {
|
|
2823
|
-
const
|
|
2824
|
-
|
|
2825
|
-
|
|
4648
|
+
const colorType = value.color.type;
|
|
4649
|
+
const handleChange = (path, newValue) => {
|
|
4650
|
+
const v = _.cloneDeep(value);
|
|
4651
|
+
_.set(v, path, newValue);
|
|
4652
|
+
onChange(v);
|
|
4653
|
+
};
|
|
4654
|
+
return /* @__PURE__ */ jsxs(Box, {
|
|
4655
|
+
px: "sm",
|
|
4656
|
+
py: "md",
|
|
4657
|
+
children: [/* @__PURE__ */ jsx(Text, {
|
|
4658
|
+
weight: "bold",
|
|
4659
|
+
pb: 0,
|
|
4660
|
+
children: value.name
|
|
4661
|
+
}), /* @__PURE__ */ jsx(Divider, {
|
|
4662
|
+
my: "xs",
|
|
4663
|
+
label: "Data",
|
|
4664
|
+
labelPosition: "center"
|
|
4665
|
+
}), /* @__PURE__ */ jsxs(Group, {
|
|
4666
|
+
direction: "row",
|
|
4667
|
+
grow: true,
|
|
4668
|
+
noWrap: true,
|
|
4669
|
+
children: [/* @__PURE__ */ jsx(TextInput, {
|
|
4670
|
+
label: "Name",
|
|
4671
|
+
required: true,
|
|
4672
|
+
value: value.name,
|
|
4673
|
+
onChange: (e) => handleChange("name", e.currentTarget.value)
|
|
4674
|
+
}), /* @__PURE__ */ jsx(DataFieldSelector, {
|
|
4675
|
+
label: "Data Field",
|
|
4676
|
+
required: true,
|
|
4677
|
+
data,
|
|
4678
|
+
value: value.data_field,
|
|
4679
|
+
onChange: (v) => handleChange("data_field", v)
|
|
4680
|
+
}), /* @__PURE__ */ jsx(AggregationSelector, {
|
|
4681
|
+
label: "Aggregation",
|
|
4682
|
+
value: value.aggregation,
|
|
4683
|
+
onChange: (v) => handleChange("aggregation", v)
|
|
4684
|
+
})]
|
|
4685
|
+
}), /* @__PURE__ */ jsx(NumbroFormatSelector, {
|
|
4686
|
+
value: value.formatter,
|
|
4687
|
+
onChange: (v) => handleChange("formatter", v)
|
|
4688
|
+
}), /* @__PURE__ */ jsx(Divider, {
|
|
4689
|
+
my: "xs",
|
|
4690
|
+
label: "Typography",
|
|
4691
|
+
labelPosition: "center"
|
|
4692
|
+
}), /* @__PURE__ */ jsx(Group, {
|
|
4693
|
+
direction: "column",
|
|
4694
|
+
grow: true,
|
|
4695
|
+
children: /* @__PURE__ */ jsx(TextInput, {
|
|
4696
|
+
label: "Font Size",
|
|
4697
|
+
placeholder: "10px, 1em, 1rem, 100%...",
|
|
4698
|
+
sx: {
|
|
4699
|
+
flex: 1
|
|
4700
|
+
},
|
|
4701
|
+
value: value.size,
|
|
4702
|
+
onChange: (e) => handleChange("size", e.currentTarget.value)
|
|
4703
|
+
})
|
|
4704
|
+
}), /* @__PURE__ */ jsx(Group, {
|
|
4705
|
+
position: "apart",
|
|
4706
|
+
grow: true,
|
|
4707
|
+
sx: {
|
|
4708
|
+
"> *": {
|
|
4709
|
+
flexGrow: 1,
|
|
4710
|
+
maxWidth: "100%"
|
|
4711
|
+
}
|
|
4712
|
+
},
|
|
4713
|
+
children: /* @__PURE__ */ jsx(MantineFontWeightSlider, {
|
|
4714
|
+
label: "Font Weight",
|
|
4715
|
+
value: value.weight,
|
|
4716
|
+
onChange: (v) => handleChange("weight", v)
|
|
4717
|
+
})
|
|
4718
|
+
}), /* @__PURE__ */ jsx(Divider, {
|
|
4719
|
+
my: "xs",
|
|
4720
|
+
label: "Style",
|
|
4721
|
+
labelPosition: "center"
|
|
4722
|
+
}), /* @__PURE__ */ jsxs(Group, {
|
|
4723
|
+
direction: "column",
|
|
4724
|
+
grow: true,
|
|
4725
|
+
children: [/* @__PURE__ */ jsx(Select, {
|
|
4726
|
+
label: "Color Type",
|
|
4727
|
+
data: [{
|
|
4728
|
+
label: "Static Color",
|
|
4729
|
+
value: "static"
|
|
4730
|
+
}, {
|
|
4731
|
+
label: "Continuous Color",
|
|
4732
|
+
value: "continuous"
|
|
4733
|
+
}],
|
|
4734
|
+
value: value.color.type,
|
|
4735
|
+
onChange: (v) => handleChange("color.type", v)
|
|
4736
|
+
}), colorType === "static" && /* @__PURE__ */ jsx(MantineColorSelector, {
|
|
4737
|
+
value: value.color.staticColor,
|
|
4738
|
+
onChange: (v) => handleChange("color.staticColor", v)
|
|
4739
|
+
}), colorType === "continuous" && /* @__PURE__ */ jsxs(Fragment, {
|
|
4740
|
+
children: [/* @__PURE__ */ jsx(TextArrayInput, {
|
|
4741
|
+
label: "Value Range",
|
|
4742
|
+
value: value.color.valueRange,
|
|
4743
|
+
onChange: (v) => handleChange("color.valueRange", v)
|
|
4744
|
+
}), /* @__PURE__ */ jsx(ColorArrayInput, {
|
|
4745
|
+
label: "Color Range",
|
|
4746
|
+
value: value.color.colorRange,
|
|
4747
|
+
onChange: (v) => handleChange("color.colorRange", v)
|
|
4748
|
+
})]
|
|
4749
|
+
})]
|
|
4750
|
+
})]
|
|
4751
|
+
});
|
|
4752
|
+
}
|
|
4753
|
+
function VariableField({
|
|
4754
|
+
control,
|
|
4755
|
+
index: index2,
|
|
4756
|
+
remove,
|
|
4757
|
+
data
|
|
4758
|
+
}) {
|
|
4759
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
4760
|
+
direction: "column",
|
|
4761
|
+
grow: true,
|
|
4762
|
+
my: "sm",
|
|
4763
|
+
p: 0,
|
|
4764
|
+
sx: {
|
|
4765
|
+
border: "1px solid #eee",
|
|
4766
|
+
borderTopColor: "#333",
|
|
4767
|
+
borderTopWidth: 2,
|
|
4768
|
+
position: "relative"
|
|
4769
|
+
},
|
|
4770
|
+
children: [/* @__PURE__ */ jsx(Controller, {
|
|
4771
|
+
name: `variables.${index2}`,
|
|
4772
|
+
control,
|
|
4773
|
+
render: ({
|
|
4774
|
+
field
|
|
4775
|
+
}) => /* @__PURE__ */ jsx(TemplateVariableField, __spreadValues({
|
|
4776
|
+
data
|
|
4777
|
+
}, field))
|
|
4778
|
+
}), /* @__PURE__ */ jsx(ActionIcon, {
|
|
4779
|
+
color: "red",
|
|
4780
|
+
variant: "hover",
|
|
4781
|
+
onClick: () => remove(index2),
|
|
4782
|
+
sx: {
|
|
4783
|
+
position: "absolute",
|
|
4784
|
+
top: 15,
|
|
4785
|
+
right: 5
|
|
4786
|
+
},
|
|
4787
|
+
children: /* @__PURE__ */ jsx(Trash, {
|
|
4788
|
+
size: 16
|
|
4789
|
+
})
|
|
4790
|
+
})]
|
|
4791
|
+
}, index2);
|
|
4792
|
+
}
|
|
4793
|
+
function VariablesField({
|
|
4794
|
+
control,
|
|
4795
|
+
watch,
|
|
4796
|
+
data
|
|
4797
|
+
}) {
|
|
4798
|
+
const {
|
|
4799
|
+
fields,
|
|
4800
|
+
append,
|
|
4801
|
+
remove
|
|
4802
|
+
} = useFieldArray({
|
|
4803
|
+
control,
|
|
4804
|
+
name: "variables"
|
|
4805
|
+
});
|
|
4806
|
+
const watchFieldArray = watch("variables");
|
|
4807
|
+
const controlledFields = fields.map((field, index2) => {
|
|
4808
|
+
return __spreadValues(__spreadValues({}, field), watchFieldArray[index2]);
|
|
4809
|
+
});
|
|
4810
|
+
const add = () => append({
|
|
4811
|
+
name: randomId(),
|
|
4812
|
+
size: "20px",
|
|
2826
4813
|
weight: "bold",
|
|
2827
4814
|
color: {
|
|
2828
4815
|
type: "static",
|
|
2829
|
-
staticColor: "
|
|
4816
|
+
staticColor: "blue"
|
|
2830
4817
|
},
|
|
2831
|
-
|
|
2832
|
-
|
|
4818
|
+
data_field: "",
|
|
4819
|
+
aggregation: "none",
|
|
4820
|
+
formatter: {
|
|
4821
|
+
output: "number",
|
|
4822
|
+
mantissa: 0
|
|
4823
|
+
}
|
|
4824
|
+
});
|
|
4825
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
4826
|
+
direction: "column",
|
|
4827
|
+
grow: true,
|
|
4828
|
+
children: [controlledFields.map((_variableItem, index2) => /* @__PURE__ */ jsx(VariableField, {
|
|
4829
|
+
control,
|
|
4830
|
+
index: index2,
|
|
4831
|
+
remove,
|
|
4832
|
+
data
|
|
4833
|
+
})), /* @__PURE__ */ jsx(Group, {
|
|
4834
|
+
position: "center",
|
|
4835
|
+
mt: "xs",
|
|
4836
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
4837
|
+
onClick: add,
|
|
4838
|
+
children: "Add a Variable"
|
|
4839
|
+
})
|
|
4840
|
+
})]
|
|
4841
|
+
});
|
|
4842
|
+
}
|
|
4843
|
+
function getInitialConf() {
|
|
4844
|
+
return {
|
|
4845
|
+
align: "center",
|
|
4846
|
+
template: "The variable ${value} is defined in Variables section",
|
|
4847
|
+
variables: [{
|
|
4848
|
+
name: "value",
|
|
4849
|
+
size: "20px",
|
|
4850
|
+
weight: "bold",
|
|
4851
|
+
color: {
|
|
4852
|
+
type: "static",
|
|
4853
|
+
staticColor: "blue"
|
|
4854
|
+
},
|
|
2833
4855
|
data_field: "",
|
|
4856
|
+
aggregation: "none",
|
|
2834
4857
|
formatter: {
|
|
2835
4858
|
output: "number",
|
|
2836
4859
|
mantissa: 0
|
|
2837
|
-
}
|
|
2838
|
-
|
|
4860
|
+
}
|
|
4861
|
+
}]
|
|
4862
|
+
};
|
|
4863
|
+
}
|
|
4864
|
+
function VizStatsPanel({
|
|
4865
|
+
conf,
|
|
4866
|
+
setConf,
|
|
4867
|
+
data
|
|
4868
|
+
}) {
|
|
4869
|
+
const defaultValues = React.useMemo(() => {
|
|
4870
|
+
const {
|
|
4871
|
+
align,
|
|
4872
|
+
template = "",
|
|
4873
|
+
variables = []
|
|
4874
|
+
} = updateSchema(conf);
|
|
4875
|
+
if (!align) {
|
|
4876
|
+
return getInitialConf();
|
|
2839
4877
|
}
|
|
2840
|
-
|
|
4878
|
+
return {
|
|
4879
|
+
variables,
|
|
4880
|
+
template,
|
|
4881
|
+
align
|
|
4882
|
+
};
|
|
4883
|
+
}, [conf]);
|
|
4884
|
+
React.useEffect(() => {
|
|
4885
|
+
const configMalformed = !_.isEqual(conf, defaultValues);
|
|
4886
|
+
if (configMalformed) {
|
|
4887
|
+
setConf(defaultValues);
|
|
4888
|
+
}
|
|
4889
|
+
}, [conf, defaultValues]);
|
|
2841
4890
|
const {
|
|
2842
4891
|
control,
|
|
2843
4892
|
handleSubmit,
|
|
2844
4893
|
watch,
|
|
2845
|
-
|
|
2846
|
-
isDirty
|
|
2847
|
-
}
|
|
4894
|
+
getValues
|
|
2848
4895
|
} = useForm({
|
|
2849
4896
|
defaultValues
|
|
2850
4897
|
});
|
|
2851
|
-
|
|
2852
|
-
|
|
4898
|
+
watch(["variables", "template"]);
|
|
4899
|
+
const values = getValues();
|
|
4900
|
+
const changed = React.useMemo(() => {
|
|
4901
|
+
return !_.isEqual(values, conf);
|
|
4902
|
+
}, [values, conf]);
|
|
2853
4903
|
return /* @__PURE__ */ jsx(Group, {
|
|
2854
4904
|
direction: "column",
|
|
2855
4905
|
mt: "md",
|
|
@@ -2874,166 +4924,32 @@ function VizStatsPanel({
|
|
|
2874
4924
|
mr: 5,
|
|
2875
4925
|
variant: "filled",
|
|
2876
4926
|
color: "blue",
|
|
2877
|
-
disabled: !
|
|
4927
|
+
disabled: !changed,
|
|
2878
4928
|
children: /* @__PURE__ */ jsx(DeviceFloppy, {
|
|
2879
4929
|
size: 20
|
|
2880
4930
|
})
|
|
2881
4931
|
})]
|
|
2882
|
-
}), /* @__PURE__ */
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
|
|
2894
|
-
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
2904
|
-
label: "Prefix",
|
|
2905
|
-
sx: {
|
|
2906
|
-
flexGrow: 1
|
|
2907
|
-
}
|
|
2908
|
-
}, field))
|
|
2909
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
2910
|
-
name: "content.data_field",
|
|
2911
|
-
control,
|
|
2912
|
-
render: ({
|
|
2913
|
-
field
|
|
2914
|
-
}) => /* @__PURE__ */ jsx(DataFieldSelector, __spreadValues({
|
|
2915
|
-
label: "Data Field",
|
|
2916
|
-
required: true,
|
|
2917
|
-
data
|
|
2918
|
-
}, field))
|
|
2919
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
2920
|
-
name: "content.postfix",
|
|
2921
|
-
control,
|
|
2922
|
-
render: ({
|
|
2923
|
-
field
|
|
2924
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
2925
|
-
label: "Postfix",
|
|
2926
|
-
sx: {
|
|
2927
|
-
flexGrow: 1
|
|
2928
|
-
}
|
|
2929
|
-
}, field))
|
|
2930
|
-
})]
|
|
2931
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
2932
|
-
name: "content.formatter",
|
|
2933
|
-
control,
|
|
2934
|
-
render: ({
|
|
2935
|
-
field
|
|
2936
|
-
}) => /* @__PURE__ */ jsx(NumbroFormatSelector, __spreadValues({}, field))
|
|
2937
|
-
})]
|
|
2938
|
-
})
|
|
2939
|
-
}), /* @__PURE__ */ jsxs(Accordion.Item, {
|
|
2940
|
-
label: "Font",
|
|
2941
|
-
children: [/* @__PURE__ */ jsx(Group, {
|
|
2942
|
-
direction: "column",
|
|
2943
|
-
grow: true,
|
|
2944
|
-
children: /* @__PURE__ */ jsx(Controller, {
|
|
2945
|
-
name: "size",
|
|
2946
|
-
control,
|
|
2947
|
-
render: ({
|
|
2948
|
-
field
|
|
2949
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
2950
|
-
label: "Font Size",
|
|
2951
|
-
placeholder: "10px, 1em, 1rem, 100%...",
|
|
2952
|
-
sx: {
|
|
2953
|
-
flex: 1
|
|
2954
|
-
}
|
|
2955
|
-
}, field))
|
|
2956
|
-
})
|
|
2957
|
-
}), /* @__PURE__ */ jsx(Group, {
|
|
2958
|
-
position: "apart",
|
|
2959
|
-
grow: true,
|
|
2960
|
-
sx: {
|
|
2961
|
-
"> *": {
|
|
2962
|
-
flexGrow: 1,
|
|
2963
|
-
maxWidth: "100%"
|
|
2964
|
-
}
|
|
2965
|
-
},
|
|
2966
|
-
children: /* @__PURE__ */ jsx(Controller, {
|
|
2967
|
-
name: "weight",
|
|
2968
|
-
control,
|
|
2969
|
-
render: ({
|
|
2970
|
-
field
|
|
2971
|
-
}) => /* @__PURE__ */ jsx(MantineFontWeightSlider, __spreadValues({
|
|
2972
|
-
label: "Font Weight"
|
|
2973
|
-
}, field))
|
|
2974
|
-
})
|
|
2975
|
-
})]
|
|
2976
|
-
}), /* @__PURE__ */ jsx(Accordion.Item, {
|
|
2977
|
-
label: "Color",
|
|
2978
|
-
children: /* @__PURE__ */ jsxs(Group, {
|
|
2979
|
-
direction: "column",
|
|
2980
|
-
grow: true,
|
|
2981
|
-
children: [/* @__PURE__ */ jsx(Controller, {
|
|
2982
|
-
name: "color.type",
|
|
2983
|
-
control,
|
|
2984
|
-
render: ({
|
|
2985
|
-
field
|
|
2986
|
-
}) => /* @__PURE__ */ jsx(Select, __spreadValues({
|
|
2987
|
-
label: "Color Type",
|
|
2988
|
-
data: [{
|
|
2989
|
-
label: "Static Color",
|
|
2990
|
-
value: "static"
|
|
2991
|
-
}, {
|
|
2992
|
-
label: "Continuous Color",
|
|
2993
|
-
value: "continuous"
|
|
2994
|
-
}]
|
|
2995
|
-
}, field))
|
|
2996
|
-
}), colorType === "static" && /* @__PURE__ */ jsx(Controller, {
|
|
2997
|
-
name: "color.staticColor",
|
|
2998
|
-
control,
|
|
2999
|
-
render: ({
|
|
3000
|
-
field
|
|
3001
|
-
}) => /* @__PURE__ */ jsx(MantineColorSelector, __spreadValues({}, field))
|
|
3002
|
-
}), colorType === "continuous" && /* @__PURE__ */ jsxs(Fragment, {
|
|
3003
|
-
children: [/* @__PURE__ */ jsx(Controller, {
|
|
3004
|
-
name: "color.valueField",
|
|
3005
|
-
control,
|
|
3006
|
-
defaultValue: "",
|
|
3007
|
-
render: ({
|
|
3008
|
-
field
|
|
3009
|
-
}) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
|
|
3010
|
-
placeholder: "Calculate color with this field",
|
|
3011
|
-
label: "Value Field",
|
|
3012
|
-
required: true,
|
|
3013
|
-
sx: {
|
|
3014
|
-
flex: 1
|
|
3015
|
-
}
|
|
3016
|
-
}, field))
|
|
3017
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
3018
|
-
name: "color.valueRange",
|
|
3019
|
-
control,
|
|
3020
|
-
render: ({
|
|
3021
|
-
field
|
|
3022
|
-
}) => /* @__PURE__ */ jsx(TextArrayInput, __spreadValues({
|
|
3023
|
-
label: "Value Range"
|
|
3024
|
-
}, field))
|
|
3025
|
-
}), /* @__PURE__ */ jsx(Controller, {
|
|
3026
|
-
name: "color.colorRange",
|
|
3027
|
-
control,
|
|
3028
|
-
render: ({
|
|
3029
|
-
field
|
|
3030
|
-
}) => /* @__PURE__ */ jsx(ColorArrayInput, __spreadValues({
|
|
3031
|
-
label: "Color Range"
|
|
3032
|
-
}, field))
|
|
3033
|
-
})]
|
|
3034
|
-
})]
|
|
3035
|
-
})
|
|
3036
|
-
})]
|
|
4932
|
+
}), /* @__PURE__ */ jsx(Controller, {
|
|
4933
|
+
name: "template",
|
|
4934
|
+
control,
|
|
4935
|
+
render: ({
|
|
4936
|
+
field
|
|
4937
|
+
}) => /* @__PURE__ */ jsx(TemplateInput, __spreadValues({
|
|
4938
|
+
label: "Template",
|
|
4939
|
+
py: "md",
|
|
4940
|
+
sx: {
|
|
4941
|
+
flexGrow: 1
|
|
4942
|
+
}
|
|
4943
|
+
}, field))
|
|
4944
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
4945
|
+
pb: "sm",
|
|
4946
|
+
pt: "md",
|
|
4947
|
+
size: "sm",
|
|
4948
|
+
children: "Variables"
|
|
4949
|
+
}), /* @__PURE__ */ jsx(VariablesField, {
|
|
4950
|
+
control,
|
|
4951
|
+
watch,
|
|
4952
|
+
data
|
|
3037
4953
|
})]
|
|
3038
4954
|
})
|
|
3039
4955
|
});
|
|
@@ -3118,17 +5034,17 @@ function ValueTypeSelector({
|
|
|
3118
5034
|
sx
|
|
3119
5035
|
});
|
|
3120
5036
|
}
|
|
3121
|
-
function VizTablePanel(
|
|
3122
|
-
var
|
|
3123
|
-
conf:
|
|
3124
|
-
} =
|
|
5037
|
+
function VizTablePanel(_c) {
|
|
5038
|
+
var _d = _c, {
|
|
5039
|
+
conf: _e
|
|
5040
|
+
} = _d, _f = _e, {
|
|
3125
5041
|
columns
|
|
3126
|
-
} =
|
|
5042
|
+
} = _f, restConf = __objRest(_f, [
|
|
3127
5043
|
"columns"
|
|
3128
5044
|
]), {
|
|
3129
5045
|
setConf,
|
|
3130
5046
|
data
|
|
3131
|
-
} =
|
|
5047
|
+
} = _d;
|
|
3132
5048
|
const form = useForm$1({
|
|
3133
5049
|
initialValues: __spreadValues({
|
|
3134
5050
|
id_field: "id",
|
|
@@ -3474,6 +5390,10 @@ const types = [{
|
|
|
3474
5390
|
value: "stats",
|
|
3475
5391
|
label: "Stats",
|
|
3476
5392
|
Panel: VizStatsPanel
|
|
5393
|
+
}, {
|
|
5394
|
+
value: "rich-text",
|
|
5395
|
+
label: "Rich Text",
|
|
5396
|
+
Panel: VizRichTextPanel
|
|
3477
5397
|
}, {
|
|
3478
5398
|
value: "table",
|
|
3479
5399
|
label: "Table",
|
|
@@ -4152,7 +6072,7 @@ function SelectOrAddQuery({
|
|
|
4152
6072
|
chooseDefault();
|
|
4153
6073
|
}
|
|
4154
6074
|
}, [id, queries, chooseDefault]);
|
|
4155
|
-
const
|
|
6075
|
+
const options2 = React.useMemo(() => {
|
|
4156
6076
|
return queries.map((d) => ({
|
|
4157
6077
|
value: d.id,
|
|
4158
6078
|
label: d.id
|
|
@@ -4179,7 +6099,7 @@ function SelectOrAddQuery({
|
|
|
4179
6099
|
children: [/* @__PURE__ */ jsx(Text, {
|
|
4180
6100
|
children: "Select a Query"
|
|
4181
6101
|
}), /* @__PURE__ */ jsx(Select, {
|
|
4182
|
-
data:
|
|
6102
|
+
data: options2,
|
|
4183
6103
|
value: id,
|
|
4184
6104
|
onChange: setID,
|
|
4185
6105
|
allowDeselect: false,
|