@visactor/vseed 0.1.2 → 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 (58) hide show
  1. package/dist/builder/builder/builder.d.ts +6 -28
  2. package/dist/dataReshape/dataReshapeByEncoding.d.ts +1 -0
  3. package/dist/dataReshape/foldMeasures.d.ts +6 -5
  4. package/dist/index.cjs +844 -609
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +857 -619
  7. package/dist/index.js.map +1 -1
  8. package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
  9. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -3
  10. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
  11. package/dist/pipeline/advanced/chart/pipes/{init/autoMeasures.d.ts → measures/buildMeasures.d.ts} +1 -1
  12. package/dist/pipeline/advanced/chart/pipes/measures/buildMeasuresForDualAxis.d.ts +2 -0
  13. package/dist/pipeline/advanced/chart/pipes/measures/buildMeasuresForScatter.d.ts +2 -0
  14. package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +4 -0
  15. package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +28 -0
  16. package/dist/pipeline/spec/chart/pipes/color/colorAdapter.d.ts +2 -1
  17. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +2 -1
  18. package/dist/pipeline/spec/chart/pipes/color/linearColorForDualAxis.d.ts +2 -0
  19. package/dist/pipeline/utils/chatType.d.ts +1 -1
  20. package/dist/types/advancedVSeed.d.ts +24 -14
  21. package/dist/types/chartType/area/zArea.d.ts +24 -0
  22. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +24 -0
  23. package/dist/types/chartType/bar/zBar.d.ts +24 -0
  24. package/dist/types/chartType/barParallel/zBarParallel.d.ts +24 -0
  25. package/dist/types/chartType/barPercent/zBarPercent.d.ts +24 -0
  26. package/dist/types/chartType/column/zColumn.d.ts +24 -0
  27. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +24 -0
  28. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +24 -0
  29. package/dist/types/chartType/donut/zDonut.d.ts +24 -0
  30. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +76 -0
  31. package/dist/types/chartType/funnel/zFunnel.d.ts +24 -0
  32. package/dist/types/chartType/heatmap/zHeatmap.d.ts +24 -0
  33. package/dist/types/chartType/line/line.d.ts +0 -1
  34. package/dist/types/chartType/line/zLine.d.ts +24 -0
  35. package/dist/types/chartType/pie/zPie.d.ts +24 -0
  36. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +24 -0
  37. package/dist/types/chartType/radar/zRadar.d.ts +24 -0
  38. package/dist/types/chartType/rose/zRose.d.ts +24 -0
  39. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +24 -0
  40. package/dist/types/chartType/scatter/zScatter.d.ts +76 -0
  41. package/dist/types/chartType/table/zTable.d.ts +24 -0
  42. package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
  43. package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
  44. package/dist/types/properties/encoding/encoding.d.ts +0 -1
  45. package/dist/types/properties/encoding/index.d.ts +2 -2
  46. package/dist/types/properties/encoding/zEncoding.d.ts +0 -14
  47. package/dist/types/properties/measures/dualMeasures.d.ts +1 -0
  48. package/dist/types/properties/measures/measures.d.ts +19 -0
  49. package/dist/types/properties/measures/scatterMeasures.d.ts +1 -0
  50. package/dist/types/properties/measures/zDualMeasures.d.ts +104 -0
  51. package/dist/types/properties/measures/zMeasures.d.ts +39 -0
  52. package/dist/types/properties/measures/zScatterMeasures.d.ts +104 -0
  53. package/dist/types/zVseed.d.ts +584 -0
  54. package/dist/umd/index.js +858 -607
  55. package/dist/umd/index.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/pipeline/advanced/chart/pipes/init/autoDualMeasures.d.ts +0 -2
  58. package/dist/pipeline/advanced/chart/pipes/init/autoScatterMeasures.d.ts +0 -2
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,138 @@ 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
+ };
1090
+ const getBasicMeasures = (vseed)=>{
1091
+ const { dataset, measures } = vseed;
1092
+ if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1093
+ return measures;
1094
+ };
1095
+ const generateMeasuresByDataset = (dataset)=>{
1096
+ if (!dataset) throw new Error('dataset is required');
1097
+ if (0 === dataset.length) return [];
1098
+ const top100dataset = dataset.slice(0, 100);
1099
+ const sample = top100dataset.reduce((prev, cur)=>({
1100
+ ...prev,
1101
+ ...cur
1102
+ }), {});
1103
+ const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1104
+ '',
1105
+ null,
1106
+ void 0
1107
+ ].includes(key)).map((measure)=>({
1108
+ id: measure,
1109
+ alias: measure
1110
+ }));
1111
+ return basicMeasures;
1112
+ };
1113
+ const isMeasureTreeWithChildren = (vseed)=>{
1114
+ const { measures } = vseed;
1115
+ if (!measures) return false;
1116
+ return measures.some((measure)=>'children' in measure);
1117
+ };
1118
+ const isMeasureTreeWithParentId = (vseed)=>{
1119
+ const { measures } = vseed;
1120
+ if (!measures) return false;
1121
+ return measures.some((measure)=>'parentId' in measure);
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
+ };
1039
1171
  const measureDepth = (measures = [])=>{
1040
1172
  if (!measures) return 0;
1041
1173
  let depth = 1;
@@ -1054,23 +1186,26 @@ const isVTable = (vseed)=>[
1054
1186
  const isVChart = (vseed)=>!isVTable(vseed);
1055
1187
  const isPivotChart = (vseed)=>{
1056
1188
  if (isVTable(vseed)) return false;
1189
+ if (isMeasureTreeWithParentId(vseed)) {
1190
+ const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1191
+ return parentIds && unique(parentIds).length > 1;
1192
+ }
1057
1193
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1058
1194
  const { dimensions = [] } = vseed;
1059
1195
  const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1060
1196
  if (hasRowOrColumnDimension) return true;
1061
1197
  if ('scatter' === vseed.chartType) {
1062
- if (vseed.measures) {
1198
+ if (isMeasureTreeWithChildren(vseed)) {
1063
1199
  const depth = measureDepth(vseed.measures);
1064
- if (3 === depth) return true;
1065
- return false;
1200
+ return 3 === depth;
1066
1201
  }
1067
1202
  if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
1203
+ return false;
1068
1204
  }
1069
1205
  if ('dualAxis' === vseed.chartType) {
1070
- if (vseed.measures) {
1206
+ if (isMeasureTreeWithChildren(vseed)) {
1071
1207
  const depth = measureDepth(vseed.measures);
1072
- if (3 === depth) return true;
1073
- return false;
1208
+ return 3 === depth;
1074
1209
  }
1075
1210
  if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1076
1211
  }
@@ -1081,93 +1216,49 @@ const isPivotChart = (vseed)=>{
1081
1216
  const hasMeasureGroup = measures && measures.some((measure)=>measure && measure.children);
1082
1217
  return hasRowOrColumnDimension || hasMeasureGroup;
1083
1218
  };
1084
- const autoMeasures_autoMeasures = (advancedVSeed, context)=>{
1085
- const result = {
1086
- ...advancedVSeed
1087
- };
1219
+ const buildMeasures = (advancedVSeed, context)=>{
1088
1220
  const { vseed } = context;
1089
- const { measures, dataset } = vseed;
1090
- if (!dataset) throw new Error('dataset is required');
1091
- if (0 === dataset.length) return result;
1092
- if (isPivotChart(vseed)) return autoMeasureGroup(advancedVSeed, context);
1093
- if (measures) {
1094
- result.measures = measures;
1095
- return result;
1221
+ if (isMeasureTreeWithChildren(vseed)) {
1222
+ advancedVSeed.measures = vseed.measures;
1223
+ return advancedVSeed;
1096
1224
  }
1097
- const top100dataset = dataset.slice(0, 100);
1098
- const sample = top100dataset.reduce((prev, cur)=>({
1099
- ...prev,
1100
- ...cur
1101
- }), {});
1102
- result.measures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1103
- '',
1104
- null,
1105
- void 0
1106
- ].includes(key)).map((measure)=>({
1107
- id: measure,
1108
- alias: measure
1109
- }));
1110
- return result;
1111
- };
1112
- const autoMeasureGroup = (advancedVSeed, context)=>{
1113
- const { vseed } = context;
1114
- const { measures } = vseed;
1115
- const hasMeasureGroup = measures?.some((measure)=>measure.children);
1116
- if (!measures) return advancedVSeed;
1117
- if (!hasMeasureGroup) {
1118
- const newMeasures = [
1119
- {
1120
- id: 'measureGroup',
1121
- alias: 'measureGroup',
1122
- children: measures
1123
- }
1124
- ];
1125
- return {
1126
- ...advancedVSeed,
1127
- measures: newMeasures
1128
- };
1225
+ if (isMeasureTreeWithParentId(vseed)) {
1226
+ advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1227
+ return advancedVSeed;
1129
1228
  }
1130
- let currentGroup = createEmptyMeasureGroup();
1131
- const measureGroups = [];
1132
- for (const measure of measures)if ('children' in measure) {
1133
- if (currentGroup.children?.length) {
1134
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1135
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1136
- measureGroups.push(currentGroup);
1137
- currentGroup = createEmptyMeasureGroup();
1138
- }
1139
- measureGroups.push(measure);
1140
- } else currentGroup.children?.push(measure);
1141
- if (currentGroup.children?.length) {
1142
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1143
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1144
- measureGroups.push(currentGroup);
1145
- currentGroup = createEmptyMeasureGroup();
1146
- }
1147
- advancedVSeed.measures = measureGroups;
1229
+ const basicMeasures = getBasicMeasures(vseed);
1230
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1231
+ else advancedVSeed.measures = basicMeasures;
1148
1232
  return advancedVSeed;
1149
1233
  };
1150
- const createEmptyMeasureGroup = ()=>({
1151
- id: '',
1152
- alias: '',
1153
- children: []
1234
+ const generateMeasuresByParentId = (measures)=>{
1235
+ const measureTree = [];
1236
+ measures.forEach((measure)=>{
1237
+ if (!measure.parentId) return;
1238
+ const parent = measureTree.find((item)=>item.id === measure.parentId);
1239
+ if (parent && 'children' in parent) {
1240
+ parent.children = parent.children || [];
1241
+ parent.children.push(measure);
1242
+ } else measureTree.push({
1243
+ id: measure.parentId,
1244
+ children: [
1245
+ measure
1246
+ ]
1247
+ });
1154
1248
  });
1155
- const ORIGINAL_DATA = '__OriginalData__';
1156
- const Separator = '-';
1157
- const FoldMeasureName = '__MeaName__';
1158
- const FoldMeasureId = '__MeaId__';
1159
- const FoldMeasureValue = '__MeaValue__';
1160
- const MeasureName = FoldMeasureName;
1161
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1162
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1163
- const FoldXMeasureValue = '__MeaXValue__';
1164
- const FoldYMeasureValue = '__MeaYValue__';
1165
- const XEncoding = '__Dim_X__';
1166
- const YEncoding = '__Dim_Y__';
1167
- const AngleEncoding = '__Dim_Angle__';
1168
- const DetailEncoding = '__Dim_Detail__';
1169
- const ColorEncoding = '__Dim_Color__';
1170
- const ColorIdEncoding = '__Dim_ColorId__';
1249
+ return measureTree;
1250
+ };
1251
+ const basicMeasuresToMeasureTree = (measures)=>{
1252
+ const id = measures.map((item)=>item.id).join('-');
1253
+ const alias = measures.map((item)=>item.alias || item.id).join('-');
1254
+ return [
1255
+ {
1256
+ id,
1257
+ alias,
1258
+ children: measures
1259
+ }
1260
+ ];
1261
+ };
1171
1262
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1172
1263
  const result = {
1173
1264
  ...advancedVSeed
@@ -1207,54 +1298,14 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1207
1298
  result.dimensions.push(MeaName);
1208
1299
  return result;
1209
1300
  };
1210
- const encodingForLine = (advancedVSeed, context)=>{
1211
- const { vseed } = context;
1212
- const { dimensions } = advancedVSeed;
1213
- if (!dimensions) return advancedVSeed;
1214
- const encoding = vseed.encoding;
1215
- if (encoding) {
1216
- const x = encoding.x || [
1217
- dimensions[0].id
1218
- ];
1219
- const color = encoding.color || [
1220
- (dimensions[1] || dimensions[0]).id
1221
- ];
1222
- const detail = encoding.detail || [];
1223
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1224
- return {
1225
- ...advancedVSeed,
1226
- encoding: {
1227
- ...encoding,
1228
- x,
1229
- color,
1230
- detail: mergedDetail
1231
- }
1232
- };
1233
- }
1234
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1235
- const mergedEncoding = {
1236
- x: dimensions.slice(0, 1).map((item)=>item.id),
1237
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1238
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1239
- tooltip: dimensions.map((item)=>item.id),
1240
- label: [],
1241
- row: [],
1242
- column: []
1243
- };
1244
- return {
1245
- ...advancedVSeed,
1246
- encoding: mergedEncoding
1247
- };
1248
- };
1249
1301
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1250
1302
  const { vseed } = context;
1251
1303
  const usePivotChart = isPivotChart(vseed);
1252
1304
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1253
1305
  return execPipeline(pipeline, context, advancedVSeed);
1254
1306
  };
1255
- const foldMeasures = (dataset, measures, encoding, options)=>{
1256
- const { measureId = FoldMeasureId, measureName = FoldMeasureName, measureValue = FoldMeasureValue } = options || {};
1257
- const colorMeasureId = encoding?.color?.length === 1 && measures.some((m)=>m.id === encoding?.color?.[0]) ? encoding?.color?.[0] : void 0;
1307
+ const foldMeasures = (dataset, measures, options)=>{
1308
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1258
1309
  const foldInfo = {
1259
1310
  measureId,
1260
1311
  measureName,
@@ -1353,11 +1404,12 @@ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1353
1404
  if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1354
1405
  };
1355
1406
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1356
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1357
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1407
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1408
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1358
1409
  measureId: foldMeasureId,
1359
1410
  measureName: foldMeasureName,
1360
- measureValue: foldMeasureValue
1411
+ measureValue: foldMeasureValue,
1412
+ colorMeasureId
1361
1413
  });
1362
1414
  const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1363
1415
  foldMeasureId,
@@ -1370,6 +1422,24 @@ const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)
1370
1422
  unfoldInfo
1371
1423
  };
1372
1424
  };
1425
+ const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
1426
+ const { advancedVSeed } = context;
1427
+ if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
1428
+ return ordinalPipe(spec, context);
1429
+ };
1430
+ const isLinearColor = (advancedVSeed)=>{
1431
+ const { encoding, measures } = advancedVSeed;
1432
+ const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
1433
+ const { color } = encoding;
1434
+ return color?.length === 1 && measureIdList.includes(color[0]);
1435
+ };
1436
+ const getColorMeasureId = (advancedVSeed)=>{
1437
+ if (isLinearColor(advancedVSeed)) {
1438
+ const { encoding } = advancedVSeed;
1439
+ const { color } = encoding;
1440
+ return color?.[0];
1441
+ }
1442
+ };
1373
1443
  const reshapeWithEncoding = (advancedVSeed, context)=>{
1374
1444
  const result = {
1375
1445
  ...advancedVSeed
@@ -1379,7 +1449,9 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1379
1449
  const { dimensions, measures, encoding } = advancedVSeed;
1380
1450
  if (!measures || !dimensions || !dataset || !encoding) return result;
1381
1451
  if (0 === measures.length) throw new Error('measures can not be empty');
1382
- 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, {
1453
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1454
+ });
1383
1455
  return {
1384
1456
  ...result,
1385
1457
  dataset: newDatasets,
@@ -1414,8 +1486,9 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1414
1486
  const measures = measureGroup.children;
1415
1487
  if (!measures) return;
1416
1488
  const groupId = measureGroup.id;
1417
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1418
- foldMeasureValue: `${FoldMeasureValue}${groupId}`
1489
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
1490
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1491
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1419
1492
  });
1420
1493
  const reshapeInfo = {
1421
1494
  id: groupId,
@@ -1622,9 +1695,9 @@ const annotation_annotation = (advancedVSeed, context)=>{
1622
1695
  };
1623
1696
  const lineAdvancedPipeline = [
1624
1697
  initAdvancedVSeed_initAdvancedVSeed,
1625
- autoMeasures_autoMeasures,
1626
- autoDimensions_autoDimensions,
1627
1698
  encodingForLine,
1699
+ buildMeasures,
1700
+ autoDimensions_autoDimensions,
1628
1701
  pivotAdapter([
1629
1702
  reshapeWithEncoding
1630
1703
  ], [
@@ -1637,17 +1710,6 @@ const lineAdvancedPipeline = [
1637
1710
  markStyle_markStyle,
1638
1711
  annotation_annotation
1639
1712
  ];
1640
- const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
1641
- const { advancedVSeed } = context;
1642
- if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
1643
- return ordinalPipe(spec, context);
1644
- };
1645
- const isLinearColor = (advancedVSeed)=>{
1646
- const { encoding, measures } = advancedVSeed;
1647
- const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
1648
- const { color } = encoding;
1649
- return color?.length === 1 && measureIdList.includes(color[0]);
1650
- };
1651
1713
  const initLine = (spec, context)=>{
1652
1714
  const result = {
1653
1715
  ...spec
@@ -2017,7 +2079,7 @@ const label_label = (spec, context)=>{
2017
2079
  const measure = findMeasureById(measures, id);
2018
2080
  if (!measure) return value;
2019
2081
  const { format = {}, autoFormat = true } = measure;
2020
- if (!isEmpty(format)) {
2082
+ if (!external_remeda_isEmpty(format)) {
2021
2083
  const formatter = createFormatter(format);
2022
2084
  return formatter(value);
2023
2085
  }
@@ -2071,7 +2133,7 @@ const tooltip_tooltip = (spec, context)=>{
2071
2133
  const measure = findMeasureById(measures, id);
2072
2134
  if (!measure) return String(value);
2073
2135
  const { format = {}, autoFormat = true } = measure;
2074
- if (!isEmpty(format)) {
2136
+ if (!external_remeda_isEmpty(format)) {
2075
2137
  const formatter = createFormatter(format);
2076
2138
  return formatter(value);
2077
2139
  }
@@ -2093,7 +2155,7 @@ const tooltip_tooltip = (spec, context)=>{
2093
2155
  const measure = findMeasureById(measures, id);
2094
2156
  if (!measure) return String(value);
2095
2157
  const { format = {}, autoFormat = true } = measure;
2096
- if (!isEmpty(format)) {
2158
+ if (!external_remeda_isEmpty(format)) {
2097
2159
  const formatter = createFormatter(format);
2098
2160
  return formatter(value);
2099
2161
  }
@@ -3436,51 +3498,58 @@ const registerLine = ()=>{
3436
3498
  };
3437
3499
  const encodingForColumn = (advancedVSeed, context)=>{
3438
3500
  const { vseed } = context;
3439
- const { dimensions } = advancedVSeed;
3440
- if (!dimensions) return advancedVSeed;
3441
- const encoding = vseed.encoding;
3442
- if (encoding) {
3443
- const x = encoding.x || [
3444
- dimensions[0].id
3445
- ];
3446
- const color = encoding.color || [
3447
- (dimensions[1] || dimensions[0]).id
3448
- ];
3449
- const detail = encoding.detail || [];
3450
- const mergedDetail = 0 === detail.length ? unique([
3451
- ...color,
3452
- ...detail
3453
- ]) : detail;
3454
- return {
3455
- ...advancedVSeed,
3456
- encoding: {
3457
- ...encoding,
3458
- x,
3459
- color,
3460
- detail: mergedDetail
3461
- }
3462
- };
3463
- }
3464
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3465
- const mergedEncoding = {
3466
- x: dimensions.slice(0, 1).map((item)=>item.id),
3467
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3468
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3469
- tooltip: dimensions.map((item)=>item.id),
3470
- label: [],
3471
- row: [],
3472
- column: []
3473
- };
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);
3474
3511
  return {
3475
3512
  ...advancedVSeed,
3476
- encoding: mergedEncoding
3513
+ encoding
3477
3514
  };
3478
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
+ };
3479
3548
  const columnAdvancedPipeline = [
3480
3549
  initAdvancedVSeed_initAdvancedVSeed,
3481
- autoMeasures_autoMeasures,
3482
- autoDimensions_autoDimensions,
3483
3550
  encodingForColumn,
3551
+ buildMeasures,
3552
+ autoDimensions_autoDimensions,
3484
3553
  pivotAdapter([
3485
3554
  reshapeWithEncoding
3486
3555
  ], [
@@ -3927,9 +3996,9 @@ const registerColumn = ()=>{
3927
3996
  };
3928
3997
  const columnParallelAdvancedPipeline = [
3929
3998
  initAdvancedVSeed_initAdvancedVSeed,
3930
- autoMeasures_autoMeasures,
3931
- autoDimensions_autoDimensions,
3932
3999
  encodingForColumn,
4000
+ buildMeasures,
4001
+ autoDimensions_autoDimensions,
3933
4002
  pivotAdapter([
3934
4003
  reshapeWithEncoding
3935
4004
  ], [
@@ -4024,9 +4093,9 @@ const registerColumnParallel = ()=>{
4024
4093
  };
4025
4094
  const columnPercentAdvancedPipeline = [
4026
4095
  initAdvancedVSeed_initAdvancedVSeed,
4027
- autoMeasures_autoMeasures,
4028
- autoDimensions_autoDimensions,
4029
4096
  encodingForColumn,
4097
+ buildMeasures,
4098
+ autoDimensions_autoDimensions,
4030
4099
  pivotAdapter([
4031
4100
  reshapeWithEncoding
4032
4101
  ], [
@@ -4105,46 +4174,53 @@ const registerColumnPercent = ()=>{
4105
4174
  };
4106
4175
  const encodingForBar = (advancedVSeed, context)=>{
4107
4176
  const { vseed } = context;
4108
- const { dimensions } = advancedVSeed;
4109
- if (!dimensions) return advancedVSeed;
4110
- const encoding = vseed.encoding;
4111
- if (encoding) {
4112
- const y = encoding.y || [
4113
- dimensions[0].id
4114
- ];
4115
- const color = encoding.color || [
4116
- (dimensions[1] || dimensions[0]).id
4117
- ];
4118
- const detail = encoding.detail || [];
4119
- const mergedDetail = 0 === detail.length ? unique([
4120
- ...color,
4121
- ...detail
4122
- ]) : detail;
4123
- return {
4124
- ...advancedVSeed,
4125
- encoding: {
4126
- ...encoding,
4127
- y,
4128
- color,
4129
- detail: mergedDetail
4130
- }
4131
- };
4132
- }
4133
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4134
- const mergedEncoding = {
4135
- y: dimensions.slice(0, 1).map((item)=>item.id),
4136
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4137
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4138
- tooltip: dimensions.map((item)=>item.id),
4139
- label: [],
4140
- row: [],
4141
- column: []
4142
- };
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);
4143
4187
  return {
4144
4188
  ...advancedVSeed,
4145
- encoding: mergedEncoding
4189
+ encoding
4146
4190
  };
4147
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
+ };
4148
4224
  const sortYBandAxis = (advancedVSeed, context)=>{
4149
4225
  const result = {
4150
4226
  ...advancedVSeed
@@ -4163,9 +4239,9 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4163
4239
  };
4164
4240
  const barAdvancedPipeline = [
4165
4241
  initAdvancedVSeed_initAdvancedVSeed,
4166
- autoMeasures_autoMeasures,
4167
- autoDimensions_autoDimensions,
4168
4242
  encodingForBar,
4243
+ buildMeasures,
4244
+ autoDimensions_autoDimensions,
4169
4245
  pivotAdapter([
4170
4246
  reshapeWithEncoding
4171
4247
  ], [
@@ -4516,7 +4592,7 @@ const registerBar = ()=>{
4516
4592
  };
4517
4593
  const barParallelAdvancedPipeline = [
4518
4594
  initAdvancedVSeed_initAdvancedVSeed,
4519
- autoMeasures_autoMeasures,
4595
+ buildMeasures,
4520
4596
  autoDimensions_autoDimensions,
4521
4597
  encodingForBar,
4522
4598
  pivotAdapter([
@@ -4612,7 +4688,7 @@ const registerBarParallel = ()=>{
4612
4688
  };
4613
4689
  const barPercentAdvancedPipeline = [
4614
4690
  initAdvancedVSeed_initAdvancedVSeed,
4615
- autoMeasures_autoMeasures,
4691
+ buildMeasures,
4616
4692
  autoDimensions_autoDimensions,
4617
4693
  encodingForBar,
4618
4694
  pivotAdapter([
@@ -4683,9 +4759,9 @@ const registerBarPercent = ()=>{
4683
4759
  };
4684
4760
  const areaAdvancedPipeline = [
4685
4761
  initAdvancedVSeed_initAdvancedVSeed,
4686
- autoMeasures_autoMeasures,
4687
- autoDimensions_autoDimensions,
4688
4762
  encodingForColumn,
4763
+ buildMeasures,
4764
+ autoDimensions_autoDimensions,
4689
4765
  pivotAdapter([
4690
4766
  reshapeWithEncoding
4691
4767
  ], [
@@ -4841,9 +4917,9 @@ const registerArea = ()=>{
4841
4917
  };
4842
4918
  const areaPercentAdvancedPipeline = [
4843
4919
  initAdvancedVSeed_initAdvancedVSeed,
4844
- autoMeasures_autoMeasures,
4845
- autoDimensions_autoDimensions,
4846
4920
  encodingForColumn,
4921
+ buildMeasures,
4922
+ autoDimensions_autoDimensions,
4847
4923
  pivotAdapter([
4848
4924
  reshapeWithEncoding
4849
4925
  ], [
@@ -4917,131 +4993,148 @@ const registerAreaPercent = ()=>{
4917
4993
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
4918
4994
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
4919
4995
  };
4920
- const autoScatterMeasures = (advancedVSeed, context)=>{
4921
- const result = {
4922
- ...advancedVSeed
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
4923
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
+ };
5039
+ const buildMeasuresForScatter = (advancedVSeed, context)=>{
4924
5040
  const { vseed } = context;
4925
- const { dataset, scatterMeasures, measures } = vseed;
4926
- if (!dataset) throw new Error('dataset is required');
4927
- if (0 === dataset.length) return result;
4928
- if (scatterMeasures) {
4929
- result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
4930
- return result;
5041
+ if (isMeasureTreeWithChildren(vseed)) {
5042
+ advancedVSeed.measures = vseed.measures;
5043
+ return advancedVSeed;
4931
5044
  }
4932
- if (measures && measureDepth(measures) > 1) {
4933
- result.measures = measures;
4934
- return result;
5045
+ if (isMeasureTreeWithParentId(vseed)) {
5046
+ advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5047
+ return advancedVSeed;
4935
5048
  }
4936
- const top100dataset = dataset.slice(0, 100);
4937
- const sample = top100dataset.reduce((prev, cur)=>({
4938
- ...prev,
4939
- ...cur
4940
- }), {});
4941
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
4942
- '',
4943
- null,
4944
- void 0
4945
- ].includes(key)).map((measure)=>({
4946
- id: measure,
4947
- alias: measure
4948
- }));
4949
- if (0 === newMeasures.length) result.measures = [];
4950
- else if (1 === newMeasures.length) result.measures = [
4951
- {
4952
- id: 'primary',
4953
- alias: 'primary',
4954
- children: newMeasures
4955
- }
4956
- ];
4957
- else if (newMeasures.length > 1) result.measures = [
4958
- {
4959
- id: 'primary',
4960
- alias: 'primary',
4961
- children: newMeasures.slice(0, 1)
4962
- },
5049
+ const basicMeasures = getBasicMeasures(vseed);
5050
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5051
+ advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5052
+ return advancedVSeed;
5053
+ };
5054
+ const basicMeasuresToScatterMeasures = (basicMeasures)=>{
5055
+ const yMeasures = [];
5056
+ const xMeasures = [];
5057
+ for(let index = 0; index < basicMeasures.length; index++){
5058
+ const item = basicMeasures[index];
5059
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5060
+ item.encoding
5061
+ ];
5062
+ const isYAxis = encoding.includes('yAxis');
5063
+ const isXAxis = encoding.includes('xAxis');
5064
+ if (isYAxis) yMeasures.push(item);
5065
+ else if (isXAxis) xMeasures.push(item);
5066
+ else if (0 === index) yMeasures.push(item);
5067
+ else xMeasures.push(item);
5068
+ }
5069
+ return [
4963
5070
  {
4964
- id: 'secondary',
4965
- alias: 'secondary',
4966
- children: newMeasures.slice(1)
5071
+ id: 'scatterMeasures',
5072
+ xMeasures,
5073
+ yMeasures
4967
5074
  }
4968
5075
  ];
4969
- return result;
4970
5076
  };
4971
5077
  const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
4972
5078
  const measureTree = scatterMeasures.map((item, index)=>{
4973
- const { xMeasures, yMeasures } = item;
5079
+ const { id, xMeasures, yMeasures } = item;
4974
5080
  const groupChildren = [];
4975
- let id = '';
5081
+ let groupId = `${id}-`;
4976
5082
  if (xMeasures) {
4977
- const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
5083
+ const arrPrimaryMeasures = Array.isArray(xMeasures) ? xMeasures : [
4978
5084
  xMeasures
4979
5085
  ];
4980
- const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
4981
- id += alias;
5086
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5087
+ groupId += alias;
4982
5088
  groupChildren.push({
4983
5089
  id: `${index}-x`,
4984
- alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
4985
- children: arrXMeasures
5090
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5091
+ children: arrPrimaryMeasures
4986
5092
  });
4987
5093
  }
4988
5094
  if (yMeasures) {
4989
- const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
5095
+ const arrSecondaryMeasures = Array.isArray(yMeasures) ? yMeasures : [
4990
5096
  yMeasures
4991
5097
  ];
4992
- const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
4993
- id += alias;
5098
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5099
+ groupId += alias;
4994
5100
  groupChildren.push({
4995
5101
  id: `${index}-y`,
4996
- alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
4997
- children: arrYMeasures
5102
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5103
+ children: arrSecondaryMeasures
4998
5104
  });
4999
5105
  }
5000
5106
  return {
5001
- id,
5002
- alias: id,
5107
+ id: groupId,
5108
+ alias: groupId,
5003
5109
  children: groupChildren
5004
5110
  };
5005
5111
  });
5006
5112
  if (1 === scatterMeasures.length) return measureTree[0].children || [];
5007
5113
  return measureTree;
5008
5114
  };
5009
- const encodingForScatter = (advancedVSeed, context)=>{
5010
- const { vseed } = context;
5011
- const { dimensions } = advancedVSeed;
5012
- if (!dimensions) return advancedVSeed;
5013
- const encoding = vseed.encoding;
5014
- if (encoding) {
5015
- const detail = encoding.detail || [];
5016
- const color = encoding.color || [
5017
- (dimensions[1] || dimensions[0]).id
5115
+ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5116
+ const scatterMeasures = [];
5117
+ measures.forEach((item)=>{
5118
+ if (!item.parentId) return;
5119
+ if (!scatterMeasures.find((d)=>d.id === item.parentId)) scatterMeasures.push({
5120
+ id: item.parentId,
5121
+ yMeasures: [],
5122
+ xMeasures: []
5123
+ });
5124
+ const scatterChart = scatterMeasures.find((d)=>d.id === item.parentId);
5125
+ if (!scatterChart || !Array.isArray(scatterChart.yMeasures) || !Array.isArray(scatterChart.xMeasures)) return;
5126
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5127
+ item.encoding
5018
5128
  ];
5019
- const mergedDetail = 0 === detail.length ? unique([
5020
- ...color,
5021
- ...detail
5022
- ]) : detail;
5023
- return {
5024
- ...advancedVSeed,
5025
- encoding: {
5026
- ...encoding,
5027
- color,
5028
- detail: mergedDetail
5029
- }
5030
- };
5031
- }
5032
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5033
- const mergedEncoding = {
5034
- color: dimensions.slice(0).map((item)=>item.id),
5035
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5036
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5037
- label: [],
5038
- row: [],
5039
- column: []
5040
- };
5041
- return {
5042
- ...advancedVSeed,
5043
- encoding: mergedEncoding
5044
- };
5129
+ const isX = encoding.includes('xAxis');
5130
+ const isY = encoding.includes('yAxis');
5131
+ const isEmpty = !encoding.length;
5132
+ if (isY) scatterChart.yMeasures.push(item);
5133
+ else if (isX) scatterChart.xMeasures.push(item);
5134
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5135
+ else scatterChart.xMeasures.push(item);
5136
+ });
5137
+ return scatterMeasuresToMeasureTree(scatterMeasures);
5045
5138
  };
5046
5139
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5047
5140
  const result = {
@@ -5059,18 +5152,20 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5059
5152
  const xMeasures = measures[0];
5060
5153
  const yMeasures = measures[1] || xMeasures;
5061
5154
  if (xMeasures && xMeasures.children) {
5062
- 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, {
5063
5156
  foldMeasureValue: FoldXMeasureValue,
5064
- colorItemAsId: true
5157
+ colorItemAsId: true,
5158
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5065
5159
  });
5066
5160
  datasets.push(newDataset);
5067
5161
  foldInfoList.push(foldInfo);
5068
5162
  unfoldInfoList.push(unfoldInfo);
5069
5163
  }
5070
5164
  if (yMeasures && yMeasures.children) {
5071
- 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, {
5072
5166
  foldMeasureValue: FoldYMeasureValue,
5073
- colorItemAsId: true
5167
+ colorItemAsId: true,
5168
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5074
5169
  });
5075
5170
  datasets[0] = newDataset;
5076
5171
  foldInfoList.push(foldInfo);
@@ -5125,7 +5220,8 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5125
5220
  if (xMeasures && xMeasures.children) {
5126
5221
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5127
5222
  foldMeasureValue: `${FoldXMeasureValue}${index}`,
5128
- colorItemAsId: true
5223
+ colorItemAsId: true,
5224
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5129
5225
  });
5130
5226
  datasets.push(newDataset);
5131
5227
  foldInfoList.push(foldInfo);
@@ -5134,7 +5230,8 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5134
5230
  if (yMeasures && yMeasures.children) {
5135
5231
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
5136
5232
  foldMeasureValue: `${FoldYMeasureValue}${index}`,
5137
- colorItemAsId: true
5233
+ colorItemAsId: true,
5234
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5138
5235
  });
5139
5236
  datasets.push(newDataset);
5140
5237
  foldInfoList.push(foldInfo);
@@ -5169,9 +5266,9 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5169
5266
  };
5170
5267
  const scatterAdvancedPipeline = [
5171
5268
  initAdvancedVSeed_initAdvancedVSeed,
5172
- autoScatterMeasures,
5173
- autoDimensions_autoDimensions,
5174
5269
  encodingForScatter,
5270
+ buildMeasuresForScatter,
5271
+ autoDimensions_autoDimensions,
5175
5272
  pivotAdapter([
5176
5273
  reshapeWithScatterEncoding
5177
5274
  ], [
@@ -5316,68 +5413,104 @@ const registerScatter = ()=>{
5316
5413
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5317
5414
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5318
5415
  };
5319
- const autoDualMeasures = (advancedVSeed, context)=>{
5320
- const result = {
5321
- ...advancedVSeed
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
5322
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
+ };
5465
+ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5323
5466
  const { vseed } = context;
5324
- const { dataset, dualMeasures, measures } = vseed;
5325
- if (!dataset) throw new Error('dataset is required');
5326
- if (0 === dataset.length) return result;
5327
- if (dualMeasures) {
5328
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
5329
- return result;
5467
+ if (isMeasureTreeWithChildren(vseed)) {
5468
+ advancedVSeed.measures = vseed.measures;
5469
+ return advancedVSeed;
5330
5470
  }
5331
- if (measures && measureDepth(measures) > 1) {
5332
- result.measures = measures;
5333
- return result;
5471
+ if (isMeasureTreeWithParentId(vseed)) {
5472
+ advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5473
+ return advancedVSeed;
5334
5474
  }
5335
- const top100dataset = dataset.slice(0, 100);
5336
- const sample = top100dataset.reduce((prev, cur)=>({
5337
- ...prev,
5338
- ...cur
5339
- }), {});
5340
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5341
- '',
5342
- null,
5343
- void 0
5344
- ].includes(key)).map((measure)=>({
5345
- id: measure,
5346
- alias: measure
5347
- }));
5348
- if (0 === newMeasures.length) result.measures = [];
5349
- else if (1 === newMeasures.length) result.measures = [
5350
- {
5351
- id: 'primary',
5352
- alias: 'primary',
5353
- children: newMeasures
5354
- }
5355
- ];
5356
- else if (newMeasures.length > 1) result.measures = [
5357
- {
5358
- id: 'primary',
5359
- alias: 'primary',
5360
- children: newMeasures.slice(0, 1)
5361
- },
5475
+ const basicMeasures = getBasicMeasures(vseed);
5476
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5477
+ advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5478
+ return advancedVSeed;
5479
+ };
5480
+ const basicMeasuresToDualMeasures = (basicMeasures)=>{
5481
+ const primaryMeasures = [];
5482
+ const secondaryMeasures = [];
5483
+ for(let index = 0; index < basicMeasures.length; index++){
5484
+ const item = basicMeasures[index];
5485
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5486
+ item.encoding
5487
+ ];
5488
+ const isPrimaryYAxis = encoding.includes('primaryYAxis');
5489
+ const isSecondaryYAxis = encoding.includes('secondaryYAxis');
5490
+ if (isPrimaryYAxis) primaryMeasures.push(item);
5491
+ else if (isSecondaryYAxis) secondaryMeasures.push(item);
5492
+ else if (0 === index) primaryMeasures.push(item);
5493
+ else secondaryMeasures.push(item);
5494
+ }
5495
+ return [
5362
5496
  {
5363
- id: 'secondary',
5364
- alias: 'secondary',
5365
- children: newMeasures.slice(1)
5497
+ id: 'dualMeasures',
5498
+ primaryMeasures,
5499
+ secondaryMeasures
5366
5500
  }
5367
5501
  ];
5368
- return result;
5369
5502
  };
5370
5503
  const dualMeasuresToMeasureTree = (dualMeasures)=>{
5371
5504
  const measureTree = dualMeasures.map((item, index)=>{
5372
- const { primaryMeasures, secondaryMeasures } = item;
5505
+ const { id, primaryMeasures, secondaryMeasures } = item;
5373
5506
  const groupChildren = [];
5374
- let id = '';
5507
+ let groupId = `${id}-`;
5375
5508
  if (primaryMeasures) {
5376
5509
  const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5377
5510
  primaryMeasures
5378
5511
  ];
5379
5512
  const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5380
- id += alias;
5513
+ groupId += alias;
5381
5514
  groupChildren.push({
5382
5515
  id: `${index}-primary`,
5383
5516
  alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5389,7 +5522,7 @@ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5389
5522
  secondaryMeasures
5390
5523
  ];
5391
5524
  const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5392
- id += alias;
5525
+ groupId += alias;
5393
5526
  groupChildren.push({
5394
5527
  id: `${index}-secondary`,
5395
5528
  alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5397,54 +5530,37 @@ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5397
5530
  });
5398
5531
  }
5399
5532
  return {
5400
- id,
5401
- alias: id,
5533
+ id: groupId,
5534
+ alias: groupId,
5402
5535
  children: groupChildren
5403
5536
  };
5404
5537
  });
5405
5538
  if (1 === dualMeasures.length) return measureTree[0].children || [];
5406
5539
  return measureTree;
5407
5540
  };
5408
- const encodingForDualAxis = (advancedVSeed, context)=>{
5409
- const { vseed } = context;
5410
- const { dimensions } = advancedVSeed;
5411
- if (!dimensions) return advancedVSeed;
5412
- const encoding = vseed.encoding;
5413
- if (encoding) {
5414
- const x = encoding.x || [
5415
- dimensions[0].id
5416
- ];
5417
- const color = encoding.color || [
5418
- (dimensions[1] || dimensions[0]).id
5541
+ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
5542
+ const dualMeasures = [];
5543
+ measures.forEach((item)=>{
5544
+ if (!item.parentId) return;
5545
+ if (!dualMeasures.find((d)=>d.id === item.parentId)) dualMeasures.push({
5546
+ id: item.parentId,
5547
+ primaryMeasures: [],
5548
+ secondaryMeasures: []
5549
+ });
5550
+ const dualChart = dualMeasures.find((d)=>d.id === item.parentId);
5551
+ if (!dualChart || !Array.isArray(dualChart.primaryMeasures) || !Array.isArray(dualChart.secondaryMeasures)) return;
5552
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5553
+ item.encoding
5419
5554
  ];
5420
- const detail = encoding.detail || [];
5421
- const mergedDetail = 0 === detail.length ? unique([
5422
- ...color,
5423
- ...detail
5424
- ]) : detail;
5425
- return {
5426
- ...advancedVSeed,
5427
- encoding: {
5428
- ...encoding,
5429
- x,
5430
- color,
5431
- detail: mergedDetail
5432
- }
5433
- };
5434
- }
5435
- const mergedEncoding = {
5436
- x: dimensions.slice(0, 1).map((item)=>item.id),
5437
- color: dimensions.slice(1).map((item)=>item.id),
5438
- detail: dimensions.slice(1).map((item)=>item.id),
5439
- tooltip: dimensions.map((item)=>item.id),
5440
- label: [],
5441
- row: [],
5442
- column: []
5443
- };
5444
- return {
5445
- ...advancedVSeed,
5446
- encoding: mergedEncoding
5447
- };
5555
+ const isPrimary = encoding.includes('primaryYAxis');
5556
+ const isSecondary = encoding.includes('secondaryYAxis');
5557
+ const isEmpty = !item.encoding;
5558
+ if (isPrimary) dualChart.primaryMeasures.push(item);
5559
+ else if (isSecondary) dualChart.secondaryMeasures.push(item);
5560
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5561
+ else dualChart.secondaryMeasures.push(item);
5562
+ });
5563
+ return dualMeasuresToMeasureTree(dualMeasures);
5448
5564
  };
5449
5565
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5450
5566
  const result = {
@@ -5463,7 +5579,8 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5463
5579
  const secondaryMeasures = measures[1] || [];
5464
5580
  if (primaryMeasures && primaryMeasures.children) {
5465
5581
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5466
- foldMeasureValue: FoldPrimaryMeasureValue
5582
+ foldMeasureValue: FoldPrimaryMeasureValue,
5583
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5467
5584
  });
5468
5585
  datasets.push(newDataset);
5469
5586
  foldInfoList.push(foldInfo);
@@ -5471,7 +5588,8 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5471
5588
  }
5472
5589
  if (secondaryMeasures && secondaryMeasures.children) {
5473
5590
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5474
- foldMeasureValue: FoldSecondaryMeasureValue
5591
+ foldMeasureValue: FoldSecondaryMeasureValue,
5592
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5475
5593
  });
5476
5594
  datasets.push(newDataset);
5477
5595
  foldInfoList.push(foldInfo);
@@ -5525,7 +5643,8 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5525
5643
  const secondaryMeasures = measures[1] || [];
5526
5644
  if (primaryMeasures && primaryMeasures.children) {
5527
5645
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5528
- foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
5646
+ foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
5647
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5529
5648
  });
5530
5649
  datasets.push(newDataset);
5531
5650
  foldInfoList.push(foldInfo);
@@ -5533,7 +5652,8 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5533
5652
  }
5534
5653
  if (secondaryMeasures && secondaryMeasures.children) {
5535
5654
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5536
- foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
5655
+ foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`,
5656
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5537
5657
  });
5538
5658
  datasets.push(newDataset);
5539
5659
  foldInfoList.push(foldInfo);
@@ -5591,9 +5711,9 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5591
5711
  };
5592
5712
  const dualAxisAdvancedPipeline = [
5593
5713
  initAdvancedVSeed_initAdvancedVSeed,
5594
- autoDualMeasures,
5595
- autoDimensions_autoDimensions,
5596
5714
  encodingForDualAxis,
5715
+ buildMeasuresForDualAxis,
5716
+ autoDimensions_autoDimensions,
5597
5717
  pivotAdapter([
5598
5718
  reshapeWithDualEncoding
5599
5719
  ], [
@@ -5678,7 +5798,7 @@ const initDualAxisSecondary = (spec, context)=>{
5678
5798
  result.direction = 'vertical';
5679
5799
  result.xField = unfoldInfo.encodingX;
5680
5800
  if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5681
- result.seriesField = unfoldInfo.encodingColorId;
5801
+ result.seriesField = isLinearColor(advancedVSeed) ? unfoldInfo.encodingDetail : unfoldInfo.encodingColorId;
5682
5802
  result.animation = true;
5683
5803
  return result;
5684
5804
  };
@@ -5896,7 +6016,7 @@ const labelPrimary = (spec, context)=>{
5896
6016
  const measure = findMeasureById(measures, id);
5897
6017
  if (!measure) return value;
5898
6018
  const { format = {}, autoFormat = true } = measure;
5899
- if (!isEmpty(format)) {
6019
+ if (!external_remeda_isEmpty(format)) {
5900
6020
  const formatter = createFormatter(format);
5901
6021
  return formatter(value);
5902
6022
  }
@@ -5932,7 +6052,7 @@ const labelSecondary = (spec, context)=>{
5932
6052
  const measure = findMeasureById(measures, id);
5933
6053
  if (!measure) return value;
5934
6054
  const { format = {}, autoFormat = true } = measure;
5935
- if (!isEmpty(format)) {
6055
+ if (!external_remeda_isEmpty(format)) {
5936
6056
  const formatter = createFormatter(format);
5937
6057
  return formatter(value);
5938
6058
  }
@@ -5988,7 +6108,7 @@ const tooltipPrimary = (spec, context)=>{
5988
6108
  const measure = findMeasureById(measures, id);
5989
6109
  if (!measure) return String(value);
5990
6110
  const { format = {}, autoFormat = true } = measure;
5991
- if (!isEmpty(format)) {
6111
+ if (!external_remeda_isEmpty(format)) {
5992
6112
  const formatter = createFormatter(format);
5993
6113
  return formatter(value);
5994
6114
  }
@@ -6010,7 +6130,7 @@ const tooltipPrimary = (spec, context)=>{
6010
6130
  const measure = findMeasureById(measures, id);
6011
6131
  if (!measure) return String(value);
6012
6132
  const { format = {}, autoFormat = true } = measure;
6013
- if (!isEmpty(format)) {
6133
+ if (!external_remeda_isEmpty(format)) {
6014
6134
  const formatter = createFormatter(format);
6015
6135
  return formatter(value);
6016
6136
  }
@@ -6068,7 +6188,7 @@ const tooltipSecondary = (spec, context)=>{
6068
6188
  const measure = findMeasureById(measures, id);
6069
6189
  if (!measure) return String(value);
6070
6190
  const { format = {}, autoFormat = true } = measure;
6071
- if (!isEmpty(format)) {
6191
+ if (!external_remeda_isEmpty(format)) {
6072
6192
  const formatter = createFormatter(format);
6073
6193
  return formatter(value);
6074
6194
  }
@@ -6090,7 +6210,7 @@ const tooltipSecondary = (spec, context)=>{
6090
6210
  const measure = findMeasureById(measures, id);
6091
6211
  if (!measure) return String(value);
6092
6212
  const { format = {}, autoFormat = true } = measure;
6093
- if (!isEmpty(format)) {
6213
+ if (!external_remeda_isEmpty(format)) {
6094
6214
  const formatter = createFormatter(format);
6095
6215
  return formatter(value);
6096
6216
  }
@@ -6116,7 +6236,7 @@ const yLinearPrimary = (spec, context)=>{
6116
6236
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6117
6237
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6118
6238
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6119
- if (foldInfoList?.[0] && isEmpty(foldInfoList[0].foldMap)) return result;
6239
+ if (foldInfoList?.[0] && external_remeda_isEmpty(foldInfoList[0].foldMap)) return result;
6120
6240
  const id = `${reshapeInfoId}-primary-axis`;
6121
6241
  const seriesIds = [
6122
6242
  `${reshapeInfoId}-primary-series`,
@@ -6304,6 +6424,37 @@ const yLinearSecondary = (spec, context)=>{
6304
6424
  ];
6305
6425
  return result;
6306
6426
  };
6427
+ const linearColorForDualAxis = (spec, context)=>{
6428
+ const result = {
6429
+ ...spec
6430
+ };
6431
+ const { advancedVSeed } = context;
6432
+ const { datasetReshapeInfo, chartType } = advancedVSeed;
6433
+ const { unfoldInfo, id } = datasetReshapeInfo[0];
6434
+ const baseConfig = advancedVSeed.config[chartType];
6435
+ if (!baseConfig || !baseConfig.color) return result;
6436
+ const { color } = baseConfig;
6437
+ const { colorScheme, linearColorScheme } = color;
6438
+ result.color = {
6439
+ type: 'linear',
6440
+ range: linearColorScheme || colorScheme || [],
6441
+ domain: [
6442
+ {
6443
+ dataId: `${id}-primary-dataset`,
6444
+ fields: [
6445
+ unfoldInfo.encodingColor
6446
+ ]
6447
+ },
6448
+ {
6449
+ dataId: `${id}-secondary-dataset`,
6450
+ fields: [
6451
+ unfoldInfo.encodingColor
6452
+ ]
6453
+ }
6454
+ ]
6455
+ };
6456
+ return result;
6457
+ };
6307
6458
  const dualAxis = [
6308
6459
  seriesDualAxis([
6309
6460
  initDualAxisPrimary,
@@ -6312,11 +6463,11 @@ const dualAxis = [
6312
6463
  labelPrimary,
6313
6464
  tooltipPrimary,
6314
6465
  progressive,
6315
- barStyle_barStyle,
6316
- pointStyle_pointStyle,
6466
+ colorBarStyleFill(barStyle_barStyle),
6467
+ colorPointStyleFill(pointStyle_pointStyle),
6317
6468
  pointStateDimensionHover,
6318
- lineStyle_lineStyle,
6319
- areaStyle_areaStyle
6469
+ colorLineStyleFill(lineStyle_lineStyle),
6470
+ colorAreaStyleFill(areaStyle_areaStyle)
6320
6471
  ], [
6321
6472
  initDualAxisSecondary,
6322
6473
  dualChartTypeSecondary,
@@ -6324,18 +6475,18 @@ const dualAxis = [
6324
6475
  labelSecondary,
6325
6476
  tooltipSecondary,
6326
6477
  progressive,
6327
- barStyle_barStyle,
6328
- pointStyle_pointStyle,
6478
+ colorBarStyleFill(barStyle_barStyle),
6479
+ colorPointStyleFill(pointStyle_pointStyle),
6329
6480
  pointStateDimensionHover,
6330
- lineStyle_lineStyle,
6331
- areaStyle_areaStyle
6481
+ colorLineStyleFill(lineStyle_lineStyle),
6482
+ colorAreaStyleFill(areaStyle_areaStyle)
6332
6483
  ]),
6333
6484
  xBand,
6334
6485
  yLinearPrimary,
6335
6486
  yLinearSecondary,
6336
- color_color,
6487
+ colorAdapter(color_color, linearColorForDualAxis),
6488
+ colorAdapter(discreteLegend, colorLegend),
6337
6489
  background_backgroundColor,
6338
- discreteLegend,
6339
6490
  verticalCrosshairRect,
6340
6491
  annotationPoint_annotationPoint,
6341
6492
  annotationVerticalLine_annotationVerticalLine,
@@ -6355,11 +6506,11 @@ const pivotDualAxis = [
6355
6506
  labelPrimary,
6356
6507
  tooltipPrimary,
6357
6508
  progressive,
6358
- barStyle_barStyle,
6359
- pointStyle_pointStyle,
6509
+ colorBarStyleFill(barStyle_barStyle),
6510
+ colorPointStyleFill(pointStyle_pointStyle),
6360
6511
  pointStateDimensionHover,
6361
- lineStyle_lineStyle,
6362
- areaStyle_areaStyle
6512
+ colorLineStyleFill(lineStyle_lineStyle),
6513
+ colorAreaStyleFill(areaStyle_areaStyle)
6363
6514
  ], [
6364
6515
  initDualAxisSecondary,
6365
6516
  dualChartTypeSecondary,
@@ -6367,16 +6518,16 @@ const pivotDualAxis = [
6367
6518
  labelSecondary,
6368
6519
  tooltipSecondary,
6369
6520
  progressive,
6370
- barStyle_barStyle,
6371
- pointStyle_pointStyle,
6521
+ colorBarStyleFill(barStyle_barStyle),
6522
+ colorPointStyleFill(pointStyle_pointStyle),
6372
6523
  pointStateDimensionHover,
6373
- lineStyle_lineStyle,
6374
- areaStyle_areaStyle
6524
+ colorLineStyleFill(lineStyle_lineStyle),
6525
+ colorAreaStyleFill(areaStyle_areaStyle)
6375
6526
  ]),
6376
6527
  xBand,
6377
6528
  yLinearPrimary,
6378
6529
  yLinearSecondary,
6379
- color_color,
6530
+ colorAdapter(color_color, linearColor),
6380
6531
  background_backgroundColor,
6381
6532
  verticalCrosshairRect,
6382
6533
  annotationPoint_annotationPoint,
@@ -6386,7 +6537,7 @@ const pivotDualAxis = [
6386
6537
  ]),
6387
6538
  pivotRowDimensions,
6388
6539
  pivotColumnDimensions,
6389
- pivotDiscreteLegend
6540
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
6390
6541
  ];
6391
6542
  const dualAxisSpecPipeline = [
6392
6543
  pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
@@ -6397,33 +6548,51 @@ const registerDualAxis = ()=>{
6397
6548
  };
6398
6549
  const encodingForPie = (advancedVSeed, context)=>{
6399
6550
  const { vseed } = context;
6400
- const { dimensions } = advancedVSeed;
6401
- if (!dimensions) return advancedVSeed;
6402
- const encoding = vseed.encoding;
6403
- if (encoding) return {
6404
- ...advancedVSeed,
6405
- encoding: {
6406
- ...encoding
6407
- }
6408
- };
6409
- const mergedEncoding = {
6410
- color: dimensions.slice(0).map((item)=>item.id),
6411
- detail: dimensions.slice(0).map((item)=>item.id),
6412
- tooltip: dimensions.map((item)=>item.id),
6413
- label: [],
6414
- row: [],
6415
- column: []
6416
- };
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);
6417
6561
  return {
6418
6562
  ...advancedVSeed,
6419
- encoding: mergedEncoding
6420
- };
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);
6421
6590
  };
6422
6591
  const pieAdvancedPipeline = [
6423
6592
  initAdvancedVSeed_initAdvancedVSeed,
6424
- autoMeasures_autoMeasures,
6425
- autoDimensions_autoDimensions,
6426
6593
  encodingForPie,
6594
+ buildMeasures,
6595
+ autoDimensions_autoDimensions,
6427
6596
  pivotAdapter([
6428
6597
  reshapeWithEncoding
6429
6598
  ], [
@@ -6512,7 +6681,7 @@ const registerPie = ()=>{
6512
6681
  };
6513
6682
  const donutAdvancedPipeline = [
6514
6683
  initAdvancedVSeed_initAdvancedVSeed,
6515
- autoMeasures_autoMeasures,
6684
+ buildMeasures,
6516
6685
  autoDimensions_autoDimensions,
6517
6686
  encodingForPie,
6518
6687
  pivotAdapter([
@@ -6602,51 +6771,57 @@ const registerDonut = ()=>{
6602
6771
  };
6603
6772
  const encodingForRose = (advancedVSeed, context)=>{
6604
6773
  const { vseed } = context;
6605
- const { dimensions } = advancedVSeed;
6606
- if (!dimensions) return advancedVSeed;
6607
- const encoding = vseed.encoding;
6608
- if (encoding) {
6609
- const angle = encoding.angle || [
6610
- dimensions[0].id
6611
- ];
6612
- const color = encoding.color || [
6613
- (dimensions[1] || dimensions[0]).id
6614
- ];
6615
- const detail = encoding.detail || [];
6616
- const mergedDetail = 0 === detail.length ? unique([
6617
- ...color,
6618
- ...detail
6619
- ]) : detail;
6620
- return {
6621
- ...advancedVSeed,
6622
- encoding: {
6623
- ...encoding,
6624
- angle,
6625
- color,
6626
- detail: mergedDetail
6627
- }
6628
- };
6629
- }
6630
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6631
- const mergedEncoding = {
6632
- angle: dimensions.slice(0, 1).map((item)=>item.id),
6633
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6634
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6635
- tooltip: dimensions.map((item)=>item.id),
6636
- label: [],
6637
- row: [],
6638
- column: []
6639
- };
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);
6640
6784
  return {
6641
6785
  ...advancedVSeed,
6642
- encoding: mergedEncoding
6786
+ encoding
6643
6787
  };
6644
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
+ };
6645
6820
  const roseAdvancedPipeline = [
6646
6821
  initAdvancedVSeed_initAdvancedVSeed,
6647
- autoMeasures_autoMeasures,
6648
- autoDimensions_autoDimensions,
6649
6822
  encodingForRose,
6823
+ buildMeasures,
6824
+ autoDimensions_autoDimensions,
6650
6825
  pivotAdapter([
6651
6826
  reshapeWithEncoding
6652
6827
  ], [
@@ -6813,9 +6988,9 @@ const registerRose = ()=>{
6813
6988
  };
6814
6989
  const roseParallelAdvancedPipeline = [
6815
6990
  initAdvancedVSeed_initAdvancedVSeed,
6816
- autoMeasures_autoMeasures,
6817
- autoDimensions_autoDimensions,
6818
6991
  encodingForRose,
6992
+ buildMeasures,
6993
+ autoDimensions_autoDimensions,
6819
6994
  pivotAdapter([
6820
6995
  reshapeWithEncoding
6821
6996
  ], [
@@ -6921,50 +7096,57 @@ const registerRoseParallel = ()=>{
6921
7096
  };
6922
7097
  const encodingForRadar = (advancedVSeed, context)=>{
6923
7098
  const { vseed } = context;
6924
- const { dimensions } = advancedVSeed;
6925
- if (!dimensions) return advancedVSeed;
6926
- const encoding = vseed.encoding;
6927
- if (encoding) {
6928
- const angle = encoding.angle || [
6929
- dimensions[0].id
6930
- ];
6931
- const color = encoding.color || [
6932
- (dimensions[1] || dimensions[0]).id
6933
- ];
6934
- const detail = encoding.detail || [];
6935
- const mergedDetail = 0 === detail.length ? unique([
6936
- ...color,
6937
- ...detail
6938
- ]) : detail;
6939
- return {
6940
- ...advancedVSeed,
6941
- encoding: {
6942
- ...encoding,
6943
- angle,
6944
- color,
6945
- detail: mergedDetail
6946
- }
6947
- };
6948
- }
6949
- const mergedEncoding = {
6950
- angle: dimensions.slice(0, 1).map((item)=>item.id),
6951
- color: dimensions.slice(1).map((item)=>item.id),
6952
- detail: dimensions.slice(1).map((item)=>item.id),
6953
- tooltip: dimensions.map((item)=>item.id),
6954
- label: [],
6955
- row: [],
6956
- column: []
6957
- };
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);
6958
7109
  return {
6959
7110
  ...advancedVSeed,
6960
- encoding: mergedEncoding
7111
+ encoding
6961
7112
  };
6962
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
+ };
6963
7145
  const radarAdvancedPipeline = [
6964
7146
  initAdvancedVSeed_initAdvancedVSeed,
6965
- autoMeasures_autoMeasures,
6966
- autoDimensions_autoDimensions,
6967
7147
  encodingForRadar,
7148
+ buildMeasures,
7149
+ autoDimensions_autoDimensions,
6968
7150
  pivotAdapter([
6969
7151
  reshapeWithEncoding
6970
7152
  ], [
@@ -7100,33 +7282,51 @@ const registerRadar = ()=>{
7100
7282
  };
7101
7283
  const encodingForFunnel = (advancedVSeed, context)=>{
7102
7284
  const { vseed } = context;
7103
- const { dimensions } = advancedVSeed;
7104
- if (!dimensions) return advancedVSeed;
7105
- const encoding = vseed.encoding;
7106
- if (encoding) return {
7107
- ...advancedVSeed,
7108
- encoding: {
7109
- ...encoding
7110
- }
7111
- };
7112
- const mergedEncoding = {
7113
- color: dimensions.slice(0).map((item)=>item.id),
7114
- detail: dimensions.slice(0).map((item)=>item.id),
7115
- tooltip: dimensions.map((item)=>item.id),
7116
- label: [],
7117
- row: [],
7118
- column: []
7119
- };
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);
7120
7295
  return {
7121
7296
  ...advancedVSeed,
7122
- encoding: mergedEncoding
7123
- };
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);
7124
7324
  };
7125
7325
  const funnelAdvancedPipeline = [
7126
7326
  initAdvancedVSeed_initAdvancedVSeed,
7127
- autoMeasures_autoMeasures,
7128
- autoDimensions_autoDimensions,
7129
7327
  encodingForFunnel,
7328
+ buildMeasures,
7329
+ autoDimensions_autoDimensions,
7130
7330
  pivotAdapter([
7131
7331
  reshapeWithEncoding
7132
7332
  ], [
@@ -7219,45 +7419,61 @@ const registerFunnel = ()=>{
7219
7419
  };
7220
7420
  const encodingForHeatmap = (advancedVSeed, context)=>{
7221
7421
  const { vseed } = context;
7222
- const { dimensions } = advancedVSeed;
7223
- if (!dimensions) return advancedVSeed;
7224
- const encoding = vseed.encoding;
7225
- if (encoding) {
7226
- const x = encoding.x || [
7227
- dimensions[0].id
7228
- ];
7229
- const y = encoding.y || [
7230
- (dimensions[1] || dimensions[0]).id
7231
- ];
7232
- return {
7233
- ...advancedVSeed,
7234
- encoding: {
7235
- x,
7236
- y,
7237
- ...encoding
7238
- }
7239
- };
7240
- }
7241
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7242
- const mergedEncoding = {
7243
- x: dimensions.slice(0, 1).map((item)=>item.id),
7244
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7245
- color: dimensions.slice(0).map((item)=>item.id),
7246
- tooltip: dimensions.map((item)=>item.id),
7247
- label: [],
7248
- row: [],
7249
- column: []
7250
- };
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);
7251
7432
  return {
7252
7433
  ...advancedVSeed,
7253
- encoding: mergedEncoding
7434
+ encoding
7254
7435
  };
7255
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
+ };
7256
7472
  const heatmapAdvancedPipeline = [
7257
7473
  initAdvancedVSeed_initAdvancedVSeed,
7258
- autoMeasures_autoMeasures,
7259
- autoDimensions_autoDimensions,
7260
7474
  encodingForHeatmap,
7475
+ buildMeasures,
7476
+ autoDimensions_autoDimensions,
7261
7477
  pivotAdapter([
7262
7478
  reshapeWithEncoding
7263
7479
  ], [
@@ -8077,7 +8293,18 @@ const zDimension = z.object({
8077
8293
  'dimension',
8078
8294
  'rowDimension',
8079
8295
  'columnDimension'
8080
- ]).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()
8081
8308
  });
8082
8309
  const zDimensionGroup = z.object({
8083
8310
  id: z.string(),
@@ -8122,7 +8349,20 @@ const zMeasure = z.object({
8122
8349
  id: z.string(),
8123
8350
  alias: z.string().optional(),
8124
8351
  autoFormat: z.boolean().default(true),
8125
- format: zNumFormat["default"]({})
8352
+ format: zNumFormat["default"]({}),
8353
+ encoding: z["enum"]([
8354
+ 'primaryYAxis',
8355
+ 'secondaryYAxis',
8356
+ 'xAxis',
8357
+ 'yAxis',
8358
+ 'angle',
8359
+ 'radius',
8360
+ 'size',
8361
+ 'color',
8362
+ 'label',
8363
+ 'tooltip'
8364
+ ]).optional(),
8365
+ parentId: z.string().optional()
8126
8366
  });
8127
8367
  const zMeasureGroup = z.object({
8128
8368
  id: z.string(),
@@ -8184,7 +8424,6 @@ const zEncoding = z.object({
8184
8424
  column: z.array(z.string()).nullish(),
8185
8425
  group: z.array(z.string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
8186
8426
  });
8187
- const zEncodings = z.array(zEncoding);
8188
8427
  const zXBandAxis = z.object({
8189
8428
  visible: z.boolean().default(true).nullish(),
8190
8429
  labelAutoHide: z.boolean().default(true).nullish(),
@@ -9327,7 +9566,6 @@ const zAdvancedVSeed = z.object({
9327
9566
  dimensions: zDimensionTree,
9328
9567
  measures: zMeasureTree,
9329
9568
  encoding: zEncoding,
9330
- encodings: zEncodings,
9331
9569
  config: zConfig,
9332
9570
  analysis: zAnalysis,
9333
9571
  theme: zTheme,
@@ -9336,6 +9574,6 @@ const zAdvancedVSeed = z.object({
9336
9574
  annotation: zAnnotation,
9337
9575
  locale: zLocale
9338
9576
  });
9339
- export { AngleEncoding, Builder, ColorEncoding, ColorIdEncoding, DetailEncoding, FoldMeasureId, FoldMeasureName, FoldMeasureValue, FoldPrimaryMeasureValue, FoldSecondaryMeasureValue, FoldXMeasureValue, FoldYMeasureValue, MeasureName, ORIGINAL_DATA, Separator, 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, findFirstMeasure, findMeasureById, foldMeasures, funnelAdvancedPipeline, funnelSpecPipeline, heatmapAdvancedPipeline, heatmapSpecPipeline, i18n, intl, isDimensionSelector, 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 };
9577
+ export { AngleEncoding, Builder, ColorEncoding, ColorIdEncoding, DetailEncoding, FoldMeasureId, FoldMeasureName, FoldMeasureValue, FoldPrimaryMeasureValue, FoldSecondaryMeasureValue, FoldXMeasureValue, FoldYMeasureValue, MeasureName, ORIGINAL_DATA, Separator, 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, findFirstMeasure, findMeasureById, foldMeasures, funnelAdvancedPipeline, funnelSpecPipeline, heatmapAdvancedPipeline, heatmapSpecPipeline, i18n, intl, isDimensionSelector, 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, 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 };
9340
9578
 
9341
9579
  //# sourceMappingURL=index.js.map