@visactor/vseed 0.0.40 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/builder/builder/builder.d.ts +61 -671
  2. package/dist/builder/register/chartType/index.d.ts +0 -1
  3. package/dist/dataReshape/constant.d.ts +17 -2
  4. package/dist/dataReshape/dataReshapeByEncoding.d.ts +11 -0
  5. package/dist/dataReshape/index.d.ts +3 -7
  6. package/dist/dataReshape/unfoldDimensions.d.ts +12 -14
  7. package/dist/index.cjs +1184 -1891
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1106 -1822
  11. package/dist/index.js.map +1 -1
  12. package/dist/pipeline/advanced/chart/pipeline/index.d.ts +0 -1
  13. package/dist/pipeline/advanced/chart/pipes/analysis/index.d.ts +3 -1
  14. package/dist/pipeline/advanced/chart/pipes/analysis/sort.d.ts +0 -4
  15. package/dist/pipeline/advanced/chart/pipes/{encoding/encodingAR.d.ts → analysis/sortLegend.d.ts} +1 -1
  16. package/dist/pipeline/advanced/chart/pipes/analysis/sortXBand.d.ts +3 -0
  17. package/dist/pipeline/advanced/chart/pipes/{encoding/encodingPie.d.ts → analysis/sortYBand.d.ts} +1 -1
  18. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingFunnel.d.ts → bar.d.ts} +1 -1
  19. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingAreaRange.d.ts → column.d.ts} +1 -1
  20. package/dist/pipeline/advanced/chart/pipes/encoding/dualAxis.d.ts +2 -0
  21. package/dist/pipeline/advanced/chart/pipes/encoding/funnel.d.ts +2 -0
  22. package/dist/pipeline/advanced/chart/pipes/encoding/heatmap.d.ts +2 -0
  23. package/dist/pipeline/advanced/chart/pipes/encoding/index.d.ts +8 -9
  24. package/dist/pipeline/advanced/chart/pipes/encoding/{encodingMatrix.d.ts → pie.d.ts} +1 -1
  25. package/dist/pipeline/advanced/chart/pipes/encoding/radar.d.ts +2 -0
  26. package/dist/pipeline/advanced/chart/pipes/encoding/rose.d.ts +2 -0
  27. package/dist/pipeline/advanced/chart/pipes/encoding/scatter.d.ts +2 -0
  28. package/dist/pipeline/advanced/chart/pipes/init/autoScatterMeasures.d.ts +2 -0
  29. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +2 -1
  30. package/dist/pipeline/advanced/chart/pipes/reshape/index.d.ts +4 -12
  31. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.d.ts +2 -0
  32. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.d.ts +2 -0
  33. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.d.ts +2 -0
  34. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.d.ts +2 -0
  35. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.d.ts +2 -0
  36. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.d.ts +2 -0
  37. package/dist/pipeline/spec/chart/pipeline/index.d.ts +0 -1
  38. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +0 -1
  39. package/dist/pipeline/spec/chart/pipes/{color/linearColor.d.ts → dataset/datasetScatter.d.ts} +1 -1
  40. package/dist/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -0
  41. package/dist/pipeline/spec/chart/pipes/init/index.d.ts +1 -2
  42. package/dist/pipeline/spec/chart/pipes/legend/index.d.ts +0 -1
  43. package/dist/pipeline/spec/chart/pipes/tooltip/index.d.ts +0 -1
  44. package/dist/types/advancedVSeed.d.ts +26 -311
  45. package/dist/types/chartType/area/area.d.ts +13 -1
  46. package/dist/types/chartType/area/zArea.d.ts +14 -0
  47. package/dist/types/chartType/areaPercent/areaPercent.d.ts +13 -1
  48. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +14 -0
  49. package/dist/types/chartType/bar/bar.d.ts +22 -30
  50. package/dist/types/chartType/bar/zBar.d.ts +14 -0
  51. package/dist/types/chartType/barParallel/barParallel.d.ts +21 -30
  52. package/dist/types/chartType/barParallel/zBarParallel.d.ts +14 -0
  53. package/dist/types/chartType/barPercent/barPercent.d.ts +19 -21
  54. package/dist/types/chartType/barPercent/zBarPercent.d.ts +14 -0
  55. package/dist/types/chartType/column/column.d.ts +19 -28
  56. package/dist/types/chartType/column/zColumn.d.ts +14 -0
  57. package/dist/types/chartType/columnParallel/columnParallel.d.ts +22 -27
  58. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +14 -0
  59. package/dist/types/chartType/columnPercent/columnPercent.d.ts +19 -25
  60. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +14 -0
  61. package/dist/types/chartType/donut/donut.d.ts +12 -1
  62. package/dist/types/chartType/donut/zDonut.d.ts +14 -0
  63. package/dist/types/chartType/dualAxis/dualAxis.d.ts +13 -1
  64. package/dist/types/chartType/funnel/funnel.d.ts +12 -1
  65. package/dist/types/chartType/funnel/zFunnel.d.ts +14 -0
  66. package/dist/types/chartType/heatmap/heatmap.d.ts +13 -1
  67. package/dist/types/chartType/index.d.ts +0 -1
  68. package/dist/types/chartType/line/line.d.ts +17 -10
  69. package/dist/types/chartType/line/zLine.d.ts +14 -0
  70. package/dist/types/chartType/pie/pie.d.ts +12 -1
  71. package/dist/types/chartType/pie/zPie.d.ts +14 -0
  72. package/dist/types/chartType/radar/radar.d.ts +13 -1
  73. package/dist/types/chartType/radar/zRadar.d.ts +14 -0
  74. package/dist/types/chartType/rose/rose.d.ts +13 -1
  75. package/dist/types/chartType/rose/zRose.d.ts +14 -0
  76. package/dist/types/chartType/roseParallel/roseParallel.d.ts +13 -1
  77. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +14 -0
  78. package/dist/types/chartType/scatter/scatter.d.ts +92 -5
  79. package/dist/types/chartType/scatter/zScatter.d.ts +155 -0
  80. package/dist/types/index.d.ts +2 -1
  81. package/dist/types/properties/chartType/chartType.d.ts +1 -3
  82. package/dist/types/properties/config/config.d.ts +0 -307
  83. package/dist/types/properties/datasetReshapeInfo/datasetReshapeInfo.d.ts +13 -38
  84. package/dist/types/properties/datasetReshapeInfo/index.d.ts +1 -1
  85. package/dist/types/properties/datasetReshapeInfo/zDatasetReshapeInfo.d.ts +43 -0
  86. package/dist/types/properties/encoding/encoding.d.ts +49 -16
  87. package/dist/types/properties/encoding/index.d.ts +2 -2
  88. package/dist/types/properties/encoding/zEncoding.d.ts +29 -0
  89. package/dist/types/properties/measures/index.d.ts +4 -2
  90. package/dist/types/properties/measures/scatterMeasures.d.ts +6 -0
  91. package/dist/types/properties/measures/zScatterMeasures.d.ts +283 -0
  92. package/dist/types/properties/theme/customTheme.d.ts +0 -306
  93. package/dist/types/vseed.d.ts +2 -16816
  94. package/dist/types/zVseed.d.ts +15738 -0
  95. package/dist/umd/index.js +1134 -1847
  96. package/dist/umd/index.js.map +1 -1
  97. package/package.json +13 -5
  98. package/dist/builder/register/chartType/areaRange.d.ts +0 -1
  99. package/dist/dataReshape/dataReshapeFor1D.d.ts +0 -19
  100. package/dist/dataReshape/dataReshapeFor1D1M.d.ts +0 -19
  101. package/dist/dataReshape/dataReshapeFor1D2M.d.ts +0 -19
  102. package/dist/dataReshape/dataReshapeFor2D1M.d.ts +0 -19
  103. package/dist/dataReshape/dataReshapeFor2D1M0Name.d.ts +0 -19
  104. package/dist/dataReshape/unfoldZeroDimensions.d.ts +0 -10
  105. package/dist/pipeline/advanced/chart/pipeline/areaRange.d.ts +0 -2
  106. package/dist/pipeline/advanced/chart/pipes/encoding/encodingRose.d.ts +0 -2
  107. package/dist/pipeline/advanced/chart/pipes/encoding/encodingXY.d.ts +0 -2
  108. package/dist/pipeline/advanced/chart/pipes/encoding/encodingXYY.d.ts +0 -2
  109. package/dist/pipeline/advanced/chart/pipes/encoding/encodingYX.d.ts +0 -2
  110. package/dist/pipeline/advanced/chart/pipes/encoding/encodingYY.d.ts +0 -2
  111. package/dist/pipeline/advanced/chart/pipes/init/autoMeasuresBy2M1Group.d.ts +0 -8
  112. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D.d.ts +0 -8
  113. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D1M.d.ts +0 -8
  114. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo1D2M.d.ts +0 -8
  115. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D1M.d.ts +0 -8
  116. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D1M0Name.d.ts +0 -8
  117. package/dist/pipeline/advanced/chart/pipes/reshape/pivotReshapeTo2D2M.d.ts +0 -8
  118. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D.d.ts +0 -8
  119. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D1M.d.ts +0 -8
  120. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo1D2M.d.ts +0 -8
  121. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D1M.d.ts +0 -8
  122. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D1M0Name.d.ts +0 -8
  123. package/dist/pipeline/advanced/chart/pipes/reshape/reshapeTo2D2M.d.ts +0 -8
  124. package/dist/pipeline/spec/chart/pipeline/areaRange.d.ts +0 -1
  125. package/dist/pipeline/spec/chart/pipes/init/areaRange.d.ts +0 -4
  126. package/dist/pipeline/spec/chart/pipes/legend/colorLegend.d.ts +0 -2
  127. package/dist/pipeline/spec/chart/pipes/tooltip/tooltipAreaRange.d.ts +0 -2
  128. package/dist/types/chartType/areaRange/areaRange.d.ts +0 -151
  129. package/dist/types/chartType/areaRange/index.d.ts +0 -2
  130. package/dist/types/chartType/areaRange/zAreaRange.d.ts +0 -1427
  131. /package/dist/pipeline/spec/chart/pipes/init/{initDualAxis.d.ts → dualAxis.d.ts} +0 -0
package/dist/umd/index.js CHANGED
@@ -40,14 +40,16 @@
40
40
  isTable: ()=>isTable,
41
41
  zDonut: ()=>zDonut,
42
42
  zDualMeasures: ()=>zDualMeasures,
43
- zPie: ()=>zPie,
43
+ XEncoding: ()=>XEncoding,
44
44
  findFirstMeasure: ()=>findFirstMeasure,
45
45
  scatterAdvancedPipeline: ()=>scatterAdvancedPipeline,
46
+ zPie: ()=>zPie,
46
47
  zRoseConfig: ()=>zRoseConfig,
47
48
  updateSpec: ()=>updateSpec,
48
49
  zCrosshairRect: ()=>zCrosshairRect,
49
50
  scatterSpecPipeline: ()=>scatterSpecPipeline,
50
51
  intl: ()=>intl,
52
+ zScatterMeasures: ()=>zScatterMeasures,
51
53
  columnPercentAdvancedPipeline: ()=>columnPercentAdvancedPipeline,
52
54
  zColumnConfig: ()=>zColumnConfig,
53
55
  zAnnotation: ()=>zAnnotation,
@@ -57,12 +59,11 @@
57
59
  pivotTableAdvancedPipeline: ()=>pivotTableAdvancedPipeline,
58
60
  isMeasures: ()=>isMeasures,
59
61
  zYBandAxis: ()=>zYBandAxis,
60
- dataReshapeFor1D2M: ()=>dataReshapeFor1D2M,
61
62
  zAnnotationHorizontalLine: ()=>zAnnotationHorizontalLine,
63
+ zYLinearAxis: ()=>zYLinearAxis,
62
64
  zMarkStyle: ()=>zMarkStyle,
63
65
  registerFunnel: ()=>registerFunnel,
64
66
  Separator: ()=>Separator,
65
- zYLinearAxis: ()=>zYLinearAxis,
66
67
  columnAdvancedPipeline: ()=>columnAdvancedPipeline,
67
68
  zLabel: ()=>zLabel,
68
69
  registerColumn: ()=>registerColumn,
@@ -75,16 +76,16 @@
75
76
  zDimensionTree: ()=>zDimensionTree,
76
77
  roseParallelSpecPipeline: ()=>roseParallelSpecPipeline,
77
78
  zLineStyle: ()=>zLineStyle,
78
- dataReshapeFor1D1M: ()=>dataReshapeFor1D1M,
79
79
  registerArea: ()=>registerArea,
80
80
  zRoseParallel: ()=>zRoseParallel,
81
+ MeasureName: ()=>MeasureName,
81
82
  zDataset: ()=>zDataset,
82
83
  UnfoldDimensionGroupId: ()=>UnfoldDimensionGroupId,
83
84
  zNumFormat: ()=>zNumFormat,
84
85
  barPercentAdvancedPipeline: ()=>barPercentAdvancedPipeline,
85
86
  findAllDimensions: ()=>findAllDimensions,
87
+ FoldYMeasureValue: ()=>FoldYMeasureValue,
86
88
  findDimensionById: ()=>findDimensionById,
87
- zAreaRangeConfig: ()=>zAreaRangeConfig,
88
89
  zPivotTableConfig: ()=>zPivotTableConfig,
89
90
  zArea: ()=>zArea,
90
91
  zColumnParallel: ()=>zColumnParallel,
@@ -96,25 +97,26 @@
96
97
  registerAreaPercent: ()=>registerAreaPercent,
97
98
  zHeatmap: ()=>zHeatmap,
98
99
  zBarPercent: ()=>zBarPercent,
100
+ zScatterMeasure: ()=>zScatterMeasure,
99
101
  zTheme: ()=>zTheme,
100
102
  zDatum: ()=>zDatum,
101
103
  barAdvancedPipeline: ()=>barAdvancedPipeline,
102
104
  zCustomThemeConfig: ()=>zCustomThemeConfig,
103
105
  registerColumnPercent: ()=>registerColumnPercent,
104
106
  registerHeatmap: ()=>registerHeatmap,
105
- registerAreaRange: ()=>registerAreaRange,
106
- roseSpecPipeline: ()=>roseSpecPipeline,
107
- dataReshapeFor2D1M0Name: ()=>dataReshapeFor2D1M0Name,
108
107
  registerBarPercent: ()=>registerBarPercent,
108
+ roseSpecPipeline: ()=>roseSpecPipeline,
109
+ ColorIdEncoding: ()=>ColorIdEncoding,
110
+ zCrosshairLine: ()=>zCrosshairLine,
109
111
  registerLightTheme: ()=>registerLightTheme,
110
112
  roseAdvancedPipeline: ()=>roseAdvancedPipeline,
111
113
  zBarParallel: ()=>zBarParallel,
112
114
  registerDarkTheme: ()=>registerDarkTheme,
113
115
  registerPivotTable: ()=>registerPivotTable,
114
116
  isPartialDatumSelector: ()=>isPartialDatumSelector,
117
+ pieSpecPipeline: ()=>pieSpecPipeline,
115
118
  isDimensionGroup: ()=>isDimensionGroup,
116
119
  dualAxisSpecPipeline: ()=>dualAxisSpecPipeline,
117
- pieSpecPipeline: ()=>pieSpecPipeline,
118
120
  tableAdvancedPipeline: ()=>tableAdvancedPipeline,
119
121
  barSpecPipeline: ()=>barSpecPipeline,
120
122
  zAnnotationVerticalLine: ()=>zAnnotationVerticalLine,
@@ -123,15 +125,15 @@
123
125
  unfoldDimensions: ()=>unfoldDimensions,
124
126
  roseParallelAdvancedPipeline: ()=>roseParallelAdvancedPipeline,
125
127
  registerTable: ()=>registerTable,
126
- autoFormatter: ()=>autoFormatter,
128
+ Builder: ()=>Builder,
127
129
  isMeasureGroup: ()=>isMeasureGroup,
128
- findFirstDimension: ()=>findFirstDimension,
130
+ YEncoding: ()=>YEncoding,
129
131
  registerAll: ()=>registerAll,
130
132
  registerBar: ()=>registerBar,
131
133
  isVChart: ()=>isVChart,
132
134
  radarSpecPipeline: ()=>radarSpecPipeline,
133
- Builder: ()=>Builder,
134
- zCrosshairLine: ()=>zCrosshairLine,
135
+ findFirstDimension: ()=>findFirstDimension,
136
+ autoFormatter: ()=>autoFormatter,
135
137
  zMeasureTree: ()=>zMeasureTree,
136
138
  zPieConfig: ()=>zPieConfig,
137
139
  registerLine: ()=>registerLine,
@@ -165,8 +167,9 @@
165
167
  zRadarConfig: ()=>zRadarConfig,
166
168
  zAnnotationArea: ()=>zAnnotationArea,
167
169
  zStackCornerRadius: ()=>zStackCornerRadius,
168
- zUnfoldInfo: ()=>zUnfoldInfo,
170
+ DetailEncoding: ()=>DetailEncoding,
169
171
  zRose: ()=>zRose,
172
+ zUnfoldInfo: ()=>zUnfoldInfo,
170
173
  columnParallelSpecPipeline: ()=>columnParallelSpecPipeline,
171
174
  i18n: ()=>i18n,
172
175
  zPointStyle: ()=>zPointStyle,
@@ -188,30 +191,30 @@
188
191
  FoldPrimaryMeasureValue: ()=>FoldPrimaryMeasureValue,
189
192
  zTableConfig: ()=>zTableConfig,
190
193
  zXBandAxis: ()=>zXBandAxis,
191
- dataReshapeFor1D: ()=>dataReshapeFor1D,
192
194
  zColumnPercentConfig: ()=>zColumnPercentConfig,
193
195
  findMeasureById: ()=>findMeasureById,
194
196
  zVSeed: ()=>zVSeed,
197
+ AngleEncoding: ()=>AngleEncoding,
195
198
  areaPercentAdvancedPipeline: ()=>areaPercentAdvancedPipeline,
196
199
  radarAdvancedPipeline: ()=>radarAdvancedPipeline,
197
- zBackgroundColor: ()=>zBackgroundColor,
198
200
  zAreaPercentConfig: ()=>zAreaPercentConfig,
201
+ zBackgroundColor: ()=>zBackgroundColor,
199
202
  registerBarParallel: ()=>registerBarParallel,
200
203
  registerRadar: ()=>registerRadar,
201
- zLocale: ()=>zLocale,
204
+ zEncodings: ()=>zEncodings,
202
205
  isDimension: ()=>isDimension,
203
206
  pivotTableSpecPipeline: ()=>pivotTableSpecPipeline,
204
- areaRangeSpecPipeline: ()=>areaRangeSpecPipeline,
205
- areaRangeAdvancedPipeline: ()=>areaRangeAdvancedPipeline,
207
+ zLocale: ()=>zLocale,
208
+ FoldXMeasureValue: ()=>FoldXMeasureValue,
206
209
  dualAxisAdvancedPipeline: ()=>dualAxisAdvancedPipeline,
207
210
  registerScatter: ()=>registerScatter,
208
- zAreaRange: ()=>zAreaRange,
209
- measureDepth: ()=>measureDepth,
211
+ zEncoding: ()=>zEncoding,
212
+ ColorEncoding: ()=>ColorEncoding,
210
213
  autoNumFormatter: ()=>autoNumFormatter,
211
- zAdvancedVSeed: ()=>zAdvancedVSeed,
214
+ measureDepth: ()=>measureDepth,
212
215
  tableSpecPipeline: ()=>tableSpecPipeline,
216
+ zAdvancedVSeed: ()=>zAdvancedVSeed,
213
217
  zConfig: ()=>zConfig,
214
- zEncoding: ()=>zEncoding,
215
218
  zBarStyle: ()=>zBarStyle,
216
219
  zMeasure: ()=>zMeasure,
217
220
  zRoseParallelConfig: ()=>zRoseParallelConfig,
@@ -222,20 +225,20 @@
222
225
  donutAdvancedPipeline: ()=>donutAdvancedPipeline,
223
226
  zColumnPercent: ()=>zColumnPercent,
224
227
  registerPie: ()=>registerPie,
225
- dataReshapeFor2D1M: ()=>dataReshapeFor2D1M,
226
228
  foldMeasures: ()=>foldMeasures,
227
229
  isPivotTable: ()=>isPivotTable,
228
230
  zFunnel: ()=>zFunnel,
229
231
  zScatter: ()=>zScatter,
232
+ zScatterConfig: ()=>zScatterConfig,
230
233
  zBarParallelConfig: ()=>zBarParallelConfig,
231
234
  barParallelAdvancedPipeline: ()=>barParallelAdvancedPipeline,
232
235
  FoldMeasureValue: ()=>FoldMeasureValue,
233
236
  barPercentSpecPipeline: ()=>barPercentSpecPipeline,
234
237
  lineAdvancedPipeline: ()=>lineAdvancedPipeline,
235
- zBarPercentConfig: ()=>zBarPercentConfig,
238
+ dataReshapeByEncoding: ()=>dataReshapeByEncoding,
236
239
  lineSpecPipeline: ()=>lineSpecPipeline,
237
240
  isDimensions: ()=>isDimensions,
238
- zScatterConfig: ()=>zScatterConfig,
241
+ zBarPercentConfig: ()=>zBarPercentConfig,
239
242
  createFormatter: ()=>createFormatter,
240
243
  zDimensionGroup: ()=>zDimensionGroup,
241
244
  isMeasureSelector: ()=>isMeasureSelector,
@@ -1494,13 +1497,26 @@
1494
1497
  const isVChart = (vseed)=>!isVTable(vseed);
1495
1498
  const isPivotChart = (vseed)=>{
1496
1499
  if (isVTable(vseed)) return false;
1497
- if ('dualAxis' === vseed.chartType) {
1498
- if (vseed.measures) {
1499
- const depth = measureDepth(vseed.measures);
1500
- if (3 === depth) return true;
1501
- return false;
1500
+ if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1501
+ const { dimensions = [] } = vseed;
1502
+ const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1503
+ if (hasRowOrColumnDimension) return true;
1504
+ if ('scatter' === vseed.chartType) {
1505
+ if (vseed.measures) {
1506
+ const depth = measureDepth(vseed.measures);
1507
+ if (3 === depth) return true;
1508
+ return false;
1509
+ }
1510
+ if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
1511
+ }
1512
+ if ('dualAxis' === vseed.chartType) {
1513
+ if (vseed.measures) {
1514
+ const depth = measureDepth(vseed.measures);
1515
+ if (3 === depth) return true;
1516
+ return false;
1517
+ }
1518
+ if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1502
1519
  }
1503
- if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1504
1520
  return false;
1505
1521
  }
1506
1522
  const { measures = [], dimensions = [] } = vseed;
@@ -1579,6 +1595,24 @@
1579
1595
  alias: '',
1580
1596
  children: []
1581
1597
  });
