@visactor/vseed 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/builder/builder/builder.d.ts +2 -2
  2. package/dist/index.cjs +347 -285
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +347 -285
  5. package/dist/index.js.map +1 -1
  6. package/dist/pipeline/advanced/chart/pipes/{init/autoDimensions.d.ts → default/defaultDimensions.d.ts} +1 -1
  7. package/dist/pipeline/advanced/chart/pipes/default/defaultMeasureName.d.ts +2 -0
  8. package/dist/pipeline/advanced/chart/pipes/default/defaultMeasures.d.ts +5 -0
  9. package/dist/pipeline/advanced/chart/pipes/default/index.d.ts +3 -0
  10. package/dist/pipeline/advanced/chart/pipes/encoding/column.d.ts +19 -0
  11. package/dist/pipeline/advanced/chart/pipes/encoding/line.d.ts +17 -0
  12. package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
  13. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +0 -2
  14. package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +3 -18
  15. package/dist/pipeline/advanced/table/pipes/reshape/index.d.ts +1 -0
  16. package/dist/pipeline/advanced/table/pipes/reshape/reshapePivotTable.d.ts +2 -0
  17. package/dist/types/advancedVSeed.d.ts +2 -0
  18. package/dist/types/chartType/area/area.d.ts +20 -3
  19. package/dist/types/chartType/area/zArea.d.ts +2 -0
  20. package/dist/types/chartType/areaPercent/areaPercent.d.ts +16 -0
  21. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +2 -0
  22. package/dist/types/chartType/bar/zBar.d.ts +2 -0
  23. package/dist/types/chartType/barParallel/zBarParallel.d.ts +2 -0
  24. package/dist/types/chartType/barPercent/zBarPercent.d.ts +2 -0
  25. package/dist/types/chartType/column/column.d.ts +17 -1
  26. package/dist/types/chartType/column/zColumn.d.ts +2 -0
  27. package/dist/types/chartType/columnParallel/columnParallel.d.ts +17 -0
  28. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +2 -0
  29. package/dist/types/chartType/columnPercent/columnPercent.d.ts +17 -1
  30. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +2 -0
  31. package/dist/types/chartType/donut/zDonut.d.ts +2 -0
  32. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +10 -0
  33. package/dist/types/chartType/funnel/zFunnel.d.ts +2 -0
  34. package/dist/types/chartType/heatmap/zHeatmap.d.ts +2 -0
  35. package/dist/types/chartType/line/line.d.ts +16 -0
  36. package/dist/types/chartType/line/zLine.d.ts +2 -0
  37. package/dist/types/chartType/pie/zPie.d.ts +2 -0
  38. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +2 -0
  39. package/dist/types/chartType/radar/zRadar.d.ts +2 -0
  40. package/dist/types/chartType/rose/zRose.d.ts +2 -0
  41. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +2 -0
  42. package/dist/types/chartType/scatter/zScatter.d.ts +10 -0
  43. package/dist/types/chartType/table/zTable.d.ts +2 -0
  44. package/dist/types/properties/measures/measures.d.ts +3 -1
  45. package/dist/types/properties/measures/zDualMeasures.d.ts +16 -0
  46. package/dist/types/properties/measures/zMeasures.d.ts +6 -0
  47. package/dist/types/properties/measures/zScatterMeasures.d.ts +16 -0
  48. package/dist/types/zVseed.d.ts +56 -0
  49. package/dist/umd/index.js +368 -306
  50. package/dist/umd/index.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +0 -2
package/dist/index.js CHANGED
@@ -190,7 +190,8 @@ const autoMeasures = (advancedVSeed, context)=>{
190
190
  void 0
191
191
  ].includes(key)).map((measure)=>({
192
192
  id: measure,
193
- alias: measure
193
+ alias: measure,
194
+ encoding: 'column'
194
195
  }));
195
196
  return result;
196
197
  };
@@ -274,7 +275,7 @@ const autoDimensions = (advancedVSeed, context)=>{
274
275
  ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
275
276
  id: dim,
276
277
  alias: dim,
277
- location: 'dimension'
278
+ encoding: 'column'
278
279
  }));
279
280
  return result;
280
281
  };
@@ -709,10 +710,27 @@ const autoPivotMeasures = (advancedVSeed, context)=>{
709
710
  void 0
710
711
  ].includes(key)).map((measure)=>({
711
712
  id: measure,
712
- alias: measure
713
+ alias: measure,
714
+ encoding: 'detail'
713
715
  }));
714
716
  return result;
715
717
  };
718
+ const ORIGINAL_DATA = '__OriginalData__';
719
+ const Separator = '-';
720
+ const FoldMeasureName = '__MeaName__';
721
+ const FoldMeasureId = '__MeaId__';
722
+ const FoldMeasureValue = '__MeaValue__';
723
+ const MeasureName = FoldMeasureName;
724
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
725
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
726
+ const FoldXMeasureValue = '__MeaXValue__';
727
+ const FoldYMeasureValue = '__MeaYValue__';
728
+ const XEncoding = '__Dim_X__';
729
+ const YEncoding = '__Dim_Y__';
730
+ const AngleEncoding = '__Dim_Angle__';
731
+ const DetailEncoding = '__Dim_Detail__';
732
+ const ColorEncoding = '__Dim_Color__';
733
+ const ColorIdEncoding = '__Dim_ColorId__';
716
734
  const findAllDimensions = (dimensions = [])=>{
717
735
  if (!dimensions) return [];
718
736
  const result = [];
@@ -729,15 +747,21 @@ const autoPivotDimensions = (advancedVSeed, context)=>{
729
747
  const { vseed } = context;
730
748
  const { dimensions, dataset } = vseed;
731
749
  const measures = findAllMeasures(advancedVSeed.measures);
750
+ const MeaName = {
751
+ id: MeasureName,
752
+ alias: intl.i18n`指标名称`
753
+ };
732
754
  if (!dataset) throw new Error('dataset is required');
733
755
  if (0 === dataset.length) return result;
734
756
  if (dimensions) {
735
757
  const newDimensions = findAllDimensions(dimensions);
758
+ if (!newDimensions.some((dim)=>dim.id === MeasureName)) newDimensions.push(MeaName);
736
759
  result.dimensions = newDimensions.map((item, index)=>{
760
+ if ('row' === item.encoding || 'column' === item.encoding) return item;
737
761
  if ('rowDimension' === item.location || 'columnDimension' === item.location) return item;
738
762
  return {
739
763
  ...item,
740
- location: index % 2 === 0 ? 'columnDimension' : 'rowDimension'
764
+ encoding: index % 2 === 0 ? 'column' : 'row'
741
765
  };
742
766
  });
743
767
  return result;
@@ -747,15 +771,19 @@ const autoPivotDimensions = (advancedVSeed, context)=>{
747
771
  ...prev,
748
772
  ...cur
749
773
  }), {});
750
- let i = 0;
751
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
774
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
752
775
  '',
753
776
  null,
754
777
  void 0
755
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
778
+ ].includes(key) && !measures.some((measure)=>measure.id === key));
779
+ result.dimensions = newDimensions.map((dim)=>({
756
780
  id: dim,
757
- alias: dim,
758
- location: i++ % 2 === 0 ? 'columnDimension' : 'rowDimension'
781
+ alias: dim
782
+ }));
783
+ result.dimensions.push(MeaName);
784
+ result.dimensions = result.dimensions.map((dim, index)=>({
785
+ ...dim,
786
+ encoding: index % 2 === 0 ? 'column' : 'row'
759
787
  }));
