@visactor/vseed 0.0.40 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/builder/builder/builder.d.ts +61 -671
  2. package/dist/builder/register/chartType/index.d.ts +0 -1
  3. package/dist/dataReshape/constant.d.ts +17 -2
  4. package/dist/dataReshape/dataReshapeByEncoding.d.ts +11 -0
  5. package/dist/dataReshape/index.d.ts +3 -7
  6. package/dist/dataReshape/unfoldDimensions.d.ts +12 -14
  7. package/dist/index.cjs +1184 -1891
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1106 -1822
  11. package/dist/index.js.map +1 -1
  12. package/dist/pipeline/advanced/chart/pipeline/index.d.ts +0 -1
  13. package/dist/pipeline/advanced/chart/pipes/analysis/index.d.ts +3 -1
  14. package/dist/pipeline/advanced/chart/pipes/analysis/sort.d.ts +0 -4
  15. package/dist/pipeline/advanced/chart/pipes/{encoding/encodingAR.d.ts → analysis/sortLegend.d.ts} +1 -1
  16. package/dist/pipeline/advanced/chart/pipes/analysis/sortXBand.d.ts +3 -0
  17. package/dist/pipeline/advanced/chart/pipes/{encoding/encodingPie.d.ts → analysis/sortYBand.d.ts} +1 -1
  18. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingFunnel.d.ts → bar.d.ts} +1 -1
  19. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingAreaRange.d.ts → column.d.ts} +1 -1
  20. package/dist/pipeline/advanced/chart/pipes/encoding/dualAxis.d.ts +2 -0
  21. package/dist/pipeline/advanced/chart/pipes/encoding/funnel.d.ts +2 -0
  22. package/dist/pipeline/advanced/chart/pipes/encoding/heatmap.d.ts +2 -0
  23. package/dist/pipeline/advanced/chart/pipes/encoding/index.d.ts +8 -9
  24. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingMatrix.d.ts → pie.d.ts} +1 -1
  25. package/dist/pipeline/advanced/chart/pipes/encoding/radar.d.ts +2 -0
  26. package/dist/pipeline/advanced/chart/pipes/encoding/rose.d.ts +2 -0
  27. package/dist/pipeline/advanced/chart/pipes/encoding/scatter.d.ts +2 -0
  28. package/dist/pipeline/advanced/chart/pipes/init/autoScatterMeasures.d.ts +2 -0
  29. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +2 -1
  30. package/dist/pipeline/advanced/chart/pipes/reshape/index.d.ts +4 -12
  31. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.d.ts +2 -0
  32. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.d.ts +2 -0
  33. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.d.ts +2 -0
  34. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.d.ts +2 -0
  35. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.d.ts +2 -0
  36. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.d.ts +2 -0
  37. package/dist/pipeline/spec/chart/pipeline/index.d.ts +0 -1
  38. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +0 -1
  39. package/dist/pipeline/spec/chart/pipes/{color/linearColor.d.ts → dataset/datasetScatter.d.ts} +1 -1
  40. package/dist/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -0
  41. package/dist/pipeline/spec/chart/pipes/init/index.d.ts +1 -2
  42. package/dist/pipeline/spec/chart/pipes/legend/index.d.ts +0 -1
  43. package/dist/pipeline/spec/chart/pipes/tooltip/index.d.ts +0 -1
  44. package/dist/types/advancedVSeed.d.ts +26 -311
  45. package/dist/types/chartType/area/area.d.ts +13 -1
  46. package/dist/types/chartType/area/zArea.d.ts +14 -0
  47. package/dist/types/chartType/areaPercent/areaPercent.d.ts +13 -1
  48. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +14 -0
  49. package/dist/types/chartType/bar/bar.d.ts +22 -30
  50. package/dist/types/chartType/bar/zBar.d.ts +14 -0
  51. package/dist/types/chartType/barParallel/barParallel.d.ts +21 -30
  52. package/dist/types/chartType/barParallel/zBarParallel.d.ts +14 -0
  53. package/dist/types/chartType/barPercent/barPercent.d.ts +19 -21
  54. package/dist/types/chartType/barPercent/zBarPercent.d.ts +14 -0
  55. package/dist/types/chartType/column/column.d.ts +19 -28
  56. package/dist/types/chartType/column/zColumn.d.ts +14 -0
  57. package/dist/types/chartType/columnParallel/columnParallel.d.ts +22 -27
  58. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +14 -0
  59. package/dist/types/chartType/columnPercent/columnPercent.d.ts +19 -25
  60. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +14 -0
  61. package/dist/types/chartType/donut/donut.d.ts +12 -1
  62. package/dist/types/chartType/donut/zDonut.d.ts +14 -0
  63. package/dist/types/chartType/dualAxis/dualAxis.d.ts +13 -1
  64. package/dist/types/chartType/funnel/funnel.d.ts +12 -1
  65. package/dist/types/chartType/funnel/zFunnel.d.ts +14 -0
  66. package/dist/types/chartType/heatmap/heatmap.d.ts +13 -1
  67. package/dist/types/chartType/index.d.ts +0 -1
  68. package/dist/types/chartType/line/line.d.ts +17 -10
  69. package/dist/types/chartType/line/zLine.d.ts +14 -0
  70. package/dist/types/chartType/pie/pie.d.ts +12 -1
  71. package/dist/types/chartType/pie/zPie.d.ts +14 -0
  72. package/dist/types/chartType/radar/radar.d.ts +13 -1
  73. package/dist/types/chartType/radar/zRadar.d.ts +14 -0
  74. package/dist/types/chartType/rose/rose.d.ts +13 -1
  75. package/dist/types/chartType/rose/zRose.d.ts +14 -0
  76. package/dist/types/chartType/roseParallel/roseParallel.d.ts +13 -1
  77. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +14 -0
  78. package/dist/types/chartType/scatter/scatter.d.ts +92 -5
  79. package/dist/types/chartType/scatter/zScatter.d.ts +155 -0
  80. package/dist/types/index.d.ts +2 -1
  81. package/dist/types/properties/chartType/chartType.d.ts +1 -3
  82. package/dist/types/properties/config/config.d.ts +0 -307
  83. package/dist/types/properties/datasetReshapeInfo/datasetReshapeInfo.d.ts +13 -38
  84. package/dist/types/properties/datasetReshapeInfo/index.d.ts +1 -1
  85. package/dist/types/properties/datasetReshapeInfo/zDatasetReshapeInfo.d.ts +43 -0
  86. package/dist/types/properties/encoding/encoding.d.ts +49 -16
  87. package/dist/types/properties/encoding/index.d.ts +2 -2
  88. package/dist/types/properties/encoding/zEncoding.d.ts +29 -0
  89. package/dist/types/properties/measures/index.d.ts +4 -2
  90. package/dist/types/properties/measures/scatterMeasures.d.ts +6 -0
  91. package/dist/types/properties/measures/zScatterMeasures.d.ts +283 -0
  92. package/dist/types/properties/theme/customTheme.d.ts +0 -306
  93. package/dist/types/vseed.d.ts +2 -16816
  94. package/dist/types/zVseed.d.ts +15738 -0
  95. package/dist/umd/index.js +1134 -1847
  96. package/dist/umd/index.js.map +1 -1
  97. package/package.json +13 -5
  98. package/dist/builder/register/chartType/areaRange.d.ts +0 -1
  99. package/dist/dataReshape/dataReshapeFor1D.d.ts +0 -19
  100. package/dist/dataReshape/dataReshapeFor1D1M.d.ts +0 -19
  101. package/dist/dataReshape/dataReshapeFor1D2M.d.ts +0 -19
  102. package/dist/dataReshape/dataReshapeFor2D1M.d.ts +0 -19
  103. package/dist/dataReshape/dataReshapeFor2D1M0Name.d.ts +0 -19
  104. package/dist/dataReshape/unfoldZeroDimensions.d.ts +0 -10
  105. package/dist/pipeline/advanced/chart/pipeline/areaRange.d.ts +0 -2
  106. package/dist/pipeline/advanced/chart/pipes/encoding/encodingRose.d.ts +0 -2
  107. package/dist/pipeline/advanced/chart/pipes/encoding/encodingXY.d.ts +0 -2
  108. package/dist/pipeline/advanced/chart/pipes/encoding/encodingXYY.d.ts +0 -2
  109. package/dist/pipeline/advanced/chart/pipes/encoding/encodingYX.d.ts +0 -2
  110. package/dist/pipeline/advanced/chart/pipes/encoding/encodingYY.d.ts +0 -2
  111. package/dist/pipeline/advanced/chart/pipes/init/autoMeasuresBy2M1Group.d.ts +0 -8
  112. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D.d.ts +0 -8
  113. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D1M.d.ts +0 -8
  114. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D2M.d.ts +0 -8
  115. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D1M.d.ts +0 -8
  116. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D1M0Name.d.ts +0 -8
  117. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D2M.d.ts +0 -8
  118. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D.d.ts +0 -8
  119. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D1M.d.ts +0 -8
  120. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D2M.d.ts +0 -8
  121. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D1M.d.ts +0 -8
  122. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D1M0Name.d.ts +0 -8
  123. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D2M.d.ts +0 -8
  124. package/dist/pipeline/spec/chart/pipeline/areaRange.d.ts +0 -1
  125. package/dist/pipeline/spec/chart/pipes/init/areaRange.d.ts +0 -4
  126. package/dist/pipeline/spec/chart/pipes/legend/colorLegend.d.ts +0 -2
  127. package/dist/pipeline/spec/chart/pipes/tooltip/tooltipAreaRange.d.ts +0 -2
  128. package/dist/types/chartType/areaRange/areaRange.d.ts +0 -151
  129. package/dist/types/chartType/areaRange/index.d.ts +0 -2
  130. package/dist/types/chartType/areaRange/zAreaRange.d.ts +0 -1427
  131. /package/dist/pipeline/spec/chart/pipes/init/{initDualAxis.d.ts → dualAxis.d.ts} +0 -0
package/dist/index.js CHANGED
@@ -1080,13 +1080,26 @@ const isVTable = (vseed)=>[
1080
1080
  const isVChart = (vseed)=>!isVTable(vseed);
1081
1081
  const isPivotChart = (vseed)=>{
1082
1082
  if (isVTable(vseed)) return false;
1083
- if ('dualAxis' === vseed.chartType) {
1084
- if (vseed.measures) {
1085
- const depth = measureDepth(vseed.measures);
1086
- if (3 === depth) return true;
1087
- return false;
1083
+ if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1084
+ const { dimensions = [] } = vseed;
1085
+ const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1086
+ if (hasRowOrColumnDimension) return true;
1087
+ if ('scatter' === vseed.chartType) {
1088
+ if (vseed.measures) {
1089
+ const depth = measureDepth(vseed.measures);
1090
+ if (3 === depth) return true;
1091
+ return false;
1092
+ }
1093
+ if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
1094
+ }
1095
+ if ('dualAxis' === vseed.chartType) {
1096
+ if (vseed.measures) {
1097
+ const depth = measureDepth(vseed.measures);
1098
+ if (3 === depth) return true;
1099
+ return false;
1100
+ }
1101
+ if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1088
1102
  }
1089
- if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1090
1103
  return false;
1091
1104
  }
1092
1105
  const { measures = [], dimensions = [] } = vseed;
@@ -1165,6 +1178,24 @@ const createEmptyMeasureGroup = ()=>({
1165
1178
  alias: '',
1166
1179
  children: []
1167
1180
  });
1181
+ const ORIGINAL_DATA = '__OriginalData__';
1182
+ const Separator = '-';
1183
+ const FoldMeasureName = '__MeaName__';
1184
+ const FoldMeasureId = '__MeaId__';
1185
+ const FoldMeasureValue = '__MeaValue__';
1186
+ const MeasureName = FoldMeasureName;
1187
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1188
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1189
+ const FoldXMeasureValue = '__MeaXValue__';
1190
+ const FoldYMeasureValue = '__MeaYValue__';
1191
+ const XEncoding = '__Dim_X__';
1192
+ const YEncoding = '__Dim_Y__';
1193
+ const AngleEncoding = '__Dim_Angle__';
1194
+ const DetailEncoding = '__Dim_Detail__';
1195
+ const ColorEncoding = '__Dim_Color__';
1196
+ const ColorIdEncoding = '__Dim_ColorId__';
1197
+ const UnfoldDimensionGroup = '__DimGroup__';
1198
+ const UnfoldDimensionGroupId = '__DimGroupID__';
1168
1199
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1169
1200
  const result = {
1170
1201
  ...advancedVSeed
@@ -1172,6 +1203,10 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1172
1203
  const { vseed } = context;
1173
1204
  const { dimensions, dataset } = vseed;
1174
1205
  const measures = findAllMeasures(advancedVSeed.measures);
1206
+ const MeaName = {
1207
+ id: MeasureName,
1208
+ alias: intl.i18n`指标名称`
1209
+ };
1175
1210
  if (!dataset) throw new Error('dataset is required');
1176
1211
  if (0 === dataset.length) return result;
1177
1212
  if (dimensions) {
@@ -1179,6 +1214,8 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1179
1214
  location: 'dimension',
1180
1215
  ...dim
1181
1216
  }));
1217
+ if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
1218
+ result.dimensions.push(MeaName);
1182
1219
  return result;
1183
1220
  }
1184
1221
  const top100dataset = dataset.slice(0, 100);
@@ -1195,23 +1232,57 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1195
1232
  alias: dim,
1196
1233
  location: 'dimension'
1197
1234
  }));
1235
+ result.dimensions.push(MeaName);
1198
1236
  return result;
1199
1237
  };
1238
+ const encodingForColumn = (advancedVSeed, context)=>{
1239
+ const { vseed } = context;
1240
+ const { dimensions } = advancedVSeed;
1241
+ if (!dimensions) return advancedVSeed;
1242
+ const encoding = vseed.encoding;
1243
+ if (encoding) {
1244
+ const x = encoding.x || [
1245
+ dimensions[0].id
1246
+ ];
1247
+ const color = encoding.color || [
1248
+ (dimensions[1] || dimensions[0]).id
1249
+ ];
1250
+ const detail = encoding.detail || [];
1251
+ const mergedDetail = unique([
1252
+ ...color,
1253
+ ...detail
1254
+ ]);
1255
+ return {
1256
+ ...advancedVSeed,
1257
+ encoding: {
1258
+ ...encoding,
1259
+ x,
1260
+ color,
1261
+ detail: mergedDetail
1262
+ }
1263
+ };
1264
+ }
1265
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1266
+ const mergedEncoding = {
1267
+ x: dimensions.slice(0, 1).map((item)=>item.id),
1268
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1269
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1270
+ tooltip: dimensions.map((item)=>item.id),
1271
+ label: [],
1272
+ row: [],
1273
+ column: []
1274
+ };
1275
+ return {
1276
+ ...advancedVSeed,
1277
+ encoding: mergedEncoding
1278
+ };
1279
+ };
1200
1280
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1201
1281
  const { vseed } = context;
1202
1282
  const usePivotChart = isPivotChart(vseed);
1203
1283
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1204
1284
  return execPipeline(pipeline, context, advancedVSeed);
1205
1285
  };
1206
- const FoldMeasureName = '__MeaName__';
1207
- const FoldMeasureId = '__MeaId__';
1208
- const FoldMeasureValue = '__MeaValue__';
1209
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1210
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1211
- const UnfoldDimensionGroup = '__DimGroup__';
1212
- const UnfoldDimensionGroupId = '__DimGroupID__';
1213
- const Separator = '-';
1214
- const ORIGINAL_DATA = '__OriginalData__';
1215
1286
  const foldMeasures = (dataset, measures, measureId = FoldMeasureId, measureName = FoldMeasureName, measureValue = FoldMeasureValue)=>{
1216
1287
  const foldInfo = {
1217
1288
  measureId,
@@ -1241,84 +1312,53 @@ const foldMeasures = (dataset, measures, measureId = FoldMeasureId, measureName
1241
1312
  foldInfo
1242
1313
  };
1243
1314
  };
1244
- const unfoldDimensions = (dataset, dimensions, measures, unfoldStartIndex = 0, unfoldGroupName = UnfoldDimensionGroup, unfoldGroupId = UnfoldDimensionGroupId, foldMeasureId = FoldMeasureId, dimensionsSeparator = Separator)=>{
1245
- if (unfoldStartIndex < 0 || unfoldStartIndex >= dimensions.length) throw new Error('unfoldStartIndex is out of range');
1246
- const dimensionsToBeUnfolded = dimensions.slice(unfoldStartIndex);
1247
- const dimensionsToBeRemain = dimensions.slice(0, unfoldStartIndex);
1315
+ const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1316
+ const { foldMeasureId, separator, colorItemAsId } = options;
1248
1317
  const unfoldInfo = {
1249
- groupName: unfoldGroupName,
1250
- groupId: unfoldGroupId,
1318
+ encodingAngle: AngleEncoding,
1319
+ encodingX: XEncoding,
1320
+ encodingY: YEncoding,
1321
+ encodingDetail: DetailEncoding,
1322
+ encodingColor: ColorEncoding,
1323
+ encodingColorId: ColorIdEncoding,
1251
1324
  colorItems: [],
1252
1325
  colorIdMap: {}
1253
1326
  };
1254
- if (0 === dimensions.length || 0 === measures.length) return {
1255
- dataset,
1256
- unfoldInfo: {
1257
- groupName: unfoldGroupName,
1258
- groupId: unfoldGroupId,
1259
- colorItems: [],
1260
- colorIdMap: {}
1261
- }
1262
- };
1263
- const colorItems = [];
1264
- const colorMap = {};
1327
+ const { color, x, y, detail, angle } = encoding;
1328
+ const angleDimensions = angle ? dimensions.filter((dim)=>angle.includes(dim.id)) : [];
1329
+ const xDimensions = x ? dimensions.filter((dim)=>x.includes(dim.id)) : [];
1330
+ const yDimensions = y ? dimensions.filter((dim)=>y.includes(dim.id)) : [];
1331
+ const colorDimensions = color ? dimensions.filter((dim)=>color.includes(dim.id)) : [];
1332
+ const detailDimensions = detail ? dimensions.filter((dim)=>detail.includes(dim.id)) : [];
1333
+ const colorItems = new Set();
1334
+ const colorIdMap = {};
1265
1335
  for(let i = 0; i < dataset.length; i++){
1266
1336
  const datum = dataset[i];
1267
- const colorName = generateDimGroupName(dimensionsToBeUnfolded, datum, dimensionsSeparator);
1268
- const colorId = datum[foldMeasureId] ? [
1269
- colorName,
1270
- datum[foldMeasureId]
1271
- ].join(dimensionsSeparator) : colorName;
1272
- datum[unfoldGroupName] = colorName;
1273
- datum[unfoldGroupId] = colorId;
1274
- colorItems.push(colorId);
1275
- colorMap[colorId] = colorName;
1276
- if (dimensionsToBeRemain.length > 0) for (const dim of dimensionsToBeRemain){
1277
- const dimValue = datum[dim.id];
1278
- if ('number' == typeof dimValue) datum[dim.id] = String(dimValue);
1279
- }
1337
+ applyEncoding(AngleEncoding, angleDimensions, datum, separator);
1338
+ applyEncoding(XEncoding, xDimensions, datum, separator);
1339
+ applyEncoding(YEncoding, yDimensions, datum, separator);
1340
+ applyEncoding(ColorEncoding, colorDimensions, datum, separator);
1341
+ applyEncoding(DetailEncoding, detailDimensions, datum, separator);
1342
+ if (!datum[ColorEncoding]) continue;
1343
+ const measureId = String(datum[foldMeasureId]);
1344
+ const colorItem = String(datum[ColorEncoding]);
1345
+ const colorId = colorItemAsId ? colorItem : measureId ? [
1346
+ colorItem,
1347
+ measureId
1348
+ ].join(separator) : colorItem;
1349
+ datum[ColorIdEncoding] = colorId;
1350
+ colorIdMap[colorId] = colorItem;
1351
+ colorItems.add(colorId);
1280
1352
  }
1281
- unfoldInfo.colorItems = unique(colorItems);
1282
- unfoldInfo.colorIdMap = colorMap;
1353
+ unfoldInfo.colorItems = Array.from(colorItems);
1354
+ unfoldInfo.colorIdMap = colorIdMap;
1283
1355
  return {
1284
1356
  dataset,
1285
1357
  unfoldInfo
1286
1358
  };
1287
1359
  };
1288
- const generateDimGroupName = (dimensionsToBeGrouped, datum, dimensionsSeparator)=>dimensionsToBeGrouped.map((dim)=>String(datum[dim.id])).join(dimensionsSeparator);
1289
- const unfoldZeroDimensions = (dataset, measures, measureName, unfoldGroupName = UnfoldDimensionGroup, unfoldGroupId = UnfoldDimensionGroupId)=>{
1290
- const unfoldInfo = {
1291
- groupName: unfoldGroupName,
1292
- groupId: unfoldGroupId,
1293
- colorItems: [],
1294
- colorIdMap: {}
1295
- };
1296
- if (0 === measures.length) return {
1297
- dataset,
1298
- unfoldInfo: {
1299
- groupName: unfoldGroupName,
1300
- groupId: unfoldGroupId,
1301
- colorItems: [],
1302
- colorIdMap: {}
1303
- }
1304
- };
1305
- const colorItems = [];
1306
- const colorMap = {};
1307
- for(let i = 0; i < dataset.length; i++){
1308
- const datum = dataset[i];
1309
- const colorName = measureName;
1310
- const colorId = measureName;
1311
- datum[unfoldGroupName] = colorName;
1312
- datum[unfoldGroupId] = colorId;
1313
- colorItems.push(colorId);
1314
- colorMap[colorId] = colorName;
1315
- }
1316
- unfoldInfo.colorItems = unique(colorItems);
1317
- unfoldInfo.colorIdMap = colorMap;
1318
- return {
1319
- dataset,
1320
- unfoldInfo
1321
- };
1360
+ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1361
+ if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1322
1362
  };
1323
1363
  const emptyReshapeResult = {
1324
1364
  dataset: [],
@@ -1329,69 +1369,47 @@ const emptyReshapeResult = {
1329
1369
  measureValue: ''
1330
1370
  },
1331
1371
  unfoldInfo: {
1332
- groupName: '',
1333
- groupId: '',
1372
+ encodingAngle: AngleEncoding,
1373
+ encodingX: XEncoding,
1374
+ encodingY: YEncoding,
1375
+ encodingDetail: DetailEncoding,
1376
+ encodingColor: ColorEncoding,
1377
+ encodingColorId: ColorIdEncoding,
1334
1378
  colorItems: [],
1335
1379
  colorIdMap: {}
1336
1380
  }
1337
1381
  };
1338
- const dataReshapeFor2D1M0Name = (dataset, dimensions, measures, options)=>{
1339
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
1382
+ const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1383
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1340
1384
  if (0 === dimensions.length && 0 === measures.length) return emptyReshapeResult;
1341
1385
  const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
1342
- if (0 === dimensions.length) {
1343
- const { dataset: finalDataset, unfoldInfo } = unfoldZeroDimensions(foldedDataset, [
1344
- {
1345
- id: foldMeasureValue,
1346
- alias: i18n`指标值`
1347
- }
1348
- ], i18n`指标名称`, unfoldDimensionGroup, unfoldDimensionGroupId);
1349
- return {
1350
- dataset: finalDataset,
1351
- foldInfo,
1352
- unfoldInfo
1353
- };
1354
- }
1355
- {
1356
- const onlyOneMeasure = 1 === measures.length;
1357
- const onlyOneDimension = 1 === dimensions.length;
1358
- const dims = [
1359
- ...dimensions
1360
- ];
1361
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
1362
- id: foldMeasureName,
1363
- alias: i18n`指标名称`,
1364
- location: 'dimension'
1365
- });
1366
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
1367
- {
1368
- id: foldMeasureValue,
1369
- alias: i18n`指标值`
1370
- }
1371
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
1372
- return {
1373
- dataset: finalDataset,
1374
- foldInfo,
1375
- unfoldInfo
1376
- };
1377
- }
1386
+ const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1387
+ foldMeasureId,
1388
+ separator: Separator,
1389
+ colorItemAsId
1390
+ });
1391
+ return {
1392
+ dataset: finalDataset,
1393
+ foldInfo,
1394
+ unfoldInfo
1395
+ };
1378
1396
  };