1598
+ const ORIGINAL_DATA = '__OriginalData__';
1599
+ const Separator = '-';
1600
+ const FoldMeasureName = '__MeaName__';
1601
+ const FoldMeasureId = '__MeaId__';
1602
+ const FoldMeasureValue = '__MeaValue__';
1603
+ const MeasureName = FoldMeasureName;
1604
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1605
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1606
+ const FoldXMeasureValue = '__MeaXValue__';
1607
+ const FoldYMeasureValue = '__MeaYValue__';
1608
+ const XEncoding = '__Dim_X__';
1609
+ const YEncoding = '__Dim_Y__';
1610
+ const AngleEncoding = '__Dim_Angle__';
1611
+ const DetailEncoding = '__Dim_Detail__';
1612
+ const ColorEncoding = '__Dim_Color__';
1613
+ const ColorIdEncoding = '__Dim_ColorId__';
1614
+ const UnfoldDimensionGroup = '__DimGroup__';
1615
+ const UnfoldDimensionGroupId = '__DimGroupID__';
1582
1616
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1583
1617
  const result = {
1584
1618
  ...advancedVSeed
@@ -1586,6 +1620,10 @@
1586
1620
  const { vseed } = context;
1587
1621
  const { dimensions, dataset } = vseed;
1588
1622
  const measures = findAllMeasures(advancedVSeed.measures);
1623
+ const MeaName = {
1624
+ id: MeasureName,
1625
+ alias: intl.i18n`指标名称`
1626
+ };
1589
1627
  if (!dataset) throw new Error('dataset is required');
1590
1628
  if (0 === dataset.length) return result;
1591
1629
  if (dimensions) {
@@ -1593,6 +1631,8 @@
1593
1631
  location: 'dimension',
1594
1632
  ...dim
1595
1633
  }));
1634
+ if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
1635
+ result.dimensions.push(MeaName);
1596
1636
  return result;
1597
1637
  }
1598
1638
  const top100dataset = dataset.slice(0, 100);
@@ -1609,23 +1649,57 @@
1609
1649
  alias: dim,
1610
1650
  location: 'dimension'
1611
1651
  }));
1652
+ result.dimensions.push(MeaName);
1612
1653
  return result;
1613
1654
  };
1655
+ const encodingForColumn = (advancedVSeed, context)=>{
1656
+ const { vseed } = context;
1657
+ const { dimensions } = advancedVSeed;
1658
+ if (!dimensions) return advancedVSeed;
1659
+ const encoding = vseed.encoding;
1660
+ if (encoding) {
1661
+ const x = encoding.x || [
1662
+ dimensions[0].id
1663
+ ];
1664
+ const color = encoding.color || [
1665
+ (dimensions[1] || dimensions[0]).id
1666
+ ];
1667
+ const detail = encoding.detail || [];
1668
+ const mergedDetail = chunk_QJLMYOTX_i([
1669
+ ...color,
1670
+ ...detail
1671
+ ]);
1672
+ return {
1673
+ ...advancedVSeed,
1674
+ encoding: {
1675
+ ...encoding,
1676
+ x,
1677
+ color,
1678
+ detail: mergedDetail
1679
+ }
1680
+ };
1681
+ }
1682
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1683
+ const mergedEncoding = {
1684
+ x: dimensions.slice(0, 1).map((item)=>item.id),
1685
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1686
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1687
+ tooltip: dimensions.map((item)=>item.id),
1688
+ label: [],
1689
+ row: [],
1690
+ column: []
1691
+ };
1692
+ return {
1693
+ ...advancedVSeed,
1694
+ encoding: mergedEncoding
1695
+ };
1696
+ };
1614
1697
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1615
1698
  const { vseed } = context;
1616
1699
  const usePivotChart = isPivotChart(vseed);
1617
1700
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1618
1701
  return execPipeline(pipeline, context, advancedVSeed);
1619
1702
  };
1620
- const FoldMeasureName = '__MeaName__';
1621
- const FoldMeasureId = '__MeaId__';
1622
- const FoldMeasureValue = '__MeaValue__';
1623
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1624
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1625
- const UnfoldDimensionGroup = '__DimGroup__';
1626
- const UnfoldDimensionGroupId = '__DimGroupID__';
1627
- const Separator = '-';
1628
- const ORIGINAL_DATA = '__OriginalData__';
1629
1703
  function chunk_AIG3BDKO_i(...e) {
1630
1704
  return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1631
1705
  }
@@ -1676,84 +1750,53 @@
1676
1750
  foldInfo
1677
1751
  };
1678
1752
  };
1679
- const unfoldDimensions = (dataset, dimensions, measures, unfoldStartIndex = 0, unfoldGroupName = UnfoldDimensionGroup, unfoldGroupId = UnfoldDimensionGroupId, foldMeasureId = FoldMeasureId, dimensionsSeparator = Separator)=>{
1680
- if (unfoldStartIndex < 0 || unfoldStartIndex >= dimensions.length) throw new Error('unfoldStartIndex is out of range');
1681
- const dimensionsToBeUnfolded = dimensions.slice(unfoldStartIndex);
1682
- const dimensionsToBeRemain = dimensions.slice(0, unfoldStartIndex);
1753
+ const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1754
+ const { foldMeasureId, separator, colorItemAsId } = options;
1683
1755
  const unfoldInfo = {
1684
- groupName: unfoldGroupName,
1685
- groupId: unfoldGroupId,
1756
+ encodingAngle: AngleEncoding,
1757
+ encodingX: XEncoding,
1758
+ encodingY: YEncoding,
1759
+ encodingDetail: DetailEncoding,
1760
+ encodingColor: ColorEncoding,
1761
+ encodingColorId: ColorIdEncoding,
1686
1762
  colorItems: [],
1687
1763
  colorIdMap: {}
1688
1764
  };
1689
- if (0 === dimensions.length || 0 === measures.length) return {
1690
- dataset,
1691
- unfoldInfo: {
1692
- groupName: unfoldGroupName,
1693
- groupId: unfoldGroupId,
1694
- colorItems: [],
1695
- colorIdMap: {}
1696
- }
1697
- };
1698
- const colorItems = [];
1699
- const colorMap = {};
1765
+ const { color, x, y, detail, angle } = encoding;
1766
+ const angleDimensions = angle ? dimensions.filter((dim)=>angle.includes(dim.id)) : [];
1767
+ const xDimensions = x ? dimensions.filter((dim)=>x.includes(dim.id)) : [];
1768
+ const yDimensions = y ? dimensions.filter((dim)=>y.includes(dim.id)) : [];
1769
+ const colorDimensions = color ? dimensions.filter((dim)=>color.includes(dim.id)) : [];
1770
+ const detailDimensions = detail ? dimensions.filter((dim)=>detail.includes(dim.id)) : [];
1771
+ const colorItems = new Set();
1772
+ const colorIdMap = {};
1700
1773
  for(let i = 0; i < dataset.length; i++){
1701
1774
  const datum = dataset[i];
1702
- const colorName = generateDimGroupName(dimensionsToBeUnfolded, datum, dimensionsSeparator);
1703
- const colorId = datum[foldMeasureId] ? [
1704
- colorName,
1705
- datum[foldMeasureId]
1706
- ].join(dimensionsSeparator) : colorName;
1707
- datum[unfoldGroupName] = colorName;
1708
- datum[unfoldGroupId] = colorId;
1709
- colorItems.push(colorId);
1710
- colorMap[colorId] = colorName;
1711
- if (dimensionsToBeRemain.length > 0) for (const dim of dimensionsToBeRemain){
1712
- const dimValue = datum[dim.id];
1713
- if ('number' == typeof dimValue) datum[dim.id] = String(dimValue);
1714
- }
1775
+ applyEncoding(AngleEncoding, angleDimensions, datum, separator);
1776
+ applyEncoding(XEncoding, xDimensions, datum, separator);
1777
+ applyEncoding(YEncoding, yDimensions, datum, separator);
1778
+ applyEncoding(ColorEncoding, colorDimensions, datum, separator);
1779
+ applyEncoding(DetailEncoding, detailDimensions, datum, separator);
1780
+ if (!datum[ColorEncoding]) continue;
1781
+ const measureId = String(datum[foldMeasureId]);
1782
+ const colorItem = String(datum[ColorEncoding]);
1783
+ const colorId = colorItemAsId ? colorItem : measureId ? [
1784
+ colorItem,
1785
+ measureId
1786
+ ].join(separator) : colorItem;
1787
+ datum[ColorIdEncoding] = colorId;
1788
+ colorIdMap[colorId] = colorItem;
1789
+ colorItems.add(colorId);
1715
1790
  }
1716
- unfoldInfo.colorItems = chunk_QJLMYOTX_i(colorItems);
1717
- unfoldInfo.colorIdMap = colorMap;
1791
+ unfoldInfo.colorItems = Array.from(colorItems);
1792
+ unfoldInfo.colorIdMap = colorIdMap;
1718
1793
  return {
1719
1794
  dataset,
1720
1795
  unfoldInfo
1721
1796
  };
1722
1797
  };
1723
- const generateDimGroupName = (dimensionsToBeGrouped, datum, dimensionsSeparator)=>dimensionsToBeGrouped.map((dim)=>String(datum[dim.id])).join(dimensionsSeparator);
1724
- const unfoldZeroDimensions = (dataset, measures, measureName, unfoldGroupName = UnfoldDimensionGroup, unfoldGroupId = UnfoldDimensionGroupId)=>{
1725
- const unfoldInfo = {
1726
- groupName: unfoldGroupName,
1727
- groupId: unfoldGroupId,
1728
- colorItems: [],
1729
- colorIdMap: {}
1730
- };
1731
- if (0 === measures.length) return {
1732
- dataset,
1733
- unfoldInfo: {
1734
- groupName: unfoldGroupName,
1735
- groupId: unfoldGroupId,
1736
- colorItems: [],
1737
- colorIdMap: {}
1738
- }
1739
- };
1740
- const colorItems = [];
1741
- const colorMap = {};
1742
- for(let i = 0; i < dataset.length; i++){
1743
- const datum = dataset[i];
1744
- const colorName = measureName;
1745
- const colorId = measureName;
1746
- datum[unfoldGroupName] = colorName;
1747
- datum[unfoldGroupId] = colorId;
1748
- colorItems.push(colorId);
1749
- colorMap[colorId] = colorName;
1750
- }
1751
- unfoldInfo.colorItems = chunk_QJLMYOTX_i(colorItems);
1752
- unfoldInfo.colorIdMap = colorMap;
1753
- return {
1754
- dataset,
1755
- unfoldInfo
1756
- };
1798
+ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1799
+ if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1757
1800
  };
1758
1801
  const emptyReshapeResult = {
1759
1802
  dataset: [],
@@ -1764,69 +1807,47 @@
1764
1807
  measureValue: ''
1765
1808
  },
1766
1809
  unfoldInfo: {
1767
- groupName: '',
1768
- groupId: '',
1810
+ encodingAngle: AngleEncoding,
1811
+ encodingX: XEncoding,
1812
+ encodingY: YEncoding,
1813
+ encodingDetail: DetailEncoding,
1814
+ encodingColor: ColorEncoding,
1815
+ encodingColorId: ColorIdEncoding,
1769
1816
  colorItems: [],
1770
1817
  colorIdMap: {}
1771
1818
  }
1772
1819
  };
1773
- const dataReshapeFor2D1M0Name = (dataset, dimensions, measures, options)=>{
1774
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
1820
+ const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1821
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1775
1822
  if (0 === dimensions.length && 0 === measures.length) return emptyReshapeResult;
1776
1823
  const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
1777
- if (0 === dimensions.length) {
1778
- const { dataset: finalDataset, unfoldInfo } = unfoldZeroDimensions(foldedDataset, [
1779
- {
1780
- id: foldMeasureValue,
1781
- alias: i18n`指标值`
1782
- }
1783
- ], i18n`指标名称`, unfoldDimensionGroup, unfoldDimensionGroupId);
1784
- return {
1785
- dataset: finalDataset,
1786
- foldInfo,
1787
- unfoldInfo
1788
- };
1789
- }
1790
- {
1791
- const onlyOneMeasure = 1 === measures.length;
1792
- const onlyOneDimension = 1 === dimensions.length;
1793
- const dims = [
1794
- ...dimensions
1795
- ];
1796
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
1797
- id: foldMeasureName,
1798
- alias: i18n`指标名称`,
1799
- location: 'dimension'
1800
- });
1801
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
1802
- {
1803
- id: foldMeasureValue,
1804
- alias: i18n`指标值`
1805
- }
1806
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
1807
- return {
1808
- dataset: finalDataset,
1809
- foldInfo,
1810
- unfoldInfo
1811
- };
1812
- }
1824
+ const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1825
+ foldMeasureId,
1826
+ separator: Separator,
1827
+ colorItemAsId
1828
+ });
1829
+ return {
1830
+ dataset: finalDataset,
1831
+ foldInfo,
1832
+ unfoldInfo
1833
+ };
1813
1834
  };
