@visactor/vseed 0.1.5 → 0.1.7

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 (84) hide show
  1. package/dist/builder/builder/builder.d.ts +2 -4
  2. package/dist/index.cjs +574 -498
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +574 -498
  5. package/dist/index.js.map +1 -1
  6. package/dist/pipeline/advanced/chart/pipes/{init/autoDimensions.d.ts → default/defaultDimensions.d.ts} +1 -1
  7. package/dist/pipeline/advanced/{table/pipes/init/autoMeasures.d.ts → chart/pipes/default/defaultMeasureName.d.ts} +1 -1
  8. package/dist/pipeline/advanced/chart/pipes/default/defaultMeasures.d.ts +5 -0
  9. package/dist/pipeline/advanced/chart/pipes/default/index.d.ts +3 -0
  10. package/dist/pipeline/advanced/chart/pipes/encoding/bar.d.ts +19 -0
  11. package/dist/pipeline/advanced/chart/pipes/encoding/column.d.ts +19 -0
  12. package/dist/pipeline/advanced/chart/pipes/encoding/dualAxis.d.ts +19 -0
  13. package/dist/pipeline/advanced/chart/pipes/encoding/funnel.d.ts +17 -0
  14. package/dist/pipeline/advanced/chart/pipes/encoding/heatmap.d.ts +19 -0
  15. package/dist/pipeline/advanced/chart/pipes/encoding/line.d.ts +18 -0
  16. package/dist/pipeline/advanced/chart/pipes/encoding/pie.d.ts +18 -0
  17. package/dist/pipeline/advanced/chart/pipes/encoding/radar.d.ts +19 -0
  18. package/dist/pipeline/advanced/chart/pipes/encoding/rose.d.ts +19 -0
  19. package/dist/pipeline/advanced/chart/pipes/encoding/scatter.d.ts +18 -0
  20. package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
  21. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +0 -2
  22. package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +3 -18
  23. package/dist/pipeline/advanced/table/pipes/{init/autoPivotMeasures.d.ts → default/defaultDimensions.d.ts} +1 -1
  24. package/dist/pipeline/advanced/table/pipes/default/defaultMeasureName.d.ts +2 -0
  25. package/dist/pipeline/advanced/table/pipes/default/defaultMeasures.d.ts +5 -0
  26. package/dist/pipeline/advanced/table/pipes/default/index.d.ts +3 -0
  27. package/dist/pipeline/advanced/table/pipes/encoding/index.d.ts +1 -0
  28. package/dist/pipeline/advanced/table/pipes/encoding/pivotTable.d.ts +2 -0
  29. package/dist/pipeline/advanced/table/pipes/index.d.ts +3 -0
  30. package/dist/pipeline/advanced/table/pipes/init/index.d.ts +0 -3
  31. package/dist/pipeline/advanced/table/pipes/reshape/index.d.ts +1 -0
  32. package/dist/pipeline/advanced/table/pipes/{init/autoDimensions.d.ts → reshape/reshapePivotTable.d.ts} +1 -1
  33. package/dist/types/advancedVSeed.d.ts +2 -5
  34. package/dist/types/chartType/area/area.d.ts +19 -3
  35. package/dist/types/chartType/area/zArea.d.ts +2 -5
  36. package/dist/types/chartType/areaPercent/areaPercent.d.ts +15 -1
  37. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +2 -5
  38. package/dist/types/chartType/bar/bar.d.ts +17 -1
  39. package/dist/types/chartType/bar/zBar.d.ts +2 -5
  40. package/dist/types/chartType/barParallel/barParallel.d.ts +17 -1
  41. package/dist/types/chartType/barParallel/zBarParallel.d.ts +2 -5
  42. package/dist/types/chartType/barPercent/barPercent.d.ts +17 -1
  43. package/dist/types/chartType/barPercent/zBarPercent.d.ts +2 -5
  44. package/dist/types/chartType/column/column.d.ts +17 -1
  45. package/dist/types/chartType/column/zColumn.d.ts +2 -5
  46. package/dist/types/chartType/columnParallel/columnParallel.d.ts +17 -1
  47. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +2 -5
  48. package/dist/types/chartType/columnPercent/columnPercent.d.ts +17 -1
  49. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +2 -5
  50. package/dist/types/chartType/donut/donut.d.ts +16 -1
  51. package/dist/types/chartType/donut/zDonut.d.ts +2 -5
  52. package/dist/types/chartType/dualAxis/dualAxis.d.ts +17 -1
  53. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +10 -5
  54. package/dist/types/chartType/funnel/funnel.d.ts +15 -1
  55. package/dist/types/chartType/funnel/zFunnel.d.ts +2 -5
  56. package/dist/types/chartType/heatmap/heatmap.d.ts +17 -1
  57. package/dist/types/chartType/heatmap/zHeatmap.d.ts +2 -5
  58. package/dist/types/chartType/line/line.d.ts +16 -4
  59. package/dist/types/chartType/line/zLine.d.ts +2 -5
  60. package/dist/types/chartType/pie/pie.d.ts +16 -1
  61. package/dist/types/chartType/pie/zPie.d.ts +2 -5
  62. package/dist/types/chartType/pivotTable/pivotTable.d.ts +10 -3
  63. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +2 -5
  64. package/dist/types/chartType/radar/radar.d.ts +17 -1
  65. package/dist/types/chartType/radar/zRadar.d.ts +2 -5
  66. package/dist/types/chartType/rose/rose.d.ts +17 -1
  67. package/dist/types/chartType/rose/zRose.d.ts +2 -5
  68. package/dist/types/chartType/roseParallel/roseParallel.d.ts +17 -1
  69. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +2 -5
  70. package/dist/types/chartType/scatter/scatter.d.ts +16 -1
  71. package/dist/types/chartType/scatter/zScatter.d.ts +10 -5
  72. package/dist/types/chartType/table/table.d.ts +2 -0
  73. package/dist/types/chartType/table/zTable.d.ts +2 -5
  74. package/dist/types/properties/dimensions/dimensions.d.ts +0 -4
  75. package/dist/types/properties/dimensions/zDimensions.d.ts +0 -15
  76. package/dist/types/properties/measures/measures.d.ts +3 -1
  77. package/dist/types/properties/measures/zDualMeasures.d.ts +16 -0
  78. package/dist/types/properties/measures/zMeasures.d.ts +6 -0
  79. package/dist/types/properties/measures/zScatterMeasures.d.ts +16 -0
  80. package/dist/types/zVseed.d.ts +56 -100
  81. package/dist/umd/index.js +606 -530
  82. package/dist/umd/index.js.map +1 -1
  83. package/package.json +2 -2
  84. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +0 -2
package/dist/index.js CHANGED
@@ -167,24 +167,24 @@ const initAdvancedVSeed = (advancedVSeed, context)=>{
167
167
  locale: locale || 'zh-CN'
168
168
  };
169
169
  };
170
- const autoMeasures = (advancedVSeed, context)=>{
171
- const result = {
172
- ...advancedVSeed
173
- };
170
+ const defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
174
171
  const { vseed } = context;
175
172
  const { measures, dataset } = vseed;
173
+ if (measures && measures.length > 0) return {
174
+ ...advancedVSeed,
175
+ measures
176
+ };
176
177
  if (!dataset) throw new Error('dataset is required');
177
- if (0 === dataset.length) return result;
178
- if (measures) {
179
- result.measures = measures;
180
- return result;
181
- }
178
+ if (0 === dataset.length) return {
179
+ ...advancedVSeed,
180
+ measures: []
181
+ };
182
182
  const top100dataset = dataset.slice(0, 100);
183
183
  const sample = top100dataset.reduce((prev, cur)=>({
184
184
  ...prev,
185
185
  ...cur
186
186
  }), {});
187
- result.measures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
187
+ const defaultMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
188
188
  '',
189
189
  null,
190
190
  void 0
@@ -192,7 +192,10 @@ const autoMeasures = (advancedVSeed, context)=>{
192
192
  id: measure,
193
193
  alias: measure
194
194
  }));
195
- return result;
195
+ return {
196
+ ...advancedVSeed,
197
+ measures: defaultMeasures
198
+ };
196
199
  };
197
200
  const preorderTraverse = (tree, callback)=>{
198
201
  if (!tree || 0 === tree.length) return;
@@ -246,37 +249,36 @@ const findAllMeasures = (measures = [])=>{
246
249
  });
247
250
  return result;
248
251
  };
249
- const autoDimensions = (advancedVSeed, context)=>{
252
+ const defaultDimensions = (advancedVSeed, context)=>{
250
253
  const result = {
251
254
  ...advancedVSeed
252
255
  };
253
256
  const { vseed } = context;
254
257
  const { dimensions, dataset } = vseed;
255
- const measures = findAllMeasures(advancedVSeed.measures);
258
+ if (dimensions && dimensions.length > 0) return {
259
+ ...result,
260
+ dimensions
261
+ };
256
262
  if (!dataset) throw new Error('dataset is required');
257
263
  if (0 === dataset.length) return result;
258
- if (dimensions) {
259
- result.dimensions = dimensions.map((dim)=>({
260
- location: 'dimension',
261
- ...dim
262
- }));
263
- return result;
264
- }
264
+ const measures = findAllMeasures(advancedVSeed.measures);
265
265
  const top100dataset = dataset.slice(0, 100);
266
266
  const sample = top100dataset.reduce((prev, cur)=>({
267
267
  ...prev,
268
268
  ...cur
269
269
  }), {});
270
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
270
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
271
271
  '',
272
272
  null,
273
273
  void 0
274
274
  ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
275
275
  id: dim,
276
- alias: dim,
277
- location: 'dimension'
276
+ alias: dim
278
277
  }));
279
- return result;
278
+ return {
279
+ ...result,
280
+ dimensions: newDimensions
281
+ };
280
282
  };
