@visactor/vseed 0.1.3 → 0.1.4

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 (39) hide show
  1. package/dist/builder/builder/builder.d.ts +4 -2
  2. package/dist/dataReshape/foldMeasures.d.ts +2 -2
  3. package/dist/index.cjs +520 -370
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +533 -383
  6. package/dist/index.js.map +1 -1
  7. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -0
  8. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
  9. package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +1 -0
  10. package/dist/types/advancedVSeed.d.ts +16 -5
  11. package/dist/types/chartType/area/zArea.d.ts +16 -5
  12. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +16 -5
  13. package/dist/types/chartType/bar/zBar.d.ts +16 -5
  14. package/dist/types/chartType/barParallel/zBarParallel.d.ts +16 -5
  15. package/dist/types/chartType/barPercent/zBarPercent.d.ts +16 -5
  16. package/dist/types/chartType/column/zColumn.d.ts +16 -5
  17. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +16 -5
  18. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +16 -5
  19. package/dist/types/chartType/donut/zDonut.d.ts +16 -5
  20. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +36 -25
  21. package/dist/types/chartType/funnel/zFunnel.d.ts +16 -5
  22. package/dist/types/chartType/heatmap/zHeatmap.d.ts +16 -5
  23. package/dist/types/chartType/line/zLine.d.ts +16 -5
  24. package/dist/types/chartType/pie/zPie.d.ts +16 -5
  25. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +16 -5
  26. package/dist/types/chartType/radar/zRadar.d.ts +16 -5
  27. package/dist/types/chartType/rose/zRose.d.ts +16 -5
  28. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +16 -5
  29. package/dist/types/chartType/scatter/zScatter.d.ts +36 -25
  30. package/dist/types/chartType/table/zTable.d.ts +16 -5
  31. package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
  32. package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
  33. package/dist/types/properties/measures/zDualMeasures.d.ts +40 -40
  34. package/dist/types/properties/measures/zMeasures.d.ts +15 -15
  35. package/dist/types/properties/measures/zScatterMeasures.d.ts +40 -40
  36. package/dist/types/zVseed.d.ts +360 -140
  37. package/dist/umd/index.js +534 -370
  38. package/dist/umd/index.js.map +1 -1
  39. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { clone, groupBy, isArray, isEmpty, isNullish, isNumber, isObjectType, isString, merge, mergeDeep, omit, pick, sort, unique } from "remeda";
1
+ import { clone, groupBy, isArray, isEmpty as external_remeda_isEmpty, isNullish, isNumber, isObjectType, isString, merge, mergeDeep, omit, pick, sort, unique, uniqueBy } from "remeda";
2
2
  import { z } from "zod";
