@visactor/vseed 0.0.40 → 0.1.0

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 +1130 -1880
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1076 -1835
  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 +10 -1
  46. package/dist/types/chartType/area/zArea.d.ts +14 -0
  47. package/dist/types/chartType/areaPercent/areaPercent.d.ts +10 -1
  48. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +14 -0
  49. package/dist/types/chartType/bar/bar.d.ts +19 -30
  50. package/dist/types/chartType/bar/zBar.d.ts +14 -0
  51. package/dist/types/chartType/barParallel/barParallel.d.ts +18 -30
  52. package/dist/types/chartType/barParallel/zBarParallel.d.ts +14 -0
  53. package/dist/types/chartType/barPercent/barPercent.d.ts +16 -21
  54. package/dist/types/chartType/barPercent/zBarPercent.d.ts +14 -0
  55. package/dist/types/chartType/column/column.d.ts +16 -28
  56. package/dist/types/chartType/column/zColumn.d.ts +14 -0
  57. package/dist/types/chartType/columnParallel/columnParallel.d.ts +19 -27
  58. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +14 -0
  59. package/dist/types/chartType/columnPercent/columnPercent.d.ts +16 -25
  60. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +14 -0
  61. package/dist/types/chartType/donut/donut.d.ts +10 -1
  62. package/dist/types/chartType/donut/zDonut.d.ts +14 -0
  63. package/dist/types/chartType/dualAxis/dualAxis.d.ts +9 -1
  64. package/dist/types/chartType/funnel/funnel.d.ts +9 -1
  65. package/dist/types/chartType/funnel/zFunnel.d.ts +14 -0
  66. package/dist/types/chartType/heatmap/heatmap.d.ts +10 -1
  67. package/dist/types/chartType/index.d.ts +0 -1
  68. package/dist/types/chartType/line/line.d.ts +14 -10
  69. package/dist/types/chartType/line/zLine.d.ts +14 -0
  70. package/dist/types/chartType/pie/pie.d.ts +10 -1
  71. package/dist/types/chartType/pie/zPie.d.ts +14 -0
  72. package/dist/types/chartType/radar/radar.d.ts +10 -1
  73. package/dist/types/chartType/radar/zRadar.d.ts +14 -0
  74. package/dist/types/chartType/rose/rose.d.ts +10 -1
  75. package/dist/types/chartType/rose/zRose.d.ts +14 -0
  76. package/dist/types/chartType/roseParallel/roseParallel.d.ts +10 -1
  77. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +14 -0
  78. package/dist/types/chartType/scatter/scatter.d.ts +88 -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 +1104 -1860
  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,51 @@
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
+ const detail = encoding.detail || [];
1663
+ const color = encoding.color || [];
1664
+ const mergedDetail = [
1665
+ ...color.filter((d)=>!x.includes(d)),
1666
+ ...detail
1667
+ ];
1668
+ return {
1669
+ ...advancedVSeed,
1670
+ encoding: {
1671
+ ...encoding,
1672
+ detail: mergedDetail
1673
+ }
1674
+ };
1675
+ }
1676
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1677
+ const mergedEncoding = {
1678
+ x: dimensions.slice(0, 1).map((item)=>item.id),
1679
+ color: dimensions.slice(1).map((item)=>item.id),
1680
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1681
+ tooltip: dimensions.map((item)=>item.id),
1682
+ label: [],
1683
+ row: [],
1684
+ column: []
1685
+ };
1686
+ return {
1687
+ ...advancedVSeed,
1688
+ encoding: mergedEncoding
1689
+ };
1690
+ };
1614
1691
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1615
1692
  const { vseed } = context;
1616
1693
  const usePivotChart = isPivotChart(vseed);
1617
1694
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1618
1695
  return execPipeline(pipeline, context, advancedVSeed);
1619
1696
  };
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
1697
  function chunk_AIG3BDKO_i(...e) {
1630
1698
  return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1631
1699
  }
@@ -1676,84 +1744,53 @@
1676
1744
  foldInfo
1677
1745
  };
1678
1746
  };
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);
1747
+ const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1748
+ const { foldMeasureId, separator, colorItemAsId } = options;
1683
1749
  const unfoldInfo = {
1684
- groupName: unfoldGroupName,
1685
- groupId: unfoldGroupId,
1750
+ encodingAngle: AngleEncoding,
1751
+ encodingX: XEncoding,
1752
+ encodingY: YEncoding,
1753
+ encodingDetail: DetailEncoding,
1754
+ encodingColor: ColorEncoding,
1755
+ encodingColorId: ColorIdEncoding,
1686
1756
  colorItems: [],
1687
1757
  colorIdMap: {}
1688
1758
  };
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 = {};
1759
+ const { color, x, y, detail, angle } = encoding;
1760
+ const angleDimensions = angle ? dimensions.filter((dim)=>angle.includes(dim.id)) : [];
1761
+ const xDimensions = x ? dimensions.filter((dim)=>x.includes(dim.id)) : [];
1762
+ const yDimensions = y ? dimensions.filter((dim)=>y.includes(dim.id)) : [];
1763
+ const colorDimensions = color ? dimensions.filter((dim)=>color.includes(dim.id)) : [];
1764
+ const detailDimensions = detail ? dimensions.filter((dim)=>detail.includes(dim.id)) : [];
1765
+ const colorItems = new Set();
1766
+ const colorIdMap = {};
1700
1767
  for(let i = 0; i < dataset.length; i++){
1701
1768
  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
- }
1769
+ applyEncoding(AngleEncoding, angleDimensions, datum, separator);
1770
+ applyEncoding(XEncoding, xDimensions, datum, separator);
1771
+ applyEncoding(YEncoding, yDimensions, datum, separator);
1772
+ applyEncoding(ColorEncoding, colorDimensions, datum, separator);
1773
+ applyEncoding(DetailEncoding, detailDimensions, datum, separator);
1774
+ if (!datum[ColorEncoding]) continue;
1775
+ const measureId = String(datum[foldMeasureId]);
1776
+ const colorItem = String(datum[ColorEncoding]);
1777
+ const colorId = colorItemAsId ? colorItem : measureId ? [
1778
+ colorItem,
1779
+ measureId
1780
+ ].join(separator) : colorItem;
1781
+ datum[ColorIdEncoding] = colorId;
1782
+ colorIdMap[colorId] = colorItem;
1783
+ colorItems.add(colorId);
1715
1784
  }
1716
- unfoldInfo.colorItems = chunk_QJLMYOTX_i(colorItems);
1717
- unfoldInfo.colorIdMap = colorMap;
1785
+ unfoldInfo.colorItems = Array.from(colorItems);
1786
+ unfoldInfo.colorIdMap = colorIdMap;
1718
1787
  return {
1719
1788
  dataset,
1720
1789
  unfoldInfo
1721
1790
  };
1722
1791
  };
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
- };
1792
+ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1793
+ if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1757
1794
  };
1758
1795
  const emptyReshapeResult = {
1759
1796
  dataset: [],
@@ -1764,69 +1801,47 @@
1764
1801
  measureValue: ''
1765
1802
  },
1766
1803
  unfoldInfo: {
1767
- groupName: '',
1768
- groupId: '',
1804
+ encodingAngle: AngleEncoding,
1805
+ encodingX: XEncoding,
1806
+ encodingY: YEncoding,
1807
+ encodingDetail: DetailEncoding,
1808
+ encodingColor: ColorEncoding,
1809
+ encodingColorId: ColorIdEncoding,
1769
1810
  colorItems: [],
1770
1811
  colorIdMap: {}
1771
1812
  }
1772
1813
  };
1773
- const dataReshapeFor2D1M0Name = (dataset, dimensions, measures, options)=>{
1774
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
1814
+ const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1815
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1775
1816
  if (0 === dimensions.length && 0 === measures.length) return emptyReshapeResult;
1776
1817
  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
- }
1818
+ const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1819
+ foldMeasureId,
1820
+ separator: Separator,
1821
+ colorItemAsId
1822
+ });
1823
+ return {
1824
+ dataset: finalDataset,
1825
+ foldInfo,
1826
+ unfoldInfo
1827
+ };
1813
1828
  };