1814
- const reshapeTo2D1M0Name = (advancedVSeed, context)=>{
1835
+ const reshapeWithEncoding = (advancedVSeed, context)=>{
1815
1836
  const result = {
1816
1837
  ...advancedVSeed
1817
1838
  };
1818
1839
  const { vseed } = context;
1819
- const { dataset } = vseed;
1820
- const { dimensions, measures } = advancedVSeed;
1821
- if (!measures || !dimensions || !dataset) return result;
1840
+ const { dataset, chartType } = vseed;
1841
+ const { dimensions, measures, encoding } = advancedVSeed;
1842
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1822
1843
  if (0 === measures.length) throw new Error('measures can not be empty');
1823
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, dimensions, measures);
1844
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1824
1845
  return {
1825
1846
  ...result,
1826
1847
  dataset: newDatasets,
1827
1848
  datasetReshapeInfo: [
1828
1849
  {
1829
- id: '2D1M',
1850
+ id: String(chartType),
1830
1851
  index: 0,
1831
1852
  foldInfo,
1832
1853
  unfoldInfo
@@ -1836,31 +1857,27 @@
1836
1857
  measures
1837
1858
  };
1838
1859
  };
1839
- const pivotReshapeTo2D1M0Name = (advancedVSeed, context)=>{
1860
+ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1840
1861
  const result = {
1841
1862
  ...advancedVSeed
1842
1863
  };
1843
1864
  const { vseed } = context;
1844
1865
  const { dataset } = vseed;
1845
- const { measures } = advancedVSeed;
1846
- const dimensions = advancedVSeed.dimensions;
1847
- if (!measures || !dimensions) return result;
1866
+ const { dimensions, measures, encoding } = advancedVSeed;
1867
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1868
+ if (0 === measures.length) throw new Error('measures can not be empty');
1848
1869
  const measureGroups = [];
1849
1870
  if (measures) measures.forEach((measure)=>{
1850
1871
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1851
1872
  });
1852
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
1853
- const newDatasets = [];
1873
+ const datasets = [];
1854
1874
  const datasetReshapeInfo = [];
1855
1875
  measureGroups.forEach((measureGroup, index)=>{
1856
1876
  const measures = measureGroup.children;
1857
1877
  if (!measures) return;
1858
1878
  const groupId = measureGroup.id;
1859
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, commonDimensions, measures, {
1860
- foldMeasureId: FoldMeasureId,
1861
- foldMeasureName: FoldMeasureName,
1862
- foldMeasureValue: FoldMeasureValue + groupId,
1863
- unfoldDimensionGroup: UnfoldDimensionGroup
1879
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1880
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`
1864
1881
  });
1865
1882
  const reshapeInfo = {
1866
1883
  id: groupId,
@@ -1868,52 +1885,15 @@
1868
1885
  foldInfo,
1869
1886
  unfoldInfo
1870
1887
  };
1871
- newDatasets.push(newSubDataset);
1888
+ datasets.push(newSubDataset);
1872
1889
  datasetReshapeInfo.push(reshapeInfo);
1873
1890
  });
1874
1891
  return {
1875
1892
  ...result,
1876
- dataset: newDatasets,
1893
+ dataset: datasets,
1877
1894
  datasetReshapeInfo: datasetReshapeInfo
1878
1895
  };
1879
1896
  };
1880
- const encodingXY = (advancedVSeed)=>{
1881
- const result = {
1882
- ...advancedVSeed
1883
- };
1884
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
1885
- if (!datasetReshapeInfo || !dimensions) return result;
1886
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
1887
- const isZeroDimension = 0 === dimensions.length;
1888
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
1889
- const { foldInfo, unfoldInfo } = cur;
1890
- const x = [
1891
- isZeroDimension ? foldInfo.measureName : xDimension?.id
1892
- ];
1893
- const y = [
1894
- foldInfo.measureValue
1895
- ];
1896
- const group = [
1897
- unfoldInfo.groupId
1898
- ];
1899
- const color = [
1900
- foldInfo.measureName
1901
- ];
1902
- return [
1903
- ...prev,
1904
- {
1905
- x,
1906
- y,
1907
- group,
1908
- color
1909
- }
1910
- ];
1911
- }, []);
1912
- return {
1913
- ...result,
1914
- encoding
1915
- };
1916
- };
1917
1897
  function chunk_NFFV4IQT_m(...r) {
1918
1898
  return chunk_WIMGWYZL_u(chunk_NFFV4IQT_o, r);
1919
1899
  }
@@ -1928,42 +1908,46 @@
1928
1908
  ...advancedVSeed
1929
1909
  };
1930
1910
  const { vseed } = context;
1931
- const { sort: sortAxis, dataset } = vseed;
1932
- const { encoding } = advancedVSeed;
1933
- const xField = encoding?.[0]?.x?.[0];
1911
+ const { sort: sortAxis } = vseed;
1912
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1913
+ const { unfoldInfo } = datasetReshapeInfo[0];
1914
+ const xField = unfoldInfo.encodingX;
1934
1915
  if (!sortAxis || !xField) return advancedVSeed;
1935
1916
  if (!result.analysis) result.analysis = {};
1936
1917
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1937
- const axisOrderResult = calcOrder(sortAxis, xField, dataset);
1918
+ const axisOrderResult = calcOrder(sortAxis, xField, dataset.flat(2));
1938
1919
  result.analysis.orderMapping[xField] = axisOrderResult;
1939
1920
  return result;
1940
1921
  };
1941
- const sortYBandAxis = (advancedVSeed, context)=>{
1942
- const result = {
1943
- ...advancedVSeed
1944
- };
1945
- const { vseed } = context;
1946
- const { sort: sortAxis, dataset } = vseed;
1947
- const { encoding } = advancedVSeed;
1948
- const yField = encoding?.[0]?.y?.[0];
1949
- if (!sortAxis || !yField) return advancedVSeed;
1950
- if (!result.analysis) result.analysis = {};
1951
- if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1952
- const axisOrderResult = calcOrder(sortAxis, yField, dataset);
1953
- result.analysis.orderMapping[yField] = axisOrderResult;
1954
- return result;
1922
+ const calcOrder = (sortConfig, id, dataset)=>{
1923
+ if (sortConfig.customOrder) return sortConfig.customOrder;
1924
+ const order = sortConfig.order || 'asc';
1925
+ const orderBy = sortConfig.orderBy;
1926
+ const res = chunk_NFFV4IQT_m(dataset, (a, b)=>{
1927
+ const aValue = a[orderBy || id];
1928
+ const bValue = b[orderBy || id];
1929
+ if ('asc' === order) {
1930
+ if (aValue < bValue) return -1;
1931
+ if (aValue > bValue) return 1;
1932
+ return 0;
1933
+ }
1934
+ if (aValue > bValue) return -1;
1935
+ if (aValue < bValue) return 1;
1936
+ return 0;
1937
+ });
1938
+ return chunk_QJLMYOTX_i(res.map((item)=>item[id]));
1955
1939
  };
1956
- const sort_sortLegend = (advancedVSeed, context)=>{
1940
+ const sortLegend_sortLegend = (advancedVSeed, context)=>{
1957
1941
  const result = {
1958
1942
  ...advancedVSeed
1959
1943
  };
1960
1944
  const { vseed } = context;
1961
1945
  const { sortLegend } = vseed;
1962
- const { datasetReshapeInfo } = advancedVSeed;
1963
- const groupField = datasetReshapeInfo?.[0]?.unfoldInfo?.groupId;
1946
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1947
+ const colorId = datasetReshapeInfo?.[0]?.unfoldInfo?.encodingColorId;
1964
1948
  const colorIdMap = datasetReshapeInfo?.[0]?.unfoldInfo?.colorIdMap;
1965
1949
  const colorItems = datasetReshapeInfo?.[0]?.unfoldInfo?.colorItems;
1966
- if (!sortLegend || !groupField || !colorIdMap || !colorItems) return advancedVSeed;
1950
+ if (!sortLegend || !colorId || !colorIdMap || !colorItems) return advancedVSeed;
1967
1951
  if (!result.analysis) result.analysis = {};
1968
1952
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1969
1953
  if (sortLegend.customOrder) {
@@ -1972,15 +1956,14 @@
1972
1956
  return pre;
1973
1957
  }, {});
1974
1958
  const orderRes = sortLegend.customOrder.map((itemNameOrId)=>nameMap[itemNameOrId] ? nameMap[itemNameOrId] : itemNameOrId);
1975
- result.analysis.orderMapping[groupField] = orderRes;
1959
+ result.analysis.orderMapping[colorId] = orderRes;
1976
1960
  return result;
1977
1961
  }
1978
- const dataset = advancedVSeed.dataset?.flat(2);
1979
- const orderRes = calcOrder(sortLegend, groupField, dataset || []);
1980
- result.analysis.orderMapping[groupField] = orderRes;
1962
+ const orderRes = sortLegend_calcOrder(sortLegend, colorId, dataset?.flat(2) || []);
1963
+ result.analysis.orderMapping[colorId] = orderRes;
1981
1964
  return result;
1982
1965
  };
1983
- const calcOrder = (sortConfig, id, dataset)=>{
1966
+ const sortLegend_calcOrder = (sortConfig, id, dataset)=>{
1984
1967
  if (sortConfig.customOrder) return sortConfig.customOrder;
1985
1968
  const order = sortConfig.order || 'asc';
1986
1969
  const orderBy = sortConfig.orderBy;
@@ -2112,14 +2095,14 @@
2112
2095
  initAdvancedVSeed_initAdvancedVSeed,
2113
2096
  autoMeasures_autoMeasures,
2114
2097
  autoDimensions_autoDimensions,
2098
+ encodingForColumn,
2115
2099
  pivotAdapter([
2116
- reshapeTo2D1M0Name
2100
+ reshapeWithEncoding
2117
2101
  ], [
2118
- pivotReshapeTo2D1M0Name
2102
+ pivotReshapeWithEncoding
2119
2103
  ]),
2120
- encodingXY,
2121
2104
  sortXBandAxis,
2122
- sort_sortLegend,
2105
+ sortLegend_sortLegend,
2123
2106
  lineConfig,
2124
2107
  theme_theme,
2125
2108
  markStyle_markStyle,
@@ -2130,13 +2113,13 @@
2130
2113
  ...spec
2131
2114
  };
2132
2115
  const { advancedVSeed } = context;
2133
- const { encoding } = advancedVSeed;
2134
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
2116
+ const { datasetReshapeInfo } = advancedVSeed;
2117
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
2135
2118
  result.type = 'line';
2136
2119
  result.direction = 'vertical';
2137
- result.xField = encoding[0].x[0];
2138
- result.yField = encoding[0].y[0];
2139
- result.seriesField = encoding[0].group[0];
2120
+ result.xField = unfoldInfo.encodingX;
2121
+ result.yField = foldInfo.measureValue;
2122
+ result.seriesField = unfoldInfo.encodingColorId;
2140
2123
  result.padding = 0;
2141
2124
  result.region = [
2142
2125
  {
@@ -2212,11 +2195,12 @@
2212
2195
  };
2213
2196
  const datasetXY = (spec, context)=>{
2214
2197
  const { advancedVSeed, vseed } = context;
2215
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
2198
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
2199
+ const { unfoldInfo } = datasetReshapeInfo[0];
2216
2200
  const orderMapping = analysis?.orderMapping || {};
2217
- const angle = encoding[0]?.angle?.[0];
2218
- const x = encoding[0]?.x?.[0];
2219
- const group = encoding[0]?.group?.[0];
2201
+ const angle = unfoldInfo.encodingAngle;
2202
+ const x = unfoldInfo.encodingX;
2203
+ const colorId = unfoldInfo.encodingColorId;
2220
2204
  const id = datasetReshapeInfo[0].id;
2221
2205
  const fields = {};
2222
2206
  if (angle) fields[angle] = {
@@ -2233,14 +2217,14 @@
2233
2217
  sortIndex: 0
2234
2218
  };
2235
2219
  }
2236
- if (group) {
2237
- const order = orderMapping[group];
2238
- if (order) fields[group] = {
2220
+ if (colorId) {
2221
+ const order = orderMapping[colorId];
2222
+ if (order) fields[colorId] = {
2239
2223
  sortIndex: 0,
2240
2224
  domain: order,
2241
2225
  lockStatisticsByDomain: true
2242
2226
  };
2243
- else fields[group] = {
2227
+ else fields[colorId] = {
2244
2228
  sortIndex: 0
2245
2229
  };
2246
2230
  }
@@ -2493,7 +2477,7 @@
2493
2477
  } } = baseConfig;
2494
2478
  const { enable } = tooltip;
2495
2479
  const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2496
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
2480
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2497
2481
  result.tooltip = {
2498
2482
  visible: enable,
2499
2483
  mark: {
@@ -2514,7 +2498,7 @@
2514
2498
  {
2515
2499
  visible: true,
2516
2500
  hasShape: true,
2517
- key: (datum)=>datum && datum[measureName || groupName] || '',
2501
+ key: (datum)=>datum && datum[measureName || colorName] || '',
2518
2502
  value: (datum)=>{
2519
2503
  if (!datum) return '';
2520
2504
  const value = datum[measureValue];
@@ -2536,7 +2520,7 @@
2536
2520
  content: [
2537
2521
  {
2538
2522
  visible: true,
2539
- key: (datum)=>datum && datum[groupName] || '',
2523
+ key: (datum)=>datum && datum[colorName] || '',
2540
2524
  value: (datum)=>{
2541
2525
  if (!datum) return '';
2542
2526
  const value = datum[measureValue];
@@ -2874,7 +2858,8 @@
2874
2858
  const pointStateHover = (spec, context)=>{
2875
2859
  const point = spec.point || {};
2876
2860
  const { advancedVSeed } = context;
2877
- const { encoding } = advancedVSeed;
2861
+ const { datasetReshapeInfo } = advancedVSeed;
2862
+ const { unfoldInfo } = datasetReshapeInfo[0];
2878
2863
  const result = {
2879
2864
  ...spec,
2880
2865
  point: {
@@ -2885,7 +2870,7 @@
2885
2870
  scaleX: 1.4,
2886
2871
  scaleY: 1.4,
2887
2872
  stroke: (datum, context)=>{
2888
- const field = encoding[0]?.group?.[0];
2873
+ const field = unfoldInfo.encodingColorId;
2889
2874
  const color = context.seriesColor(datum[field]);
2890
2875
  return color;
2891
2876
  },
@@ -2915,7 +2900,8 @@
2915
2900
  };
2916
2901
  const lineStyle_lineStyle = (spec, context)=>{
2917
2902
  const { advancedVSeed } = context;
2918
- const { markStyle, encoding, dataset } = advancedVSeed;
2903
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
2904
+ const { unfoldInfo } = datasetReshapeInfo[0];
2919
2905
  const { lineStyle } = markStyle;
2920
2906
  if (!lineStyle) return spec;
2921
2907
  const result = {
@@ -2924,8 +2910,8 @@
2924
2910
  const lineStyles = Array.isArray(lineStyle) ? lineStyle : [
2925
2911
  lineStyle
2926
2912
  ];
2927
- const group = encoding[0]?.group?.[0];
2928
- const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
2913
+ const colorId = unfoldInfo.encodingColorId;
2914
+ const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[colorId ?? '']);
2929
2915
  const customMap = lineStyles.reduce((result, style, index)=>{
2930
2916
  const { lineColor, lineColorOpacity, lineSmooth, lineStyle, lineWidth = 2, lineVisible = true } = style;
2931
2917
  const dashSegment = 2 * lineWidth;
@@ -2946,7 +2932,7 @@
2946
2932
  [`custom${index + 1}`]: {
2947
2933
  level: index + 1,
2948
2934
  filter: (datum)=>{
2949
- const lineData = lineGroups[datum[group ?? '']];
2935
+ const lineData = lineGroups[datum[colorId ?? '']];
2950
2936
  for (const d of lineData)if (selector_selector(d, style.selector)) return true;
2951
2937
  return false;
2952
2938
  },
@@ -3044,7 +3030,8 @@
3044
3030
  }
3045
3031
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
3046
3032
  const { advancedVSeed } = context;
3047
- const { annotation, encoding } = advancedVSeed;
3033
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3034
+ const { unfoldInfo } = datasetReshapeInfo[0];
3048
3035
  if (!annotation || !annotation.annotationVerticalLine) return spec;
3049
3036
  const { annotationVerticalLine } = annotation;
3050
3037
  const annotationVerticalLineList = Array.isArray(annotationVerticalLine) ? annotationVerticalLine : [
@@ -3124,7 +3111,7 @@
3124
3111
  }
3125
3112
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3126
3113
  return selectedData.map((datum)=>{
3127
- const x = encoding[0]?.x?.[0];
3114
+ const x = unfoldInfo.encodingX;
3128
3115
  if (!x) return {};
3129
3116
  return generateOneMarkLine(datum[x]);
3130
3117
  });
@@ -3141,7 +3128,8 @@
3141
3128
  };
3142
3129
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
3143
3130
  const { advancedVSeed } = context;
3144
- const { annotation, encoding } = advancedVSeed;
3131
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3132
+ const { unfoldInfo } = datasetReshapeInfo[0];
3145
3133
  if (!annotation || !annotation.annotationHorizontalLine) return spec;
3146
3134
  const { annotationHorizontalLine } = annotation;
3147
3135
  const annotationVerticalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
@@ -3221,7 +3209,7 @@
3221
3209
  }
3222
3210
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3223
3211
  return selectedData.map((datum)=>{
3224
- const y = encoding[0]?.y?.[0];
3212
+ const y = unfoldInfo.encodingY;
3225
3213
  if (!y) return {};
3226
3214
  return generateOneMarkLine(datum[y]);
3227
3215
  });
@@ -3502,13 +3490,10 @@
3502
3490
  ...spec
3503
3491
  };
3504
3492
  const { advancedVSeed } = context;
3505
- const { measures, datasetReshapeInfo, encoding, dataset } = advancedVSeed;
3493
+ const { measures, datasetReshapeInfo, dataset } = advancedVSeed;
3506
3494
  const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3507
3495
  const indicators = datasetReshapeInfo.map((reshapeInfo, index)=>{
3508
3496
  const measure = measures?.find((d)=>d.id === reshapeInfo.id);
3509
- const newEncoding = [
3510
- encoding[index]
3511
- ];
3512
3497
  const newDataset = dataset[index];
3513
3498
  const newDatasetReshapeInfo = [
3514
3499
  {
@@ -3524,8 +3509,7 @@
3524
3509
  advancedVSeed: {
3525
3510
  ...advancedVSeed,
3526
3511
  datasetReshapeInfo: newDatasetReshapeInfo,
3527
- dataset: newDataset,
3528
- encoding: newEncoding
3512
+ dataset: newDataset
3529
3513
  }
3530
3514
  };
3531
3515
  const chartSpec = execPipeline(chartPipeline, newContext, {});
@@ -3711,7 +3695,7 @@
3711
3695
  }
3712
3696
  },
3713
3697
  label: {
3714
- formatMethod: (value)=>colorIdMap[String(value)] ?? value,
3698
+ formatMethod: (value)=>colorIdMap[value] ?? value,
3715
3699
  style: {
3716
3700
  fontSize: labelFontSize,
3717
3701
  fill: labelFontColor,
@@ -3794,151 +3778,18 @@
3794
3778
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3795
3779
  Builder._specPipelineMap.line = lineSpecPipeline;
3796
3780
  };
3797
- const dataReshapeFor2D1M_emptyReshapeResult = {
3798
- dataset: [],
3799
- foldInfo: {
3800
- foldMap: {},
3801
- measureId: '',
3802
- measureName: '',
3803
- measureValue: ''
3804
- },
3805
- unfoldInfo: {
3806
- groupName: '',
3807
- groupId: '',
3808
- colorItems: [],
3809
- colorIdMap: {}
3810
- }
3811
- };
3812
- const dataReshapeFor2D1M = (dataset, dimensions, measures, options)=>{
3813
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
3814
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor2D1M_emptyReshapeResult;
3815
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
3816
- if (0 === dimensions.length) {
3817
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
3818
- {
3819
- id: foldMeasureId,
3820
- alias: i18n`指标Id`,
3821
- location: 'dimension'
3822
- },
3823
- {
3824
- id: foldMeasureName,
3825
- alias: i18n`指标名称`,
3826
- location: 'dimension'
3827
- }
3828
- ], [
3829
- {
3830
- id: foldMeasureValue,
3831
- alias: i18n`指标值`
3832
- }
3833
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3834
- return {
3835
- dataset: finalDataset,
3836
- foldInfo,
3837
- unfoldInfo
3838
- };
3839
- }
3840
- {
3841
- const onlyOneMeasure = 1 === measures.length;
3842
- const onlyOneDimension = 1 === dimensions.length;
3843
- const dims = [
3844
- ...dimensions
3845
- ];
3846
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
3847
- id: foldMeasureName,
3848
- alias: i18n`指标名称`,
3849
- location: 'dimension'
3850
- });
3851
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
3852
- {
3853
- id: foldMeasureValue,
3854
- alias: i18n`指标值`
3855
- }
3856
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3857
- return {
3858
- dataset: finalDataset,
3859
- foldInfo,
3860
- unfoldInfo
3861
- };
3862
- }
3863
- };
3864
- const reshapeTo2D1M = (advancedVSeed, context)=>{
3865
- const result = {
3866
- ...advancedVSeed
3867
- };
3868
- const { vseed } = context;
3869
- const { dataset } = vseed;
3870
- const { dimensions, measures } = advancedVSeed;
3871
- if (!measures || !dimensions || !dataset) return result;
3872
- if (0 === measures.length) throw new Error('measures can not be empty');
3873
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, dimensions, measures);
3874
- return {
3875
- ...result,
3876
- dataset: newDatasets,
3877
- datasetReshapeInfo: [
3878
- {
3879
- id: '2D1M',
3880
- index: 0,
3881
- foldInfo,
3882
- unfoldInfo
3883
- }
3884
- ],
3885
- dimensions,
3886
- measures
3887
- };
3888
- };
3889
- const pivotReshapeTo2D1M = (advancedVSeed, context)=>{
3890
- const result = {
3891
- ...advancedVSeed
3892
- };
3893
- const { vseed } = context;
3894
- const { dataset } = vseed;
3895
- const { measures } = advancedVSeed;
3896
- const dimensions = advancedVSeed.dimensions;
3897
- if (!measures || !dimensions) return result;
3898
- const measureGroups = [];
3899
- if (measures) measures.forEach((measure)=>{
3900
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
3901
- });
3902
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
3903
- const newDatasets = [];
3904
- const datasetReshapeInfo = [];
3905
- measureGroups.forEach((measureGroup, index)=>{
3906
- const measures = measureGroup.children;
3907
- if (!measures) return;
3908
- const groupId = measureGroup.id;
3909
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, measures, {
3910
- foldMeasureId: FoldMeasureId,
3911
- foldMeasureName: FoldMeasureName,
3912
- foldMeasureValue: FoldMeasureValue + groupId,
3913
- unfoldDimensionGroup: UnfoldDimensionGroup
3914
- });
3915
- const reshapeInfo = {
3916
- id: groupId,
3917
- index,
3918
- foldInfo,
3919
- unfoldInfo
3920
- };
3921
- newDatasets.push(newSubDataset);
3922
- datasetReshapeInfo.push(reshapeInfo);
3923
- });
3924
- return {
3925
- ...result,
3926
- dataset: newDatasets,
3927
- datasetReshapeInfo: datasetReshapeInfo
3928
- };
3929
- };
3930
3781
  const columnAdvancedPipeline = [
3931
3782
  initAdvancedVSeed_initAdvancedVSeed,
3932
3783
  autoMeasures_autoMeasures,
3933
3784
  autoDimensions_autoDimensions,
3785
+ encodingForColumn,
3934
3786
  pivotAdapter([
3935
- reshapeTo2D1M
3787
+ reshapeWithEncoding
3936
3788
  ], [
3937
- pivotReshapeTo2D1M
3789
+ pivotReshapeWithEncoding
3938
3790
  ]),
3939
- encodingXY,
3940
3791
  sortXBandAxis,
3941
- sort_sortLegend,
3792
+ sortLegend_sortLegend,
3942
3793
  columnConfig,
3943
3794
  theme_theme,
3944
3795
  markStyle_markStyle,
@@ -3949,13 +3800,13 @@
3949
3800
  ...spec
3950
3801
  };
3951
3802
  const { advancedVSeed } = context;
3952
- const { encoding } = advancedVSeed;
3953
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3954
- result.type = 'bar';
3803
+ const { datasetReshapeInfo } = advancedVSeed;
3804
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
3805
+ result.type = 'bar';
3955
3806
  result.direction = 'vertical';
3956
- result.xField = encoding[0].x[0];
3957
- result.yField = encoding[0].y[0];
3958
- result.seriesField = encoding[0].group[0];
3807
+ result.xField = unfoldInfo.encodingX;
3808
+ result.yField = foldInfo.measureValue;
3809
+ result.seriesField = unfoldInfo.encodingColorId;
3959
3810
  result.padding = 0;
3960
3811
  result.region = [
3961
3812
  {
@@ -4275,14 +4126,14 @@
4275
4126
  initAdvancedVSeed_initAdvancedVSeed,
4276
4127
  autoMeasures_autoMeasures,
4277
4128
  autoDimensions_autoDimensions,
4129
+ encodingForColumn,
4278
4130
  pivotAdapter([
4279
- reshapeTo2D1M
4131
+ reshapeWithEncoding
4280
4132
  ], [
4281
- pivotReshapeTo2D1M
4133
+ pivotReshapeWithEncoding
4282
4134
  ]),
4283
- encodingXY,
4284
4135
  sortXBandAxis,
4285
- sort_sortLegend,
4136
+ sortLegend_sortLegend,
4286
4137
  columnParallelConfig,
4287
4138
  theme_theme,
4288
4139
  markStyle_markStyle,
@@ -4293,20 +4144,19 @@
4293
4144
  ...spec
4294
4145
  };
4295
4146
  const { advancedVSeed } = context;
4296
- const { encoding, datasetReshapeInfo, dimensions } = advancedVSeed;
4297
- const { unfoldInfo } = datasetReshapeInfo[0];
4298
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4147
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4148
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4299
4149
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4300
4150
  result.type = 'bar';
4301
4151
  result.direction = 'vertical';
4302
4152
  result.xField = sameDimensionsMode ? [
4303
- encoding[0].x[0]
4153
+ unfoldInfo.encodingX
4304
4154
  ] : [
4305
- encoding[0].x[0],
4306
- unfoldInfo.groupId
4155
+ unfoldInfo.encodingX,
4156
+ unfoldInfo.encodingDetail
4307
4157
  ];
4308
- result.yField = encoding[0].y[0];
4309
- result.seriesField = encoding[0].group[0];
4158
+ result.yField = foldInfo.measureValue;
4159
+ result.seriesField = unfoldInfo.encodingColorId;
4310
4160
  result.padding = 0;
4311
4161
  result.region = [
4312
4162
  {
@@ -4373,14 +4223,14 @@
4373
4223
  initAdvancedVSeed_initAdvancedVSeed,
4374
4224
  autoMeasures_autoMeasures,
4375
4225
  autoDimensions_autoDimensions,
4226
+ encodingForColumn,
4376
4227
  pivotAdapter([
4377
- reshapeTo2D1M
4228
+ reshapeWithEncoding
4378
4229
  ], [
4379
- pivotReshapeTo2D1M
4230
+ pivotReshapeWithEncoding
4380
4231
  ]),
4381
- encodingXY,
4382
4232
  sortXBandAxis,
4383
- sort_sortLegend,
4233
+ sortLegend_sortLegend,
4384
4234
  columnPercentConfig,
4385
4235
  theme_theme,
4386
4236
  markStyle_markStyle,
@@ -4450,55 +4300,76 @@
4450
4300
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4451
4301
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4452
4302
  };
4453
- const encodingYX = (advancedVSeed)=>{
4454
- const result = {
4455
- ...advancedVSeed
4456
- };
4457
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
4458
- if (!datasetReshapeInfo || !dimensions) return result;
4459
- const yDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
4460
- const isZeroDimension = 0 === dimensions.length;
4461
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
4462
- const { foldInfo, unfoldInfo } = cur;
4463
- const y = [
4464
- isZeroDimension ? foldInfo.measureName : yDimension?.id
4465
- ];
4466
- const x = [
4467
- foldInfo.measureValue
4468
- ];
4469
- const group = [
4470
- unfoldInfo.groupId
4303
+ const encodingForBar = (advancedVSeed, context)=>{
4304
+ const { vseed } = context;
4305
+ const { dimensions } = advancedVSeed;
4306
+ if (!dimensions) return advancedVSeed;
4307
+ const encoding = vseed.encoding;
4308
+ if (encoding) {
4309
+ const y = encoding.y || [
4310
+ dimensions[0].id
4471
4311
  ];
4472
- const color = [
4473
- foldInfo.measureName
4312
+ const color = encoding.color || [
4313
+ (dimensions[1] || dimensions[0]).id
4474
4314
  ];
4475
- return [
4476
- ...prev,
4477
- {
4478
- x,
4315
+ const detail = encoding.detail || [];
4316
+ const mergedDetail = chunk_QJLMYOTX_i([
4317
+ ...color,
4318
+ ...detail
4319
+ ]);
4320
+ return {
4321
+ ...advancedVSeed,
4322
+ encoding: {
4323
+ ...encoding,
4479
4324
  y,
4480
- group,
4481
- color
4325
+ color,
4326
+ detail: mergedDetail
4482
4327
  }
4483
- ];
4484
- }, []);
4328
+ };
4329
+ }
4330
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4331
+ const mergedEncoding = {
4332
+ y: dimensions.slice(0, 1).map((item)=>item.id),
4333
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4334
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4335
+ tooltip: dimensions.map((item)=>item.id),
4336
+ label: [],
4337
+ row: [],
4338
+ column: []
4339
+ };
4485
4340
  return {
4486
- ...result,
4487
- encoding
4341
+ ...advancedVSeed,
4342
+ encoding: mergedEncoding
4343
+ };
4344
+ };
4345
+ const sortYBandAxis = (advancedVSeed, context)=>{
4346
+ const result = {
4347
+ ...advancedVSeed
4488
4348
  };
4349
+ const { vseed } = context;
4350
+ const { sort: sortAxis } = vseed;
4351
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
4352
+ const { unfoldInfo } = datasetReshapeInfo[0];
4353
+ const yField = unfoldInfo?.encodingY;
4354
+ if (!sortAxis || !yField) return advancedVSeed;
4355
+ if (!result.analysis) result.analysis = {};
4356
+ if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
4357
+ const axisOrderResult = calcOrder(sortAxis, yField, dataset.flat(2));
4358
+ result.analysis.orderMapping[yField] = axisOrderResult;
4359
+ return result;
4489
4360
  };
4490
4361
  const barAdvancedPipeline = [
4491
4362
  initAdvancedVSeed_initAdvancedVSeed,
4492
4363
  autoMeasures_autoMeasures,
4493
4364
  autoDimensions_autoDimensions,
4365
+ encodingForBar,
4494
4366
  pivotAdapter([
4495
- reshapeTo2D1M
4367
+ reshapeWithEncoding
4496
4368
  ], [
4497
- pivotReshapeTo2D1M
4369
+ pivotReshapeWithEncoding
4498
4370
  ]),
4499
- encodingYX,
4500
4371
  sortYBandAxis,
4501
- sort_sortLegend,
4372
+ sortLegend_sortLegend,
4502
4373
  barConfig,
4503
4374
  theme_theme,
4504
4375
  markStyle_markStyle,
@@ -4509,13 +4380,13 @@
4509
4380
  ...spec
4510
4381
  };
4511
4382
  const { advancedVSeed } = context;
4512
- const { encoding } = advancedVSeed;
4513
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4383
+ const { datasetReshapeInfo } = advancedVSeed;
4384
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4514
4385
  result.type = 'bar';
4515
4386
  result.direction = 'horizontal';
4516
- result.yField = encoding[0].y?.[0];
4517
- result.xField = encoding[0].x?.[0];
4518
- result.seriesField = encoding[0].group?.[0];
4387
+ result.yField = unfoldInfo.encodingY;
4388
+ result.xField = foldInfo.measureValue;
4389
+ result.seriesField = unfoldInfo.encodingColorId;
4519
4390
  result.padding = 0;
4520
4391
  result.region = [
4521
4392
  {
@@ -4527,11 +4398,12 @@
4527
4398
  };
4528
4399
  const datasetYX = (spec, context)=>{
4529
4400
  const { advancedVSeed, vseed } = context;
4530
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
4401
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
4402
+ const { unfoldInfo } = datasetReshapeInfo[0];
4531
4403
  const orderMapping = analysis?.orderMapping || {};
4532
- const angle = encoding[0]?.angle?.[0];
4533
- const y = encoding[0]?.y?.[0];
4534
- const group = encoding[0]?.group?.[0];
4404
+ const angle = unfoldInfo.encodingAngle;
4405
+ const y = unfoldInfo.encodingY;
4406
+ const colorId = unfoldInfo.encodingColorId;
4535
4407
  const id = datasetReshapeInfo[0].id;
4536
4408
  const fields = {};
4537
4409
  if (angle) fields[angle] = {
@@ -4548,14 +4420,14 @@
4548
4420
  sortIndex: 0
4549
4421
  };
4550
4422
  }
4551
- if (group) {
4552
- const order = orderMapping[group];
4553
- if (order) fields[group] = {
4423
+ if (colorId) {
4424
+ const order = orderMapping[colorId];
4425
+ if (order) fields[colorId] = {
4554
4426
  sortIndex: 0,
4555
4427
  domain: order,
4556
4428
  lockStatisticsByDomain: true
4557
4429
  };
4558
- else fields[group] = {
4430
+ else fields[colorId] = {
4559
4431
  sortIndex: 0
4560
4432
  };
4561
4433
  }
@@ -4843,14 +4715,14 @@
4843
4715
  initAdvancedVSeed_initAdvancedVSeed,
4844
4716
  autoMeasures_autoMeasures,
4845
4717
  autoDimensions_autoDimensions,
4718
+ encodingForBar,
4846
4719
  pivotAdapter([
4847
- reshapeTo2D1M
4720
+ reshapeWithEncoding
4848
4721
  ], [
4849
- pivotReshapeTo2D1M
4722
+ pivotReshapeWithEncoding
4850
4723
  ]),
4851
- encodingYX,
4852
4724
  sortYBandAxis,
4853
- sort_sortLegend,
4725
+ sortLegend_sortLegend,
4854
4726
  barParallelConfig,
4855
4727
  theme_theme,
4856
4728
  markStyle_markStyle,
@@ -4861,20 +4733,19 @@
4861
4733
  ...spec
4862
4734
  };
4863
4735
  const { advancedVSeed } = context;
4864
- const { encoding, datasetReshapeInfo, dimensions } = advancedVSeed;
4865
- const { unfoldInfo } = datasetReshapeInfo[0];
4866
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4736
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4737
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4867
4738
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4868
4739
  result.type = 'bar';
4869
4740
  result.direction = 'horizontal';
4870
4741
  result.yField = sameDimensionsMode ? [
4871
- encoding[0].y[0]
4742
+ unfoldInfo.encodingY
4872
4743
  ] : [
4873
- encoding[0].y[0],
4874
- unfoldInfo.groupId
4744
+ unfoldInfo.encodingY,
4745
+ unfoldInfo.encodingDetail
4875
4746
  ];
4876
- result.xField = encoding[0].x[0];
4877
- result.seriesField = encoding[0].group[0];
4747
+ result.xField = foldInfo.measureValue;
4748
+ result.seriesField = unfoldInfo.encodingColorId;
4878
4749
  result.padding = 0;
4879
4750
  result.region = [
4880
4751
  {
@@ -4940,14 +4811,14 @@
4940
4811
  initAdvancedVSeed_initAdvancedVSeed,
4941
4812
  autoMeasures_autoMeasures,
4942
4813
  autoDimensions_autoDimensions,
4814
+ encodingForBar,
4943
4815
  pivotAdapter([
4944
- reshapeTo2D1M
4816
+ reshapeWithEncoding
4945
4817
  ], [
4946
- pivotReshapeTo2D1M
4818
+ pivotReshapeWithEncoding
4947
4819
  ]),
4948
- encodingYX,
4949
4820
  sortYBandAxis,
4950
- sort_sortLegend,
4821
+ sortLegend_sortLegend,
4951
4822
  barPercentConfig,
4952
4823
  theme_theme,
4953
4824
  markStyle_markStyle,
@@ -5011,14 +4882,14 @@
5011
4882
  initAdvancedVSeed_initAdvancedVSeed,
5012
4883
  autoMeasures_autoMeasures,
5013
4884
  autoDimensions_autoDimensions,
4885
+ encodingForColumn,
5014
4886
  pivotAdapter([
5015
- reshapeTo2D1M0Name
4887
+ reshapeWithEncoding
5016
4888
  ], [
5017
- pivotReshapeTo2D1M0Name
4889
+ pivotReshapeWithEncoding
5018
4890
  ]),
5019
- encodingXY,
5020
4891
  sortXBandAxis,
5021
- sort_sortLegend,
4892
+ sortLegend_sortLegend,
5022
4893
  areaConfig,
5023
4894
  theme_theme,
5024
4895
  markStyle_markStyle,
@@ -5029,13 +4900,13 @@
5029
4900
  ...spec
5030
4901
  };
5031
4902
  const { advancedVSeed } = context;
5032
- const { encoding } = advancedVSeed;
5033
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4903
+ const { datasetReshapeInfo } = advancedVSeed;
4904
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
5034
4905
  result.type = 'area';
5035
4906
  result.direction = 'vertical';
5036
- result.xField = encoding[0].x[0];
5037
- result.yField = encoding[0].y[0];
5038
- result.seriesField = encoding[0].group[0];
4907
+ result.yField = foldInfo.measureValue;
4908
+ result.xField = unfoldInfo.encodingX;
4909
+ result.seriesField = unfoldInfo.encodingColorId;
5039
4910
  result.padding = 0;
5040
4911
  result.region = [
5041
4912
  {
@@ -5047,8 +4918,9 @@
5047
4918
  };
5048
4919
  const areaStyle_areaStyle = (spec, context)=>{
5049
4920
  const { advancedVSeed } = context;
5050
- const { markStyle, encoding, dataset } = advancedVSeed;
4921
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
5051
4922
  const { areaStyle } = markStyle;
4923
+ const { unfoldInfo } = datasetReshapeInfo[0];
5052
4924
  if (!areaStyle) return {
5053
4925
  ...spec,
5054
4926
  area: {
@@ -5061,7 +4933,7 @@
5061
4933
  const areaStyles = Array.isArray(areaStyle) ? areaStyle : [
5062
4934
  areaStyle
5063
4935
  ];
5064
- const group = encoding[0]?.group?.[0];
4936
+ const group = unfoldInfo.encodingColorId;
5065
4937
  const areaGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
5066
4938
  const customMap = areaStyles.reduce((result, style, index)=>{
5067
4939
  const { areaColor, areaColorOpacity, areaVisible = true } = style;
@@ -5155,14 +5027,14 @@
5155
5027
  initAdvancedVSeed_initAdvancedVSeed,
5156
5028
  autoMeasures_autoMeasures,
5157
5029
  autoDimensions_autoDimensions,
5030
+ encodingForColumn,
5158
5031
  pivotAdapter([
5159
- reshapeTo2D1M0Name
5032
+ reshapeWithEncoding
5160
5033
  ], [
5161
- pivotReshapeTo2D1M0Name
5034
+ pivotReshapeWithEncoding
5162
5035
  ]),
5163
- encodingXY,
5164
5036
  sortXBandAxis,
5165
- sort_sortLegend,
5037
+ sortLegend_sortLegend,
5166
5038
  areaPercentConfig,
5167
5039
  theme_theme,
5168
5040
  markStyle_markStyle,
@@ -5227,16 +5099,20 @@
5227
5099
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5228
5100
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5229
5101
  };
5230
- const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
5102
+ const autoScatterMeasures = (advancedVSeed, context)=>{
5231
5103
  const result = {
5232
5104
  ...advancedVSeed
5233
5105
  };
5234
5106
  const { vseed } = context;
5235
- const { measures, dataset } = vseed;
5107
+ const { dataset, scatterMeasures, measures } = vseed;
5236
5108
  if (!dataset) throw new Error('dataset is required');
5237
5109
  if (0 === dataset.length) return result;
5238
- if (measures) {
5239
- result.measures = auto2M1Group(measures);
5110
+ if (scatterMeasures) {
5111
+ result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5112
+ return result;
5113
+ }
5114
+ if (measures && measureDepth(measures) > 1) {
5115
+ result.measures = measures;
5240
5116
  return result;
5241
5117
  }
5242
5118
  const top100dataset = dataset.slice(0, 100);
@@ -5244,7 +5120,7 @@
5244
5120
  ...prev,
5245
5121
  ...cur
5246
5122
  }), {});
5247
- const newMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5123
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5248
5124
  '',
5249
5125
  null,
5250
5126
  void 0
@@ -5252,691 +5128,278 @@
5252
5128
  id: measure,
5253
5129
  alias: measure
5254
5130
  }));
5255
- result.measures = auto2M1Group(newMeasures);
5131
+ if (0 === newMeasures.length) result.measures = [];
5132
+ else if (1 === newMeasures.length) result.measures = [
5133
+ {
5134
+ id: 'primary',
5135
+ alias: 'primary',
5136
+ children: newMeasures
5137
+ }
5138
+ ];
5139
+ else if (newMeasures.length > 1) result.measures = [
5140
+ {
5141
+ id: 'primary',
5142
+ alias: 'primary',
5143
+ children: newMeasures.slice(0, 1)
5144
+ },
5145
+ {
5146
+ id: 'secondary',
5147
+ alias: 'secondary',
5148
+ children: newMeasures.slice(1)
5149
+ }
5150
+ ];
5256
5151
  return result;
5257
5152
  };
5258
- const auto2M1Group = (measures)=>{
5259
- const allMeasures = findAllMeasures(measures);
5260
- if (allMeasures.length <= 2) return allMeasures;
5261
- const groups = measures.filter((measure)=>'children' in measure);
5262
- const singleMeasures = measures.filter((measure)=>!('children' in measure));
5263
- for(let i = 0; i < singleMeasures.length; i += 2){
5264
- const group = autoMeasuresBy2M1Group_createEmptyMeasureGroup();
5265
- group.children = allMeasures.slice(i, i + 2);
5266
- groups.push(group);
5267
- }
5268
- return groups;
5269
- };
5270
- const autoMeasuresBy2M1Group_createEmptyMeasureGroup = ()=>({
5271
- id: '',
5272
- alias: '',
5273
- children: []
5153
+ const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
5154
+ const measureTree = scatterMeasures.map((item, index)=>{
5155
+ const { xMeasures, yMeasures } = item;
5156
+ const groupChildren = [];
5157
+ let id = '';
5158
+ if (xMeasures) {
5159
+ const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
5160
+ xMeasures
5161
+ ];
5162
+ const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
5163
+ id += alias;
5164
+ groupChildren.push({
5165
+ id: `${index}-x`,
5166
+ alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
5167
+ children: arrXMeasures
5168
+ });
5169
+ }
5170
+ if (yMeasures) {
5171
+ const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
5172
+ yMeasures
5173
+ ];
5174
+ const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
5175
+ id += alias;
5176
+ groupChildren.push({
5177
+ id: `${index}-y`,
5178
+ alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
5179
+ children: arrYMeasures
5180
+ });
5181
+ }
5182
+ return {
5183
+ id,
5184
+ alias: id,
5185
+ children: groupChildren
5186
+ };
5274
5187
  });
5275
- const dataReshapeFor1D_emptyReshapeResult = {
5276
- dataset: [],
5277
- foldInfo: {
5278
- foldMap: {},
5279
- measureId: '',
5280
- measureName: '',
5281
- measureValue: ''
5282
- },
5283
- unfoldInfo: {
5284
- groupName: '',
5285
- groupId: '',
5286
- colorItems: [],
5287
- colorIdMap: {}
5288
- }
5188
+ if (1 === scatterMeasures.length) return measureTree[0].children || [];
5189
+ return measureTree;
5289
5190
  };
5290
- const dataReshapeFor1D = (dataset, dimensions, measures, options)=>{
5291
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
5292
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D_emptyReshapeResult;
5293
- if (0 === dimensions.length) {
5294
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(dataset, [], [], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5191
+ const encodingForScatter = (advancedVSeed, context)=>{
5192
+ const { vseed } = context;
5193
+ const { dimensions } = advancedVSeed;
5194
+ if (!dimensions) return advancedVSeed;
5195
+ const encoding = vseed.encoding;
5196
+ if (encoding) {
5197
+ const detail = encoding.detail || [];
5198
+ const color = encoding.color || [
5199
+ (dimensions[1] || dimensions[0]).id
5200
+ ];
5201
+ const mergedDetail = chunk_QJLMYOTX_i([
5202
+ ...color,
5203
+ ...detail
5204
+ ]);
5295
5205
  return {
5296
- dataset: finalDataset,
5297
- foldInfo: {
5298
- foldMap: {},
5299
- measureId: foldMeasureId,
5300
- measureName: foldMeasureName,
5301
- measureValue: foldMeasureValue
5302
- },
5303
- unfoldInfo
5304
- };
5305
- }
5306
- {
5307
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(dataset, [
5308
- ...dimensions
5309
- ], [
5310
- {
5311
- id: foldMeasureValue,
5312
- alias: i18n`指标值`
5206
+ ...advancedVSeed,
5207
+ encoding: {
5208
+ ...encoding,
5209
+ color,
5210
+ detail: mergedDetail
5313
5211
  }
5314
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5315
- return {
5316
- dataset: finalDataset,
5317
- foldInfo: {
5318
- foldMap: {},
5319
- measureId: foldMeasureId,
5320
- measureName: foldMeasureName,
5321
- measureValue: foldMeasureValue
5322
- },
5323
- unfoldInfo
5324
5212
  };
5325
5213
  }
5214
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5215
+ const mergedEncoding = {
5216
+ color: dimensions.slice(0).map((item)=>item.id),
5217
+ detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5218
+ tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5219
+ label: [],
5220
+ row: [],
5221
+ column: []
5222
+ };
5223
+ return {
5224
+ ...advancedVSeed,
5225
+ encoding: mergedEncoding
5226
+ };
5326
5227
  };
5327
- const reshapeTo1D = (advancedVSeed, context)=>{
5228
+ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5328
5229
  const result = {
5329
5230
  ...advancedVSeed
5330
5231
  };
5331
5232
  const { vseed } = context;
5332
5233
  const { dataset } = vseed;
5333
- const { dimensions, measures } = advancedVSeed;
5334
- if (!measures || !dimensions || !dataset) return result;
5234
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5235
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5335
5236
  if (0 === measures.length) throw new Error('measures can not be empty');
5336
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, dimensions, measures);
5237
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
5238
+ const foldInfoList = [];
5239
+ const unfoldInfoList = [];
5240
+ const datasets = [];
5241
+ const xMeasures = measures[0];
5242
+ const yMeasures = measures[1] || xMeasures;
5243
+ if (xMeasures && xMeasures.children) {
5244
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5245
+ foldMeasureValue: FoldXMeasureValue,
5246
+ colorItemAsId: true
5247
+ });
5248
+ datasets.push(newDataset);
5249
+ foldInfoList.push(foldInfo);
5250
+ unfoldInfoList.push(unfoldInfo);
5251
+ }
5252
+ if (yMeasures && yMeasures.children) {
5253
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5254
+ foldMeasureValue: FoldYMeasureValue,
5255
+ colorItemAsId: true
5256
+ });
5257
+ datasets[0] = newDataset;
5258
+ foldInfoList.push(foldInfo);
5259
+ unfoldInfoList.push(unfoldInfo);
5260
+ }
5261
+ const unfoldInfo = {
5262
+ ...unfoldInfoList[0],
5263
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5264
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5265
+ ...prev,
5266
+ ...cur.colorIdMap
5267
+ }), {})
5268
+ };
5337
5269
  return {
5338
5270
  ...result,
5339
- dataset: newDatasets,
5271
+ dataset: datasets[0],
5340
5272
  datasetReshapeInfo: [
5341
5273
  {
5342
- id: '1D2M',
5274
+ id: String(chartType),
5343
5275
  index: 0,
5344
- foldInfo,
5345
- unfoldInfo
5276
+ foldInfo: foldInfoList[0],
5277
+ foldInfoList: foldInfoList,
5278
+ unfoldInfo: unfoldInfo
5346
5279
  }
5347
5280
  ]
5348
5281
  };
5349
5282
  };
5350
- const pivotReshapeTo1D = (advancedVSeed, context)=>{
5283
+ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5351
5284
  const result = {
5352
5285
  ...advancedVSeed
5353
5286
  };
5354
5287
  const { vseed } = context;
5355
5288
  const { dataset } = vseed;
5356
- const { measures } = advancedVSeed;
5357
- const dimensions = advancedVSeed.dimensions;
5358
- if (!measures || !dimensions) return result;
5289
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5290
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5359
5291
  const measureGroups = [];
5360
- if (measures) measures.forEach((measure)=>{
5361
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
5292
+ const depth = measureDepth(measures);
5293
+ if (3 === depth) measures.forEach((measure)=>{
5294
+ measureGroups.push(measure.children);
5362
5295
  });
5363
- const newDatasets = [];
5296
+ else if (2 === depth) measureGroups.push(measures);
5297
+ const datasetList = [];
5364
5298
  const datasetReshapeInfo = [];
5365
- measureGroups.forEach((measureGroup, index)=>{
5366
- const measures = measureGroup.children;
5367
- if (!measures) return;
5368
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5369
- const groupId = measureGroup.id;
5370
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, commonDimensions, measures, {
5371
- foldMeasureId: FoldMeasureId,
5372
- foldMeasureName: FoldMeasureName,
5373
- foldMeasureValue: FoldMeasureValue + groupId,
5374
- unfoldDimensionGroup: UnfoldDimensionGroup
5375
- });
5299
+ measureGroups.forEach((measures, index)=>{
5300
+ if (0 === measures.length) throw new Error('measures can not be empty');
5301
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
5302
+ const foldInfoList = [];
5303
+ const unfoldInfoList = [];
5304
+ const datasets = [];
5305
+ const xMeasures = measures[0];
5306
+ const yMeasures = measures[1] || xMeasures;
5307
+ if (xMeasures && xMeasures.children) {
5308
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5309
+ foldMeasureValue: `${FoldXMeasureValue}${index}`,
5310
+ colorItemAsId: true
5311
+ });
5312
+ datasets.push(newDataset);
5313
+ foldInfoList.push(foldInfo);
5314
+ unfoldInfoList.push(unfoldInfo);
5315
+ }
5316
+ if (yMeasures && yMeasures.children) {
5317
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
5318
+ foldMeasureValue: `${FoldYMeasureValue}${index}`,
5319
+ colorItemAsId: true
5320
+ });
5321
+ datasets.push(newDataset);
5322
+ foldInfoList.push(foldInfo);
5323
+ unfoldInfoList.push(unfoldInfo);
5324
+ }
5325
+ const unfoldInfo = {
5326
+ ...unfoldInfoList[0],
5327
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5328
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5329
+ ...prev,
5330
+ ...cur.colorIdMap
5331
+ }), {})
5332
+ };
5376
5333
  const reshapeInfo = {
5377
- id: groupId,
5334
+ id: `${chartType}-${index}`,
5378
5335
  index,
5379
- foldInfo,
5380
- unfoldInfo
5336
+ foldInfo: foldInfoList[0],
5337
+ foldInfoList: foldInfoList,
5338
+ unfoldInfo: unfoldInfo
5381
5339
  };
5382
- newDatasets.push(newSubDataset);
5383
5340
  datasetReshapeInfo.push(reshapeInfo);
5341
+ datasetList.push(datasets[0].map((d, index)=>({
5342
+ ...d,
5343
+ ...datasets[1]?.[index] || {}
5344
+ })));
5384
5345
  });
5385
5346
  return {
5386
5347
  ...result,
5387
- dataset: newDatasets,
5348
+ dataset: datasetList,
5388
5349
  datasetReshapeInfo: datasetReshapeInfo
5389
5350
  };
5390
5351
  };
5391
- const encodingAreaRange = (advancedVSeed)=>{
5392
- const result = {
5393
- ...advancedVSeed
5394
- };
5395
- const { datasetReshapeInfo, measures } = advancedVSeed;
5396
- if (!datasetReshapeInfo || !measures) return result;
5397
- const encoding = datasetReshapeInfo.reduce((prev, cur, index)=>{
5398
- const measure = measures[index];
5399
- if ('children' in measure) {
5400
- const m1 = measure.children?.[0];
5401
- const m2 = measure.children?.[1] || m1;
5402
- const { foldInfo, unfoldInfo } = cur;
5403
- const x = [
5404
- unfoldInfo.groupId
5405
- ];
5406
- const y = [
5407
- m1?.id,
5408
- m2?.id
5409
- ];
5410
- const group = [
5411
- unfoldInfo.groupId
5412
- ];
5413
- const color = [
5414
- foldInfo.measureName
5415
- ];
5416
- return [
5417
- ...prev,
5418
- {
5419
- x,
5420
- y,
5421
- group,
5422
- color
5423
- }
5424
- ];
5425
- }
5426
- {
5427
- const m1 = measures[index];
5428
- const m2 = measures[index + 1] || m1;
5429
- const { foldInfo, unfoldInfo } = cur;
5430
- const x = [
5431
- unfoldInfo.groupId
5432
- ];
5433
- const y = [
5434
- m1.id,
5435
- m2.id
5436
- ];
5437
- const group = [
5438
- unfoldInfo.groupId
5439
- ];
5440
- const color = [
5441
- foldInfo.measureName
5442
- ];
5443
- return [
5444
- ...prev,
5445
- {
5446
- x,
5447
- y,
5448
- group,
5449
- color
5450
- }
5451
- ];
5452
- }
5453
- }, []);
5454
- return {
5455
- ...result,
5456
- encoding
5457
- };
5458
- };
5459
- const areaRangeAdvancedPipeline = [
5352
+ const scatterAdvancedPipeline = [
5460
5353
  initAdvancedVSeed_initAdvancedVSeed,
5461
- autoMeasuresBy2M1Group,
5354
+ autoScatterMeasures,
5462
5355
  autoDimensions_autoDimensions,
5356
+ encodingForScatter,
5463
5357
  pivotAdapter([
5464
- reshapeTo1D
5358
+ reshapeWithScatterEncoding
5465
5359
  ], [
5466
- pivotReshapeTo1D
5360
+ pivotReshapeWithScatterEncoding
5467
5361
  ]),
5468
- encodingAreaRange,
5469
- sortXBandAxis,
5470
- areaConfig,
5362
+ scatterConfig,
5471
5363
  theme_theme,
5472
5364
  markStyle_markStyle,
5473
5365
  annotation_annotation
5474
5366
  ];
5475
- const series = (...args)=>{
5367
+ const initScatter = (spec, context)=>{
5476
5368
  const result = {
5477
- type: 'common',
5478
- padding: 0,
5479
- region: [
5480
- {
5481
- clip: true
5482
- }
5483
- ]
5369
+ ...spec
5484
5370
  };
5485
- return (_, context)=>{
5486
- result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5487
- return result;
5371
+ const { advancedVSeed } = context;
5372
+ const { datasetReshapeInfo } = advancedVSeed;
5373
+ const { unfoldInfo, foldInfoList } = datasetReshapeInfo[0];
5374
+ result.type = 'scatter';
5375
+ result.direction = 'vertical';
5376
+ result.xField = foldInfoList?.[0].measureValue;
5377
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5378
+ result.seriesField = unfoldInfo.encodingColorId;
5379
+ result.padding = 0;
5380
+ result.region = [
5381
+ {
5382
+ clip: true
5383
+ }
5384
+ ];
5385
+ result.animation = true;
5386
+ return result;
5387
+ };
5388
+ const datasetScatter = (spec, context)=>{
5389
+ const { advancedVSeed, vseed } = context;
5390
+ const { datasetReshapeInfo } = advancedVSeed;
5391
+ const id = datasetReshapeInfo[0].id;
5392
+ const fields = {};
5393
+ return {
5394
+ ...spec,
5395
+ data: {
5396
+ id,
5397
+ values: isPivotChart(vseed) ? void 0 : advancedVSeed.dataset.flat(),
5398
+ fields: fields
5399
+ }
5488
5400
  };
5489
5401
  };
5490
- const seriesDualAxis = (...args)=>{
5491
- const result = {
5492
- type: 'common',
5493
- padding: 0,
5494
- region: [
5495
- {
5496
- clip: true
5497
- }
5498
- ]
5499
- };
5500
- const createDualContext = (context, index)=>{
5501
- const { advancedVSeed } = context;
5502
- const dataset = advancedVSeed.dataset[index];
5503
- return {
5504
- ...context,
5505
- advancedVSeed: {
5506
- ...advancedVSeed,
5507
- dataset: dataset
5508
- }
5509
- };
5510
- };
5511
- return (_, context)=>{
5512
- result.series = args.map((pipeline, index)=>{
5513
- const seriesContext = createDualContext(context, index);
5514
- return execPipeline(pipeline, seriesContext, {});
5515
- });
5516
- return result;
5517
- };
5518
- };
5519
- const initAreaRange = (spec, context)=>{
5520
- const result = {
5521
- ...spec
5522
- };
5523
- const { advancedVSeed } = context;
5524
- const { encoding } = advancedVSeed;
5525
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5526
- const { color } = advancedVSeed.config.areaRange;
5527
- result.type = 'rangeArea';
5528
- result.direction = 'vertical';
5529
- result.stack = false;
5530
- result.xField = encoding[0].x[0];
5531
- result.yField = [
5532
- encoding[0].y[0],
5533
- encoding[0].y[1]
5534
- ];
5535
- result.animation = true;
5536
- result.area = {
5537
- style: {
5538
- fill: color.colorScheme?.[0]
5539
- }
5540
- };
5541
- return result;
5542
- };
5543
- const initAreaRangeLine1 = (spec, context)=>{
5544
- const result = {
5545
- ...spec
5546
- };
5547
- const { advancedVSeed } = context;
5548
- const { encoding } = advancedVSeed;
5549
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5550
- const { color } = advancedVSeed.config.areaRange;
5551
- result.type = 'line';
5552
- result.direction = 'vertical';
5553
- result.stack = false;
5554
- result.xField = encoding[0].x[0];
5555
- result.yField = [
5556
- encoding[0].y[0]
5557
- ];
5558
- result.animation = true;
5559
- result.line = {
5560
- style: {
5561
- stroke: color.colorScheme?.[0]
5562
- }
5563
- };
5564
- result.point = {
5565
- style: {
5566
- visible: false,
5567
- fill: color.colorScheme?.[0]
5568
- }
5569
- };
5570
- return result;
5571
- };
5572
- const initAreaRangeLine2 = (spec, context)=>{
5573
- const result = {
5574
- ...spec
5575
- };
5576
- const { advancedVSeed } = context;
5577
- const { encoding } = advancedVSeed;
5578
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5579
- const { color } = advancedVSeed.config.areaRange;
5580
- result.type = 'line';
5581
- result.direction = 'vertical';
5582
- result.stack = false;
5583
- result.xField = encoding[0].x[0];
5584
- result.yField = [
5585
- encoding[0].y[1]
5586
- ];
5587
- result.animation = true;
5588
- result.line = {
5589
- style: {
5590
- stroke: color.colorScheme?.[0]
5591
- }
5592
- };
5593
- result.point = {
5594
- style: {
5595
- visible: false,
5596
- fill: color.colorScheme?.[0]
5597
- }
5598
- };
5599
- return result;
5600
- };
5601
- const tooltipDisable = (spec)=>{
5602
- const result = {
5603
- ...spec
5604
- };
5605
- result.tooltip = {
5606
- visible: false
5607
- };
5608
- return result;
5609
- };
5610
- const tooltipAreaRange = (spec, context)=>{
5611
- const result = {
5612
- ...spec
5613
- };
5614
- const { advancedVSeed } = context;
5615
- const { measures, datasetReshapeInfo, chartType, locale, encoding } = advancedVSeed;
5616
- const baseConfig = advancedVSeed.config[chartType];
5617
- const { tooltip = {
5618
- enable: true
5619
- } } = baseConfig;
5620
- const { enable } = tooltip;
5621
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
5622
- const y = encoding[0]?.y || [];
5623
- result.tooltip = {
5624
- visible: enable,
5625
- dimension: {
5626
- content: [
5627
- {
5628
- visible: true,
5629
- key: (datum)=>datum && datum[groupName] || '',
5630
- value: (datum)=>{
5631
- if (!datum) return '';
5632
- const text = y.map((id)=>{
5633
- const value = datum[id];
5634
- const measure = findMeasureById(measures, id);
5635
- if (!measure) return String(value);
5636
- const { format = {}, autoFormat = true } = measure;
5637
- if (!chunk_VCYTMP4D_n(format)) {
5638
- const formatter = createFormatter(format);
5639
- return formatter(value);
5640
- }
5641
- if (autoFormat) return autoFormatter(value, locale);
5642
- return String(value);
5643
- });
5644
- return text.join(' ~ ');
5645
- },
5646
- shapeType: 'rectRound'
5647
- },
5648
- ...y.map((id)=>{
5649
- const measure = findMeasureById(measures, id);
5650
- return {
5651
- visible: true,
5652
- key: measure?.alias || id,
5653
- value: (datum)=>{
5654
- if (!datum) return '';
5655
- const value = datum[id];
5656
- const measure = findMeasureById(measures, id);
5657
- if (!measure) return String(value);
5658
- const { format = {}, autoFormat = true } = measure;
5659
- if (!chunk_VCYTMP4D_n(format)) {
5660
- const formatter = createFormatter(format);
5661
- return formatter(value);
5662
- }
5663
- if (autoFormat) return autoFormatter(value, locale);
5664
- return String(value);
5665
- },
5666
- shapeType: 'rectRound'
5667
- };
5668
- })
5669
- ]
5670
- }
5671
- };
5672
- return result;
5673
- };
5674
- const areaRange = [
5675
- series([
5676
- initAreaRange,
5677
- areaStyle_areaStyle
5678
- ], [
5679
- initAreaRangeLine1,
5680
- lineStyle_lineStyle,
5681
- pointStyle_pointStyle,
5682
- pointStateDimensionHover,
5683
- tooltipDisable
5684
- ], [
5685
- initAreaRangeLine2,
5686
- lineStyle_lineStyle,
5687
- pointStyle_pointStyle,
5688
- pointStateDimensionHover,
5689
- tooltipDisable
5690
- ]),
5691
- datasetXY,
5692
- progressive,
5693
- background_backgroundColor,
5694
- xBand,
5695
- yLinear,
5696
- label_label,
5697
- tooltipAreaRange,
5698
- verticalCrosshairLine,
5699
- annotationPoint_annotationPoint,
5700
- annotationVerticalLine_annotationVerticalLine,
5701
- annotationHorizontalLine_annotationHorizontalLine,
5702
- annotationArea_annotationArea
5703
- ];
5704
- const pivotAreaRange = [
5705
- initPivot,
5706
- pivotGridStyle,
5707
- pivotIndicators_pivotIndicatorsAsRow,
5708
- datasetPivot,
5709
- pivotIndicators_pivotIndicators([
5710
- series([
5711
- initAreaRange,
5712
- areaStyle_areaStyle
5713
- ], [
5714
- initAreaRangeLine1,
5715
- lineStyle_lineStyle,
5716
- pointStyle_pointStyle,
5717
- pointStateDimensionHover,
5718
- tooltipDisable
5719
- ], [
5720
- initAreaRangeLine2,
5721
- lineStyle_lineStyle,
5722
- pointStyle_pointStyle,
5723
- pointStateDimensionHover,
5724
- tooltipDisable
5725
- ]),
5726
- background_backgroundColor,
5727
- datasetXY,
5728
- progressive,
5729
- xBand,
5730
- yLinear,
5731
- label_label,
5732
- tooltipAreaRange,
5733
- verticalCrosshairLine,
5734
- annotationPoint_annotationPoint,
5735
- annotationVerticalLine_annotationVerticalLine,
5736
- annotationHorizontalLine_annotationHorizontalLine,
5737
- annotationArea_annotationArea
5738
- ]),
5739
- pivotRowDimensions,
5740
- pivotColumnDimensions
5741
- ];
5742
- const areaRangeSpecPipeline = [
5743
- pivotAdapter_pivotAdapter(areaRange, pivotAreaRange)
5744
- ];
5745
- const registerAreaRange = ()=>{
5746
- Builder._advancedPipelineMap.areaRange = areaRangeAdvancedPipeline;
5747
- Builder._specPipelineMap.areaRange = areaRangeSpecPipeline;
5748
- };
5749
- const dataReshapeFor1D2M_emptyReshapeResult = {
5750
- dataset: [],
5751
- foldInfo: {
5752
- foldMap: {},
5753
- measureId: '',
5754
- measureName: '',
5755
- measureValue: ''
5756
- },
5757
- unfoldInfo: {
5758
- groupName: '',
5759
- groupId: '',
5760
- colorItems: [],
5761
- colorIdMap: {}
5762
- }
5763
- };
5764
- const dataReshapeFor1D2M = (dataset, dimensions, measures, options)=>{
5765
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
5766
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D2M_emptyReshapeResult;
5767
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures.length > 1 ? measures.slice(1) : measures, foldMeasureId, foldMeasureName, foldMeasureValue);
5768
- if (0 === dimensions.length) {
5769
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5770
- {
5771
- id: foldMeasureValue,
5772
- alias: i18n`指标值`,
5773
- location: 'dimension'
5774
- }
5775
- ], [
5776
- {
5777
- id: foldMeasureValue,
5778
- alias: i18n`指标值`
5779
- }
5780
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5781
- return {
5782
- dataset: finalDataset,
5783
- foldInfo,
5784
- unfoldInfo
5785
- };
5786
- }
5787
- {
5788
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5789
- ...dimensions
5790
- ], [
5791
- {
5792
- id: foldMeasureValue,
5793
- alias: i18n`指标值`
5794
- }
5795
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5796
- return {
5797
- dataset: finalDataset,
5798
- foldInfo,
5799
- unfoldInfo
5800
- };
5801
- }
5802
- };
5803
- const reshapeTo1D2M = (advancedVSeed, context)=>{
5804
- const result = {
5805
- ...advancedVSeed
5806
- };
5807
- const { vseed } = context;
5808
- const { dataset } = vseed;
5809
- const { dimensions, measures } = advancedVSeed;
5810
- if (!measures || !dimensions || !dataset) return result;
5811
- if (0 === measures.length) throw new Error('measures can not be empty');
5812
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, dimensions, measures);
5813
- return {
5814
- ...result,
5815
- dataset: newDatasets,
5816
- datasetReshapeInfo: [
5817
- {
5818
- id: '1D2M',
5819
- index: 0,
5820
- foldInfo,
5821
- unfoldInfo
5822
- }
5823
- ]
5824
- };
5825
- };
5826
- const pivotReshapeTo1D2M = (advancedVSeed, context)=>{
5827
- const result = {
5828
- ...advancedVSeed
5829
- };
5830
- const { vseed } = context;
5831
- const { dataset } = vseed;
5832
- const { measures } = advancedVSeed;
5833
- const dimensions = advancedVSeed.dimensions;
5834
- if (!measures || !dimensions) return result;
5835
- const measureGroups = [];
5836
- if (measures) measures.forEach((measure)=>{
5837
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
5838
- });
5839
- const newDatasets = [];
5840
- const datasetReshapeInfo = [];
5841
- measureGroups.forEach((measureGroup, index)=>{
5842
- const measures = measureGroup.children;
5843
- if (!measures) return;
5844
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5845
- const groupId = measureGroup.id;
5846
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, commonDimensions, measures, {
5847
- foldMeasureId: FoldMeasureId,
5848
- foldMeasureName: FoldMeasureName,
5849
- foldMeasureValue: FoldMeasureValue + groupId,
5850
- unfoldDimensionGroup: UnfoldDimensionGroup
5851
- });
5852
- const reshapeInfo = {
5853
- id: groupId,
5854
- index,
5855
- foldInfo,
5856
- unfoldInfo
5857
- };
5858
- newDatasets.push(newSubDataset);
5859
- datasetReshapeInfo.push(reshapeInfo);
5860
- });
5861
- return {
5862
- ...result,
5863
- dataset: newDatasets,
5864
- datasetReshapeInfo: datasetReshapeInfo
5865
- };
5866
- };
5867
- const encodingYY = (advancedVSeed)=>{
5868
- const result = {
5869
- ...advancedVSeed
5870
- };
5871
- const { datasetReshapeInfo, measures } = advancedVSeed;
5872
- if (!datasetReshapeInfo || !measures) return result;
5873
- const firstMeasure = findFirstMeasure(measures);
5874
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
5875
- const { foldInfo, unfoldInfo } = cur;
5876
- const x = [
5877
- firstMeasure?.id
5878
- ];
5879
- const y = [
5880
- foldInfo.measureValue
5881
- ];
5882
- const group = [
5883
- unfoldInfo.groupId
5884
- ];
5885
- const color = [
5886
- unfoldInfo.groupId
5887
- ];
5888
- return [
5889
- ...prev,
5890
- {
5891
- x,
5892
- y,
5893
- group,
5894
- color
5895
- }
5896
- ];
5897
- }, []);
5898
- return {
5899
- ...result,
5900
- encoding
5901
- };
5902
- };
5903
- const scatterAdvancedPipeline = [
5904
- initAdvancedVSeed_initAdvancedVSeed,
5905
- autoMeasures_autoMeasures,
5906
- autoDimensions_autoDimensions,
5907
- pivotAdapter([
5908
- reshapeTo1D2M
5909
- ], [
5910
- pivotReshapeTo1D2M
5911
- ]),
5912
- encodingYY,
5913
- scatterConfig,
5914
- theme_theme,
5915
- markStyle_markStyle,
5916
- annotation_annotation
5917
- ];
5918
- const initScatter = (spec, context)=>{
5919
- const result = {
5920
- ...spec
5921
- };
5922
- const { advancedVSeed } = context;
5923
- const { encoding } = advancedVSeed;
5924
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5925
- result.type = 'scatter';
5926
- result.direction = 'vertical';
5927
- result.xField = encoding[0].x[0];
5928
- result.yField = encoding[0].y[0];
5929
- result.seriesField = encoding[0].group[0];
5930
- result.padding = 0;
5931
- result.region = [
5932
- {
5933
- clip: true
5934
- }
5935
- ];
5936
- result.animation = true;
5937
- return result;
5938
- };
5939
- const horizontalCrosshairLine = (spec, context)=>{
5402
+ const horizontalCrosshairLine = (spec, context)=>{
5940
5403
  const result = {
5941
5404
  ...spec
5942
5405
  };
@@ -5984,7 +5447,7 @@
5984
5447
  initScatter,
5985
5448
  color_color,
5986
5449
  background_backgroundColor,
5987
- datasetXY,
5450
+ datasetScatter,
5988
5451
  progressive,
5989
5452
  xLinear,
5990
5453
  yLinear,
@@ -6009,7 +5472,7 @@
6009
5472
  initScatter,
6010
5473
  color_color,
6011
5474
  background_backgroundColor,
6012
- datasetXY,
5475
+ datasetScatter,
6013
5476
  progressive,
6014
5477
  xLinear,
6015
5478
  yLinear,
@@ -6035,41 +5498,169 @@
6035
5498
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
6036
5499
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
6037
5500
  };
6038
- const reshapeTo2D2M = (advancedVSeed, context)=>{
5501
+ const autoDualMeasures = (advancedVSeed, context)=>{
5502
+ const result = {
5503
+ ...advancedVSeed
5504
+ };
5505
+ const { vseed } = context;
5506
+ const { dataset, dualMeasures, measures } = vseed;
5507
+ if (!dataset) throw new Error('dataset is required');
5508
+ if (0 === dataset.length) return result;
5509
+ if (dualMeasures) {
5510
+ result.measures = dualMeasuresToMeasureTree(dualMeasures);
5511
+ return result;
5512
+ }
5513
+ if (measures && measureDepth(measures) > 1) {
5514
+ result.measures = measures;
5515
+ return result;
5516
+ }
5517
+ const top100dataset = dataset.slice(0, 100);
5518
+ const sample = top100dataset.reduce((prev, cur)=>({
5519
+ ...prev,
5520
+ ...cur
5521
+ }), {});
5522
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5523
+ '',
5524
+ null,
5525
+ void 0
5526
+ ].includes(key)).map((measure)=>({
5527
+ id: measure,
5528
+ alias: measure
5529
+ }));
5530
+ if (0 === newMeasures.length) result.measures = [];
5531
+ else if (1 === newMeasures.length) result.measures = [
5532
+ {
5533
+ id: 'primary',
5534
+ alias: 'primary',
5535
+ children: newMeasures
5536
+ }
5537
+ ];
5538
+ else if (newMeasures.length > 1) result.measures = [
5539
+ {
5540
+ id: 'primary',
5541
+ alias: 'primary',
5542
+ children: newMeasures.slice(0, 1)
5543
+ },
5544
+ {
5545
+ id: 'secondary',
5546
+ alias: 'secondary',
5547
+ children: newMeasures.slice(1)
5548
+ }
5549
+ ];
5550
+ return result;
5551
+ };
5552
+ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5553
+ const measureTree = dualMeasures.map((item, index)=>{
5554
+ const { primaryMeasures, secondaryMeasures } = item;
5555
+ const groupChildren = [];
5556
+ let id = '';
5557
+ if (primaryMeasures) {
5558
+ const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5559
+ primaryMeasures
5560
+ ];
5561
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5562
+ id += alias;
5563
+ groupChildren.push({
5564
+ id: `${index}-primary`,
5565
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5566
+ children: arrPrimaryMeasures
5567
+ });
5568
+ }
5569
+ if (secondaryMeasures) {
5570
+ const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
5571
+ secondaryMeasures
5572
+ ];
5573
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5574
+ id += alias;
5575
+ groupChildren.push({
5576
+ id: `${index}-secondary`,
5577
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5578
+ children: arrSecondaryMeasures
5579
+ });
5580
+ }
5581
+ return {
5582
+ id,
5583
+ alias: id,
5584
+ children: groupChildren
5585
+ };
5586
+ });
5587
+ if (1 === dualMeasures.length) return measureTree[0].children || [];
5588
+ return measureTree;
5589
+ };
5590
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5591
+ const { vseed } = context;
5592
+ const { dimensions } = advancedVSeed;
5593
+ if (!dimensions) return advancedVSeed;
5594
+ const encoding = vseed.encoding;
5595
+ if (encoding) {
5596
+ const x = encoding.x || [
5597
+ dimensions[0].id
5598
+ ];
5599
+ const color = encoding.color || [
5600
+ (dimensions[1] || dimensions[0]).id
5601
+ ];
5602
+ const detail = encoding.detail || [];
5603
+ const mergedDetail = chunk_QJLMYOTX_i([
5604
+ ...color,
5605
+ ...detail
5606
+ ]);
5607
+ return {
5608
+ ...advancedVSeed,
5609
+ encoding: {
5610
+ ...encoding,
5611
+ x,
5612
+ color,
5613
+ detail: mergedDetail
5614
+ }
5615
+ };
5616
+ }
5617
+ const mergedEncoding = {
5618
+ x: dimensions.slice(0, 1).map((item)=>item.id),
5619
+ color: dimensions.slice(1).map((item)=>item.id),
5620
+ detail: dimensions.slice(1).map((item)=>item.id),
5621
+ tooltip: dimensions.map((item)=>item.id),
5622
+ label: [],
5623
+ row: [],
5624
+ column: []
5625
+ };
5626
+ return {
5627
+ ...advancedVSeed,
5628
+ encoding: mergedEncoding
5629
+ };
5630
+ };
5631
+ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
6039
5632
  const result = {
6040
5633
  ...advancedVSeed
6041
5634
  };
6042
5635
  const { vseed } = context;
6043
5636
  const { dataset } = vseed;
6044
- const { dimensions, measures } = advancedVSeed;
6045
- if (!measures || !dimensions || !dataset) return result;
5637
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5638
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6046
5639
  if (0 === measures.length) throw new Error('measures can not be empty');
6047
5640
  if (measures.length > 2) throw new Error('measures can not be more than 2');
6048
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
6049
- const datasets = [];
6050
5641
  const foldInfoList = [];
6051
5642
  const unfoldInfoList = [];
5643
+ const datasets = [];
6052
5644
  const primaryMeasures = measures[0];
6053
5645
  const secondaryMeasures = measures[1] || [];
6054
5646
  if (primaryMeasures && primaryMeasures.children) {
6055
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5647
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6056
5648
  foldMeasureValue: FoldPrimaryMeasureValue
6057
5649
  });
6058
- datasets.push(newDatasets);
5650
+ datasets.push(newDataset);
6059
5651
  foldInfoList.push(foldInfo);
6060
5652
  unfoldInfoList.push(unfoldInfo);
6061
5653
  }
6062
5654
  if (secondaryMeasures && secondaryMeasures.children) {
6063
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5655
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6064
5656
  foldMeasureValue: FoldSecondaryMeasureValue
6065
5657
  });
6066
- datasets.push(newDatasets);
5658
+ datasets.push(newDataset);
6067
5659
  foldInfoList.push(foldInfo);
6068
5660
  unfoldInfoList.push(unfoldInfo);
6069
5661
  }
6070
5662
  const unfoldInfo = {
6071
- groupName: unfoldInfoList[0].groupName,
6072
- groupId: unfoldInfoList[0].groupId,
5663
+ ...unfoldInfoList[0],
6073
5664
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6074
5665
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6075
5666
  ...prev,
@@ -6081,7 +5672,7 @@
6081
5672
  dataset: datasets,
6082
5673
  datasetReshapeInfo: [
6083
5674
  {
6084
- id: '2D2M',
5675
+ id: String(chartType),
6085
5676
  index: 0,
6086
5677
  foldInfo: foldInfoList[0],
6087
5678
  foldInfoList: foldInfoList,
@@ -6090,46 +5681,48 @@
6090
5681
  ]
6091
5682
  };
6092
5683
  };
6093
- const pivotReshapeTo2D2M = (advancedVSeed, context)=>{
5684
+ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
6094
5685
  const result = {
6095
5686
  ...advancedVSeed
6096
5687
  };
6097
5688
  const { vseed } = context;
6098
5689
  const { dataset } = vseed;
6099
- const { dimensions, measures } = advancedVSeed;
6100
- if (!measures || !dimensions || !dataset) return result;
6101
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5690
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5691
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6102
5692
  const datasetList = [];
6103
5693
  const datasetReshapeInfo = [];
6104
- measures.forEach((measureGroup, index)=>{
6105
- const measures = measureGroup.children || [];
5694
+ const measureGroups = [];
5695
+ const depth = measureDepth(measures);
5696
+ if (3 === depth) measures.forEach((measure)=>{
5697
+ measureGroups.push(measure.children);
5698
+ });
5699
+ else if (2 === depth) measureGroups.push(measures);
5700
+ measureGroups.forEach((measures, index)=>{
6106
5701
  if (0 === measures.length) throw new Error('measures can not be empty');
6107
5702
  if (measures.length > 2) throw new Error('measures can not be more than 2');
6108
- const datasets = [];
6109
5703
  const foldInfoList = [];
6110
5704
  const unfoldInfoList = [];
5705
+ const datasets = [];
6111
5706
  const primaryMeasures = measures[0];
6112
- const secondaryMeasures = measures[1] || measures[0];
5707
+ const secondaryMeasures = measures[1] || [];
6113
5708
  if (primaryMeasures && primaryMeasures.children) {
6114
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5709
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6115
5710
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
6116
5711
  });
6117
- datasets.push(newDatasets);
5712
+ datasets.push(newDataset);
6118
5713
  foldInfoList.push(foldInfo);
6119
5714
  unfoldInfoList.push(unfoldInfo);
6120
5715
  }
6121
5716
  if (secondaryMeasures && secondaryMeasures.children) {
6122
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5717
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6123
5718
  foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
6124
5719
  });
6125
- datasets.push(newDatasets);
5720
+ datasets.push(newDataset);
6126
5721
  foldInfoList.push(foldInfo);
6127
5722
  unfoldInfoList.push(unfoldInfo);
6128
5723
  }
6129
- datasetList.push(datasets.flat(2));
6130
5724
  const unfoldInfo = {
6131
- groupName: unfoldInfoList[0].groupName,
6132
- groupId: unfoldInfoList[0].groupId,
5725
+ ...unfoldInfoList[0],
6133
5726
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6134
5727
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6135
5728
  ...prev,
@@ -6137,53 +5730,19 @@
6137
5730
  }), {})
6138
5731
  };
6139
5732
  const reshapeInfo = {
6140
- id: `2D2M-${index}`,
5733
+ id: `${chartType}-${index}`,
6141
5734
  index,
6142
5735
  foldInfo: foldInfoList[0],
6143
- unfoldInfo: unfoldInfo,
6144
- foldInfoList: foldInfoList
5736
+ foldInfoList: foldInfoList,
5737
+ unfoldInfo: unfoldInfo
6145
5738
  };
6146
5739
  datasetReshapeInfo.push(reshapeInfo);
5740
+ datasetList.push(datasets.flat(2));
6147
5741
  });
6148
5742
  return {
6149
5743
  ...result,
6150
5744
  dataset: datasetList,
6151
- datasetReshapeInfo
6152
- };
6153
- };
6154
- const encodingXYY = (advancedVSeed)=>{
6155
- const result = {
6156
- ...advancedVSeed
6157
- };
6158
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
6159
- if (!datasetReshapeInfo || !dimensions) return result;
6160
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
6161
- const isZeroDimension = 0 === dimensions.length;
6162
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
6163
- const { foldInfoList, unfoldInfo } = cur;
6164
- const x = [
6165
- isZeroDimension ? foldInfoList[0].measureName : xDimension?.id
6166
- ];
6167
- const y = foldInfoList.map((d)=>d.measureValue);
6168
- const group = [
6169
- unfoldInfo.groupId
6170
- ];
6171
- const color = [
6172
- foldInfoList[0].measureName
6173
- ];
6174
- return [
6175
- ...prev,
6176
- {
6177
- x,
6178
- y,
6179
- group,
6180
- color
6181
- }
6182
- ];
6183
- }, []);
6184
- return {
6185
- ...result,
6186
- encoding
5745
+ datasetReshapeInfo: datasetReshapeInfo
6187
5746
  };
6188
5747
  };
6189
5748
  const dualAxisConfig = (advancedVSeed, context)=>{
@@ -6212,125 +5771,80 @@
6212
5771
  };
6213
5772
  return result;
6214
5773
  };
6215
- const autoDualMeasures = (advancedVSeed, context)=>{
6216
- const result = {
6217
- ...advancedVSeed
6218
- };
6219
- const { vseed } = context;
6220
- const { dataset, dualMeasures, measures } = vseed;
6221
- if (!dataset) throw new Error('dataset is required');
6222
- if (0 === dataset.length) return result;
6223
- if (dualMeasures) {
6224
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
6225
- return result;
6226
- }
6227
- if (measures && measureDepth(measures) > 1) {
6228
- result.measures = measures;
6229
- return result;
6230
- }
6231
- const top100dataset = dataset.slice(0, 100);
6232
- const sample = top100dataset.reduce((prev, cur)=>({
6233
- ...prev,
6234
- ...cur
6235
- }), {});
6236
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
6237
- '',
6238
- null,
6239
- void 0
6240
- ].includes(key)).map((measure)=>({
6241
- id: measure,
6242
- alias: measure
6243
- }));
6244
- if (0 === newMeasures.length) result.measures = [];
6245
- else if (1 === newMeasures.length) result.measures = [
6246
- {
6247
- id: 'primary',
6248
- alias: 'primary',
6249
- children: newMeasures
6250
- }
6251
- ];
6252
- else if (newMeasures.length > 1) result.measures = [
6253
- {
6254
- id: 'primary',
6255
- alias: 'primary',
6256
- children: newMeasures.slice(0, 1)
6257
- },
6258
- {
6259
- id: 'secondary',
6260
- alias: 'secondary',
6261
- children: newMeasures.slice(1)
6262
- }
6263
- ];
6264
- return result;
6265
- };
6266
- const dualMeasuresToMeasureTree = (dualMeasures)=>{
6267
- const measureTree = dualMeasures.map((item, index)=>{
6268
- const { primaryMeasures, secondaryMeasures } = item;
6269
- const groupChildren = [];
6270
- let id = '';
6271
- if (primaryMeasures) {
6272
- const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
6273
- primaryMeasures
6274
- ];
6275
- const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
6276
- id += alias;
6277
- groupChildren.push({
6278
- id: `${index}-primary`,
6279
- alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
6280
- children: arrPrimaryMeasures
6281
- });
6282
- }
6283
- if (secondaryMeasures) {
6284
- const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
6285
- secondaryMeasures
6286
- ];
6287
- const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
6288
- id += alias;
6289
- groupChildren.push({
6290
- id: `${index}-secondary`,
6291
- alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
6292
- children: arrSecondaryMeasures
6293
- });
6294
- }
6295
- return {
6296
- id,
6297
- alias: id,
6298
- children: groupChildren
6299
- };
6300
- });
6301
- if (1 === dualMeasures.length) return measureTree[0].children || [];
6302
- return measureTree;
6303
- };
6304
5774
  const dualAxisAdvancedPipeline = [
6305
5775
  initAdvancedVSeed_initAdvancedVSeed,
6306
5776
  autoDualMeasures,
6307
5777
  autoDimensions_autoDimensions,
5778
+ encodingForDualAxis,
6308
5779
  pivotAdapter([
6309
- reshapeTo2D2M
5780
+ reshapeWithDualEncoding
6310
5781
  ], [
6311
- pivotReshapeTo2D2M
5782
+ pivotReshapeWithDualEncoding
6312
5783
  ]),
6313
- encodingXYY,
6314
5784
  sortXBandAxis,
6315
- sort_sortLegend,
5785
+ sortLegend_sortLegend,
6316
5786
  dualAxisConfig,
6317
5787
  theme_theme,
6318
5788
  markStyle_markStyle,
6319
5789
  annotation_annotation
6320
5790
  ];
5791
+ const series = (...args)=>{
5792
+ const result = {
5793
+ type: 'common',
5794
+ padding: 0,
5795
+ region: [
5796
+ {
5797
+ clip: true
5798
+ }
5799
+ ]
5800
+ };
5801
+ return (_, context)=>{
5802
+ result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5803
+ return result;
5804
+ };
5805
+ };
5806
+ const seriesDualAxis = (...args)=>{
5807
+ const result = {
5808
+ type: 'common',
5809
+ padding: 0,
5810
+ region: [
5811
+ {
5812
+ clip: true
5813
+ }
5814
+ ]
5815
+ };
5816
+ const createDualContext = (context, index)=>{
5817
+ const { advancedVSeed } = context;
5818
+ const dataset = advancedVSeed.dataset[index];
5819
+ return {
5820
+ ...context,
5821
+ advancedVSeed: {
5822
+ ...advancedVSeed,
5823
+ dataset: dataset
5824
+ }
5825
+ };
5826
+ };
5827
+ return (_, context)=>{
5828
+ result.series = args.map((pipeline, index)=>{
5829
+ const seriesContext = createDualContext(context, index);
5830
+ return execPipeline(pipeline, seriesContext, {});
5831
+ });
5832
+ return result;
5833
+ };
5834
+ };
6321
5835
  const initDualAxisPrimary = (spec, context)=>{
6322
5836
  const result = {
6323
5837
  ...spec
6324
5838
  };
6325
5839
  const { advancedVSeed } = context;
6326
- const { encoding, datasetReshapeInfo } = advancedVSeed;
6327
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
6328
- result.id = `${datasetReshapeInfo[0].id}-primary-series`;
5840
+ const { datasetReshapeInfo } = advancedVSeed;
5841
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5842
+ result.id = `${id}-primary-series`;
6329
5843
  result.type = 'bar';
6330
5844
  result.direction = 'vertical';
6331
- result.xField = encoding[0].x[0];
6332
- result.yField = encoding[0].y[0];
6333
- result.seriesField = encoding[0].group[0];
5845
+ result.xField = unfoldInfo.encodingX;
5846
+ result.seriesField = unfoldInfo.encodingColorId;
5847
+ result.yField = foldInfoList?.[0].measureValue;
6334
5848
  result.animation = true;
6335
5849
  return result;
6336
5850
  };
@@ -6339,14 +5853,14 @@
6339
5853
  ...spec
6340
5854
  };
6341
5855
  const { advancedVSeed } = context;
6342
- const { encoding, datasetReshapeInfo } = advancedVSeed;
6343
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
6344
- result.id = `${datasetReshapeInfo[0].id}-secondary-series`;
5856
+ const { datasetReshapeInfo } = advancedVSeed;
5857
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5858
+ result.id = `${id}-secondary-series`;
6345
5859
  result.type = 'line';
6346
5860
  result.direction = 'vertical';
6347
- result.xField = encoding[0].x[0];
6348
- result.yField = encoding[0].y[1];
6349
- result.seriesField = encoding[0].group[0];
5861
+ result.xField = unfoldInfo.encodingX;
5862
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5863
+ result.seriesField = unfoldInfo.encodingColorId;
6350
5864
  result.animation = true;
6351
5865
  return result;
6352
5866
  };
@@ -6378,10 +5892,10 @@
6378
5892
  case 'columnParallel':
6379
5893
  {
6380
5894
  const columnSpec = result;
6381
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5895
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
6382
5896
  else if (columnSpec.xField) columnSpec.xField = [
6383
5897
  columnSpec.xField,
6384
- datasetReshapeInfo[0].unfoldInfo.groupId
5898
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6385
5899
  ];
6386
5900
  columnSpec.type = 'bar';
6387
5901
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6434,10 +5948,10 @@
6434
5948
  case 'columnParallel':
6435
5949
  {
6436
5950
  const columnSpec = result;
6437
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5951
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
6438
5952
  else if (columnSpec.xField) columnSpec.xField = [
6439
5953
  columnSpec.xField,
6440
- datasetReshapeInfo[0].unfoldInfo.groupId
5954
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6441
5955
  ];
6442
5956
  columnSpec.type = 'bar';
6443
5957
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6464,10 +5978,11 @@
6464
5978
  };
6465
5979
  const datasetPrimary = (spec, context)=>{
6466
5980
  const { advancedVSeed, vseed } = context;
6467
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
5981
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6468
5982
  const orderMapping = analysis?.orderMapping || {};
6469
- const x = encoding[0]?.x?.[0];
6470
- const group = encoding[0]?.group?.[0];
5983
+ const { unfoldInfo } = datasetReshapeInfo[0];
5984
+ const x = unfoldInfo.encodingX;
5985
+ const colorId = unfoldInfo.encodingColorId;
6471
5986
  const id = datasetReshapeInfo[0].id;
6472
5987
  const fields = {};
6473
5988
  if (x) {
@@ -6481,14 +5996,14 @@
6481
5996
  sortIndex: 0
6482
5997
  };
6483
5998
  }
6484
- if (group) {
6485
- const order = orderMapping[group];
6486
- if (order) fields[group] = {
5999
+ if (colorId) {
6000
+ const order = orderMapping[colorId];
6001
+ if (order) fields[colorId] = {
6487
6002
  sortIndex: 0,
6488
6003
  domain: order,
6489
6004
  lockStatisticsByDomain: true
6490
6005
  };
6491
- else fields[group] = {
6006
+ else fields[colorId] = {
6492
6007
  sortIndex: 0
6493
6008
  };
6494
6009
  }
@@ -6503,10 +6018,11 @@
6503
6018
  };
6504
6019
  const datasetSecondary = (spec, context)=>{
6505
6020
  const { advancedVSeed, vseed } = context;
6506
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
6021
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6507
6022
  const orderMapping = analysis?.orderMapping || {};
6508
- const x = encoding[0]?.x?.[0];
6509
- const group = encoding[0]?.group?.[0];
6023
+ const { unfoldInfo } = datasetReshapeInfo[0];
6024
+ const x = unfoldInfo.encodingX;
6025
+ const colorId = unfoldInfo.encodingColorId;
6510
6026
  const id = datasetReshapeInfo[0].id;
6511
6027
  const fields = {};
6512
6028
  if (x) {
@@ -6520,14 +6036,14 @@
6520
6036
  sortIndex: 0
6521
6037
  };
6522
6038
  }
6523
- if (group) {
6524
- const order = orderMapping[group];
6525
- if (order) fields[group] = {
6039
+ if (colorId) {
6040
+ const order = orderMapping[colorId];
6041
+ if (order) fields[colorId] = {
6526
6042
  sortIndex: 0,
6527
6043
  domain: order,
6528
6044
  lockStatisticsByDomain: true
6529
6045
  };
6530
- else fields[group] = {
6046
+ else fields[colorId] = {
6531
6047
  sortIndex: 0
6532
6048
  };
6533
6049
  }
@@ -6625,7 +6141,7 @@
6625
6141
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6626
6142
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6627
6143
  const { measureId, measureValue, measureName } = foldInfoList[0];
6628
- const { groupName } = unfoldInfo;
6144
+ const { encodingColor: colorName } = unfoldInfo;
6629
6145
  result.tooltip = {
6630
6146
  visible: enable,
6631
6147
  mark: {
@@ -6646,7 +6162,7 @@
6646
6162
  {
6647
6163
  visible: true,
6648
6164
  hasShape: true,
6649
- key: (datum)=>datum && datum[measureName || groupName] || '',
6165
+ key: (datum)=>datum && datum[measureName || colorName] || '',
6650
6166
  value: (datum)=>{
6651
6167
  if (!datum) return '';
6652
6168
  const value = datum[measureValue];
@@ -6668,7 +6184,7 @@
6668
6184
  content: [
6669
6185
  {
6670
6186
  visible: true,
6671
- key: (datum)=>datum && datum[groupName] || '',
6187
+ key: (datum)=>datum && datum[colorName] || '',
6672
6188
  value: (datum)=>{
6673
6189
  if (!datum) return '';
6674
6190
  const value = datum[measureValue];
@@ -6705,7 +6221,7 @@
6705
6221
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6706
6222
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6707
6223
  const { measureId, measureValue, measureName } = foldInfoList[1];
6708
- const { groupName } = unfoldInfo;
6224
+ const { encodingColorId } = unfoldInfo;
6709
6225
  result.tooltip = {
6710
6226
  visible: enable,
6711
6227
  mark: {
@@ -6726,7 +6242,7 @@
6726
6242
  {
6727
6243
  visible: true,
6728
6244
  hasShape: true,
6729
- key: (datum)=>datum && datum[measureName || groupName] || '',
6245
+ key: (datum)=>datum && datum[measureName || encodingColorId] || '',
6730
6246
  value: (datum)=>{
6731
6247
  if (!datum) return '';
6732
6248
  const value = datum[measureValue];
@@ -6748,7 +6264,7 @@
6748
6264
  content: [
6749
6265
  {
6750
6266
  visible: true,
6751
- key: (datum)=>datum && datum[groupName] || '',
6267
+ key: (datum)=>datum && datum[encodingColorId] || '',
6752
6268
  value: (datum)=>{
6753
6269
  if (!datum) return '';
6754
6270
  const value = datum[measureValue];
@@ -6777,16 +6293,16 @@
6777
6293
  const { advancedVSeed, vseed } = context;
6778
6294
  const { chartType } = vseed;
6779
6295
  const { locale, datasetReshapeInfo } = advancedVSeed;
6780
- const index = datasetReshapeInfo[0].index;
6296
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6781
6297
  const primaryYAxis = advancedVSeed.config?.[chartType]?.primaryYAxis;
6782
6298
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6783
6299
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6784
6300
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6785
- if (datasetReshapeInfo[0].foldInfoList?.[0] && chunk_VCYTMP4D_n(datasetReshapeInfo[0].foldInfoList[0].foldMap)) return result;
6786
- const id = `${datasetReshapeInfo[0].id}-primary-axis`;
6301
+ if (foldInfoList?.[0] && chunk_VCYTMP4D_n(foldInfoList[0].foldMap)) return result;
6302
+ const id = `${reshapeInfoId}-primary-axis`;
6787
6303
  const seriesIds = [
6788
- `${datasetReshapeInfo[0].id}-primary-series`,
6789
- `${datasetReshapeInfo[0].id}-secondary-series`
6304
+ `${reshapeInfoId}-primary-series`,
6305
+ `${reshapeInfoId}-secondary-series`
6790
6306
  ];
6791
6307
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[0];
6792
6308
  if (!result.axes) result.axes = [];
@@ -6874,20 +6390,20 @@
6874
6390
  const { advancedVSeed, vseed } = context;
6875
6391
  const { chartType } = vseed;
6876
6392
  const { locale, datasetReshapeInfo } = advancedVSeed;
6877
- const index = datasetReshapeInfo[0].index;
6393
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6878
6394
  const secondaryYAxis = advancedVSeed.config?.[chartType]?.secondaryYAxis;
6879
6395
  const yAxisConfig = Array.isArray(secondaryYAxis) ? secondaryYAxis[index] || secondaryYAxis[0] : secondaryYAxis;
6880
6396
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6881
6397
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6882
- if (chunk_JK3VNB42_n(datasetReshapeInfo[0].foldInfoList?.[1])) return result;
6398
+ if (chunk_JK3VNB42_n(foldInfoList?.[1])) return result;
6883
6399
  const sync = {
6884
- axisId: `${datasetReshapeInfo[0].id}-primary-axis`,
6400
+ axisId: `${reshapeInfoId}-primary-axis`,
6885
6401
  zeroAlign: true
6886
6402
  };
6887
- const id = `${datasetReshapeInfo[0].id}-secondary-axis`;
6403
+ const id = `${reshapeInfoId}-secondary-axis`;
6888
6404
  const seriesIds = [
6889
- `${datasetReshapeInfo[0].id}-primary-series`,
6890
- `${datasetReshapeInfo[0].id}-secondary-series`
6405
+ `${reshapeInfoId}-primary-series`,
6406
+ `${reshapeInfoId}-secondary-series`
6891
6407
  ];
6892
6408
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[1];
6893
6409
  if (!result.axes) result.axes = [];
@@ -7032,206 +6548,69 @@
7032
6548
  datasetSecondary,
7033
6549
  labelSecondary,
7034
6550
  tooltipSecondary,
7035
- progressive,
7036
- barStyle_barStyle,
7037
- pointStyle_pointStyle,
7038
- pointStateDimensionHover,
7039
- lineStyle_lineStyle,
7040
- areaStyle_areaStyle
7041
- ]),
7042
- xBand,
7043
- yLinearPrimary,
7044
- yLinearSecondary,
7045
- color_color,
7046
- background_backgroundColor,
7047
- verticalCrosshairRect,
7048
- annotationPoint_annotationPoint,
7049
- annotationVerticalLine_annotationVerticalLine,
7050
- annotationHorizontalLine_annotationHorizontalLine,
7051
- annotationArea_annotationArea
7052
- ]),
7053
- pivotRowDimensions,
7054
- pivotColumnDimensions,
7055
- pivotDiscreteLegend
7056
- ];
7057
- const dualAxisSpecPipeline = [
7058
- pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
7059
- ];
7060
- const registerDualAxis = ()=>{
7061
- Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
7062
- Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
7063
- };
7064
- const dataReshapeFor1D1M_emptyReshapeResult = {
7065
- dataset: [],
7066
- foldInfo: {
7067
- foldMap: {},
7068
- measureId: '',
7069
- measureName: '',
7070
- measureValue: ''
7071
- },
7072
- unfoldInfo: {
7073
- groupName: '',
7074
- groupId: '',
7075
- colorItems: [],
7076
- colorIdMap: {}
7077
- }
7078
- };
7079
- const dataReshapeFor1D1M = (dataset, dimensions, measures, options)=>{
7080
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
7081
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D1M_emptyReshapeResult;
7082
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
7083
- if (0 === dimensions.length) {
7084
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
7085
- {
7086
- id: foldMeasureName,
7087
- alias: i18n`指标名称`,
7088
- location: 'dimension'
7089
- }
7090
- ], [
7091
- {
7092
- id: foldMeasureValue,
7093
- alias: i18n`指标值`
7094
- }
7095
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
7096
- return {
7097
- dataset: finalDataset,
7098
- foldInfo,
7099
- unfoldInfo
7100
- };
7101
- }
7102
- {
7103
- const dims = 1 === measures.length ? [
7104
- ...dimensions
7105
- ] : [
7106
- ...dimensions,
7107
- {
7108
- id: foldMeasureName,
7109
- alias: i18n`指标名称`,
7110
- location: 'dimension'
7111
- }
7112
- ];
7113
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
7114
- {
7115
- id: foldMeasureValue,
7116
- alias: i18n`指标值`
7117
- }
7118
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
7119
- return {
7120
- dataset: finalDataset,
7121
- foldInfo,
7122
- unfoldInfo
7123
- };
7124
- }
7125
- };
7126
- const reshapeTo1D1M = (advancedVSeed, context)=>{
7127
- const result = {
7128
- ...advancedVSeed
7129
- };
7130
- const { vseed } = context;
7131
- const { dataset } = vseed;
7132
- const { dimensions, measures } = advancedVSeed;
7133
- if (!measures || !dimensions || !dataset) return result;
7134
- if (0 === measures.length) throw new Error('measures can not be empty');
7135
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, dimensions, measures);
7136
- return {
7137
- ...result,
7138
- dataset: newDatasets,
7139
- datasetReshapeInfo: [
7140
- {
7141
- id: '1D1M',
7142
- index: 0,
7143
- foldInfo,
7144
- unfoldInfo
7145
- }
7146
- ]
7147
- };
6551
+ progressive,
6552
+ barStyle_barStyle,
6553
+ pointStyle_pointStyle,
6554
+ pointStateDimensionHover,
6555
+ lineStyle_lineStyle,
6556
+ areaStyle_areaStyle
6557
+ ]),
6558
+ xBand,
6559
+ yLinearPrimary,
6560
+ yLinearSecondary,
6561
+ color_color,
6562
+ background_backgroundColor,
6563
+ verticalCrosshairRect,
6564
+ annotationPoint_annotationPoint,
6565
+ annotationVerticalLine_annotationVerticalLine,
6566
+ annotationHorizontalLine_annotationHorizontalLine,
6567
+ annotationArea_annotationArea
6568
+ ]),
6569
+ pivotRowDimensions,
6570
+ pivotColumnDimensions,
6571
+ pivotDiscreteLegend
6572
+ ];
6573
+ const dualAxisSpecPipeline = [
6574
+ pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
6575
+ ];
6576
+ const registerDualAxis = ()=>{
6577
+ Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6578
+ Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
7148
6579
  };
7149
- const pivotReshapeTo1D1M = (advancedVSeed, context)=>{
7150
- const result = {
7151
- ...advancedVSeed
7152
- };
6580
+ const encodingForPie = (advancedVSeed, context)=>{
7153
6581
  const { vseed } = context;
7154
- const { dataset } = vseed;
7155
- const { measures } = advancedVSeed;
7156
- const dimensions = advancedVSeed.dimensions;
7157
- if (!measures || !dimensions) return result;
7158
- const measureGroups = [];
7159
- if (measures) measures.forEach((measure)=>{
7160
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
7161
- });
7162
- const newDatasets = [];
7163
- const datasetReshapeInfo = [];
7164
- measureGroups.forEach((measureGroup, index)=>{
7165
- const measures = measureGroup.children;
7166
- if (!measures) return;
7167
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
7168
- const groupId = measureGroup.id;
7169
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, commonDimensions, measures, {
7170
- foldMeasureId: FoldMeasureId,
7171
- foldMeasureName: FoldMeasureName,
7172
- foldMeasureValue: FoldMeasureValue + groupId,
7173
- unfoldDimensionGroup: UnfoldDimensionGroup
7174
- });
7175
- const reshapeInfo = {
7176
- id: groupId,
7177
- index,
7178
- foldInfo,
7179
- unfoldInfo
7180
- };
7181
- newDatasets.push(newSubDataset);
7182
- datasetReshapeInfo.push(reshapeInfo);
7183
- });
7184
- return {
7185
- ...result,
7186
- dataset: newDatasets,
7187
- datasetReshapeInfo: datasetReshapeInfo
6582
+ const { dimensions } = advancedVSeed;
6583
+ if (!dimensions) return advancedVSeed;
6584
+ const encoding = vseed.encoding;
6585
+ if (encoding) return {
6586
+ ...advancedVSeed,
6587
+ encoding: {
6588
+ ...encoding
6589
+ }
7188
6590
  };
7189
- };
7190
- const encodingPie = (advancedVSeed)=>{
7191
- const result = {
7192
- ...advancedVSeed
6591
+ const mergedEncoding = {
6592
+ color: dimensions.slice(0).map((item)=>item.id),
6593
+ detail: dimensions.slice(0).map((item)=>item.id),
6594
+ tooltip: dimensions.map((item)=>item.id),
6595
+ label: [],
6596
+ row: [],
6597
+ column: []
7193
6598
  };
7194
- const { datasetReshapeInfo } = advancedVSeed;
7195
- if (!datasetReshapeInfo) return result;
7196
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7197
- const { foldInfo, unfoldInfo } = cur;
7198
- const radius = [
7199
- foldInfo.measureValue
7200
- ];
7201
- const angle = [
7202
- unfoldInfo.groupId
7203
- ];
7204
- const group = [
7205
- unfoldInfo.groupId
7206
- ];
7207
- const color = [
7208
- unfoldInfo.groupId
7209
- ];
7210
- return [
7211
- ...prev,
7212
- {
7213
- angle,
7214
- radius,
7215
- group,
7216
- color
7217
- }
7218
- ];
7219
- }, []);
7220
6599
  return {
7221
- ...result,
7222
- encoding
6600
+ ...advancedVSeed,
6601
+ encoding: mergedEncoding
7223
6602
  };
7224
6603
  };
7225
6604
  const pieAdvancedPipeline = [
7226
6605
  initAdvancedVSeed_initAdvancedVSeed,
7227
6606
  autoMeasures_autoMeasures,
7228
6607
  autoDimensions_autoDimensions,
6608
+ encodingForPie,
7229
6609
  pivotAdapter([
7230
- reshapeTo1D1M
6610
+ reshapeWithEncoding
7231
6611
  ], [
7232
- pivotReshapeTo1D1M
6612
+ pivotReshapeWithEncoding
7233
6613
  ]),
7234
- encodingPie,
7235
6614
  pieConfig,
7236
6615
  theme_theme,
7237
6616
  annotation_annotation
@@ -7241,15 +6620,14 @@
7241
6620
  ...spec
7242
6621
  };
7243
6622
  const { advancedVSeed } = context;
7244
- const { encoding, dataset } = advancedVSeed;
7245
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6623
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6624
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7246
6625
  const showStroke = dataset.length <= 30;
7247
6626
  result.type = 'pie';
7248
6627
  result.outerRadius = 0.8;
7249
6628
  result.innerRadius = 0;
7250
- result.valueField = encoding[0].radius[0];
7251
- result.categoryField = encoding[0].angle[0];
7252
- result.seriesField = encoding[0].group[0];
6629
+ result.valueField = foldInfo.measureValue;
6630
+ result.categoryField = unfoldInfo.encodingColorId;
7253
6631
  result.padding = 0;
7254
6632
  result.region = [
7255
6633
  {
@@ -7318,12 +6696,12 @@
7318
6696
  initAdvancedVSeed_initAdvancedVSeed,
7319
6697
  autoMeasures_autoMeasures,
7320
6698
  autoDimensions_autoDimensions,
6699
+ encodingForPie,
7321
6700
  pivotAdapter([
7322
- reshapeTo1D1M
6701
+ reshapeWithEncoding
7323
6702
  ], [
7324
- pivotReshapeTo1D1M
6703
+ pivotReshapeWithEncoding
7325
6704
  ]),
7326
- encodingPie,
7327
6705
  donutConfig,
7328
6706
  theme_theme,
7329
6707
  annotation_annotation
@@ -7333,15 +6711,14 @@
7333
6711
  ...spec
7334
6712
  };
7335
6713
  const { advancedVSeed } = context;
7336
- const { encoding, dataset } = advancedVSeed;
7337
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6714
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6715
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7338
6716
  const showStroke = dataset.length <= 30;
7339
6717
  result.type = 'pie';
7340
6718
  result.outerRadius = 0.8;
7341
6719
  result.innerRadius = 0.8 * result.outerRadius;
7342
- result.valueField = encoding[0].radius[0];
7343
- result.categoryField = encoding[0].angle[0];
7344
- result.seriesField = encoding[0].group[0];
6720
+ result.valueField = foldInfo.measureValue;
6721
+ result.categoryField = unfoldInfo.encodingColorId;
7345
6722
  result.padding = 0;
7346
6723
  result.region = [
7347
6724
  {
@@ -7405,54 +6782,58 @@
7405
6782
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
7406
6783
  Builder._specPipelineMap.donut = donutSpecPipeline;
7407
6784
  };
7408
- const encodingRose = (advancedVSeed)=>{
7409
- const result = {
7410
- ...advancedVSeed
7411
- };
7412
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
7413
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
7414
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7415
- const is1D1M = 1 === dimensions.length && 1 === measures.length;
7416
- const isZeroDimension = 0 === dimensions.length;
7417
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7418
- const { foldInfo, unfoldInfo } = cur;
7419
- const radius = [
7420
- foldInfo.measureValue
7421
- ];
7422
- const angle = [
7423
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
7424
- ];
7425
- const group = [
7426
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
6785
+ const encodingForRose = (advancedVSeed, context)=>{
6786
+ const { vseed } = context;
6787
+ const { dimensions } = advancedVSeed;
6788
+ if (!dimensions) return advancedVSeed;
6789
+ const encoding = vseed.encoding;
6790
+ if (encoding) {
6791
+ const angle = encoding.angle || [
6792
+ dimensions[0].id
7427
6793
  ];
7428
- const color = [
7429
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
6794
+ const color = encoding.color || [
6795
+ (dimensions[1] || dimensions[0]).id
7430
6796
  ];
7431
- return [
7432
- ...prev,
7433
- {
6797
+ const detail = encoding.detail || [];
6798
+ const mergedDetail = chunk_QJLMYOTX_i([
6799
+ ...color,
6800
+ ...detail
6801
+ ]);
6802
+ return {
6803
+ ...advancedVSeed,
6804
+ encoding: {
6805
+ ...encoding,
7434
6806
  angle,
7435
- radius,
7436
- group,
7437
- color
6807
+ color,
6808
+ detail: mergedDetail
7438
6809
  }
7439
- ];
7440
- }, []);
6810
+ };
6811
+ }
6812
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6813
+ const mergedEncoding = {
6814
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
6815
+ color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6816
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6817
+ tooltip: dimensions.map((item)=>item.id),
6818
+ label: [],
6819
+ row: [],
6820
+ column: []
6821
+ };
7441
6822
  return {
7442
- ...result,
7443
- encoding
6823
+ ...advancedVSeed,
6824
+ encoding: mergedEncoding
7444
6825
  };
7445
6826
  };
7446
6827
  const roseAdvancedPipeline = [
7447
6828
  initAdvancedVSeed_initAdvancedVSeed,
7448
6829
  autoMeasures_autoMeasures,
7449
6830
  autoDimensions_autoDimensions,
6831
+ encodingForRose,
7450
6832
  pivotAdapter([
7451
- reshapeTo2D1M
6833
+ reshapeWithEncoding
7452
6834
  ], [
7453
- pivotReshapeTo2D1M
6835
+ pivotReshapeWithEncoding
7454
6836
  ]),
7455
- encodingRose,
7456
6837
  roseConfig,
7457
6838
  theme_theme,
7458
6839
  markStyle_markStyle,
@@ -7463,13 +6844,12 @@
7463
6844
  ...spec
7464
6845
  };
7465
6846
  const { advancedVSeed } = context;
7466
- const { encoding, dataset, datasetReshapeInfo } = advancedVSeed;
7467
- const { foldInfo } = datasetReshapeInfo[0];
7468
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
6847
+ const { dataset, datasetReshapeInfo } = advancedVSeed;
6848
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7469
6849
  result.type = 'rose';
7470
- result.categoryField = encoding[0].angle[0];
7471
- result.valueField = encoding[0].radius[0];
7472
- result.seriesField = encoding[0].group[0];
6850
+ result.angleField = unfoldInfo.encodingAngle;
6851
+ result.seriesField = unfoldInfo.encodingColorId;
6852
+ result.valueField = foldInfo.measureValue;
7473
6853
  result.padding = 0;
7474
6854
  result.outerRadius = 0.9;
7475
6855
  result.innerRadius = 0;
@@ -7617,12 +6997,12 @@
7617
6997
  initAdvancedVSeed_initAdvancedVSeed,
7618
6998
  autoMeasures_autoMeasures,
7619
6999
  autoDimensions_autoDimensions,
7000
+ encodingForRose,
7620
7001
  pivotAdapter([
7621
- reshapeTo2D1M
7002
+ reshapeWithEncoding
7622
7003
  ], [
7623
- pivotReshapeTo2D1M
7004
+ pivotReshapeWithEncoding
7624
7005
  ]),
7625
- encodingRose,
7626
7006
  roseParallelConfig,
7627
7007
  theme_theme,
7628
7008
  markStyle_markStyle,
@@ -7633,19 +7013,18 @@
7633
7013
  ...spec
7634
7014
  };
7635
7015
  const { advancedVSeed } = context;
7636
- const { encoding, datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
7016
+ const { datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
7637
7017
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7638
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
7639
7018
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
7640
7019
  result.type = 'rose';
7641
- result.categoryField = sameDimensionsMode ? [
7642
- encoding[0].angle[0]
7020
+ result.angleField = sameDimensionsMode ? [
7021
+ unfoldInfo.encodingAngle
7643
7022
  ] : [
7644
- encoding[0].angle[0],
7645
- unfoldInfo.groupId
7023
+ unfoldInfo.encodingAngle,
7024
+ unfoldInfo.encodingDetail
7646
7025
  ];
7647
- result.valueField = encoding[0].radius[0];
7648
- result.seriesField = encoding[0].group[0];
7026
+ result.valueField = foldInfo.measureValue;
7027
+ result.seriesField = unfoldInfo.encodingColorId;
7649
7028
  result.padding = 0;
7650
7029
  result.outerRadius = 0.9;
7651
7030
  result.innerRadius = 0;
@@ -7722,54 +7101,58 @@
7722
7101
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7723
7102
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7724
7103
  };
7725
- const encodingAR = (advancedVSeed)=>{
7726
- const result = {
7727
- ...advancedVSeed
7728
- };
7729
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
7730
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
7731
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7732
- const isZeroDimension = 0 === dimensions.length;
7733
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7734
- const { foldInfo, unfoldInfo } = cur;
7735
- const angle = [
7736
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
7737
- ];
7738
- const radius = [
7739
- foldInfo.measureValue
7740
- ];
7741
- const group = [
7742
- unfoldInfo.groupId
7104
+ const encodingForRadar = (advancedVSeed, context)=>{
7105
+ const { vseed } = context;
7106
+ const { dimensions } = advancedVSeed;
7107
+ if (!dimensions) return advancedVSeed;
7108
+ const encoding = vseed.encoding;
7109
+ if (encoding) {
7110
+ const angle = encoding.angle || [
7111
+ dimensions[0].id
7743
7112
  ];
7744
- const color = [
7745
- unfoldInfo.groupId
7113
+ const color = encoding.color || [
7114
+ (dimensions[1] || dimensions[0]).id
7746
7115
  ];
7747
- return [
7748
- ...prev,
7749
- {
7116
+ const detail = encoding.detail || [];
7117
+ const mergedDetail = chunk_QJLMYOTX_i([
7118
+ ...color,
7119
+ ...detail
7120
+ ]);
7121
+ return {
7122
+ ...advancedVSeed,
7123
+ encoding: {
7124
+ ...encoding,
7750
7125
  angle,
7751
- radius,
7752
- group,
7753
- color
7126
+ color,
7127
+ detail: mergedDetail
7754
7128
  }
7755
- ];
7756
- }, []);
7129
+ };
7130
+ }
7131
+ const mergedEncoding = {
7132
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
7133
+ color: dimensions.slice(1).map((item)=>item.id),
7134
+ detail: dimensions.slice(1).map((item)=>item.id),
7135
+ tooltip: dimensions.map((item)=>item.id),
7136
+ label: [],
7137
+ row: [],
7138
+ column: []
7139
+ };
7757
7140
  return {
7758
- ...result,
7759
- encoding
7141
+ ...advancedVSeed,
7142
+ encoding: mergedEncoding
7760
7143
  };
7761
7144
  };
7762
7145
  const radarAdvancedPipeline = [
7763
7146
  initAdvancedVSeed_initAdvancedVSeed,
7764
7147
  autoMeasures_autoMeasures,
7765
7148
  autoDimensions_autoDimensions,
7149
+ encodingForRadar,
7766
7150
  pivotAdapter([
7767
- reshapeTo2D1M0Name
7151
+ reshapeWithEncoding
7768
7152
  ], [
7769
- pivotReshapeTo2D1M0Name
7153
+ pivotReshapeWithEncoding
7770
7154
  ]),
7771
- encodingAR,
7772
- sort_sortLegend,
7155
+ sortLegend_sortLegend,
7773
7156
  radarConfig,
7774
7157
  theme_theme,
7775
7158
  markStyle_markStyle,
@@ -7780,12 +7163,12 @@
7780
7163
  ...spec
7781
7164
  };
7782
7165
  const { advancedVSeed } = context;
7783
- const { encoding } = advancedVSeed;
7784
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
7166
+ const { datasetReshapeInfo } = advancedVSeed;
7167
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7785
7168
  result.type = 'radar';
7786
- result.angleField = encoding[0].angle[0];
7787
- result.radiusField = encoding[0].radius[0];
7788
- result.seriesField = encoding[0].group[0];
7169
+ result.angleField = unfoldInfo.encodingAngle;
7170
+ result.radiusField = foldInfo.measureValue;
7171
+ result.seriesField = unfoldInfo.encodingColorId;
7789
7172
  result.padding = 0;
7790
7173
  result.region = [
7791
7174
  {
@@ -7897,47 +7280,40 @@
7897
7280
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7898
7281
  Builder._specPipelineMap.radar = radarSpecPipeline;
7899
7282
  };
7900
- const encodingFunnel = (advancedVSeed)=>{
7901
- const result = {
7902
- ...advancedVSeed
7283
+ const encodingForFunnel = (advancedVSeed, context)=>{
7284
+ const { vseed } = context;
7285
+ const { dimensions } = advancedVSeed;
7286
+ if (!dimensions) return advancedVSeed;
7287
+ const encoding = vseed.encoding;
7288
+ if (encoding) return {
7289
+ ...advancedVSeed,
7290
+ encoding: {
7291
+ ...encoding
7292
+ }
7293
+ };
7294
+ const mergedEncoding = {
7295
+ color: dimensions.slice(0).map((item)=>item.id),
7296
+ detail: dimensions.slice(0).map((item)=>item.id),
7297
+ tooltip: dimensions.map((item)=>item.id),
7298
+ label: [],
7299
+ row: [],
7300
+ column: []
7903
7301
  };
7904
- const { datasetReshapeInfo } = advancedVSeed;
7905
- if (!datasetReshapeInfo) return result;
7906
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7907
- const { foldInfo, unfoldInfo } = cur;
7908
- const size = [
7909
- foldInfo.measureValue
7910
- ];
7911
- const group = [
7912
- unfoldInfo.groupId
7913
- ];
7914
- const color = [
7915
- foldInfo.measureValue
7916
- ];
7917
- return [
7918
- ...prev,
7919
- {
7920
- size,
7921
- group,
7922
- color
7923
- }
7924
- ];
7925
- }, []);
7926
7302
  return {
7927
- ...result,
7928
- encoding
7303
+ ...advancedVSeed,
7304
+ encoding: mergedEncoding
7929
7305
  };
7930
7306
  };
7931
7307
  const funnelAdvancedPipeline = [
7932
7308
  initAdvancedVSeed_initAdvancedVSeed,
7933
7309
  autoMeasures_autoMeasures,
7934
7310
  autoDimensions_autoDimensions,
7311
+ encodingForFunnel,
7935
7312
  pivotAdapter([
7936
- reshapeTo1D1M
7313
+ reshapeWithEncoding
7937
7314
  ], [
7938
- pivotReshapeTo1D1M
7315
+ pivotReshapeWithEncoding
7939
7316
  ]),
7940
- encodingFunnel,
7941
7317
  funnelConfig,
7942
7318
  theme_theme,
7943
7319
  annotation_annotation
@@ -7947,11 +7323,11 @@
7947
7323
  ...spec
7948
7324
  };
7949
7325
  const { advancedVSeed } = context;
7950
- const { encoding } = advancedVSeed;
7951
- if (!encoding[0].size || !encoding[0].group || !encoding[0].color) return result;
7326
+ const { datasetReshapeInfo } = advancedVSeed;
7327
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7952
7328
  result.type = 'funnel';
7953
- result.valueField = encoding[0].size[0];
7954
- result.categoryField = encoding[0].group[0];
7329
+ result.valueField = foldInfo.measureValue;
7330
+ result.categoryField = unfoldInfo.encodingColorId;
7955
7331
  result.padding = 0;
7956
7332
  result.isTransform = true;
7957
7333
  result.shape = 'rect';
@@ -7966,7 +7342,7 @@
7966
7342
  style: {
7967
7343
  cornerRadius: 4,
7968
7344
  fill: {
7969
- field: encoding[0].color[0],
7345
+ field: unfoldInfo.encodingColorId,
7970
7346
  scale: 'color'
7971
7347
  }
7972
7348
  },
@@ -7982,99 +7358,14 @@
7982
7358
  result.animation = true;
7983
7359
  return result;
7984
7360
  };
7985
- const linearColor = (spec, context)=>{
7986
- const result = {
7987
- ...spec
7988
- };
7989
- const { advancedVSeed } = context;
7990
- const { datasetReshapeInfo, chartType, encoding } = advancedVSeed;
7991
- const baseConfig = advancedVSeed.config[chartType];
7992
- if (!baseConfig || !baseConfig.color) return result;
7993
- const { color } = baseConfig;
7994
- const { colorScheme } = color;
7995
- result.color = {
7996
- type: 'linear',
7997
- domain: [
7998
- {
7999
- dataId: datasetReshapeInfo[0].id,
8000
- fields: encoding?.[0]?.color
8001
- }
8002
- ],
8003
- range: colorScheme
8004
- };
8005
- return result;
8006
- };
8007
- const colorLegend = (spec, context)=>{
8008
- const result = {
8009
- ...spec
8010
- };
8011
- const { advancedVSeed } = context;
8012
- const { chartType } = advancedVSeed;
8013
- const baseConfig = advancedVSeed.config[chartType];
8014
- const { encoding } = advancedVSeed;
8015
- if (!encoding[0].color) return result;
8016
- if (!baseConfig || !baseConfig.legend) return result;
8017
- const { legend } = baseConfig;
8018
- const { enable, position = 'bottom' } = legend || {};
8019
- const orient = [
8020
- 'bottom',
8021
- 'bottomLeft',
8022
- 'bottomRight',
8023
- 'bl',
8024
- 'br'
8025
- ].includes(position) ? 'bottom' : [
8026
- 'top',
8027
- 'topLeft',
8028
- 'topRight',
8029
- 'tl',
8030
- 'tr'
8031
- ].includes(position) ? 'top' : [
8032
- 'left',
8033
- 'leftTop',
8034
- 'leftBottom',
8035
- 'lt',
8036
- 'lb'
8037
- ].includes(position) ? 'left' : 'right';
8038
- const legendPosition = [
8039
- 'topLeft',
8040
- 'bottomLeft',
8041
- 'leftTop',
8042
- 'rightTop',
8043
- 'lt',
8044
- 'rt',
8045
- 'tl',
8046
- 'bl'
8047
- ].includes(position) ? 'start' : [
8048
- 'topRight',
8049
- 'bottomRight',
8050
- 'leftBottom',
8051
- 'rightBottom',
8052
- 'lb',
8053
- 'rb',
8054
- 'rt',
8055
- 'br'
8056
- ].includes(position) ? 'end' : 'middle';
8057
- result.legends = {
8058
- type: 'color',
8059
- visible: enable,
8060
- orient,
8061
- position: legendPosition,
8062
- field: encoding[0].color[0],
8063
- inverse: !![
8064
- 'left',
8065
- 'right'
8066
- ].includes(orient)
8067
- };
8068
- return result;
8069
- };
8070
7361
  const funnel = [
8071
7362
  initFunnel,
8072
- linearColor,
8073
7363
  background_backgroundColor,
8074
7364
  datasetXY,
7365
+ color_color,
8075
7366
  label_label,
8076
7367
  tooltip_tooltip,
8077
- colorLegend,
7368
+ discreteLegend,
8078
7369
  annotationPoint_annotationPoint,
8079
7370
  annotationVerticalLine_annotationVerticalLine,
8080
7371
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8087,12 +7378,12 @@
8087
7378
  datasetPivot,
8088
7379
  pivotIndicators_pivotIndicators([
8089
7380
  initFunnel,
8090
- linearColor,
8091
7381
  background_backgroundColor,
8092
7382
  datasetXY,
7383
+ color_color,
8093
7384
  label_label,
8094
7385
  tooltip_tooltip,
8095
- colorLegend,
7386
+ discreteLegend,
8096
7387
  annotationPoint_annotationPoint,
8097
7388
  annotationVerticalLine_annotationVerticalLine,
8098
7389
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8108,49 +7399,52 @@
8108
7399
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
8109
7400
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
8110
7401
  };
8111
- const encodingMatrix = (advancedVSeed)=>{
8112
- const result = {
8113
- ...advancedVSeed
8114
- };
8115
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
8116
- if (!datasetReshapeInfo || !dimensions) return result;
8117
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
8118
- const isZeroDimension = 0 === dimensions.length;
8119
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
8120
- const { foldInfo, unfoldInfo } = cur;
8121
- const x = [
8122
- isZeroDimension ? foldInfo.measureName : xDimension?.id
8123
- ];
8124
- const y = [
8125
- unfoldInfo.groupName
7402
+ const encodingForHeatmap = (advancedVSeed, context)=>{
7403
+ const { vseed } = context;
7404
+ const { dimensions } = advancedVSeed;
7405
+ if (!dimensions) return advancedVSeed;
7406
+ const encoding = vseed.encoding;
7407
+ if (encoding) {
7408
+ const x = encoding.x || [
7409
+ dimensions[0].id
8126
7410
  ];
8127
- const color = [
8128
- foldInfo.measureValue
7411
+ const y = encoding.y || [
7412
+ (dimensions[1] || dimensions[0]).id
8129
7413
  ];
8130
- return [
8131
- ...prev,
8132
- {
7414
+ return {
7415
+ ...advancedVSeed,
7416
+ encoding: {
8133
7417
  x,
8134
7418
  y,
8135
- color
7419
+ ...encoding
8136
7420
  }
8137
- ];
8138
- }, []);
7421
+ };
7422
+ }
7423
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7424
+ const mergedEncoding = {
7425
+ x: dimensions.slice(0, 1).map((item)=>item.id),
7426
+ y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7427
+ color: dimensions.slice(0).map((item)=>item.id),
7428
+ tooltip: dimensions.map((item)=>item.id),
7429
+ label: [],
7430
+ row: [],
7431
+ column: []
7432
+ };
8139
7433
  return {
8140
- ...result,
8141
- encoding
7434
+ ...advancedVSeed,
7435
+ encoding: mergedEncoding
8142
7436
  };
8143
7437
  };
8144
7438
  const heatmapAdvancedPipeline = [
8145
7439
  initAdvancedVSeed_initAdvancedVSeed,
8146
7440
  autoMeasures_autoMeasures,
8147
7441
  autoDimensions_autoDimensions,
7442
+ encodingForHeatmap,
8148
7443
  pivotAdapter([
8149
- reshapeTo2D1M
7444
+ reshapeWithEncoding
8150
7445
  ], [
8151
- pivotReshapeTo2D1M
7446
+ pivotReshapeWithEncoding
8152
7447
  ]),
8153
- encodingMatrix,
8154
7448
  sortXBandAxis,
8155
7449
  heatmapConfig,
8156
7450
  theme_theme,
@@ -8172,23 +7466,20 @@
8172
7466
  ...spec
8173
7467
  };
8174
7468
  const { advancedVSeed } = context;
8175
- const { encoding } = advancedVSeed;
8176
- if (!encoding[0].y || !encoding[0].x || !encoding[0].color) return result;
7469
+ const { datasetReshapeInfo } = advancedVSeed;
7470
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
8177
7471
  result.type = 'heatmap';
8178
7472
  result.direction = 'vertical';
8179
- result.xField = encoding[0].x[0];
8180
- result.yField = encoding[0].y[0];
8181
- result.valueField = encoding[0].color[0];
7473
+ result.xField = unfoldInfo.encodingX;
7474
+ result.yField = unfoldInfo.encodingY;
7475
+ result.seriesField = unfoldInfo.encodingColorId;
7476
+ result.valueField = foldInfo.measureValue;
8182
7477
  result.padding = 0;
8183
7478
  result.cell = {
8184
7479
  style: {
8185
7480
  shape: 'rect',
8186
7481
  stroke: '#ffffff',
8187
- lineWidth: 1,
8188
- fill: {
8189
- field: encoding[0].color[0],
8190
- scale: 'color'
8191
- }
7482
+ lineWidth: 1
8192
7483
  }
8193
7484
  };
8194
7485
  result.axes = [
@@ -8213,12 +7504,12 @@
8213
7504
  };
8214
7505
  const heatmap = [
8215
7506
  initHeatmap,
8216
- linearColor,
8217
7507
  background_backgroundColor,
8218
7508
  datasetXY,
7509
+ color_color,
8219
7510
  label_label,
8220
7511
  labelColorInversion,
8221
- colorLegend,
7512
+ discreteLegend,
8222
7513
  tooltip_tooltip,
8223
7514
  pointStyle_pointStyle,
8224
7515
  pointStateDimensionHover,
@@ -8235,12 +7526,12 @@
8235
7526
  datasetPivot,
8236
7527
  pivotIndicators_pivotIndicators([
8237
7528
  initHeatmap,
8238
- linearColor,
8239
7529
  background_backgroundColor,
8240
7530
  datasetXY,
7531
+ color_color,
8241
7532
  label_label,
8242
7533
  labelColorInversion,
8243
- colorLegend,
7534
+ discreteLegend,
8244
7535
  tooltip_tooltip,
8245
7536
  pointStyle_pointStyle,
8246
7537
  pointStateDimensionHover,
@@ -8508,12 +7799,6 @@
8508
7799
  yAxis: linearAxis,
8509
7800
  crosshairLine
8510
7801
  },
8511
- areaRange: {
8512
- ...baseConfig,
8513
- xAxis: bandAxis,
8514
- yAxis: linearAxis,
8515
- crosshairLine
8516
- },
8517
7802
  scatter: {
8518
7803
  ...baseConfig,
8519
7804
  xAxis: {
@@ -8846,12 +8131,6 @@
8846
8131
  yAxis: linearAxis,
8847
8132
  crosshairLine: crosshairLine
8848
8133
  },
8849
- areaRange: {
8850
- ...baseConfig,
8851
- xAxis: bandAxis,
8852
- yAxis: linearAxis,
8853
- crosshairLine: crosshairLine
8854
- },
8855
8134
  scatter: {
8856
8135
  ...baseConfig,
8857
8136
  xAxis: {
@@ -8949,7 +8228,6 @@
8949
8228
  registerBarPercent();
8950
8229
  registerArea();
8951
8230
  registerAreaPercent();
8952
- registerAreaRange();
8953
8231
  registerScatter();
8954
8232
  registerDualAxis();
8955
8233
  registerPie();
@@ -12266,7 +11544,6 @@
12266
11544
  'barParallel',
12267
11545
  'area',
12268
11546
  'areaPercent',
12269
- 'areaRange',
12270
11547
  'scatter',
12271
11548
  'dualAxis',
12272
11549
  'rose',
@@ -12364,6 +11641,12 @@
12364
11641
  secondaryMeasures: schemas_array(zMeasure).or(zMeasure).optional()
12365
11642
  });
12366
11643
  const zDualMeasures = schemas_array(zDualMeasure);
11644
+ const zScatterMeasure = schemas_object({
11645
+ id: schemas_string(),
11646
+ xMeasures: schemas_array(zMeasure).or(zMeasure).optional(),
11647
+ yMeasures: schemas_array(zMeasure).or(zMeasure).optional()
11648
+ });
11649
+ const zScatterMeasures = schemas_array(zScatterMeasure);
12367
11650
  const zFoldInfo = schemas_object({
12368
11651
  foldMap: record(schemas_string(), schemas_string().or(schemas_undefined())),
12369
11652
  measureId: schemas_string(),
@@ -12371,10 +11654,14 @@
12371
11654
  measureValue: schemas_string()
12372
11655
  });
12373
11656
  const zUnfoldInfo = schemas_object({
11657
+ encodingX: schemas_string(),
11658
+ encodingY: schemas_string(),
11659
+ encodingColor: schemas_string(),
11660
+ encodingColorId: schemas_string(),
11661
+ encodingDetail: schemas_string(),
11662
+ encodingAngle: schemas_string(),
12374
11663
  colorItems: schemas_array(schemas_string()),
12375
- groupId: schemas_string(),
12376
- colorIdMap: record(schemas_string(), schemas_string()),
12377
- groupName: schemas_string()
11664
+ colorIdMap: record(schemas_string(), schemas_string())
12378
11665
  });
12379
11666
  const zDatasetReshapeInfo = schemas_array(schemas_object({
12380
11667
  id: schemas_string(),
@@ -12383,16 +11670,21 @@
12383
11670
  foldInfoList: schemas_array(zFoldInfo).nullish(),
12384
11671
  unfoldInfo: zUnfoldInfo
12385
11672
  }));
12386
- const zEncoding = schemas_array(schemas_object({
11673
+ const zEncoding = schemas_object({
12387
11674
  x: schemas_array(schemas_string()).nullish(),
12388
11675
  y: schemas_array(schemas_string()).nullish(),
12389
- color: schemas_array(schemas_string()).nullish(),
12390
- group: schemas_array(schemas_string()).nullish(),
12391
11676
  angle: schemas_array(schemas_string()).nullish(),
12392
11677
  radius: schemas_array(schemas_string()).nullish(),
11678
+ detail: schemas_array(schemas_string()).nullish(),
11679
+ color: schemas_array(schemas_string()).nullish(),
11680
+ size: schemas_array(schemas_string()).nullish(),
12393
11681
  tooltip: schemas_array(schemas_string()).nullish(),
12394
- size: schemas_array(schemas_string()).nullish()
12395
- }));
11682
+ label: schemas_array(schemas_string()).nullish(),
11683
+ row: schemas_array(schemas_string()).nullish(),
11684
+ column: schemas_array(schemas_string()).nullish(),
11685
+ group: schemas_array(schemas_string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
11686
+ });
11687
+ const zEncodings = schemas_array(zEncoding);
12396
11688
  const zXBandAxis = schemas_object({
12397
11689
  visible: schemas_boolean().default(true).nullish(),
12398
11690
  labelAutoHide: schemas_boolean().default(true).nullish(),
@@ -12655,7 +11947,6 @@
12655
11947
  crosshairLine: zCrosshairLine.nullish()
12656
11948
  });
12657
11949
  const zAreaPercentConfig = zAreaConfig;
12658
- const zAreaRangeConfig = zAreaConfig;
12659
11950
  const zDualAxisConfig = schemas_object({
12660
11951
  backgroundColor: zBackgroundColor.nullish(),
12661
11952
  label: zLabel.nullish(),
@@ -12710,7 +12001,6 @@
12710
12001
  barPercent: zBarPercentConfig.nullish(),
12711
12002
  area: zAreaConfig.nullish(),
12712
12003
  areaPercent: zAreaPercentConfig.nullish(),
12713
- areaRange: zAreaRangeConfig.nullish(),
12714
12004
  scatter: zScatterConfig.nullish(),
12715
12005
  dualAxis: zDualAxisConfig.nullish(),
12716
12006
  rose: zRoseConfig.nullish(),
@@ -13149,6 +12439,7 @@
13149
12439
  const zLine = schemas_object({
13150
12440
  chartType: literal('line'),
13151
12441
  dataset: zDataset.nullish(),
12442
+ encoding: zEncoding.nullish(),
13152
12443
  dimensions: zDimensions.nullish(),
13153
12444
  measures: zMeasureTree.nullish(),
13154
12445
  backgroundColor: zBackgroundColor.nullish(),
@@ -13173,6 +12464,7 @@
13173
12464
  const zColumn = schemas_object({
13174
12465
  chartType: literal('column'),
13175
12466
  dataset: zDataset.nullish(),
12467
+ encoding: zEncoding.nullish(),
13176
12468
  dimensions: zDimensions.nullish(),
13177
12469
  measures: zMeasureTree.nullish(),
13178
12470
  backgroundColor: zBackgroundColor.nullish(),
@@ -13195,6 +12487,7 @@
13195
12487
  const zColumnParallel = schemas_object({
13196
12488
  chartType: literal('columnParallel'),
13197
12489
  dataset: zDataset.nullish(),
12490
+ encoding: zEncoding.nullish(),
13198
12491
  dimensions: zDimensions.nullish(),
13199
12492
  measures: zMeasureTree.nullish(),
13200
12493
  backgroundColor: zBackgroundColor.nullish(),
@@ -13217,6 +12510,7 @@
13217
12510
  const zColumnPercent = schemas_object({
13218
12511
  chartType: literal('columnPercent'),
13219
12512
  dataset: zDataset.nullish(),
12513
+ encoding: zEncoding.nullish(),
13220
12514
  dimensions: zDimensions.nullish(),
13221
12515
  measures: zMeasureTree.nullish(),
13222
12516
  backgroundColor: zBackgroundColor.nullish(),
@@ -13239,6 +12533,7 @@
13239
12533
  const zBar = schemas_object({
13240
12534
  chartType: literal('bar'),
13241
12535
  dataset: zDataset.nullish(),
12536
+ encoding: zEncoding.nullish(),
13242
12537
  dimensions: zDimensions.nullish(),
13243
12538
  measures: zMeasureTree.nullish(),
13244
12539
  backgroundColor: zBackgroundColor.nullish(),
@@ -13261,6 +12556,7 @@
13261
12556
  const zBarParallel = schemas_object({
13262
12557
  chartType: literal('barParallel'),
13263
12558
  dataset: zDataset.nullish(),
12559
+ encoding: zEncoding.nullish(),
13264
12560
  dimensions: zDimensions.nullish(),
13265
12561
  measures: zMeasureTree.nullish(),
13266
12562
  backgroundColor: zBackgroundColor.nullish(),
@@ -13283,6 +12579,7 @@
13283
12579
  const zBarPercent = schemas_object({
13284
12580
  chartType: literal('barPercent'),
13285
12581
  dataset: zDataset.nullish(),
12582
+ encoding: zEncoding.nullish(),
13286
12583
  dimensions: zDimensions.nullish(),
13287
12584
  measures: zMeasureTree.nullish(),
13288
12585
  backgroundColor: zBackgroundColor.nullish(),
@@ -13305,6 +12602,7 @@
13305
12602
  const zArea = schemas_object({
13306
12603
  chartType: literal('area'),
13307
12604
  dataset: zDataset.nullish(),
12605
+ encoding: zEncoding.nullish(),
13308
12606
  dimensions: zDimensions.nullish(),
13309
12607
  measures: zMeasureTree.nullish(),
13310
12608
  backgroundColor: zBackgroundColor.nullish(),
@@ -13328,6 +12626,7 @@
13328
12626
  const zAreaPercent = schemas_object({
13329
12627
  chartType: literal('areaPercent'),
13330
12628
  dataset: zDataset.nullish(),
12629
+ encoding: zEncoding.nullish(),
13331
12630
  dimensions: zDimensions.nullish(),
13332
12631
  measures: zMeasureTree.nullish(),
13333
12632
  backgroundColor: zBackgroundColor.nullish(),
@@ -13348,31 +12647,13 @@
13348
12647
  annotationArea: schemas_array(zAnnotationArea).or(zAnnotationArea).nullish(),
13349
12648
  locale: zLocale.nullish()
13350
12649
  });
13351
- const zAreaRange = schemas_object({
13352
- chartType: literal('areaRange'),
13353
- dataset: zDataset.nullish(),
13354
- dimensions: zDimensions.nullish(),
13355
- measures: zMeasureTree.nullish(),
13356
- backgroundColor: zBackgroundColor.nullish(),
13357
- label: zLabel.nullish(),
13358
- xAxis: zXBandAxis.nullish(),
13359
- yAxis: zYLinearAxis.nullish(),
13360
- crosshairLine: zCrosshairLine.nullish(),
13361
- theme: zTheme.nullish(),
13362
- pointStyle: schemas_array(zPointStyle).or(zPointStyle).nullish(),
13363
- lineStyle: schemas_array(zLineStyle).or(zLineStyle).nullish(),
13364
- areaStyle: schemas_array(zAreaStyle).or(zAreaStyle).nullish(),
13365
- annotationPoint: schemas_array(zAnnotationPoint).or(zAnnotationPoint).nullish(),
13366
- annotationVerticalLine: schemas_array(zAnnotationVerticalLine).or(zAnnotationVerticalLine).nullish(),
13367
- annotationHorizontalLine: schemas_array(zAnnotationHorizontalLine).or(zAnnotationHorizontalLine).nullish(),
13368
- annotationArea: schemas_array(zAnnotationArea).or(zAnnotationArea).nullish(),
13369
- locale: zLocale.nullish()
13370
- });
13371
12650
  const zScatter = schemas_object({
13372
12651
  chartType: literal('scatter'),
13373
12652
  dataset: zDataset.nullish(),
12653
+ encoding: zEncoding.nullish(),
13374
12654
  dimensions: zDimensions.nullish(),
13375
12655
  measures: zMeasureTree.nullish(),
12656
+ scatterMeasures: zScatterMeasures.nullish(),
13376
12657
  backgroundColor: zBackgroundColor.nullish(),
13377
12658
  color: zColor.nullish(),
13378
12659
  label: zLabel.nullish(),
@@ -13422,6 +12703,7 @@
13422
12703
  const zRose = schemas_object({
13423
12704
  chartType: literal('rose'),
13424
12705
  dataset: zDataset.nullish(),
12706
+ encoding: zEncoding.nullish(),
13425
12707
  dimensions: zDimensions.nullish(),
13426
12708
  measures: zMeasureTree.nullish(),
13427
12709
  backgroundColor: zBackgroundColor.nullish(),
@@ -13435,6 +12717,7 @@
13435
12717
  const zRoseParallel = schemas_object({
13436
12718
  chartType: literal('roseParallel'),
13437
12719
  dataset: zDataset.nullish(),
12720
+ encoding: zEncoding.nullish(),
13438
12721
  dimensions: zDimensions.nullish(),
13439
12722
  measures: zMeasureTree.nullish(),
13440
12723
  backgroundColor: zBackgroundColor.nullish(),
@@ -13448,6 +12731,7 @@
13448
12731
  const zPie = schemas_object({
13449
12732
  chartType: literal('pie'),
13450
12733
  dataset: zDataset.nullish(),
12734
+ encoding: zEncoding.nullish(),
13451
12735
  dimensions: zDimensions.nullish(),
13452
12736
  measures: zMeasureTree.nullish(),
13453
12737
  backgroundColor: zBackgroundColor.nullish(),
@@ -13461,6 +12745,7 @@
13461
12745
  const zDonut = schemas_object({
13462
12746
  chartType: literal('donut'),
13463
12747
  dataset: zDataset.nullish(),
12748
+ encoding: zEncoding.nullish(),
13464
12749
  dimensions: zDimensions.nullish(),
13465
12750
  measures: zMeasureTree.nullish(),
13466
12751
  backgroundColor: zBackgroundColor.nullish(),
@@ -13474,6 +12759,7 @@
13474
12759
  const zRadar = schemas_object({
13475
12760
  chartType: literal('radar'),
13476
12761
  dataset: zDataset.nullish(),
12762
+ encoding: zEncoding.nullish(),
13477
12763
  dimensions: zDimensions.nullish(),
13478
12764
  measures: zMeasureTree.nullish(),
13479
12765
  backgroundColor: zBackgroundColor.nullish(),
@@ -13487,6 +12773,7 @@
13487
12773
  const zFunnel = schemas_object({
13488
12774
  chartType: literal('funnel'),
13489
12775
  dataset: zDataset.nullish(),
12776
+ encoding: zEncoding.nullish(),
13490
12777
  dimensions: zDimensions.nullish(),
13491
12778
  measures: zMeasureTree.nullish(),
13492
12779
  backgroundColor: zBackgroundColor.nullish(),
@@ -13522,7 +12809,6 @@
13522
12809
  zBarPercent,
13523
12810
  zArea,
13524
12811
  zAreaPercent,
13525
- zAreaRange,
13526
12812
  zScatter,
13527
12813
  zDualAxis,
13528
12814
  zPie,
@@ -13540,6 +12826,7 @@
13540
12826
  dimensions: zDimensionTree,
13541
12827
  measures: zMeasureTree,
13542
12828
  encoding: zEncoding,
12829
+ encodings: zEncodings,
13543
12830
  config: zConfig,
13544
12831
  analysis: zAnalysis,
13545
12832
  theme: zTheme,