281
283
  const records_records = (advancedVSeed, context)=>{
282
284
  const { vseed } = context;
@@ -348,8 +350,8 @@ const mergeArray = (arr, themeItem)=>{
348
350
  };
349
351
  const tableAdvancedPipeline = [
350
352
  initAdvancedVSeed,
351
- autoMeasures,
352
- autoDimensions,
353
+ defaultMeasures_defaultMeasures,
354
+ defaultDimensions,
353
355
  records_records,
354
356
  tableConfig_tableConfig,
355
357
  theme_theme
@@ -570,9 +572,9 @@ const bodyStyle = (spec, context)=>{
570
572
  borderColor: borderColor,
571
573
  borderLineWidth: 1,
572
574
  padding: [
573
- 8.6,
575
+ 8,
574
576
  12,
575
- 8.6,
577
+ 8,
576
578
  12
577
579
  ],
578
580
  textAlign: 'right',
@@ -685,79 +687,156 @@ const registerTable = ()=>{
685
687
  Builder._advancedPipelineMap.table = tableAdvancedPipeline;
686
688
  Builder._specPipelineMap.table = tableSpecPipeline;
687
689
  };
688
- const autoPivotMeasures = (advancedVSeed, context)=>{
690
+ const ORIGINAL_DATA = '__OriginalData__';
691
+ const Separator = '-';
692
+ const FoldMeasureName = '__MeaName__';
693
+ const FoldMeasureId = '__MeaId__';
694
+ const FoldMeasureValue = '__MeaValue__';
695
+ const MeasureName = FoldMeasureName;
696
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
697
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
698
+ const FoldXMeasureValue = '__MeaXValue__';
699
+ const FoldYMeasureValue = '__MeaYValue__';
700
+ const XEncoding = '__Dim_X__';
701
+ const YEncoding = '__Dim_Y__';
702
+ const AngleEncoding = '__Dim_Angle__';
703
+ const DetailEncoding = '__Dim_Detail__';
704
+ const ColorEncoding = '__Dim_Color__';
705
+ const ColorIdEncoding = '__Dim_ColorId__';
706
+ const defaultMeasureName = (advancedVSeed)=>{
689
707
  const result = {
690
708
  ...advancedVSeed
691
709
  };
692
- const { vseed } = context;
693
- const { dataset } = vseed;
694
- const measures = findAllMeasures(vseed.measures);
695
- if (!dataset) throw new Error('dataset is required');
696
- if (0 === dataset.length) return result;
697
- if (vseed.measures) {
698
- result.measures = findAllMeasures(measures);
699
- return result;
700
- }
701
- const top100dataset = dataset.slice(0, 100);
702
- const sample = top100dataset.reduce((prev, cur)=>({
703
- ...prev,
704
- ...cur
705
- }), {});
706
- result.measures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
707
- '',
708
- null,
709
- void 0
710
- ].includes(key)).map((measure)=>({
711
- id: measure,
712
- alias: measure
713
- }));
710
+ const MeaName = {
711
+ id: MeasureName,
712
+ alias: intl.i18n`指标名称`
713
+ };
714
+ if (!result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push(MeaName);
714
715
  return result;
715
716
  };
716
- const findAllDimensions = (dimensions = [])=>{
717
- if (!dimensions) return [];
718
- const result = [];
719
- preorderTraverse(dimensions, (node)=>{
720
- if (!('children' in node)) result.push(node);
721
- return false;
717
+ const encodingForPivotTable = (advancedVSeed)=>{
718
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
719
+ const measures = findAllMeasures(vseedMeasures);
720
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
721
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
722
+ const encoding = {};
723
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
724
+ else generateDefaultDimensionEncoding(dimensions, encoding);
725
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
726
+ else generateDefaultMeasureEncoding(measures, encoding);
727
+ return {
728
+ ...advancedVSeed,
729
+ encoding
730
+ };
731
+ };
732
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
733
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
734
+ encoding.tooltip = uniqueDimIds;
735
+ encoding.row = [];
736
+ encoding.column = [];
737
+ uniqueDimIds.forEach((item, index)=>{
738
+ if (index % 2 === 0) encoding.column.push(item);
739
+ else encoding.row.push(item);
740
+ });
741
+ };
742
+ const generateDimensionEncoding = (dimensions, encoding)=>{
743
+ const uniqueDimIds = unique(dimensions.map((d)=>d.id));
744
+ encoding.tooltip = uniqueDimIds;
745
+ encoding.row = [];
746
+ encoding.column = [];
747
+ dimensions.forEach((dim, index)=>{
748
+ const id = dim.id;
749
+ if ('row' === dim.encoding) encoding.row.push(id);
750
+ else if ('column' === dim.encoding) encoding.column.push(id);
751
+ else if (index % 2 === 0) encoding.column.push(id);
752
+ else encoding.row.push(id);
722
753
  });
723
- return result;
724
754
  };
725
- const autoPivotDimensions = (advancedVSeed, context)=>{
755
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
756
+ encoding.tooltip = unique(measures.map((item)=>item.id));
757
+ encoding.detail = unique(measures.filter((item)=>'detail' === item.encoding || !item.encoding).map((item)=>item.id));
758
+ };
759
+ const generateMeasureEncoding = (measures, encoding)=>{
760
+ encoding.tooltip = measures.map((item)=>item.id);
761
+ encoding.detail = unique(measures.filter((item)=>'detail' === item.encoding || !item.encoding).map((item)=>item.id));
762
+ };
763
+ const foldMeasures = (dataset, measures, options)=>{
764
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
765
+ const foldInfo = {
766
+ measureId,
767
+ measureName,
768
+ measureValue,
769
+ colorRange: [
770
+ 0,
771
+ 1
772
+ ],
773
+ measureRange: [
774
+ 0,
775
+ 1
776
+ ],
777
+ foldMap: {}
778
+ };
779
+ const result = new Array(dataset.length * measures.length);
780
+ let index = 0;
781
+ const ids = measures.map((d)=>d.id);
782
+ for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
783
+ const datum = omit({
784
+ ...dataset[i]
785
+ }, ids);
786
+ datum[ORIGINAL_DATA] = dataset[i];
787
+ const measure = measures[j];
788
+ const { id, alias } = measure;
789
+ datum[id] = dataset[i][id];
790
+ datum[measureId] = id;
791
+ datum[measureName] = alias || id;
792
+ datum[measureValue] = dataset[i][id];
793
+ if (colorMeasureId) {
794
+ const value = datum[ORIGINAL_DATA][colorMeasureId];
795
+ datum[ColorEncoding] = value;
796
+ datum[ColorIdEncoding] = colorMeasureId;
797
+ foldInfo.colorRange = [
798
+ Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
799
+ Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
800
+ ];
801
+ }
802
+ foldInfo.measureRange = [
803
+ Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
804
+ Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
805
+ ];
806
+ foldInfo.foldMap[id] = alias;
807
+ result[index++] = datum;
808
+ }
809
+ return {
810
+ dataset: result,
811
+ foldInfo
812
+ };
813
+ };
814
+ const reshapePivotTable = (advancedVSeed, context)=>{
726
815
  const result = {
727
816
  ...advancedVSeed
728
817
  };
729
818
  const { vseed } = context;
730
- const { dimensions, dataset } = vseed;
731
- const measures = findAllMeasures(advancedVSeed.measures);
732
- if (!dataset) throw new Error('dataset is required');
733
- if (0 === dataset.length) return result;
734
- if (dimensions) {
735
- const newDimensions = findAllDimensions(dimensions);
736
- result.dimensions = newDimensions.map((item, index)=>{
737
- if ('rowDimension' === item.location || 'columnDimension' === item.location) return item;
738
- return {
739
- ...item,
740
- location: index % 2 === 0 ? 'columnDimension' : 'rowDimension'
741
- };
742
- });
743
- return result;
744
- }
745
- const top100dataset = dataset.slice(0, 100);
746
- const sample = top100dataset.reduce((prev, cur)=>({
747
- ...prev,
748
- ...cur
749
- }), {});
750
- let i = 0;
751
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
752
- '',
753
- null,
754
- void 0
755
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
756
- id: dim,
757
- alias: dim,
758
- location: i++ % 2 === 0 ? 'columnDimension' : 'rowDimension'
759
- }));
760
- return result;
819
+ const { dataset, chartType } = vseed;
820
+ const { dimensions, measures } = advancedVSeed;
821
+ const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measures), {
822
+ measureId: FoldMeasureId,
823
+ measureName: FoldMeasureName,
824
+ measureValue: FoldMeasureValue
825
+ });
826
+ const datasetReshapeInfo = [
827
+ {
828
+ id: String(chartType),
829
+ index: 0,
830
+ foldInfo
831
+ }
832
+ ];
833
+ return {
834
+ ...result,
835
+ dataset: newDatasets,
836
+ datasetReshapeInfo: datasetReshapeInfo,
837
+ dimensions,
838
+ measures
839
+ };
761
840
  };