760
788
  return result;
761
789
  };
@@ -786,11 +814,89 @@ const pivotTableConfig = (advancedVSeed, context)=>{
786
814
  };
787
815
  return result;
788
816
  };
817
+ const foldMeasures = (dataset, measures, options)=>{
818
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
819
+ const foldInfo = {
820
+ measureId,
821
+ measureName,
822
+ measureValue,
823
+ colorRange: [
824
+ 0,
825
+ 1
826
+ ],
827
+ measureRange: [
828
+ 0,
829
+ 1
830
+ ],
831
+ foldMap: {}
832
+ };
833
+ const result = new Array(dataset.length * measures.length);
834
+ let index = 0;
835
+ const ids = measures.map((d)=>d.id);
836
+ for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
837
+ const datum = omit({
838
+ ...dataset[i]
839
+ }, ids);
840
+ datum[ORIGINAL_DATA] = dataset[i];
841
+ const measure = measures[j];
842
+ const { id, alias } = measure;
843
+ datum[id] = dataset[i][id];
844
+ datum[measureId] = id;
845
+ datum[measureName] = alias || id;
846
+ datum[measureValue] = dataset[i][id];
847
+ if (colorMeasureId) {
848
+ const value = datum[ORIGINAL_DATA][colorMeasureId];
849
+ datum[ColorEncoding] = value;
850
+ datum[ColorIdEncoding] = colorMeasureId;
851
+ foldInfo.colorRange = [
852
+ Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
853
+ Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
854
+ ];
855
+ }
856
+ foldInfo.measureRange = [
857
+ Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
858
+ Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
859
+ ];
860
+ foldInfo.foldMap[id] = alias;
861
+ result[index++] = datum;
862
+ }
863
+ return {
864
+ dataset: result,
865
+ foldInfo
866
+ };
867
+ };
868
+ const reshapePivotTable = (advancedVSeed, context)=>{
869
+ const result = {
870
+ ...advancedVSeed
871
+ };
872
+ const { vseed } = context;
873
+ const { dataset, chartType } = vseed;
874
+ const { dimensions, measures } = advancedVSeed;
875
+ const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measures), {
876
+ measureId: FoldMeasureId,
877
+ measureName: FoldMeasureName,
878
+ measureValue: FoldMeasureValue
879
+ });
880
+ const datasetReshapeInfo = [
881
+ {
882
+ id: String(chartType),
883
+ index: 0,
884
+ foldInfo
885
+ }
886
+ ];
887
+ return {
888
+ ...result,
889
+ dataset: newDatasets,
890
+ datasetReshapeInfo: datasetReshapeInfo,
891
+ dimensions,
892
+ measures
893
+ };
894
+ };
789
895
  const pivotTableAdvancedPipeline = [
790
896
  initAdvancedVSeed,
791
897
  autoPivotMeasures,
792
898
  autoPivotDimensions,
793
- records_records,
899
+ reshapePivotTable,
794
900
  pivotTableConfig,
795
901
  theme_theme
796
902
  ];