1814
- const reshapeTo2D1M0Name = (advancedVSeed, context)=>{
1829
+ const reshapeWithEncoding = (advancedVSeed, context)=>{
1815
1830
  const result = {
1816
1831
  ...advancedVSeed
1817
1832
  };
1818
1833
  const { vseed } = context;
1819
- const { dataset } = vseed;
1820
- const { dimensions, measures } = advancedVSeed;
1821
- if (!measures || !dimensions || !dataset) return result;
1834
+ const { dataset, chartType } = vseed;
1835
+ const { dimensions, measures, encoding } = advancedVSeed;
1836
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1822
1837
  if (0 === measures.length) throw new Error('measures can not be empty');
1823
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, dimensions, measures);
1838
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1824
1839
  return {
1825
1840
  ...result,
1826
1841
  dataset: newDatasets,
1827
1842
  datasetReshapeInfo: [
1828
1843
  {
1829
- id: '2D1M',
1844
+ id: String(chartType),
1830
1845
  index: 0,
1831
1846
  foldInfo,
1832
1847
  unfoldInfo
@@ -1836,31 +1851,27 @@
1836
1851
  measures
1837
1852
  };
1838
1853
  };
1839
- const pivotReshapeTo2D1M0Name = (advancedVSeed, context)=>{
1854
+ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1840
1855
  const result = {
1841
1856
  ...advancedVSeed
1842
1857
  };
1843
1858
  const { vseed } = context;
1844
1859
  const { dataset } = vseed;
1845
- const { measures } = advancedVSeed;
1846
- const dimensions = advancedVSeed.dimensions;
1847
- if (!measures || !dimensions) return result;
1860
+ const { dimensions, measures, encoding } = advancedVSeed;
1861
+ if (!measures || !dimensions || !dataset || !encoding) return result;
1862
+ if (0 === measures.length) throw new Error('measures can not be empty');
1848
1863
  const measureGroups = [];
1849
1864
  if (measures) measures.forEach((measure)=>{
1850
1865
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1851
1866
  });
1852
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
1853
- const newDatasets = [];
1867
+ const datasets = [];
1854
1868
  const datasetReshapeInfo = [];
1855
1869
  measureGroups.forEach((measureGroup, index)=>{
1856
1870
  const measures = measureGroup.children;
1857
1871
  if (!measures) return;
1858
1872
  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
1873
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1874
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`
1864
1875
  });
1865
1876
  const reshapeInfo = {
1866
1877
  id: groupId,
@@ -1868,52 +1879,15 @@
1868
1879
  foldInfo,
1869
1880
  unfoldInfo
1870
1881
  };
1871
- newDatasets.push(newSubDataset);
1882
+ datasets.push(newSubDataset);
1872
1883
  datasetReshapeInfo.push(reshapeInfo);
1873
1884
  });
1874
1885
  return {
1875
1886
  ...result,
1876
- dataset: newDatasets,
1887
+ dataset: datasets,
1877
1888
  datasetReshapeInfo: datasetReshapeInfo
1878
1889
  };
1879
1890
  };
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
1891
  function chunk_NFFV4IQT_m(...r) {
1918
1892
  return chunk_WIMGWYZL_u(chunk_NFFV4IQT_o, r);
1919
1893
  }
@@ -1928,42 +1902,46 @@
1928
1902
  ...advancedVSeed
1929
1903
  };
1930
1904
  const { vseed } = context;
1931
- const { sort: sortAxis, dataset } = vseed;
1932
- const { encoding } = advancedVSeed;
1933
- const xField = encoding?.[0]?.x?.[0];
1905
+ const { sort: sortAxis } = vseed;
1906
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1907
+ const { unfoldInfo } = datasetReshapeInfo[0];
1908
+ const xField = unfoldInfo.encodingX;
1934
1909
  if (!sortAxis || !xField) return advancedVSeed;
1935
1910
  if (!result.analysis) result.analysis = {};
1936
1911
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1937
- const axisOrderResult = calcOrder(sortAxis, xField, dataset);
1912
+ const axisOrderResult = calcOrder(sortAxis, xField, dataset.flat(2));
1938
1913
  result.analysis.orderMapping[xField] = axisOrderResult;
1939
1914
  return result;
1940
1915
  };
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;
1916
+ const calcOrder = (sortConfig, id, dataset)=>{
1917
+ if (sortConfig.customOrder) return sortConfig.customOrder;
1918
+ const order = sortConfig.order || 'asc';
1919
+ const orderBy = sortConfig.orderBy;
1920
+ const res = chunk_NFFV4IQT_m(dataset, (a, b)=>{
1921
+ const aValue = a[orderBy || id];
1922
+ const bValue = b[orderBy || id];
1923
+ if ('asc' === order) {
1924
+ if (aValue < bValue) return -1;
1925
+ if (aValue > bValue) return 1;
1926
+ return 0;
1927
+ }
1928
+ if (aValue > bValue) return -1;
1929
+ if (aValue < bValue) return 1;
1930
+ return 0;
1931
+ });
1932
+ return chunk_QJLMYOTX_i(res.map((item)=>item[id]));
1955
1933
  };
1956
- const sort_sortLegend = (advancedVSeed, context)=>{
1934
+ const sortLegend_sortLegend = (advancedVSeed, context)=>{
1957
1935
  const result = {
1958
1936
  ...advancedVSeed
1959
1937
  };
1960
1938
  const { vseed } = context;
1961
1939
  const { sortLegend } = vseed;
1962
- const { datasetReshapeInfo } = advancedVSeed;
1963
- const groupField = datasetReshapeInfo?.[0]?.unfoldInfo?.groupId;
1940
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1941
+ const colorId = datasetReshapeInfo?.[0]?.unfoldInfo?.encodingColorId;
1964
1942
  const colorIdMap = datasetReshapeInfo?.[0]?.unfoldInfo?.colorIdMap;
1965
1943
  const colorItems = datasetReshapeInfo?.[0]?.unfoldInfo?.colorItems;
1966
- if (!sortLegend || !groupField || !colorIdMap || !colorItems) return advancedVSeed;
1944
+ if (!sortLegend || !colorId || !colorIdMap || !colorItems) return advancedVSeed;
1967
1945
  if (!result.analysis) result.analysis = {};
1968
1946
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1969
1947
  if (sortLegend.customOrder) {
@@ -1972,15 +1950,14 @@
1972
1950
  return pre;
1973
1951
  }, {});
1974
1952
  const orderRes = sortLegend.customOrder.map((itemNameOrId)=>nameMap[itemNameOrId] ? nameMap[itemNameOrId] : itemNameOrId);
1975
- result.analysis.orderMapping[groupField] = orderRes;
1953
+ result.analysis.orderMapping[colorId] = orderRes;
1976
1954
  return result;
1977
1955
  }
1978
- const dataset = advancedVSeed.dataset?.flat(2);
1979
- const orderRes = calcOrder(sortLegend, groupField, dataset || []);
1980
- result.analysis.orderMapping[groupField] = orderRes;
1956
+ const orderRes = sortLegend_calcOrder(sortLegend, colorId, dataset?.flat(2) || []);
1957
+ result.analysis.orderMapping[colorId] = orderRes;
1981
1958
  return result;
1982
1959
  };
1983
- const calcOrder = (sortConfig, id, dataset)=>{
1960
+ const sortLegend_calcOrder = (sortConfig, id, dataset)=>{
1984
1961
  if (sortConfig.customOrder) return sortConfig.customOrder;
1985
1962
  const order = sortConfig.order || 'asc';
1986
1963
  const orderBy = sortConfig.orderBy;
@@ -2112,14 +2089,14 @@
2112
2089
  initAdvancedVSeed_initAdvancedVSeed,
2113
2090
  autoMeasures_autoMeasures,
2114
2091
  autoDimensions_autoDimensions,
2092
+ encodingForColumn,
2115
2093
  pivotAdapter([
2116
- reshapeTo2D1M0Name
2094
+ reshapeWithEncoding
2117
2095
  ], [
2118
- pivotReshapeTo2D1M0Name
2096
+ pivotReshapeWithEncoding
2119
2097
  ]),
2120
- encodingXY,
2121
2098
  sortXBandAxis,
2122
- sort_sortLegend,
2099
+ sortLegend_sortLegend,
2123
2100
  lineConfig,
2124
2101
  theme_theme,
2125
2102
  markStyle_markStyle,
@@ -2130,13 +2107,13 @@
2130
2107
  ...spec
2131
2108
  };
2132
2109
  const { advancedVSeed } = context;
2133
- const { encoding } = advancedVSeed;
2134
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
2110
+ const { datasetReshapeInfo } = advancedVSeed;
2111
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
2135
2112
  result.type = 'line';
2136
2113
  result.direction = 'vertical';
2137
- result.xField = encoding[0].x[0];
2138
- result.yField = encoding[0].y[0];
2139
- result.seriesField = encoding[0].group[0];
2114
+ result.xField = unfoldInfo.encodingX;
2115
+ result.yField = foldInfo.measureValue;
2116
+ result.seriesField = unfoldInfo.encodingColorId;
2140
2117
  result.padding = 0;
2141
2118
  result.region = [
2142
2119
  {
@@ -2212,11 +2189,12 @@
2212
2189
  };
2213
2190
  const datasetXY = (spec, context)=>{
2214
2191
  const { advancedVSeed, vseed } = context;
2215
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
2192
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
2193
+ const { unfoldInfo } = datasetReshapeInfo[0];
2216
2194
  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];
2195
+ const angle = unfoldInfo.encodingAngle;
2196
+ const x = unfoldInfo.encodingX;
2197
+ const colorId = unfoldInfo.encodingColorId;
2220
2198
  const id = datasetReshapeInfo[0].id;
2221
2199
  const fields = {};
2222
2200
  if (angle) fields[angle] = {
@@ -2233,14 +2211,14 @@
2233
2211
  sortIndex: 0
2234
2212
  };
2235
2213
  }
2236
- if (group) {
2237
- const order = orderMapping[group];
2238
- if (order) fields[group] = {
2214
+ if (colorId) {
2215
+ const order = orderMapping[colorId];
2216
+ if (order) fields[colorId] = {
2239
2217
  sortIndex: 0,
2240
2218
  domain: order,
2241
2219
  lockStatisticsByDomain: true
2242
2220
  };
2243
- else fields[group] = {
2221
+ else fields[colorId] = {
2244
2222
  sortIndex: 0
2245
2223
  };
2246
2224
  }
@@ -2493,7 +2471,7 @@
2493
2471
  } } = baseConfig;
2494
2472
  const { enable } = tooltip;
2495
2473
  const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2496
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
2474
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2497
2475
  result.tooltip = {
2498
2476
  visible: enable,
2499
2477
  mark: {
@@ -2514,7 +2492,7 @@
2514
2492
  {
2515
2493
  visible: true,
2516
2494
  hasShape: true,
2517
- key: (datum)=>datum && datum[measureName || groupName] || '',
2495
+ key: (datum)=>datum && datum[measureName || colorName] || '',
2518
2496
  value: (datum)=>{
2519
2497
  if (!datum) return '';
2520
2498
  const value = datum[measureValue];
@@ -2536,7 +2514,7 @@
2536
2514
  content: [
2537
2515
  {
2538
2516
  visible: true,
2539
- key: (datum)=>datum && datum[groupName] || '',
2517
+ key: (datum)=>datum && datum[colorName] || '',
2540
2518
  value: (datum)=>{
2541
2519
  if (!datum) return '';
2542
2520
  const value = datum[measureValue];
@@ -2874,7 +2852,8 @@
2874
2852
  const pointStateHover = (spec, context)=>{
2875
2853
  const point = spec.point || {};
2876
2854
  const { advancedVSeed } = context;
2877
- const { encoding } = advancedVSeed;
2855
+ const { datasetReshapeInfo } = advancedVSeed;
2856
+ const { unfoldInfo } = datasetReshapeInfo[0];
2878
2857
  const result = {
2879
2858
  ...spec,
2880
2859
  point: {
@@ -2885,7 +2864,7 @@
2885
2864
  scaleX: 1.4,
2886
2865
  scaleY: 1.4,
2887
2866
  stroke: (datum, context)=>{
2888
- const field = encoding[0]?.group?.[0];
2867
+ const field = unfoldInfo.encodingColorId;
2889
2868
  const color = context.seriesColor(datum[field]);
2890
2869
  return color;
2891
2870
  },
@@ -2915,7 +2894,8 @@
2915
2894
  };
2916
2895
  const lineStyle_lineStyle = (spec, context)=>{
2917
2896
  const { advancedVSeed } = context;
2918
- const { markStyle, encoding, dataset } = advancedVSeed;
2897
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
2898
+ const { unfoldInfo } = datasetReshapeInfo[0];
2919
2899
  const { lineStyle } = markStyle;
2920
2900
  if (!lineStyle) return spec;
2921
2901
  const result = {
@@ -2924,8 +2904,8 @@
2924
2904
  const lineStyles = Array.isArray(lineStyle) ? lineStyle : [
2925
2905
  lineStyle
2926
2906
  ];
2927
- const group = encoding[0]?.group?.[0];
2928
- const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
2907
+ const colorId = unfoldInfo.encodingColorId;
2908
+ const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[colorId ?? '']);
2929
2909
  const customMap = lineStyles.reduce((result, style, index)=>{
2930
2910
  const { lineColor, lineColorOpacity, lineSmooth, lineStyle, lineWidth = 2, lineVisible = true } = style;
2931
2911
  const dashSegment = 2 * lineWidth;
@@ -2946,7 +2926,7 @@
2946
2926
  [`custom${index + 1}`]: {
2947
2927
  level: index + 1,
2948
2928
  filter: (datum)=>{
2949
- const lineData = lineGroups[datum[group ?? '']];
2929
+ const lineData = lineGroups[datum[colorId ?? '']];
2950
2930
  for (const d of lineData)if (selector_selector(d, style.selector)) return true;
2951
2931
  return false;
2952
2932
  },
@@ -3044,7 +3024,8 @@
3044
3024
  }
3045
3025
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
3046
3026
  const { advancedVSeed } = context;
3047
- const { annotation, encoding } = advancedVSeed;
3027
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3028
+ const { unfoldInfo } = datasetReshapeInfo[0];
3048
3029
  if (!annotation || !annotation.annotationVerticalLine) return spec;
3049
3030
  const { annotationVerticalLine } = annotation;
3050
3031
  const annotationVerticalLineList = Array.isArray(annotationVerticalLine) ? annotationVerticalLine : [
@@ -3124,7 +3105,7 @@
3124
3105
  }
3125
3106
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3126
3107
  return selectedData.map((datum)=>{
3127
- const x = encoding[0]?.x?.[0];
3108
+ const x = unfoldInfo.encodingX;
3128
3109
  if (!x) return {};
3129
3110
  return generateOneMarkLine(datum[x]);
3130
3111
  });
@@ -3141,7 +3122,8 @@
3141
3122
  };
3142
3123
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
3143
3124
  const { advancedVSeed } = context;
3144
- const { annotation, encoding } = advancedVSeed;
3125
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3126
+ const { unfoldInfo } = datasetReshapeInfo[0];
3145
3127
  if (!annotation || !annotation.annotationHorizontalLine) return spec;
3146
3128
  const { annotationHorizontalLine } = annotation;
3147
3129
  const annotationVerticalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
@@ -3221,7 +3203,7 @@
3221
3203
  }
3222
3204
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3223
3205
  return selectedData.map((datum)=>{
3224
- const y = encoding[0]?.y?.[0];
3206
+ const y = unfoldInfo.encodingY;
3225
3207
  if (!y) return {};
3226
3208
  return generateOneMarkLine(datum[y]);
3227
3209
  });
@@ -3502,13 +3484,10 @@
3502
3484
  ...spec
3503
3485
  };
3504
3486
  const { advancedVSeed } = context;
3505
- const { measures, datasetReshapeInfo, encoding, dataset } = advancedVSeed;
3487
+ const { measures, datasetReshapeInfo, dataset } = advancedVSeed;
3506
3488
  const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3507
3489
  const indicators = datasetReshapeInfo.map((reshapeInfo, index)=>{
3508
3490
  const measure = measures?.find((d)=>d.id === reshapeInfo.id);
3509
- const newEncoding = [
3510
- encoding[index]
3511
- ];
3512
3491
  const newDataset = dataset[index];
3513
3492
  const newDatasetReshapeInfo = [
3514
3493
  {
@@ -3524,8 +3503,7 @@
3524
3503
  advancedVSeed: {
3525
3504
  ...advancedVSeed,
3526
3505
  datasetReshapeInfo: newDatasetReshapeInfo,
3527
- dataset: newDataset,
3528
- encoding: newEncoding
3506
+ dataset: newDataset
3529
3507
  }
3530
3508
  };
3531
3509
  const chartSpec = execPipeline(chartPipeline, newContext, {});
@@ -3711,7 +3689,7 @@
3711
3689
  }
3712
3690
  },
3713
3691
  label: {
3714
- formatMethod: (value)=>colorIdMap[String(value)] ?? value,
3692
+ formatMethod: (value)=>colorIdMap[value] ?? value,
3715
3693
  style: {
3716
3694
  fontSize: labelFontSize,
3717
3695
  fill: labelFontColor,
@@ -3794,151 +3772,18 @@
3794
3772
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3795
3773
  Builder._specPipelineMap.line = lineSpecPipeline;
3796
3774
  };
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
3775
  const columnAdvancedPipeline = [
3931
3776
  initAdvancedVSeed_initAdvancedVSeed,
3932
3777
  autoMeasures_autoMeasures,
3933
3778
  autoDimensions_autoDimensions,
3779
+ encodingForColumn,
3934
3780
  pivotAdapter([
3935
- reshapeTo2D1M
3781
+ reshapeWithEncoding
3936
3782
  ], [
3937
- pivotReshapeTo2D1M
3783
+ pivotReshapeWithEncoding
3938
3784
  ]),
3939
- encodingXY,
3940
3785
  sortXBandAxis,
3941
- sort_sortLegend,
3786
+ sortLegend_sortLegend,
3942
3787
  columnConfig,
3943
3788
  theme_theme,
3944
3789
  markStyle_markStyle,
@@ -3949,13 +3794,13 @@
3949
3794
  ...spec
3950
3795
  };
3951
3796
  const { advancedVSeed } = context;
3952
- const { encoding } = advancedVSeed;
3953
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3797
+ const { datasetReshapeInfo } = advancedVSeed;
3798
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
3954
3799
  result.type = 'bar';
3955
3800
  result.direction = 'vertical';
3956
- result.xField = encoding[0].x[0];
3957
- result.yField = encoding[0].y[0];
3958
- result.seriesField = encoding[0].group[0];
3801
+ result.xField = unfoldInfo.encodingX;
3802
+ result.yField = foldInfo.measureValue;
3803
+ result.seriesField = unfoldInfo.encodingColorId;
3959
3804
  result.padding = 0;
3960
3805
  result.region = [
3961
3806
  {
@@ -4275,14 +4120,14 @@
4275
4120
  initAdvancedVSeed_initAdvancedVSeed,
4276
4121
  autoMeasures_autoMeasures,
4277
4122
  autoDimensions_autoDimensions,
4123
+ encodingForColumn,
4278
4124
  pivotAdapter([
4279
- reshapeTo2D1M
4125
+ reshapeWithEncoding
4280
4126
  ], [
4281
- pivotReshapeTo2D1M
4127
+ pivotReshapeWithEncoding
4282
4128
  ]),
4283
- encodingXY,
4284
4129
  sortXBandAxis,
4285
- sort_sortLegend,
4130
+ sortLegend_sortLegend,
4286
4131
  columnParallelConfig,
4287
4132
  theme_theme,
4288
4133
  markStyle_markStyle,
@@ -4293,20 +4138,19 @@
4293
4138
  ...spec
4294
4139
  };
4295
4140
  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;
4141
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4142
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4299
4143
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4300
4144
  result.type = 'bar';
4301
4145
  result.direction = 'vertical';
4302
4146
  result.xField = sameDimensionsMode ? [
4303
- encoding[0].x[0]
4147
+ unfoldInfo.encodingX
4304
4148
  ] : [
4305
- encoding[0].x[0],
4306
- unfoldInfo.groupId
4149
+ unfoldInfo.encodingX,
4150
+ unfoldInfo.encodingDetail
4307
4151
  ];
4308
- result.yField = encoding[0].y[0];
4309
- result.seriesField = encoding[0].group[0];
4152
+ result.yField = foldInfo.measureValue;
4153
+ result.seriesField = unfoldInfo.encodingColorId;
4310
4154
  result.padding = 0;
4311
4155
  result.region = [
4312
4156
  {
@@ -4373,14 +4217,14 @@
4373
4217
  initAdvancedVSeed_initAdvancedVSeed,
4374
4218
  autoMeasures_autoMeasures,
4375
4219
  autoDimensions_autoDimensions,
4220
+ encodingForColumn,
4376
4221
  pivotAdapter([
4377
- reshapeTo2D1M
4222
+ reshapeWithEncoding
4378
4223
  ], [
4379
- pivotReshapeTo2D1M
4224
+ pivotReshapeWithEncoding
4380
4225
  ]),
4381
- encodingXY,
4382
4226
  sortXBandAxis,
4383
- sort_sortLegend,
4227
+ sortLegend_sortLegend,
4384
4228
  columnPercentConfig,
4385
4229
  theme_theme,
4386
4230
  markStyle_markStyle,
@@ -4450,55 +4294,70 @@
4450
4294
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4451
4295
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4452
4296
  };
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
4471
- ];
4472
- const color = [
4473
- foldInfo.measureName
4297
+ const encodingForBar = (advancedVSeed, context)=>{
4298
+ const { vseed } = context;
4299
+ const { dimensions } = advancedVSeed;
4300
+ if (!dimensions) return advancedVSeed;
4301
+ const encoding = vseed.encoding;
4302
+ if (encoding) {
4303
+ const y = encoding.y || [];
4304
+ const detail = encoding.detail || [];
4305
+ const color = encoding.color || [];
4306
+ const mergedDetail = [
4307
+ ...color.filter((d)=>!y.includes(d)),
4308
+ ...detail
4474
4309
  ];
4475
- return [
4476
- ...prev,
4477
- {
4478
- x,
4479
- y,
4480
- group,
4481
- color
4310
+ return {
4311
+ ...advancedVSeed,
4312
+ encoding: {
4313
+ ...encoding,
4314
+ detail: mergedDetail
4482
4315
  }
4483
- ];
4484
- }, []);
4316
+ };
4317
+ }
4318
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4319
+ const mergedEncoding = {
4320
+ y: dimensions.slice(0, 1).map((item)=>item.id),
4321
+ color: dimensions.slice(1).map((item)=>item.id),
4322
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4323
+ tooltip: dimensions.map((item)=>item.id),
4324
+ label: [],
4325
+ row: [],
4326
+ column: []
4327
+ };
4485
4328
  return {
4486
- ...result,
4487
- encoding
4329
+ ...advancedVSeed,
4330
+ encoding: mergedEncoding
4331
+ };
4332
+ };
4333
+ const sortYBandAxis = (advancedVSeed, context)=>{
4334
+ const result = {
4335
+ ...advancedVSeed
4488
4336
  };
4337
+ const { vseed } = context;
4338
+ const { sort: sortAxis } = vseed;
4339
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
4340
+ const { unfoldInfo } = datasetReshapeInfo[0];
4341
+ const yField = unfoldInfo?.encodingY;
4342
+ if (!sortAxis || !yField) return advancedVSeed;
4343
+ if (!result.analysis) result.analysis = {};
4344
+ if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
4345
+ const axisOrderResult = calcOrder(sortAxis, yField, dataset.flat(2));
4346
+ result.analysis.orderMapping[yField] = axisOrderResult;
4347
+ return result;
4489
4348
  };
4490
4349
  const barAdvancedPipeline = [
4491
4350
  initAdvancedVSeed_initAdvancedVSeed,
4492
4351
  autoMeasures_autoMeasures,
4493
4352
  autoDimensions_autoDimensions,
4353
+ encodingForBar,
4494
4354
  pivotAdapter([
4495
- reshapeTo2D1M
4355
+ reshapeWithEncoding
4496
4356
  ], [
4497
- pivotReshapeTo2D1M
4357
+ pivotReshapeWithEncoding
4498
4358
  ]),
4499
- encodingYX,
4500
4359
  sortYBandAxis,
4501
- sort_sortLegend,
4360
+ sortLegend_sortLegend,
4502
4361
  barConfig,
4503
4362
  theme_theme,
4504
4363
  markStyle_markStyle,
@@ -4509,13 +4368,13 @@
4509
4368
  ...spec
4510
4369
  };
4511
4370
  const { advancedVSeed } = context;
4512
- const { encoding } = advancedVSeed;
4513
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4371
+ const { datasetReshapeInfo } = advancedVSeed;
4372
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4514
4373
  result.type = 'bar';
4515
4374
  result.direction = 'horizontal';
4516
- result.yField = encoding[0].y?.[0];
4517
- result.xField = encoding[0].x?.[0];
4518
- result.seriesField = encoding[0].group?.[0];
4375
+ result.yField = unfoldInfo.encodingY;
4376
+ result.xField = foldInfo.measureValue;
4377
+ result.seriesField = unfoldInfo.encodingColorId;
4519
4378
  result.padding = 0;
4520
4379
  result.region = [
4521
4380
  {
@@ -4527,11 +4386,12 @@
4527
4386
  };
4528
4387
  const datasetYX = (spec, context)=>{
4529
4388
  const { advancedVSeed, vseed } = context;
4530
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
4389
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
4390
+ const { unfoldInfo } = datasetReshapeInfo[0];
4531
4391
  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];
4392
+ const angle = unfoldInfo.encodingAngle;
4393
+ const y = unfoldInfo.encodingY;
4394
+ const colorId = unfoldInfo.encodingColorId;
4535
4395
  const id = datasetReshapeInfo[0].id;
4536
4396
  const fields = {};
4537
4397
  if (angle) fields[angle] = {
@@ -4548,14 +4408,14 @@
4548
4408
  sortIndex: 0
4549
4409
  };
4550
4410
  }
4551
- if (group) {
4552
- const order = orderMapping[group];
4553
- if (order) fields[group] = {
4411
+ if (colorId) {
4412
+ const order = orderMapping[colorId];
4413
+ if (order) fields[colorId] = {
4554
4414
  sortIndex: 0,
4555
4415
  domain: order,
4556
4416
  lockStatisticsByDomain: true
4557
4417
  };
4558
- else fields[group] = {
4418
+ else fields[colorId] = {
4559
4419
  sortIndex: 0
4560
4420
  };
4561
4421
  }
@@ -4843,14 +4703,14 @@
4843
4703
  initAdvancedVSeed_initAdvancedVSeed,
4844
4704
  autoMeasures_autoMeasures,
4845
4705
  autoDimensions_autoDimensions,
4706
+ encodingForBar,
4846
4707
  pivotAdapter([
4847
- reshapeTo2D1M
4708
+ reshapeWithEncoding
4848
4709
  ], [
4849
- pivotReshapeTo2D1M
4710
+ pivotReshapeWithEncoding
4850
4711
  ]),
4851
- encodingYX,
4852
4712
  sortYBandAxis,
4853
- sort_sortLegend,
4713
+ sortLegend_sortLegend,
4854
4714
  barParallelConfig,
4855
4715
  theme_theme,
4856
4716
  markStyle_markStyle,
@@ -4861,20 +4721,19 @@
4861
4721
  ...spec
4862
4722
  };
4863
4723
  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;
4724
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4725
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4867
4726
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4868
4727
  result.type = 'bar';
4869
4728
  result.direction = 'horizontal';
4870
4729
  result.yField = sameDimensionsMode ? [
4871
- encoding[0].y[0]
4730
+ unfoldInfo.encodingY
4872
4731
  ] : [
4873
- encoding[0].y[0],
4874
- unfoldInfo.groupId
4732
+ unfoldInfo.encodingY,
4733
+ unfoldInfo.encodingDetail
4875
4734
  ];
4876
- result.xField = encoding[0].x[0];
4877
- result.seriesField = encoding[0].group[0];
4735
+ result.xField = foldInfo.measureValue;
4736
+ result.seriesField = unfoldInfo.encodingColorId;
4878
4737
  result.padding = 0;
4879
4738
  result.region = [
4880
4739
  {
@@ -4940,14 +4799,14 @@
4940
4799
  initAdvancedVSeed_initAdvancedVSeed,
4941
4800
  autoMeasures_autoMeasures,
4942
4801
  autoDimensions_autoDimensions,
4802
+ encodingForBar,
4943
4803
  pivotAdapter([
4944
- reshapeTo2D1M
4804
+ reshapeWithEncoding
4945
4805
  ], [
4946
- pivotReshapeTo2D1M
4806
+ pivotReshapeWithEncoding
4947
4807
  ]),
4948
- encodingYX,
4949
4808
  sortYBandAxis,
4950
- sort_sortLegend,
4809
+ sortLegend_sortLegend,
4951
4810
  barPercentConfig,
4952
4811
  theme_theme,
4953
4812
  markStyle_markStyle,
@@ -5011,14 +4870,14 @@
5011
4870
  initAdvancedVSeed_initAdvancedVSeed,
5012
4871
  autoMeasures_autoMeasures,
5013
4872
  autoDimensions_autoDimensions,
4873
+ encodingForColumn,
5014
4874
  pivotAdapter([
5015
- reshapeTo2D1M0Name
4875
+ reshapeWithEncoding
5016
4876
  ], [
5017
- pivotReshapeTo2D1M0Name
4877
+ pivotReshapeWithEncoding
5018
4878
  ]),
5019
- encodingXY,
5020
4879
  sortXBandAxis,
5021
- sort_sortLegend,
4880
+ sortLegend_sortLegend,
5022
4881
  areaConfig,
5023
4882
  theme_theme,
5024
4883
  markStyle_markStyle,
@@ -5029,13 +4888,13 @@
5029
4888
  ...spec
5030
4889
  };
5031
4890
  const { advancedVSeed } = context;
5032
- const { encoding } = advancedVSeed;
5033
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4891
+ const { datasetReshapeInfo } = advancedVSeed;
4892
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
5034
4893
  result.type = 'area';
5035
4894
  result.direction = 'vertical';
5036
- result.xField = encoding[0].x[0];
5037
- result.yField = encoding[0].y[0];
5038
- result.seriesField = encoding[0].group[0];
4895
+ result.yField = foldInfo.measureValue;
4896
+ result.xField = unfoldInfo.encodingX;
4897
+ result.seriesField = unfoldInfo.encodingColorId;
5039
4898
  result.padding = 0;
5040
4899
  result.region = [
5041
4900
  {
@@ -5047,8 +4906,9 @@
5047
4906
  };
5048
4907
  const areaStyle_areaStyle = (spec, context)=>{
5049
4908
  const { advancedVSeed } = context;
5050
- const { markStyle, encoding, dataset } = advancedVSeed;
4909
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
5051
4910
  const { areaStyle } = markStyle;
4911
+ const { unfoldInfo } = datasetReshapeInfo[0];
5052
4912
  if (!areaStyle) return {
5053
4913
  ...spec,
5054
4914
  area: {
@@ -5061,7 +4921,7 @@
5061
4921
  const areaStyles = Array.isArray(areaStyle) ? areaStyle : [
5062
4922
  areaStyle
5063
4923
  ];
5064
- const group = encoding[0]?.group?.[0];
4924
+ const group = unfoldInfo.encodingColorId;
5065
4925
  const areaGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
5066
4926
  const customMap = areaStyles.reduce((result, style, index)=>{
5067
4927
  const { areaColor, areaColorOpacity, areaVisible = true } = style;
@@ -5155,14 +5015,14 @@
5155
5015
  initAdvancedVSeed_initAdvancedVSeed,
5156
5016
  autoMeasures_autoMeasures,
5157
5017
  autoDimensions_autoDimensions,
5018
+ encodingForColumn,
5158
5019
  pivotAdapter([
5159
- reshapeTo2D1M0Name
5020
+ reshapeWithEncoding
5160
5021
  ], [
5161
- pivotReshapeTo2D1M0Name
5022
+ pivotReshapeWithEncoding
5162
5023
  ]),
5163
- encodingXY,
5164
5024
  sortXBandAxis,
5165
- sort_sortLegend,
5025
+ sortLegend_sortLegend,
5166
5026
  areaPercentConfig,
5167
5027
  theme_theme,
5168
5028
  markStyle_markStyle,
@@ -5227,16 +5087,20 @@
5227
5087
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5228
5088
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5229
5089
  };
5230
- const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
5090
+ const autoScatterMeasures = (advancedVSeed, context)=>{
5231
5091
  const result = {
5232
5092
  ...advancedVSeed
5233
5093
  };
5234
5094
  const { vseed } = context;
5235
- const { measures, dataset } = vseed;
5095
+ const { dataset, scatterMeasures, measures } = vseed;
5236
5096
  if (!dataset) throw new Error('dataset is required');
5237
5097
  if (0 === dataset.length) return result;
5238
- if (measures) {
5239
- result.measures = auto2M1Group(measures);
5098
+ if (scatterMeasures) {
5099
+ result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5100
+ return result;
5101
+ }
5102
+ if (measures && measureDepth(measures) > 1) {
5103
+ result.measures = measures;
5240
5104
  return result;
5241
5105
  }
5242
5106
  const top100dataset = dataset.slice(0, 100);
@@ -5244,7 +5108,7 @@
5244
5108
  ...prev,
5245
5109
  ...cur
5246
5110
  }), {});
5247
- const newMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5111
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5248
5112
  '',
5249
5113
  null,
5250
5114
  void 0
@@ -5252,693 +5116,277 @@
5252
5116
  id: measure,
5253
5117
  alias: measure
5254
5118
  }));
5255
- result.measures = auto2M1Group(newMeasures);
5119
+ if (0 === newMeasures.length) result.measures = [];
5120
+ else if (1 === newMeasures.length) result.measures = [
5121
+ {
5122
+ id: 'primary',
5123
+ alias: 'primary',
5124
+ children: newMeasures
5125
+ }
5126
+ ];
5127
+ else if (newMeasures.length > 1) result.measures = [
5128
+ {
5129
+ id: 'primary',
5130
+ alias: 'primary',
5131
+ children: newMeasures.slice(0, 1)
5132
+ },
5133
+ {
5134
+ id: 'secondary',
5135
+ alias: 'secondary',
5136
+ children: newMeasures.slice(1)
5137
+ }
5138
+ ];
5256
5139
  return result;
5257
5140
  };
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: []
5141
+ const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
5142
+ const measureTree = scatterMeasures.map((item, index)=>{
5143
+ const { xMeasures, yMeasures } = item;
5144
+ const groupChildren = [];
5145
+ let id = '';
5146
+ if (xMeasures) {
5147
+ const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
5148
+ xMeasures
5149
+ ];
5150
+ const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
5151
+ id += alias;
5152
+ groupChildren.push({
5153
+ id: `${index}-x`,
5154
+ alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
5155
+ children: arrXMeasures
5156
+ });
5157
+ }
5158
+ if (yMeasures) {
5159
+ const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
5160
+ yMeasures
5161
+ ];
5162
+ const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
5163
+ id += alias;
5164
+ groupChildren.push({
5165
+ id: `${index}-y`,
5166
+ alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
5167
+ children: arrYMeasures
5168
+ });
5169
+ }
5170
+ return {
5171
+ id,
5172
+ alias: id,
5173
+ children: groupChildren
5174
+ };
5274
5175
  });
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
- }
5176
+ if (1 === scatterMeasures.length) return measureTree[0].children || [];
5177
+ return measureTree;
5289
5178
  };
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);
5179
+ const encodingForScatter = (advancedVSeed, context)=>{
5180
+ const { vseed } = context;
5181
+ const { dimensions } = advancedVSeed;
5182
+ if (!dimensions) return advancedVSeed;
5183
+ const encoding = vseed.encoding;
5184
+ if (encoding) {
5185
+ const detail = encoding.detail || [];
5186
+ const color = encoding.color || [];
5187
+ const mergedDetail = chunk_QJLMYOTX_i([
5188
+ ...color,
5189
+ ...detail
5190
+ ]);
5295
5191
  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`指标值`
5192
+ ...advancedVSeed,
5193
+ encoding: {
5194
+ ...encoding,
5195
+ detail: mergedDetail
5313
5196
  }
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
5197
  };
5325
5198
  }
5199
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5200
+ const mergedEncoding = {
5201
+ color: dimensions.slice(0).map((item)=>item.id),
5202
+ detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5203
+ tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5204
+ label: [],
5205
+ row: [],
5206
+ column: []
5207
+ };
5208
+ return {
5209
+ ...advancedVSeed,
5210
+ encoding: mergedEncoding
5211
+ };
5326
5212
  };
5327
- const reshapeTo1D = (advancedVSeed, context)=>{
5213
+ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5328
5214
  const result = {
5329
5215
  ...advancedVSeed
5330
5216
  };
5331
5217
  const { vseed } = context;
5332
5218
  const { dataset } = vseed;
5333
- const { dimensions, measures } = advancedVSeed;
5334
- if (!measures || !dimensions || !dataset) return result;
5219
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5220
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5335
5221
  if (0 === measures.length) throw new Error('measures can not be empty');
5336
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, dimensions, measures);
5222
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
5223
+ const foldInfoList = [];
5224
+ const unfoldInfoList = [];
5225
+ const datasets = [];
5226
+ const xMeasures = measures[0];
5227
+ const yMeasures = measures[1] || xMeasures;
5228
+ if (xMeasures && xMeasures.children) {
5229
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5230
+ foldMeasureValue: FoldXMeasureValue,
5231
+ colorItemAsId: true
5232
+ });
5233
+ datasets.push(newDataset);
5234
+ foldInfoList.push(foldInfo);
5235
+ unfoldInfoList.push(unfoldInfo);
5236
+ }
5237
+ if (yMeasures && yMeasures.children) {
5238
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5239
+ foldMeasureValue: FoldYMeasureValue,
5240
+ colorItemAsId: true
5241
+ });
5242
+ datasets[0] = newDataset;
5243
+ foldInfoList.push(foldInfo);
5244
+ unfoldInfoList.push(unfoldInfo);
5245
+ }
5246
+ const unfoldInfo = {
5247
+ ...unfoldInfoList[0],
5248
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5249
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5250
+ ...prev,
5251
+ ...cur.colorIdMap
5252
+ }), {})
5253
+ };
5337
5254
  return {
5338
5255
  ...result,
5339
- dataset: newDatasets,
5256
+ dataset: datasets[0],
5340
5257
  datasetReshapeInfo: [
5341
5258
  {
5342
- id: '1D2M',
5259
+ id: String(chartType),
5343
5260
  index: 0,
5344
- foldInfo,
5345
- unfoldInfo
5261
+ foldInfo: foldInfoList[0],
5262
+ foldInfoList: foldInfoList,
5263
+ unfoldInfo: unfoldInfo
5346
5264
  }
5347
5265
  ]
5348
5266
  };
5349
5267
  };
5350
- const pivotReshapeTo1D = (advancedVSeed, context)=>{
5268
+ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5351
5269
  const result = {
5352
5270
  ...advancedVSeed
5353
5271
  };
5354
5272
  const { vseed } = context;
5355
5273
  const { dataset } = vseed;
5356
- const { measures } = advancedVSeed;
5357
- const dimensions = advancedVSeed.dimensions;
5358
- if (!measures || !dimensions) return result;
5274
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5275
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5359
5276
  const measureGroups = [];
5360
- if (measures) measures.forEach((measure)=>{
5361
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
5277
+ const depth = measureDepth(measures);
5278
+ if (3 === depth) measures.forEach((measure)=>{
5279
+ measureGroups.push(measure.children);
5362
5280
  });
5363
- const newDatasets = [];
5281
+ else if (2 === depth) measureGroups.push(measures);
5282
+ const datasetList = [];
5364
5283
  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
- });
5284
+ measureGroups.forEach((measures, index)=>{
5285
+ if (0 === measures.length) throw new Error('measures can not be empty');
5286
+ if (measures.length > 2) throw new Error('measures can not be more than 2');
5287
+ const foldInfoList = [];
5288
+ const unfoldInfoList = [];
5289
+ const datasets = [];
5290
+ const xMeasures = measures[0];
5291
+ const yMeasures = measures[1] || xMeasures;
5292
+ if (xMeasures && xMeasures.children) {
5293
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5294
+ foldMeasureValue: `${FoldXMeasureValue}${index}`,
5295
+ colorItemAsId: true
5296
+ });
5297
+ datasets.push(newDataset);
5298
+ foldInfoList.push(foldInfo);
5299
+ unfoldInfoList.push(unfoldInfo);
5300
+ }
5301
+ if (yMeasures && yMeasures.children) {
5302
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
5303
+ foldMeasureValue: `${FoldYMeasureValue}${index}`,
5304
+ colorItemAsId: true
5305
+ });
5306
+ datasets.push(newDataset);
5307
+ foldInfoList.push(foldInfo);
5308
+ unfoldInfoList.push(unfoldInfo);
5309
+ }
5310
+ const unfoldInfo = {
5311
+ ...unfoldInfoList[0],
5312
+ colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
5313
+ colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
5314
+ ...prev,
5315
+ ...cur.colorIdMap
5316
+ }), {})
5317
+ };
5376
5318
  const reshapeInfo = {
5377
- id: groupId,
5319
+ id: `${chartType}-${index}`,
5378
5320
  index,
5379
- foldInfo,
5380
- unfoldInfo
5321
+ foldInfo: foldInfoList[0],
5322
+ foldInfoList: foldInfoList,
5323
+ unfoldInfo: unfoldInfo
5381
5324
  };
5382
- newDatasets.push(newSubDataset);
5383
5325
  datasetReshapeInfo.push(reshapeInfo);
5326
+ datasetList.push(datasets[0].map((d, index)=>({
5327
+ ...d,
5328
+ ...datasets[1]?.[index] || {}
5329
+ })));
5384
5330
  });
5385
5331
  return {
5386
5332
  ...result,
5387
- dataset: newDatasets,
5333
+ dataset: datasetList,
5388
5334
  datasetReshapeInfo: datasetReshapeInfo
5389
5335
  };
5390
5336
  };
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 = [
5337
+ const scatterAdvancedPipeline = [
5460
5338
  initAdvancedVSeed_initAdvancedVSeed,
5461
- autoMeasuresBy2M1Group,
5339
+ autoScatterMeasures,
5462
5340
  autoDimensions_autoDimensions,
5341
+ encodingForScatter,
5463
5342
  pivotAdapter([
5464
- reshapeTo1D
5343
+ reshapeWithScatterEncoding
5465
5344
  ], [
5466
- pivotReshapeTo1D
5345
+ pivotReshapeWithScatterEncoding
5467
5346
  ]),
5468
- encodingAreaRange,
5469
- sortXBandAxis,
5470
- areaConfig,
5347
+ scatterConfig,
5471
5348
  theme_theme,
5472
5349
  markStyle_markStyle,
5473
5350
  annotation_annotation
5474
5351
  ];
5475
- const series = (...args)=>{
5352
+ const initScatter = (spec, context)=>{
5476
5353
  const result = {
5477
- type: 'common',
5478
- padding: 0,
5479
- region: [
5480
- {
5481
- clip: true
5482
- }
5483
- ]
5354
+ ...spec
5484
5355
  };
5485
- return (_, context)=>{
5486
- result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5487
- return result;
5356
+ const { advancedVSeed } = context;
5357
+ const { datasetReshapeInfo } = advancedVSeed;
5358
+ const { unfoldInfo, foldInfoList } = datasetReshapeInfo[0];
5359
+ result.type = 'scatter';
5360
+ result.direction = 'vertical';
5361
+ result.xField = foldInfoList?.[0].measureValue;
5362
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5363
+ result.seriesField = unfoldInfo.encodingColorId;
5364
+ result.padding = 0;
5365
+ result.region = [
5366
+ {
5367
+ clip: true
5368
+ }
5369
+ ];
5370
+ result.animation = true;
5371
+ return result;
5372
+ };
5373
+ const datasetScatter = (spec, context)=>{
5374
+ const { advancedVSeed, vseed } = context;
5375
+ const { datasetReshapeInfo } = advancedVSeed;
5376
+ const id = datasetReshapeInfo[0].id;
5377
+ const fields = {};
5378
+ return {
5379
+ ...spec,
5380
+ data: {
5381
+ id,
5382
+ values: isPivotChart(vseed) ? void 0 : advancedVSeed.dataset.flat(),
5383
+ fields: fields
5384
+ }
5488
5385
  };
5489
5386
  };
5490
- const seriesDualAxis = (...args)=>{
5387
+ const horizontalCrosshairLine = (spec, context)=>{
5491
5388
  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)=>{
5940
- const result = {
5941
- ...spec
5389
+ ...spec
5942
5390
  };
5943
5391
  const { advancedVSeed, vseed } = context;
5944
5392
  const { chartType } = vseed;
@@ -5984,7 +5432,7 @@
5984
5432
  initScatter,
5985
5433
  color_color,
5986
5434
  background_backgroundColor,
5987
- datasetXY,
5435
+ datasetScatter,
5988
5436
  progressive,
5989
5437
  xLinear,
5990
5438
  yLinear,
@@ -6009,7 +5457,7 @@
6009
5457
  initScatter,
6010
5458
  color_color,
6011
5459
  background_backgroundColor,
6012
- datasetXY,
5460
+ datasetScatter,
6013
5461
  progressive,
6014
5462
  xLinear,
6015
5463
  yLinear,
@@ -6035,41 +5483,163 @@
6035
5483
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
6036
5484
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
6037
5485
  };
6038
- const reshapeTo2D2M = (advancedVSeed, context)=>{
5486
+ const autoDualMeasures = (advancedVSeed, context)=>{
5487
+ const result = {
5488
+ ...advancedVSeed
5489
+ };
5490
+ const { vseed } = context;
5491
+ const { dataset, dualMeasures, measures } = vseed;
5492
+ if (!dataset) throw new Error('dataset is required');
5493
+ if (0 === dataset.length) return result;
5494
+ if (dualMeasures) {
5495
+ result.measures = dualMeasuresToMeasureTree(dualMeasures);
5496
+ return result;
5497
+ }
5498
+ if (measures && measureDepth(measures) > 1) {
5499
+ result.measures = measures;
5500
+ return result;
5501
+ }
5502
+ const top100dataset = dataset.slice(0, 100);
5503
+ const sample = top100dataset.reduce((prev, cur)=>({
5504
+ ...prev,
5505
+ ...cur
5506
+ }), {});
5507
+ const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5508
+ '',
5509
+ null,
5510
+ void 0
5511
+ ].includes(key)).map((measure)=>({
5512
+ id: measure,
5513
+ alias: measure
5514
+ }));
5515
+ if (0 === newMeasures.length) result.measures = [];
5516
+ else if (1 === newMeasures.length) result.measures = [
5517
+ {
5518
+ id: 'primary',
5519
+ alias: 'primary',
5520
+ children: newMeasures
5521
+ }
5522
+ ];
5523
+ else if (newMeasures.length > 1) result.measures = [
5524
+ {
5525
+ id: 'primary',
5526
+ alias: 'primary',
5527
+ children: newMeasures.slice(0, 1)
5528
+ },
5529
+ {
5530
+ id: 'secondary',
5531
+ alias: 'secondary',
5532
+ children: newMeasures.slice(1)
5533
+ }
5534
+ ];
5535
+ return result;
5536
+ };
5537
+ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5538
+ const measureTree = dualMeasures.map((item, index)=>{
5539
+ const { primaryMeasures, secondaryMeasures } = item;
5540
+ const groupChildren = [];
5541
+ let id = '';
5542
+ if (primaryMeasures) {
5543
+ const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5544
+ primaryMeasures
5545
+ ];
5546
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5547
+ id += alias;
5548
+ groupChildren.push({
5549
+ id: `${index}-primary`,
5550
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5551
+ children: arrPrimaryMeasures
5552
+ });
5553
+ }
5554
+ if (secondaryMeasures) {
5555
+ const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
5556
+ secondaryMeasures
5557
+ ];
5558
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5559
+ id += alias;
5560
+ groupChildren.push({
5561
+ id: `${index}-secondary`,
5562
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5563
+ children: arrSecondaryMeasures
5564
+ });
5565
+ }
5566
+ return {
5567
+ id,
5568
+ alias: id,
5569
+ children: groupChildren
5570
+ };
5571
+ });
5572
+ if (1 === dualMeasures.length) return measureTree[0].children || [];
5573
+ return measureTree;
5574
+ };
5575
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5576
+ const { vseed } = context;
5577
+ const { dimensions } = advancedVSeed;
5578
+ if (!dimensions) return advancedVSeed;
5579
+ const encoding = vseed.encoding;
5580
+ if (encoding) {
5581
+ const x = encoding.x || [];
5582
+ const detail = encoding.detail || [];
5583
+ const color = encoding.color || [];
5584
+ const mergedDetail = [
5585
+ ...color.filter((d)=>!x.includes(d)),
5586
+ ...detail
5587
+ ];
5588
+ return {
5589
+ ...advancedVSeed,
5590
+ encoding: {
5591
+ ...encoding,
5592
+ detail: mergedDetail
5593
+ }
5594
+ };
5595
+ }
5596
+ const mergedEncoding = {
5597
+ x: dimensions.slice(0, 1).map((item)=>item.id),
5598
+ color: dimensions.slice(1).map((item)=>item.id),
5599
+ detail: dimensions.slice(1).map((item)=>item.id),
5600
+ tooltip: dimensions.map((item)=>item.id),
5601
+ label: [],
5602
+ row: [],
5603
+ column: []
5604
+ };
5605
+ return {
5606
+ ...advancedVSeed,
5607
+ encoding: mergedEncoding
5608
+ };
5609
+ };
5610
+ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
6039
5611
  const result = {
6040
5612
  ...advancedVSeed
6041
5613
  };
6042
5614
  const { vseed } = context;
6043
5615
  const { dataset } = vseed;
6044
- const { dimensions, measures } = advancedVSeed;
6045
- if (!measures || !dimensions || !dataset) return result;
5616
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5617
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6046
5618
  if (0 === measures.length) throw new Error('measures can not be empty');
6047
5619
  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
5620
  const foldInfoList = [];
6051
5621
  const unfoldInfoList = [];
5622
+ const datasets = [];
6052
5623
  const primaryMeasures = measures[0];
6053
5624
  const secondaryMeasures = measures[1] || [];
6054
5625
  if (primaryMeasures && primaryMeasures.children) {
6055
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5626
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6056
5627
  foldMeasureValue: FoldPrimaryMeasureValue
6057
5628
  });
6058
- datasets.push(newDatasets);
5629
+ datasets.push(newDataset);
6059
5630
  foldInfoList.push(foldInfo);
6060
5631
  unfoldInfoList.push(unfoldInfo);
6061
5632
  }
6062
5633
  if (secondaryMeasures && secondaryMeasures.children) {
6063
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5634
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6064
5635
  foldMeasureValue: FoldSecondaryMeasureValue
6065
5636
  });
6066
- datasets.push(newDatasets);
5637
+ datasets.push(newDataset);
6067
5638
  foldInfoList.push(foldInfo);
6068
5639
  unfoldInfoList.push(unfoldInfo);
6069
5640
  }
6070
5641
  const unfoldInfo = {
6071
- groupName: unfoldInfoList[0].groupName,
6072
- groupId: unfoldInfoList[0].groupId,
5642
+ ...unfoldInfoList[0],
6073
5643
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6074
5644
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6075
5645
  ...prev,
@@ -6081,7 +5651,7 @@
6081
5651
  dataset: datasets,
6082
5652
  datasetReshapeInfo: [
6083
5653
  {
6084
- id: '2D2M',
5654
+ id: String(chartType),
6085
5655
  index: 0,
6086
5656
  foldInfo: foldInfoList[0],
6087
5657
  foldInfoList: foldInfoList,
@@ -6090,46 +5660,48 @@
6090
5660
  ]
6091
5661
  };
6092
5662
  };
6093
- const pivotReshapeTo2D2M = (advancedVSeed, context)=>{
5663
+ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
6094
5664
  const result = {
6095
5665
  ...advancedVSeed
6096
5666
  };
6097
5667
  const { vseed } = context;
6098
5668
  const { dataset } = vseed;
6099
- const { dimensions, measures } = advancedVSeed;
6100
- if (!measures || !dimensions || !dataset) return result;
6101
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5669
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5670
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6102
5671
  const datasetList = [];
6103
5672
  const datasetReshapeInfo = [];
6104
- measures.forEach((measureGroup, index)=>{
6105
- const measures = measureGroup.children || [];
5673
+ const measureGroups = [];
5674
+ const depth = measureDepth(measures);
5675
+ if (3 === depth) measures.forEach((measure)=>{
5676
+ measureGroups.push(measure.children);
5677
+ });
5678
+ else if (2 === depth) measureGroups.push(measures);
5679
+ measureGroups.forEach((measures, index)=>{
6106
5680
  if (0 === measures.length) throw new Error('measures can not be empty');
6107
5681
  if (measures.length > 2) throw new Error('measures can not be more than 2');
6108
- const datasets = [];
6109
5682
  const foldInfoList = [];
6110
5683
  const unfoldInfoList = [];
5684
+ const datasets = [];
6111
5685
  const primaryMeasures = measures[0];
6112
- const secondaryMeasures = measures[1] || measures[0];
5686
+ const secondaryMeasures = measures[1] || [];
6113
5687
  if (primaryMeasures && primaryMeasures.children) {
6114
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5688
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6115
5689
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
6116
5690
  });
6117
- datasets.push(newDatasets);
5691
+ datasets.push(newDataset);
6118
5692
  foldInfoList.push(foldInfo);
6119
5693
  unfoldInfoList.push(unfoldInfo);
6120
5694
  }
6121
5695
  if (secondaryMeasures && secondaryMeasures.children) {
6122
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5696
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6123
5697
  foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
6124
5698
  });
6125
- datasets.push(newDatasets);
5699
+ datasets.push(newDataset);
6126
5700
  foldInfoList.push(foldInfo);
6127
5701
  unfoldInfoList.push(unfoldInfo);
6128
5702
  }
6129
- datasetList.push(datasets.flat(2));
6130
5703
  const unfoldInfo = {
6131
- groupName: unfoldInfoList[0].groupName,
6132
- groupId: unfoldInfoList[0].groupId,
5704
+ ...unfoldInfoList[0],
6133
5705
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6134
5706
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6135
5707
  ...prev,
@@ -6137,53 +5709,19 @@
6137
5709
  }), {})
6138
5710
  };
6139
5711
  const reshapeInfo = {
6140
- id: `2D2M-${index}`,
5712
+ id: `${chartType}-${index}`,
6141
5713
  index,
6142
5714
  foldInfo: foldInfoList[0],
6143
- unfoldInfo: unfoldInfo,
6144
- foldInfoList: foldInfoList
5715
+ foldInfoList: foldInfoList,
5716
+ unfoldInfo: unfoldInfo
6145
5717
  };
6146
5718
  datasetReshapeInfo.push(reshapeInfo);
5719
+ datasetList.push(datasets.flat(2));
6147
5720
  });
6148
5721
  return {
6149
5722
  ...result,
6150
5723
  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
5724
+ datasetReshapeInfo: datasetReshapeInfo
6187
5725
  };
6188
5726
  };
6189
5727
  const dualAxisConfig = (advancedVSeed, context)=>{
@@ -6212,125 +5750,80 @@
6212
5750
  };
6213
5751
  return result;
6214
5752
  };
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
5753
  const dualAxisAdvancedPipeline = [
6305
5754
  initAdvancedVSeed_initAdvancedVSeed,
6306
5755
  autoDualMeasures,
6307
5756
  autoDimensions_autoDimensions,
5757
+ encodingForDualAxis,
6308
5758
  pivotAdapter([
6309
- reshapeTo2D2M
5759
+ reshapeWithDualEncoding
6310
5760
  ], [
6311
- pivotReshapeTo2D2M
5761
+ pivotReshapeWithDualEncoding
6312
5762
  ]),
6313
- encodingXYY,
6314
5763
  sortXBandAxis,
6315
- sort_sortLegend,
5764
+ sortLegend_sortLegend,
6316
5765
  dualAxisConfig,
6317
5766
  theme_theme,
6318
5767
  markStyle_markStyle,
6319
5768
  annotation_annotation
6320
5769
  ];
5770
+ const series = (...args)=>{
5771
+ const result = {
5772
+ type: 'common',
5773
+ padding: 0,
5774
+ region: [
5775
+ {
5776
+ clip: true
5777
+ }
5778
+ ]
5779
+ };
5780
+ return (_, context)=>{
5781
+ result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5782
+ return result;
5783
+ };
5784
+ };
5785
+ const seriesDualAxis = (...args)=>{
5786
+ const result = {
5787
+ type: 'common',
5788
+ padding: 0,
5789
+ region: [
5790
+ {
5791
+ clip: true
5792
+ }
5793
+ ]
5794
+ };
5795
+ const createDualContext = (context, index)=>{
5796
+ const { advancedVSeed } = context;
5797
+ const dataset = advancedVSeed.dataset[index];
5798
+ return {
5799
+ ...context,
5800
+ advancedVSeed: {
5801
+ ...advancedVSeed,
5802
+ dataset: dataset
5803
+ }
5804
+ };
5805
+ };
5806
+ return (_, context)=>{
5807
+ result.series = args.map((pipeline, index)=>{
5808
+ const seriesContext = createDualContext(context, index);
5809
+ return execPipeline(pipeline, seriesContext, {});
5810
+ });
5811
+ return result;
5812
+ };
5813
+ };
6321
5814
  const initDualAxisPrimary = (spec, context)=>{
6322
5815
  const result = {
6323
5816
  ...spec
6324
5817
  };
6325
5818
  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`;
5819
+ const { datasetReshapeInfo } = advancedVSeed;
5820
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5821
+ result.id = `${id}-primary-series`;
6329
5822
  result.type = 'bar';
6330
5823
  result.direction = 'vertical';
6331
- result.xField = encoding[0].x[0];
6332
- result.yField = encoding[0].y[0];
6333
- result.seriesField = encoding[0].group[0];
5824
+ result.xField = unfoldInfo.encodingX;
5825
+ result.seriesField = unfoldInfo.encodingColorId;
5826
+ result.yField = foldInfoList?.[0].measureValue;
6334
5827
  result.animation = true;
6335
5828
  return result;
6336
5829
  };
@@ -6339,14 +5832,14 @@
6339
5832
  ...spec
6340
5833
  };
6341
5834
  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`;
5835
+ const { datasetReshapeInfo } = advancedVSeed;
5836
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5837
+ result.id = `${id}-secondary-series`;
6345
5838
  result.type = 'line';
6346
5839
  result.direction = 'vertical';
6347
- result.xField = encoding[0].x[0];
6348
- result.yField = encoding[0].y[1];
6349
- result.seriesField = encoding[0].group[0];
5840
+ result.xField = unfoldInfo.encodingX;
5841
+ if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5842
+ result.seriesField = unfoldInfo.encodingColorId;
6350
5843
  result.animation = true;
6351
5844
  return result;
6352
5845
  };
@@ -6378,10 +5871,10 @@
6378
5871
  case 'columnParallel':
6379
5872
  {
6380
5873
  const columnSpec = result;
6381
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5874
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
6382
5875
  else if (columnSpec.xField) columnSpec.xField = [
6383
5876
  columnSpec.xField,
6384
- datasetReshapeInfo[0].unfoldInfo.groupId
5877
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6385
5878
  ];
6386
5879
  columnSpec.type = 'bar';
6387
5880
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6434,10 +5927,10 @@
6434
5927
  case 'columnParallel':
6435
5928
  {
6436
5929
  const columnSpec = result;
6437
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.groupId);
5930
+ if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
6438
5931
  else if (columnSpec.xField) columnSpec.xField = [
6439
5932
  columnSpec.xField,
6440
- datasetReshapeInfo[0].unfoldInfo.groupId
5933
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6441
5934
  ];
6442
5935
  columnSpec.type = 'bar';
6443
5936
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6464,10 +5957,11 @@
6464
5957
  };
6465
5958
  const datasetPrimary = (spec, context)=>{
6466
5959
  const { advancedVSeed, vseed } = context;
6467
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
5960
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6468
5961
  const orderMapping = analysis?.orderMapping || {};
6469
- const x = encoding[0]?.x?.[0];
6470
- const group = encoding[0]?.group?.[0];
5962
+ const { unfoldInfo } = datasetReshapeInfo[0];
5963
+ const x = unfoldInfo.encodingX;
5964
+ const colorId = unfoldInfo.encodingColorId;
6471
5965
  const id = datasetReshapeInfo[0].id;
6472
5966
  const fields = {};
6473
5967
  if (x) {
@@ -6481,14 +5975,14 @@
6481
5975
  sortIndex: 0
6482
5976
  };
6483
5977
  }
6484
- if (group) {
6485
- const order = orderMapping[group];
6486
- if (order) fields[group] = {
5978
+ if (colorId) {
5979
+ const order = orderMapping[colorId];
5980
+ if (order) fields[colorId] = {
6487
5981
  sortIndex: 0,
6488
5982
  domain: order,
6489
5983
  lockStatisticsByDomain: true
6490
5984
  };
6491
- else fields[group] = {
5985
+ else fields[colorId] = {
6492
5986
  sortIndex: 0
6493
5987
  };
6494
5988
  }
@@ -6503,10 +5997,11 @@
6503
5997
  };
6504
5998
  const datasetSecondary = (spec, context)=>{
6505
5999
  const { advancedVSeed, vseed } = context;
6506
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
6000
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6507
6001
  const orderMapping = analysis?.orderMapping || {};
6508
- const x = encoding[0]?.x?.[0];
6509
- const group = encoding[0]?.group?.[0];
6002
+ const { unfoldInfo } = datasetReshapeInfo[0];
6003
+ const x = unfoldInfo.encodingX;
6004
+ const colorId = unfoldInfo.encodingColorId;
6510
6005
  const id = datasetReshapeInfo[0].id;
6511
6006
  const fields = {};
6512
6007
  if (x) {
@@ -6520,14 +6015,14 @@
6520
6015
  sortIndex: 0
6521
6016
  };
6522
6017
  }
6523
- if (group) {
6524
- const order = orderMapping[group];
6525
- if (order) fields[group] = {
6018
+ if (colorId) {
6019
+ const order = orderMapping[colorId];
6020
+ if (order) fields[colorId] = {
6526
6021
  sortIndex: 0,
6527
6022
  domain: order,
6528
6023
  lockStatisticsByDomain: true
6529
6024
  };
6530
- else fields[group] = {
6025
+ else fields[colorId] = {
6531
6026
  sortIndex: 0
6532
6027
  };
6533
6028
  }
@@ -6625,7 +6120,7 @@
6625
6120
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6626
6121
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6627
6122
  const { measureId, measureValue, measureName } = foldInfoList[0];
6628
- const { groupName } = unfoldInfo;
6123
+ const { encodingColor: colorName } = unfoldInfo;
6629
6124
  result.tooltip = {
6630
6125
  visible: enable,
6631
6126
  mark: {
@@ -6646,7 +6141,7 @@
6646
6141
  {
6647
6142
  visible: true,
6648
6143
  hasShape: true,
6649
- key: (datum)=>datum && datum[measureName || groupName] || '',
6144
+ key: (datum)=>datum && datum[measureName || colorName] || '',
6650
6145
  value: (datum)=>{
6651
6146
  if (!datum) return '';
6652
6147
  const value = datum[measureValue];
@@ -6668,7 +6163,7 @@
6668
6163
  content: [
6669
6164
  {
6670
6165
  visible: true,
6671
- key: (datum)=>datum && datum[groupName] || '',
6166
+ key: (datum)=>datum && datum[colorName] || '',
6672
6167
  value: (datum)=>{
6673
6168
  if (!datum) return '';
6674
6169
  const value = datum[measureValue];
@@ -6705,7 +6200,7 @@
6705
6200
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6706
6201
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6707
6202
  const { measureId, measureValue, measureName } = foldInfoList[1];
6708
- const { groupName } = unfoldInfo;
6203
+ const { encodingColorId } = unfoldInfo;
6709
6204
  result.tooltip = {
6710
6205
  visible: enable,
6711
6206
  mark: {
@@ -6726,7 +6221,7 @@
6726
6221
  {
6727
6222
  visible: true,
6728
6223
  hasShape: true,
6729
- key: (datum)=>datum && datum[measureName || groupName] || '',
6224
+ key: (datum)=>datum && datum[measureName || encodingColorId] || '',
6730
6225
  value: (datum)=>{
6731
6226
  if (!datum) return '';
6732
6227
  const value = datum[measureValue];
@@ -6748,7 +6243,7 @@
6748
6243
  content: [
6749
6244
  {
6750
6245
  visible: true,
6751
- key: (datum)=>datum && datum[groupName] || '',
6246
+ key: (datum)=>datum && datum[encodingColorId] || '',
6752
6247
  value: (datum)=>{
6753
6248
  if (!datum) return '';
6754
6249
  const value = datum[measureValue];
@@ -6777,16 +6272,16 @@
6777
6272
  const { advancedVSeed, vseed } = context;
6778
6273
  const { chartType } = vseed;
6779
6274
  const { locale, datasetReshapeInfo } = advancedVSeed;
6780
- const index = datasetReshapeInfo[0].index;
6275
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6781
6276
  const primaryYAxis = advancedVSeed.config?.[chartType]?.primaryYAxis;
6782
6277
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6783
6278
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6784
6279
  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`;
6280
+ if (foldInfoList?.[0] && chunk_VCYTMP4D_n(foldInfoList[0].foldMap)) return result;
6281
+ const id = `${reshapeInfoId}-primary-axis`;
6787
6282
  const seriesIds = [
6788
- `${datasetReshapeInfo[0].id}-primary-series`,
6789
- `${datasetReshapeInfo[0].id}-secondary-series`
6283
+ `${reshapeInfoId}-primary-series`,
6284
+ `${reshapeInfoId}-secondary-series`
6790
6285
  ];
6791
6286
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[0];
6792
6287
  if (!result.axes) result.axes = [];
@@ -6874,20 +6369,20 @@
6874
6369
  const { advancedVSeed, vseed } = context;
6875
6370
  const { chartType } = vseed;
6876
6371
  const { locale, datasetReshapeInfo } = advancedVSeed;
6877
- const index = datasetReshapeInfo[0].index;
6372
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6878
6373
  const secondaryYAxis = advancedVSeed.config?.[chartType]?.secondaryYAxis;
6879
6374
  const yAxisConfig = Array.isArray(secondaryYAxis) ? secondaryYAxis[index] || secondaryYAxis[0] : secondaryYAxis;
6880
6375
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6881
6376
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6882
- if (chunk_JK3VNB42_n(datasetReshapeInfo[0].foldInfoList?.[1])) return result;
6377
+ if (chunk_JK3VNB42_n(foldInfoList?.[1])) return result;
6883
6378
  const sync = {
6884
- axisId: `${datasetReshapeInfo[0].id}-primary-axis`,
6379
+ axisId: `${reshapeInfoId}-primary-axis`,
6885
6380
  zeroAlign: true
6886
6381
  };
6887
- const id = `${datasetReshapeInfo[0].id}-secondary-axis`;
6382
+ const id = `${reshapeInfoId}-secondary-axis`;
6888
6383
  const seriesIds = [
6889
- `${datasetReshapeInfo[0].id}-primary-series`,
6890
- `${datasetReshapeInfo[0].id}-secondary-series`
6384
+ `${reshapeInfoId}-primary-series`,
6385
+ `${reshapeInfoId}-secondary-series`
6891
6386
  ];
6892
6387
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[1];
6893
6388
  if (!result.axes) result.axes = [];
@@ -7028,210 +6523,74 @@
7028
6523
  areaStyle_areaStyle
7029
6524
  ], [
7030
6525
  initDualAxisSecondary,
7031
- dualChartTypeSecondary,
7032
- datasetSecondary,
7033
- labelSecondary,
7034
- 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
- };
6526
+ dualChartTypeSecondary,
6527
+ datasetSecondary,
6528
+ labelSecondary,
6529
+ tooltipSecondary,
6530
+ progressive,
6531
+ barStyle_barStyle,
6532
+ pointStyle_pointStyle,
6533
+ pointStateDimensionHover,
6534
+ lineStyle_lineStyle,
6535
+ areaStyle_areaStyle
6536
+ ]),
6537
+ xBand,
6538
+ yLinearPrimary,
6539
+ yLinearSecondary,
6540
+ color_color,
6541
+ background_backgroundColor,
6542
+ verticalCrosshairRect,
6543
+ annotationPoint_annotationPoint,
6544
+ annotationVerticalLine_annotationVerticalLine,
6545
+ annotationHorizontalLine_annotationHorizontalLine,
6546
+ annotationArea_annotationArea
6547
+ ]),
6548
+ pivotRowDimensions,
6549
+ pivotColumnDimensions,
6550
+ pivotDiscreteLegend
6551
+ ];
6552
+ const dualAxisSpecPipeline = [
6553
+ pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
6554
+ ];
6555
+ const registerDualAxis = ()=>{
6556
+ Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
6557
+ Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
7148
6558
  };