3
3
  const execPipeline = (pipeline, context, initialValue = {})=>{
4
4
  const result = pipeline.reduce((prev, cur)=>cur(prev, context), initialValue);
@@ -519,7 +519,7 @@ const measureTreeToColumns = (spec, context)=>{
519
519
  const fieldFormat = (node, locale)=>(datum)=>{
520
520
  const { format = {}, autoFormat = true, id } = node;
521
521
  const value = datum[id];
522
- if (!isEmpty(format)) {
522
+ if (!external_remeda_isEmpty(format)) {
523
523
  const formatter = createFormatter(format);
524
524
  return formatter(value);
525
525
  }
@@ -882,7 +882,7 @@ const pivotIndicators = (spec, context)=>{
882
882
  };
883
883
  const pivotIndicators_fieldFormat = (node, locale)=>(value)=>{
884
884
  const { format = {}, autoFormat = true } = node;
885
- if (!isEmpty(format)) {
885
+ if (!external_remeda_isEmpty(format)) {
886
886
  const formatter = createFormatter(format);
887
887
  return formatter(value);
888
888
  }
@@ -1036,6 +1036,57 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
1036
1036
  locale: locale || 'zh-CN'
1037
1037
  };
1038
1038
  };
1039
+ const ORIGINAL_DATA = '__OriginalData__';
1040
+ const Separator = '-';
1041
+ const FoldMeasureName = '__MeaName__';
1042
+ const FoldMeasureId = '__MeaId__';
1043
+ const FoldMeasureValue = '__MeaValue__';
1044
+ const MeasureName = FoldMeasureName;
1045
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1046
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1047
+ const FoldXMeasureValue = '__MeaXValue__';
1048
+ const FoldYMeasureValue = '__MeaYValue__';
1049
+ const XEncoding = '__Dim_X__';
1050
+ const YEncoding = '__Dim_Y__';
1051
+ const AngleEncoding = '__Dim_Angle__';
1052
+ const DetailEncoding = '__Dim_Detail__';
1053
+ const ColorEncoding = '__Dim_Color__';
1054
+ const ColorIdEncoding = '__Dim_ColorId__';
1055
+ const getBasicDimensions = (vseed)=>{
1056
+ const { dimensions, dataset } = vseed;
1057
+ const MeaName = {
1058
+ id: MeasureName,
1059
+ alias: intl.i18n`指标名称`,
1060
+ encoding: 'detail'
1061
+ };
1062
+ if (!dataset) throw new Error('dataset is required');
1063
+ if (0 === dataset.length) return [];
1064
+ if (dimensions) {
1065
+ const basicDimensions = dimensions.map((dim)=>({
1066
+ location: 'dimension',
1067
+ ...dim
1068
+ }));
1069
+ if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1070
+ basicDimensions.push(MeaName);
1071
+ return basicDimensions;
1072
+ }
1073
+ const top100dataset = dataset.slice(0, 100);
1074
+ const sample = top100dataset.reduce((prev, cur)=>({
1075
+ ...prev,
1076
+ ...cur
1077
+ }), {});
1078
+ const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1079
+ '',
1080
+ null,
1081
+ void 0
1082
+ ].includes(key)).map((dim)=>({
1083
+ id: dim,
1084
+ alias: dim,
1085
+ location: 'dimension'
1086
+ }));
1087
+ basicDimensions.push(MeaName);
1088
+ return basicDimensions;
1089
+ };
1039
1090
  const getBasicMeasures = (vseed)=>{
1040
1091
  const { dataset, measures } = vseed;
1041
1092
  if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
@@ -1069,6 +1120,54 @@ const isMeasureTreeWithParentId = (vseed)=>{
1069
1120
  if (!measures) return false;
1070
1121
  return measures.some((measure)=>'parentId' in measure);
1071
1122
  };
1123
+ const encodingForLine = (advancedVSeed, context)=>{
1124
+ const { vseed } = context;
1125
+ const { measures: vseedMeasures = [] } = vseed;
1126
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1127
+ const dimensions = getBasicDimensions(vseed);
1128
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1129
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
1130
+ const encoding = {};
1131
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1132
+ else generateDefaultDimensionEncoding(dimensions, encoding);
1133
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1134
+ else generateDefaultMeasureEncoding(measures, encoding);
1135
+ return {
1136
+ ...advancedVSeed,
1137
+ encoding
1138
+ };
1139
+ };
1140
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1141
+ encoding.tooltip = unique(measures.map((item)=>item.id));
1142
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1143
+ };
1144
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1145
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1146
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
1147
+ encoding.x = uniqueDimIds.slice(0, 1);
1148
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1149
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1150
+ encoding.tooltip = uniqueDimIds;
1151
+ encoding.label = [];
1152
+ encoding.row = [];
1153
+ encoding.column = [];
1154
+ };
1155
+ const generateMeasureEncoding = (measures, encoding)=>{
1156
+ encoding.tooltip = measures.map((item)=>item.id);
1157
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1158
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1159
+ if (color.length > 0) encoding.color = color;
1160
+ };
1161
+ const generateDimensionEncoding = (dimensions, encoding)=>{
1162
+ encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1163
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1164
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1165
+ if (0 === encoding.x.length) encoding.x = [
1166
+ dimensions[0].id
1167
+ ];
1168
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1169
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1170
+ };
1072
1171
  const measureDepth = (measures = [])=>{
1073
1172
  if (!measures) return 0;
1074
1173
  let depth = 1;
@@ -1089,7 +1188,7 @@ const isPivotChart = (vseed)=>{
1089
1188
  if (isVTable(vseed)) return false;
1090
1189
  if (isMeasureTreeWithParentId(vseed)) {
1091
1190
  const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1092
- return parentIds && parentIds.length > 1;
1191
+ return parentIds && unique(parentIds).length > 1;
1093
1192
  }
1094
1193
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1095
1194
  const { dimensions = [] } = vseed;
@@ -1160,22 +1259,6 @@ const basicMeasuresToMeasureTree = (measures)=>{
1160
1259
  }
1161
1260
  ];
1162
1261
  };
1163
- const ORIGINAL_DATA = '__OriginalData__';
1164
- const Separator = '-';
1165
- const FoldMeasureName = '__MeaName__';
1166
- const FoldMeasureId = '__MeaId__';
1167
- const FoldMeasureValue = '__MeaValue__';
1168
- const MeasureName = FoldMeasureName;
1169
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1170
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1171
- const FoldXMeasureValue = '__MeaXValue__';
1172
- const FoldYMeasureValue = '__MeaYValue__';
1173
- const XEncoding = '__Dim_X__';
1174
- const YEncoding = '__Dim_Y__';
1175
- const AngleEncoding = '__Dim_Angle__';
1176
- const DetailEncoding = '__Dim_Detail__';
1177
- const ColorEncoding = '__Dim_Color__';
1178
- const ColorIdEncoding = '__Dim_ColorId__';
1179
1262
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1180
1263
  const result = {
1181
1264
  ...advancedVSeed
@@ -1215,52 +1298,13 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1215
1298
  result.dimensions.push(MeaName);
1216
1299
  return result;
1217
1300
  };
1218
- const encodingForLine = (advancedVSeed, context)=>{
1219
- const { vseed } = context;
1220
- const { dimensions } = advancedVSeed;
1221
- if (!dimensions) return advancedVSeed;
1222
- const encoding = vseed.encoding;
1223
- if (encoding) {
1224
- const x = encoding.x || [
1225
- dimensions[0].id
1226
- ];
1227
- const color = encoding.color || [
1228
- (dimensions[1] || dimensions[0]).id
1229
- ];
1230
- const detail = encoding.detail || [];
1231
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1232
- return {
1233
- ...advancedVSeed,
1234
- encoding: {
1235
- ...encoding,
1236
- x,
1237
- color,
1238
- detail: mergedDetail
1239
- }
1240
- };
1241
- }
1242
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1243
- const mergedEncoding = {
1244
- x: dimensions.slice(0, 1).map((item)=>item.id),
1245
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1246
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1247
- tooltip: dimensions.map((item)=>item.id),
1248
- label: [],
1249
- row: [],
1250
- column: []
1251
- };
1252
- return {
1253
- ...advancedVSeed,
1254
- encoding: mergedEncoding
1255
- };
1256
- };
1257
1301
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1258
1302
  const { vseed } = context;
1259
1303
  const usePivotChart = isPivotChart(vseed);
1260
1304
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1261
1305
  return execPipeline(pipeline, context, advancedVSeed);
1262
1306
  };
1263
- const foldMeasures = (dataset, measures, encoding, options)=>{
1307
+ const foldMeasures = (dataset, measures, options)=>{
1264
1308
  const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1265
1309
  const foldInfo = {
1266
1310
  measureId,
@@ -1361,7 +1405,7 @@ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1361
1405
  };
1362
1406
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1363
1407
  const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1364
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1408
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1365
1409
  measureId: foldMeasureId,
1366
1410
  measureName: foldMeasureName,
1367
1411
  measureValue: foldMeasureValue,
@@ -1405,7 +1449,7 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1405
1449
  const { dimensions, measures, encoding } = advancedVSeed;
1406
1450
  if (!measures || !dimensions || !dataset || !encoding) return result;
1407
1451
  if (0 === measures.length) throw new Error('measures can not be empty');
1408
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1452
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(findAllMeasures(measures), (item)=>item.id), encoding, {
1409
1453
  colorMeasureId: getColorMeasureId(advancedVSeed)
1410
1454
  });
1411
1455
  return {
@@ -1442,7 +1486,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1442
1486
  const measures = measureGroup.children;
1443
1487
  if (!measures) return;
1444
1488
  const groupId = measureGroup.id;
1445
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1489
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
1446
1490
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1447
1491
  colorMeasureId: getColorMeasureId(advancedVSeed)
1448
1492
  });
@@ -1651,9 +1695,9 @@ const annotation_annotation = (advancedVSeed, context)=>{
1651
1695
  };