1379
- const reshapeTo2D1M0Name = (advancedVSeed, context)=>{
1397
+ const reshapeWithEncoding = (advancedVSeed, context)=>{
1380
1398
  const result = {
1381
1399
  ...advancedVSeed
1382
1400
  };
1383
1401
  const { vseed } = context;
1384
- const { dataset } = vseed;
1385
- const { dimensions, measures } = advancedVSeed;
1386
- if (!measures || !dimensions || !dataset) return result;
1402
+ const { dataset, chartType } = vseed;
1403
+ const { dimensions, measures, encoding } = advancedVSeed;
1404
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1387
1405
  if (0 === measures.length) throw new Error('measures can not be empty');
1388
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, dimensions, measures);
1406
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1389
1407
  return {
1390
1408
  ...result,
1391
1409
  dataset: newDatasets,
1392
1410
  datasetReshapeInfo: [
1393
1411
  {
1394
- id: '2D1M',
1412
+ id: String(chartType),
1395
1413
  index: 0,
1396
1414
  foldInfo,
1397
1415
  unfoldInfo
@@ -1401,31 +1419,27 @@ const reshapeTo2D1M0Name = (advancedVSeed, context)=>{
1401
1419
  measures
1402
1420
  };
1403
1421
  };
1404
- const pivotReshapeTo2D1M0Name = (advancedVSeed, context)=>{
1422
+ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1405
1423
  const result = {
1406
1424
  ...advancedVSeed
1407
1425
  };
1408
1426
  const { vseed } = context;
1409
1427
  const { dataset } = vseed;
1410
- const { measures } = advancedVSeed;
1411
- const dimensions = advancedVSeed.dimensions;
1412
- if (!measures || !dimensions) return result;
1428
+ const { dimensions, measures, encoding } = advancedVSeed;
1429
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1430
+ if (0 === measures.length) throw new Error('measures can not be empty');
1413
1431
  const measureGroups = [];
1414
1432
  if (measures) measures.forEach((measure)=>{
1415
1433
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1416
1434
  });
1417
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
1418
- const newDatasets = [];
1435
+ const datasets = [];
1419
1436
  const datasetReshapeInfo = [];
1420
1437
  measureGroups.forEach((measureGroup, index)=>{
1421
1438
  const measures = measureGroup.children;
1422
1439
  if (!measures) return;
1423
1440
  const groupId = measureGroup.id;
1424
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, commonDimensions, measures, {
1425
- foldMeasureId: FoldMeasureId,
1426
- foldMeasureName: FoldMeasureName,
1427
- foldMeasureValue: FoldMeasureValue + groupId,
1428
- unfoldDimensionGroup: UnfoldDimensionGroup
1441
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1442
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`
1429
1443
  });
1430
1444
  const reshapeInfo = {
1431
1445
  id: groupId,
@@ -1433,93 +1447,60 @@ const pivotReshapeTo2D1M0Name = (advancedVSeed, context)=>{
1433
1447
  foldInfo,
1434
1448
  unfoldInfo
1435
1449
  };
1436
- newDatasets.push(newSubDataset);
1450
+ datasets.push(newSubDataset);
1437
1451
  datasetReshapeInfo.push(reshapeInfo);
1438
1452
  });
1439
1453
  return {
1440
1454
  ...result,
1441
- dataset: newDatasets,
1455
+ dataset: datasets,
1442
1456
  datasetReshapeInfo: datasetReshapeInfo
1443
1457
  };
1444
1458
  };
1445
- const encodingXY = (advancedVSeed)=>{
1446
- const result = {
1447
- ...advancedVSeed
1448
- };
1449
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
1450
- if (!datasetReshapeInfo || !dimensions) return result;
1451
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
1452
- const isZeroDimension = 0 === dimensions.length;
1453
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
1454
- const { foldInfo, unfoldInfo } = cur;
1455
- const x = [
1456
- isZeroDimension ? foldInfo.measureName : xDimension?.id
1457
- ];
1458
- const y = [
1459
- foldInfo.measureValue
1460
- ];
1461
- const group = [
1462
- unfoldInfo.groupId
1463
- ];
1464
- const color = [
1465
- foldInfo.measureName
1466
- ];
1467
- return [
1468
- ...prev,
1469
- {
1470
- x,
1471
- y,
1472
- group,
1473
- color
1474
- }
1475
- ];
1476
- }, []);
1477
- return {
1478
- ...result,
1479
- encoding
1480
- };
1481
- };
1482
1459
  const sortXBandAxis = (advancedVSeed, context)=>{
1483
1460
  const result = {
1484
1461
  ...advancedVSeed
1485
1462
  };
1486
1463
  const { vseed } = context;
1487
- const { sort: sortAxis, dataset } = vseed;
1488
- const { encoding } = advancedVSeed;
1489
- const xField = encoding?.[0]?.x?.[0];
1464
+ const { sort: sortAxis } = vseed;
1465
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1466
+ const { unfoldInfo } = datasetReshapeInfo[0];
1467
+ const xField = unfoldInfo.encodingX;
1490
1468
  if (!sortAxis || !xField) return advancedVSeed;
1491
1469
  if (!result.analysis) result.analysis = {};
1492
1470
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1493
- const axisOrderResult = calcOrder(sortAxis, xField, dataset);
1471
+ const axisOrderResult = calcOrder(sortAxis, xField, dataset.flat(2));
1494
1472
  result.analysis.orderMapping[xField] = axisOrderResult;
1495
1473
  return result;
1496
1474
  };
1497
- const sortYBandAxis = (advancedVSeed, context)=>{
1498
- const result = {
1499
- ...advancedVSeed
1500
- };
1501
- const { vseed } = context;
1502
- const { sort: sortAxis, dataset } = vseed;
1503
- const { encoding } = advancedVSeed;
1504
- const yField = encoding?.[0]?.y?.[0];
1505
- if (!sortAxis || !yField) return advancedVSeed;
1506
- if (!result.analysis) result.analysis = {};
1507
- if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1508
- const axisOrderResult = calcOrder(sortAxis, yField, dataset);
1509
- result.analysis.orderMapping[yField] = axisOrderResult;
1510
- return result;
1475
+ const calcOrder = (sortConfig, id, dataset)=>{
1476
+ if (sortConfig.customOrder) return sortConfig.customOrder;
1477
+ const order = sortConfig.order || 'asc';
1478
+ const orderBy = sortConfig.orderBy;
1479
+ const res = sort(dataset, (a, b)=>{
1480
+ const aValue = a[orderBy || id];
1481
+ const bValue = b[orderBy || id];
1482
+ if ('asc' === order) {
1483
+ if (aValue < bValue) return -1;
1484
+ if (aValue > bValue) return 1;
1485
+ return 0;
1486
+ }
1487
+ if (aValue > bValue) return -1;
1488
+ if (aValue < bValue) return 1;
1489
+ return 0;
1490
+ });
1491
+ return unique(res.map((item)=>item[id]));
1511
1492
  };
1512
- const sort_sortLegend = (advancedVSeed, context)=>{
1493
+ const sortLegend_sortLegend = (advancedVSeed, context)=>{
1513
1494
  const result = {
1514
1495
  ...advancedVSeed
1515
1496
  };
1516
1497
  const { vseed } = context;
1517
1498
  const { sortLegend } = vseed;
1518
- const { datasetReshapeInfo } = advancedVSeed;
1519
- const groupField = datasetReshapeInfo?.[0]?.unfoldInfo?.groupId;
1499
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1500
+ const colorId = datasetReshapeInfo?.[0]?.unfoldInfo?.encodingColorId;
1520
1501
  const colorIdMap = datasetReshapeInfo?.[0]?.unfoldInfo?.colorIdMap;
1521
1502
  const colorItems = datasetReshapeInfo?.[0]?.unfoldInfo?.colorItems;
1522
- if (!sortLegend || !groupField || !colorIdMap || !colorItems) return advancedVSeed;
1503
+ if (!sortLegend || !colorId || !colorIdMap || !colorItems) return advancedVSeed;
1523
1504
  if (!result.analysis) result.analysis = {};
1524
1505
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1525
1506
  if (sortLegend.customOrder) {
@@ -1528,15 +1509,14 @@ const sort_sortLegend = (advancedVSeed, context)=>{
1528
1509
  return pre;
1529
1510
  }, {});
1530
1511
  const orderRes = sortLegend.customOrder.map((itemNameOrId)=>nameMap[itemNameOrId] ? nameMap[itemNameOrId] : itemNameOrId);
1531
- result.analysis.orderMapping[groupField] = orderRes;
1512
+ result.analysis.orderMapping[colorId] = orderRes;
1532
1513
  return result;
1533
1514
  }
1534
- const dataset = advancedVSeed.dataset?.flat(2);
1535
- const orderRes = calcOrder(sortLegend, groupField, dataset || []);
1536
- result.analysis.orderMapping[groupField] = orderRes;
1515
+ const orderRes = sortLegend_calcOrder(sortLegend, colorId, dataset?.flat(2) || []);
1516
+ result.analysis.orderMapping[colorId] = orderRes;
1537
1517
  return result;
1538
1518
  };
1539
- const calcOrder = (sortConfig, id, dataset)=>{
1519
+ const sortLegend_calcOrder = (sortConfig, id, dataset)=>{
1540
1520
  if (sortConfig.customOrder) return sortConfig.customOrder;
1541
1521
  const order = sortConfig.order || 'asc';
1542
1522
  const orderBy = sortConfig.orderBy;
@@ -1668,14 +1648,14 @@ const lineAdvancedPipeline = [
1668
1648
  initAdvancedVSeed_initAdvancedVSeed,
1669
1649
  autoMeasures_autoMeasures,
1670
1650
  autoDimensions_autoDimensions,
1651
+ encodingForColumn,
1671
1652
  pivotAdapter([
1672
- reshapeTo2D1M0Name
1653
+ reshapeWithEncoding
1673
1654
  ], [
1674
- pivotReshapeTo2D1M0Name
1655
+ pivotReshapeWithEncoding
1675
1656
  ]),
1676
- encodingXY,
1677
1657
  sortXBandAxis,
1678
- sort_sortLegend,
1658
+ sortLegend_sortLegend,
1679
1659
  lineConfig,
1680
1660
  theme_theme,
1681
1661
  markStyle_markStyle,
@@ -1686,13 +1666,13 @@ const initLine = (spec, context)=>{
1686
1666
  ...spec
1687
1667
  };
1688
1668
  const { advancedVSeed } = context;
1689
- const { encoding } = advancedVSeed;
1690
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
1669
+ const { datasetReshapeInfo } = advancedVSeed;
1670
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
1691
1671
  result.type = 'line';
1692
1672
  result.direction = 'vertical';
1693
- result.xField = encoding[0].x[0];
1694
- result.yField = encoding[0].y[0];
1695
- result.seriesField = encoding[0].group[0];
1673
+ result.xField = unfoldInfo.encodingX;
1674
+ result.yField = foldInfo.measureValue;
1675
+ result.seriesField = unfoldInfo.encodingColorId;
1696
1676
  result.padding = 0;
1697
1677
  result.region = [
1698
1678
  {
@@ -1768,11 +1748,12 @@ const background_backgroundColor = (spec, context)=>{
1768
1748
  };
1769
1749
  const datasetXY = (spec, context)=>{
1770
1750
  const { advancedVSeed, vseed } = context;
1771
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
1751
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
1752
+ const { unfoldInfo } = datasetReshapeInfo[0];
1772
1753
  const orderMapping = analysis?.orderMapping || {};
1773
- const angle = encoding[0]?.angle?.[0];
1774
- const x = encoding[0]?.x?.[0];
1775
- const group = encoding[0]?.group?.[0];
1754
+ const angle = unfoldInfo.encodingAngle;
1755
+ const x = unfoldInfo.encodingX;
1756
+ const colorId = unfoldInfo.encodingColorId;
1776
1757
  const id = datasetReshapeInfo[0].id;
1777
1758
  const fields = {};
1778
1759
  if (angle) fields[angle] = {
@@ -1789,14 +1770,14 @@ const datasetXY = (spec, context)=>{
1789
1770
  sortIndex: 0
1790
1771
  };
1791
1772
  }
1792
- if (group) {
1793
- const order = orderMapping[group];
1794
- if (order) fields[group] = {
1773
+ if (colorId) {
1774
+ const order = orderMapping[colorId];
1775
+ if (order) fields[colorId] = {
1795
1776
  sortIndex: 0,
1796
1777
  domain: order,
1797
1778
  lockStatisticsByDomain: true
1798
1779
  };
1799
- else fields[group] = {
1780
+ else fields[colorId] = {
1800
1781
  sortIndex: 0
1801
1782
  };
1802
1783
  }
@@ -2049,7 +2030,7 @@ const tooltip_tooltip = (spec, context)=>{
2049
2030
  } } = baseConfig;
2050
2031
  const { enable } = tooltip;
2051
2032
  const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2052
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
2033
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2053
2034
  result.tooltip = {
2054
2035
  visible: enable,
2055
2036
  mark: {
@@ -2070,7 +2051,7 @@ const tooltip_tooltip = (spec, context)=>{
2070
2051
  {
2071
2052
  visible: true,
2072
2053
  hasShape: true,
2073
- key: (datum)=>datum && datum[measureName || groupName] || '',
2054
+ key: (datum)=>datum && datum[measureName || colorName] || '',
2074
2055
  value: (datum)=>{
2075
2056
  if (!datum) return '';
2076
2057
  const value = datum[measureValue];
@@ -2092,7 +2073,7 @@ const tooltip_tooltip = (spec, context)=>{
2092
2073
  content: [
2093
2074
  {
2094
2075
  visible: true,
2095
- key: (datum)=>datum && datum[groupName] || '',
2076
+ key: (datum)=>datum && datum[colorName] || '',
2096
2077
  value: (datum)=>{
2097
2078
  if (!datum) return '';
2098
2079
  const value = datum[measureValue];
@@ -2430,7 +2411,8 @@ const pointStateDimensionHover = (spec)=>{
2430
2411
  const pointStateHover = (spec, context)=>{
2431
2412
  const point = spec.point || {};
2432
2413
  const { advancedVSeed } = context;
2433
- const { encoding } = advancedVSeed;
2414
+ const { datasetReshapeInfo } = advancedVSeed;
2415
+ const { unfoldInfo } = datasetReshapeInfo[0];
2434
2416
  const result = {
2435
2417
  ...spec,
2436
2418
  point: {
@@ -2441,7 +2423,7 @@ const pointStateHover = (spec, context)=>{
2441
2423
  scaleX: 1.4,
2442
2424
  scaleY: 1.4,
2443
2425
  stroke: (datum, context)=>{
2444
- const field = encoding[0]?.group?.[0];
2426
+ const field = unfoldInfo.encodingColorId;
2445
2427
  const color = context.seriesColor(datum[field]);
2446
2428
  return color;
2447
2429
  },
@@ -2455,7 +2437,8 @@ const pointStateHover = (spec, context)=>{
2455
2437
  };
2456
2438
  const lineStyle_lineStyle = (spec, context)=>{
2457
2439
  const { advancedVSeed } = context;
2458
- const { markStyle, encoding, dataset } = advancedVSeed;
2440
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
2441
+ const { unfoldInfo } = datasetReshapeInfo[0];
2459
2442
  const { lineStyle } = markStyle;
2460
2443
  if (!lineStyle) return spec;
2461
2444
  const result = {
@@ -2464,8 +2447,8 @@ const lineStyle_lineStyle = (spec, context)=>{
2464
2447
  const lineStyles = Array.isArray(lineStyle) ? lineStyle : [
2465
2448
  lineStyle
2466
2449
  ];
2467
- const group = encoding[0]?.group?.[0];
2468
- const lineGroups = groupBy(dataset, (d)=>d[group ?? '']);
2450
+ const colorId = unfoldInfo.encodingColorId;
2451
+ const lineGroups = groupBy(dataset, (d)=>d[colorId ?? '']);
2469
2452
  const customMap = lineStyles.reduce((result, style, index)=>{
2470
2453
  const { lineColor, lineColorOpacity, lineSmooth, lineStyle, lineWidth = 2, lineVisible = true } = style;
2471
2454
  const dashSegment = 2 * lineWidth;
@@ -2486,7 +2469,7 @@ const lineStyle_lineStyle = (spec, context)=>{
2486
2469
  [`custom${index + 1}`]: {
2487
2470
  level: index + 1,
2488
2471
  filter: (datum)=>{
2489
- const lineData = lineGroups[datum[group ?? '']];
2472
+ const lineData = lineGroups[datum[colorId ?? '']];
2490
2473
  for (const d of lineData)if (selector_selector(d, style.selector)) return true;
2491
2474
  return false;
2492
2475
  },
@@ -2581,7 +2564,8 @@ const annotationPoint_annotationPoint = (spec, context)=>{
2581
2564
  };
2582
2565
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2583
2566
  const { advancedVSeed } = context;
2584
- const { annotation, encoding } = advancedVSeed;
2567
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
2568
+ const { unfoldInfo } = datasetReshapeInfo[0];
2585
2569
  if (!annotation || !annotation.annotationVerticalLine) return spec;
2586
2570
  const { annotationVerticalLine } = annotation;
2587
2571
  const annotationVerticalLineList = Array.isArray(annotationVerticalLine) ? annotationVerticalLine : [
@@ -2661,7 +2645,7 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2661
2645
  }
2662
2646
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2663
2647
  return selectedData.map((datum)=>{
2664
- const x = encoding[0]?.x?.[0];
2648
+ const x = unfoldInfo.encodingX;
2665
2649
  if (!x) return {};
2666
2650
  return generateOneMarkLine(datum[x]);
2667
2651
  });
@@ -2678,7 +2662,8 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2678
2662
  };
2679
2663
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
2680
2664
  const { advancedVSeed } = context;
2681
- const { annotation, encoding } = advancedVSeed;
2665
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
2666
+ const { unfoldInfo } = datasetReshapeInfo[0];
2682
2667
  if (!annotation || !annotation.annotationHorizontalLine) return spec;
2683
2668
  const { annotationHorizontalLine } = annotation;
2684
2669
  const annotationVerticalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
@@ -2758,7 +2743,7 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
2758
2743
  }
2759
2744
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2760
2745
  return selectedData.map((datum)=>{
2761
- const y = encoding[0]?.y?.[0];
2746
+ const y = unfoldInfo.encodingY;
2762
2747
  if (!y) return {};
2763
2748
  return generateOneMarkLine(datum[y]);
2764
2749
  });
@@ -3039,13 +3024,10 @@ const pivotIndicators_pivotIndicators = (chartPipeline)=>(spec, context)=>{
3039
3024
  ...spec
3040
3025
  };
3041
3026
  const { advancedVSeed } = context;
3042
- const { measures, datasetReshapeInfo, encoding, dataset } = advancedVSeed;
3027
+ const { measures, datasetReshapeInfo, dataset } = advancedVSeed;
3043
3028
  const colorItems = unique(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3044
3029
  const indicators = datasetReshapeInfo.map((reshapeInfo, index)=>{
3045
3030
  const measure = measures?.find((d)=>d.id === reshapeInfo.id);
3046
- const newEncoding = [
3047
- encoding[index]
3048
- ];
3049
3031
  const newDataset = dataset[index];
3050
3032
  const newDatasetReshapeInfo = [
3051
3033
  {
@@ -3061,8 +3043,7 @@ const pivotIndicators_pivotIndicators = (chartPipeline)=>(spec, context)=>{
3061
3043
  advancedVSeed: {
3062
3044
  ...advancedVSeed,
3063
3045
  datasetReshapeInfo: newDatasetReshapeInfo,
3064
- dataset: newDataset,
3065
- encoding: newEncoding
3046
+ dataset: newDataset
3066
3047
  }
3067
3048
  };
3068
3049
  const chartSpec = execPipeline(chartPipeline, newContext, {});
@@ -3248,7 +3229,7 @@ const pivotDiscreteLegend = (spec, context)=>{
3248
3229
  }
3249
3230
  },
3250
3231
  label: {
3251
- formatMethod: (value)=>colorIdMap[String(value)] ?? value,
3232
+ formatMethod: (value)=>colorIdMap[value] ?? value,
3252
3233
  style: {
3253
3234
  fontSize: labelFontSize,
3254
3235
  fill: labelFontColor,
@@ -3331,151 +3312,18 @@ const registerLine = ()=>{
3331
3312
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3332
3313
  Builder._specPipelineMap.line = lineSpecPipeline;
3333
3314
  };
3334
- const dataReshapeFor2D1M_emptyReshapeResult = {
3335
- dataset: [],
3336
- foldInfo: {
3337
- foldMap: {},
3338
- measureId: '',
3339
- measureName: '',
3340
- measureValue: ''
3341
- },
3342
- unfoldInfo: {
3343
- groupName: '',
3344
- groupId: '',
3345
- colorItems: [],
3346
- colorIdMap: {}
3347
- }
3348
- };
3349
- const dataReshapeFor2D1M = (dataset, dimensions, measures, options)=>{
3350
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
3351
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor2D1M_emptyReshapeResult;
3352
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
3353
- if (0 === dimensions.length) {
3354
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
3355
- {
3356
- id: foldMeasureId,
3357
- alias: i18n`指标Id`,
3358
- location: 'dimension'
3359
- },
3360
- {
3361
- id: foldMeasureName,
3362
- alias: i18n`指标名称`,
3363
- location: 'dimension'
3364
- }
3365
- ], [
3366
- {
3367
- id: foldMeasureValue,
3368
- alias: i18n`指标值`
3369
- }
3370
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3371
- return {
3372
- dataset: finalDataset,
3373
- foldInfo,
3374
- unfoldInfo
3375
- };
3376
- }
3377
- {
3378
- const onlyOneMeasure = 1 === measures.length;
3379
- const onlyOneDimension = 1 === dimensions.length;
3380
- const dims = [
3381
- ...dimensions
3382
- ];
3383
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
3384
- id: foldMeasureName,
3385
- alias: i18n`指标名称`,
3386
- location: 'dimension'
3387
- });
3388
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
3389
- {
3390
- id: foldMeasureValue,
3391
- alias: i18n`指标值`
3392
- }
3393
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3394
- return {
3395
- dataset: finalDataset,
3396
- foldInfo,
3397
- unfoldInfo
3398
- };
3399
- }
3400
- };
3401
- const reshapeTo2D1M = (advancedVSeed, context)=>{
3402
- const result = {
3403
- ...advancedVSeed
3404
- };
3405
- const { vseed } = context;
3406
- const { dataset } = vseed;
3407
- const { dimensions, measures } = advancedVSeed;
3408
- if (!measures || !dimensions || !dataset) return result;
3409
- if (0 === measures.length) throw new Error('measures can not be empty');
3410
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, dimensions, measures);
3411
- return {
3412
- ...result,
3413
- dataset: newDatasets,
3414
- datasetReshapeInfo: [
3415
- {
3416
- id: '2D1M',
3417
- index: 0,
3418
- foldInfo,
3419
- unfoldInfo
3420
- }
3421
- ],
3422
- dimensions,
3423
- measures
3424
- };
3425
- };
3426
- const pivotReshapeTo2D1M = (advancedVSeed, context)=>{
3427
- const result = {
3428
- ...advancedVSeed
3429
- };
3430
- const { vseed } = context;
3431
- const { dataset } = vseed;
3432
- const { measures } = advancedVSeed;
3433
- const dimensions = advancedVSeed.dimensions;
3434
- if (!measures || !dimensions) return result;
3435
- const measureGroups = [];
3436
- if (measures) measures.forEach((measure)=>{
3437
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
3438
- });
3439
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
3440
- const newDatasets = [];
3441
- const datasetReshapeInfo = [];
3442
- measureGroups.forEach((measureGroup, index)=>{
3443
- const measures = measureGroup.children;
3444
- if (!measures) return;
3445
- const groupId = measureGroup.id;
3446
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, measures, {
3447
- foldMeasureId: FoldMeasureId,
3448
- foldMeasureName: FoldMeasureName,
3449
- foldMeasureValue: FoldMeasureValue + groupId,
3450
- unfoldDimensionGroup: UnfoldDimensionGroup
3451
- });
3452
- const reshapeInfo = {
3453
- id: groupId,
3454
- index,
3455
- foldInfo,
3456
- unfoldInfo
3457
- };
3458
- newDatasets.push(newSubDataset);
3459
- datasetReshapeInfo.push(reshapeInfo);
3460
- });
3461
- return {
3462
- ...result,
3463
- dataset: newDatasets,
3464
- datasetReshapeInfo: datasetReshapeInfo
3465
- };
3466
- };
3467
3315
  const columnAdvancedPipeline = [
3468
3316
  initAdvancedVSeed_initAdvancedVSeed,
3469
3317
  autoMeasures_autoMeasures,
3470
3318
  autoDimensions_autoDimensions,
3319
+ encodingForColumn,
3471
3320
  pivotAdapter([
3472
- reshapeTo2D1M
3321
+ reshapeWithEncoding
3473
3322
  ], [
3474
- pivotReshapeTo2D1M
3323
+ pivotReshapeWithEncoding
3475
3324
  ]),
3476
- encodingXY,
3477
3325
  sortXBandAxis,
3478
- sort_sortLegend,
3326
+ sortLegend_sortLegend,
3479
3327
  columnConfig,
3480
3328
  theme_theme,
3481
3329
  markStyle_markStyle,
@@ -3486,13 +3334,13 @@ const initColumn = (spec, context)=>{
3486
3334
  ...spec
3487
3335
  };
3488
3336
  const { advancedVSeed } = context;
3489
- const { encoding } = advancedVSeed;
3490
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3337
+ const { datasetReshapeInfo } = advancedVSeed;
3338
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
3491
3339
  result.type = 'bar';
3492
3340
  result.direction = 'vertical';
3493
- result.xField = encoding[0].x[0];
3494
- result.yField = encoding[0].y[0];
3495
- result.seriesField = encoding[0].group[0];
3341
+ result.xField = unfoldInfo.encodingX;
3342
+ result.yField = foldInfo.measureValue;
3343
+ result.seriesField = unfoldInfo.encodingColorId;
3496
3344
  result.padding = 0;
3497
3345
  result.region = [
3498
3346
  {
@@ -3812,14 +3660,14 @@ const columnParallelAdvancedPipeline = [
3812
3660
  initAdvancedVSeed_initAdvancedVSeed,
3813
3661
  autoMeasures_autoMeasures,
3814
3662
  autoDimensions_autoDimensions,
3663
+ encodingForColumn,
3815
3664
  pivotAdapter([
3816
- reshapeTo2D1M
3665
+ reshapeWithEncoding
3817
3666
  ], [
3818
- pivotReshapeTo2D1M
3667
+ pivotReshapeWithEncoding
3819
3668
  ]),
3820
- encodingXY,
3821
3669
  sortXBandAxis,
3822
- sort_sortLegend,
3670
+ sortLegend_sortLegend,
3823
3671
  columnParallelConfig,
3824
3672
  theme_theme,
3825
3673
  markStyle_markStyle,
@@ -3830,20 +3678,19 @@ const initColumnParallel = (spec, context)=>{
3830
3678
  ...spec
3831
3679
  };
3832
3680
  const { advancedVSeed } = context;
3833
- const { encoding, datasetReshapeInfo, dimensions } = advancedVSeed;
3834
- const { unfoldInfo } = datasetReshapeInfo[0];
3835
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3681
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
3682
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
3836
3683
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
3837
3684
  result.type = 'bar';
3838
3685
  result.direction = 'vertical';
3839
3686
  result.xField = sameDimensionsMode ? [
3840
- encoding[0].x[0]
3687
+ unfoldInfo.encodingX
3841
3688
  ] : [
3842
- encoding[0].x[0],
3843
- unfoldInfo.groupId
3689
+ unfoldInfo.encodingX,
3690
+ unfoldInfo.encodingDetail
3844
3691
  ];
3845
- result.yField = encoding[0].y[0];
3846
- result.seriesField = encoding[0].group[0];
3692
+ result.yField = foldInfo.measureValue;
3693
+ result.seriesField = unfoldInfo.encodingColorId;
3847
3694
  result.padding = 0;
3848
3695
  result.region = [
3849
3696
  {
@@ -3910,14 +3757,14 @@ const columnPercentAdvancedPipeline = [
3910
3757
  initAdvancedVSeed_initAdvancedVSeed,
3911
3758
  autoMeasures_autoMeasures,
3912
3759
  autoDimensions_autoDimensions,
3760
+ encodingForColumn,
3913
3761
  pivotAdapter([
3914
- reshapeTo2D1M
3762
+ reshapeWithEncoding
3915
3763
  ], [
3916
- pivotReshapeTo2D1M
3764
+ pivotReshapeWithEncoding
3917
3765
  ]),
3918
- encodingXY,
3919
3766
  sortXBandAxis,
3920
- sort_sortLegend,
3767
+ sortLegend_sortLegend,
3921
3768
  columnPercentConfig,
3922
3769
  theme_theme,
3923
3770
  markStyle_markStyle,
@@ -3987,55 +3834,76 @@ const registerColumnPercent = ()=>{
3987
3834
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
3988
3835
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
3989
3836
  };
3990
- const encodingYX = (advancedVSeed)=>{
3991
- const result = {
3992
- ...advancedVSeed
3993
- };
3994
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
3995
- if (!datasetReshapeInfo || !dimensions) return result;
3996
- const yDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
3997
- const isZeroDimension = 0 === dimensions.length;
3998
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
3999
- const { foldInfo, unfoldInfo } = cur;
4000
- const y = [
4001
- isZeroDimension ? foldInfo.measureName : yDimension?.id
4002
- ];
4003
- const x = [
4004
- foldInfo.measureValue
4005
- ];
4006
- const group = [
4007
- unfoldInfo.groupId
3837
+ const encodingForBar = (advancedVSeed, context)=>{
3838
+ const { vseed } = context;
3839
+ const { dimensions } = advancedVSeed;
3840
+ if (!dimensions) return advancedVSeed;
3841
+ const encoding = vseed.encoding;
3842
+ if (encoding) {
3843
+ const y = encoding.y || [
3844
+ dimensions[0].id
4008
3845
  ];
4009
- const color = [
4010
- foldInfo.measureName
3846
+ const color = encoding.color || [
3847
+ (dimensions[1] || dimensions[0]).id
4011
3848
  ];
4012
- return [
4013
- ...prev,
4014
- {
4015
- x,
3849
+ const detail = encoding.detail || [];
3850
+ const mergedDetail = unique([
3851
+ ...color,
3852
+ ...detail
3853
+ ]);
3854
+ return {
3855
+ ...advancedVSeed,
3856
+ encoding: {
3857
+ ...encoding,
4016
3858
  y,
4017
- group,
4018
- color
3859
+ color,
3860
+ detail: mergedDetail
4019
3861
  }
4020
- ];
4021
- }, []);
3862
+ };
3863
+ }
3864
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3865
+ const mergedEncoding = {
3866
+ y: dimensions.slice(0, 1).map((item)=>item.id),
3867
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3868
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3869
+ tooltip: dimensions.map((item)=>item.id),
3870
+ label: [],
3871
+ row: [],
3872
+ column: []
3873
+ };
4022
3874
  return {
4023
- ...result,
4024
- encoding
3875
+ ...advancedVSeed,
3876
+ encoding: mergedEncoding
4025
3877
  };
4026
3878
  };
4027
- const barAdvancedPipeline = [
4028
- initAdvancedVSeed_initAdvancedVSeed,
4029
- autoMeasures_autoMeasures,
4030
- autoDimensions_autoDimensions,
4031
- pivotAdapter([
4032
- reshapeTo2D1M
4033
- ], [
4034
- pivotReshapeTo2D1M
4035
- ]),
4036
- encodingYX,
4037
- sortYBandAxis,
4038
- sort_sortLegend,
3879
+ const sortYBandAxis = (advancedVSeed, context)=>{
3880
+ const result = {
3881
+ ...advancedVSeed
3882
+ };
3883
+ const { vseed } = context;
3884
+ const { sort: sortAxis } = vseed;
3885
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
3886
+ const { unfoldInfo } = datasetReshapeInfo[0];
3887
+ const yField = unfoldInfo?.encodingY;
3888
+ if (!sortAxis || !yField) return advancedVSeed;
3889
+ if (!result.analysis) result.analysis = {};
3890
+ if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
3891
+ const axisOrderResult = calcOrder(sortAxis, yField, dataset.flat(2));
3892
+ result.analysis.orderMapping[yField] = axisOrderResult;
3893
+ return result;
3894
+ };
3895
+ const barAdvancedPipeline = [
3896
+ initAdvancedVSeed_initAdvancedVSeed,
3897
+ autoMeasures_autoMeasures,
3898
+ autoDimensions_autoDimensions,
3899
+ encodingForBar,
3900
+ pivotAdapter([
3901
+ reshapeWithEncoding
3902
+ ], [
3903
+ pivotReshapeWithEncoding
3904
+ ]),
3905
+ sortYBandAxis,
3906
+ sortLegend_sortLegend,
4039
3907
  barConfig,
4040
3908
  theme_theme,
4041
3909
  markStyle_markStyle,
@@ -4046,13 +3914,13 @@ const initBar = (spec, context)=>{
4046
3914
  ...spec
4047
3915
  };
4048
3916
  const { advancedVSeed } = context;
4049
- const { encoding } = advancedVSeed;
4050
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3917
+ const { datasetReshapeInfo } = advancedVSeed;
3918
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4051
3919
  result.type = 'bar';
4052
3920
  result.direction = 'horizontal';
4053
- result.yField = encoding[0].y?.[0];
4054
- result.xField = encoding[0].x?.[0];
4055
- result.seriesField = encoding[0].group?.[0];
3921
+ result.yField = unfoldInfo.encodingY;
3922
+ result.xField = foldInfo.measureValue;
3923
+ result.seriesField = unfoldInfo.encodingColorId;
4056
3924
  result.padding = 0;
4057
3925
  result.region = [
4058
3926
  {
@@ -4064,11 +3932,12 @@ const initBar = (spec, context)=>{
4064
3932
  };
4065
3933
  const datasetYX = (spec, context)=>{
4066
3934
  const { advancedVSeed, vseed } = context;
4067
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
3935
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
3936
+ const { unfoldInfo } = datasetReshapeInfo[0];
4068
3937
  const orderMapping = analysis?.orderMapping || {};
4069
- const angle = encoding[0]?.angle?.[0];
4070
- const y = encoding[0]?.y?.[0];
4071
- const group = encoding[0]?.group?.[0];
3938
+ const angle = unfoldInfo.encodingAngle;
3939
+ const y = unfoldInfo.encodingY;
3940
+ const colorId = unfoldInfo.encodingColorId;
4072
3941
  const id = datasetReshapeInfo[0].id;
4073
3942
  const fields = {};
4074
3943
  if (angle) fields[angle] = {
@@ -4085,14 +3954,14 @@ const datasetYX = (spec, context)=>{
4085
3954
  sortIndex: 0
4086
3955
  };
4087
3956
  }
4088
- if (group) {
4089
- const order = orderMapping[group];
4090
- if (order) fields[group] = {
3957
+ if (colorId) {
3958
+ const order = orderMapping[colorId];
3959
+ if (order) fields[colorId] = {
4091
3960
  sortIndex: 0,
4092
3961
  domain: order,
4093
3962
  lockStatisticsByDomain: true
4094
3963
  };
4095
- else fields[group] = {
3964
+ else fields[colorId] = {
4096
3965
  sortIndex: 0
4097
3966
  };
4098
3967
  }
@@ -4380,14 +4249,14 @@ const barParallelAdvancedPipeline = [
4380
4249
  initAdvancedVSeed_initAdvancedVSeed,
4381
4250
  autoMeasures_autoMeasures,
4382
4251
  autoDimensions_autoDimensions,
4252
+ encodingForBar,
4383
4253
  pivotAdapter([
4384
- reshapeTo2D1M
4254
+ reshapeWithEncoding
4385
4255
  ], [
4386
- pivotReshapeTo2D1M
4256
+ pivotReshapeWithEncoding
4387
4257
  ]),
4388
- encodingYX,
4389
4258
  sortYBandAxis,
4390
- sort_sortLegend,
4259
+ sortLegend_sortLegend,
4391
4260
  barParallelConfig,
4392
4261
  theme_theme,
4393
4262
  markStyle_markStyle,
@@ -4398,20 +4267,19 @@ const initBarParallel = (spec, context)=>{
4398
4267
  ...spec
4399
4268
  };
4400
4269
  const { advancedVSeed } = context;
4401
- const { encoding, datasetReshapeInfo, dimensions } = advancedVSeed;
4402
- const { unfoldInfo } = datasetReshapeInfo[0];
4403
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4270
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4271
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4404
4272
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4405
4273
  result.type = 'bar';
4406
4274
  result.direction = 'horizontal';
4407
4275
  result.yField = sameDimensionsMode ? [
4408
- encoding[0].y[0]
4276
+ unfoldInfo.encodingY
4409
4277
  ] : [
4410
- encoding[0].y[0],
4411
- unfoldInfo.groupId
4278
+ unfoldInfo.encodingY,
4279
+ unfoldInfo.encodingDetail
4412
4280
  ];
4413
- result.xField = encoding[0].x[0];
4414
- result.seriesField = encoding[0].group[0];
4281
+ result.xField = foldInfo.measureValue;
4282
+ result.seriesField = unfoldInfo.encodingColorId;
4415
4283
  result.padding = 0;
4416
4284
  result.region = [
4417
4285
  {
@@ -4477,14 +4345,14 @@ const barPercentAdvancedPipeline = [
4477
4345
  initAdvancedVSeed_initAdvancedVSeed,
4478
4346
  autoMeasures_autoMeasures,
4479
4347
  autoDimensions_autoDimensions,
4348
+ encodingForBar,
4480
4349
  pivotAdapter([
4481
- reshapeTo2D1M
4350
+ reshapeWithEncoding
4482
4351
  ], [
4483
- pivotReshapeTo2D1M
4352
+ pivotReshapeWithEncoding
4484
4353
  ]),
4485
- encodingYX,
4486
4354
  sortYBandAxis,
4487
- sort_sortLegend,
4355
+ sortLegend_sortLegend,
4488
4356
  barPercentConfig,
4489
4357
  theme_theme,
4490
4358
  markStyle_markStyle,
@@ -4548,14 +4416,14 @@ const areaAdvancedPipeline = [
4548
4416
  initAdvancedVSeed_initAdvancedVSeed,
4549
4417
  autoMeasures_autoMeasures,
4550
4418
  autoDimensions_autoDimensions,
4419
+ encodingForColumn,
4551
4420
  pivotAdapter([
4552
- reshapeTo2D1M0Name
4421
+ reshapeWithEncoding
4553
4422
  ], [
4554
- pivotReshapeTo2D1M0Name
4423
+ pivotReshapeWithEncoding
4555
4424
  ]),
4556
- encodingXY,
4557
4425
  sortXBandAxis,
4558
- sort_sortLegend,
4426
+ sortLegend_sortLegend,
4559
4427
  areaConfig,
4560
4428
  theme_theme,
4561
4429
  markStyle_markStyle,
@@ -4566,13 +4434,13 @@ const initArea = (spec, context)=>{
4566
4434
  ...spec
4567
4435
  };
4568
4436
  const { advancedVSeed } = context;
4569
- const { encoding } = advancedVSeed;
4570
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4437
+ const { datasetReshapeInfo } = advancedVSeed;
4438
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4571
4439
  result.type = 'area';
4572
4440
  result.direction = 'vertical';
4573
- result.xField = encoding[0].x[0];
4574
- result.yField = encoding[0].y[0];
4575
- result.seriesField = encoding[0].group[0];
4441
+ result.yField = foldInfo.measureValue;
4442
+ result.xField = unfoldInfo.encodingX;
4443
+ result.seriesField = unfoldInfo.encodingColorId;
4576
4444
  result.padding = 0;
4577
4445
  result.region = [
4578
4446
  {
@@ -4584,8 +4452,9 @@ const initArea = (spec, context)=>{
4584
4452
  };
4585
4453
  const areaStyle_areaStyle = (spec, context)=>{
4586
4454
  const { advancedVSeed } = context;
4587
- const { markStyle, encoding, dataset } = advancedVSeed;
4455
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
4588
4456
  const { areaStyle } = markStyle;
4457
+ const { unfoldInfo } = datasetReshapeInfo[0];
4589
4458
  if (!areaStyle) return {
4590
4459
  ...spec,
4591
4460
  area: {
@@ -4598,7 +4467,7 @@ const areaStyle_areaStyle = (spec, context)=>{
4598
4467
  const areaStyles = Array.isArray(areaStyle) ? areaStyle : [
4599
4468
  areaStyle
4600
4469
  ];
4601
- const group = encoding[0]?.group?.[0];
4470
+ const group = unfoldInfo.encodingColorId;
4602
4471
  const areaGroups = groupBy(dataset, (d)=>d[group ?? '']);
4603
4472
  const customMap = areaStyles.reduce((result, style, index)=>{
4604
4473
  const { areaColor, areaColorOpacity, areaVisible = true } = style;
@@ -4692,14 +4561,14 @@ const areaPercentAdvancedPipeline = [
4692
4561
  initAdvancedVSeed_initAdvancedVSeed,
4693
4562
  autoMeasures_autoMeasures,
4694
4563
  autoDimensions_autoDimensions,
4564
+ encodingForColumn,
4695
4565
  pivotAdapter([
4696
- reshapeTo2D1M0Name
4566
+ reshapeWithEncoding
4697
4567
  ], [
4698
- pivotReshapeTo2D1M0Name
4568
+ pivotReshapeWithEncoding
4699
4569
  ]),
4700
- encodingXY,
4701
4570
  sortXBandAxis,
4702
- sort_sortLegend,
4571
+ sortLegend_sortLegend,
4703
4572
  areaPercentConfig,
4704
4573
  theme_theme,
4705
4574
  markStyle_markStyle,
@@ -4764,16 +4633,20 @@ const registerAreaPercent = ()=>{
4764
4633
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
4765
4634
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
4766
4635
  };
4767
- const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
4636
+ const autoScatterMeasures = (advancedVSeed, context)=>{
4768
4637
  const result = {
4769
4638
  ...advancedVSeed
4770
4639
  };
4771
4640
  const { vseed } = context;
4772
- const { measures, dataset } = vseed;
4641
+ const { dataset, scatterMeasures, measures } = vseed;
4773
4642
  if (!dataset) throw new Error('dataset is required');
4774
4643
  if (0 === dataset.length) return result;
4775
- if (measures) {
4776
- result.measures = auto2M1Group(measures);
4644
+ if (scatterMeasures) {
4645
+ result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
4646
+ return result;
4647
+ }
4648
+ if (measures && measureDepth(measures) > 1) {
4649
+ result.measures = measures;
4777
4650
  return result;
4778
4651
  }
4779
4652
  const top100dataset = dataset.slice(0, 100);
@@ -4781,7 +4654,7 @@ const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
4781
4654
  ...prev,
4782
4655
  ...cur
4783
4656
  }), {});
4784
- const newMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
4657
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
4785
4658
  '',
4786
4659
  null,
4787
4660
  void 0
@@ -4789,689 +4662,276 @@ const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
4789
4662
  id: measure,
4790
4663
  alias: measure
4791
4664
  }));
4792
- result.measures = auto2M1Group(newMeasures);
4665
+ if (0 === newMeasures.length) result.measures = [];
4666
+ else if (1 === newMeasures.length) result.measures = [
4667
+ {
4668
+ id: 'primary',
4669
+ alias: 'primary',
4670
+ children: newMeasures
4671
+ }
4672
+ ];
4673
+ else if (newMeasures.length > 1) result.measures = [
4674
+ {
4675
+ id: 'primary',
4676
+ alias: 'primary',
4677
+ children: newMeasures.slice(0, 1)
4678
+ },
4679
+ {
4680
+ id: 'secondary',
4681
+ alias: 'secondary',
4682
+ children: newMeasures.slice(1)
4683
+ }
4684
+ ];
4793
4685
  return result;
4794
4686
  };
4795
- const auto2M1Group = (measures)=>{
4796
- const allMeasures = findAllMeasures(measures);
4797
- if (allMeasures.length <= 2) return allMeasures;
4798
- const groups = measures.filter((measure)=>'children' in measure);
4799
- const singleMeasures = measures.filter((measure)=>!('children' in measure));
4800
- for(let i = 0; i < singleMeasures.length; i += 2){
4801
- const group = autoMeasuresBy2M1Group_createEmptyMeasureGroup();
4802
- group.children = allMeasures.slice(i, i + 2);
4803
- groups.push(group);
4804
- }
4805
- return groups;
4806
- };
4807
- const autoMeasuresBy2M1Group_createEmptyMeasureGroup = ()=>({
4808
- id: '',
4809
- alias: '',
4810
- children: []
4687
+ const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
4688
+ const measureTree = scatterMeasures.map((item, index)=>{
4689
+ const { xMeasures, yMeasures } = item;
4690
+ const groupChildren = [];
4691
+ let id = '';
4692
+ if (xMeasures) {
4693
+ const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
4694
+ xMeasures
4695
+ ];
4696
+ const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
4697
+ id += alias;
4698
+ groupChildren.push({
4699
+ id: `${index}-x`,
4700
+ alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
4701
+ children: arrXMeasures
4702
+ });
4703
+ }
4704
+ if (yMeasures) {
4705
+ const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
4706
+ yMeasures
4707
+ ];
4708
+ const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
4709
+ id += alias;
4710
+ groupChildren.push({
4711
+ id: `${index}-y`,
4712
+ alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
4713
+ children: arrYMeasures
4714
+ });
4715
+ }
4716
+ return {
4717
+ id,
4718
+ alias: id,
4719
+ children: groupChildren
4720
+ };
4811
4721
  });
4812
- const dataReshapeFor1D_emptyReshapeResult = {
4813
- dataset: [],
4814
- foldInfo: {
4815
- foldMap: {},
4816
- measureId: '',
4817
- measureName: '',
4818
- measureValue: ''
4819
- },
4820
- unfoldInfo: {
4821
- groupName: '',
4822
- groupId: '',
4823
- colorItems: [],
4824
- colorIdMap: {}
4825
- }
4722
+ if (1 === scatterMeasures.length) return measureTree[0].children || [];
4723
+ return measureTree;
4826
4724
  };
4827
- const dataReshapeFor1D = (dataset, dimensions, measures, options)=>{
4828
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
4829
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D_emptyReshapeResult;
4830
- if (0 === dimensions.length) {
4831
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(dataset, [], [], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
4725
+ const encodingForScatter = (advancedVSeed, context)=>{
4726
+ const { vseed } = context;
4727
+ const { dimensions } = advancedVSeed;
4728
+ if (!dimensions) return advancedVSeed;
4729
+ const encoding = vseed.encoding;
4730
+ if (encoding) {
4731
+ const detail = encoding.detail || [];
4732
+ const color = encoding.color || [
4733
+ (dimensions[1] || dimensions[0]).id
4734
+ ];
4735
+ const mergedDetail = unique([
4736
+ ...color,
4737
+ ...detail
4738
+ ]);
4832
4739
  return {
4833
- dataset: finalDataset,
4834
- foldInfo: {
4835
- foldMap: {},
4836
- measureId: foldMeasureId,
4837
- measureName: foldMeasureName,
4838
- measureValue: foldMeasureValue
4839
- },
4840
- unfoldInfo
4841
- };
4842
- }
4843
- {
4844
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(dataset, [
4845
- ...dimensions
4846
- ], [
4847
- {
4848
- id: foldMeasureValue,
4849
- alias: i18n`指标值`
4740
+ ...advancedVSeed,
4741
+ encoding: {
4742
+ ...encoding,
4743
+ color,
4744
+ detail: mergedDetail
4850
4745
  }
4851
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
4852
- return {
4853
- dataset: finalDataset,
4854
- foldInfo: {
4855
- foldMap: {},
4856
- measureId: foldMeasureId,
4857
- measureName: foldMeasureName,
4858
- measureValue: foldMeasureValue
4859
- },
4860
- unfoldInfo
4861
4746
  };
4862
4747
  }
4748
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
4749
+ const mergedEncoding = {
4750
+ color: dimensions.slice(0).map((item)=>item.id),
4751
+ detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
4752
+ tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
4753
+ label: [],
4754
+ row: [],
4755
+ column: []
4756
+ };
4757
+ return {
4758
+ ...advancedVSeed,
4759
+ encoding: mergedEncoding
4760
+ };
4863
4761
  };
4864
- const reshapeTo1D = (advancedVSeed, context)=>{
4762
+ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
4865
4763
  const result = {
4866
4764
  ...advancedVSeed
4867
4765
  };
4868
4766
  const { vseed } = context;
4869
4767
  const { dataset } = vseed;
4870
- const { dimensions, measures } = advancedVSeed;
4871
- if (!measures || !dimensions || !dataset) return result;
4768
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
4769
+ if (!measures || !dimensions || !dataset || !encoding) return result;
4872
4770
  if (0 === measures.length) throw new Error('measures can not be empty');
4873
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, dimensions, measures);
4771
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
4772
+ const foldInfoList = [];
4773
+ const unfoldInfoList = [];
4774
+ const datasets = [];
4775
+ const xMeasures = measures[0];
4776
+ const yMeasures = measures[1] || xMeasures;
4777
+ if (xMeasures && xMeasures.children) {
4778
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
4779
+ foldMeasureValue: FoldXMeasureValue,
4780
+ colorItemAsId: true
4781
+ });
4782
+ datasets.push(newDataset);
4783
+ foldInfoList.push(foldInfo);
4784
+ unfoldInfoList.push(unfoldInfo);
4785
+ }
4786
+ if (yMeasures && yMeasures.children) {
4787
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
4788
+ foldMeasureValue: FoldYMeasureValue,
4789
+ colorItemAsId: true
4790
+ });
4791
+ datasets[0] = newDataset;
4792
+ foldInfoList.push(foldInfo);
4793
+ unfoldInfoList.push(unfoldInfo);
4794
+ }
4795
+ const unfoldInfo = {
4796
+ ...unfoldInfoList[0],
4797
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
4798
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
4799
+ ...prev,
4800
+ ...cur.colorIdMap
4801
+ }), {})
4802
+ };
4874
4803
  return {
4875
4804
  ...result,
4876
- dataset: newDatasets,
4805
+ dataset: datasets[0],
4877
4806
  datasetReshapeInfo: [
4878
4807
  {
4879
- id: '1D2M',
4808
+ id: String(chartType),
4880
4809
  index: 0,
4881
- foldInfo,
4882
- unfoldInfo
4810
+ foldInfo: foldInfoList[0],
4811
+ foldInfoList: foldInfoList,
4812
+ unfoldInfo: unfoldInfo
4883
4813
  }
4884
4814
  ]
4885
4815
  };
4886
4816
  };
4887
- const pivotReshapeTo1D = (advancedVSeed, context)=>{
4817
+ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
4888
4818
  const result = {
4889
4819
  ...advancedVSeed
4890
4820
  };
4891
4821
  const { vseed } = context;
4892
4822
  const { dataset } = vseed;
4893
- const { measures } = advancedVSeed;
4894
- const dimensions = advancedVSeed.dimensions;
4895
- if (!measures || !dimensions) return result;
4823
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
4824
+ if (!measures || !dimensions || !dataset || !encoding) return result;
4896
4825
  const measureGroups = [];
4897
- if (measures) measures.forEach((measure)=>{
4898
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
4826
+ const depth = measureDepth(measures);
4827
+ if (3 === depth) measures.forEach((measure)=>{
4828
+ measureGroups.push(measure.children);
4899
4829
  });
4900
- const newDatasets = [];
4830
+ else if (2 === depth) measureGroups.push(measures);
4831
+ const datasetList = [];
4901
4832
  const datasetReshapeInfo = [];
4902
- measureGroups.forEach((measureGroup, index)=>{
4903
- const measures = measureGroup.children;
4904
- if (!measures) return;
4905
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
4906
- const groupId = measureGroup.id;
4907
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, commonDimensions, measures, {
4908
- foldMeasureId: FoldMeasureId,
4909
- foldMeasureName: FoldMeasureName,
4910
- foldMeasureValue: FoldMeasureValue + groupId,
4911
- unfoldDimensionGroup: UnfoldDimensionGroup
4912
- });
4833
+ measureGroups.forEach((measures, index)=>{
4834
+ if (0 === measures.length) throw new Error('measures can not be empty');
4835
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
4836
+ const foldInfoList = [];
4837
+ const unfoldInfoList = [];
4838
+ const datasets = [];
4839
+ const xMeasures = measures[0];
4840
+ const yMeasures = measures[1] || xMeasures;
4841
+ if (xMeasures && xMeasures.children) {
4842
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
4843
+ foldMeasureValue: `${FoldXMeasureValue}${index}`,
4844
+ colorItemAsId: true
4845
+ });
4846
+ datasets.push(newDataset);
4847
+ foldInfoList.push(foldInfo);
4848
+ unfoldInfoList.push(unfoldInfo);
4849
+ }
4850
+ if (yMeasures && yMeasures.children) {
4851
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
4852
+ foldMeasureValue: `${FoldYMeasureValue}${index}`,
4853
+ colorItemAsId: true
4854
+ });
4855
+ datasets.push(newDataset);
4856
+ foldInfoList.push(foldInfo);
4857
+ unfoldInfoList.push(unfoldInfo);
4858
+ }
4859
+ const unfoldInfo = {
4860
+ ...unfoldInfoList[0],
4861
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
4862
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
4863
+ ...prev,
4864
+ ...cur.colorIdMap
4865
+ }), {})
4866
+ };
4913
4867
  const reshapeInfo = {
4914
- id: groupId,
4868
+ id: `${chartType}-${index}`,
4915
4869
  index,
4916
- foldInfo,
4917
- unfoldInfo
4870
+ foldInfo: foldInfoList[0],
4871
+ foldInfoList: foldInfoList,
4872
+ unfoldInfo: unfoldInfo
4918
4873
  };
4919
- newDatasets.push(newSubDataset);
4920
4874
  datasetReshapeInfo.push(reshapeInfo);
4875
+ datasetList.push(datasets[0].map((d, index)=>({
4876
+ ...d,
4877
+ ...datasets[1]?.[index] || {}
4878
+ })));
4921
4879
  });
4922
4880
  return {
4923
4881
  ...result,
4924
- dataset: newDatasets,
4882
+ dataset: datasetList,
4925
4883
  datasetReshapeInfo: datasetReshapeInfo
4926
4884
  };
4927
4885
  };
4928
- const encodingAreaRange = (advancedVSeed)=>{
4929
- const result = {
4930
- ...advancedVSeed
4931
- };
4932
- const { datasetReshapeInfo, measures } = advancedVSeed;
4933
- if (!datasetReshapeInfo || !measures) return result;
4934
- const encoding = datasetReshapeInfo.reduce((prev, cur, index)=>{
4935
- const measure = measures[index];
4936
- if ('children' in measure) {
4937
- const m1 = measure.children?.[0];
4938
- const m2 = measure.children?.[1] || m1;
4939
- const { foldInfo, unfoldInfo } = cur;
4940
- const x = [
4941
- unfoldInfo.groupId
4942
- ];
4943
- const y = [
4944
- m1?.id,
4945
- m2?.id
4946
- ];
4947
- const group = [
4948
- unfoldInfo.groupId
4949
- ];
4950
- const color = [
4951
- foldInfo.measureName
4952
- ];
4953
- return [
4954
- ...prev,
4955
- {
4956
- x,
4957
- y,
4958
- group,
4959
- color
4960
- }
4961
- ];
4962
- }
4963
- {
4964
- const m1 = measures[index];
4965
- const m2 = measures[index + 1] || m1;
4966
- const { foldInfo, unfoldInfo } = cur;
4967
- const x = [
4968
- unfoldInfo.groupId
4969
- ];
4970
- const y = [
4971
- m1.id,
4972
- m2.id
4973
- ];
4974
- const group = [
4975
- unfoldInfo.groupId
4976
- ];
4977
- const color = [
4978
- foldInfo.measureName
4979
- ];
4980
- return [
4981
- ...prev,
4982
- {
4983
- x,
4984
- y,
4985
- group,
4986
- color
4987
- }
4988
- ];
4989
- }
4990
- }, []);
4991
- return {
4992
- ...result,
4993
- encoding
4994
- };
4995
- };
4996
- const areaRangeAdvancedPipeline = [
4886
+ const scatterAdvancedPipeline = [
4997
4887
  initAdvancedVSeed_initAdvancedVSeed,
4998
- autoMeasuresBy2M1Group,
4888
+ autoScatterMeasures,
4999
4889
  autoDimensions_autoDimensions,
4890
+ encodingForScatter,
5000
4891
  pivotAdapter([
5001
- reshapeTo1D
4892
+ reshapeWithScatterEncoding
5002
4893
  ], [
5003
- pivotReshapeTo1D
4894
+ pivotReshapeWithScatterEncoding
5004
4895
  ]),
5005
- encodingAreaRange,
5006
- sortXBandAxis,
5007
- areaConfig,
4896
+ scatterConfig,
5008
4897
  theme_theme,
5009
4898
  markStyle_markStyle,
5010
4899
  annotation_annotation
5011
4900
  ];
5012
- const series = (...args)=>{
5013
- const result = {
5014
- type: 'common',
5015
- padding: 0,
5016
- region: [
5017
- {
5018
- clip: true
5019
- }
5020
- ]
5021
- };
5022
- return (_, context)=>{
5023
- result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5024
- return result;
5025
- };
5026
- };
5027
- const seriesDualAxis = (...args)=>{
5028
- const result = {
5029
- type: 'common',
5030
- padding: 0,
5031
- region: [
5032
- {
5033
- clip: true
5034
- }
5035
- ]
5036
- };
5037
- const createDualContext = (context, index)=>{
5038
- const { advancedVSeed } = context;
5039
- const dataset = advancedVSeed.dataset[index];
5040
- return {
5041
- ...context,
5042
- advancedVSeed: {
5043
- ...advancedVSeed,
5044
- dataset: dataset
5045
- }
5046
- };
5047
- };
5048
- return (_, context)=>{
5049
- result.series = args.map((pipeline, index)=>{
5050
- const seriesContext = createDualContext(context, index);
5051
- return execPipeline(pipeline, seriesContext, {});
5052
- });
5053
- return result;
5054
- };
5055
- };
5056
- const initAreaRange = (spec, context)=>{
4901
+ const initScatter = (spec, context)=>{
5057
4902
  const result = {
5058
4903
  ...spec
5059
4904
  };
5060
4905
  const { advancedVSeed } = context;
5061
- const { encoding } = advancedVSeed;
5062
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5063
- const { color } = advancedVSeed.config.areaRange;
5064
- result.type = 'rangeArea';
4906
+ const { datasetReshapeInfo } = advancedVSeed;
4907
+ const { unfoldInfo, foldInfoList } = datasetReshapeInfo[0];
4908
+ result.type = 'scatter';
5065
4909
  result.direction = 'vertical';
5066
- result.stack = false;
5067
- result.xField = encoding[0].x[0];
5068
- result.yField = [
5069
- encoding[0].y[0],
5070
- encoding[0].y[1]
4910
+ result.xField = foldInfoList?.[0].measureValue;
4911
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
4912
+ result.seriesField = unfoldInfo.encodingColorId;
4913
+ result.padding = 0;
4914
+ result.region = [
4915
+ {
4916
+ clip: true
4917
+ }
5071
4918
  ];
5072
4919
  result.animation = true;
5073
- result.area = {
5074
- style: {
5075
- fill: color.colorScheme?.[0]
5076
- }
5077
- };
5078
4920
  return result;
5079
4921
  };
5080
- const initAreaRangeLine1 = (spec, context)=>{
5081
- const result = {
5082
- ...spec
5083
- };
5084
- const { advancedVSeed } = context;
5085
- const { encoding } = advancedVSeed;
5086
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5087
- const { color } = advancedVSeed.config.areaRange;
5088
- result.type = 'line';
5089
- result.direction = 'vertical';
5090
- result.stack = false;
5091
- result.xField = encoding[0].x[0];
5092
- result.yField = [
5093
- encoding[0].y[0]
5094
- ];
5095
- result.animation = true;
5096
- result.line = {
5097
- style: {
5098
- stroke: color.colorScheme?.[0]
5099
- }
5100
- };
5101
- result.point = {
5102
- style: {
5103
- visible: false,
5104
- fill: color.colorScheme?.[0]
5105
- }
5106
- };
5107
- return result;
5108
- };
5109
- const initAreaRangeLine2 = (spec, context)=>{
5110
- const result = {
5111
- ...spec
5112
- };
5113
- const { advancedVSeed } = context;
5114
- const { encoding } = advancedVSeed;
5115
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5116
- const { color } = advancedVSeed.config.areaRange;
5117
- result.type = 'line';
5118
- result.direction = 'vertical';
5119
- result.stack = false;
5120
- result.xField = encoding[0].x[0];
5121
- result.yField = [
5122
- encoding[0].y[1]
5123
- ];
5124
- result.animation = true;
5125
- result.line = {
5126
- style: {
5127
- stroke: color.colorScheme?.[0]
5128
- }
5129
- };
5130
- result.point = {
5131
- style: {
5132
- visible: false,
5133
- fill: color.colorScheme?.[0]
5134
- }
5135
- };
5136
- return result;
5137
- };
5138
- const tooltipDisable = (spec)=>{
5139
- const result = {
5140
- ...spec
5141
- };
5142
- result.tooltip = {
5143
- visible: false
5144
- };
5145
- return result;
5146
- };
5147
- const tooltipAreaRange = (spec, context)=>{
5148
- const result = {
5149
- ...spec
5150
- };
5151
- const { advancedVSeed } = context;
5152
- const { measures, datasetReshapeInfo, chartType, locale, encoding } = advancedVSeed;
5153
- const baseConfig = advancedVSeed.config[chartType];
5154
- const { tooltip = {
5155
- enable: true
5156
- } } = baseConfig;
5157
- const { enable } = tooltip;
5158
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
5159
- const y = encoding[0]?.y || [];
5160
- result.tooltip = {
5161
- visible: enable,
5162
- dimension: {
5163
- content: [
5164
- {
5165
- visible: true,
5166
- key: (datum)=>datum && datum[groupName] || '',
5167
- value: (datum)=>{
5168
- if (!datum) return '';
5169
- const text = y.map((id)=>{
5170
- const value = datum[id];
5171
- const measure = findMeasureById(measures, id);
5172
- if (!measure) return String(value);
5173
- const { format = {}, autoFormat = true } = measure;
5174
- if (!isEmpty(format)) {
5175
- const formatter = createFormatter(format);
5176
- return formatter(value);
5177
- }
5178
- if (autoFormat) return autoFormatter(value, locale);
5179
- return String(value);
5180
- });
5181
- return text.join(' ~ ');
5182
- },
5183
- shapeType: 'rectRound'
5184
- },
5185
- ...y.map((id)=>{
5186
- const measure = findMeasureById(measures, id);
5187
- return {
5188
- visible: true,
5189
- key: measure?.alias || id,
5190
- value: (datum)=>{
5191
- if (!datum) return '';
5192
- const value = datum[id];
5193
- const measure = findMeasureById(measures, id);
5194
- if (!measure) return String(value);
5195
- const { format = {}, autoFormat = true } = measure;
5196
- if (!isEmpty(format)) {
5197
- const formatter = createFormatter(format);
5198
- return formatter(value);
5199
- }
5200
- if (autoFormat) return autoFormatter(value, locale);
5201
- return String(value);
5202
- },
5203
- shapeType: 'rectRound'
5204
- };
5205
- })
5206
- ]
5207
- }
5208
- };
5209
- return result;
5210
- };
5211
- const areaRange = [
5212
- series([
5213
- initAreaRange,
5214
- areaStyle_areaStyle
5215
- ], [
5216
- initAreaRangeLine1,
5217
- lineStyle_lineStyle,
5218
- pointStyle_pointStyle,
5219
- pointStateDimensionHover,
5220
- tooltipDisable
5221
- ], [
5222
- initAreaRangeLine2,
5223
- lineStyle_lineStyle,
5224
- pointStyle_pointStyle,
5225
- pointStateDimensionHover,
5226
- tooltipDisable
5227
- ]),
5228
- datasetXY,
5229
- progressive,
5230
- background_backgroundColor,
5231
- xBand,
5232
- yLinear,
5233
- label_label,
5234
- tooltipAreaRange,
5235
- verticalCrosshairLine,
5236
- annotationPoint_annotationPoint,
5237
- annotationVerticalLine_annotationVerticalLine,
5238
- annotationHorizontalLine_annotationHorizontalLine,
5239
- annotationArea_annotationArea
5240
- ];
5241
- const pivotAreaRange = [
5242
- initPivot,
5243
- pivotGridStyle,
5244
- pivotIndicators_pivotIndicatorsAsRow,
5245
- datasetPivot,
5246
- pivotIndicators_pivotIndicators([
5247
- series([
5248
- initAreaRange,
5249
- areaStyle_areaStyle
5250
- ], [
5251
- initAreaRangeLine1,
5252
- lineStyle_lineStyle,
5253
- pointStyle_pointStyle,
5254
- pointStateDimensionHover,
5255
- tooltipDisable
5256
- ], [
5257
- initAreaRangeLine2,
5258
- lineStyle_lineStyle,
5259
- pointStyle_pointStyle,
5260
- pointStateDimensionHover,
5261
- tooltipDisable
5262
- ]),
5263
- background_backgroundColor,
5264
- datasetXY,
5265
- progressive,
5266
- xBand,
5267
- yLinear,
5268
- label_label,
5269
- tooltipAreaRange,
5270
- verticalCrosshairLine,
5271
- annotationPoint_annotationPoint,
5272
- annotationVerticalLine_annotationVerticalLine,
5273
- annotationHorizontalLine_annotationHorizontalLine,
5274
- annotationArea_annotationArea
5275
- ]),
5276
- pivotRowDimensions,
5277
- pivotColumnDimensions
5278
- ];
5279
- const areaRangeSpecPipeline = [
5280
- pivotAdapter_pivotAdapter(areaRange, pivotAreaRange)
5281
- ];
5282
- const registerAreaRange = ()=>{
5283
- Builder._advancedPipelineMap.areaRange = areaRangeAdvancedPipeline;
5284
- Builder._specPipelineMap.areaRange = areaRangeSpecPipeline;
5285
- };
5286
- const dataReshapeFor1D2M_emptyReshapeResult = {
5287
- dataset: [],
5288
- foldInfo: {
5289
- foldMap: {},
5290
- measureId: '',
5291
- measureName: '',
5292
- measureValue: ''
5293
- },
5294
- unfoldInfo: {
5295
- groupName: '',
5296
- groupId: '',
5297
- colorItems: [],
5298
- colorIdMap: {}
5299
- }
5300
- };
5301
- const dataReshapeFor1D2M = (dataset, dimensions, measures, options)=>{
5302
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
5303
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D2M_emptyReshapeResult;
5304
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures.length > 1 ? measures.slice(1) : measures, foldMeasureId, foldMeasureName, foldMeasureValue);
5305
- if (0 === dimensions.length) {
5306
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5307
- {
5308
- id: foldMeasureValue,
5309
- alias: i18n`指标值`,
5310
- location: 'dimension'
5311
- }
5312
- ], [
5313
- {
5314
- id: foldMeasureValue,
5315
- alias: i18n`指标值`
5316
- }
5317
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5318
- return {
5319
- dataset: finalDataset,
5320
- foldInfo,
5321
- unfoldInfo
5322
- };
5323
- }
5324
- {
5325
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5326
- ...dimensions
5327
- ], [
5328
- {
5329
- id: foldMeasureValue,
5330
- alias: i18n`指标值`
5331
- }
5332
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5333
- return {
5334
- dataset: finalDataset,
5335
- foldInfo,
5336
- unfoldInfo
5337
- };
5338
- }
5339
- };
5340
- const reshapeTo1D2M = (advancedVSeed, context)=>{
5341
- const result = {
5342
- ...advancedVSeed
5343
- };
5344
- const { vseed } = context;
5345
- const { dataset } = vseed;
5346
- const { dimensions, measures } = advancedVSeed;
5347
- if (!measures || !dimensions || !dataset) return result;
5348
- if (0 === measures.length) throw new Error('measures can not be empty');
5349
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, dimensions, measures);
5350
- return {
5351
- ...result,
5352
- dataset: newDatasets,
5353
- datasetReshapeInfo: [
5354
- {
5355
- id: '1D2M',
5356
- index: 0,
5357
- foldInfo,
5358
- unfoldInfo
5359
- }
5360
- ]
5361
- };
5362
- };
5363
- const pivotReshapeTo1D2M = (advancedVSeed, context)=>{
5364
- const result = {
5365
- ...advancedVSeed
5366
- };
5367
- const { vseed } = context;
5368
- const { dataset } = vseed;
5369
- const { measures } = advancedVSeed;
5370
- const dimensions = advancedVSeed.dimensions;
5371
- if (!measures || !dimensions) return result;
5372
- const measureGroups = [];
5373
- if (measures) measures.forEach((measure)=>{
5374
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
5375
- });
5376
- const newDatasets = [];
5377
- const datasetReshapeInfo = [];
5378
- measureGroups.forEach((measureGroup, index)=>{
5379
- const measures = measureGroup.children;
5380
- if (!measures) return;
5381
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5382
- const groupId = measureGroup.id;
5383
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, commonDimensions, measures, {
5384
- foldMeasureId: FoldMeasureId,
5385
- foldMeasureName: FoldMeasureName,
5386
- foldMeasureValue: FoldMeasureValue + groupId,
5387
- unfoldDimensionGroup: UnfoldDimensionGroup
5388
- });
5389
- const reshapeInfo = {
5390
- id: groupId,
5391
- index,
5392
- foldInfo,
5393
- unfoldInfo
5394
- };
5395
- newDatasets.push(newSubDataset);
5396
- datasetReshapeInfo.push(reshapeInfo);
5397
- });
5398
- return {
5399
- ...result,
5400
- dataset: newDatasets,
5401
- datasetReshapeInfo: datasetReshapeInfo
5402
- };
5403
- };
5404
- const encodingYY = (advancedVSeed)=>{
5405
- const result = {
5406
- ...advancedVSeed
5407
- };
5408
- const { datasetReshapeInfo, measures } = advancedVSeed;
5409
- if (!datasetReshapeInfo || !measures) return result;
5410
- const firstMeasure = findFirstMeasure(measures);
5411
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
5412
- const { foldInfo, unfoldInfo } = cur;
5413
- const x = [
5414
- firstMeasure?.id
5415
- ];
5416
- const y = [
5417
- foldInfo.measureValue
5418
- ];
5419
- const group = [
5420
- unfoldInfo.groupId
5421
- ];
5422
- const color = [
5423
- unfoldInfo.groupId
5424
- ];
5425
- return [
5426
- ...prev,
5427
- {
5428
- x,
5429
- y,
5430
- group,
5431
- color
5432
- }
5433
- ];
5434
- }, []);
4922
+ const datasetScatter = (spec, context)=>{
4923
+ const { advancedVSeed, vseed } = context;
4924
+ const { datasetReshapeInfo } = advancedVSeed;
4925
+ const id = datasetReshapeInfo[0].id;
4926
+ const fields = {};
5435
4927
  return {
5436
- ...result,
5437
- encoding
5438
- };
5439
- };
5440
- const scatterAdvancedPipeline = [
5441
- initAdvancedVSeed_initAdvancedVSeed,
5442
- autoMeasures_autoMeasures,
5443
- autoDimensions_autoDimensions,
5444
- pivotAdapter([
5445
- reshapeTo1D2M
5446
- ], [
5447
- pivotReshapeTo1D2M
5448
- ]),
5449
- encodingYY,
5450
- scatterConfig,
5451
- theme_theme,
5452
- markStyle_markStyle,
5453
- annotation_annotation
5454
- ];
5455
- const initScatter = (spec, context)=>{
5456
- const result = {
5457
- ...spec
5458
- };
5459
- const { advancedVSeed } = context;
5460
- const { encoding } = advancedVSeed;
5461
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5462
- result.type = 'scatter';
5463
- result.direction = 'vertical';
5464
- result.xField = encoding[0].x[0];
5465
- result.yField = encoding[0].y[0];
5466
- result.seriesField = encoding[0].group[0];
5467
- result.padding = 0;
5468
- result.region = [
5469
- {
5470
- clip: true
4928
+ ...spec,
4929
+ data: {
4930
+ id,
4931
+ values: isPivotChart(vseed) ? void 0 : advancedVSeed.dataset.flat(),
4932
+ fields: fields
5471
4933
  }
5472
- ];
5473
- result.animation = true;
5474
- return result;
4934
+ };
5475
4935
  };
5476
4936
  const horizontalCrosshairLine = (spec, context)=>{
5477
4937
  const result = {
@@ -5521,7 +4981,7 @@ const scatter = [
5521
4981
  initScatter,
5522
4982
  color_color,
5523
4983
  background_backgroundColor,
5524
- datasetXY,
4984
+ datasetScatter,
5525
4985
  progressive,
5526
4986
  xLinear,
5527
4987
  yLinear,
@@ -5546,7 +5006,7 @@ const pivotScatter = [
5546
5006
  initScatter,
5547
5007
  color_color,
5548
5008
  background_backgroundColor,
5549
- datasetXY,
5009
+ datasetScatter,
5550
5010
  progressive,
5551
5011
  xLinear,
5552
5012
  yLinear,
@@ -5572,41 +5032,169 @@ const registerScatter = ()=>{
5572
5032
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5573
5033
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5574
5034
  };
5575
- const reshapeTo2D2M = (advancedVSeed, context)=>{
5035
+ const autoDualMeasures = (advancedVSeed, context)=>{
5036
+ const result = {
5037
+ ...advancedVSeed
5038
+ };
5039
+ const { vseed } = context;
5040
+ const { dataset, dualMeasures, measures } = vseed;
5041
+ if (!dataset) throw new Error('dataset is required');
5042
+ if (0 === dataset.length) return result;
5043
+ if (dualMeasures) {
5044
+ result.measures = dualMeasuresToMeasureTree(dualMeasures);
5045
+ return result;
5046
+ }
5047
+ if (measures && measureDepth(measures) > 1) {
5048
+ result.measures = measures;
5049
+ return result;
5050
+ }
5051
+ const top100dataset = dataset.slice(0, 100);
5052
+ const sample = top100dataset.reduce((prev, cur)=>({
5053
+ ...prev,
5054
+ ...cur
5055
+ }), {});
5056
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5057
+ '',
5058
+ null,
5059
+ void 0
5060
+ ].includes(key)).map((measure)=>({
5061
+ id: measure,
5062
+ alias: measure
5063
+ }));
5064
+ if (0 === newMeasures.length) result.measures = [];
5065
+ else if (1 === newMeasures.length) result.measures = [
5066
+ {
5067
+ id: 'primary',
5068
+ alias: 'primary',
5069
+ children: newMeasures
5070
+ }
5071
+ ];
5072
+ else if (newMeasures.length > 1) result.measures = [
5073
+ {
5074
+ id: 'primary',
5075
+ alias: 'primary',
5076
+ children: newMeasures.slice(0, 1)
5077
+ },
5078
+ {
5079
+ id: 'secondary',
5080
+ alias: 'secondary',
5081
+ children: newMeasures.slice(1)
5082
+ }
5083
+ ];
5084
+ return result;
5085
+ };
5086
+ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5087
+ const measureTree = dualMeasures.map((item, index)=>{
5088
+ const { primaryMeasures, secondaryMeasures } = item;
5089
+ const groupChildren = [];
5090
+ let id = '';
5091
+ if (primaryMeasures) {
5092
+ const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5093
+ primaryMeasures
5094
+ ];
5095
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5096
+ id += alias;
5097
+ groupChildren.push({
5098
+ id: `${index}-primary`,
5099
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5100
+ children: arrPrimaryMeasures
5101
+ });
5102
+ }
5103
+ if (secondaryMeasures) {
5104
+ const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
5105
+ secondaryMeasures
5106
+ ];
5107
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5108
+ id += alias;
5109
+ groupChildren.push({
5110
+ id: `${index}-secondary`,
5111
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5112
+ children: arrSecondaryMeasures
5113
+ });
5114
+ }
5115
+ return {
5116
+ id,
5117
+ alias: id,
5118
+ children: groupChildren
5119
+ };
5120
+ });
5121
+ if (1 === dualMeasures.length) return measureTree[0].children || [];
5122
+ return measureTree;
5123
+ };
5124
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5125
+ const { vseed } = context;
5126
+ const { dimensions } = advancedVSeed;
5127
+ if (!dimensions) return advancedVSeed;
5128
+ const encoding = vseed.encoding;
5129
+ if (encoding) {
5130
+ const x = encoding.x || [
5131
+ dimensions[0].id
5132
+ ];
5133
+ const color = encoding.color || [
5134
+ (dimensions[1] || dimensions[0]).id
5135
+ ];
5136
+ const detail = encoding.detail || [];
5137
+ const mergedDetail = unique([
5138
+ ...color,
5139
+ ...detail
5140
+ ]);
5141
+ return {
5142
+ ...advancedVSeed,
5143
+ encoding: {
5144
+ ...encoding,
5145
+ x,
5146
+ color,
5147
+ detail: mergedDetail
5148
+ }
5149
+ };
5150
+ }
5151
+ const mergedEncoding = {
5152
+ x: dimensions.slice(0, 1).map((item)=>item.id),
5153
+ color: dimensions.slice(1).map((item)=>item.id),
5154
+ detail: dimensions.slice(1).map((item)=>item.id),
5155
+ tooltip: dimensions.map((item)=>item.id),
5156
+ label: [],
5157
+ row: [],
5158
+ column: []
5159
+ };
5160
+ return {
5161
+ ...advancedVSeed,
5162
+ encoding: mergedEncoding
5163
+ };
5164
+ };
5165
+ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5576
5166
  const result = {
5577
5167
  ...advancedVSeed
5578
5168
  };
5579
5169
  const { vseed } = context;
5580
5170
  const { dataset } = vseed;
5581
- const { dimensions, measures } = advancedVSeed;
5582
- if (!measures || !dimensions || !dataset) return result;
5171
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5172
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5583
5173
  if (0 === measures.length) throw new Error('measures can not be empty');
5584
5174
  if (measures.length > 2) throw new Error('measures can not be more than 2');
5585
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5586
- const datasets = [];
5587
5175
  const foldInfoList = [];
5588
5176
  const unfoldInfoList = [];
5177
+ const datasets = [];
5589
5178
  const primaryMeasures = measures[0];
5590
5179
  const secondaryMeasures = measures[1] || [];
5591
5180
  if (primaryMeasures && primaryMeasures.children) {
5592
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5181
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5593
5182
  foldMeasureValue: FoldPrimaryMeasureValue
5594
5183
  });
5595
- datasets.push(newDatasets);
5184
+ datasets.push(newDataset);
5596
5185
  foldInfoList.push(foldInfo);
5597
5186
  unfoldInfoList.push(unfoldInfo);
5598
5187
  }
5599
5188
  if (secondaryMeasures && secondaryMeasures.children) {
5600
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5189
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5601
5190
  foldMeasureValue: FoldSecondaryMeasureValue
5602
5191
  });
5603
- datasets.push(newDatasets);
5192
+ datasets.push(newDataset);
5604
5193
  foldInfoList.push(foldInfo);
5605
5194
  unfoldInfoList.push(unfoldInfo);
5606
5195
  }
5607
5196
  const unfoldInfo = {
5608
- groupName: unfoldInfoList[0].groupName,
5609
- groupId: unfoldInfoList[0].groupId,
5197
+ ...unfoldInfoList[0],
5610
5198
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5611
5199
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5612
5200
  ...prev,
@@ -5618,7 +5206,7 @@ const reshapeTo2D2M = (advancedVSeed, context)=>{
5618
5206
  dataset: datasets,
5619
5207
  datasetReshapeInfo: [
5620
5208
  {
5621
- id: '2D2M',
5209
+ id: String(chartType),
5622
5210
  index: 0,
5623
5211
  foldInfo: foldInfoList[0],
5624
5212
  foldInfoList: foldInfoList,
@@ -5627,46 +5215,48 @@ const reshapeTo2D2M = (advancedVSeed, context)=>{
5627
5215
  ]
5628
5216
  };
5629
5217
  };
5630
- const pivotReshapeTo2D2M = (advancedVSeed, context)=>{
5218
+ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5631
5219
  const result = {
5632
5220
  ...advancedVSeed
5633
5221
  };
5634
5222
  const { vseed } = context;
5635
5223
  const { dataset } = vseed;
5636
- const { dimensions, measures } = advancedVSeed;
5637
- if (!measures || !dimensions || !dataset) return result;
5638
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5224
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5225
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5639
5226
  const datasetList = [];
5640
5227
  const datasetReshapeInfo = [];
5641
- measures.forEach((measureGroup, index)=>{
5642
- const measures = measureGroup.children || [];
5228
+ const measureGroups = [];
5229
+ const depth = measureDepth(measures);
5230
+ if (3 === depth) measures.forEach((measure)=>{
5231
+ measureGroups.push(measure.children);
5232
+ });
5233
+ else if (2 === depth) measureGroups.push(measures);
5234
+ measureGroups.forEach((measures, index)=>{
5643
5235
  if (0 === measures.length) throw new Error('measures can not be empty');
5644
5236
  if (measures.length > 2) throw new Error('measures can not be more than 2');
5645
- const datasets = [];
5646
5237
  const foldInfoList = [];
5647
5238
  const unfoldInfoList = [];
5239
+ const datasets = [];
5648
5240
  const primaryMeasures = measures[0];
5649
- const secondaryMeasures = measures[1] || measures[0];
5241
+ const secondaryMeasures = measures[1] || [];
5650
5242
  if (primaryMeasures && primaryMeasures.children) {
5651
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5243
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5652
5244
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
5653
5245
  });
5654
- datasets.push(newDatasets);
5246
+ datasets.push(newDataset);
5655
5247
  foldInfoList.push(foldInfo);
5656
5248
  unfoldInfoList.push(unfoldInfo);
5657
5249
  }
5658
5250
  if (secondaryMeasures && secondaryMeasures.children) {
5659
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5251
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5660
5252
  foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
5661
5253
  });
5662
- datasets.push(newDatasets);
5254
+ datasets.push(newDataset);
5663
5255
  foldInfoList.push(foldInfo);
5664
5256
  unfoldInfoList.push(unfoldInfo);
5665
5257
  }
5666
- datasetList.push(datasets.flat(2));
5667
5258
  const unfoldInfo = {
5668
- groupName: unfoldInfoList[0].groupName,
5669
- groupId: unfoldInfoList[0].groupId,
5259
+ ...unfoldInfoList[0],
5670
5260
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5671
5261
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5672
5262
  ...prev,
@@ -5674,53 +5264,19 @@ const pivotReshapeTo2D2M = (advancedVSeed, context)=>{
5674
5264
  }), {})
5675
5265
  };
5676
5266
  const reshapeInfo = {
5677
- id: `2D2M-${index}`,
5267
+ id: `${chartType}-${index}`,
5678
5268
  index,
5679
5269
  foldInfo: foldInfoList[0],
5680
- unfoldInfo: unfoldInfo,
5681
- foldInfoList: foldInfoList
5270
+ foldInfoList: foldInfoList,
5271
+ unfoldInfo: unfoldInfo
5682
5272
  };
5683
5273
  datasetReshapeInfo.push(reshapeInfo);
5274
+ datasetList.push(datasets.flat(2));
5684
5275
  });
5685
5276
  return {
5686
5277
  ...result,
5687
5278
  dataset: datasetList,
5688
- datasetReshapeInfo
5689
- };
5690
- };
5691
- const encodingXYY = (advancedVSeed)=>{
5692
- const result = {
5693
- ...advancedVSeed
5694
- };
5695
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
5696
- if (!datasetReshapeInfo || !dimensions) return result;
5697
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
5698
- const isZeroDimension = 0 === dimensions.length;
5699
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
5700
- const { foldInfoList, unfoldInfo } = cur;
5701
- const x = [
5702
- isZeroDimension ? foldInfoList[0].measureName : xDimension?.id
5703
- ];
5704
- const y = foldInfoList.map((d)=>d.measureValue);
5705
- const group = [
5706
- unfoldInfo.groupId
5707
- ];
5708
- const color = [
5709
- foldInfoList[0].measureName
5710
- ];
5711
- return [
5712
- ...prev,
5713
- {
5714
- x,
5715
- y,
5716
- group,
5717
- color
5718
- }
5719
- ];
5720
- }, []);
5721
- return {
5722
- ...result,
5723
- encoding
5279
+ datasetReshapeInfo: datasetReshapeInfo
5724
5280
  };
5725
5281
  };
5726
5282
  const dualAxisConfig = (advancedVSeed, context)=>{
@@ -5749,125 +5305,80 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5749
5305
  };
5750
5306
  return result;
5751
5307
  };
5752
- const autoDualMeasures = (advancedVSeed, context)=>{
5753
- const result = {
5754
- ...advancedVSeed
5755
- };
5756
- const { vseed } = context;
5757
- const { dataset, dualMeasures, measures } = vseed;
5758
- if (!dataset) throw new Error('dataset is required');
5759
- if (0 === dataset.length) return result;
5760
- if (dualMeasures) {
5761
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
5762
- return result;
5763
- }
5764
- if (measures && measureDepth(measures) > 1) {
5765
- result.measures = measures;
5766
- return result;
5767
- }
5768
- const top100dataset = dataset.slice(0, 100);
5769
- const sample = top100dataset.reduce((prev, cur)=>({
5770
- ...prev,
5771
- ...cur
5772
- }), {});
5773
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5774
- '',
5775
- null,
5776
- void 0
5777
- ].includes(key)).map((measure)=>({
5778
- id: measure,
5779
- alias: measure
5780
- }));
5781
- if (0 === newMeasures.length) result.measures = [];
5782
- else if (1 === newMeasures.length) result.measures = [
5783
- {
5784
- id: 'primary',
5785
- alias: 'primary',
5786
- children: newMeasures
5787
- }
5788
- ];
5789
- else if (newMeasures.length > 1) result.measures = [
5790
- {
5791
- id: 'primary',
5792
- alias: 'primary',
5793
- children: newMeasures.slice(0, 1)
5794
- },
5795
- {
5796
- id: 'secondary',
5797
- alias: 'secondary',
5798
- children: newMeasures.slice(1)
5799
- }
5800
- ];
5801
- return result;
5802
- };
5803
- const dualMeasuresToMeasureTree = (dualMeasures)=>{
5804
- const measureTree = dualMeasures.map((item, index)=>{
5805
- const { primaryMeasures, secondaryMeasures } = item;
5806
- const groupChildren = [];
5807
- let id = '';
5808
- if (primaryMeasures) {
5809
- const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5810
- primaryMeasures
5811
- ];
5812
- const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5813
- id += alias;
5814
- groupChildren.push({
5815
- id: `${index}-primary`,
5816
- alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5817
- children: arrPrimaryMeasures
5818
- });
5819
- }
5820
- if (secondaryMeasures) {
5821
- const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
5822
- secondaryMeasures
5823
- ];
5824
- const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5825
- id += alias;
5826
- groupChildren.push({
5827
- id: `${index}-secondary`,
5828
- alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5829
- children: arrSecondaryMeasures
5830
- });
5831
- }
5832
- return {
5833
- id,
5834
- alias: id,
5835
- children: groupChildren
5836
- };
5837
- });
5838
- if (1 === dualMeasures.length) return measureTree[0].children || [];
5839
- return measureTree;
5840
- };
5841
5308
  const dualAxisAdvancedPipeline = [
5842
5309
  initAdvancedVSeed_initAdvancedVSeed,
5843
5310
  autoDualMeasures,
5844
5311
  autoDimensions_autoDimensions,
5312
+ encodingForDualAxis,
5845
5313
  pivotAdapter([
5846
- reshapeTo2D2M
5314
+ reshapeWithDualEncoding
5847
5315
  ], [
5848
- pivotReshapeTo2D2M
5316
+ pivotReshapeWithDualEncoding
5849
5317
  ]),
5850
- encodingXYY,
5851
5318
  sortXBandAxis,
5852
- sort_sortLegend,
5319
+ sortLegend_sortLegend,
5853
5320
  dualAxisConfig,
5854
5321
  theme_theme,
5855
5322
  markStyle_markStyle,
5856
5323
  annotation_annotation
5857
5324
  ];
5325
+ const series = (...args)=>{
5326
+ const result = {
5327
+ type: 'common',
5328
+ padding: 0,
5329
+ region: [
5330
+ {
5331
+ clip: true
5332
+ }
5333
+ ]
5334
+ };
5335
+ return (_, context)=>{
5336
+ result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5337
+ return result;
5338
+ };
5339
+ };
5340
+ const seriesDualAxis = (...args)=>{
5341
+ const result = {
5342
+ type: 'common',
5343
+ padding: 0,
5344
+ region: [
5345
+ {
5346
+ clip: true
5347
+ }
5348
+ ]
5349
+ };
5350
+ const createDualContext = (context, index)=>{
5351
+ const { advancedVSeed } = context;
5352
+ const dataset = advancedVSeed.dataset[index];
5353
+ return {
5354
+ ...context,
5355
+ advancedVSeed: {
5356
+ ...advancedVSeed,
5357
+ dataset: dataset
5358
+ }
5359
+ };
5360
+ };
5361
+ return (_, context)=>{
5362
+ result.series = args.map((pipeline, index)=>{
5363
+ const seriesContext = createDualContext(context, index);
5364
+ return execPipeline(pipeline, seriesContext, {});
5365
+ });
5366
+ return result;
5367
+ };
5368
+ };
5858
5369
  const initDualAxisPrimary = (spec, context)=>{
5859
5370
  const result = {
5860
5371
  ...spec
5861
5372
  };
5862
5373
  const { advancedVSeed } = context;
5863
- const { encoding, datasetReshapeInfo } = advancedVSeed;
5864
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5865
- result.id = `${datasetReshapeInfo[0].id}-primary-series`;
5374
+ const { datasetReshapeInfo } = advancedVSeed;
5375
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5376
+ result.id = `${id}-primary-series`;
5866
5377
  result.type = 'bar';
5867
5378
  result.direction = 'vertical';
5868
- result.xField = encoding[0].x[0];
5869
- result.yField = encoding[0].y[0];
5870
- result.seriesField = encoding[0].group[0];
5379
+ result.xField = unfoldInfo.encodingX;
5380
+ result.seriesField = unfoldInfo.encodingColorId;
5381
+ result.yField = foldInfoList?.[0].measureValue;
5871
5382
  result.animation = true;
5872
5383
  return result;
5873
5384
  };
@@ -5876,14 +5387,14 @@ const initDualAxisSecondary = (spec, context)=>{
5876
5387
  ...spec
5877
5388
  };
5878
5389
  const { advancedVSeed } = context;
5879
- const { encoding, datasetReshapeInfo } = advancedVSeed;
5880
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5881
- result.id = `${datasetReshapeInfo[0].id}-secondary-series`;
5390
+ const { datasetReshapeInfo } = advancedVSeed;
5391
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5392
+ result.id = `${id}-secondary-series`;
5882
5393
  result.type = 'line';
5883
5394
  result.direction = 'vertical';
5884
- result.xField = encoding[0].x[0];
5885
- result.yField = encoding[0].y[1];
5886
- result.seriesField = encoding[0].group[0];
5395
+ result.xField = unfoldInfo.encodingX;
5396
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5397
+ result.seriesField = unfoldInfo.encodingColorId;
5887
5398
  result.animation = true;
5888
5399
  return result;
5889
5400
  };
@@ -5915,10 +5426,10 @@ const dualChartTypePrimary = (spec, context)=>{
5915
5426
  case 'columnParallel':
5916
5427
  {
5917
5428
  const columnSpec = result;
5918
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5429
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
5919
5430
  else if (columnSpec.xField) columnSpec.xField = [
5920
5431
  columnSpec.xField,
5921
- datasetReshapeInfo[0].unfoldInfo.groupId
5432
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
5922
5433
  ];
5923
5434
  columnSpec.type = 'bar';
5924
5435
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -5971,10 +5482,10 @@ const dualChartTypeSecondary = (spec, context)=>{
5971
5482
  case 'columnParallel':
5972
5483
  {
5973
5484
  const columnSpec = result;
5974
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5485
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
5975
5486
  else if (columnSpec.xField) columnSpec.xField = [
5976
5487
  columnSpec.xField,
5977
- datasetReshapeInfo[0].unfoldInfo.groupId
5488
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
5978
5489
  ];
5979
5490
  columnSpec.type = 'bar';
5980
5491
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6001,10 +5512,11 @@ const dualChartTypeSecondary = (spec, context)=>{
6001
5512
  };
6002
5513
  const datasetPrimary = (spec, context)=>{
6003
5514
  const { advancedVSeed, vseed } = context;
6004
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
5515
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6005
5516
  const orderMapping = analysis?.orderMapping || {};
6006
- const x = encoding[0]?.x?.[0];
6007
- const group = encoding[0]?.group?.[0];
5517
+ const { unfoldInfo } = datasetReshapeInfo[0];
5518
+ const x = unfoldInfo.encodingX;
5519
+ const colorId = unfoldInfo.encodingColorId;
6008
5520
  const id = datasetReshapeInfo[0].id;
6009
5521
  const fields = {};
6010
5522
  if (x) {
@@ -6018,14 +5530,14 @@ const datasetPrimary = (spec, context)=>{
6018
5530
  sortIndex: 0
6019
5531
  };
6020
5532
  }
6021
- if (group) {
6022
- const order = orderMapping[group];
6023
- if (order) fields[group] = {
5533
+ if (colorId) {
5534
+ const order = orderMapping[colorId];
5535
+ if (order) fields[colorId] = {
6024
5536
  sortIndex: 0,
6025
5537
  domain: order,
6026
5538
  lockStatisticsByDomain: true
6027
5539
  };
6028
- else fields[group] = {
5540
+ else fields[colorId] = {
6029
5541
  sortIndex: 0
6030
5542
  };
6031
5543
  }
@@ -6040,10 +5552,11 @@ const datasetPrimary = (spec, context)=>{
6040
5552
  };
6041
5553
  const datasetSecondary = (spec, context)=>{
6042
5554
  const { advancedVSeed, vseed } = context;
6043
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
5555
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6044
5556
  const orderMapping = analysis?.orderMapping || {};
6045
- const x = encoding[0]?.x?.[0];
6046
- const group = encoding[0]?.group?.[0];
5557
+ const { unfoldInfo } = datasetReshapeInfo[0];
5558
+ const x = unfoldInfo.encodingX;
5559
+ const colorId = unfoldInfo.encodingColorId;
6047
5560
  const id = datasetReshapeInfo[0].id;
6048
5561
  const fields = {};
6049
5562
  if (x) {
@@ -6057,14 +5570,14 @@ const datasetSecondary = (spec, context)=>{
6057
5570
  sortIndex: 0
6058
5571
  };
6059
5572
  }
6060
- if (group) {
6061
- const order = orderMapping[group];
6062
- if (order) fields[group] = {
5573
+ if (colorId) {
5574
+ const order = orderMapping[colorId];
5575
+ if (order) fields[colorId] = {
6063
5576
  sortIndex: 0,
6064
5577
  domain: order,
6065
5578
  lockStatisticsByDomain: true
6066
5579
  };
6067
- else fields[group] = {
5580
+ else fields[colorId] = {
6068
5581
  sortIndex: 0
6069
5582
  };
6070
5583
  }
@@ -6162,7 +5675,7 @@ const tooltipPrimary = (spec, context)=>{
6162
5675
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6163
5676
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6164
5677
  const { measureId, measureValue, measureName } = foldInfoList[0];
6165
- const { groupName } = unfoldInfo;
5678
+ const { encodingColor: colorName } = unfoldInfo;
6166
5679
  result.tooltip = {
6167
5680
  visible: enable,
6168
5681
  mark: {
@@ -6183,7 +5696,7 @@ const tooltipPrimary = (spec, context)=>{
6183
5696
  {
6184
5697
  visible: true,
6185
5698
  hasShape: true,
6186
- key: (datum)=>datum && datum[measureName || groupName] || '',
5699
+ key: (datum)=>datum && datum[measureName || colorName] || '',
6187
5700
  value: (datum)=>{
6188
5701
  if (!datum) return '';
6189
5702
  const value = datum[measureValue];
@@ -6205,7 +5718,7 @@ const tooltipPrimary = (spec, context)=>{
6205
5718
  content: [
6206
5719
  {
6207
5720
  visible: true,
6208
- key: (datum)=>datum && datum[groupName] || '',
5721
+ key: (datum)=>datum && datum[colorName] || '',
6209
5722
  value: (datum)=>{
6210
5723
  if (!datum) return '';
6211
5724
  const value = datum[measureValue];
@@ -6242,7 +5755,7 @@ const tooltipSecondary = (spec, context)=>{
6242
5755
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6243
5756
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6244
5757
  const { measureId, measureValue, measureName } = foldInfoList[1];
6245
- const { groupName } = unfoldInfo;
5758
+ const { encodingColorId } = unfoldInfo;
6246
5759
  result.tooltip = {
6247
5760
  visible: enable,
6248
5761
  mark: {
@@ -6263,7 +5776,7 @@ const tooltipSecondary = (spec, context)=>{
6263
5776
  {
6264
5777
  visible: true,
6265
5778
  hasShape: true,
6266
- key: (datum)=>datum && datum[measureName || groupName] || '',
5779
+ key: (datum)=>datum && datum[measureName || encodingColorId] || '',
6267
5780
  value: (datum)=>{
6268
5781
  if (!datum) return '';
6269
5782
  const value = datum[measureValue];
@@ -6285,7 +5798,7 @@ const tooltipSecondary = (spec, context)=>{
6285
5798
  content: [
6286
5799
  {
6287
5800
  visible: true,
6288
- key: (datum)=>datum && datum[groupName] || '',
5801
+ key: (datum)=>datum && datum[encodingColorId] || '',
6289
5802
  value: (datum)=>{
6290
5803
  if (!datum) return '';
6291
5804
  const value = datum[measureValue];
@@ -6314,16 +5827,16 @@ const yLinearPrimary = (spec, context)=>{
6314
5827
  const { advancedVSeed, vseed } = context;
6315
5828
  const { chartType } = vseed;
6316
5829
  const { locale, datasetReshapeInfo } = advancedVSeed;
6317
- const index = datasetReshapeInfo[0].index;
5830
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6318
5831
  const primaryYAxis = advancedVSeed.config?.[chartType]?.primaryYAxis;
6319
5832
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6320
5833
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6321
5834
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6322
- if (datasetReshapeInfo[0].foldInfoList?.[0] && isEmpty(datasetReshapeInfo[0].foldInfoList[0].foldMap)) return result;
6323
- const id = `${datasetReshapeInfo[0].id}-primary-axis`;
5835
+ if (foldInfoList?.[0] && isEmpty(foldInfoList[0].foldMap)) return result;
5836
+ const id = `${reshapeInfoId}-primary-axis`;
6324
5837
  const seriesIds = [
6325
- `${datasetReshapeInfo[0].id}-primary-series`,
6326
- `${datasetReshapeInfo[0].id}-secondary-series`
5838
+ `${reshapeInfoId}-primary-series`,
5839
+ `${reshapeInfoId}-secondary-series`
6327
5840
  ];
6328
5841
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[0];
6329
5842
  if (!result.axes) result.axes = [];
@@ -6411,20 +5924,20 @@ const yLinearSecondary = (spec, context)=>{
6411
5924
  const { advancedVSeed, vseed } = context;
6412
5925
  const { chartType } = vseed;
6413
5926
  const { locale, datasetReshapeInfo } = advancedVSeed;
6414
- const index = datasetReshapeInfo[0].index;
5927
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6415
5928
  const secondaryYAxis = advancedVSeed.config?.[chartType]?.secondaryYAxis;
6416
5929
  const yAxisConfig = Array.isArray(secondaryYAxis) ? secondaryYAxis[index] || secondaryYAxis[0] : secondaryYAxis;
6417
5930
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6418
5931
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6419
- if (isNullish(datasetReshapeInfo[0].foldInfoList?.[1])) return result;
5932
+ if (isNullish(foldInfoList?.[1])) return result;
6420
5933
  const sync = {
6421
- axisId: `${datasetReshapeInfo[0].id}-primary-axis`,
5934
+ axisId: `${reshapeInfoId}-primary-axis`,
6422
5935
  zeroAlign: true
6423
5936
  };
6424
- const id = `${datasetReshapeInfo[0].id}-secondary-axis`;
5937
+ const id = `${reshapeInfoId}-secondary-axis`;
6425
5938
  const seriesIds = [
6426
- `${datasetReshapeInfo[0].id}-primary-series`,
6427
- `${datasetReshapeInfo[0].id}-secondary-series`
5939
+ `${reshapeInfoId}-primary-series`,
5940
+ `${reshapeInfoId}-secondary-series`
6428
5941
  ];
6429
5942
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[1];
6430
5943
  if (!result.axes) result.axes = [];
@@ -6567,208 +6080,71 @@ const pivotDualAxis = [
6567
6080
  initDualAxisSecondary,
6568
6081
  dualChartTypeSecondary,
6569
6082
  datasetSecondary,
6570
- labelSecondary,
6571
- tooltipSecondary,
6572
- progressive,
6573
- barStyle_barStyle,
6574
- pointStyle_pointStyle,
6575
- pointStateDimensionHover,
6576
- lineStyle_lineStyle,
6577
- areaStyle_areaStyle
6578
- ]),
6579
- xBand,
6580
- yLinearPrimary,
6581
- yLinearSecondary,
6582
- color_color,
6583
- background_backgroundColor,
6584
- verticalCrosshairRect,
6585
- annotationPoint_annotationPoint,
6586
- annotationVerticalLine_annotationVerticalLine,
6587
- annotationHorizontalLine_annotationHorizontalLine,
6588
- annotationArea_annotationArea
6589
- ]),
6590
- pivotRowDimensions,
6591
- pivotColumnDimensions,
6592
- pivotDiscreteLegend
6593
- ];
6594
- const dualAxisSpecPipeline = [
6595
- pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
6596
- ];
6597
- const registerDualAxis = ()=>{
6598
- Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6599
- Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
6600
- };
6601
- const dataReshapeFor1D1M_emptyReshapeResult = {
6602
- dataset: [],
6603
- foldInfo: {
6604
- foldMap: {},
6605
- measureId: '',
6606
- measureName: '',
6607
- measureValue: ''
6608
- },
6609
- unfoldInfo: {
6610
- groupName: '',
6611
- groupId: '',
6612
- colorItems: [],
6613
- colorIdMap: {}
6614
- }
6615
- };
6616
- const dataReshapeFor1D1M = (dataset, dimensions, measures, options)=>{
6617
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
6618
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D1M_emptyReshapeResult;
6619
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
6620
- if (0 === dimensions.length) {
6621
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
6622
- {
6623
- id: foldMeasureName,
6624
- alias: i18n`指标名称`,
6625
- location: 'dimension'
6626
- }
6627
- ], [
6628
- {
6629
- id: foldMeasureValue,
6630
- alias: i18n`指标值`
6631
- }
6632
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
6633
- return {
6634
- dataset: finalDataset,
6635
- foldInfo,
6636
- unfoldInfo
6637
- };
6638
- }
6639
- {
6640
- const dims = 1 === measures.length ? [
6641
- ...dimensions
6642
- ] : [
6643
- ...dimensions,
6644
- {
6645
- id: foldMeasureName,
6646
- alias: i18n`指标名称`,
6647
- location: 'dimension'
6648
- }
6649
- ];
6650
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
6651
- {
6652
- id: foldMeasureValue,
6653
- alias: i18n`指标值`
6654
- }
6655
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
6656
- return {
6657
- dataset: finalDataset,
6658
- foldInfo,
6659
- unfoldInfo
6660
- };
6661
- }
6662
- };
6663
- const reshapeTo1D1M = (advancedVSeed, context)=>{
6664
- const result = {
6665
- ...advancedVSeed
6666
- };
6667
- const { vseed } = context;
6668
- const { dataset } = vseed;
6669
- const { dimensions, measures } = advancedVSeed;
6670
- if (!measures || !dimensions || !dataset) return result;
6671
- if (0 === measures.length) throw new Error('measures can not be empty');
6672
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, dimensions, measures);
6673
- return {
6674
- ...result,
6675
- dataset: newDatasets,
6676
- datasetReshapeInfo: [
6677
- {
6678
- id: '1D1M',
6679
- index: 0,
6680
- foldInfo,
6681
- unfoldInfo
6682
- }
6683
- ]
6684
- };
6083
+ labelSecondary,
6084
+ tooltipSecondary,
6085
+ progressive,
6086
+ barStyle_barStyle,
6087
+ pointStyle_pointStyle,
6088
+ pointStateDimensionHover,
6089
+ lineStyle_lineStyle,
6090
+ areaStyle_areaStyle
6091
+ ]),
6092
+ xBand,
6093
+ yLinearPrimary,
6094
+ yLinearSecondary,
6095
+ color_color,
6096
+ background_backgroundColor,
6097
+ verticalCrosshairRect,
6098
+ annotationPoint_annotationPoint,
6099
+ annotationVerticalLine_annotationVerticalLine,
6100
+ annotationHorizontalLine_annotationHorizontalLine,
6101
+ annotationArea_annotationArea
6102
+ ]),
6103
+ pivotRowDimensions,
6104
+ pivotColumnDimensions,
6105
+ pivotDiscreteLegend
6106
+ ];
6107
+ const dualAxisSpecPipeline = [
6108
+ pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
6109
+ ];
6110
+ const registerDualAxis = ()=>{
6111
+ Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6112
+ Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
6685
6113
  };
6686
- const pivotReshapeTo1D1M = (advancedVSeed, context)=>{
6687
- const result = {
6688
- ...advancedVSeed
6689
- };
6114
+ const encodingForPie = (advancedVSeed, context)=>{
6690
6115
  const { vseed } = context;
6691
- const { dataset } = vseed;
6692
- const { measures } = advancedVSeed;
6693
- const dimensions = advancedVSeed.dimensions;
6694
- if (!measures || !dimensions) return result;
6695
- const measureGroups = [];
6696
- if (measures) measures.forEach((measure)=>{
6697
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
6698
- });
6699
- const newDatasets = [];
6700
- const datasetReshapeInfo = [];
6701
- measureGroups.forEach((measureGroup, index)=>{
6702
- const measures = measureGroup.children;
6703
- if (!measures) return;
6704
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
6705
- const groupId = measureGroup.id;
6706
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, commonDimensions, measures, {
6707
- foldMeasureId: FoldMeasureId,
6708
- foldMeasureName: FoldMeasureName,
6709
- foldMeasureValue: FoldMeasureValue + groupId,
6710
- unfoldDimensionGroup: UnfoldDimensionGroup
6711
- });
6712
- const reshapeInfo = {
6713
- id: groupId,
6714
- index,
6715
- foldInfo,
6716
- unfoldInfo
6717
- };
6718
- newDatasets.push(newSubDataset);
6719
- datasetReshapeInfo.push(reshapeInfo);
6720
- });
6721
- return {
6722
- ...result,
6723
- dataset: newDatasets,
6724
- datasetReshapeInfo: datasetReshapeInfo
6116
+ const { dimensions } = advancedVSeed;
6117
+ if (!dimensions) return advancedVSeed;
6118
+ const encoding = vseed.encoding;
6119
+ if (encoding) return {
6120
+ ...advancedVSeed,
6121
+ encoding: {
6122
+ ...encoding
6123
+ }
6725
6124
  };
6726
- };
6727
- const encodingPie = (advancedVSeed)=>{
6728
- const result = {
6729
- ...advancedVSeed
6125
+ const mergedEncoding = {
6126
+ color: dimensions.slice(0).map((item)=>item.id),
6127
+ detail: dimensions.slice(0).map((item)=>item.id),
6128
+ tooltip: dimensions.map((item)=>item.id),
6129
+ label: [],
6130
+ row: [],
6131
+ column: []
6730
6132
  };
6731
- const { datasetReshapeInfo } = advancedVSeed;
6732
- if (!datasetReshapeInfo) return result;
6733
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
6734
- const { foldInfo, unfoldInfo } = cur;
6735
- const radius = [
6736
- foldInfo.measureValue
6737
- ];
6738
- const angle = [
6739
- unfoldInfo.groupId
6740
- ];
6741
- const group = [
6742
- unfoldInfo.groupId
6743
- ];
6744
- const color = [
6745
- unfoldInfo.groupId
6746
- ];
6747
- return [
6748
- ...prev,
6749
- {
6750
- angle,
6751
- radius,
6752
- group,
6753
- color
6754
- }
6755
- ];
6756
- }, []);
6757
6133
  return {
6758
- ...result,
6759
- encoding
6134
+ ...advancedVSeed,
6135
+ encoding: mergedEncoding
6760
6136
  };
6761
6137
  };
6762
6138
  const pieAdvancedPipeline = [
6763
6139
  initAdvancedVSeed_initAdvancedVSeed,
6764
6140
  autoMeasures_autoMeasures,
6765
6141
  autoDimensions_autoDimensions,
6142
+ encodingForPie,
6766
6143
  pivotAdapter([
6767
- reshapeTo1D1M
6144
+ reshapeWithEncoding
6768
6145
  ], [
6769
- pivotReshapeTo1D1M
6146
+ pivotReshapeWithEncoding
6770
6147
  ]),
6771
- encodingPie,
6772
6148
  pieConfig,
6773
6149
  theme_theme,
6774
6150
  annotation_annotation
@@ -6778,15 +6154,14 @@ const initPie = (spec, context)=>{
6778
6154
  ...spec
6779
6155
  };
6780
6156
  const { advancedVSeed } = context;
6781
- const { encoding, dataset } = advancedVSeed;
6782
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6157
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6158
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
6783
6159
  const showStroke = dataset.length <= 30;
6784
6160
  result.type = 'pie';
6785
6161
  result.outerRadius = 0.8;
6786
6162
  result.innerRadius = 0;
6787
- result.valueField = encoding[0].radius[0];
6788
- result.categoryField = encoding[0].angle[0];
6789
- result.seriesField = encoding[0].group[0];
6163
+ result.valueField = foldInfo.measureValue;
6164
+ result.categoryField = unfoldInfo.encodingColorId;
6790
6165
  result.padding = 0;
6791
6166
  result.region = [
6792
6167
  {
@@ -6855,12 +6230,12 @@ const donutAdvancedPipeline = [
6855
6230
  initAdvancedVSeed_initAdvancedVSeed,
6856
6231
  autoMeasures_autoMeasures,
6857
6232
  autoDimensions_autoDimensions,
6233
+ encodingForPie,
6858
6234
  pivotAdapter([
6859
- reshapeTo1D1M
6235
+ reshapeWithEncoding
6860
6236
  ], [
6861
- pivotReshapeTo1D1M
6237
+ pivotReshapeWithEncoding
6862
6238
  ]),
6863
- encodingPie,
6864
6239
  donutConfig,
6865
6240
  theme_theme,
6866
6241
  annotation_annotation
@@ -6870,15 +6245,14 @@ const initDonut = (spec, context)=>{
6870
6245
  ...spec
6871
6246
  };
6872
6247
  const { advancedVSeed } = context;
6873
- const { encoding, dataset } = advancedVSeed;
6874
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6248
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6249
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
6875
6250
  const showStroke = dataset.length <= 30;
6876
6251
  result.type = 'pie';
6877
6252
  result.outerRadius = 0.8;
6878
6253
  result.innerRadius = 0.8 * result.outerRadius;
6879
- result.valueField = encoding[0].radius[0];
6880
- result.categoryField = encoding[0].angle[0];
6881
- result.seriesField = encoding[0].group[0];
6254
+ result.valueField = foldInfo.measureValue;
6255
+ result.categoryField = unfoldInfo.encodingColorId;
6882
6256
  result.padding = 0;
6883
6257
  result.region = [
6884
6258
  {
@@ -6942,54 +6316,58 @@ const registerDonut = ()=>{
6942
6316
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
6943
6317
  Builder._specPipelineMap.donut = donutSpecPipeline;
6944
6318
  };
6945
- const encodingRose = (advancedVSeed)=>{
6946
- const result = {
6947
- ...advancedVSeed
6948
- };
6949
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
6950
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
6951
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
6952
- const is1D1M = 1 === dimensions.length && 1 === measures.length;
6953
- const isZeroDimension = 0 === dimensions.length;
6954
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
6955
- const { foldInfo, unfoldInfo } = cur;
6956
- const radius = [
6957
- foldInfo.measureValue
6958
- ];
6959
- const angle = [
6960
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
6961
- ];
6962
- const group = [
6963
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
6319
+ const encodingForRose = (advancedVSeed, context)=>{
6320
+ const { vseed } = context;
6321
+ const { dimensions } = advancedVSeed;
6322
+ if (!dimensions) return advancedVSeed;
6323
+ const encoding = vseed.encoding;
6324
+ if (encoding) {
6325
+ const angle = encoding.angle || [
6326
+ dimensions[0].id
6964
6327
  ];
6965
- const color = [
6966
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
6328
+ const color = encoding.color || [
6329
+ (dimensions[1] || dimensions[0]).id
6967
6330
  ];
6968
- return [
6969
- ...prev,
6970
- {
6331
+ const detail = encoding.detail || [];
6332
+ const mergedDetail = unique([
6333
+ ...color,
6334
+ ...detail
6335
+ ]);
6336
+ return {
6337
+ ...advancedVSeed,
6338
+ encoding: {
6339
+ ...encoding,
6971
6340
  angle,
6972
- radius,
6973
- group,
6974
- color
6341
+ color,
6342
+ detail: mergedDetail
6975
6343
  }
6976
- ];
6977
- }, []);
6344
+ };
6345
+ }
6346
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6347
+ const mergedEncoding = {
6348
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
6349
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6350
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6351
+ tooltip: dimensions.map((item)=>item.id),
6352
+ label: [],
6353
+ row: [],
6354
+ column: []
6355
+ };
6978
6356
  return {
6979
- ...result,
6980
- encoding
6357
+ ...advancedVSeed,
6358
+ encoding: mergedEncoding
6981
6359
  };
6982
6360
  };
6983
6361
  const roseAdvancedPipeline = [
6984
6362
  initAdvancedVSeed_initAdvancedVSeed,
6985
6363
  autoMeasures_autoMeasures,
6986
6364
  autoDimensions_autoDimensions,
6365
+ encodingForRose,
6987
6366
  pivotAdapter([
6988
- reshapeTo2D1M
6367
+ reshapeWithEncoding
6989
6368
  ], [
6990
- pivotReshapeTo2D1M
6369
+ pivotReshapeWithEncoding
6991
6370
  ]),
6992
- encodingRose,
6993
6371
  roseConfig,
6994
6372
  theme_theme,
6995
6373
  markStyle_markStyle,
@@ -7000,13 +6378,12 @@ const initRose = (spec, context)=>{
7000
6378
  ...spec
7001
6379
  };
7002
6380
  const { advancedVSeed } = context;
7003
- const { encoding, dataset, datasetReshapeInfo } = advancedVSeed;
7004
- const { foldInfo } = datasetReshapeInfo[0];
7005
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
6381
+ const { dataset, datasetReshapeInfo } = advancedVSeed;
6382
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7006
6383
  result.type = 'rose';
7007
- result.categoryField = encoding[0].angle[0];
7008
- result.valueField = encoding[0].radius[0];
7009
- result.seriesField = encoding[0].group[0];
6384
+ result.angleField = unfoldInfo.encodingAngle;
6385
+ result.seriesField = unfoldInfo.encodingColorId;
6386
+ result.valueField = foldInfo.measureValue;
7010
6387
  result.padding = 0;
7011
6388
  result.outerRadius = 0.9;
7012
6389
  result.innerRadius = 0;
@@ -7154,12 +6531,12 @@ const roseParallelAdvancedPipeline = [
7154
6531
  initAdvancedVSeed_initAdvancedVSeed,
7155
6532
  autoMeasures_autoMeasures,
7156
6533
  autoDimensions_autoDimensions,
6534
+ encodingForRose,
7157
6535
  pivotAdapter([
7158
- reshapeTo2D1M
6536
+ reshapeWithEncoding
7159
6537
  ], [
7160
- pivotReshapeTo2D1M
6538
+ pivotReshapeWithEncoding
7161
6539
  ]),
7162
- encodingRose,
7163
6540
  roseParallelConfig,
7164
6541
  theme_theme,
7165
6542
  markStyle_markStyle,
@@ -7170,19 +6547,18 @@ const initRoseParallel = (spec, context)=>{
7170
6547
  ...spec
7171
6548
  };
7172
6549
  const { advancedVSeed } = context;
7173
- const { encoding, datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
6550
+ const { datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
7174
6551
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7175
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
7176
6552
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
7177
6553
  result.type = 'rose';
7178
- result.categoryField = sameDimensionsMode ? [
7179
- encoding[0].angle[0]
6554
+ result.angleField = sameDimensionsMode ? [
6555
+ unfoldInfo.encodingAngle
7180
6556
  ] : [
7181
- encoding[0].angle[0],
7182
- unfoldInfo.groupId
6557
+ unfoldInfo.encodingAngle,
6558
+ unfoldInfo.encodingDetail
7183
6559
  ];
7184
- result.valueField = encoding[0].radius[0];
7185
- result.seriesField = encoding[0].group[0];
6560
+ result.valueField = foldInfo.measureValue;
6561
+ result.seriesField = unfoldInfo.encodingColorId;
7186
6562
  result.padding = 0;
7187
6563
  result.outerRadius = 0.9;
7188
6564
  result.innerRadius = 0;
@@ -7259,54 +6635,58 @@ const registerRoseParallel = ()=>{
7259
6635
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7260
6636
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7261
6637
  };
7262
- const encodingAR = (advancedVSeed)=>{
7263
- const result = {
7264
- ...advancedVSeed
7265
- };
7266
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
7267
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
7268
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7269
- const isZeroDimension = 0 === dimensions.length;
7270
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7271
- const { foldInfo, unfoldInfo } = cur;
7272
- const angle = [
7273
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
7274
- ];
7275
- const radius = [
7276
- foldInfo.measureValue
7277
- ];
7278
- const group = [
7279
- unfoldInfo.groupId
6638
+ const encodingForRadar = (advancedVSeed, context)=>{
6639
+ const { vseed } = context;
6640
+ const { dimensions } = advancedVSeed;
6641
+ if (!dimensions) return advancedVSeed;
6642
+ const encoding = vseed.encoding;
6643
+ if (encoding) {
6644
+ const angle = encoding.angle || [
6645
+ dimensions[0].id
7280
6646
  ];
7281
- const color = [
7282
- unfoldInfo.groupId
6647
+ const color = encoding.color || [
6648
+ (dimensions[1] || dimensions[0]).id
7283
6649
  ];
7284
- return [
7285
- ...prev,
7286
- {
6650
+ const detail = encoding.detail || [];
6651
+ const mergedDetail = unique([
6652
+ ...color,
6653
+ ...detail
6654
+ ]);
6655
+ return {
6656
+ ...advancedVSeed,
6657
+ encoding: {
6658
+ ...encoding,
7287
6659
  angle,
7288
- radius,
7289
- group,
7290
- color
6660
+ color,
6661
+ detail: mergedDetail
7291
6662
  }
7292
- ];
7293
- }, []);
6663
+ };
6664
+ }
6665
+ const mergedEncoding = {
6666
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
6667
+ color: dimensions.slice(1).map((item)=>item.id),
6668
+ detail: dimensions.slice(1).map((item)=>item.id),
6669
+ tooltip: dimensions.map((item)=>item.id),
6670
+ label: [],
6671
+ row: [],
6672
+ column: []
6673
+ };
7294
6674
  return {
7295
- ...result,
7296
- encoding
6675
+ ...advancedVSeed,
6676
+ encoding: mergedEncoding
7297
6677
  };
7298
6678
  };
7299
6679
  const radarAdvancedPipeline = [
7300
6680
  initAdvancedVSeed_initAdvancedVSeed,
7301
6681
  autoMeasures_autoMeasures,
7302
6682
  autoDimensions_autoDimensions,
6683
+ encodingForRadar,
7303
6684
  pivotAdapter([
7304
- reshapeTo2D1M0Name
6685
+ reshapeWithEncoding
7305
6686
  ], [
7306
- pivotReshapeTo2D1M0Name
6687
+ pivotReshapeWithEncoding
7307
6688
  ]),
7308
- encodingAR,
7309
- sort_sortLegend,
6689
+ sortLegend_sortLegend,
7310
6690
  radarConfig,
7311
6691
  theme_theme,
7312
6692
  markStyle_markStyle,
@@ -7317,12 +6697,12 @@ const initRadar = (spec, context)=>{
7317
6697
  ...spec
7318
6698
  };
7319
6699
  const { advancedVSeed } = context;
7320
- const { encoding } = advancedVSeed;
7321
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6700
+ const { datasetReshapeInfo } = advancedVSeed;
6701
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7322
6702
  result.type = 'radar';
7323
- result.angleField = encoding[0].angle[0];
7324
- result.radiusField = encoding[0].radius[0];
7325
- result.seriesField = encoding[0].group[0];
6703
+ result.angleField = unfoldInfo.encodingAngle;
6704
+ result.radiusField = foldInfo.measureValue;
6705
+ result.seriesField = unfoldInfo.encodingColorId;
7326
6706
  result.padding = 0;
7327
6707
  result.region = [
7328
6708
  {
@@ -7434,47 +6814,40 @@ const registerRadar = ()=>{
7434
6814
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7435
6815
  Builder._specPipelineMap.radar = radarSpecPipeline;
7436
6816
  };
7437
- const encodingFunnel = (advancedVSeed)=>{
7438
- const result = {
7439
- ...advancedVSeed
6817
+ const encodingForFunnel = (advancedVSeed, context)=>{
6818
+ const { vseed } = context;
6819
+ const { dimensions } = advancedVSeed;
6820
+ if (!dimensions) return advancedVSeed;
6821
+ const encoding = vseed.encoding;
6822
+ if (encoding) return {
6823
+ ...advancedVSeed,
6824
+ encoding: {
6825
+ ...encoding
6826
+ }
6827
+ };
6828
+ const mergedEncoding = {
6829
+ color: dimensions.slice(0).map((item)=>item.id),
6830
+ detail: dimensions.slice(0).map((item)=>item.id),
6831
+ tooltip: dimensions.map((item)=>item.id),
6832
+ label: [],
6833
+ row: [],
6834
+ column: []
7440
6835
  };
7441
- const { datasetReshapeInfo } = advancedVSeed;
7442
- if (!datasetReshapeInfo) return result;
7443
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7444
- const { foldInfo, unfoldInfo } = cur;
7445
- const size = [
7446
- foldInfo.measureValue
7447
- ];
7448
- const group = [
7449
- unfoldInfo.groupId
7450
- ];
7451
- const color = [
7452
- foldInfo.measureValue
7453
- ];
7454
- return [
7455
- ...prev,
7456
- {
7457
- size,
7458
- group,
7459
- color
7460
- }
7461
- ];
7462
- }, []);
7463
6836
  return {
7464
- ...result,
7465
- encoding
6837
+ ...advancedVSeed,
6838
+ encoding: mergedEncoding
7466
6839
  };
7467
6840
  };
7468
6841
  const funnelAdvancedPipeline = [
7469
6842
  initAdvancedVSeed_initAdvancedVSeed,
7470
6843
  autoMeasures_autoMeasures,
7471
6844
  autoDimensions_autoDimensions,
6845
+ encodingForFunnel,
7472
6846
  pivotAdapter([
7473
- reshapeTo1D1M
6847
+ reshapeWithEncoding
7474
6848
  ], [
7475
- pivotReshapeTo1D1M
6849
+ pivotReshapeWithEncoding
7476
6850
  ]),
7477
- encodingFunnel,
7478
6851
  funnelConfig,
7479
6852
  theme_theme,
7480
6853
  annotation_annotation
@@ -7484,11 +6857,11 @@ const initFunnel = (spec, context)=>{
7484
6857
  ...spec
7485
6858
  };
7486
6859
  const { advancedVSeed } = context;
7487
- const { encoding } = advancedVSeed;
7488
- if (!encoding[0].size || !encoding[0].group || !encoding[0].color) return result;
6860
+ const { datasetReshapeInfo } = advancedVSeed;
6861
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7489
6862
  result.type = 'funnel';
7490
- result.valueField = encoding[0].size[0];
7491
- result.categoryField = encoding[0].group[0];
6863
+ result.valueField = foldInfo.measureValue;
6864
+ result.categoryField = unfoldInfo.encodingColorId;
7492
6865
  result.padding = 0;
7493
6866
  result.isTransform = true;
7494
6867
  result.shape = 'rect';
@@ -7503,7 +6876,7 @@ const initFunnel = (spec, context)=>{
7503
6876
  style: {
7504
6877
  cornerRadius: 4,
7505
6878
  fill: {
7506
- field: encoding[0].color[0],
6879
+ field: unfoldInfo.encodingColorId,
7507
6880
  scale: 'color'
7508
6881
  }
7509
6882
  },
@@ -7519,99 +6892,14 @@ const initFunnel = (spec, context)=>{
7519
6892
  result.animation = true;
7520
6893
  return result;
7521
6894
  };
7522
- const linearColor = (spec, context)=>{
7523
- const result = {
7524
- ...spec
7525
- };
7526
- const { advancedVSeed } = context;
7527
- const { datasetReshapeInfo, chartType, encoding } = advancedVSeed;
7528
- const baseConfig = advancedVSeed.config[chartType];
7529
- if (!baseConfig || !baseConfig.color) return result;
7530
- const { color } = baseConfig;
7531
- const { colorScheme } = color;
7532
- result.color = {
7533
- type: 'linear',
7534
- domain: [
7535
- {
7536
- dataId: datasetReshapeInfo[0].id,
7537
- fields: encoding?.[0]?.color
7538
- }
7539
- ],
7540
- range: colorScheme
7541
- };
7542
- return result;
7543
- };
7544
- const colorLegend = (spec, context)=>{
7545
- const result = {
7546
- ...spec
7547
- };
7548
- const { advancedVSeed } = context;
7549
- const { chartType } = advancedVSeed;
7550
- const baseConfig = advancedVSeed.config[chartType];
7551
- const { encoding } = advancedVSeed;
7552
- if (!encoding[0].color) return result;
7553
- if (!baseConfig || !baseConfig.legend) return result;
7554
- const { legend } = baseConfig;
7555
- const { enable, position = 'bottom' } = legend || {};
7556
- const orient = [
7557
- 'bottom',
7558
- 'bottomLeft',
7559
- 'bottomRight',
7560
- 'bl',
7561
- 'br'
7562
- ].includes(position) ? 'bottom' : [
7563
- 'top',
7564
- 'topLeft',
7565
- 'topRight',
7566
- 'tl',
7567
- 'tr'
7568
- ].includes(position) ? 'top' : [
7569
- 'left',
7570
- 'leftTop',
7571
- 'leftBottom',
7572
- 'lt',
7573
- 'lb'
7574
- ].includes(position) ? 'left' : 'right';
7575
- const legendPosition = [
7576
- 'topLeft',
7577
- 'bottomLeft',
7578
- 'leftTop',
7579
- 'rightTop',
7580
- 'lt',
7581
- 'rt',
7582
- 'tl',
7583
- 'bl'
7584
- ].includes(position) ? 'start' : [
7585
- 'topRight',
7586
- 'bottomRight',
7587
- 'leftBottom',
7588
- 'rightBottom',
7589
- 'lb',
7590
- 'rb',
7591
- 'rt',
7592
- 'br'
7593
- ].includes(position) ? 'end' : 'middle';
7594
- result.legends = {
7595
- type: 'color',
7596
- visible: enable,
7597
- orient,
7598
- position: legendPosition,
7599
- field: encoding[0].color[0],
7600
- inverse: !![
7601
- 'left',
7602
- 'right'
7603
- ].includes(orient)
7604
- };
7605
- return result;
7606
- };
7607
6895
  const funnel = [
7608
6896
  initFunnel,
7609
- linearColor,
7610
6897
  background_backgroundColor,
7611
6898
  datasetXY,
6899
+ color_color,
7612
6900
  label_label,
7613
6901
  tooltip_tooltip,
7614
- colorLegend,
6902
+ discreteLegend,
7615
6903
  annotationPoint_annotationPoint,
7616
6904
  annotationVerticalLine_annotationVerticalLine,
7617
6905
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7624,12 +6912,12 @@ const pivotFunnel = [
7624
6912
  datasetPivot,
7625
6913
  pivotIndicators_pivotIndicators([
7626
6914
  initFunnel,
7627
- linearColor,
7628
6915
  background_backgroundColor,
7629
6916
  datasetXY,
6917
+ color_color,
7630
6918
  label_label,
7631
6919
  tooltip_tooltip,
7632
- colorLegend,
6920
+ discreteLegend,
7633
6921
  annotationPoint_annotationPoint,
7634
6922
  annotationVerticalLine_annotationVerticalLine,
7635
6923
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7645,49 +6933,52 @@ const registerFunnel = ()=>{
7645
6933
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
7646
6934
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
7647
6935
  };
7648
- const encodingMatrix = (advancedVSeed)=>{
7649
- const result = {
7650
- ...advancedVSeed
7651
- };
7652
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
7653
- if (!datasetReshapeInfo || !dimensions) return result;
7654
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7655
- const isZeroDimension = 0 === dimensions.length;
7656
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7657
- const { foldInfo, unfoldInfo } = cur;
7658
- const x = [
7659
- isZeroDimension ? foldInfo.measureName : xDimension?.id
7660
- ];
7661
- const y = [
7662
- unfoldInfo.groupName
6936
+ const encodingForHeatmap = (advancedVSeed, context)=>{
6937
+ const { vseed } = context;
6938
+ const { dimensions } = advancedVSeed;
6939
+ if (!dimensions) return advancedVSeed;
6940
+ const encoding = vseed.encoding;
6941
+ if (encoding) {
6942
+ const x = encoding.x || [
6943
+ dimensions[0].id
7663
6944
  ];
7664
- const color = [
7665
- foldInfo.measureValue
6945
+ const y = encoding.y || [
6946
+ (dimensions[1] || dimensions[0]).id
7666
6947
  ];
7667
- return [
7668
- ...prev,
7669
- {
6948
+ return {
6949
+ ...advancedVSeed,
6950
+ encoding: {
7670
6951
  x,
7671
6952
  y,
7672
- color
6953
+ ...encoding
7673
6954
  }
7674
- ];
7675
- }, []);
6955
+ };
6956
+ }
6957
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6958
+ const mergedEncoding = {
6959
+ x: dimensions.slice(0, 1).map((item)=>item.id),
6960
+ y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6961
+ color: dimensions.slice(0).map((item)=>item.id),
6962
+ tooltip: dimensions.map((item)=>item.id),
6963
+ label: [],
6964
+ row: [],
6965
+ column: []
6966
+ };
7676
6967
  return {
7677
- ...result,
7678
- encoding
6968
+ ...advancedVSeed,
6969
+ encoding: mergedEncoding
7679
6970
  };
7680
6971
  };
7681
6972
  const heatmapAdvancedPipeline = [
7682
6973
  initAdvancedVSeed_initAdvancedVSeed,
7683
6974
  autoMeasures_autoMeasures,
7684
6975
  autoDimensions_autoDimensions,
6976
+ encodingForHeatmap,
7685
6977
  pivotAdapter([
7686
- reshapeTo2D1M
6978
+ reshapeWithEncoding
7687
6979
  ], [
7688
- pivotReshapeTo2D1M
6980
+ pivotReshapeWithEncoding
7689
6981
  ]),
7690
- encodingMatrix,
7691
6982
  sortXBandAxis,
7692
6983
  heatmapConfig,
7693
6984
  theme_theme,
@@ -7709,23 +7000,20 @@ const initHeatmap = (spec, context)=>{
7709
7000
  ...spec
7710
7001
  };
7711
7002
  const { advancedVSeed } = context;
7712
- const { encoding } = advancedVSeed;
7713
- if (!encoding[0].y || !encoding[0].x || !encoding[0].color) return result;
7003
+ const { datasetReshapeInfo } = advancedVSeed;
7004
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7714
7005
  result.type = 'heatmap';
7715
7006
  result.direction = 'vertical';
7716
- result.xField = encoding[0].x[0];
7717
- result.yField = encoding[0].y[0];
7718
- result.valueField = encoding[0].color[0];
7007
+ result.xField = unfoldInfo.encodingX;
7008
+ result.yField = unfoldInfo.encodingY;
7009
+ result.seriesField = unfoldInfo.encodingColorId;
7010
+ result.valueField = foldInfo.measureValue;
7719
7011
  result.padding = 0;
7720
7012
  result.cell = {
7721
7013
  style: {
7722
7014
  shape: 'rect',
7723
7015
  stroke: '#ffffff',
7724
- lineWidth: 1,
7725
- fill: {
7726
- field: encoding[0].color[0],
7727
- scale: 'color'
7728
- }
7016
+ lineWidth: 1
7729
7017
  }
7730
7018
  };
7731
7019
  result.axes = [
@@ -7750,12 +7038,12 @@ const initHeatmap = (spec, context)=>{
7750
7038
  };
7751
7039
  const heatmap = [
7752
7040
  initHeatmap,
7753
- linearColor,
7754
7041
  background_backgroundColor,
7755
7042
  datasetXY,
7043
+ color_color,
7756
7044
  label_label,
7757
7045
  labelColorInversion,
7758
- colorLegend,
7046
+ discreteLegend,
7759
7047
  tooltip_tooltip,
7760
7048
  pointStyle_pointStyle,
7761
7049
  pointStateDimensionHover,
@@ -7772,12 +7060,12 @@ const pivotHeatmap = [
7772
7060
  datasetPivot,
7773
7061
  pivotIndicators_pivotIndicators([
7774
7062
  initHeatmap,
7775
- linearColor,
7776
7063
  background_backgroundColor,
7777
7064
  datasetXY,
7065
+ color_color,
7778
7066
  label_label,
7779
7067
  labelColorInversion,
7780
- colorLegend,
7068
+ discreteLegend,
7781
7069
  tooltip_tooltip,
7782
7070
  pointStyle_pointStyle,
7783
7071
  pointStateDimensionHover,
@@ -8045,12 +7333,6 @@ const lightTheme = ()=>{
8045
7333
  yAxis: linearAxis,
8046
7334
  crosshairLine
8047
7335
  },
8048
- areaRange: {
8049
- ...baseConfig,
8050
- xAxis: bandAxis,
8051
- yAxis: linearAxis,
8052
- crosshairLine
8053
- },
8054
7336
  scatter: {
8055
7337
  ...baseConfig,
8056
7338
  xAxis: {
@@ -8383,12 +7665,6 @@ const darkTheme = ()=>{
8383
7665
  yAxis: linearAxis,
8384
7666
  crosshairLine: crosshairLine
8385
7667
  },
8386
- areaRange: {
8387
- ...baseConfig,
8388
- xAxis: bandAxis,
8389
- yAxis: linearAxis,
8390
- crosshairLine: crosshairLine
8391
- },
8392
7668
  scatter: {
8393
7669
  ...baseConfig,
8394
7670
  xAxis: {
@@ -8486,7 +7762,6 @@ const registerAll = ()=>{
8486
7762
  registerBarPercent();
8487
7763
  registerArea();
8488
7764
  registerAreaPercent();
8489
- registerAreaRange();
8490
7765
  registerScatter();
8491
7766
  registerDualAxis();
8492
7767
  registerPie();
@@ -8520,7 +7795,6 @@ const zChartType = z["enum"]([
8520
7795
  'barParallel',
8521
7796
  'area',
8522
7797
  'areaPercent',
8523
- 'areaRange',
8524
7798
  'scatter',
8525
7799
  'dualAxis',
8526
7800
  'rose',
@@ -8618,6 +7892,12 @@ const zDualMeasure = z.object({
8618
7892
  secondaryMeasures: z.array(zMeasure).or(zMeasure).optional()
8619
7893
  });
8620
7894
  const zDualMeasures = z.array(zDualMeasure);
7895
+ const zScatterMeasure = z.object({
7896
+ id: z.string(),
7897
+ xMeasures: z.array(zMeasure).or(zMeasure).optional(),
7898
+ yMeasures: z.array(zMeasure).or(zMeasure).optional()
7899
+ });
7900
+ const zScatterMeasures = z.array(zScatterMeasure);
8621
7901
  const zFoldInfo = z.object({
8622
7902
  foldMap: z.record(z.string(), z.string().or(z.undefined())),
8623
7903
  measureId: z.string(),
@@ -8625,10 +7905,14 @@ const zFoldInfo = z.object({
8625
7905
  measureValue: z.string()
8626
7906
  });
8627
7907
  const zUnfoldInfo = z.object({
7908
+ encodingX: z.string(),
7909
+ encodingY: z.string(),
7910
+ encodingColor: z.string(),
7911
+ encodingColorId: z.string(),
7912
+ encodingDetail: z.string(),
7913
+ encodingAngle: z.string(),
8628
7914
  colorItems: z.array(z.string()),
8629
- groupId: z.string(),
8630
- colorIdMap: z.record(z.string(), z.string()),
8631
- groupName: z.string()
7915
+ colorIdMap: z.record(z.string(), z.string())
8632
7916
  });
8633
7917
  const zDatasetReshapeInfo = z.array(z.object({
8634
7918
  id: z.string(),
@@ -8637,16 +7921,21 @@ const zDatasetReshapeInfo = z.array(z.object({
8637
7921
  foldInfoList: z.array(zFoldInfo).nullish(),
8638
7922
  unfoldInfo: zUnfoldInfo
8639
7923
  }));
8640
- const zEncoding = z.array(z.object({
7924
+ const zEncoding = z.object({
8641
7925
  x: z.array(z.string()).nullish(),
8642
7926
  y: z.array(z.string()).nullish(),
8643
- color: z.array(z.string()).nullish(),
8644
- group: z.array(z.string()).nullish(),
8645
7927
  angle: z.array(z.string()).nullish(),
8646
7928
  radius: z.array(z.string()).nullish(),
7929
+ detail: z.array(z.string()).nullish(),
7930
+ color: z.array(z.string()).nullish(),
7931
+ size: z.array(z.string()).nullish(),
8647
7932
  tooltip: z.array(z.string()).nullish(),
8648
- size: z.array(z.string()).nullish()
8649
- }));
7933
+ label: z.array(z.string()).nullish(),
7934
+ row: z.array(z.string()).nullish(),
7935
+ column: z.array(z.string()).nullish(),
7936
+ group: z.array(z.string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
7937
+ });
7938
+ const zEncodings = z.array(zEncoding);
8650
7939
  const zXBandAxis = z.object({
8651
7940
  visible: z.boolean().default(true).nullish(),
8652
7941
  labelAutoHide: z.boolean().default(true).nullish(),
@@ -8909,7 +8198,6 @@ const zAreaConfig = z.object({
8909
8198
  crosshairLine: zCrosshairLine.nullish()
8910
8199
  });
8911
8200
  const zAreaPercentConfig = zAreaConfig;
8912
- const zAreaRangeConfig = zAreaConfig;
8913
8201
  const zDualAxisConfig = z.object({
8914
8202
  backgroundColor: zBackgroundColor.nullish(),
8915
8203
  label: zLabel.nullish(),
@@ -8964,7 +8252,6 @@ const zConfig = z.object({
8964
8252
  barPercent: zBarPercentConfig.nullish(),
8965
8253
  area: zAreaConfig.nullish(),
8966
8254
  areaPercent: zAreaPercentConfig.nullish(),
8967
- areaRange: zAreaRangeConfig.nullish(),
8968
8255
  scatter: zScatterConfig.nullish(),
8969
8256
  dualAxis: zDualAxisConfig.nullish(),
8970
8257
  rose: zRoseConfig.nullish(),
@@ -9403,6 +8690,7 @@ const zPivotTable = z.object({
9403
8690
  const zLine = z.object({
9404
8691
  chartType: z.literal('line'),
9405
8692
  dataset: zDataset.nullish(),
8693
+ encoding: zEncoding.nullish(),
9406
8694
  dimensions: zDimensions.nullish(),
9407
8695
  measures: zMeasureTree.nullish(),
9408
8696
  backgroundColor: zBackgroundColor.nullish(),
@@ -9427,6 +8715,7 @@ const zLine = z.object({
9427
8715
  const zColumn = z.object({
9428
8716
  chartType: z.literal('column'),
9429
8717
  dataset: zDataset.nullish(),
8718
+ encoding: zEncoding.nullish(),
9430
8719
  dimensions: zDimensions.nullish(),
9431
8720
  measures: zMeasureTree.nullish(),
9432
8721
  backgroundColor: zBackgroundColor.nullish(),
@@ -9449,6 +8738,7 @@ const zColumn = z.object({
9449
8738
  const zColumnParallel = z.object({
9450
8739
  chartType: z.literal('columnParallel'),
9451
8740
  dataset: zDataset.nullish(),
8741
+ encoding: zEncoding.nullish(),
9452
8742
  dimensions: zDimensions.nullish(),
9453
8743
  measures: zMeasureTree.nullish(),
9454
8744
  backgroundColor: zBackgroundColor.nullish(),
@@ -9471,6 +8761,7 @@ const zColumnParallel = z.object({
9471
8761
  const zColumnPercent = z.object({
9472
8762
  chartType: z.literal('columnPercent'),
9473
8763
  dataset: zDataset.nullish(),
8764
+ encoding: zEncoding.nullish(),
9474
8765
  dimensions: zDimensions.nullish(),
9475
8766
  measures: zMeasureTree.nullish(),
9476
8767
  backgroundColor: zBackgroundColor.nullish(),
@@ -9493,6 +8784,7 @@ const zColumnPercent = z.object({
9493
8784
  const zBar = z.object({
9494
8785
  chartType: z.literal('bar'),
9495
8786
  dataset: zDataset.nullish(),
8787
+ encoding: zEncoding.nullish(),
9496
8788
  dimensions: zDimensions.nullish(),
9497
8789
  measures: zMeasureTree.nullish(),
9498
8790
  backgroundColor: zBackgroundColor.nullish(),
@@ -9515,6 +8807,7 @@ const zBar = z.object({
9515
8807
  const zBarParallel = z.object({
9516
8808
  chartType: z.literal('barParallel'),
9517
8809
  dataset: zDataset.nullish(),
8810
+ encoding: zEncoding.nullish(),
9518
8811
  dimensions: zDimensions.nullish(),
9519
8812
  measures: zMeasureTree.nullish(),
9520
8813
  backgroundColor: zBackgroundColor.nullish(),
@@ -9537,6 +8830,7 @@ const zBarParallel = z.object({
9537
8830
  const zBarPercent = z.object({
9538
8831
  chartType: z.literal('barPercent'),
9539
8832
  dataset: zDataset.nullish(),
8833
+ encoding: zEncoding.nullish(),
9540
8834
  dimensions: zDimensions.nullish(),
9541
8835
  measures: zMeasureTree.nullish(),
9542
8836
  backgroundColor: zBackgroundColor.nullish(),
@@ -9559,6 +8853,7 @@ const zBarPercent = z.object({
9559
8853
  const zArea = z.object({
9560
8854
  chartType: z.literal('area'),
9561
8855
  dataset: zDataset.nullish(),
8856
+ encoding: zEncoding.nullish(),
9562
8857
  dimensions: zDimensions.nullish(),
9563
8858
  measures: zMeasureTree.nullish(),
9564
8859
  backgroundColor: zBackgroundColor.nullish(),
@@ -9582,6 +8877,7 @@ const zArea = z.object({
9582
8877
  const zAreaPercent = z.object({
9583
8878
  chartType: z.literal('areaPercent'),
9584
8879
  dataset: zDataset.nullish(),
8880
+ encoding: zEncoding.nullish(),
9585
8881
  dimensions: zDimensions.nullish(),
9586
8882
  measures: zMeasureTree.nullish(),
9587
8883
  backgroundColor: zBackgroundColor.nullish(),
@@ -9602,31 +8898,13 @@ const zAreaPercent = z.object({
9602
8898
  annotationArea: z.array(zAnnotationArea).or(zAnnotationArea).nullish(),
9603
8899
  locale: zLocale.nullish()
9604
8900
  });
9605
- const zAreaRange = z.object({
9606
- chartType: z.literal('areaRange'),
9607
- dataset: zDataset.nullish(),
9608
- dimensions: zDimensions.nullish(),
9609
- measures: zMeasureTree.nullish(),
9610
- backgroundColor: zBackgroundColor.nullish(),
9611
- label: zLabel.nullish(),
9612
- xAxis: zXBandAxis.nullish(),
9613
- yAxis: zYLinearAxis.nullish(),
9614
- crosshairLine: zCrosshairLine.nullish(),
9615
- theme: zTheme.nullish(),
9616
- pointStyle: z.array(zPointStyle).or(zPointStyle).nullish(),
9617
- lineStyle: z.array(zLineStyle).or(zLineStyle).nullish(),
9618
- areaStyle: z.array(zAreaStyle).or(zAreaStyle).nullish(),
9619
- annotationPoint: z.array(zAnnotationPoint).or(zAnnotationPoint).nullish(),
9620
- annotationVerticalLine: z.array(zAnnotationVerticalLine).or(zAnnotationVerticalLine).nullish(),
9621
- annotationHorizontalLine: z.array(zAnnotationHorizontalLine).or(zAnnotationHorizontalLine).nullish(),
9622
- annotationArea: z.array(zAnnotationArea).or(zAnnotationArea).nullish(),
9623
- locale: zLocale.nullish()
9624
- });
9625
8901
  const zScatter = z.object({
9626
8902
  chartType: z.literal('scatter'),
9627
8903
  dataset: zDataset.nullish(),
8904
+ encoding: zEncoding.nullish(),
9628
8905
  dimensions: zDimensions.nullish(),
9629
8906
  measures: zMeasureTree.nullish(),
8907
+ scatterMeasures: zScatterMeasures.nullish(),
9630
8908
  backgroundColor: zBackgroundColor.nullish(),
9631
8909
  color: zColor.nullish(),
9632
8910
  label: zLabel.nullish(),
@@ -9676,6 +8954,7 @@ const zDualAxis = z.object({
9676
8954
  const zRose = z.object({
9677
8955
  chartType: z.literal('rose'),
9678
8956
  dataset: zDataset.nullish(),
8957
+ encoding: zEncoding.nullish(),
9679
8958
  dimensions: zDimensions.nullish(),
9680
8959
  measures: zMeasureTree.nullish(),
9681
8960
  backgroundColor: zBackgroundColor.nullish(),
@@ -9689,6 +8968,7 @@ const zRose = z.object({
9689
8968
  const zRoseParallel = z.object({
9690
8969
  chartType: z.literal('roseParallel'),
9691
8970
  dataset: zDataset.nullish(),
8971
+ encoding: zEncoding.nullish(),
9692
8972
  dimensions: zDimensions.nullish(),
9693
8973
  measures: zMeasureTree.nullish(),
9694
8974
  backgroundColor: zBackgroundColor.nullish(),
@@ -9702,6 +8982,7 @@ const zRoseParallel = z.object({
9702
8982
  const zPie = z.object({
9703
8983
  chartType: z.literal('pie'),
9704
8984
  dataset: zDataset.nullish(),
8985
+ encoding: zEncoding.nullish(),
9705
8986
  dimensions: zDimensions.nullish(),
9706
8987
  measures: zMeasureTree.nullish(),
9707
8988
  backgroundColor: zBackgroundColor.nullish(),
@@ -9715,6 +8996,7 @@ const zPie = z.object({
9715
8996
  const zDonut = z.object({
9716
8997
  chartType: z.literal('donut'),
9717
8998
  dataset: zDataset.nullish(),
8999
+ encoding: zEncoding.nullish(),
9718
9000
  dimensions: zDimensions.nullish(),
9719
9001
  measures: zMeasureTree.nullish(),
9720
9002
  backgroundColor: zBackgroundColor.nullish(),
@@ -9728,6 +9010,7 @@ const zDonut = z.object({
9728
9010
  const zRadar = z.object({
9729
9011
  chartType: z.literal('radar'),
9730
9012
  dataset: zDataset.nullish(),
9013
+ encoding: zEncoding.nullish(),
9731
9014
  dimensions: zDimensions.nullish(),
9732
9015
  measures: zMeasureTree.nullish(),
9733
9016
  backgroundColor: zBackgroundColor.nullish(),
@@ -9741,6 +9024,7 @@ const zRadar = z.object({
9741
9024
  const zFunnel = z.object({
9742
9025
  chartType: z.literal('funnel'),
9743
9026
  dataset: zDataset.nullish(),
9027
+ encoding: zEncoding.nullish(),
9744
9028
  dimensions: zDimensions.nullish(),
9745
9029
  measures: zMeasureTree.nullish(),
9746
9030
  backgroundColor: zBackgroundColor.nullish(),
@@ -9776,7 +9060,6 @@ const zVSeed = z.discriminatedUnion('chartType', [
9776
9060
  zBarPercent,
9777
9061
  zArea,
9778
9062
  zAreaPercent,
9779
- zAreaRange,
9780
9063
  zScatter,
9781
9064
  zDualAxis,
9782
9065
  zPie,
@@ -9794,6 +9077,7 @@ const zAdvancedVSeed = z.object({
9794
9077
  dimensions: zDimensionTree,
9795
9078
  measures: zMeasureTree,
9796
9079
  encoding: zEncoding,
9080
+ encodings: zEncodings,
9797
9081
  config: zConfig,
9798
9082
  analysis: zAnalysis,
9799
9083
  theme: zTheme,
@@ -9802,6 +9086,6 @@ const zAdvancedVSeed = z.object({
9802
9086
  annotation: zAnnotation,
9803
9087
  locale: zLocale
9804
9088
  });
9805
- export { Builder, FoldMeasureId, FoldMeasureName, FoldMeasureValue, FoldPrimaryMeasureValue, FoldSecondaryMeasureValue, ORIGINAL_DATA, Separator, UnfoldDimensionGroup, UnfoldDimensionGroupId, areaAdvancedPipeline, areaPercentAdvancedPipeline, areaPercentSpecPipeline, areaRangeAdvancedPipeline, areaRangeSpecPipeline, areaSpecPipeline, autoFormatter, autoNumFormatter, barAdvancedPipeline, barParallelAdvancedPipeline, barParallelSpecPipeline, barPercentAdvancedPipeline, barPercentSpecPipeline, barSpecPipeline, columnAdvancedPipeline, columnParallelAdvancedPipeline, columnParallelSpecPipeline, columnPercentAdvancedPipeline, columnPercentSpecPipeline, columnSpecPipeline, createFormatter, createNumFormatter, darkTheme, dataReshapeFor1D, dataReshapeFor1D1M, dataReshapeFor1D2M, dataReshapeFor2D1M, dataReshapeFor2D1M0Name, donutAdvancedPipeline, donutSpecPipeline, dualAxisAdvancedPipeline, dualAxisSpecPipeline, execPipeline, findAllDimensions, findAllMeasures, findDimensionById, findFirstDimension, findFirstMeasure, findMeasureById, foldMeasures, funnelAdvancedPipeline, funnelSpecPipeline, heatmapAdvancedPipeline, heatmapSpecPipeline, i18n, intl, isDimension, isDimensionGroup, isDimensionSelector, isDimensions, isMeasure, isMeasureGroup, isMeasureSelector, isMeasures, isPartialDatumSelector, isPivotChart, isPivotTable, isTable, isVChart, isVTable, isValueSelector, lightTheme, lineAdvancedPipeline, lineSpecPipeline, measureDepth, pieAdvancedPipeline, pieSpecPipeline, pivotTableAdvancedPipeline, pivotTableSpecPipeline, preorderTraverse, radarAdvancedPipeline, radarSpecPipeline, registerAll, registerArea, registerAreaPercent, registerAreaRange, registerBar, registerBarParallel, registerBarPercent, registerColumn, registerColumnParallel, registerColumnPercent, registerCustomTheme, registerDarkTheme, registerDonut, registerFunnel, registerHeatmap, registerLightTheme, registerLine, registerPie, registerPivotTable, registerRadar, registerRose, registerRoseParallel, registerScatter, registerTable, roseAdvancedPipeline, roseParallelAdvancedPipeline, roseParallelSpecPipeline, roseSpecPipeline, scatterAdvancedPipeline, scatterSpecPipeline, selector_selector as selector, tableAdvancedPipeline, tableSpecPipeline, unfoldDimensions, updateAdvanced, updateSpec, zAdvancedVSeed, zAnalysis, zAnnotation, zAnnotationArea, zAnnotationHorizontalLine, zAnnotationPoint, zAnnotationVerticalLine, zArea, zAreaConfig, zAreaPercent, zAreaPercentConfig, zAreaRange, zAreaRangeConfig, zAreaStyle, zAxis, zBackgroundColor, zBar, zBarConfig, zBarParallel, zBarParallelConfig, zBarPercent, zBarPercentConfig, zBarStyle, zChartType, zColor, zColorLegend, zColumn, zColumnConfig, zColumnParallel, zColumnParallelConfig, zColumnPercent, zColumnPercentConfig, zConfig, zCrosshairLine, zCrosshairRect, zCustomTheme, zCustomThemeConfig, zDataset, zDatasetReshapeInfo, zDatum, zDimension, zDimensionGroup, zDimensionTree, zDimensions, zDonut, zDonutConfig, zDualAxis, zDualAxisConfig, zDualChartType, zDualMeasure, zDualMeasures, zEncoding, zFoldInfo, zFunnel, zFunnelConfig, zHeatmap, zHeatmapConfig, zLabel, zLegend, zLine, zLineConfig, zLineStyle, zLinearColor, zLocale, zMarkStyle, zMeasure, zMeasureGroup, zMeasureTree, zMeasures, zNumFormat, zPie, zPieConfig, zPivotTable, zPivotTableConfig, zPointStyle, zRadar, zRadarConfig, zRose, zRoseConfig, zRoseParallel, zRoseParallelConfig, zScatter, zScatterConfig, zSort, zSortLegend, zStackCornerRadius, zTable, zTableConfig, zTheme, zTooltip, zUnfoldInfo, zVSeed, zXBandAxis, zXLinearAxis, zYBandAxis, zYLinearAxis };
9089
+ export { AngleEncoding, Builder, ColorEncoding, ColorIdEncoding, DetailEncoding, FoldMeasureId, FoldMeasureName, FoldMeasureValue, FoldPrimaryMeasureValue, FoldSecondaryMeasureValue, FoldXMeasureValue, FoldYMeasureValue, MeasureName, ORIGINAL_DATA, Separator, UnfoldDimensionGroup, UnfoldDimensionGroupId, XEncoding, YEncoding, areaAdvancedPipeline, areaPercentAdvancedPipeline, areaPercentSpecPipeline, areaSpecPipeline, autoFormatter, autoNumFormatter, barAdvancedPipeline, barParallelAdvancedPipeline, barParallelSpecPipeline, barPercentAdvancedPipeline, barPercentSpecPipeline, barSpecPipeline, columnAdvancedPipeline, columnParallelAdvancedPipeline, columnParallelSpecPipeline, columnPercentAdvancedPipeline, columnPercentSpecPipeline, columnSpecPipeline, createFormatter, createNumFormatter, darkTheme, dataReshapeByEncoding, donutAdvancedPipeline, donutSpecPipeline, dualAxisAdvancedPipeline, dualAxisSpecPipeline, execPipeline, findAllDimensions, findAllMeasures, findDimensionById, findFirstDimension, findFirstMeasure, findMeasureById, foldMeasures, funnelAdvancedPipeline, funnelSpecPipeline, heatmapAdvancedPipeline, heatmapSpecPipeline, i18n, intl, isDimension, isDimensionGroup, isDimensionSelector, isDimensions, isMeasure, isMeasureGroup, isMeasureSelector, isMeasures, isPartialDatumSelector, isPivotChart, isPivotTable, isTable, isVChart, isVTable, isValueSelector, lightTheme, lineAdvancedPipeline, lineSpecPipeline, measureDepth, pieAdvancedPipeline, pieSpecPipeline, pivotTableAdvancedPipeline, pivotTableSpecPipeline, preorderTraverse, radarAdvancedPipeline, radarSpecPipeline, registerAll, registerArea, registerAreaPercent, registerBar, registerBarParallel, registerBarPercent, registerColumn, registerColumnParallel, registerColumnPercent, registerCustomTheme, registerDarkTheme, registerDonut, registerFunnel, registerHeatmap, registerLightTheme, registerLine, registerPie, registerPivotTable, registerRadar, registerRose, registerRoseParallel, registerScatter, registerTable, roseAdvancedPipeline, roseParallelAdvancedPipeline, roseParallelSpecPipeline, roseSpecPipeline, scatterAdvancedPipeline, scatterSpecPipeline, selector_selector as selector, tableAdvancedPipeline, tableSpecPipeline, unfoldDimensions, updateAdvanced, updateSpec, zAdvancedVSeed, zAnalysis, zAnnotation, zAnnotationArea, zAnnotationHorizontalLine, zAnnotationPoint, zAnnotationVerticalLine, zArea, zAreaConfig, zAreaPercent, zAreaPercentConfig, zAreaStyle, zAxis, zBackgroundColor, zBar, zBarConfig, zBarParallel, zBarParallelConfig, zBarPercent, zBarPercentConfig, zBarStyle, zChartType, zColor, zColorLegend, zColumn, zColumnConfig, zColumnParallel, zColumnParallelConfig, zColumnPercent, zColumnPercentConfig, zConfig, zCrosshairLine, zCrosshairRect, zCustomTheme, zCustomThemeConfig, zDataset, zDatasetReshapeInfo, zDatum, zDimension, zDimensionGroup, zDimensionTree, zDimensions, zDonut, zDonutConfig, zDualAxis, zDualAxisConfig, zDualChartType, zDualMeasure, zDualMeasures, zEncoding, zEncodings, zFoldInfo, zFunnel, zFunnelConfig, zHeatmap, zHeatmapConfig, zLabel, zLegend, zLine, zLineConfig, zLineStyle, zLinearColor, zLocale, zMarkStyle, zMeasure, zMeasureGroup, zMeasureTree, zMeasures, zNumFormat, zPie, zPieConfig, zPivotTable, zPivotTableConfig, zPointStyle, zRadar, zRadarConfig, zRose, zRoseConfig, zRoseParallel, zRoseParallelConfig, zScatter, zScatterConfig, zScatterMeasure, zScatterMeasures, zSort, zSortLegend, zStackCornerRadius, zTable, zTableConfig, zTheme, zTooltip, zUnfoldInfo, zVSeed, zXBandAxis, zXLinearAxis, zYBandAxis, zYLinearAxis };
9806
9090
 
9807
9091
  //# sourceMappingURL=index.js.map