7149
- const pivotReshapeTo1D1M = (advancedVSeed, context)=>{
7150
- const result = {
7151
- ...advancedVSeed
7152
- };
6559
+ const encodingForPie = (advancedVSeed, context)=>{
7153
6560
  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
6561
+ const { dimensions } = advancedVSeed;
6562
+ if (!dimensions) return advancedVSeed;
6563
+ const encoding = vseed.encoding;
6564
+ if (encoding) return {
6565
+ ...advancedVSeed,
6566
+ encoding: {
6567
+ ...encoding
6568
+ }
7188
6569
  };
7189
- };
7190
- const encodingPie = (advancedVSeed)=>{
7191
- const result = {
7192
- ...advancedVSeed
6570
+ const mergedEncoding = {
6571
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
6572
+ color: dimensions.slice(0).map((item)=>item.id),
6573
+ detail: dimensions.slice(0).map((item)=>item.id),
6574
+ tooltip: dimensions.map((item)=>item.id),
6575
+ label: [],
6576
+ row: [],
6577
+ column: []
7193
6578
  };
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
6579
  return {
7221
- ...result,
7222
- encoding
6580
+ ...advancedVSeed,
6581
+ encoding: mergedEncoding
7223
6582
  };
7224
6583
  };
7225
6584
  const pieAdvancedPipeline = [
7226
6585
  initAdvancedVSeed_initAdvancedVSeed,
7227
6586
  autoMeasures_autoMeasures,
7228
6587
  autoDimensions_autoDimensions,
6588
+ encodingForPie,
7229
6589
  pivotAdapter([
7230
- reshapeTo1D1M
6590
+ reshapeWithEncoding
7231
6591
  ], [
7232
- pivotReshapeTo1D1M
6592
+ pivotReshapeWithEncoding
7233
6593
  ]),
7234
- encodingPie,
7235
6594
  pieConfig,
7236
6595
  theme_theme,
7237
6596
  annotation_annotation
@@ -7241,15 +6600,15 @@
7241
6600
  ...spec
7242
6601
  };
7243
6602
  const { advancedVSeed } = context;
7244
- const { encoding, dataset } = advancedVSeed;
7245
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6603
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6604
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7246
6605
  const showStroke = dataset.length <= 30;
7247
6606
  result.type = 'pie';
7248
6607
  result.outerRadius = 0.8;
7249
6608
  result.innerRadius = 0;
7250
- result.valueField = encoding[0].radius[0];
7251
- result.categoryField = encoding[0].angle[0];
7252
- result.seriesField = encoding[0].group[0];
6609
+ result.valueField = foldInfo.measureValue;
6610
+ result.categoryField = unfoldInfo.encodingAngle;
6611
+ result.seriesField = unfoldInfo.encodingColorId;
7253
6612
  result.padding = 0;
7254
6613
  result.region = [
7255
6614
  {
@@ -7318,12 +6677,12 @@
7318
6677
  initAdvancedVSeed_initAdvancedVSeed,
7319
6678
  autoMeasures_autoMeasures,
7320
6679
  autoDimensions_autoDimensions,
6680
+ encodingForPie,
7321
6681
  pivotAdapter([
7322
- reshapeTo1D1M
6682
+ reshapeWithEncoding
7323
6683
  ], [
7324
- pivotReshapeTo1D1M
6684
+ pivotReshapeWithEncoding
7325
6685
  ]),
7326
- encodingPie,
7327
6686
  donutConfig,
7328
6687
  theme_theme,
7329
6688
  annotation_annotation
@@ -7333,15 +6692,15 @@
7333
6692
  ...spec
7334
6693
  };
7335
6694
  const { advancedVSeed } = context;
7336
- const { encoding, dataset } = advancedVSeed;
7337
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6695
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6696
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7338
6697
  const showStroke = dataset.length <= 30;
7339
6698
  result.type = 'pie';
7340
6699
  result.outerRadius = 0.8;
7341
6700
  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];
6701
+ result.valueField = foldInfo.measureValue;
6702
+ result.categoryField = unfoldInfo.encodingDetail;
6703
+ result.seriesField = unfoldInfo.encodingColorId;
7345
6704
  result.padding = 0;
7346
6705
  result.region = [
7347
6706
  {
@@ -7405,54 +6764,52 @@
7405
6764
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
7406
6765
  Builder._specPipelineMap.donut = donutSpecPipeline;
7407
6766
  };
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
7427
- ];
7428
- const color = [
7429
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
6767
+ const encodingForRose = (advancedVSeed, context)=>{
6768
+ const { vseed } = context;
6769
+ const { dimensions } = advancedVSeed;
6770
+ if (!dimensions) return advancedVSeed;
6771
+ const encoding = vseed.encoding;
6772
+ if (encoding) {
6773
+ const angle = encoding.angle || [];
6774
+ const detail = encoding.detail || [];
6775
+ const color = encoding.color || [];
6776
+ const mergedDetail = [
6777
+ ...color.filter((d)=>!angle.includes(d)),
6778
+ ...detail
7430
6779
  ];
7431
- return [
7432
- ...prev,
7433
- {
7434
- angle,
7435
- radius,
7436
- group,
7437
- color
6780
+ return {
6781
+ ...advancedVSeed,
6782
+ encoding: {
6783
+ ...encoding,
6784
+ detail: mergedDetail
7438
6785
  }
7439
- ];
7440
- }, []);
6786
+ };
6787
+ }
6788
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6789
+ const mergedEncoding = {
6790
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
6791
+ color: dimensions.slice(1).map((item)=>item.id),
6792
+ detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6793
+ tooltip: dimensions.map((item)=>item.id),
6794
+ label: [],
6795
+ row: [],
6796
+ column: []
6797
+ };
7441
6798
  return {
7442
- ...result,
7443
- encoding
6799
+ ...advancedVSeed,
6800
+ encoding: mergedEncoding
7444
6801
  };
7445
6802
  };
7446
6803
  const roseAdvancedPipeline = [
7447
6804
  initAdvancedVSeed_initAdvancedVSeed,
7448
6805
  autoMeasures_autoMeasures,
7449
6806
  autoDimensions_autoDimensions,
6807
+ encodingForRose,
7450
6808
  pivotAdapter([
7451
- reshapeTo2D1M
6809
+ reshapeWithEncoding
7452
6810
  ], [
7453
- pivotReshapeTo2D1M
6811
+ pivotReshapeWithEncoding
7454
6812
  ]),
7455
- encodingRose,
7456
6813
  roseConfig,
7457
6814
  theme_theme,
7458
6815
  markStyle_markStyle,
@@ -7463,13 +6820,12 @@
7463
6820
  ...spec
7464
6821
  };
7465
6822
  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;
6823
+ const { dataset, datasetReshapeInfo } = advancedVSeed;
6824
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7469
6825
  result.type = 'rose';
7470
- result.categoryField = encoding[0].angle[0];
7471
- result.valueField = encoding[0].radius[0];
7472
- result.seriesField = encoding[0].group[0];
6826
+ result.categoryField = unfoldInfo.encodingAngle;
6827
+ result.seriesField = unfoldInfo.encodingColorId;
6828
+ result.valueField = foldInfo.measureValue;
7473
6829
  result.padding = 0;
7474
6830
  result.outerRadius = 0.9;
7475
6831
  result.innerRadius = 0;
@@ -7617,12 +6973,12 @@
7617
6973
  initAdvancedVSeed_initAdvancedVSeed,
7618
6974
  autoMeasures_autoMeasures,
7619
6975
  autoDimensions_autoDimensions,
6976
+ encodingForRose,
7620
6977
  pivotAdapter([
7621
- reshapeTo2D1M
6978
+ reshapeWithEncoding
7622
6979
  ], [
7623
- pivotReshapeTo2D1M
6980
+ pivotReshapeWithEncoding
7624
6981
  ]),
7625
- encodingRose,
7626
6982
  roseParallelConfig,
7627
6983
  theme_theme,
7628
6984
  markStyle_markStyle,
@@ -7633,19 +6989,18 @@
7633
6989
  ...spec
7634
6990
  };
7635
6991
  const { advancedVSeed } = context;
7636
- const { encoding, datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
6992
+ const { datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
7637
6993
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7638
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
7639
6994
  const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
7640
6995
  result.type = 'rose';
7641
6996
  result.categoryField = sameDimensionsMode ? [
7642
- encoding[0].angle[0]
6997
+ unfoldInfo.encodingAngle
7643
6998
  ] : [
7644
- encoding[0].angle[0],
7645
- unfoldInfo.groupId
6999
+ unfoldInfo.encodingAngle,
7000
+ unfoldInfo.encodingDetail
7646
7001
  ];
7647
- result.valueField = encoding[0].radius[0];
7648
- result.seriesField = encoding[0].group[0];
7002
+ result.valueField = foldInfo.measureValue;
7003
+ result.seriesField = unfoldInfo.encodingColorId;
7649
7004
  result.padding = 0;
7650
7005
  result.outerRadius = 0.9;
7651
7006
  result.innerRadius = 0;
@@ -7722,54 +7077,52 @@
7722
7077
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7723
7078
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7724
7079
  };
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
7743
- ];
7744
- const color = [
7745
- unfoldInfo.groupId
7080
+ const encodingForRadar = (advancedVSeed, context)=>{
7081
+ const { vseed } = context;
7082
+ const { dimensions } = advancedVSeed;
7083
+ if (!dimensions) return advancedVSeed;
7084
+ const encoding = vseed.encoding;
7085
+ if (encoding) {
7086
+ const angle = encoding.angle || [];
7087
+ const detail = encoding.detail || [];
7088
+ const color = encoding.color || [];
7089
+ const mergedDetail = [
7090
+ ...color.filter((d)=>!angle.includes(d)),
7091
+ ...detail
7746
7092
  ];
7747
- return [
7748
- ...prev,
7749
- {
7750
- angle,
7751
- radius,
7752
- group,
7753
- color
7093
+ return {
7094
+ ...advancedVSeed,
7095
+ encoding: {
7096
+ ...encoding,
7097
+ detail: mergedDetail
7754
7098
  }
7755
- ];
7756
- }, []);
7099
+ };
7100
+ }
7101
+ const mergedEncoding = {
7102
+ angle: dimensions.slice(0, 1).map((item)=>item.id),
7103
+ color: dimensions.slice(1).map((item)=>item.id),
7104
+ detail: dimensions.slice(1).map((item)=>item.id),
7105
+ tooltip: dimensions.map((item)=>item.id),
7106
+ label: [],
7107
+ row: [],
7108
+ column: []
7109
+ };
7757
7110
  return {
7758
- ...result,
7759
- encoding
7111
+ ...advancedVSeed,
7112
+ encoding: mergedEncoding
7760
7113
  };
7761
7114
  };
7762
7115
  const radarAdvancedPipeline = [
7763
7116
  initAdvancedVSeed_initAdvancedVSeed,
7764
7117
  autoMeasures_autoMeasures,
7765
7118
  autoDimensions_autoDimensions,
7119
+ encodingForRadar,
7766
7120
  pivotAdapter([
7767
- reshapeTo2D1M0Name
7121
+ reshapeWithEncoding
7768
7122
  ], [
7769
- pivotReshapeTo2D1M0Name
7123
+ pivotReshapeWithEncoding
7770
7124
  ]),
7771
- encodingAR,
7772
- sort_sortLegend,
7125
+ sortLegend_sortLegend,
7773
7126
  radarConfig,
7774
7127
  theme_theme,
7775
7128
  markStyle_markStyle,
@@ -7780,12 +7133,12 @@
7780
7133
  ...spec
7781
7134
  };
7782
7135
  const { advancedVSeed } = context;
7783
- const { encoding } = advancedVSeed;
7784
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
7136
+ const { datasetReshapeInfo } = advancedVSeed;
7137
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7785
7138
  result.type = 'radar';
7786
- result.angleField = encoding[0].angle[0];
7787
- result.radiusField = encoding[0].radius[0];
7788
- result.seriesField = encoding[0].group[0];
7139
+ result.angleField = unfoldInfo.encodingAngle;
7140
+ result.radiusField = foldInfo.measureValue;
7141
+ result.seriesField = unfoldInfo.encodingColorId;
7789
7142
  result.padding = 0;
7790
7143
  result.region = [
7791
7144
  {
@@ -7897,47 +7250,40 @@
7897
7250
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7898
7251
  Builder._specPipelineMap.radar = radarSpecPipeline;
7899
7252
  };
7900
- const encodingFunnel = (advancedVSeed)=>{
7901
- const result = {
7902
- ...advancedVSeed
7253
+ const encodingForFunnel = (advancedVSeed, context)=>{
7254
+ const { vseed } = context;
7255
+ const { dimensions } = advancedVSeed;
7256
+ if (!dimensions) return advancedVSeed;
7257
+ const encoding = vseed.encoding;
7258
+ if (encoding) return {
7259
+ ...advancedVSeed,
7260
+ encoding: {
7261
+ ...encoding
7262
+ }
7263
+ };
7264
+ const mergedEncoding = {
7265
+ color: dimensions.slice(0).map((item)=>item.id),
7266
+ detail: dimensions.slice(0).map((item)=>item.id),
7267
+ tooltip: dimensions.map((item)=>item.id),
7268
+ label: [],
7269
+ row: [],
7270
+ column: []
7903
7271
  };
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
7272
  return {
7927
- ...result,
7928
- encoding
7273
+ ...advancedVSeed,
7274
+ encoding: mergedEncoding
7929
7275
  };
7930
7276
  };
7931
7277
  const funnelAdvancedPipeline = [
7932
7278
  initAdvancedVSeed_initAdvancedVSeed,
7933
7279
  autoMeasures_autoMeasures,
7934
7280
  autoDimensions_autoDimensions,
7281
+ encodingForFunnel,
7935
7282
  pivotAdapter([
7936
- reshapeTo1D1M
7283
+ reshapeWithEncoding
7937
7284
  ], [
7938
- pivotReshapeTo1D1M
7285
+ pivotReshapeWithEncoding
7939
7286
  ]),
7940
- encodingFunnel,
7941
7287
  funnelConfig,
7942
7288
  theme_theme,
7943
7289
  annotation_annotation
@@ -7947,11 +7293,12 @@
7947
7293
  ...spec
7948
7294
  };
7949
7295
  const { advancedVSeed } = context;
7950
- const { encoding } = advancedVSeed;
7951
- if (!encoding[0].size || !encoding[0].group || !encoding[0].color) return result;
7296
+ const { datasetReshapeInfo } = advancedVSeed;
7297
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7952
7298
  result.type = 'funnel';
7953
- result.valueField = encoding[0].size[0];
7954
- result.categoryField = encoding[0].group[0];
7299
+ result.valueField = foldInfo.measureValue;
7300
+ result.categoryField = unfoldInfo.encodingDetail;
7301
+ result.seriesField = unfoldInfo.encodingColorId;
7955
7302
  result.padding = 0;
7956
7303
  result.isTransform = true;
7957
7304
  result.shape = 'rect';
@@ -7966,7 +7313,7 @@
7966
7313
  style: {
7967
7314
  cornerRadius: 4,
7968
7315
  fill: {
7969
- field: encoding[0].color[0],
7316
+ field: unfoldInfo.encodingColorId,
7970
7317
  scale: 'color'
7971
7318
  }
7972
7319
  },
@@ -7982,99 +7329,13 @@
7982
7329
  result.animation = true;
7983
7330
  return result;
7984
7331
  };
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
7332
  const funnel = [
8071
7333
  initFunnel,
8072
- linearColor,
8073
7334
  background_backgroundColor,
8074
7335
  datasetXY,
8075
7336
  label_label,
8076
7337
  tooltip_tooltip,
8077
- colorLegend,
7338
+ discreteLegend,
8078
7339
  annotationPoint_annotationPoint,
8079
7340
  annotationVerticalLine_annotationVerticalLine,
8080
7341
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8087,12 +7348,11 @@
8087
7348
  datasetPivot,
8088
7349
  pivotIndicators_pivotIndicators([
8089
7350
  initFunnel,
8090
- linearColor,
8091
7351
  background_backgroundColor,
8092
7352
  datasetXY,
8093
7353
  label_label,
8094
7354
  tooltip_tooltip,
8095
- colorLegend,
7355
+ discreteLegend,
8096
7356
  annotationPoint_annotationPoint,
8097
7357
  annotationVerticalLine_annotationVerticalLine,
8098
7358
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8108,49 +7368,42 @@
8108
7368
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
8109
7369
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
8110
7370
  };
8111
- const encodingMatrix = (advancedVSeed)=>{
8112
- const result = {
8113
- ...advancedVSeed
7371
+ const encodingForHeatmap = (advancedVSeed, context)=>{
7372
+ const { vseed } = context;
7373
+ const { dimensions } = advancedVSeed;
7374
+ if (!dimensions) return advancedVSeed;
7375
+ const encoding = vseed.encoding;
7376
+ if (encoding) return {
7377
+ ...advancedVSeed,
7378
+ encoding: {
7379
+ ...encoding
7380
+ }
7381
+ };
7382
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7383
+ const mergedEncoding = {
7384
+ x: dimensions.slice(0, 1).map((item)=>item.id),
7385
+ y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7386
+ color: dimensions.slice(0).map((item)=>item.id),
7387
+ tooltip: dimensions.map((item)=>item.id),
7388
+ label: [],
7389
+ row: [],
7390
+ column: []
8114
7391
  };
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
8126
- ];
8127
- const color = [
8128
- foldInfo.measureValue
8129
- ];
8130
- return [
8131
- ...prev,
8132
- {
8133
- x,
8134
- y,
8135
- color
8136
- }
8137
- ];
8138
- }, []);
8139
7392
  return {
8140
- ...result,
8141
- encoding
7393
+ ...advancedVSeed,
7394
+ encoding: mergedEncoding
8142
7395
  };
8143
7396
  };
8144
7397
  const heatmapAdvancedPipeline = [
8145
7398
  initAdvancedVSeed_initAdvancedVSeed,
8146
7399
  autoMeasures_autoMeasures,
8147
7400
  autoDimensions_autoDimensions,
7401
+ encodingForHeatmap,
8148
7402
  pivotAdapter([
8149
- reshapeTo2D1M
7403
+ reshapeWithEncoding
8150
7404
  ], [
8151
- pivotReshapeTo2D1M
7405
+ pivotReshapeWithEncoding
8152
7406
  ]),
8153
- encodingMatrix,
8154
7407
  sortXBandAxis,
8155
7408
  heatmapConfig,
8156
7409
  theme_theme,
@@ -8172,23 +7425,20 @@
8172
7425
  ...spec
8173
7426
  };
8174
7427
  const { advancedVSeed } = context;
8175
- const { encoding } = advancedVSeed;
8176
- if (!encoding[0].y || !encoding[0].x || !encoding[0].color) return result;
7428
+ const { datasetReshapeInfo } = advancedVSeed;
7429
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
8177
7430
  result.type = 'heatmap';
8178
7431
  result.direction = 'vertical';
8179
- result.xField = encoding[0].x[0];
8180
- result.yField = encoding[0].y[0];
8181
- result.valueField = encoding[0].color[0];
7432
+ result.xField = unfoldInfo.encodingX;
7433
+ result.yField = unfoldInfo.encodingY;
7434
+ result.seriesField = unfoldInfo.encodingColorId;
7435
+ result.valueField = foldInfo.measureValue;
8182
7436
  result.padding = 0;
8183
7437
  result.cell = {
8184
7438
  style: {
8185
7439
  shape: 'rect',
8186
7440
  stroke: '#ffffff',
8187
- lineWidth: 1,
8188
- fill: {
8189
- field: encoding[0].color[0],
8190
- scale: 'color'
8191
- }
7441
+ lineWidth: 1
8192
7442
  }
8193
7443
  };
8194
7444
  result.axes = [
@@ -8213,12 +7463,11 @@
8213
7463
  };
8214
7464
  const heatmap = [
8215
7465
  initHeatmap,
8216
- linearColor,
8217
7466
  background_backgroundColor,
8218
7467
  datasetXY,
8219
7468
  label_label,
8220
7469
  labelColorInversion,
8221
- colorLegend,
7470
+ discreteLegend,
8222
7471
  tooltip_tooltip,
8223
7472
  pointStyle_pointStyle,
8224
7473
  pointStateDimensionHover,
@@ -8235,12 +7484,11 @@
8235
7484
  datasetPivot,
8236
7485
  pivotIndicators_pivotIndicators([
8237
7486
  initHeatmap,
8238
- linearColor,
8239
7487
  background_backgroundColor,
8240
7488
  datasetXY,
8241
7489
  label_label,
8242
7490
  labelColorInversion,
8243
- colorLegend,
7491
+ discreteLegend,
8244
7492
  tooltip_tooltip,
8245
7493
  pointStyle_pointStyle,
8246
7494
  pointStateDimensionHover,
@@ -8508,12 +7756,6 @@
8508
7756
  yAxis: linearAxis,
8509
7757
  crosshairLine
8510
7758
  },
8511
- areaRange: {
8512
- ...baseConfig,
8513
- xAxis: bandAxis,
8514
- yAxis: linearAxis,
8515
- crosshairLine
8516
- },
8517
7759
  scatter: {
8518
7760
  ...baseConfig,
8519
7761
  xAxis: {
@@ -8846,12 +8088,6 @@
8846
8088
  yAxis: linearAxis,
8847
8089
  crosshairLine: crosshairLine
8848
8090
  },
8849
- areaRange: {
8850
- ...baseConfig,
8851
- xAxis: bandAxis,
8852
- yAxis: linearAxis,
8853
- crosshairLine: crosshairLine
8854
- },
8855
8091
  scatter: {
8856
8092
  ...baseConfig,
8857
8093
  xAxis: {
@@ -8949,7 +8185,6 @@
8949
8185
  registerBarPercent();
8950
8186
  registerArea();
8951
8187
  registerAreaPercent();
8952
- registerAreaRange();
8953
8188
  registerScatter();
8954
8189
  registerDualAxis();
8955
8190
  registerPie();
@@ -12266,7 +11501,6 @@
12266
11501
  'barParallel',
12267
11502
  'area',
12268
11503
  'areaPercent',
12269
- 'areaRange',
12270
11504
  'scatter',
12271
11505
  'dualAxis',
12272
11506
  'rose',
@@ -12364,6 +11598,12 @@
12364
11598
  secondaryMeasures: schemas_array(zMeasure).or(zMeasure).optional()
12365
11599
  });
12366
11600
  const zDualMeasures = schemas_array(zDualMeasure);
11601
+ const zScatterMeasure = schemas_object({
11602
+ id: schemas_string(),
11603
+ xMeasures: schemas_array(zMeasure).or(zMeasure).optional(),
11604
+ yMeasures: schemas_array(zMeasure).or(zMeasure).optional()
11605
+ });
11606
+ const zScatterMeasures = schemas_array(zScatterMeasure);
12367
11607
  const zFoldInfo = schemas_object({
12368
11608
  foldMap: record(schemas_string(), schemas_string().or(schemas_undefined())),
12369
11609
  measureId: schemas_string(),
@@ -12371,10 +11611,14 @@
12371
11611
  measureValue: schemas_string()
12372
11612
  });
12373
11613
  const zUnfoldInfo = schemas_object({
11614
+ encodingX: schemas_string(),
11615
+ encodingY: schemas_string(),
11616
+ encodingColor: schemas_string(),
11617
+ encodingColorId: schemas_string(),
11618
+ encodingDetail: schemas_string(),
11619
+ encodingAngle: schemas_string(),
12374
11620
  colorItems: schemas_array(schemas_string()),
12375
- groupId: schemas_string(),
12376
- colorIdMap: record(schemas_string(), schemas_string()),
12377
- groupName: schemas_string()
11621
+ colorIdMap: record(schemas_string(), schemas_string())
12378
11622
  });
12379
11623
  const zDatasetReshapeInfo = schemas_array(schemas_object({
12380
11624
  id: schemas_string(),
@@ -12383,16 +11627,21 @@
12383
11627
  foldInfoList: schemas_array(zFoldInfo).nullish(),
12384
11628
  unfoldInfo: zUnfoldInfo
12385
11629
  }));
12386
- const zEncoding = schemas_array(schemas_object({
11630
+ const zEncoding = schemas_object({
12387
11631
  x: schemas_array(schemas_string()).nullish(),
12388
11632
  y: schemas_array(schemas_string()).nullish(),
12389
- color: schemas_array(schemas_string()).nullish(),
12390
- group: schemas_array(schemas_string()).nullish(),
12391
11633
  angle: schemas_array(schemas_string()).nullish(),
12392
11634
  radius: schemas_array(schemas_string()).nullish(),
11635
+ detail: schemas_array(schemas_string()).nullish(),
11636
+ color: schemas_array(schemas_string()).nullish(),
11637
+ size: schemas_array(schemas_string()).nullish(),
12393
11638
  tooltip: schemas_array(schemas_string()).nullish(),
12394
- size: schemas_array(schemas_string()).nullish()
12395
- }));
11639
+ label: schemas_array(schemas_string()).nullish(),
11640
+ row: schemas_array(schemas_string()).nullish(),
11641
+ column: schemas_array(schemas_string()).nullish(),
11642
+ group: schemas_array(schemas_string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
11643
+ });
11644
+ const zEncodings = schemas_array(zEncoding);
12396
11645
  const zXBandAxis = schemas_object({
12397
11646
  visible: schemas_boolean().default(true).nullish(),
12398
11647
  labelAutoHide: schemas_boolean().default(true).nullish(),
@@ -12655,7 +11904,6 @@
12655
11904
  crosshairLine: zCrosshairLine.nullish()
12656
11905
  });
12657
11906
  const zAreaPercentConfig = zAreaConfig;
12658
- const zAreaRangeConfig = zAreaConfig;
12659
11907
  const zDualAxisConfig = schemas_object({
12660
11908
  backgroundColor: zBackgroundColor.nullish(),
12661
11909
  label: zLabel.nullish(),
@@ -12710,7 +11958,6 @@
12710
11958
  barPercent: zBarPercentConfig.nullish(),
12711
11959
  area: zAreaConfig.nullish(),
12712
11960
  areaPercent: zAreaPercentConfig.nullish(),
12713
- areaRange: zAreaRangeConfig.nullish(),
12714
11961
  scatter: zScatterConfig.nullish(),
12715
11962
  dualAxis: zDualAxisConfig.nullish(),
12716
11963
  rose: zRoseConfig.nullish(),
@@ -13149,6 +12396,7 @@
13149
12396
  const zLine = schemas_object({
13150
12397
  chartType: literal('line'),
13151
12398
  dataset: zDataset.nullish(),
12399
+ encoding: zEncoding.nullish(),
13152
12400
  dimensions: zDimensions.nullish(),
13153
12401
  measures: zMeasureTree.nullish(),
13154
12402
  backgroundColor: zBackgroundColor.nullish(),
@@ -13173,6 +12421,7 @@
13173
12421
  const zColumn = schemas_object({
13174
12422
  chartType: literal('column'),
13175
12423
  dataset: zDataset.nullish(),
12424
+ encoding: zEncoding.nullish(),
13176
12425
  dimensions: zDimensions.nullish(),
13177
12426
  measures: zMeasureTree.nullish(),
13178
12427
  backgroundColor: zBackgroundColor.nullish(),
@@ -13195,6 +12444,7 @@
13195
12444
  const zColumnParallel = schemas_object({
13196
12445
  chartType: literal('columnParallel'),
13197
12446
  dataset: zDataset.nullish(),
12447
+ encoding: zEncoding.nullish(),
13198
12448
  dimensions: zDimensions.nullish(),
13199
12449
  measures: zMeasureTree.nullish(),
13200
12450
  backgroundColor: zBackgroundColor.nullish(),
@@ -13217,6 +12467,7 @@
13217
12467
  const zColumnPercent = schemas_object({
13218
12468
  chartType: literal('columnPercent'),
13219
12469
  dataset: zDataset.nullish(),
12470
+ encoding: zEncoding.nullish(),
13220
12471
  dimensions: zDimensions.nullish(),
13221
12472
  measures: zMeasureTree.nullish(),
13222
12473
  backgroundColor: zBackgroundColor.nullish(),
@@ -13239,6 +12490,7 @@
13239
12490
  const zBar = schemas_object({
13240
12491
  chartType: literal('bar'),
13241
12492
  dataset: zDataset.nullish(),
12493
+ encoding: zEncoding.nullish(),
13242
12494
  dimensions: zDimensions.nullish(),
13243
12495
  measures: zMeasureTree.nullish(),
13244
12496
  backgroundColor: zBackgroundColor.nullish(),
@@ -13261,6 +12513,7 @@
13261
12513
  const zBarParallel = schemas_object({
13262
12514
  chartType: literal('barParallel'),
13263
12515
  dataset: zDataset.nullish(),
12516
+ encoding: zEncoding.nullish(),
13264
12517
  dimensions: zDimensions.nullish(),
13265
12518
  measures: zMeasureTree.nullish(),
13266
12519
  backgroundColor: zBackgroundColor.nullish(),
@@ -13283,6 +12536,7 @@
13283
12536
  const zBarPercent = schemas_object({
13284
12537
  chartType: literal('barPercent'),
13285
12538
  dataset: zDataset.nullish(),
12539
+ encoding: zEncoding.nullish(),
13286
12540
  dimensions: zDimensions.nullish(),
13287
12541
  measures: zMeasureTree.nullish(),
13288
12542
  backgroundColor: zBackgroundColor.nullish(),
@@ -13305,6 +12559,7 @@
13305
12559
  const zArea = schemas_object({
13306
12560
  chartType: literal('area'),
13307
12561
  dataset: zDataset.nullish(),
12562
+ encoding: zEncoding.nullish(),
13308
12563
  dimensions: zDimensions.nullish(),
13309
12564
  measures: zMeasureTree.nullish(),
13310
12565
  backgroundColor: zBackgroundColor.nullish(),
@@ -13328,6 +12583,7 @@
13328
12583
  const zAreaPercent = schemas_object({
13329
12584
  chartType: literal('areaPercent'),
13330
12585
  dataset: zDataset.nullish(),
12586
+ encoding: zEncoding.nullish(),
13331
12587
  dimensions: zDimensions.nullish(),
13332
12588
  measures: zMeasureTree.nullish(),
13333
12589
  backgroundColor: zBackgroundColor.nullish(),
@@ -13348,31 +12604,13 @@
13348
12604
  annotationArea: schemas_array(zAnnotationArea).or(zAnnotationArea).nullish(),
13349
12605
  locale: zLocale.nullish()
13350
12606
  });
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
12607
  const zScatter = schemas_object({
13372
12608
  chartType: literal('scatter'),
13373
12609
  dataset: zDataset.nullish(),
12610
+ encoding: zEncoding.nullish(),
13374
12611
  dimensions: zDimensions.nullish(),
13375
12612
  measures: zMeasureTree.nullish(),
12613
+ scatterMeasures: zScatterMeasures.nullish(),
13376
12614
  backgroundColor: zBackgroundColor.nullish(),
13377
12615
  color: zColor.nullish(),
13378
12616
  label: zLabel.nullish(),
@@ -13422,6 +12660,7 @@
13422
12660
  const zRose = schemas_object({
13423
12661
  chartType: literal('rose'),
13424
12662
  dataset: zDataset.nullish(),
12663
+ encoding: zEncoding.nullish(),
13425
12664
  dimensions: zDimensions.nullish(),
13426
12665
  measures: zMeasureTree.nullish(),
13427
12666
  backgroundColor: zBackgroundColor.nullish(),
@@ -13435,6 +12674,7 @@
13435
12674
  const zRoseParallel = schemas_object({
13436
12675
  chartType: literal('roseParallel'),
13437
12676
  dataset: zDataset.nullish(),
12677
+ encoding: zEncoding.nullish(),
13438
12678
  dimensions: zDimensions.nullish(),
13439
12679
  measures: zMeasureTree.nullish(),
13440
12680
  backgroundColor: zBackgroundColor.nullish(),
@@ -13448,6 +12688,7 @@
13448
12688
  const zPie = schemas_object({
13449
12689
  chartType: literal('pie'),
13450
12690
  dataset: zDataset.nullish(),
12691
+ encoding: zEncoding.nullish(),
13451
12692
  dimensions: zDimensions.nullish(),
13452
12693
  measures: zMeasureTree.nullish(),
13453
12694
  backgroundColor: zBackgroundColor.nullish(),
@@ -13461,6 +12702,7 @@
13461
12702
  const zDonut = schemas_object({
13462
12703
  chartType: literal('donut'),
13463
12704
  dataset: zDataset.nullish(),
12705
+ encoding: zEncoding.nullish(),
13464
12706
  dimensions: zDimensions.nullish(),
13465
12707
  measures: zMeasureTree.nullish(),
13466
12708
  backgroundColor: zBackgroundColor.nullish(),
@@ -13474,6 +12716,7 @@
13474
12716
  const zRadar = schemas_object({
13475
12717
  chartType: literal('radar'),
13476
12718
  dataset: zDataset.nullish(),
12719
+ encoding: zEncoding.nullish(),
13477
12720
  dimensions: zDimensions.nullish(),
13478
12721
  measures: zMeasureTree.nullish(),
13479
12722
  backgroundColor: zBackgroundColor.nullish(),
@@ -13487,6 +12730,7 @@
13487
12730
  const zFunnel = schemas_object({
13488
12731
  chartType: literal('funnel'),
13489
12732
  dataset: zDataset.nullish(),
12733
+ encoding: zEncoding.nullish(),
13490
12734
  dimensions: zDimensions.nullish(),
13491
12735
  measures: zMeasureTree.nullish(),
13492
12736
  backgroundColor: zBackgroundColor.nullish(),
@@ -13522,7 +12766,6 @@
13522
12766
  zBarPercent,
13523
12767
  zArea,
13524
12768
  zAreaPercent,
13525
- zAreaRange,
13526
12769
  zScatter,
13527
12770
  zDualAxis,
13528
12771
  zPie,
@@ -13540,6 +12783,7 @@
13540
12783
  dimensions: zDimensionTree,
13541
12784
  measures: zMeasureTree,
13542
12785
  encoding: zEncoding,
12786
+ encodings: zEncodings,
13543
12787
  config: zConfig,
13544
12788
  analysis: zAnalysis,
13545
12789
  theme: zTheme,