762
841
  const pivotTableConfig = (advancedVSeed, context)=>{
763
842
  const { vseed } = context;
@@ -788,9 +867,11 @@ const pivotTableConfig = (advancedVSeed, context)=>{
788
867
  };
789
868
  const pivotTableAdvancedPipeline = [
790
869
  initAdvancedVSeed,
791
- autoPivotMeasures,
792
- autoPivotDimensions,
793
- records_records,
870
+ defaultMeasures_defaultMeasures,
871
+ defaultDimensions,
872
+ defaultMeasureName,
873
+ encodingForPivotTable,
874
+ reshapePivotTable,
794
875
  pivotTableConfig,
795
876
  theme_theme
796
877
  ];
@@ -836,8 +917,9 @@ const initPivotTable = (spec, context)=>{
836
917
  };
837
918
  const pivotColumns = (spec, context)=>{
838
919
  const { advancedVSeed } = context;
920
+ const { encoding } = advancedVSeed;
839
921
  const dimensions = advancedVSeed.dimensions;
840
- const columns = dimensions.filter((item)=>'columnDimension' === item['location']);
922
+ const columns = dimensions.filter((item)=>encoding.column?.includes(item.id));
841
923
  return {
842
924
  ...spec,
843
925
  columns: columns.map((item)=>({
@@ -850,7 +932,8 @@ const pivotColumns = (spec, context)=>{
850
932
  const pivotRows = (spec, context)=>{
851
933
  const { advancedVSeed } = context;
852
934
  const dimensions = advancedVSeed.dimensions;
853
- const rows = dimensions.filter((item)=>'rowDimension' === item['location']);
935
+ const { encoding } = advancedVSeed;
936
+ const rows = dimensions.filter((item)=>encoding.row?.includes(item.id));
854
937
  return {
855
938
  ...spec,
856
939
  rows: rows.map((item)=>({
@@ -862,25 +945,32 @@ const pivotRows = (spec, context)=>{
862
945
  };
863
946
  const pivotIndicators = (spec, context)=>{
864
947
  const { advancedVSeed } = context;
865
- const { locale } = advancedVSeed;
866
- const measures = advancedVSeed.measures;
948
+ const { locale, measures, datasetReshapeInfo } = advancedVSeed;
949
+ const { foldInfo } = datasetReshapeInfo[0];
867
950
  return {
868
951
  ...spec,
869
952
  indicatorsAsCol: true,
870
953
  indicatorTitle: intl.i18n`指标名称`,
871
- indicators: measures.map((item)=>{
872
- if (isMeasure(item)) return {
954
+ hideIndicatorName: true,
955
+ indicators: [
956
+ {
873
957
  cellType: 'text',
874
- indicatorKey: item.id,
875
- title: item.alias || item.id,
958
+ indicatorKey: foldInfo.measureValue,
959
+ title: 'indicator',
876
960
  width: 'auto',
877
- format: pivotIndicators_fieldFormat(item, locale)
878
- };
879
- return {};
880
- })
961
+ format: pivotIndicators_fieldFormat(measures, foldInfo, locale)
962
+ }
963
+ ]
881
964
  };
882
965
  };
883
- const pivotIndicators_fieldFormat = (node, locale)=>(value)=>{
966
+ const pivotIndicators_fieldFormat = (measures, foldInfo, locale)=>(value, col, row, table)=>{
967
+ if (!isNumber(col) || !isNumber(row) || !table) return value;
968
+ const datum = table.getCellOriginRecord(col, row);
969
+ if (!datum[0]) return value;
970
+ const { measureId: foldMeasureId } = foldInfo;
971
+ const measureId = datum[0][foldMeasureId];
972
+ const node = findMeasureById(measures, measureId);
973
+ if (!node) return value;
884
974
  const { format = {}, autoFormat = true } = node;
885
975
  if (!external_remeda_isEmpty(format)) {
886
976
  const formatter = createFormatter(format);
@@ -906,9 +996,9 @@ const rowHeaderStyle = (spec, context)=>{
906
996
  borderColor: borderColor,
907
997
  borderLineWidth: 1,
908
998
  padding: [
909
- 8.6,
999
+ 8,
910
1000
  12,
911
- 8.6,
1001
+ 8,
912
1002
  12
913
1003
  ],
914
1004
  textAlign: 'left',
@@ -1036,111 +1126,94 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
1036
1126
  locale: locale || 'zh-CN'
1037
1127
  };
1038
1128
  };
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`指标名称`
1129
+ const default_defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
1130
+ const { vseed } = context;
1131
+ const { measures, dataset } = vseed;
1132
+ if (measures && measures.length > 0) return {
1133
+ ...advancedVSeed,
1134
+ measures
1060
1135
  };
1061
1136
  if (!dataset) throw new Error('dataset is required');
1062
- if (0 === dataset.length) return [];
1063
- if (dimensions) {
1064
- const basicDimensions = dimensions.map((dim)=>({
1065
- location: 'dimension',
1066
- ...dim
1067
- }));
1068
- if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1069
- basicDimensions.push(MeaName);
1070
- return basicDimensions;
1071
- }
1137
+ if (0 === dataset.length) return {
1138
+ ...advancedVSeed,
1139
+ measures: []
1140
+ };
1072
1141
  const top100dataset = dataset.slice(0, 100);
1073
1142
  const sample = top100dataset.reduce((prev, cur)=>({
1074
1143
  ...prev,
1075
1144
  ...cur
1076
1145
  }), {});
1077
- const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1146
+ const defaultMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1078
1147
  '',
1079
1148
  null,
1080
1149
  void 0
1081
- ].includes(key)).map((dim)=>({
1082
- id: dim,
1083
- alias: dim,
1084
- location: 'dimension'
1150
+ ].includes(key)).map((measure)=>({
1151
+ id: measure,
1152
+ alias: measure
1085
1153
  }));
1086
- basicDimensions.push(MeaName);
1087
- return basicDimensions;
1088
- };
1089
- const getBasicMeasures = (vseed)=>{
1090
- const { dataset, measures } = vseed;
1091
- if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1092
- return measures;
1154
+ return {
1155
+ ...advancedVSeed,
1156
+ measures: defaultMeasures
1157
+ };
1093
1158
  };
1094
- const generateMeasuresByDataset = (dataset)=>{
1159
+ const defaultDimensions_defaultDimensions = (advancedVSeed, context)=>{
1160
+ const result = {
1161
+ ...advancedVSeed
1162
+ };
1163
+ const { vseed } = context;
1164
+ const { dimensions, dataset } = vseed;
1165
+ if (dimensions && dimensions.length > 0) return {
1166
+ ...result,
1167
+ dimensions
1168
+ };
1095
1169
  if (!dataset) throw new Error('dataset is required');
1096
- if (0 === dataset.length) return [];
1170
+ if (0 === dataset.length) return result;
1171
+ const measures = findAllMeasures(advancedVSeed.measures);
1097
1172
  const top100dataset = dataset.slice(0, 100);
1098
1173
  const sample = top100dataset.reduce((prev, cur)=>({
1099
1174
  ...prev,
1100
1175
  ...cur
1101
1176
  }), {});
1102
- const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1177
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1103
1178
  '',
1104
1179
  null,
1105
1180
  void 0
1106
- ].includes(key)).map((measure)=>({
1107
- id: measure,
1108
- alias: measure
1181
+ ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1182
+ id: dim,
1183
+ alias: dim
1109
1184
  }));
1110
- return basicMeasures;
1111
- };
1112
- const isMeasureTreeWithChildren = (vseed)=>{
1113
- const { measures } = vseed;
1114
- if (!measures) return false;
1115
- return measures.some((measure)=>'children' in measure);
1185
+ return {
1186
+ ...result,
1187
+ dimensions: newDimensions
1188
+ };
1116
1189
  };
1117
- const isMeasureTreeWithParentId = (vseed)=>{
1118
- const { measures } = vseed;
1119
- if (!measures) return false;
1120
- return measures.some((measure)=>'parentId' in measure);
1190
+ const defaultMeasureName_defaultMeasureName = (advancedVSeed)=>{
1191
+ const result = {
1192
+ ...advancedVSeed
1193
+ };
1194
+ const MeaName = {
1195
+ id: MeasureName,
1196
+ alias: intl.i18n`指标名称`
1197
+ };
1198
+ if (!result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push(MeaName);
1199
+ return result;
1121
1200
  };
1122
- const encodingForLine = (advancedVSeed, context)=>{
1123
- const { vseed } = context;
1124
- const { measures: vseedMeasures = [] } = vseed;
1125
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1126
- const dimensions = getBasicDimensions(vseed);
1201
+ const encodingForLine = (advancedVSeed)=>{
1202
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
1203
+ const measures = findAllMeasures(vseedMeasures);
1127
1204
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1128
1205
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
1129
1206
  const encoding = {};
1130
- if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1131
- else generateDefaultDimensionEncoding(dimensions, encoding);
1132
- if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1133
- else generateDefaultMeasureEncoding(measures, encoding);
1207
+ if (hasDimensionEncoding) line_generateDimensionEncoding(dimensions, encoding);
1208
+ else line_generateDefaultDimensionEncoding(dimensions, encoding);
1209
+ if (hasMeasureEncoding) line_generateMeasureEncoding(measures, encoding);
1210
+ else line_generateDefaultMeasureEncoding(measures, encoding);
1134
1211
  return {
1135
1212
  ...advancedVSeed,
1136
1213
  encoding
1137
1214
  };
1138
1215
  };
1139
- const generateDefaultMeasureEncoding = (measures, encoding)=>{
1140
- encoding.tooltip = unique(measures.map((item)=>item.id));
1141
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1142
- };
1143
- const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1216
+ const line_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1144
1217
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
1145
1218
  encoding.x = uniqueDimIds.slice(0, 1);
1146
1219
  encoding.color = uniqueDimIds.slice(1);
@@ -1150,20 +1223,39 @@ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1150
1223
  encoding.row = [];
1151
1224
  encoding.column = [];
1152
1225
  };
1153
- const generateMeasureEncoding = (measures, encoding)=>{
1154
- encoding.tooltip = measures.map((item)=>item.id);
1155
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1156
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1157
- if (color.length > 0) encoding.color = color;
1158
- };
1159
- const generateDimensionEncoding = (dimensions, encoding)=>{
1226
+ const line_generateDimensionEncoding = (dimensions, encoding)=>{
1160
1227
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
1161
1228
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1162
- encoding.detail = [];
1229
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1163
1230
  if (0 === encoding.x.length) encoding.x = [
1164
1231
  dimensions[0].id
1165
1232
  ];
1166
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1233
+ if (0 === encoding.color.length) encoding.color = [
1234
+ MeasureName
1235
+ ];
1236
+ if (0 === encoding.detail.length) encoding.detail = [
1237
+ MeasureName
1238
+ ];
1239
+ };
1240
+ const line_generateDefaultMeasureEncoding = (measures, encoding)=>{
1241
+ encoding.tooltip = unique(measures.map((item)=>item.id));
1242
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1243
+ };
1244
+ const line_generateMeasureEncoding = (measures, encoding)=>{
1245
+ encoding.tooltip = measures.map((item)=>item.id);
1246
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1247
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1248
+ if (color.length > 0) encoding.color = color;
1249
+ };
1250
+ const isMeasureTreeWithChildren = (vseed)=>{
1251
+ const { measures } = vseed;
1252
+ if (!measures) return false;
1253
+ return measures.some((measure)=>'children' in measure);
1254
+ };
1255
+ const isMeasureTreeWithParentId = (vseed)=>{
1256
+ const { measures } = vseed;
1257
+ if (!measures) return false;
1258
+ return measures.some((measure)=>'parentId' in measure);
1167
1259
  };
1168
1260
  const measureDepth = (measures = [])=>{
1169
1261
  if (!measures) return 0;
@@ -1189,7 +1281,7 @@ const isPivotChart = (vseed)=>{
1189
1281
  }
1190
1282
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1191
1283
  const { dimensions = [] } = vseed;
1192
- const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1284
+ const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'row' === dimension.encoding || 'column' === dimension.encoding);
1193
1285
  if (hasRowOrColumnDimension) return true;
1194
1286
  if ('scatter' === vseed.chartType) {
1195
1287
  if (isMeasureTreeWithChildren(vseed)) {
@@ -1209,7 +1301,7 @@ const isPivotChart = (vseed)=>{
1209
1301
  return false;
1210
1302
  }
1211
1303
  const { measures = [], dimensions = [] } = vseed;
1212
- const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1304
+ const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'row' === dimension.encoding || 'column' === dimension.encoding);
1213
1305
  const hasMeasureGroup = measures && measures.some((measure)=>measure && measure.children);
1214
1306
  return hasRowOrColumnDimension || hasMeasureGroup;
1215
1307
  };
@@ -1223,9 +1315,7 @@ const buildMeasures = (advancedVSeed, context)=>{
1223
1315
  advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1224
1316
  return advancedVSeed;
1225
1317
  }
1226
- const basicMeasures = getBasicMeasures(vseed);
1227
- if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1228
- else advancedVSeed.measures = basicMeasures;
1318
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(advancedVSeed.measures);
1229
1319
  return advancedVSeed;
1230
1320
  };
1231
1321
  const generateMeasuresByParentId = (measures)=>{
@@ -1243,115 +1333,25 @@ const generateMeasuresByParentId = (measures)=>{
1243
1333
  ]
1244
1334
  });
1245
1335
  });
1246
- return measureTree;
1247
- };
1248
- const basicMeasuresToMeasureTree = (measures)=>{
1249
- const id = measures.map((item)=>item.id).join('-');
1250
- const alias = measures.map((item)=>item.alias || item.id).join('-');
1251
- return [
1252
- {
1253
- id,
1254
- alias,
1255
- children: measures
1256
- }
1257
- ];
1258
- };
1259
- const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1260
- const result = {
1261
- ...advancedVSeed
1262
- };
1263
- const { vseed } = context;
1264
- const { dimensions, dataset } = vseed;
1265
- const measures = findAllMeasures(advancedVSeed.measures);
1266
- const MeaName = {
1267
- id: MeasureName,
1268
- alias: intl.i18n`指标名称`
1269
- };
1270
- if (!dataset) throw new Error('dataset is required');
1271
- if (0 === dataset.length) return result;
1272
- if (dimensions) {
1273
- result.dimensions = dimensions.map((dim)=>({
1274
- location: 'dimension',
1275
- ...dim
1276
- }));
1277
- if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
1278
- result.dimensions.push(MeaName);
1279
- return result;
1280
- }
1281
- const top100dataset = dataset.slice(0, 100);
1282
- const sample = top100dataset.reduce((prev, cur)=>({
1283
- ...prev,
1284
- ...cur
1285
- }), {});
1286
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1287
- '',
1288
- null,
1289
- void 0
1290
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1291
- id: dim,
1292
- alias: dim,
1293
- location: 'dimension'
1294
- }));
1295
- result.dimensions.push(MeaName);
1296
- return result;
1297
- };
1298
- const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1299
- const { vseed } = context;
1300
- const usePivotChart = isPivotChart(vseed);
1301
- if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1302
- return execPipeline(pipeline, context, advancedVSeed);
1303
- };
1304
- const foldMeasures = (dataset, measures, options)=>{
1305
- const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1306
- const foldInfo = {
1307
- measureId,
1308
- measureName,
1309
- measureValue,
1310
- colorRange: [
1311
- 0,
1312
- 1
1313
- ],
1314
- measureRange: [
1315
- 0,
1316
- 1
1317
- ],
1318
- foldMap: {}
1319
- };
1320
- const result = new Array(dataset.length * measures.length);
1321
- let index = 0;
1322
- const ids = measures.map((d)=>d.id);
1323
- for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
1324
- const datum = omit({
1325
- ...dataset[i]
1326
- }, ids);
1327
- datum[ORIGINAL_DATA] = dataset[i];
1328
- const measure = measures[j];
1329
- const { id, alias } = measure;
1330
- datum[id] = dataset[i][id];
1331
- datum[measureId] = id;
1332
- datum[measureName] = alias || id;
1333
- datum[measureValue] = dataset[i][id];
1334
- if (colorMeasureId) {
1335
- const value = datum[ORIGINAL_DATA][colorMeasureId];
1336
- datum[ColorEncoding] = value;
1337
- datum[ColorIdEncoding] = colorMeasureId;
1338
- foldInfo.colorRange = [
1339
- Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
1340
- Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
1341
- ];
1336
+ return measureTree;
1337
+ };
1338
+ const basicMeasuresToMeasureTree = (measures)=>{
1339
+ const id = measures.map((item)=>item.id).join('-');
1340
+ const alias = measures.map((item)=>item.alias || item.id).join('-');
1341
+ return [
1342
+ {
1343
+ id,
1344
+ alias,
1345
+ children: measures
1342
1346
  }
1343
- foldInfo.measureRange = [
1344
- Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
1345
- Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
1346
- ];
1347
- foldInfo.foldMap[id] = alias;
1348
- result[index++] = datum;
1349
- }
1350
- return {
1351
- dataset: result,
1352
- foldInfo
1353
- };
1347
+ ];
1354
1348
  };
1349
+ const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1350
+ const { vseed } = context;
1351
+ const usePivotChart = isPivotChart(vseed);
1352
+ if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1353
+ return execPipeline(pipeline, context, advancedVSeed);
1354
+ };
1355
1355
  const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1356
1356
  const { foldMeasureId, separator, colorItemAsId } = options;
1357
1357
  const unfoldInfo = {
@@ -1446,7 +1446,9 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1446
1446
  const { dimensions, measures, encoding } = advancedVSeed;
1447
1447
  if (!measures || !dimensions || !dataset || !encoding) return result;
1448
1448
  if (0 === measures.length) throw new Error('measures can not be empty');
1449
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1449
1450
  const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(findAllMeasures(measures), (item)=>item.id), encoding, {
1451
+ colorItemAsId: hasEncoding,
1450
1452
  colorMeasureId: getColorMeasureId(advancedVSeed)
1451
1453
  });
1452
1454
  return {
@@ -1477,6 +1479,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1477
1479
  if (measures) measures.forEach((measure)=>{
1478
1480
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1479
1481
  });
1482
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1480
1483
  const datasets = [];
1481
1484
  const datasetReshapeInfo = [];
1482
1485
  measureGroups.forEach((measureGroup, index)=>{
@@ -1484,6 +1487,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1484
1487
  if (!measures) return;
1485
1488
  const groupId = measureGroup.id;
1486
1489
  const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, uniqueBy(dimensions, (item)=>item.id), uniqueBy(measures, (item)=>item.id), encoding, {
1490
+ colorItemAsId: hasEncoding,
1487
1491
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1488
1492
  colorMeasureId: getColorMeasureId(advancedVSeed)
1489
1493
  });
@@ -1692,9 +1696,11 @@ const annotation_annotation = (advancedVSeed, context)=>{
1692
1696
  };
1693
1697
  const lineAdvancedPipeline = [
1694
1698
  initAdvancedVSeed_initAdvancedVSeed,
1699
+ default_defaultMeasures_defaultMeasures,
1700
+ defaultDimensions_defaultDimensions,
1701
+ defaultMeasureName_defaultMeasureName,
1695
1702
  encodingForLine,
1696
1703
  buildMeasures,
1697
- autoDimensions_autoDimensions,
1698
1704
  pivotAdapter([
1699
1705
  reshapeWithEncoding
1700
1706
  ], [
@@ -2746,7 +2752,7 @@ const annotationPoint_annotationPoint = (spec, context)=>{
2746
2752
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2747
2753
  const { advancedVSeed } = context;
2748
2754
  const { annotation, datasetReshapeInfo } = advancedVSeed;
2749
- const { unfoldInfo } = datasetReshapeInfo[0];
2755
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
2750
2756
  if (!annotation || !annotation.annotationVerticalLine) return spec;
2751
2757
  const { annotationVerticalLine } = annotation;
2752
2758
  const annotationVerticalLineList = Array.isArray(annotationVerticalLine) ? annotationVerticalLine : [
@@ -2826,9 +2832,9 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2826
2832
  }
2827
2833
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2828
2834
  return selectedData.map((datum)=>{
2829
- const x = unfoldInfo.encodingX;
2830
- if (!x) return {};
2831
- return generateOneMarkLine(datum[x]);
2835
+ if (datum[unfoldInfo.encodingX]) return generateOneMarkLine(datum[unfoldInfo.encodingX]);
2836
+ if (datum[foldInfo.measureValue]) return generateOneMarkLine(datum[foldInfo.measureValue]);
2837
+ return {};
2832
2838
  });
2833
2839
  });
2834
2840
  const specMarkLine = spec.markLine || [];
@@ -2844,10 +2850,10 @@ const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
2844
2850
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
2845
2851
  const { advancedVSeed } = context;
2846
2852
  const { annotation, datasetReshapeInfo } = advancedVSeed;
2847
- const { unfoldInfo } = datasetReshapeInfo[0];
2853
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
2848
2854
  if (!annotation || !annotation.annotationHorizontalLine) return spec;
2849
2855
  const { annotationHorizontalLine } = annotation;
2850
- const annotationVerticalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
2856
+ const annotationHorizontalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
2851
2857
  annotationHorizontalLine
2852
2858
  ];
2853
2859
  const positionMap = {
@@ -2858,8 +2864,8 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
2858
2864
  insideMiddle: 'insideMiddleTop',
2859
2865
  insideEnd: 'insideEndTop'
2860
2866
  };
2861
- const markLine = annotationVerticalLineList.flatMap((annotationVerticalLine)=>{
2862
- const { selector: selectorPoint, yValue, text = '', textPosition = 'insideEnd', textColor = '#ffffff', textFontSize = 12, textFontWeight = 400, textAlign = 'right', textBaseline = 'top', lineColor = '#212121', lineStyle = 'dashed', lineVisible = true, lineWidth = 1, textBackgroundVisible = true, textBackgroundColor = '#212121', textBackgroundBorderColor = '#212121', textBackgroundBorderRadius = 4, textBackgroundBorderWidth = 1, textBackgroundPadding = 2 } = annotationVerticalLine;
2867
+ const markLine = annotationHorizontalLineList.flatMap((annotationHorizontalLine)=>{
2868
+ const { selector: selectorPoint, yValue, text = '', textPosition = 'insideEnd', textColor = '#ffffff', textFontSize = 12, textFontWeight = 400, textAlign = 'right', textBaseline = 'top', lineColor = '#212121', lineStyle = 'dashed', lineVisible = true, lineWidth = 1, textBackgroundVisible = true, textBackgroundColor = '#212121', textBackgroundBorderColor = '#212121', textBackgroundBorderRadius = 4, textBackgroundBorderWidth = 1, textBackgroundPadding = 2 } = annotationHorizontalLine;
2863
2869
  const dataset = advancedVSeed.dataset.flat();
2864
2870
  const generateOneMarkLine = (y)=>({
2865
2871
  y,
@@ -2924,9 +2930,9 @@ const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
2924
2930
  }
2925
2931
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2926
2932
  return selectedData.map((datum)=>{
2927
- const y = unfoldInfo.encodingY;
2928
- if (!y) return {};
2929
- return generateOneMarkLine(datum[y]);
2933
+ if (datum[unfoldInfo.encodingY]) return generateOneMarkLine(datum[unfoldInfo.encodingY]);
2934
+ if (datum[foldInfo.measureValue]) return generateOneMarkLine(datum[foldInfo.measureValue]);
2935
+ return {};
2930
2936
  });
2931
2937
  });
2932
2938
  const specMarkLine = spec.markLine || [];
@@ -3290,7 +3296,7 @@ const pivotRowDimensions = (spec, context)=>{
3290
3296
  const { advancedVSeed } = context;
3291
3297
  const dimensions = advancedVSeed.dimensions;
3292
3298
  if (!dimensions) return result;
3293
- const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location);
3299
+ const rowDimensions = dimensions.filter((dim)=>'row' === dim.encoding);
3294
3300
  const rows = rowDimensions.map((dim)=>({
3295
3301
  dimensionKey: dim.id,
3296
3302
  title: dim.alias || dim.id
@@ -3307,7 +3313,7 @@ const pivotColumnDimensions = (spec, context)=>{
3307
3313
  const { advancedVSeed } = context;
3308
3314
  const dimensions = advancedVSeed.dimensions;
3309
3315
  if (!dimensions) return result;
3310
- const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location);
3316
+ const columnDimensions = dimensions.filter((dim)=>'column' === dim.encoding);
3311
3317
  const columns = columnDimensions.map((dim)=>({
3312
3318
  dimensionKey: dim.id,
3313
3319
  title: dim.alias || dim.id
@@ -3580,11 +3586,9 @@ const registerLine = ()=>{
3580
3586
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3581
3587
  Builder._specPipelineMap.line = lineSpecPipeline;
3582
3588
  };
3583
- const encodingForColumn = (advancedVSeed, context)=>{
3584
- const { vseed } = context;
3585
- const { measures: vseedMeasures = [] } = vseed;
3586
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3587
- const dimensions = getBasicDimensions(vseed);
3589
+ const encodingForColumn = (advancedVSeed)=>{
3590
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
3591
+ const measures = findAllMeasures(vseedMeasures);
3588
3592
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3589
3593
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
3590
3594
  const encoding = {};
@@ -3597,10 +3601,6 @@ const encodingForColumn = (advancedVSeed, context)=>{
3597
3601
  encoding
3598
3602
  };
3599
3603
  };
3600
- const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3601
- encoding.tooltip = unique(measures.map((item)=>item.id));
3602
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3603
- };
3604
3604
  const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3605
3605
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3606
3606
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -3612,13 +3612,6 @@ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3612
3612
  encoding.row = [];
3613
3613
  encoding.column = [];
3614
3614
  };
3615
- const column_generateMeasureEncoding = (measures, encoding)=>{
3616
- encoding.tooltip = measures.map((item)=>item.id);
3617
- encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3618
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3619
- if (color.length > 0) encoding.color = color;
3620
- return encoding;
3621
- };
3622
3615
  const column_generateDimensionEncoding = (dimensions, encoding)=>{
3623
3616
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
3624
3617
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -3626,14 +3619,31 @@ const column_generateDimensionEncoding = (dimensions, encoding)=>{
3626
3619
  if (0 === encoding.x.length) encoding.x = [
3627
3620
  dimensions[0].id
3628
3621
  ];
3629
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3630
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3622
+ if (0 === encoding.color.length) encoding.color = [
3623
+ MeasureName
3624
+ ];
3625
+ if (0 === encoding.detail.length) encoding.detail = [
3626
+ MeasureName
3627
+ ];
3628
+ };
3629
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3630
+ encoding.tooltip = unique(measures.map((item)=>item.id));
3631
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3632
+ };
3633
+ const column_generateMeasureEncoding = (measures, encoding)=>{
3634
+ encoding.tooltip = measures.map((item)=>item.id);
3635
+ encoding.y = unique(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3636
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3637
+ if (color.length > 0) encoding.color = color;
3638
+ return encoding;
3631
3639
  };
3632
3640
  const columnAdvancedPipeline = [
3633
3641
  initAdvancedVSeed_initAdvancedVSeed,
3642
+ default_defaultMeasures_defaultMeasures,
3643
+ defaultDimensions_defaultDimensions,
3644
+ defaultMeasureName_defaultMeasureName,
3634
3645
  encodingForColumn,
3635
3646
  buildMeasures,
3636
- autoDimensions_autoDimensions,
3637
3647
  pivotAdapter([
3638
3648
  reshapeWithEncoding
3639
3649
  ], [
@@ -3993,9 +4003,11 @@ const registerColumn = ()=>{
3993
4003
  };
3994
4004
  const columnParallelAdvancedPipeline = [
3995
4005
  initAdvancedVSeed_initAdvancedVSeed,
4006
+ default_defaultMeasures_defaultMeasures,
4007
+ defaultDimensions_defaultDimensions,
4008
+ defaultMeasureName_defaultMeasureName,
3996
4009
  encodingForColumn,
3997
4010
  buildMeasures,
3998
- autoDimensions_autoDimensions,
3999
4011
  pivotAdapter([
4000
4012
  reshapeWithEncoding
4001
4013
  ], [
@@ -4090,9 +4102,11 @@ const registerColumnParallel = ()=>{
4090
4102
  };
4091
4103
  const columnPercentAdvancedPipeline = [
4092
4104
  initAdvancedVSeed_initAdvancedVSeed,
4105
+ default_defaultMeasures_defaultMeasures,
4106
+ defaultDimensions_defaultDimensions,
4107
+ defaultMeasureName_defaultMeasureName,
4093
4108
  encodingForColumn,
4094
4109
  buildMeasures,
4095
- autoDimensions_autoDimensions,
4096
4110
  pivotAdapter([
4097
4111
  reshapeWithEncoding
4098
4112
  ], [
@@ -4169,11 +4183,9 @@ const registerColumnPercent = ()=>{
4169
4183
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4170
4184
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4171
4185
  };
4172
- const encodingForBar = (advancedVSeed, context)=>{
4173
- const { vseed } = context;
4174
- const { measures: vseedMeasures = [] } = vseed;
4175
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4176
- const dimensions = getBasicDimensions(vseed);
4186
+ const encodingForBar = (advancedVSeed)=>{
4187
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
4188
+ const measures = findAllMeasures(vseedMeasures);
4177
4189
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4178
4190
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
4179
4191
  const encoding = {};
@@ -4186,10 +4198,6 @@ const encodingForBar = (advancedVSeed, context)=>{
4186
4198
  encoding
4187
4199
  };
4188
4200
  };
4189
- const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4190
- encoding.tooltip = unique(measures.map((item)=>item.id));
4191
- encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4192
- };
4193
4201
  const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4194
4202
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4195
4203
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -4201,13 +4209,6 @@ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4201
4209
  encoding.row = [];
4202
4210
  encoding.column = [];
4203
4211
  };
4204
- const bar_generateMeasureEncoding = (measures, encoding)=>{
4205
- encoding.tooltip = measures.map((item)=>item.id);
4206
- encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4207
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4208
- if (color.length > 0) encoding.color = color;
4209
- return encoding;
4210
- };
4211
4212
  const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4212
4213
  encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
4213
4214
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -4215,8 +4216,23 @@ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4215
4216
  if (0 === encoding.y.length) encoding.y = [
4216
4217
  dimensions[0].id
4217
4218
  ];
4218
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4219
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4219
+ if (0 === encoding.color.length) encoding.color = [
4220
+ MeasureName
4221
+ ];
4222
+ if (0 === encoding.detail.length) encoding.detail = [
4223
+ MeasureName
4224
+ ];
4225
+ };
4226
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4227
+ encoding.tooltip = unique(measures.map((item)=>item.id));
4228
+ encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4229
+ };
4230
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4231
+ encoding.tooltip = measures.map((item)=>item.id);
4232
+ encoding.x = unique(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4233
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4234
+ if (color.length > 0) encoding.color = color;
4235
+ return encoding;
4220
4236
  };
4221
4237
  const sortYBandAxis = (advancedVSeed, context)=>{
4222
4238
  const result = {
@@ -4236,9 +4252,11 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4236
4252
  };
4237
4253
  const barAdvancedPipeline = [
4238
4254
  initAdvancedVSeed_initAdvancedVSeed,
4255
+ default_defaultMeasures_defaultMeasures,
4256
+ defaultDimensions_defaultDimensions,
4257
+ defaultMeasureName_defaultMeasureName,
4239
4258
  encodingForBar,
4240
4259
  buildMeasures,
4241
- autoDimensions_autoDimensions,
4242
4260
  pivotAdapter([
4243
4261
  reshapeWithEncoding
4244
4262
  ], [
@@ -4589,9 +4607,11 @@ const registerBar = ()=>{
4589
4607
  };
4590
4608
  const barParallelAdvancedPipeline = [
4591
4609
  initAdvancedVSeed_initAdvancedVSeed,
4592
- buildMeasures,
4593
- autoDimensions_autoDimensions,
4610
+ default_defaultMeasures_defaultMeasures,
4611
+ defaultDimensions_defaultDimensions,
4612
+ defaultMeasureName_defaultMeasureName,
4594
4613
  encodingForBar,
4614
+ buildMeasures,
4595
4615
  pivotAdapter([
4596
4616
  reshapeWithEncoding
4597
4617
  ], [
@@ -4685,9 +4705,11 @@ const registerBarParallel = ()=>{
4685
4705
  };
4686
4706
  const barPercentAdvancedPipeline = [
4687
4707
  initAdvancedVSeed_initAdvancedVSeed,
4688
- buildMeasures,
4689
- autoDimensions_autoDimensions,
4708
+ default_defaultMeasures_defaultMeasures,
4709
+ defaultDimensions_defaultDimensions,
4710
+ defaultMeasureName_defaultMeasureName,
4690
4711
  encodingForBar,
4712
+ buildMeasures,
4691
4713
  pivotAdapter([
4692
4714
  reshapeWithEncoding
4693
4715
  ], [
@@ -4756,9 +4778,11 @@ const registerBarPercent = ()=>{
4756
4778
  };
4757
4779
  const areaAdvancedPipeline = [
4758
4780
  initAdvancedVSeed_initAdvancedVSeed,
4781
+ default_defaultMeasures_defaultMeasures,
4782
+ defaultDimensions_defaultDimensions,
4783
+ defaultMeasureName_defaultMeasureName,
4759
4784
  encodingForLine,
4760
4785
  buildMeasures,
4761
- autoDimensions_autoDimensions,
4762
4786
  pivotAdapter([
4763
4787
  reshapeWithEncoding
4764
4788
  ], [
@@ -4914,9 +4938,11 @@ const registerArea = ()=>{
4914
4938
  };
4915
4939
  const areaPercentAdvancedPipeline = [
4916
4940
  initAdvancedVSeed_initAdvancedVSeed,
4941
+ default_defaultMeasures_defaultMeasures,
4942
+ defaultDimensions_defaultDimensions,
4943
+ defaultMeasureName_defaultMeasureName,
4917
4944
  encodingForLine,
4918
4945
  buildMeasures,
4919
- autoDimensions_autoDimensions,
4920
4946
  pivotAdapter([
4921
4947
  reshapeWithEncoding
4922
4948
  ], [
@@ -4990,11 +5016,9 @@ const registerAreaPercent = ()=>{
4990
5016
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
4991
5017
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
4992
5018
  };
4993
- const encodingForScatter = (advancedVSeed, context)=>{
4994
- const { vseed } = context;
4995
- const { measures: vseedMeasures = [] } = vseed;
4996
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4997
- const dimensions = getBasicDimensions(vseed);
5019
+ const encodingForScatter = (advancedVSeed)=>{
5020
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5021
+ const measures = findAllMeasures(vseedMeasures);
4998
5022
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4999
5023
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5000
5024
  const encoding = {};
@@ -5007,10 +5031,6 @@ const encodingForScatter = (advancedVSeed, context)=>{
5007
5031
  encoding
5008
5032
  };
5009
5033
  };
5010
- const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5011
- encoding.tooltip = unique(measures.map((item)=>item.id));
5012
- encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5013
- };
5014
5034
  const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5015
5035
  const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5016
5036
  const uniqueDimIds = unique(dimensionsWithoutMeasureName.map((d)=>d.id));
@@ -5021,17 +5041,27 @@ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5021
5041
  encoding.row = [];
5022
5042
  encoding.column = [];
5023
5043
  };
5044
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5045
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5046
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5047
+ if (0 === encoding.color.length) encoding.color = [
5048
+ MeasureName
5049
+ ];
5050
+ if (0 === encoding.detail.length) encoding.detail = [
5051
+ MeasureName
5052
+ ];
5053
+ };
5054
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5055
+ encoding.tooltip = unique(measures.map((item)=>item.id));
5056
+ encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5057
+ };
5024
5058
  const scatter_generateMeasureEncoding = (measures, encoding)=>{
5025
5059
  encoding.tooltip = measures.map((item)=>item.id);
5026
5060
  encoding.y = unique(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5027
5061
  const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5028
- if (color.length > 0) encoding.color = color;
5029
- };
5030
- const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5031
- encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5032
- encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5033
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5034
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5062
+ if (color.length > 0) encoding.color = [
5063
+ color[0]
5064
+ ];
5035
5065
  };
5036
5066
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
5037
5067
  const { vseed } = context;
@@ -5043,8 +5073,7 @@ const buildMeasuresForScatter = (advancedVSeed, context)=>{
5043
5073
  advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5044
5074
  return advancedVSeed;
5045
5075
  }
5046
- const basicMeasures = getBasicMeasures(vseed);
5047
- const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5076
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(advancedVSeed.measures || []);
5048
5077
  advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5049
5078
  return advancedVSeed;
5050
5079
  };
@@ -5060,7 +5089,7 @@ const basicMeasuresToScatterMeasures = (basicMeasures)=>{
5060
5089
  const isXAxis = encoding.includes('xAxis');
5061
5090
  if (isYAxis) yMeasures.push(item);
5062
5091
  else if (isXAxis) xMeasures.push(item);
5063
- else if (0 === index) yMeasures.push(item);
5092
+ else if (0 !== index) yMeasures.push(item);
5064
5093
  else xMeasures.push(item);
5065
5094
  }
5066
5095
  return [
@@ -5128,7 +5157,7 @@ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5128
5157
  const isEmpty = !encoding.length;
5129
5158
  if (isY) scatterChart.yMeasures.push(item);
5130
5159
  else if (isX) scatterChart.xMeasures.push(item);
5131
- else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5160
+ else if (isEmpty) if (0 !== scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5132
5161
  else scatterChart.xMeasures.push(item);
5133
5162
  });
5134
5163
  return scatterMeasuresToMeasureTree(scatterMeasures);
@@ -5263,9 +5292,11 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5263
5292
  };
5264
5293
  const scatterAdvancedPipeline = [
5265
5294
  initAdvancedVSeed_initAdvancedVSeed,
5295
+ default_defaultMeasures_defaultMeasures,
5296
+ defaultDimensions_defaultDimensions,
5297
+ defaultMeasureName_defaultMeasureName,
5266
5298
  encodingForScatter,
5267
5299
  buildMeasuresForScatter,
5268
- autoDimensions_autoDimensions,
5269
5300
  pivotAdapter([
5270
5301
  reshapeWithScatterEncoding
5271
5302
  ], [
@@ -5410,11 +5441,9 @@ const registerScatter = ()=>{
5410
5441
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5411
5442
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5412
5443
  };
5413
- const encodingForDualAxis = (advancedVSeed, context)=>{
5414
- const { vseed } = context;
5415
- const { measures: vseedMeasures = [] } = vseed;
5416
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5417
- const dimensions = getBasicDimensions(vseed);
5444
+ const encodingForDualAxis = (advancedVSeed)=>{
5445
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5446
+ const measures = findAllMeasures(vseedMeasures);
5418
5447
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5419
5448
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5420
5449
  const encoding = {};
@@ -5427,10 +5456,6 @@ const encodingForDualAxis = (advancedVSeed, context)=>{
5427
5456
  encoding
5428
5457
  };
5429
5458
  };
5430
- const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5431
- encoding.tooltip = unique(measures.map((item)=>item.id));
5432
- encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5433
- };
5434
5459
  const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5435
5460
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5436
5461
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -5442,13 +5467,6 @@ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5442
5467
  encoding.row = [];
5443
5468
  encoding.column = [];
5444
5469
  };
5445
- const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5446
- encoding.tooltip = measures.map((item)=>item.id);
5447
- encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5448
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5449
- if (color.length > 0) encoding.color = color;
5450
- return encoding;
5451
- };
5452
5470
  const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5453
5471
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
5454
5472
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -5456,8 +5474,23 @@ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5456
5474
  if (0 === encoding.x.length) encoding.x = [
5457
5475
  dimensions[0].id
5458
5476
  ];
5459
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5460
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5477
+ if (0 === encoding.color.length) encoding.color = [
5478
+ MeasureName
5479
+ ];
5480
+ if (0 === encoding.detail.length) encoding.detail = [
5481
+ MeasureName
5482
+ ];
5483
+ };
5484
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5485
+ encoding.tooltip = unique(measures.map((item)=>item.id));
5486
+ encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5487
+ };
5488
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5489
+ encoding.tooltip = measures.map((item)=>item.id);
5490
+ encoding.y = unique(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5491
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5492
+ if (color.length > 0) encoding.color = color;
5493
+ return encoding;
5461
5494
  };
5462
5495
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5463
5496
  const { vseed } = context;
@@ -5469,8 +5502,7 @@ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5469
5502
  advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5470
5503
  return advancedVSeed;
5471
5504
  }
5472
- const basicMeasures = getBasicMeasures(vseed);
5473
- const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5505
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(advancedVSeed.measures || []);
5474
5506
  advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5475
5507
  return advancedVSeed;
5476
5508
  };
@@ -5574,8 +5606,10 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5574
5606
  const datasets = [];
5575
5607
  const primaryMeasures = measures[0];
5576
5608
  const secondaryMeasures = measures[1] || [];
5609
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
5577
5610
  if (primaryMeasures && primaryMeasures.children) {
5578
5611
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5612
+ colorItemAsId: hasEncoding,
5579
5613
  foldMeasureValue: FoldPrimaryMeasureValue,
5580
5614
  colorMeasureId: getColorMeasureId(advancedVSeed)
5581
5615
  });
@@ -5622,6 +5656,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5622
5656
  const { dataset } = vseed;
5623
5657
  const { dimensions, measures, encoding, chartType } = advancedVSeed;
5624
5658
  if (!measures || !dimensions || !dataset || !encoding) return result;
5659
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
5625
5660
  const datasetList = [];
5626
5661
  const datasetReshapeInfo = [];
5627
5662
  const measureGroups = [];
@@ -5640,6 +5675,7 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5640
5675
  const secondaryMeasures = measures[1] || [];
5641
5676
  if (primaryMeasures && primaryMeasures.children) {
5642
5677
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5678
+ colorItemAsId: hasEncoding,
5643
5679
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
5644
5680
  colorMeasureId: getColorMeasureId(advancedVSeed)
5645
5681
  });
@@ -5708,9 +5744,11 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5708
5744
  };
5709
5745
  const dualAxisAdvancedPipeline = [
5710
5746
  initAdvancedVSeed_initAdvancedVSeed,
5747
+ default_defaultMeasures_defaultMeasures,
5748
+ defaultDimensions_defaultDimensions,
5749
+ defaultMeasureName_defaultMeasureName,
5711
5750
  encodingForDualAxis,
5712
5751
  buildMeasuresForDualAxis,
5713
- autoDimensions_autoDimensions,
5714
5752
  pivotAdapter([
5715
5753
  reshapeWithDualEncoding
5716
5754
  ], [
@@ -6543,11 +6581,9 @@ const registerDualAxis = ()=>{
6543
6581
  Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6544
6582
  Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
6545
6583
  };
6546
- const encodingForPie = (advancedVSeed, context)=>{
6547
- const { vseed } = context;
6548
- const { measures: vseedMeasures = [] } = vseed;
6549
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6550
- const dimensions = getBasicDimensions(vseed);
6584
+ const encodingForPie = (advancedVSeed)=>{
6585
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
6586
+ const measures = findAllMeasures(vseedMeasures);
6551
6587
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6552
6588
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
6553
6589
  const encoding = {};
@@ -6560,10 +6596,6 @@ const encodingForPie = (advancedVSeed, context)=>{
6560
6596
  encoding
6561
6597
  };
6562
6598
  };
6563
- const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
6564
- encoding.tooltip = unique(measures.map((item)=>item.id));
6565
- encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6566
- };
6567
6599
  const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6568
6600
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
6569
6601
  encoding.color = uniqueDimIds.slice(0);
@@ -6573,23 +6605,33 @@ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6573
6605
  encoding.row = [];
6574
6606
  encoding.column = [];
6575
6607
  };
6608
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6609
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6610
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6611
+ if (0 === encoding.color.length) encoding.color = [
6612
+ MeasureName
6613
+ ];
6614
+ if (0 === encoding.detail.length) encoding.detail = [
6615
+ MeasureName
6616
+ ];
6617
+ };
6618
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
6619
+ encoding.tooltip = unique(measures.map((item)=>item.id));
6620
+ encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6621
+ };
6576
6622
  const pie_generateMeasureEncoding = (measures, encoding)=>{
6577
6623
  encoding.tooltip = measures.map((item)=>item.id);
6578
6624
  encoding.angle = unique(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6579
6625
  const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6580
6626
  if (color.length > 0) encoding.color = color;
6581
6627
  };
6582
- const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6583
- encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6584
- encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6585
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
6586
- if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6587
- };
6588
6628
  const pieAdvancedPipeline = [
6589
6629
  initAdvancedVSeed_initAdvancedVSeed,
6630
+ default_defaultMeasures_defaultMeasures,
6631
+ defaultDimensions_defaultDimensions,
6632
+ defaultMeasureName_defaultMeasureName,
6590
6633
  encodingForPie,
6591
6634
  buildMeasures,
6592
- autoDimensions_autoDimensions,
6593
6635
  pivotAdapter([
6594
6636
  reshapeWithEncoding
6595
6637
  ], [
@@ -6705,8 +6747,10 @@ const registerPie = ()=>{
6705
6747
  };
6706
6748
  const donutAdvancedPipeline = [
6707
6749
  initAdvancedVSeed_initAdvancedVSeed,
6750
+ default_defaultMeasures_defaultMeasures,
6751
+ defaultDimensions_defaultDimensions,
6752
+ defaultMeasureName_defaultMeasureName,
6708
6753
  buildMeasures,
6709
- autoDimensions_autoDimensions,
6710
6754
  encodingForPie,
6711
6755
  pivotAdapter([
6712
6756
  reshapeWithEncoding
@@ -6783,11 +6827,9 @@ const registerDonut = ()=>{
6783
6827
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
6784
6828
  Builder._specPipelineMap.donut = donutSpecPipeline;
6785
6829
  };
6786
- const encodingForRose = (advancedVSeed, context)=>{
6787
- const { vseed } = context;
6788
- const { measures: vseedMeasures = [] } = vseed;
6789
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6790
- const dimensions = getBasicDimensions(vseed);
6830
+ const encodingForRose = (advancedVSeed)=>{
6831
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
6832
+ const measures = findAllMeasures(vseedMeasures);
6791
6833
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6792
6834
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
6793
6835
  const encoding = {};
@@ -6800,10 +6842,6 @@ const encodingForRose = (advancedVSeed, context)=>{
6800
6842
  encoding
6801
6843
  };
6802
6844
  };
6803
- const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
6804
- encoding.tooltip = unique(measures.map((item)=>item.id));
6805
- encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6806
- };
6807
6845
  const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6808
6846
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6809
6847
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -6815,12 +6853,6 @@ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6815
6853
  encoding.row = [];
6816
6854
  encoding.column = [];
6817
6855
  };
6818
- const rose_generateMeasureEncoding = (measures, encoding)=>{
6819
- encoding.tooltip = measures.map((item)=>item.id);
6820
- encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6821
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6822
- if (color.length > 0) encoding.color = color;
6823
- };
6824
6856
  const rose_generateDimensionEncoding = (dimensions, encoding)=>{
6825
6857
  encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
6826
6858
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -6828,14 +6860,30 @@ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
6828
6860
  if (0 === encoding.angle.length) encoding.angle = [
6829
6861
  dimensions[0].id
6830
6862
  ];
6831
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6832
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
6863
+ if (0 === encoding.color.length) encoding.color = [
6864
+ MeasureName
6865
+ ];
6866
+ if (0 === encoding.detail.length) encoding.detail = [
6867
+ MeasureName
6868
+ ];
6869
+ };
6870
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
6871
+ encoding.tooltip = unique(measures.map((item)=>item.id));
6872
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6873
+ };
6874
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
6875
+ encoding.tooltip = measures.map((item)=>item.id);
6876
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
6877
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6878
+ if (color.length > 0) encoding.color = color;
6833
6879
  };
6834
6880
  const roseAdvancedPipeline = [
6835
6881
  initAdvancedVSeed_initAdvancedVSeed,
6882
+ default_defaultMeasures_defaultMeasures,
6883
+ defaultDimensions_defaultDimensions,
6884
+ defaultMeasureName_defaultMeasureName,
6836
6885
  encodingForRose,
6837
6886
  buildMeasures,
6838
- autoDimensions_autoDimensions,
6839
6887
  pivotAdapter([
6840
6888
  reshapeWithEncoding
6841
6889
  ], [
@@ -7031,9 +7079,11 @@ const registerRose = ()=>{
7031
7079
  };
7032
7080
  const roseParallelAdvancedPipeline = [
7033
7081
  initAdvancedVSeed_initAdvancedVSeed,
7082
+ default_defaultMeasures_defaultMeasures,
7083
+ defaultDimensions_defaultDimensions,
7084
+ defaultMeasureName_defaultMeasureName,
7034
7085
  encodingForRose,
7035
7086
  buildMeasures,
7036
- autoDimensions_autoDimensions,
7037
7087
  pivotAdapter([
7038
7088
  reshapeWithEncoding
7039
7089
  ], [
@@ -7139,11 +7189,9 @@ const registerRoseParallel = ()=>{
7139
7189
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7140
7190
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7141
7191
  };
7142
- const encodingForRadar = (advancedVSeed, context)=>{
7143
- const { vseed } = context;
7144
- const { measures: vseedMeasures = [] } = vseed;
7145
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7146
- const dimensions = getBasicDimensions(vseed);
7192
+ const encodingForRadar = (advancedVSeed)=>{
7193
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7194
+ const measures = findAllMeasures(vseedMeasures);
7147
7195
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7148
7196
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7149
7197
  const encoding = {};
@@ -7156,10 +7204,6 @@ const encodingForRadar = (advancedVSeed, context)=>{
7156
7204
  encoding
7157
7205
  };
7158
7206
  };
7159
- const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7160
- encoding.tooltip = unique(measures.map((item)=>item.id));
7161
- encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7162
- };
7163
7207
  const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7164
7208
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
7165
7209
  encoding.angle = uniqueDimIds.slice(0, 1);
@@ -7170,12 +7214,6 @@ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7170
7214
  encoding.row = [];
7171
7215
  encoding.column = [];
7172
7216
  };
7173
- const radar_generateMeasureEncoding = (measures, encoding)=>{
7174
- encoding.tooltip = measures.map((item)=>item.id);
7175
- encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7176
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7177
- if (color.length > 0) encoding.color = color;
7178
- };
7179
7217
  const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7180
7218
  encoding.angle = unique(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7181
7219
  encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -7183,13 +7221,30 @@ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7183
7221
  if (0 === encoding.angle.length) encoding.angle = [
7184
7222
  dimensions[0].id
7185
7223
  ];
7186
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7224
+ if (0 === encoding.color.length) encoding.color = [
7225
+ MeasureName
7226
+ ];
7227
+ if (0 === encoding.detail.length) encoding.detail = [
7228
+ MeasureName
7229
+ ];
7230
+ };
7231
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7232
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7233
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7234
+ };
7235
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7236
+ encoding.tooltip = measures.map((item)=>item.id);
7237
+ encoding.radius = unique(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7238
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7239
+ if (color.length > 0) encoding.color = color;
7187
7240
  };
7188
7241
  const radarAdvancedPipeline = [
7189
7242
  initAdvancedVSeed_initAdvancedVSeed,
7243
+ default_defaultMeasures_defaultMeasures,
7244
+ defaultDimensions_defaultDimensions,
7245
+ defaultMeasureName_defaultMeasureName,
7190
7246
  encodingForRadar,
7191
7247
  buildMeasures,
7192
- autoDimensions_autoDimensions,
7193
7248
  pivotAdapter([
7194
7249
  reshapeWithEncoding
7195
7250
  ], [
@@ -7323,11 +7378,9 @@ const registerRadar = ()=>{
7323
7378
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7324
7379
  Builder._specPipelineMap.radar = radarSpecPipeline;
7325
7380
  };
7326
- const encodingForFunnel = (advancedVSeed, context)=>{
7327
- const { vseed } = context;
7328
- const { measures: vseedMeasures = [] } = vseed;
7329
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7330
- const dimensions = getBasicDimensions(vseed);
7381
+ const encodingForFunnel = (advancedVSeed)=>{
7382
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7383
+ const measures = findAllMeasures(vseedMeasures);
7331
7384
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7332
7385
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7333
7386
  const encoding = {};
@@ -7340,10 +7393,6 @@ const encodingForFunnel = (advancedVSeed, context)=>{
7340
7393
  encoding
7341
7394
  };
7342
7395
  };
7343
- const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7344
- encoding.tooltip = unique(measures.map((item)=>item.id));
7345
- encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7346
- };
7347
7396
  const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7348
7397
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
7349
7398
  encoding.color = uniqueDimIds.slice(0);
@@ -7353,23 +7402,35 @@ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7353
7402
  encoding.row = [];
7354
7403
  encoding.column = [];
7355
7404
  };
7405
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7406
+ encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7407
+ encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7408
+ if (0 === encoding.color.length) encoding.color = [
7409
+ MeasureName
7410
+ ];
7411
+ if (0 === encoding.detail.length) encoding.detail = [
7412
+ MeasureName
7413
+ ];
7414
+ };
7415
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7416
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7417
+ encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7418
+ };
7356
7419
  const funnel_generateMeasureEncoding = (measures, encoding)=>{
7357
7420
  encoding.tooltip = measures.map((item)=>item.id);
7358
7421
  encoding.size = unique(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7359
7422
  const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7360
- if (color.length > 0) encoding.color = color;
7361
- };
7362
- const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7363
- encoding.color = unique(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7364
- encoding.detail = unique(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7365
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7366
- if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7423
+ if (color.length > 0) encoding.color = [
7424
+ color[0]
7425
+ ];
7367
7426
  };
7368
7427
  const funnelAdvancedPipeline = [
7369
7428
  initAdvancedVSeed_initAdvancedVSeed,
7429
+ default_defaultMeasures_defaultMeasures,
7430
+ defaultDimensions_defaultDimensions,
7431
+ defaultMeasureName_defaultMeasureName,
7370
7432
  encodingForFunnel,
7371
7433
  buildMeasures,
7372
- autoDimensions_autoDimensions,
7373
7434
  pivotAdapter([
7374
7435
  reshapeWithEncoding
7375
7436
  ], [
@@ -7482,11 +7543,9 @@ const registerFunnel = ()=>{
7482
7543
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
7483
7544
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
7484
7545
  };
7485
- const encodingForHeatmap = (advancedVSeed, context)=>{
7486
- const { vseed } = context;
7487
- const { measures: vseedMeasures = [] } = vseed;
7488
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7489
- const dimensions = getBasicDimensions(vseed);
7546
+ const encodingForHeatmap = (advancedVSeed)=>{
7547
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7548
+ const measures = findAllMeasures(vseedMeasures);
7490
7549
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7491
7550
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7492
7551
  const encoding = {};
@@ -7499,10 +7558,6 @@ const encodingForHeatmap = (advancedVSeed, context)=>{
7499
7558
  encoding
7500
7559
  };
7501
7560
  };
7502
- const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7503
- encoding.tooltip = unique(measures.map((item)=>item.id));
7504
- encoding.color = unique(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7505
- };
7506
7561
  const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7507
7562
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7508
7563
  const uniqueDimIds = unique(dimensions.map((d)=>d.id));
@@ -7515,12 +7570,6 @@ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7515
7570
  encoding.row = [];
7516
7571
  encoding.column = [];
7517
7572
  };
7518
- const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7519
- encoding.tooltip = measures.map((item)=>item.id);
7520
- const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7521
- if (color.length > 0) encoding.color = color;
7522
- return encoding;
7523
- };
7524
7573
  const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7525
7574
  encoding.x = unique(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7526
7575
  encoding.y = unique(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
@@ -7531,14 +7580,35 @@ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7531
7580
  ];
7532
7581
  if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7533
7582
  else encoding.y = dimensions.slice(0).map((item)=>item.id);
7534
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7535
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7583
+ if (0 === encoding.color.length) encoding.color = [
7584
+ MeasureName
7585
+ ];
7586
+ if (0 === encoding.detail.length) encoding.detail = [
7587
+ MeasureName
7588
+ ];
7589
+ };
7590
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7591
+ encoding.tooltip = unique(measures.map((item)=>item.id));
7592
+ const colorDims = unique(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7593
+ if (colorDims.length > 0) encoding.color = [
7594
+ colorDims[0]
7595
+ ];
7596
+ };
7597
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7598
+ encoding.tooltip = measures.map((item)=>item.id);
7599
+ const color = unique(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7600
+ if (color.length > 0) encoding.color = [
7601
+ color[0]
7602
+ ];
7603
+ return encoding;
7536
7604
  };
7537
7605
  const heatmapAdvancedPipeline = [
7538
7606
  initAdvancedVSeed_initAdvancedVSeed,
7607
+ default_defaultMeasures_defaultMeasures,
7608
+ defaultDimensions_defaultDimensions,
7609
+ defaultMeasureName_defaultMeasureName,
7539
7610
  encodingForHeatmap,
7540
7611
  buildMeasures,
7541
- autoDimensions_autoDimensions,
7542
7612
  pivotAdapter([
7543
7613
  reshapeWithEncoding
7544
7614
  ], [
@@ -8332,6 +8402,15 @@ const updateAdvanced = (chartType, advancedPipe)=>{
8332
8402
  const updateSpec = (chartType, specPipe)=>{
8333
8403
  Builder._customSpecPipe[chartType] = specPipe;
8334
8404
  };
8405
+ const findAllDimensions = (dimensions = [])=>{
8406
+ if (!dimensions) return [];
8407
+ const result = [];
8408
+ preorderTraverse(dimensions, (node)=>{
8409
+ if (!('children' in node)) result.push(node);
8410
+ return false;
8411
+ });
8412
+ return result;
8413
+ };
8335
8414
  const zChartType = z["enum"]([
8336
8415
  'table',
8337
8416
  'pivotTable',
@@ -8375,11 +8454,6 @@ const zDataset = z.array(zDatum);
8375
8454
  const zDimension = z.object({
8376
8455
  id: z.string(),
8377
8456
  alias: z.string().optional(),
8378
- location: z["enum"]([
8379
- 'dimension',
8380
- 'rowDimension',
8381
- 'columnDimension'
8382
- ]).default('dimension'),
8383
8457
  encoding: z["enum"]([
8384
8458
  'xAxis',
8385
8459
  'yAxis',
@@ -8446,7 +8520,9 @@ const zMeasure = z.object({
8446
8520
  'size',
8447
8521
  'color',
8448
8522
  'label',
8449
- 'tooltip'
8523
+ 'tooltip',
8524
+ 'detail',
8525
+ 'column'
8450
8526
  ]).optional(),
8451
8527
  parentId: z.string().optional()
8452
8528
  });