@@ -837,7 +943,7 @@ const initPivotTable = (spec, context)=>{
837
943
  const pivotColumns = (spec, context)=>{
838
944
  const { advancedVSeed } = context;
839
945
  const dimensions = advancedVSeed.dimensions;
840
- const columns = dimensions.filter((item)=>'columnDimension' === item['location']);
946
+ const columns = dimensions.filter((item)=>'columnDimension' === item['location'] || 'column' === item['encoding']);
841
947
  return {
842
948
  ...spec,
843
949
  columns: columns.map((item)=>({
@@ -850,7 +956,7 @@ const pivotColumns = (spec, context)=>{
850
956
  const pivotRows = (spec, context)=>{
851
957
  const { advancedVSeed } = context;
852
958
  const dimensions = advancedVSeed.dimensions;
853
- const rows = dimensions.filter((item)=>'rowDimension' === item['location']);
959
+ const rows = dimensions.filter((item)=>'rowDimension' === item['location'] || 'row' === item['encoding']);
854
960
  return {
855
961
  ...spec,
856
962
  rows: rows.map((item)=>({
@@ -862,25 +968,31 @@ const pivotRows = (spec, context)=>{
862
968
  };
863
969
  const pivotIndicators = (spec, context)=>{
864
970
  const { advancedVSeed } = context;
865
- const { locale } = advancedVSeed;
866
- const measures = advancedVSeed.measures;
971
+ const { locale, measures, datasetReshapeInfo } = advancedVSeed;
972
+ const { foldInfo } = datasetReshapeInfo[0];
867
973
  return {
868
974
  ...spec,
869
975
  indicatorsAsCol: true,
870
976
  indicatorTitle: intl.i18n`指标名称`,
871
- indicators: measures.map((item)=>{
872
- if (isMeasure(item)) return {
977
+ hideIndicatorName: true,
978
+ indicators: [
979
+ {
873
980
  cellType: 'text',
874
- indicatorKey: item.id,
875
- title: item.alias || item.id,
981
+ indicatorKey: foldInfo.measureValue,
982
+ title: 'indicator',
876
983
  width: 'auto',
877
- format: pivotIndicators_fieldFormat(item, locale)
878
- };
879
- return {};
880
- })
984
+ format: pivotIndicators_fieldFormat(measures, foldInfo, locale)
985
+ }
986
+ ]
881
987
  };
882
988
  };
883
- const pivotIndicators_fieldFormat = (node, locale)=>(value)=>{
989
+ const pivotIndicators_fieldFormat = (measures, foldInfo, locale)=>(value, col, row, table)=>{
990
+ if (!isNumber(col) || !isNumber(row) || !table) return value;
991
+ const datum = table.getCellOriginRecord(col, row);
992
+ const { measureId: foldMeasureId } = foldInfo;
993
+ const measureId = datum[0][foldMeasureId];
994
+ const node = findMeasureById(measures, measureId);
995
+ if (!node) return value;
884
996
  const { format = {}, autoFormat = true } = node;
885
997
  if (!external_remeda_isEmpty(format)) {
886
998
  const formatter = createFormatter(format);
@@ -1036,94 +1148,81 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
1036
1148
  locale: locale || 'zh-CN'
1037
1149
  };
1038
1150
  };
1039
- const ORIGINAL_DATA = '__OriginalData__';
1040
- const Separator = '-';
1041
- const FoldMeasureName = '__MeaName__';
1042
- const FoldMeasureId = '__MeaId__';
1043
- const FoldMeasureValue = '__MeaValue__';
1044
- const MeasureName = FoldMeasureName;
1045
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1046
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1047
- const FoldXMeasureValue = '__MeaXValue__';
1048
- const FoldYMeasureValue = '__MeaYValue__';
1049
- const XEncoding = '__Dim_X__';
1050
- const YEncoding = '__Dim_Y__';
1051
- const AngleEncoding = '__Dim_Angle__';
1052
- const DetailEncoding = '__Dim_Detail__';
1053
- const ColorEncoding = '__Dim_Color__';
1054
- const ColorIdEncoding = '__Dim_ColorId__';
1055
- const getBasicDimensions = (vseed)=>{
1056
- const { dimensions, dataset } = vseed;
1057
- const MeaName = {
1058
- id: MeasureName,
1059
- alias: intl.i18n`指标名称`
1151
+ const defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
1152
+ const { vseed } = context;
1153
+ const { measures, dataset } = vseed;
1154
+ if (measures && measures.length > 0) return {
1155
+ ...advancedVSeed,
1156
+ measures
1060
1157
  };
1061
1158
  if (!dataset) throw new Error('dataset is required');
1062
- if (0 === dataset.length) return [];
1063
- if (dimensions) {
1064
- const basicDimensions = dimensions.map((dim)=>({
1065
- location: 'dimension',
1066
- ...dim
1067
- }));
1068
- if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1069
- basicDimensions.push(MeaName);
1070
- return basicDimensions;
1071
- }
1159
+ if (0 === dataset.length) return {
1160
+ ...advancedVSeed,
1161
+ measures: []
1162
+ };
1072
1163
  const top100dataset = dataset.slice(0, 100);
1073
1164
  const sample = top100dataset.reduce((prev, cur)=>({
1074
1165
  ...prev,
1075
1166
  ...cur
1076
1167
  }), {});
1077
- const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1168
+ const defaultMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1078
1169
  '',
1079
1170
  null,
1080
1171
  void 0
1081
- ].includes(key)).map((dim)=>({
1082
- id: dim,
1083
- alias: dim,
1084
- location: 'dimension'
1172
+ ].includes(key)).map((measure)=>({
1173
+ id: measure,
1174
+ alias: measure
1085
1175
  }));
1086
- basicDimensions.push(MeaName);
1087
- return basicDimensions;
1088
- };
1089
- const getBasicMeasures = (vseed)=>{
1090
- const { dataset, measures } = vseed;
1091
- if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1092
- return measures;
1176
+ return {
1177
+ ...advancedVSeed,
1178
+ measures: defaultMeasures
1179
+ };
1093
1180
  };
1094
- const generateMeasuresByDataset = (dataset)=>{
1181
+ const defaultDimensions = (advancedVSeed, context)=>{
1182
+ const result = {
1183
+ ...advancedVSeed
1184
+ };
1185
+ const { vseed } = context;
1186
+ const { dimensions, dataset } = vseed;
1187
+ if (dimensions && dimensions.length > 0) return {
1188
+ ...result,
1189
+ dimensions
1190
+ };
1095
1191
  if (!dataset) throw new Error('dataset is required');
1096
- if (0 === dataset.length) return [];
1192
+ if (0 === dataset.length) return result;
1193
+ const measures = findAllMeasures(advancedVSeed.measures);
1097
1194
  const top100dataset = dataset.slice(0, 100);
1098
1195
  const sample = top100dataset.reduce((prev, cur)=>({
1099
1196
  ...prev,
1100
1197
  ...cur
1101
1198
  }), {});
1102
- const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1199
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1103
1200
  '',
1104
1201
  null,
1105
1202
  void 0
1106
- ].includes(key)).map((measure)=>({
1107
- id: measure,
1108
- alias: measure
1203
+ ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1204
+ id: dim,
1205
+ alias: dim
1109
1206
  }));
1110
- return basicMeasures;
1111
- };
1112
- const isMeasureTreeWithChildren = (vseed)=>{
1113
- const { measures } = vseed;
1114
- if (!measures) return false;
1115
- return measures.some((measure)=>'children' in measure);
1207
+ return {
1208
+ ...result,
1209
+ dimensions: newDimensions
1210
+ };
1116
1211
  };
1117
- const isMeasureTreeWithParentId = (vseed)=>{
1118
- const { measures } = vseed;
1119
- if (!measures) return false;
1120
- return measures.some((measure)=>'parentId' in measure);
1212
+ const defaultMeasureName = (advancedVSeed)=>{
1213
+ const result = {
1214
+ ...advancedVSeed
1215
+ };
1216
+ const MeaName = {
1217
+ id: MeasureName,
1218
+ alias: intl.i18n`指标名称`
1219
+ };
1220
+ if (!result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push(MeaName);
1221
+ return result;
1121
1222
  };
1122
- const encodingForLine = (advancedVSeed, context)=>{
1123
- const { vseed } = context;
1124
- const { measures: vseedMeasures = [] } = vseed;
1125
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1126
- const dimensions = getBasicDimensions(vseed);
1223
+ const encodingForLine = (advancedVSeed)=>{
1224
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
1225
+ const measures = findAllMeasures(vseedMeasures);
1127
1226
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1128
1227
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
1129
1228
  const encoding = {};
@@ -1136,10 +1235,6 @@ const encodingForLine = (advancedVSeed, context)=>{
1136
1235
  encoding
1137
1236
  };
1138
1237
  };
1139
- const generateDefaultMeasureEncoding = (measures, encoding)=>{
1140
- encoding.tooltip = unique(measures.map((item)=>item.id));
1141
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1142
- };
1143
1238
  const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1144
1239
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
1145
1240
  encoding.x = uniqueDimIds.slice(0, 1);
@@ -1150,20 +1245,36 @@ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1150
1245
  encoding.row = [];
1151
1246
  encoding.column = [];
1152
1247
  };
1153
- const generateMeasureEncoding = (measures, encoding)=>{
1154
- encoding.tooltip = measures.map((item)=>item.id);
1155
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1156
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1157
- if (color.length > 0) encoding.color = color;
1158
- };
1159
1248
  const generateDimensionEncoding = (dimensions, encoding)=>{
1160
1249
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
1161
1250
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1162
- encoding.detail = [];
1251
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1163
1252
  if (0 === encoding.x.length) encoding.x = [
1164
1253
  dimensions[0].id
1165
1254
  ];
1166
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1255
+ if (0 === encoding.color.length) encoding.color = [
1256
+ MeasureName
1257
+ ];
1258
+ };
1259
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1260
+ encoding.tooltip = unique(measures.map((item)=>item.id));
1261
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1262
+ };
1263
+ const generateMeasureEncoding = (measures, encoding)=>{
1264
+ encoding.tooltip = measures.map((item)=>item.id);
1265
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1266
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1267
+ if (color.length > 0) encoding.color = color;
1268
+ };
1269
+ const isMeasureTreeWithChildren = (vseed)=>{
1270
+ const { measures } = vseed;
1271
+ if (!measures) return false;
1272
+ return measures.some((measure)=>'children' in measure);
1273
+ };
1274
+ const isMeasureTreeWithParentId = (vseed)=>{
1275
+ const { measures } = vseed;
1276
+ if (!measures) return false;
1277
+ return measures.some((measure)=>'parentId' in measure);
1167
1278
  };
1168
1279
  const measureDepth = (measures = [])=>{
1169
1280
  if (!measures) return 0;
@@ -1223,9 +1334,7 @@ const buildMeasures = (advancedVSeed, context)=>{
1223
1334
  advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1224
1335
  return advancedVSeed;
1225
1336
  }
1226
- const basicMeasures = getBasicMeasures(vseed);
1227
- if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1228
- else advancedVSeed.measures = basicMeasures;
1337
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(advancedVSeed.measures);
1229
1338
  return advancedVSeed;
1230
1339
  };
1231
1340
  const generateMeasuresByParentId = (measures)=>{
@@ -1256,102 +1365,12 @@ const basicMeasuresToMeasureTree = (measures)=>{
1256
1365
  }
1257
1366
  ];
1258
1367
  };
1259
- const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1260
- const result = {
1261
- ...advancedVSeed
1262
- };
1263
- const { vseed } = context;
1264
- const { dimensions, dataset } = vseed;
1265
- const measures = findAllMeasures(advancedVSeed.measures);
1266
- const MeaName = {
1267
- id: MeasureName,
1268
- alias: intl.i18n`指标名称`
1269
- };
1270
- if (!dataset) throw new Error('dataset is required');
1271
- if (0 === dataset.length) return result;
1272
- if (dimensions) {
1273
- result.dimensions = dimensions.map((dim)=>({
1274
- location: 'dimension',
1275
- ...dim
1276
- }));
1277
- if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
1278
- result.dimensions.push(MeaName);
1279
- return result;
1280
- }
1281
- const top100dataset = dataset.slice(0, 100);
1282
- const sample = top100dataset.reduce((prev, cur)=>({
1283
- ...prev,
1284
- ...cur
1285
- }), {});
1286
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1287
- '',
1288
- null,
1289
- void 0
1290
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1291
- id: dim,
1292
- alias: dim,
1293
- location: 'dimension'
1294
- }));
1295
- result.dimensions.push(MeaName);
1296
- return result;
1297
- };
1298
1368
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1299
1369
  const { vseed } = context;
1300
1370
  const usePivotChart = isPivotChart(vseed);
1301
1371
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1302
1372
  return execPipeline(pipeline, context, advancedVSeed);
1303
1373
  };
1304
- const foldMeasures = (dataset, measures, options)=>{
1305
- const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1306
- const foldInfo = {
1307
- measureId,
1308
- measureName,
1309
- measureValue,
1310
- colorRange: [
1311
- 0,
1312
- 1
1313
- ],
1314
- measureRange: [
1315
- 0,
1316
- 1
1317
- ],
1318
- foldMap: {}
1319
- };
1320
- const result = new Array(dataset.length * measures.length);
1321
- let index = 0;
1322
- const ids = measures.map((d)=>d.id);
1323
- for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
1324
- const datum = omit({
1325
- ...dataset[i]
1326
- }, ids);
1327
- datum[ORIGINAL_DATA] = dataset[i];
1328
- const measure = measures[j];
1329
- const { id, alias } = measure;
1330
- datum[id] = dataset[i][id];
1331
- datum[measureId] = id;
1332
- datum[measureName] = alias || id;
1333
- datum[measureValue] = dataset[i][id];
1334
- if (colorMeasureId) {
1335
- const value = datum[ORIGINAL_DATA][colorMeasureId];
1336
- datum[ColorEncoding] = value;
1337
- datum[ColorIdEncoding] = colorMeasureId;
1338
- foldInfo.colorRange = [
1339
- Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
1340
- Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
1341
- ];
1342
- }
1343
- foldInfo.measureRange = [
1344
- Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
1345
- Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
1346
- ];
1347
- foldInfo.foldMap[id] = alias;
1348
- result[index++] = datum;
1349
- }
1350
- return {
1351
- dataset: result,
1352
- foldInfo
1353
- };
1354
- };
1355
1374
  const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1356
1375
  const { foldMeasureId, separator, colorItemAsId } = options;
1357
1376
  const unfoldInfo = {
@@ -1446,7 +1465,9 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1446
1465
  const { dimensions, measures, encoding } = advancedVSeed;
1447
1466
  if (!measures || !dimensions || !dataset || !encoding) return result;
1448
1467
  if (0 === measures.length) throw new Error('measures can not be empty');
1468
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1449
1469
  const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(findAllMeasures(measures), (item)=>item.id), encoding, {
1470
+ colorItemAsId: hasEncoding,
1450
1471
  colorMeasureId: getColorMeasureId(advancedVSeed)
1451
1472
  });
1452
1473
  return {
@@ -1477,6 +1498,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1477
1498
  if (measures) measures.forEach((measure)=>{
1478
1499
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1479
1500
  });
1501
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1480
1502
  const datasets = [];
1481
1503
  const datasetReshapeInfo = [];
1482
1504
  measureGroups.forEach((measureGroup, index)=>{
@@ -1484,6 +1506,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1484
1506
  if (!measures) return;
1485
1507
  const groupId = measureGroup.id;
1486
1508
  const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
1509
+ colorItemAsId: hasEncoding,
1487
1510
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1488
1511
  colorMeasureId: getColorMeasureId(advancedVSeed)
1489
1512
  });
@@ -1692,9 +1715,11 @@ const annotation_annotation = (advancedVSeed, context)=>{
1692
1715
  };
1693
1716
  const lineAdvancedPipeline = [
1694
1717
  initAdvancedVSeed_initAdvancedVSeed,
1718
+ defaultMeasures_defaultMeasures,
1719
+ defaultDimensions,
1720
+ defaultMeasureName,
1695
1721
  encodingForLine,
1696
1722
  buildMeasures,
1697
- autoDimensions_autoDimensions,
1698
1723
  pivotAdapter([
1699
1724
  reshapeWithEncoding
1700
1725
  ], [
@@ -3290,7 +3315,7 @@ const pivotRowDimensions = (spec, context)=>{
3290
3315
  const { advancedVSeed } = context;
3291
3316
  const dimensions = advancedVSeed.dimensions;
3292
3317
  if (!dimensions) return result;
3293
- const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location);
3318
+ const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location || 'row' === dim.encoding);
3294
3319
  const rows = rowDimensions.map((dim)=>({
3295
3320
  dimensionKey: dim.id,
3296
3321
  title: dim.alias || dim.id
@@ -3307,7 +3332,7 @@ const pivotColumnDimensions = (spec, context)=>{
3307
3332
  const { advancedVSeed } = context;
3308
3333
  const dimensions = advancedVSeed.dimensions;
3309
3334
  if (!dimensions) return result;
3310
- const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location);
3335
+ const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location || 'column' === dim.encoding);
3311
3336
  const columns = columnDimensions.map((dim)=>({
3312
3337
  dimensionKey: dim.id,
3313
3338
  title: dim.alias || dim.id
@@ -3580,11 +3605,9 @@ const registerLine = ()=>{
3580
3605
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3581
3606
  Builder._specPipelineMap.line = lineSpecPipeline;
3582
3607
  };
3583
- const encodingForColumn = (advancedVSeed, context)=>{
3584
- const { vseed } = context;
3585
- const { measures: vseedMeasures = [] } = vseed;
3586
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3587
- const dimensions = getBasicDimensions(vseed);
3608
+ const encodingForColumn = (advancedVSeed)=>{
3609
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
3610
+ const measures = findAllMeasures(vseedMeasures);
3588
3611
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3589
3612
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
3590
3613
  const encoding = {};
@@ -3597,10 +3620,6 @@ const encodingForColumn = (advancedVSeed, context)=>{
3597
3620
  encoding
3598
3621
  };
3599
3622
  };
3600
- const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3601
- encoding.tooltip = unique(measures.map((item)=>item.id));
3602
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3603
- };
3604
3623
  const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3605
3624
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3606
3625
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -3612,13 +3631,6 @@ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3612
3631
  encoding.row = [];
3613
3632
  encoding.column = [];
3614
3633
  };
3615
- const column_generateMeasureEncoding = (measures, encoding)=>{
3616
- encoding.tooltip = measures.map((item)=>item.id);
3617
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3618
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3619
- if (color.length > 0) encoding.color = color;
3620
- return encoding;
3621
- };
3622
3634
  const column_generateDimensionEncoding = (dimensions, encoding)=>{
3623
3635
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
3624
3636
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -3626,14 +3638,28 @@ const column_generateDimensionEncoding = (dimensions, encoding)=>{
3626
3638
  if (0 === encoding.x.length) encoding.x = [
3627
3639
  dimensions[0].id
3628
3640
  ];
3629
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3630
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3641
+ if (0 === encoding.color.length) encoding.color = [
3642
+ MeasureName
3643
+ ];
3644
+ };
3645
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3646
+ encoding.tooltip = unique(measures.map((item)=>item.id));
3647
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3648
+ };
3649
+ const column_generateMeasureEncoding = (measures, encoding)=>{
3650
+ encoding.tooltip = measures.map((item)=>item.id);
3651
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3652
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3653
+ if (color.length > 0) encoding.color = color;
3654
+ return encoding;
3631
3655
  };
3632
3656
  const columnAdvancedPipeline = [
3633
3657
  initAdvancedVSeed_initAdvancedVSeed,
3658
+ defaultMeasures_defaultMeasures,
3659
+ defaultDimensions,
3660
+ defaultMeasureName,
3634
3661
  encodingForColumn,
3635
3662
  buildMeasures,
3636
- autoDimensions_autoDimensions,
3637
3663
  pivotAdapter([
3638
3664
  reshapeWithEncoding
3639
3665
  ], [
@@ -3993,9 +4019,11 @@ const registerColumn = ()=>{
3993
4019
  };
3994
4020
  const columnParallelAdvancedPipeline = [
3995
4021
  initAdvancedVSeed_initAdvancedVSeed,
4022
+ defaultMeasures_defaultMeasures,
4023
+ defaultDimensions,
4024
+ defaultMeasureName,
3996
4025
  encodingForColumn,
3997
4026
  buildMeasures,
3998
- autoDimensions_autoDimensions,
3999
4027
  pivotAdapter([
4000
4028
  reshapeWithEncoding
4001
4029
  ], [
@@ -4090,9 +4118,11 @@ const registerColumnParallel = ()=>{
4090
4118
  };
4091
4119
  const columnPercentAdvancedPipeline = [
4092
4120
  initAdvancedVSeed_initAdvancedVSeed,
4121
+ defaultMeasures_defaultMeasures,
4122
+ defaultDimensions,
4123
+ defaultMeasureName,
4093
4124
  encodingForColumn,
4094
4125
  buildMeasures,
4095
- autoDimensions_autoDimensions,
4096
4126
  pivotAdapter([
4097
4127
  reshapeWithEncoding
4098
4128
  ], [
@@ -4169,11 +4199,9 @@ const registerColumnPercent = ()=>{
4169
4199
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4170
4200
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4171
4201
  };
4172
- const encodingForBar = (advancedVSeed, context)=>{
4173
- const { vseed } = context;
4174
- const { measures: vseedMeasures = [] } = vseed;
4175
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4176
- const dimensions = getBasicDimensions(vseed);
4202
+ const encodingForBar = (advancedVSeed)=>{
4203
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
4204
+ const measures = findAllMeasures(vseedMeasures);
4177
4205
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4178
4206
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
4179
4207
  const encoding = {};
@@ -4215,7 +4243,9 @@ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4215
4243
  if (0 === encoding.y.length) encoding.y = [
4216
4244
  dimensions[0].id
4217
4245
  ];
4218
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4246
+ if (0 === encoding.color.length) encoding.color = [
4247
+ MeasureName
4248
+ ];
4219
4249
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4220
4250
  };
4221
4251
  const sortYBandAxis = (advancedVSeed, context)=>{
@@ -4236,9 +4266,11 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4236
4266
  };
4237
4267
  const barAdvancedPipeline = [
4238
4268
  initAdvancedVSeed_initAdvancedVSeed,
4269
+ defaultMeasures_defaultMeasures,
4270
+ defaultDimensions,
4271
+ defaultMeasureName,
4239
4272
  encodingForBar,
4240
4273
  buildMeasures,
4241
- autoDimensions_autoDimensions,
4242
4274
  pivotAdapter([
4243
4275
  reshapeWithEncoding
4244
4276
  ], [
@@ -4589,9 +4621,11 @@ const registerBar = ()=>{
4589
4621
  };
4590
4622
  const barParallelAdvancedPipeline = [
4591
4623
  initAdvancedVSeed_initAdvancedVSeed,
4592
- buildMeasures,
4593
- autoDimensions_autoDimensions,
4624
+ defaultMeasures_defaultMeasures,
4625
+ defaultDimensions,
4626
+ defaultMeasureName,
4594
4627
  encodingForBar,
4628
+ buildMeasures,
4595
4629
  pivotAdapter([
4596
4630
  reshapeWithEncoding
4597
4631
  ], [
@@ -4685,9 +4719,11 @@ const registerBarParallel = ()=>{
4685
4719
  };
4686
4720
  const barPercentAdvancedPipeline = [
4687
4721
  initAdvancedVSeed_initAdvancedVSeed,
4688
- buildMeasures,
4689
- autoDimensions_autoDimensions,
4722
+ defaultMeasures_defaultMeasures,
4723
+ defaultDimensions,
4724
+ defaultMeasureName,
4690
4725
  encodingForBar,
4726
+ buildMeasures,
4691
4727
  pivotAdapter([
4692
4728
  reshapeWithEncoding
4693
4729
  ], [
@@ -4756,9 +4792,11 @@ const registerBarPercent = ()=>{
4756
4792
  };
4757
4793
  const areaAdvancedPipeline = [
4758
4794
  initAdvancedVSeed_initAdvancedVSeed,
4795
+ defaultMeasures_defaultMeasures,
4796
+ defaultDimensions,
4797
+ defaultMeasureName,
4759
4798
  encodingForLine,
4760
4799
  buildMeasures,
4761
- autoDimensions_autoDimensions,
4762
4800
  pivotAdapter([
4763
4801
  reshapeWithEncoding
4764
4802
  ], [
@@ -4914,9 +4952,11 @@ const registerArea = ()=>{
4914
4952
  };
4915
4953
  const areaPercentAdvancedPipeline = [
4916
4954
  initAdvancedVSeed_initAdvancedVSeed,
4955
+ defaultMeasures_defaultMeasures,
4956
+ defaultDimensions,
4957
+ defaultMeasureName,
4917
4958
  encodingForLine,
4918
4959
  buildMeasures,
4919
- autoDimensions_autoDimensions,
4920
4960
  pivotAdapter([
4921
4961
  reshapeWithEncoding
4922
4962
  ], [
@@ -4990,11 +5030,9 @@ const registerAreaPercent = ()=>{
4990
5030
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
4991
5031
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
4992
5032
  };
4993
- const encodingForScatter = (advancedVSeed, context)=>{
4994
- const { vseed } = context;
4995
- const { measures: vseedMeasures = [] } = vseed;
4996
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4997
- const dimensions = getBasicDimensions(vseed);
5033
+ const encodingForScatter = (advancedVSeed)=>{
5034
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5035
+ const measures = findAllMeasures(vseedMeasures);
4998
5036
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4999
5037
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5000
5038
  const encoding = {};
@@ -5030,7 +5068,9 @@ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5030
5068
  const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5031
5069
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5032
5070
  encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5033
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5071
+ if (0 === encoding.color.length) encoding.color = [
5072
+ MeasureName
5073
+ ];
5034
5074
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5035
5075
  };
5036
5076
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
@@ -5043,8 +5083,7 @@ const buildMeasuresForScatter = (advancedVSeed, context)=>{
5043
5083
  advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5044
5084
  return advancedVSeed;
5045
5085
  }
5046
- const basicMeasures = getBasicMeasures(vseed);
5047
- const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5086
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(advancedVSeed.measures || []);
5048
5087
  advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5049
5088
  return advancedVSeed;
5050
5089
  };
@@ -5263,9 +5302,11 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5263
5302
  };
5264
5303
  const scatterAdvancedPipeline = [
5265
5304
  initAdvancedVSeed_initAdvancedVSeed,
5305
+ defaultMeasures_defaultMeasures,
5306
+ defaultDimensions,
5307
+ defaultMeasureName,
5266
5308
  encodingForScatter,
5267
5309
  buildMeasuresForScatter,
5268
- autoDimensions_autoDimensions,
5269
5310
  pivotAdapter([
5270
5311
  reshapeWithScatterEncoding
5271
5312
  ], [
@@ -5410,11 +5451,9 @@ const registerScatter = ()=>{
5410
5451
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5411
5452
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5412
5453
  };
5413
- const encodingForDualAxis = (advancedVSeed, context)=>{
5414
- const { vseed } = context;
5415
- const { measures: vseedMeasures = [] } = vseed;
5416
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5417
- const dimensions = getBasicDimensions(vseed);
5454
+ const encodingForDualAxis = (advancedVSeed)=>{
5455
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5456
+ const measures = findAllMeasures(vseedMeasures);
5418
5457
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5419
5458
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5420
5459
  const encoding = {};
@@ -5456,7 +5495,9 @@ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5456
5495
  if (0 === encoding.x.length) encoding.x = [
5457
5496
  dimensions[0].id
5458
5497
  ];
5459
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5498
+ if (0 === encoding.color.length) encoding.color = [
5499
+ MeasureName
5500
+ ];
5460
5501
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5461
5502
  };
5462
5503
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
@@ -5469,8 +5510,7 @@ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5469
5510
  advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5470
5511
  return advancedVSeed;
5471
5512
  }
5472
- const basicMeasures = getBasicMeasures(vseed);
5473
- const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5513
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(advancedVSeed.measures || []);
5474
5514
  advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5475
5515
  return advancedVSeed;
5476
5516
  };
@@ -5574,8 +5614,10 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5574
5614
  const datasets = [];
5575
5615
  const primaryMeasures = measures[0];
5576
5616
  const secondaryMeasures = measures[1] || [];
5617
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
5577
5618
  if (primaryMeasures && primaryMeasures.children) {
5578
5619
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5620
+ colorItemAsId: hasEncoding,
5579
5621
  foldMeasureValue: FoldPrimaryMeasureValue,
5580
5622
  colorMeasureId: getColorMeasureId(advancedVSeed)
5581
5623
  });
@@ -5622,6 +5664,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5622
5664
  const { dataset } = vseed;
5623
5665
  const { dimensions, measures, encoding, chartType } = advancedVSeed;
5624
5666
  if (!measures || !dimensions || !dataset || !encoding) return result;
5667
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
5625
5668
  const datasetList = [];
5626
5669
  const datasetReshapeInfo = [];
5627
5670
  const measureGroups = [];
@@ -5640,6 +5683,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5640
5683
  const secondaryMeasures = measures[1] || [];
5641
5684
  if (primaryMeasures && primaryMeasures.children) {
5642
5685
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5686
+ colorItemAsId: hasEncoding,
5643
5687
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
5644
5688
  colorMeasureId: getColorMeasureId(advancedVSeed)
5645
5689
  });
@@ -5708,9 +5752,11 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5708
5752
  };
5709
5753
  const dualAxisAdvancedPipeline = [
5710
5754
  initAdvancedVSeed_initAdvancedVSeed,
5755
+ defaultMeasures_defaultMeasures,
5756
+ defaultDimensions,
5757
+ defaultMeasureName,
5711
5758
  encodingForDualAxis,
5712
5759
  buildMeasuresForDualAxis,
5713
- autoDimensions_autoDimensions,
5714
5760
  pivotAdapter([
5715
5761
  reshapeWithDualEncoding
5716
5762
  ], [
@@ -6543,11 +6589,9 @@ const registerDualAxis = ()=>{
6543
6589
  Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6544
6590
  Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
6545
6591
  };
6546
- const encodingForPie = (advancedVSeed, context)=>{
6547
- const { vseed } = context;
6548
- const { measures: vseedMeasures = [] } = vseed;
6549
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6550
- const dimensions = getBasicDimensions(vseed);
6592
+ const encodingForPie = (advancedVSeed)=>{
6593
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
6594
+ const measures = findAllMeasures(vseedMeasures);
6551
6595
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6552
6596
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
6553
6597
  const encoding = {};
@@ -6582,14 +6626,18 @@ const pie_generateMeasureEncoding = (measures, encoding)=>{
6582
6626
  const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6583
6627
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6584
6628
  encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6585
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
6629
+ if (0 === encoding.color.length) encoding.color = [
6630
+ MeasureName
6631
+ ];
6586
6632
  if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6587
6633
  };
6588
6634
  const pieAdvancedPipeline = [
6589
6635
  initAdvancedVSeed_initAdvancedVSeed,
6636
+ defaultMeasures_defaultMeasures,
6637
+ defaultDimensions,
6638
+ defaultMeasureName,
6590
6639
  encodingForPie,
6591
6640
  buildMeasures,
6592
- autoDimensions_autoDimensions,
6593
6641
  pivotAdapter([
6594
6642
  reshapeWithEncoding
6595
6643
  ], [
@@ -6705,8 +6753,10 @@ const registerPie = ()=>{
6705
6753
  };
6706
6754
  const donutAdvancedPipeline = [
6707
6755
  initAdvancedVSeed_initAdvancedVSeed,
6756
+ defaultMeasures_defaultMeasures,
6757
+ defaultDimensions,
6758
+ defaultMeasureName,
6708
6759
  buildMeasures,
6709
- autoDimensions_autoDimensions,
6710
6760
  encodingForPie,
6711
6761
  pivotAdapter([
6712
6762
  reshapeWithEncoding
@@ -6783,11 +6833,9 @@ const registerDonut = ()=>{
6783
6833
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
6784
6834
  Builder._specPipelineMap.donut = donutSpecPipeline;
6785
6835
  };
6786
- const encodingForRose = (advancedVSeed, context)=>{
6787
- const { vseed } = context;
6788
- const { measures: vseedMeasures = [] } = vseed;
6789
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6790
- const dimensions = getBasicDimensions(vseed);
6836
+ const encodingForRose = (advancedVSeed)=>{
6837
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
6838
+ const measures = findAllMeasures(vseedMeasures);
6791
6839
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6792
6840
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
6793
6841
  const encoding = {};
@@ -6828,14 +6876,18 @@ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
6828
6876
  if (0 === encoding.angle.length) encoding.angle = [
6829
6877
  dimensions[0].id
6830
6878
  ];
6831
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6879
+ if (0 === encoding.color.length) encoding.color = [
6880
+ MeasureName
6881
+ ];
6832
6882
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6833
6883
  };
6834
6884
  const roseAdvancedPipeline = [
6835
6885
  initAdvancedVSeed_initAdvancedVSeed,
6886
+ defaultMeasures_defaultMeasures,
6887
+ defaultDimensions,
6888
+ defaultMeasureName,
6836
6889
  encodingForRose,
6837
6890
  buildMeasures,
6838
- autoDimensions_autoDimensions,
6839
6891
  pivotAdapter([
6840
6892
  reshapeWithEncoding
6841
6893
  ], [
@@ -7031,9 +7083,11 @@ const registerRose = ()=>{
7031
7083
  };
7032
7084
  const roseParallelAdvancedPipeline = [
7033
7085
  initAdvancedVSeed_initAdvancedVSeed,
7086
+ defaultMeasures_defaultMeasures,
7087
+ defaultDimensions,
7088
+ defaultMeasureName,
7034
7089
  encodingForRose,
7035
7090
  buildMeasures,
7036
- autoDimensions_autoDimensions,
7037
7091
  pivotAdapter([
7038
7092
  reshapeWithEncoding
7039
7093
  ], [
@@ -7139,11 +7193,9 @@ const registerRoseParallel = ()=>{
7139
7193
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7140
7194
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7141
7195
  };
7142
- const encodingForRadar = (advancedVSeed, context)=>{
7143
- const { vseed } = context;
7144
- const { measures: vseedMeasures = [] } = vseed;
7145
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7146
- const dimensions = getBasicDimensions(vseed);
7196
+ const encodingForRadar = (advancedVSeed)=>{
7197
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7198
+ const measures = findAllMeasures(vseedMeasures);
7147
7199
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7148
7200
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7149
7201
  const encoding = {};
@@ -7183,13 +7235,17 @@ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7183
7235
  if (0 === encoding.angle.length) encoding.angle = [
7184
7236
  dimensions[0].id
7185
7237
  ];
7186
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7238
+ if (0 === encoding.color.length) encoding.color = [
7239
+ MeasureName
7240
+ ];
7187
7241
  };
7188
7242
  const radarAdvancedPipeline = [
7189
7243
  initAdvancedVSeed_initAdvancedVSeed,
7244
+ defaultMeasures_defaultMeasures,
7245
+ defaultDimensions,
7246
+ defaultMeasureName,
7190
7247
  encodingForRadar,
7191
7248
  buildMeasures,
7192
- autoDimensions_autoDimensions,
7193
7249
  pivotAdapter([
7194
7250
  reshapeWithEncoding
7195
7251
  ], [
@@ -7323,11 +7379,9 @@ const registerRadar = ()=>{
7323
7379
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7324
7380
  Builder._specPipelineMap.radar = radarSpecPipeline;
7325
7381
  };
7326
- const encodingForFunnel = (advancedVSeed, context)=>{
7327
- const { vseed } = context;
7328
- const { measures: vseedMeasures = [] } = vseed;
7329
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7330
- const dimensions = getBasicDimensions(vseed);
7382
+ const encodingForFunnel = (advancedVSeed)=>{
7383
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7384
+ const measures = findAllMeasures(vseedMeasures);
7331
7385
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7332
7386
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7333
7387
  const encoding = {};
@@ -7362,14 +7416,18 @@ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7362
7416
  const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7363
7417
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7364
7418
  encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7365
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7419
+ if (0 === encoding.color.length) encoding.color = [
7420
+ MeasureName
7421
+ ];
7366
7422
  if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7367
7423
  };
7368
7424
  const funnelAdvancedPipeline = [
7369
7425
  initAdvancedVSeed_initAdvancedVSeed,
7426
+ defaultMeasures_defaultMeasures,
7427
+ defaultDimensions,
7428
+ defaultMeasureName,
7370
7429
  encodingForFunnel,
7371
7430
  buildMeasures,
7372
- autoDimensions_autoDimensions,
7373
7431
  pivotAdapter([
7374
7432
  reshapeWithEncoding
7375
7433
  ], [
@@ -7482,11 +7540,9 @@ const registerFunnel = ()=>{
7482
7540
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
7483
7541
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
7484
7542
  };
7485
- const encodingForHeatmap = (advancedVSeed, context)=>{
7486
- const { vseed } = context;
7487
- const { measures: vseedMeasures = [] } = vseed;
7488
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7489
- const dimensions = getBasicDimensions(vseed);
7543
+ const encodingForHeatmap = (advancedVSeed)=>{
7544
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7545
+ const measures = findAllMeasures(vseedMeasures);
7490
7546
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7491
7547
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7492
7548
  const encoding = {};
@@ -7531,14 +7587,18 @@ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7531
7587
  ];
7532
7588
  if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7533
7589
  else encoding.y = dimensions.slice(0).map((item)=>item.id);
7534
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7590
+ if (0 === encoding.color.length) encoding.color = [
7591
+ MeasureName
7592
+ ];
7535
7593
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7536
7594
  };
7537
7595
  const heatmapAdvancedPipeline = [
7538
7596
  initAdvancedVSeed_initAdvancedVSeed,
7597
+ defaultMeasures_defaultMeasures,
7598
+ defaultDimensions,
7599
+ defaultMeasureName,
7539
7600
  encodingForHeatmap,
7540
7601
  buildMeasures,
7541
- autoDimensions_autoDimensions,
7542
7602
  pivotAdapter([
7543
7603
  reshapeWithEncoding
7544
7604
  ], [
@@ -8446,7 +8506,9 @@ const zMeasure = z.object({
8446
8506
  'size',
8447
8507
  'color',
8448
8508
  'label',
8449
- 'tooltip'
8509
+ 'tooltip',
8510
+ 'detail',
8511
+ 'column'
8450
8512
  ]).optional(),
8451
8513
  parentId: z.string().optional()
8452
8514
  });