1652
1696
  const lineAdvancedPipeline = [
1653
1697
  initAdvancedVSeed_initAdvancedVSeed,
1698
+ encodingForLine,
1654
1699
  buildMeasures,
1655
1700
  autoDimensions_autoDimensions,
1656
- encodingForLine,
1657
1701
  pivotAdapter([
1658
1702
  reshapeWithEncoding
1659
1703
  ], [
@@ -2035,7 +2079,7 @@ const label_label = (spec, context)=>{
2035
2079
  const measure = findMeasureById(measures, id);
2036
2080
  if (!measure) return value;
2037
2081
  const { format = {}, autoFormat = true } = measure;
2038
- if (!isEmpty(format)) {
2082
+ if (!external_remeda_isEmpty(format)) {
2039
2083
  const formatter = createFormatter(format);
2040
2084
  return formatter(value);
2041
2085
  }
@@ -2089,7 +2133,7 @@ const tooltip_tooltip = (spec, context)=>{
2089
2133
  const measure = findMeasureById(measures, id);
2090
2134
  if (!measure) return String(value);
2091
2135
  const { format = {}, autoFormat = true } = measure;
2092
- if (!isEmpty(format)) {
2136
+ if (!external_remeda_isEmpty(format)) {
2093
2137
  const formatter = createFormatter(format);
2094
2138
  return formatter(value);
2095
2139
  }
@@ -2111,7 +2155,7 @@ const tooltip_tooltip = (spec, context)=>{
2111
2155
  const measure = findMeasureById(measures, id);
2112
2156
  if (!measure) return String(value);
2113
2157
  const { format = {}, autoFormat = true } = measure;
2114
- if (!isEmpty(format)) {
2158
+ if (!external_remeda_isEmpty(format)) {
2115
2159
  const formatter = createFormatter(format);
2116
2160
  return formatter(value);
2117
2161
  }
@@ -3454,51 +3498,58 @@ const registerLine = ()=>{
3454
3498
  };
3455
3499
  const encodingForColumn = (advancedVSeed, context)=>{
3456
3500
  const { vseed } = context;
3457
- const { dimensions } = advancedVSeed;
3458
- if (!dimensions) return advancedVSeed;
3459
- const encoding = vseed.encoding;
3460
- if (encoding) {
3461
- const x = encoding.x || [
3462
- dimensions[0].id
3463
- ];
3464
- const color = encoding.color || [
3465
- (dimensions[1] || dimensions[0]).id
3466
- ];
3467
- const detail = encoding.detail || [];
3468
- const mergedDetail = 0 === detail.length ? unique([
3469
- ...color,
3470
- ...detail
3471
- ]) : detail;
3472
- return {
3473
- ...advancedVSeed,
3474
- encoding: {
3475
- ...encoding,
3476
- x,
3477
- color,
3478
- detail: mergedDetail
3479
- }
3480
- };
3481
- }
3482
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3483
- const mergedEncoding = {
3484
- x: dimensions.slice(0, 1).map((item)=>item.id),
3485
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3486
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3487
- tooltip: dimensions.map((item)=>item.id),
3488
- label: [],
3489
- row: [],
3490
- column: []
3491
- };
3501
+ const { measures: vseedMeasures = [] } = vseed;
3502
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3503
+ const dimensions = getBasicDimensions(vseed);
3504
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3505
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
3506
+ const encoding = {};
3507
+ if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
3508
+ else column_generateDefaultDimensionEncoding(dimensions, encoding);
3509
+ if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
3510
+ else column_generateDefaultMeasureEncoding(measures, encoding);
3492
3511
  return {
3493
3512
  ...advancedVSeed,
3494
- encoding: mergedEncoding
3513
+ encoding
3495
3514
  };
3496
3515
  };
3516
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3517
+ encoding.tooltip = unique(measures.map((item)=>item.id));
3518
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3519
+ };
3520
+ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3521
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3522
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
3523
+ encoding.x = uniqueDimIds.slice(0, 1);
3524
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3525
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3526
+ encoding.tooltip = uniqueDimIds;
3527
+ encoding.label = [];
3528
+ encoding.row = [];
3529
+ encoding.column = [];
3530
+ };
3531
+ const column_generateMeasureEncoding = (measures, encoding)=>{
3532
+ encoding.tooltip = measures.map((item)=>item.id);
3533
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3534
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3535
+ if (color.length > 0) encoding.color = color;
3536
+ return encoding;
3537
+ };
3538
+ const column_generateDimensionEncoding = (dimensions, encoding)=>{
3539
+ encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3540
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3541
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
3542
+ if (0 === encoding.x.length) encoding.x = [
3543
+ dimensions[0].id
3544
+ ];
3545
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3546
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3547
+ };
3497
3548
  const columnAdvancedPipeline = [
3498
3549
  initAdvancedVSeed_initAdvancedVSeed,
3550
+ encodingForColumn,
3499
3551
  buildMeasures,
3500
3552
  autoDimensions_autoDimensions,
3501
- encodingForColumn,
3502
3553
  pivotAdapter([
3503
3554
  reshapeWithEncoding
3504
3555
  ], [
@@ -3945,9 +3996,9 @@ const registerColumn = ()=>{
3945
3996
  };
3946
3997
  const columnParallelAdvancedPipeline = [
3947
3998
  initAdvancedVSeed_initAdvancedVSeed,
3999
+ encodingForColumn,
3948
4000
  buildMeasures,
3949
4001
  autoDimensions_autoDimensions,
3950
- encodingForColumn,
3951
4002
  pivotAdapter([
3952
4003
  reshapeWithEncoding
3953
4004
  ], [
@@ -4042,9 +4093,9 @@ const registerColumnParallel = ()=>{
4042
4093
  };
4043
4094
  const columnPercentAdvancedPipeline = [
4044
4095
  initAdvancedVSeed_initAdvancedVSeed,
4096
+ encodingForColumn,
4045
4097
  buildMeasures,
4046
4098
  autoDimensions_autoDimensions,
4047
- encodingForColumn,
4048
4099
  pivotAdapter([
4049
4100
  reshapeWithEncoding
4050
4101
  ], [
@@ -4123,46 +4174,53 @@ const registerColumnPercent = ()=>{
4123
4174
  };
4124
4175
  const encodingForBar = (advancedVSeed, context)=>{
4125
4176
  const { vseed } = context;
4126
- const { dimensions } = advancedVSeed;
4127
- if (!dimensions) return advancedVSeed;
4128
- const encoding = vseed.encoding;
4129
- if (encoding) {
4130
- const y = encoding.y || [
4131
- dimensions[0].id
4132
- ];
4133
- const color = encoding.color || [
4134
- (dimensions[1] || dimensions[0]).id
4135
- ];
4136
- const detail = encoding.detail || [];
4137
- const mergedDetail = 0 === detail.length ? unique([
4138
- ...color,
4139
- ...detail
4140
- ]) : detail;
4141
- return {
4142
- ...advancedVSeed,
4143
- encoding: {
4144
- ...encoding,
4145
- y,
4146
- color,
4147
- detail: mergedDetail
4148
- }
4149
- };
4150
- }
4151
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4152
- const mergedEncoding = {
4153
- y: dimensions.slice(0, 1).map((item)=>item.id),
4154
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4155
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4156
- tooltip: dimensions.map((item)=>item.id),
4157
- label: [],
4158
- row: [],
4159
- column: []
4160
- };
4177
+ const { measures: vseedMeasures = [] } = vseed;
4178
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4179
+ const dimensions = getBasicDimensions(vseed);
4180
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4181
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4182
+ const encoding = {};
4183
+ if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
4184
+ else bar_generateDefaultDimensionEncoding(dimensions, encoding);
4185
+ if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
4186
+ else bar_generateDefaultMeasureEncoding(measures, encoding);
4161
4187
  return {
4162
4188
  ...advancedVSeed,
4163
- encoding: mergedEncoding
4189
+ encoding
4164
4190
  };
4165
4191
  };
4192
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4193
+ encoding.tooltip = unique(measures.map((item)=>item.id));
4194
+ encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4195
+ };
4196
+ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4197
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4198
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
4199
+ encoding.y = uniqueDimIds.slice(0, 1);
4200
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4201
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4202
+ encoding.tooltip = uniqueDimIds;
4203
+ encoding.label = [];
4204
+ encoding.row = [];
4205
+ encoding.column = [];
4206
+ };
4207
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4208
+ encoding.tooltip = measures.map((item)=>item.id);
4209
+ encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4210
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4211
+ if (color.length > 0) encoding.color = color;
4212
+ return encoding;
4213
+ };
4214
+ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4215
+ encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4216
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4217
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4218
+ if (0 === encoding.y.length) encoding.y = [
4219
+ dimensions[0].id
4220
+ ];
4221
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4222
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4223
+ };
4166
4224
  const sortYBandAxis = (advancedVSeed, context)=>{
4167
4225
  const result = {
4168
4226
  ...advancedVSeed
@@ -4181,9 +4239,9 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4181
4239
  };
4182
4240
  const barAdvancedPipeline = [
4183
4241
  initAdvancedVSeed_initAdvancedVSeed,
4242
+ encodingForBar,
4184
4243
  buildMeasures,
4185
4244
  autoDimensions_autoDimensions,
4186
- encodingForBar,
4187
4245
  pivotAdapter([
4188
4246
  reshapeWithEncoding
4189
4247
  ], [
@@ -4701,9 +4759,9 @@ const registerBarPercent = ()=>{
4701
4759
  };
4702
4760
  const areaAdvancedPipeline = [
4703
4761
  initAdvancedVSeed_initAdvancedVSeed,
4762
+ encodingForColumn,
4704
4763
  buildMeasures,
4705
4764
  autoDimensions_autoDimensions,
4706
- encodingForColumn,
4707
4765
  pivotAdapter([
4708
4766
  reshapeWithEncoding
4709
4767
  ], [
@@ -4859,9 +4917,9 @@ const registerArea = ()=>{
4859
4917
  };
4860
4918
  const areaPercentAdvancedPipeline = [
4861
4919
  initAdvancedVSeed_initAdvancedVSeed,
4920
+ encodingForColumn,
4862
4921
  buildMeasures,
4863
4922
  autoDimensions_autoDimensions,
4864
- encodingForColumn,
4865
4923
  pivotAdapter([
4866
4924
  reshapeWithEncoding
4867
4925
  ], [
@@ -4935,6 +4993,49 @@ const registerAreaPercent = ()=>{
4935
4993
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
4936
4994
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
4937
4995
  };
4996
+ const encodingForScatter = (advancedVSeed, context)=>{
4997
+ const { vseed } = context;
4998
+ const { measures: vseedMeasures = [] } = vseed;
4999
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5000
+ const dimensions = getBasicDimensions(vseed);
5001
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5002
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5003
+ const encoding = {};
5004
+ if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
5005
+ else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
5006
+ if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
5007
+ else scatter_generateDefaultMeasureEncoding(measures, encoding);
5008
+ return {
5009
+ ...advancedVSeed,
5010
+ encoding
5011
+ };
5012
+ };
5013
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5014
+ encoding.tooltip = unique(measures.map((item)=>item.id));
5015
+ encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5016
+ };
5017
+ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5018
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5019
+ const uniqueDimIds = unique(dimensionsWithoutMeasureName.map((d)=>d.id));
5020
+ encoding.color = uniqueDimIds.slice(0);
5021
+ encoding.detail = uniqueDimIds.slice(0);
5022
+ encoding.tooltip = uniqueDimIds;
5023
+ encoding.label = [];
5024
+ encoding.row = [];
5025
+ encoding.column = [];
5026
+ };
5027
+ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5028
+ encoding.tooltip = measures.map((item)=>item.id);
5029
+ encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5030
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5031
+ if (color.length > 0) encoding.color = color;
5032
+ };
5033
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5034
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5035
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5036
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5037
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5038
+ };
4938
5039
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
4939
5040
  const { vseed } = context;
4940
5041
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5025,52 +5126,16 @@ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5025
5126
  const encoding = Array.isArray(item.encoding) ? item.encoding : [
5026
5127
  item.encoding
5027
5128
  ];
5028
- const isY = encoding.includes('yAxis');
5029
5129
  const isX = encoding.includes('xAxis');
5130
+ const isY = encoding.includes('yAxis');
5131
+ const isEmpty = !encoding.length;
5030
5132
  if (isY) scatterChart.yMeasures.push(item);
5031
5133
  else if (isX) scatterChart.xMeasures.push(item);
5032
- else if (!isY && !isX) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5134
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5033
5135
  else scatterChart.xMeasures.push(item);
5034
5136
  });
5035
5137
  return scatterMeasuresToMeasureTree(scatterMeasures);
5036
5138
  };
5037
- const encodingForScatter = (advancedVSeed, context)=>{
5038
- const { vseed } = context;
5039
- const { dimensions } = advancedVSeed;
5040
- if (!dimensions) return advancedVSeed;
5041
- const encoding = vseed.encoding;
5042
- if (encoding) {
5043
- const detail = encoding.detail || [];
5044
- const color = encoding.color || [
5045
- (dimensions[1] || dimensions[0]).id
5046
- ];
5047
- const mergedDetail = 0 === detail.length ? unique([
5048
- ...color,
5049
- ...detail
5050
- ]) : detail;
5051
- return {
5052
- ...advancedVSeed,
5053
- encoding: {
5054
- ...encoding,
5055
- color,
5056
- detail: mergedDetail
5057
- }
5058
- };
5059
- }
5060
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5061
- const mergedEncoding = {
5062
- color: dimensions.slice(0).map((item)=>item.id),
5063
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5064
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5065
- label: [],
5066
- row: [],
5067
- column: []
5068
- };
5069
- return {
5070
- ...advancedVSeed,
5071
- encoding: mergedEncoding
5072
- };
5073
- };
5074
5139
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5075
5140
  const result = {
5076
5141
  ...advancedVSeed
@@ -5087,7 +5152,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5087
5152
  const xMeasures = measures[0];
5088
5153
  const yMeasures = measures[1] || xMeasures;
5089
5154
  if (xMeasures && xMeasures.children) {
5090
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5155
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (d)=>d.id), uniqueBy(xMeasures.children, (d)=>d.id), encoding, {
5091
5156
  foldMeasureValue: FoldXMeasureValue,
5092
5157
  colorItemAsId: true,
5093
5158
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5097,7 +5162,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5097
5162
  unfoldInfoList.push(unfoldInfo);
5098
5163
  }
5099
5164
  if (yMeasures && yMeasures.children) {
5100
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5165
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], uniqueBy(dimensions, (d)=>d.id), uniqueBy(yMeasures.children, (d)=>d.id), encoding, {
5101
5166
  foldMeasureValue: FoldYMeasureValue,
5102
5167
  colorItemAsId: true,
5103
5168
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5201,9 +5266,9 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5201
5266
  };
5202
5267
  const scatterAdvancedPipeline = [
5203
5268
  initAdvancedVSeed_initAdvancedVSeed,
5269
+ encodingForScatter,
5204
5270
  buildMeasuresForScatter,
5205
5271
  autoDimensions_autoDimensions,
5206
- encodingForScatter,
5207
5272
  pivotAdapter([
5208
5273
  reshapeWithScatterEncoding
5209
5274
  ], [
@@ -5348,6 +5413,55 @@ const registerScatter = ()=>{
5348
5413
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5349
5414
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5350
5415
  };
5416
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5417
+ const { vseed } = context;
5418
+ const { measures: vseedMeasures = [] } = vseed;
5419
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5420
+ const dimensions = getBasicDimensions(vseed);
5421
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5422
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5423
+ const encoding = {};
5424
+ if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
5425
+ else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
5426
+ if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
5427
+ else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
5428
+ return {
5429
+ ...advancedVSeed,
5430
+ encoding
5431
+ };
5432
+ };
5433
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5434
+ encoding.tooltip = unique(measures.map((item)=>item.id));
5435
+ encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5436
+ };
5437
+ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5438
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5439
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
5440
+ encoding.x = uniqueDimIds.slice(0, 1);
5441
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5442
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5443
+ encoding.tooltip = uniqueDimIds;
5444
+ encoding.label = [];
5445
+ encoding.row = [];
5446
+ encoding.column = [];
5447
+ };
5448
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5449
+ encoding.tooltip = measures.map((item)=>item.id);
5450
+ encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5451
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5452
+ if (color.length > 0) encoding.color = color;
5453
+ return encoding;
5454
+ };
5455
+ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5456
+ encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5457
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5458
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5459
+ if (0 === encoding.x.length) encoding.x = [
5460
+ dimensions[0].id
5461
+ ];
5462
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5463
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5464
+ };
5351
5465
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5352
5466
  const { vseed } = context;
5353
5467
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5440,54 +5554,14 @@ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
5440
5554
  ];
5441
5555
  const isPrimary = encoding.includes('primaryYAxis');
5442
5556
  const isSecondary = encoding.includes('secondaryYAxis');
5557
+ const isEmpty = !item.encoding;
5443
5558
  if (isPrimary) dualChart.primaryMeasures.push(item);
5444
5559
  else if (isSecondary) dualChart.secondaryMeasures.push(item);
5445
- else if (!isPrimary && !isSecondary) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5560
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5446
5561
  else dualChart.secondaryMeasures.push(item);
5447
5562
  });
5448
5563
  return dualMeasuresToMeasureTree(dualMeasures);
5449
5564
  };
5450
- const encodingForDualAxis = (advancedVSeed, context)=>{
5451
- const { vseed } = context;
5452
- const { dimensions } = advancedVSeed;
5453
- if (!dimensions) return advancedVSeed;
5454
- const encoding = vseed.encoding;
5455
- if (encoding) {
5456
- const x = encoding.x || [
5457
- dimensions[0].id
5458
- ];
5459
- const color = encoding.color || [
5460
- (dimensions[1] || dimensions[0]).id
5461
- ];
5462
- const detail = encoding.detail || [];
5463
- const mergedDetail = 0 === detail.length ? unique([
5464
- ...color,
5465
- ...detail
5466
- ]) : detail;
5467
- return {
5468
- ...advancedVSeed,
5469
- encoding: {
5470
- ...encoding,
5471
- x,
5472
- color,
5473
- detail: mergedDetail
5474
- }
5475
- };
5476
- }
5477
- const mergedEncoding = {
5478
- x: dimensions.slice(0, 1).map((item)=>item.id),
5479
- color: dimensions.slice(1).map((item)=>item.id),
5480
- detail: dimensions.slice(1).map((item)=>item.id),
5481
- tooltip: dimensions.map((item)=>item.id),
5482
- label: [],
5483
- row: [],
5484
- column: []
5485
- };
5486
- return {
5487
- ...advancedVSeed,
5488
- encoding: mergedEncoding
5489
- };
5490
- };
5491
5565
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5492
5566
  const result = {
5493
5567
  ...advancedVSeed
@@ -5637,9 +5711,9 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5637
5711
  };
5638
5712
  const dualAxisAdvancedPipeline = [
5639
5713
  initAdvancedVSeed_initAdvancedVSeed,
5714
+ encodingForDualAxis,
5640
5715
  buildMeasuresForDualAxis,
5641
5716
  autoDimensions_autoDimensions,
5642
- encodingForDualAxis,
5643
5717
  pivotAdapter([
5644
5718
  reshapeWithDualEncoding
5645
5719
  ], [
@@ -5942,7 +6016,7 @@ const labelPrimary = (spec, context)=>{
5942
6016
  const measure = findMeasureById(measures, id);
5943
6017
  if (!measure) return value;
5944
6018
  const { format = {}, autoFormat = true } = measure;
5945
- if (!isEmpty(format)) {
6019
+ if (!external_remeda_isEmpty(format)) {
5946
6020
  const formatter = createFormatter(format);
5947
6021
  return formatter(value);
5948
6022
  }
@@ -5978,7 +6052,7 @@ const labelSecondary = (spec, context)=>{
5978
6052
  const measure = findMeasureById(measures, id);
5979
6053
  if (!measure) return value;
5980
6054
  const { format = {}, autoFormat = true } = measure;
5981
- if (!isEmpty(format)) {
6055
+ if (!external_remeda_isEmpty(format)) {
5982
6056
  const formatter = createFormatter(format);
5983
6057
  return formatter(value);
5984
6058
  }
@@ -6034,7 +6108,7 @@ const tooltipPrimary = (spec, context)=>{
6034
6108
  const measure = findMeasureById(measures, id);
6035
6109
  if (!measure) return String(value);
6036
6110
  const { format = {}, autoFormat = true } = measure;
6037
- if (!isEmpty(format)) {
6111
+ if (!external_remeda_isEmpty(format)) {
6038
6112
  const formatter = createFormatter(format);
6039
6113
  return formatter(value);
6040
6114
  }
@@ -6056,7 +6130,7 @@ const tooltipPrimary = (spec, context)=>{
6056
6130
  const measure = findMeasureById(measures, id);
6057
6131
  if (!measure) return String(value);
6058
6132
  const { format = {}, autoFormat = true } = measure;
6059
- if (!isEmpty(format)) {
6133
+ if (!external_remeda_isEmpty(format)) {
6060
6134
  const formatter = createFormatter(format);
6061
6135
  return formatter(value);
6062
6136
  }
@@ -6114,7 +6188,7 @@ const tooltipSecondary = (spec, context)=>{
6114
6188
  const measure = findMeasureById(measures, id);
6115
6189
  if (!measure) return String(value);
6116
6190
  const { format = {}, autoFormat = true } = measure;
6117
- if (!isEmpty(format)) {
6191
+ if (!external_remeda_isEmpty(format)) {
6118
6192
  const formatter = createFormatter(format);
6119
6193
  return formatter(value);
6120
6194
  }
@@ -6136,7 +6210,7 @@ const tooltipSecondary = (spec, context)=>{
6136
6210
  const measure = findMeasureById(measures, id);
6137
6211
  if (!measure) return String(value);
6138
6212
  const { format = {}, autoFormat = true } = measure;
6139
- if (!isEmpty(format)) {
6213
+ if (!external_remeda_isEmpty(format)) {
6140
6214
  const formatter = createFormatter(format);
6141
6215
  return formatter(value);
6142
6216
  }
@@ -6162,7 +6236,7 @@ const yLinearPrimary = (spec, context)=>{
6162
6236
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6163
6237
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6164
6238
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6165
- if (foldInfoList?.[0] && isEmpty(foldInfoList[0].foldMap)) return result;
6239
+ if (foldInfoList?.[0] && external_remeda_isEmpty(foldInfoList[0].foldMap)) return result;
6166
6240
  const id = `${reshapeInfoId}-primary-axis`;
6167
6241
  const seriesIds = [
6168
6242
  `${reshapeInfoId}-primary-series`,
@@ -6474,33 +6548,51 @@ const registerDualAxis = ()=>{
6474
6548
  };
6475
6549
  const encodingForPie = (advancedVSeed, context)=>{
6476
6550
  const { vseed } = context;
6477
- const { dimensions } = advancedVSeed;
6478
- if (!dimensions) return advancedVSeed;
6479
- const encoding = vseed.encoding;
6480
- if (encoding) return {
6481
- ...advancedVSeed,
6482
- encoding: {
6483
- ...encoding
6484
- }
6485
- };
6486
- const mergedEncoding = {
6487
- color: dimensions.slice(0).map((item)=>item.id),
6488
- detail: dimensions.slice(0).map((item)=>item.id),
6489
- tooltip: dimensions.map((item)=>item.id),
6490
- label: [],
6491
- row: [],
6492
- column: []
6493
- };
6551
+ const { measures: vseedMeasures = [] } = vseed;
6552
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6553
+ const dimensions = getBasicDimensions(vseed);
6554
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6555
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
6556
+ const encoding = {};
6557
+ if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
6558
+ else pie_generateDefaultDimensionEncoding(dimensions, encoding);
6559
+ if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
6560
+ else pie_generateDefaultMeasureEncoding(measures, encoding);
6494
6561
  return {
6495
6562
  ...advancedVSeed,
6496
- encoding: mergedEncoding
6497
- };
6563
+ encoding
6564
+ };
6565
+ };
6566
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
6567
+ encoding.tooltip = unique(measures.map((item)=>item.id));
6568
+ encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6569
+ };
6570
+ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6571
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
6572
+ encoding.color = uniqueDimIds.slice(0);
6573
+ encoding.detail = uniqueDimIds.slice(0);
6574
+ encoding.tooltip = uniqueDimIds;
6575
+ encoding.label = [];
6576
+ encoding.row = [];
6577
+ encoding.column = [];
6578
+ };
6579
+ const pie_generateMeasureEncoding = (measures, encoding)=>{
6580
+ encoding.tooltip = measures.map((item)=>item.id);
6581
+ encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6582
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6583
+ if (color.length > 0) encoding.color = color;
6584
+ };
6585
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6586
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6587
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6588
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
6589
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6498
6590
  };
6499
6591
  const pieAdvancedPipeline = [
6500
6592
  initAdvancedVSeed_initAdvancedVSeed,
6593
+ encodingForPie,
6501
6594
  buildMeasures,
6502
6595
  autoDimensions_autoDimensions,
6503
- encodingForPie,
6504
6596
  pivotAdapter([
6505
6597
  reshapeWithEncoding
6506
6598
  ], [
@@ -6679,51 +6771,57 @@ const registerDonut = ()=>{
6679
6771
  };
6680
6772
  const encodingForRose = (advancedVSeed, context)=>{
6681
6773
  const { vseed } = context;
6682
- const { dimensions } = advancedVSeed;
6683
- if (!dimensions) return advancedVSeed;
6684
- const encoding = vseed.encoding;
6685
- if (encoding) {
6686
- const angle = encoding.angle || [
6687
- dimensions[0].id
6688
- ];
6689
- const color = encoding.color || [
6690
- (dimensions[1] || dimensions[0]).id
6691
- ];
6692
- const detail = encoding.detail || [];
6693
- const mergedDetail = 0 === detail.length ? unique([
6694
- ...color,
6695
- ...detail
6696
- ]) : detail;
6697
- return {
6698
- ...advancedVSeed,
6699
- encoding: {
6700
- ...encoding,
6701
- angle,
6702
- color,
6703
- detail: mergedDetail
6704
- }
6705
- };
6706
- }
6707
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6708
- const mergedEncoding = {
6709
- angle: dimensions.slice(0, 1).map((item)=>item.id),
6710
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6711
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6712
- tooltip: dimensions.map((item)=>item.id),
6713
- label: [],
6714
- row: [],
6715
- column: []
6716
- };
6774
+ const { measures: vseedMeasures = [] } = vseed;
6775
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6776
+ const dimensions = getBasicDimensions(vseed);
6777
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6778
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
6779
+ const encoding = {};
6780
+ if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
6781
+ else rose_generateDefaultDimensionEncoding(dimensions, encoding);
6782
+ if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
6783
+ else rose_generateDefaultMeasureEncoding(measures, encoding);
6717
6784
  return {
6718
6785
  ...advancedVSeed,
6719
- encoding: mergedEncoding
6786
+ encoding
6720
6787
  };
6721
6788
  };
6789
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
6790
+ encoding.tooltip = unique(measures.map((item)=>item.id));
6791
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6792
+ };
6793
+ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6794
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6795
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
6796
+ encoding.angle = uniqueDimIds.slice(0, 1);
6797
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
6798
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
6799
+ encoding.tooltip = uniqueDimIds;
6800
+ encoding.label = [];
6801
+ encoding.row = [];
6802
+ encoding.column = [];
6803
+ };
6804
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
6805
+ encoding.tooltip = measures.map((item)=>item.id);
6806
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6807
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6808
+ if (color.length > 0) encoding.color = color;
6809
+ };
6810
+ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
6811
+ encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6812
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6813
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6814
+ if (0 === encoding.angle.length) encoding.angle = [
6815
+ dimensions[0].id
6816
+ ];
6817
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6818
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6819
+ };
6722
6820
  const roseAdvancedPipeline = [
6723
6821
  initAdvancedVSeed_initAdvancedVSeed,
6822
+ encodingForRose,
6724
6823
  buildMeasures,
6725
6824
  autoDimensions_autoDimensions,
6726
- encodingForRose,
6727
6825
  pivotAdapter([
6728
6826
  reshapeWithEncoding
6729
6827
  ], [
@@ -6890,9 +6988,9 @@ const registerRose = ()=>{
6890
6988
  };
6891
6989
  const roseParallelAdvancedPipeline = [
6892
6990
  initAdvancedVSeed_initAdvancedVSeed,
6991
+ encodingForRose,
6893
6992
  buildMeasures,
6894
6993
  autoDimensions_autoDimensions,
6895
- encodingForRose,
6896
6994
  pivotAdapter([
6897
6995
  reshapeWithEncoding
6898
6996
  ], [
@@ -6998,50 +7096,57 @@ const registerRoseParallel = ()=>{
6998
7096
  };
6999
7097
  const encodingForRadar = (advancedVSeed, context)=>{
7000
7098
  const { vseed } = context;
7001
- const { dimensions } = advancedVSeed;
7002
- if (!dimensions) return advancedVSeed;
7003
- const encoding = vseed.encoding;
7004
- if (encoding) {
7005
- const angle = encoding.angle || [
7006
- dimensions[0].id
7007
- ];
7008
- const color = encoding.color || [
7009
- (dimensions[1] || dimensions[0]).id
7010
- ];
7011
- const detail = encoding.detail || [];
7012
- const mergedDetail = 0 === detail.length ? unique([
7013
- ...color,
7014
- ...detail
7015
- ]) : detail;
7016
- return {
7017
- ...advancedVSeed,
7018
- encoding: {
7019
- ...encoding,
7020
- angle,
7021
- color,
7022
- detail: mergedDetail
7023
- }
7024
- };
7025
- }
7026
- const mergedEncoding = {
7027
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7028
- color: dimensions.slice(1).map((item)=>item.id),
7029
- detail: dimensions.slice(1).map((item)=>item.id),
7030
- tooltip: dimensions.map((item)=>item.id),
7031
- label: [],
7032
- row: [],
7033
- column: []
7034
- };
7099
+ const { measures: vseedMeasures = [] } = vseed;
7100
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7101
+ const dimensions = getBasicDimensions(vseed);
7102
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7103
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7104
+ const encoding = {};
7105
+ if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
7106
+ else radar_generateDefaultDimensionEncoding(dimensions, encoding);
7107
+ if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
7108
+ else radar_generateDefaultMeasureEncoding(measures, encoding);
7035
7109
  return {
7036
7110
  ...advancedVSeed,
7037
- encoding: mergedEncoding
7111
+ encoding
7038
7112
  };
7039
7113
  };
7114
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7115
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7116
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7117
+ };
7118
+ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7119
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7120
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
7121
+ encoding.angle = uniqueDimIds.slice(0, 1);
7122
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7123
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7124
+ encoding.tooltip = uniqueDimIds;
7125
+ encoding.label = [];
7126
+ encoding.row = [];
7127
+ encoding.column = [];
7128
+ };
7129
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7130
+ encoding.tooltip = measures.map((item)=>item.id);
7131
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7132
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7133
+ if (color.length > 0) encoding.color = color;
7134
+ };
7135
+ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7136
+ encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7137
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7138
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7139
+ if (0 === encoding.angle.length) encoding.angle = [
7140
+ dimensions[0].id
7141
+ ];
7142
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7143
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7144
+ };
7040
7145
  const radarAdvancedPipeline = [
7041
7146
  initAdvancedVSeed_initAdvancedVSeed,
7147
+ encodingForRadar,
7042
7148
  buildMeasures,
7043
7149
  autoDimensions_autoDimensions,
7044
- encodingForRadar,
7045
7150
  pivotAdapter([
7046
7151
  reshapeWithEncoding
7047
7152
  ], [
@@ -7177,33 +7282,51 @@ const registerRadar = ()=>{
7177
7282
  };
7178
7283
  const encodingForFunnel = (advancedVSeed, context)=>{
7179
7284
  const { vseed } = context;
7180
- const { dimensions } = advancedVSeed;
7181
- if (!dimensions) return advancedVSeed;
7182
- const encoding = vseed.encoding;
7183
- if (encoding) return {
7184
- ...advancedVSeed,
7185
- encoding: {
7186
- ...encoding
7187
- }
7188
- };
7189
- const mergedEncoding = {
7190
- color: dimensions.slice(0).map((item)=>item.id),
7191
- detail: dimensions.slice(0).map((item)=>item.id),
7192
- tooltip: dimensions.map((item)=>item.id),
7193
- label: [],
7194
- row: [],
7195
- column: []
7196
- };
7285
+ const { measures: vseedMeasures = [] } = vseed;
7286
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7287
+ const dimensions = getBasicDimensions(vseed);
7288
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7289
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7290
+ const encoding = {};
7291
+ if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
7292
+ else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
7293
+ if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
7294
+ else funnel_generateDefaultMeasureEncoding(measures, encoding);
7197
7295
  return {
7198
7296
  ...advancedVSeed,
7199
- encoding: mergedEncoding
7200
- };
7297
+ encoding
7298
+ };
7299
+ };
7300
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7301
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7302
+ encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7303
+ };
7304
+ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7305
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
7306
+ encoding.color = uniqueDimIds.slice(0);
7307
+ encoding.detail = uniqueDimIds.slice(0);
7308
+ encoding.tooltip = uniqueDimIds;
7309
+ encoding.label = [];
7310
+ encoding.row = [];
7311
+ encoding.column = [];
7312
+ };
7313
+ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7314
+ encoding.tooltip = measures.map((item)=>item.id);
7315
+ encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7316
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7317
+ if (color.length > 0) encoding.color = color;
7318
+ };
7319
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7320
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7321
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7322
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7323
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7201
7324
  };
7202
7325
  const funnelAdvancedPipeline = [
7203
7326
  initAdvancedVSeed_initAdvancedVSeed,
7327
+ encodingForFunnel,
7204
7328
  buildMeasures,
7205
7329
  autoDimensions_autoDimensions,
7206
- encodingForFunnel,
7207
7330
  pivotAdapter([
7208
7331
  reshapeWithEncoding
7209
7332
  ], [
@@ -7296,45 +7419,61 @@ const registerFunnel = ()=>{
7296
7419
  };
7297
7420
  const encodingForHeatmap = (advancedVSeed, context)=>{
7298
7421
  const { vseed } = context;
7299
- const { dimensions } = advancedVSeed;
7300
- if (!dimensions) return advancedVSeed;
7301
- const encoding = vseed.encoding;
7302
- if (encoding) {
7303
- const x = encoding.x || [
7304
- dimensions[0].id
7305
- ];
7306
- const y = encoding.y || [
7307
- (dimensions[1] || dimensions[0]).id
7308
- ];
7309
- return {
7310
- ...advancedVSeed,
7311
- encoding: {
7312
- x,
7313
- y,
7314
- ...encoding
7315
- }
7316
- };
7317
- }
7318
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7319
- const mergedEncoding = {
7320
- x: dimensions.slice(0, 1).map((item)=>item.id),
7321
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7322
- color: dimensions.slice(0).map((item)=>item.id),
7323
- tooltip: dimensions.map((item)=>item.id),
7324
- label: [],
7325
- row: [],
7326
- column: []
7327
- };
7422
+ const { measures: vseedMeasures = [] } = vseed;
7423
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7424
+ const dimensions = getBasicDimensions(vseed);
7425
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7426
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7427
+ const encoding = {};
7428
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
7429
+ else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
7430
+ if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
7431
+ else heatmap_generateDefaultMeasureEncoding(measures, encoding);
7328
7432
  return {
7329
7433
  ...advancedVSeed,
7330
- encoding: mergedEncoding
7434
+ encoding
7331
7435
  };
7332
7436
  };
7437
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7438
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7439
+ encoding.color = unique(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7440
+ };
7441
+ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7442
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7443
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
7444
+ encoding.x = uniqueDimIds.slice(0, 1);
7445
+ encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7446
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7447
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7448
+ encoding.tooltip = uniqueDimIds;
7449
+ encoding.label = [];
7450
+ encoding.row = [];
7451
+ encoding.column = [];
7452
+ };
7453
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7454
+ encoding.tooltip = measures.map((item)=>item.id);
7455
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7456
+ if (color.length > 0) encoding.color = color;
7457
+ return encoding;
7458
+ };
7459
+ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7460
+ encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7461
+ encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
7462
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7463
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7464
+ if (0 === encoding.x.length) encoding.x = [
7465
+ dimensions[0].id
7466
+ ];
7467
+ if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7468
+ else encoding.y = dimensions.slice(0).map((item)=>item.id);
7469
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7470
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7471
+ };
7333
7472
  const heatmapAdvancedPipeline = [
7334
7473
  initAdvancedVSeed_initAdvancedVSeed,
7474
+ encodingForHeatmap,
7335
7475
  buildMeasures,
7336
7476
  autoDimensions_autoDimensions,
7337
- encodingForHeatmap,
7338
7477
  pivotAdapter([
7339
7478
  reshapeWithEncoding
7340
7479
  ], [
@@ -8154,7 +8293,18 @@ const zDimension = z.object({
8154
8293
  'dimension',
8155
8294
  'rowDimension',
8156
8295
  'columnDimension'
8157
- ]).default('dimension')
8296
+ ]).default('dimension'),
8297
+ encoding: z["enum"]([
8298
+ 'xAxis',
8299
+ 'yAxis',
8300
+ 'angle',
8301
+ 'color',
8302
+ 'detail',
8303
+ 'tooltip',
8304
+ 'label',
8305
+ 'row',
8306
+ 'column'
8307
+ ]).optional()
8158
8308
  });
8159
8309
  const zDimensionGroup = z.object({
8160
8310
  id: z.string(),