@visactor/vseed 0.0.39 → 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 +1139 -1875
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +1 -1
  10. package/dist/index.js +1086 -1831
  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 +1113 -1855
  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,79 +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);
1747
+ const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1748
+ const { foldMeasureId, separator, colorItemAsId } = options;
1682
1749
  const unfoldInfo = {
1683
- groupName: unfoldGroupName,
1684
- groupId: unfoldGroupId,
1750
+ encodingAngle: AngleEncoding,
1751
+ encodingX: XEncoding,
1752
+ encodingY: YEncoding,
1753
+ encodingDetail: DetailEncoding,
1754
+ encodingColor: ColorEncoding,
1755
+ encodingColorId: ColorIdEncoding,
1685
1756
  colorItems: [],
1686
1757
  colorIdMap: {}
1687
1758
  };
1688
- if (0 === dimensions.length || 0 === measures.length) return {
1689
- dataset,
1690
- unfoldInfo: {
1691
- groupName: unfoldGroupName,
1692
- groupId: unfoldGroupId,
1693
- colorItems: [],
1694
- colorIdMap: {}
1695
- }
1696
- };
1697
- const colorItems = [];
1698
- 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 = {};
1699
1767
  for(let i = 0; i < dataset.length; i++){
1700
1768
  const datum = dataset[i];
1701
- const colorName = generateDimGroupName(dimensionsToBeUnfolded, datum, dimensionsSeparator);
1702
- const colorId = datum[foldMeasureId] ? [
1703
- colorName,
1704
- datum[foldMeasureId]
1705
- ].join(dimensionsSeparator) : colorName;
1706
- datum[unfoldGroupName] = colorName;
1707
- datum[unfoldGroupId] = colorId;
1708
- colorItems.push(colorId);
1709
- colorMap[colorId] = colorName;
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);
1710
1784
  }
1711
- unfoldInfo.colorItems = chunk_QJLMYOTX_i(colorItems);
1712
- unfoldInfo.colorIdMap = colorMap;
1785
+ unfoldInfo.colorItems = Array.from(colorItems);
1786
+ unfoldInfo.colorIdMap = colorIdMap;
1713
1787
  return {
1714
1788
  dataset,
1715
1789
  unfoldInfo
1716
1790
  };
1717
1791
  };
1718
- const generateDimGroupName = (dimensionsToBeGrouped, datum, dimensionsSeparator)=>dimensionsToBeGrouped.map((dim)=>String(datum[dim.id])).join(dimensionsSeparator);
1719
- const unfoldZeroDimensions = (dataset, measures, measureName, unfoldGroupName = UnfoldDimensionGroup, unfoldGroupId = UnfoldDimensionGroupId)=>{
1720
- const unfoldInfo = {
1721
- groupName: unfoldGroupName,
1722
- groupId: unfoldGroupId,
1723
- colorItems: [],
1724
- colorIdMap: {}
1725
- };
1726
- if (0 === measures.length) return {
1727
- dataset,
1728
- unfoldInfo: {
1729
- groupName: unfoldGroupName,
1730
- groupId: unfoldGroupId,
1731
- colorItems: [],
1732
- colorIdMap: {}
1733
- }
1734
- };
1735
- const colorItems = [];
1736
- const colorMap = {};
1737
- for(let i = 0; i < dataset.length; i++){
1738
- const datum = dataset[i];
1739
- const colorName = measureName;
1740
- const colorId = measureName;
1741
- datum[unfoldGroupName] = colorName;
1742
- datum[unfoldGroupId] = colorId;
1743
- colorItems.push(colorId);
1744
- colorMap[colorId] = colorName;
1745
- }
1746
- unfoldInfo.colorItems = chunk_QJLMYOTX_i(colorItems);
1747
- unfoldInfo.colorIdMap = colorMap;
1748
- return {
1749
- dataset,
1750
- unfoldInfo
1751
- };
1792
+ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1793
+ if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1752
1794
  };
1753
1795
  const emptyReshapeResult = {
1754
1796
  dataset: [],
@@ -1759,69 +1801,47 @@
1759
1801
  measureValue: ''
1760
1802
  },
1761
1803
  unfoldInfo: {
1762
- groupName: '',
1763
- groupId: '',
1804
+ encodingAngle: AngleEncoding,
1805
+ encodingX: XEncoding,
1806
+ encodingY: YEncoding,
1807
+ encodingDetail: DetailEncoding,
1808
+ encodingColor: ColorEncoding,
1809
+ encodingColorId: ColorIdEncoding,
1764
1810
  colorItems: [],
1765
1811
  colorIdMap: {}
1766
1812
  }
1767
1813
  };
1768
- const dataReshapeFor2D1M0Name = (dataset, dimensions, measures, options)=>{
1769
- 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 || {};
1770
1816
  if (0 === dimensions.length && 0 === measures.length) return emptyReshapeResult;
1771
1817
  const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
1772
- if (0 === dimensions.length) {
1773
- const { dataset: finalDataset, unfoldInfo } = unfoldZeroDimensions(foldedDataset, [
1774
- {
1775
- id: foldMeasureValue,
1776
- alias: i18n`指标值`
1777
- }
1778
- ], i18n`指标名称`, unfoldDimensionGroup, unfoldDimensionGroupId);
1779
- return {
1780
- dataset: finalDataset,
1781
- foldInfo,
1782
- unfoldInfo
1783
- };
1784
- }
1785
- {
1786
- const onlyOneMeasure = 1 === measures.length;
1787
- const onlyOneDimension = 1 === dimensions.length;
1788
- const dims = [
1789
- ...dimensions
1790
- ];
1791
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
1792
- id: foldMeasureName,
1793
- alias: i18n`指标名称`,
1794
- location: 'dimension'
1795
- });
1796
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
1797
- {
1798
- id: foldMeasureValue,
1799
- alias: i18n`指标值`
1800
- }
1801
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
1802
- return {
1803
- dataset: finalDataset,
1804
- foldInfo,
1805
- unfoldInfo
1806
- };
1807
- }
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
+ };
1808
1828
  };
1809
- const reshapeTo2D1M0Name = (advancedVSeed, context)=>{
1829
+ const reshapeWithEncoding = (advancedVSeed, context)=>{
1810
1830
  const result = {
1811
1831
  ...advancedVSeed
1812
1832
  };
1813
1833
  const { vseed } = context;
1814
- const { dataset } = vseed;
1815
- const { dimensions, measures } = advancedVSeed;
1816
- 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;
1817
1837
  if (0 === measures.length) throw new Error('measures can not be empty');
1818
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, dimensions, measures);
1838
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1819
1839
  return {
1820
1840
  ...result,
1821
1841
  dataset: newDatasets,
1822
1842
  datasetReshapeInfo: [
1823
1843
  {
1824
- id: '2D1M',
1844
+ id: String(chartType),
1825
1845
  index: 0,
1826
1846
  foldInfo,
1827
1847
  unfoldInfo
@@ -1831,31 +1851,27 @@
1831
1851
  measures
1832
1852
  };
1833
1853
  };
1834
- const pivotReshapeTo2D1M0Name = (advancedVSeed, context)=>{
1854
+ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1835
1855
  const result = {
1836
1856
  ...advancedVSeed
1837
1857
  };
1838
1858
  const { vseed } = context;
1839
1859
  const { dataset } = vseed;
1840
- const { measures } = advancedVSeed;
1841
- const dimensions = advancedVSeed.dimensions;
1842
- 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');
1843
1863
  const measureGroups = [];
1844
1864
  if (measures) measures.forEach((measure)=>{
1845
1865
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1846
1866
  });
1847
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
1848
- const newDatasets = [];
1867
+ const datasets = [];
1849
1868
  const datasetReshapeInfo = [];
1850
1869
  measureGroups.forEach((measureGroup, index)=>{
1851
1870
  const measures = measureGroup.children;
1852
1871
  if (!measures) return;
1853
1872
  const groupId = measureGroup.id;
1854
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M0Name(dataset, commonDimensions, measures, {
1855
- foldMeasureId: FoldMeasureId,
1856
- foldMeasureName: FoldMeasureName,
1857
- foldMeasureValue: FoldMeasureValue + groupId,
1858
- unfoldDimensionGroup: UnfoldDimensionGroup
1873
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1874
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`
1859
1875
  });
1860
1876
  const reshapeInfo = {
1861
1877
  id: groupId,
@@ -1863,52 +1879,15 @@
1863
1879
  foldInfo,
1864
1880
  unfoldInfo
1865
1881
  };
1866
- newDatasets.push(newSubDataset);
1882
+ datasets.push(newSubDataset);
1867
1883
  datasetReshapeInfo.push(reshapeInfo);
1868
1884
  });
1869
1885
  return {
1870
1886
  ...result,
1871
- dataset: newDatasets,
1887
+ dataset: datasets,
1872
1888
  datasetReshapeInfo: datasetReshapeInfo
1873
1889
  };
1874
1890
  };
1875
- const encodingXY = (advancedVSeed)=>{
1876
- const result = {
1877
- ...advancedVSeed
1878
- };
1879
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
1880
- if (!datasetReshapeInfo || !dimensions) return result;
1881
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
1882
- const isZeroDimension = 0 === dimensions.length;
1883
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
1884
- const { foldInfo, unfoldInfo } = cur;
1885
- const x = [
1886
- isZeroDimension ? foldInfo.measureName : xDimension?.id
1887
- ];
1888
- const y = [
1889
- foldInfo.measureValue
1890
- ];
1891
- const group = [
1892
- unfoldInfo.groupId
1893
- ];
1894
- const color = [
1895
- foldInfo.measureName
1896
- ];
1897
- return [
1898
- ...prev,
1899
- {
1900
- x,
1901
- y,
1902
- group,
1903
- color
1904
- }
1905
- ];
1906
- }, []);
1907
- return {
1908
- ...result,
1909
- encoding
1910
- };
1911
- };
1912
1891
  function chunk_NFFV4IQT_m(...r) {
1913
1892
  return chunk_WIMGWYZL_u(chunk_NFFV4IQT_o, r);
1914
1893
  }
@@ -1923,42 +1902,46 @@
1923
1902
  ...advancedVSeed
1924
1903
  };
1925
1904
  const { vseed } = context;
1926
- const { sort: sortAxis, dataset } = vseed;
1927
- const { encoding } = advancedVSeed;
1928
- 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;
1929
1909
  if (!sortAxis || !xField) return advancedVSeed;
1930
1910
  if (!result.analysis) result.analysis = {};
1931
1911
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1932
- const axisOrderResult = calcOrder(sortAxis, xField, dataset);
1912
+ const axisOrderResult = calcOrder(sortAxis, xField, dataset.flat(2));
1933
1913
  result.analysis.orderMapping[xField] = axisOrderResult;
1934
1914
  return result;
1935
1915
  };
1936
- const sortYBandAxis = (advancedVSeed, context)=>{
1937
- const result = {
1938
- ...advancedVSeed
1939
- };
1940
- const { vseed } = context;
1941
- const { sort: sortAxis, dataset } = vseed;
1942
- const { encoding } = advancedVSeed;
1943
- const yField = encoding?.[0]?.y?.[0];
1944
- if (!sortAxis || !yField) return advancedVSeed;
1945
- if (!result.analysis) result.analysis = {};
1946
- if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1947
- const axisOrderResult = calcOrder(sortAxis, yField, dataset);
1948
- result.analysis.orderMapping[yField] = axisOrderResult;
1949
- 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]));
1950
1933
  };
1951
- const sort_sortLegend = (advancedVSeed, context)=>{
1934
+ const sortLegend_sortLegend = (advancedVSeed, context)=>{
1952
1935
  const result = {
1953
1936
  ...advancedVSeed
1954
1937
  };
1955
1938
  const { vseed } = context;
1956
1939
  const { sortLegend } = vseed;
1957
- const { datasetReshapeInfo } = advancedVSeed;
1958
- const groupField = datasetReshapeInfo?.[0]?.unfoldInfo?.groupId;
1940
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
1941
+ const colorId = datasetReshapeInfo?.[0]?.unfoldInfo?.encodingColorId;
1959
1942
  const colorIdMap = datasetReshapeInfo?.[0]?.unfoldInfo?.colorIdMap;
1960
1943
  const colorItems = datasetReshapeInfo?.[0]?.unfoldInfo?.colorItems;
1961
- if (!sortLegend || !groupField || !colorIdMap || !colorItems) return advancedVSeed;
1944
+ if (!sortLegend || !colorId || !colorIdMap || !colorItems) return advancedVSeed;
1962
1945
  if (!result.analysis) result.analysis = {};
1963
1946
  if (!result.analysis.orderMapping) result.analysis.orderMapping = {};
1964
1947
  if (sortLegend.customOrder) {
@@ -1967,15 +1950,14 @@
1967
1950
  return pre;
1968
1951
  }, {});
1969
1952
  const orderRes = sortLegend.customOrder.map((itemNameOrId)=>nameMap[itemNameOrId] ? nameMap[itemNameOrId] : itemNameOrId);
1970
- result.analysis.orderMapping[groupField] = orderRes;
1953
+ result.analysis.orderMapping[colorId] = orderRes;
1971
1954
  return result;
1972
1955
  }
1973
- const dataset = advancedVSeed.dataset?.flat(2);
1974
- const orderRes = calcOrder(sortLegend, groupField, dataset || []);
1975
- result.analysis.orderMapping[groupField] = orderRes;
1956
+ const orderRes = sortLegend_calcOrder(sortLegend, colorId, dataset?.flat(2) || []);
1957
+ result.analysis.orderMapping[colorId] = orderRes;
1976
1958
  return result;
1977
1959
  };
1978
- const calcOrder = (sortConfig, id, dataset)=>{
1960
+ const sortLegend_calcOrder = (sortConfig, id, dataset)=>{
1979
1961
  if (sortConfig.customOrder) return sortConfig.customOrder;
1980
1962
  const order = sortConfig.order || 'asc';
1981
1963
  const orderBy = sortConfig.orderBy;
@@ -2107,14 +2089,14 @@
2107
2089
  initAdvancedVSeed_initAdvancedVSeed,
2108
2090
  autoMeasures_autoMeasures,
2109
2091
  autoDimensions_autoDimensions,
2092
+ encodingForColumn,
2110
2093
  pivotAdapter([
2111
- reshapeTo2D1M0Name
2094
+ reshapeWithEncoding
2112
2095
  ], [
2113
- pivotReshapeTo2D1M0Name
2096
+ pivotReshapeWithEncoding
2114
2097
  ]),
2115
- encodingXY,
2116
2098
  sortXBandAxis,
2117
- sort_sortLegend,
2099
+ sortLegend_sortLegend,
2118
2100
  lineConfig,
2119
2101
  theme_theme,
2120
2102
  markStyle_markStyle,
@@ -2125,13 +2107,13 @@
2125
2107
  ...spec
2126
2108
  };
2127
2109
  const { advancedVSeed } = context;
2128
- const { encoding } = advancedVSeed;
2129
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
2110
+ const { datasetReshapeInfo } = advancedVSeed;
2111
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
2130
2112
  result.type = 'line';
2131
2113
  result.direction = 'vertical';
2132
- result.xField = encoding[0].x[0];
2133
- result.yField = encoding[0].y[0];
2134
- result.seriesField = encoding[0].group[0];
2114
+ result.xField = unfoldInfo.encodingX;
2115
+ result.yField = foldInfo.measureValue;
2116
+ result.seriesField = unfoldInfo.encodingColorId;
2135
2117
  result.padding = 0;
2136
2118
  result.region = [
2137
2119
  {
@@ -2207,11 +2189,12 @@
2207
2189
  };
2208
2190
  const datasetXY = (spec, context)=>{
2209
2191
  const { advancedVSeed, vseed } = context;
2210
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
2192
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
2193
+ const { unfoldInfo } = datasetReshapeInfo[0];
2211
2194
  const orderMapping = analysis?.orderMapping || {};
2212
- const angle = encoding[0]?.angle?.[0];
2213
- const x = encoding[0]?.x?.[0];
2214
- const group = encoding[0]?.group?.[0];
2195
+ const angle = unfoldInfo.encodingAngle;
2196
+ const x = unfoldInfo.encodingX;
2197
+ const colorId = unfoldInfo.encodingColorId;
2215
2198
  const id = datasetReshapeInfo[0].id;
2216
2199
  const fields = {};
2217
2200
  if (angle) fields[angle] = {
@@ -2228,14 +2211,14 @@
2228
2211
  sortIndex: 0
2229
2212
  };
2230
2213
  }
2231
- if (group) {
2232
- const order = orderMapping[group];
2233
- if (order) fields[group] = {
2214
+ if (colorId) {
2215
+ const order = orderMapping[colorId];
2216
+ if (order) fields[colorId] = {
2234
2217
  sortIndex: 0,
2235
2218
  domain: order,
2236
2219
  lockStatisticsByDomain: true
2237
2220
  };
2238
- else fields[group] = {
2221
+ else fields[colorId] = {
2239
2222
  sortIndex: 0
2240
2223
  };
2241
2224
  }
@@ -2488,7 +2471,7 @@
2488
2471
  } } = baseConfig;
2489
2472
  const { enable } = tooltip;
2490
2473
  const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2491
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
2474
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2492
2475
  result.tooltip = {
2493
2476
  visible: enable,
2494
2477
  mark: {
@@ -2509,7 +2492,7 @@
2509
2492
  {
2510
2493
  visible: true,
2511
2494
  hasShape: true,
2512
- key: (datum)=>datum && datum[measureName || groupName] || '',
2495
+ key: (datum)=>datum && datum[measureName || colorName] || '',
2513
2496
  value: (datum)=>{
2514
2497
  if (!datum) return '';
2515
2498
  const value = datum[measureValue];
@@ -2531,7 +2514,7 @@
2531
2514
  content: [
2532
2515
  {
2533
2516
  visible: true,
2534
- key: (datum)=>datum && datum[groupName] || '',
2517
+ key: (datum)=>datum && datum[colorName] || '',
2535
2518
  value: (datum)=>{
2536
2519
  if (!datum) return '';
2537
2520
  const value = datum[measureValue];
@@ -2869,7 +2852,8 @@
2869
2852
  const pointStateHover = (spec, context)=>{
2870
2853
  const point = spec.point || {};
2871
2854
  const { advancedVSeed } = context;
2872
- const { encoding } = advancedVSeed;
2855
+ const { datasetReshapeInfo } = advancedVSeed;
2856
+ const { unfoldInfo } = datasetReshapeInfo[0];
2873
2857
  const result = {
2874
2858
  ...spec,
2875
2859
  point: {
@@ -2880,7 +2864,7 @@
2880
2864
  scaleX: 1.4,
2881
2865
  scaleY: 1.4,
2882
2866
  stroke: (datum, context)=>{
2883
- const field = encoding[0]?.group?.[0];
2867
+ const field = unfoldInfo.encodingColorId;
2884
2868
  const color = context.seriesColor(datum[field]);
2885
2869
  return color;
2886
2870
  },
@@ -2910,7 +2894,8 @@
2910
2894
  };
2911
2895
  const lineStyle_lineStyle = (spec, context)=>{
2912
2896
  const { advancedVSeed } = context;
2913
- const { markStyle, encoding, dataset } = advancedVSeed;
2897
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
2898
+ const { unfoldInfo } = datasetReshapeInfo[0];
2914
2899
  const { lineStyle } = markStyle;
2915
2900
  if (!lineStyle) return spec;
2916
2901
  const result = {
@@ -2919,8 +2904,8 @@
2919
2904
  const lineStyles = Array.isArray(lineStyle) ? lineStyle : [
2920
2905
  lineStyle
2921
2906
  ];
2922
- const group = encoding[0]?.group?.[0];
2923
- const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
2907
+ const colorId = unfoldInfo.encodingColorId;
2908
+ const lineGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[colorId ?? '']);
2924
2909
  const customMap = lineStyles.reduce((result, style, index)=>{
2925
2910
  const { lineColor, lineColorOpacity, lineSmooth, lineStyle, lineWidth = 2, lineVisible = true } = style;
2926
2911
  const dashSegment = 2 * lineWidth;
@@ -2941,7 +2926,7 @@
2941
2926
  [`custom${index + 1}`]: {
2942
2927
  level: index + 1,
2943
2928
  filter: (datum)=>{
2944
- const lineData = lineGroups[datum[group ?? '']];
2929
+ const lineData = lineGroups[datum[colorId ?? '']];
2945
2930
  for (const d of lineData)if (selector_selector(d, style.selector)) return true;
2946
2931
  return false;
2947
2932
  },
@@ -3039,7 +3024,8 @@
3039
3024
  }
3040
3025
  const annotationVerticalLine_annotationVerticalLine = (spec, context)=>{
3041
3026
  const { advancedVSeed } = context;
3042
- const { annotation, encoding } = advancedVSeed;
3027
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3028
+ const { unfoldInfo } = datasetReshapeInfo[0];
3043
3029
  if (!annotation || !annotation.annotationVerticalLine) return spec;
3044
3030
  const { annotationVerticalLine } = annotation;
3045
3031
  const annotationVerticalLineList = Array.isArray(annotationVerticalLine) ? annotationVerticalLine : [
@@ -3119,7 +3105,7 @@
3119
3105
  }
3120
3106
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3121
3107
  return selectedData.map((datum)=>{
3122
- const x = encoding[0]?.x?.[0];
3108
+ const x = unfoldInfo.encodingX;
3123
3109
  if (!x) return {};
3124
3110
  return generateOneMarkLine(datum[x]);
3125
3111
  });
@@ -3136,7 +3122,8 @@
3136
3122
  };
3137
3123
  const annotationHorizontalLine_annotationHorizontalLine = (spec, context)=>{
3138
3124
  const { advancedVSeed } = context;
3139
- const { annotation, encoding } = advancedVSeed;
3125
+ const { annotation, datasetReshapeInfo } = advancedVSeed;
3126
+ const { unfoldInfo } = datasetReshapeInfo[0];
3140
3127
  if (!annotation || !annotation.annotationHorizontalLine) return spec;
3141
3128
  const { annotationHorizontalLine } = annotation;
3142
3129
  const annotationVerticalLineList = Array.isArray(annotationHorizontalLine) ? annotationHorizontalLine : [
@@ -3216,7 +3203,7 @@
3216
3203
  }
3217
3204
  const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
3218
3205
  return selectedData.map((datum)=>{
3219
- const y = encoding[0]?.y?.[0];
3206
+ const y = unfoldInfo.encodingY;
3220
3207
  if (!y) return {};
3221
3208
  return generateOneMarkLine(datum[y]);
3222
3209
  });
@@ -3497,13 +3484,10 @@
3497
3484
  ...spec
3498
3485
  };
3499
3486
  const { advancedVSeed } = context;
3500
- const { measures, datasetReshapeInfo, encoding, dataset } = advancedVSeed;
3487
+ const { measures, datasetReshapeInfo, dataset } = advancedVSeed;
3501
3488
  const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3502
3489
  const indicators = datasetReshapeInfo.map((reshapeInfo, index)=>{
3503
3490
  const measure = measures?.find((d)=>d.id === reshapeInfo.id);
3504
- const newEncoding = [
3505
- encoding[index]
3506
- ];
3507
3491
  const newDataset = dataset[index];
3508
3492
  const newDatasetReshapeInfo = [
3509
3493
  {
@@ -3519,8 +3503,7 @@
3519
3503
  advancedVSeed: {
3520
3504
  ...advancedVSeed,
3521
3505
  datasetReshapeInfo: newDatasetReshapeInfo,
3522
- dataset: newDataset,
3523
- encoding: newEncoding
3506
+ dataset: newDataset
3524
3507
  }
3525
3508
  };
3526
3509
  const chartSpec = execPipeline(chartPipeline, newContext, {});
@@ -3706,7 +3689,7 @@
3706
3689
  }
3707
3690
  },
3708
3691
  label: {
3709
- formatMethod: (value)=>colorIdMap[String(value)] ?? value,
3692
+ formatMethod: (value)=>colorIdMap[value] ?? value,
3710
3693
  style: {
3711
3694
  fontSize: labelFontSize,
3712
3695
  fill: labelFontColor,
@@ -3789,151 +3772,18 @@
3789
3772
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3790
3773
  Builder._specPipelineMap.line = lineSpecPipeline;
3791
3774
  };
3792
- const dataReshapeFor2D1M_emptyReshapeResult = {
3793
- dataset: [],
3794
- foldInfo: {
3795
- foldMap: {},
3796
- measureId: '',
3797
- measureName: '',
3798
- measureValue: ''
3799
- },
3800
- unfoldInfo: {
3801
- groupName: '',
3802
- groupId: '',
3803
- colorItems: [],
3804
- colorIdMap: {}
3805
- }
3806
- };
3807
- const dataReshapeFor2D1M = (dataset, dimensions, measures, options)=>{
3808
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
3809
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor2D1M_emptyReshapeResult;
3810
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
3811
- if (0 === dimensions.length) {
3812
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
3813
- {
3814
- id: foldMeasureId,
3815
- alias: i18n`指标Id`,
3816
- location: 'dimension'
3817
- },
3818
- {
3819
- id: foldMeasureName,
3820
- alias: i18n`指标名称`,
3821
- location: 'dimension'
3822
- }
3823
- ], [
3824
- {
3825
- id: foldMeasureValue,
3826
- alias: i18n`指标值`
3827
- }
3828
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3829
- return {
3830
- dataset: finalDataset,
3831
- foldInfo,
3832
- unfoldInfo
3833
- };
3834
- }
3835
- {
3836
- const onlyOneMeasure = 1 === measures.length;
3837
- const onlyOneDimension = 1 === dimensions.length;
3838
- const dims = [
3839
- ...dimensions
3840
- ];
3841
- if (!onlyOneMeasure || onlyOneDimension) dims.push({
3842
- id: foldMeasureName,
3843
- alias: i18n`指标名称`,
3844
- location: 'dimension'
3845
- });
3846
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
3847
- {
3848
- id: foldMeasureValue,
3849
- alias: i18n`指标值`
3850
- }
3851
- ], 1, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
3852
- return {
3853
- dataset: finalDataset,
3854
- foldInfo,
3855
- unfoldInfo
3856
- };
3857
- }
3858
- };
3859
- const reshapeTo2D1M = (advancedVSeed, context)=>{
3860
- const result = {
3861
- ...advancedVSeed
3862
- };
3863
- const { vseed } = context;
3864
- const { dataset } = vseed;
3865
- const { dimensions, measures } = advancedVSeed;
3866
- if (!measures || !dimensions || !dataset) return result;
3867
- if (0 === measures.length) throw new Error('measures can not be empty');
3868
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, dimensions, measures);
3869
- return {
3870
- ...result,
3871
- dataset: newDatasets,
3872
- datasetReshapeInfo: [
3873
- {
3874
- id: '2D1M',
3875
- index: 0,
3876
- foldInfo,
3877
- unfoldInfo
3878
- }
3879
- ],
3880
- dimensions,
3881
- measures
3882
- };
3883
- };
3884
- const pivotReshapeTo2D1M = (advancedVSeed, context)=>{
3885
- const result = {
3886
- ...advancedVSeed
3887
- };
3888
- const { vseed } = context;
3889
- const { dataset } = vseed;
3890
- const { measures } = advancedVSeed;
3891
- const dimensions = advancedVSeed.dimensions;
3892
- if (!measures || !dimensions) return result;
3893
- const measureGroups = [];
3894
- if (measures) measures.forEach((measure)=>{
3895
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
3896
- });
3897
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
3898
- const newDatasets = [];
3899
- const datasetReshapeInfo = [];
3900
- measureGroups.forEach((measureGroup, index)=>{
3901
- const measures = measureGroup.children;
3902
- if (!measures) return;
3903
- const groupId = measureGroup.id;
3904
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, measures, {
3905
- foldMeasureId: FoldMeasureId,
3906
- foldMeasureName: FoldMeasureName,
3907
- foldMeasureValue: FoldMeasureValue + groupId,
3908
- unfoldDimensionGroup: UnfoldDimensionGroup
3909
- });
3910
- const reshapeInfo = {
3911
- id: groupId,
3912
- index,
3913
- foldInfo,
3914
- unfoldInfo
3915
- };
3916
- newDatasets.push(newSubDataset);
3917
- datasetReshapeInfo.push(reshapeInfo);
3918
- });
3919
- return {
3920
- ...result,
3921
- dataset: newDatasets,
3922
- datasetReshapeInfo: datasetReshapeInfo
3923
- };
3924
- };
3925
3775
  const columnAdvancedPipeline = [
3926
3776
  initAdvancedVSeed_initAdvancedVSeed,
3927
3777
  autoMeasures_autoMeasures,
3928
3778
  autoDimensions_autoDimensions,
3779
+ encodingForColumn,
3929
3780
  pivotAdapter([
3930
- reshapeTo2D1M
3781
+ reshapeWithEncoding
3931
3782
  ], [
3932
- pivotReshapeTo2D1M
3783
+ pivotReshapeWithEncoding
3933
3784
  ]),
3934
- encodingXY,
3935
3785
  sortXBandAxis,
3936
- sort_sortLegend,
3786
+ sortLegend_sortLegend,
3937
3787
  columnConfig,
3938
3788
  theme_theme,
3939
3789
  markStyle_markStyle,
@@ -3944,13 +3794,13 @@
3944
3794
  ...spec
3945
3795
  };
3946
3796
  const { advancedVSeed } = context;
3947
- const { encoding } = advancedVSeed;
3948
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
3797
+ const { datasetReshapeInfo } = advancedVSeed;
3798
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
3949
3799
  result.type = 'bar';
3950
3800
  result.direction = 'vertical';
3951
- result.xField = encoding[0].x[0];
3952
- result.yField = encoding[0].y[0];
3953
- result.seriesField = encoding[0].group[0];
3801
+ result.xField = unfoldInfo.encodingX;
3802
+ result.yField = foldInfo.measureValue;
3803
+ result.seriesField = unfoldInfo.encodingColorId;
3954
3804
  result.padding = 0;
3955
3805
  result.region = [
3956
3806
  {
@@ -4270,14 +4120,14 @@
4270
4120
  initAdvancedVSeed_initAdvancedVSeed,
4271
4121
  autoMeasures_autoMeasures,
4272
4122
  autoDimensions_autoDimensions,
4123
+ encodingForColumn,
4273
4124
  pivotAdapter([
4274
- reshapeTo2D1M
4125
+ reshapeWithEncoding
4275
4126
  ], [
4276
- pivotReshapeTo2D1M
4127
+ pivotReshapeWithEncoding
4277
4128
  ]),
4278
- encodingXY,
4279
4129
  sortXBandAxis,
4280
- sort_sortLegend,
4130
+ sortLegend_sortLegend,
4281
4131
  columnParallelConfig,
4282
4132
  theme_theme,
4283
4133
  markStyle_markStyle,
@@ -4288,17 +4138,19 @@
4288
4138
  ...spec
4289
4139
  };
4290
4140
  const { advancedVSeed } = context;
4291
- const { encoding, datasetReshapeInfo } = advancedVSeed;
4292
- const { unfoldInfo } = datasetReshapeInfo[0];
4293
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4141
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4142
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4143
+ const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4294
4144
  result.type = 'bar';
4295
4145
  result.direction = 'vertical';
4296
- result.xField = [
4297
- encoding[0].x[0],
4298
- unfoldInfo.groupId
4146
+ result.xField = sameDimensionsMode ? [
4147
+ unfoldInfo.encodingX
4148
+ ] : [
4149
+ unfoldInfo.encodingX,
4150
+ unfoldInfo.encodingDetail
4299
4151
  ];
4300
- result.yField = encoding[0].y[0];
4301
- result.seriesField = encoding[0].group[0];
4152
+ result.yField = foldInfo.measureValue;
4153
+ result.seriesField = unfoldInfo.encodingColorId;
4302
4154
  result.padding = 0;
4303
4155
  result.region = [
4304
4156
  {
@@ -4365,14 +4217,14 @@
4365
4217
  initAdvancedVSeed_initAdvancedVSeed,
4366
4218
  autoMeasures_autoMeasures,
4367
4219
  autoDimensions_autoDimensions,
4220
+ encodingForColumn,
4368
4221
  pivotAdapter([
4369
- reshapeTo2D1M
4222
+ reshapeWithEncoding
4370
4223
  ], [
4371
- pivotReshapeTo2D1M
4224
+ pivotReshapeWithEncoding
4372
4225
  ]),
4373
- encodingXY,
4374
4226
  sortXBandAxis,
4375
- sort_sortLegend,
4227
+ sortLegend_sortLegend,
4376
4228
  columnPercentConfig,
4377
4229
  theme_theme,
4378
4230
  markStyle_markStyle,
@@ -4442,55 +4294,70 @@
4442
4294
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4443
4295
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4444
4296
  };
4445
- const encodingYX = (advancedVSeed)=>{
4446
- const result = {
4447
- ...advancedVSeed
4448
- };
4449
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
4450
- if (!datasetReshapeInfo || !dimensions) return result;
4451
- const yDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
4452
- const isZeroDimension = 0 === dimensions.length;
4453
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
4454
- const { foldInfo, unfoldInfo } = cur;
4455
- const y = [
4456
- isZeroDimension ? foldInfo.measureName : yDimension?.id
4457
- ];
4458
- const x = [
4459
- foldInfo.measureValue
4460
- ];
4461
- const group = [
4462
- unfoldInfo.groupId
4463
- ];
4464
- const color = [
4465
- 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
4466
4309
  ];
4467
- return [
4468
- ...prev,
4469
- {
4470
- x,
4471
- y,
4472
- group,
4473
- color
4310
+ return {
4311
+ ...advancedVSeed,
4312
+ encoding: {
4313
+ ...encoding,
4314
+ detail: mergedDetail
4474
4315
  }
4475
- ];
4476
- }, []);
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
+ };
4477
4328
  return {
4478
- ...result,
4479
- encoding
4329
+ ...advancedVSeed,
4330
+ encoding: mergedEncoding
4331
+ };
4332
+ };
4333
+ const sortYBandAxis = (advancedVSeed, context)=>{
4334
+ const result = {
4335
+ ...advancedVSeed
4480
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;
4481
4348
  };
4482
4349
  const barAdvancedPipeline = [
4483
4350
  initAdvancedVSeed_initAdvancedVSeed,
4484
4351
  autoMeasures_autoMeasures,
4485
4352
  autoDimensions_autoDimensions,
4353
+ encodingForBar,
4486
4354
  pivotAdapter([
4487
- reshapeTo2D1M
4355
+ reshapeWithEncoding
4488
4356
  ], [
4489
- pivotReshapeTo2D1M
4357
+ pivotReshapeWithEncoding
4490
4358
  ]),
4491
- encodingYX,
4492
4359
  sortYBandAxis,
4493
- sort_sortLegend,
4360
+ sortLegend_sortLegend,
4494
4361
  barConfig,
4495
4362
  theme_theme,
4496
4363
  markStyle_markStyle,
@@ -4501,13 +4368,13 @@
4501
4368
  ...spec
4502
4369
  };
4503
4370
  const { advancedVSeed } = context;
4504
- const { encoding } = advancedVSeed;
4505
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4371
+ const { datasetReshapeInfo } = advancedVSeed;
4372
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4506
4373
  result.type = 'bar';
4507
4374
  result.direction = 'horizontal';
4508
- result.yField = encoding[0].y?.[0];
4509
- result.xField = encoding[0].x?.[0];
4510
- result.seriesField = encoding[0].group?.[0];
4375
+ result.yField = unfoldInfo.encodingY;
4376
+ result.xField = foldInfo.measureValue;
4377
+ result.seriesField = unfoldInfo.encodingColorId;
4511
4378
  result.padding = 0;
4512
4379
  result.region = [
4513
4380
  {
@@ -4519,11 +4386,12 @@
4519
4386
  };
4520
4387
  const datasetYX = (spec, context)=>{
4521
4388
  const { advancedVSeed, vseed } = context;
4522
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
4389
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
4390
+ const { unfoldInfo } = datasetReshapeInfo[0];
4523
4391
  const orderMapping = analysis?.orderMapping || {};
4524
- const angle = encoding[0]?.angle?.[0];
4525
- const y = encoding[0]?.y?.[0];
4526
- const group = encoding[0]?.group?.[0];
4392
+ const angle = unfoldInfo.encodingAngle;
4393
+ const y = unfoldInfo.encodingY;
4394
+ const colorId = unfoldInfo.encodingColorId;
4527
4395
  const id = datasetReshapeInfo[0].id;
4528
4396
  const fields = {};
4529
4397
  if (angle) fields[angle] = {
@@ -4540,14 +4408,14 @@
4540
4408
  sortIndex: 0
4541
4409
  };
4542
4410
  }
4543
- if (group) {
4544
- const order = orderMapping[group];
4545
- if (order) fields[group] = {
4411
+ if (colorId) {
4412
+ const order = orderMapping[colorId];
4413
+ if (order) fields[colorId] = {
4546
4414
  sortIndex: 0,
4547
4415
  domain: order,
4548
4416
  lockStatisticsByDomain: true
4549
4417
  };
4550
- else fields[group] = {
4418
+ else fields[colorId] = {
4551
4419
  sortIndex: 0
4552
4420
  };
4553
4421
  }
@@ -4835,14 +4703,14 @@
4835
4703
  initAdvancedVSeed_initAdvancedVSeed,
4836
4704
  autoMeasures_autoMeasures,
4837
4705
  autoDimensions_autoDimensions,
4706
+ encodingForBar,
4838
4707
  pivotAdapter([
4839
- reshapeTo2D1M
4708
+ reshapeWithEncoding
4840
4709
  ], [
4841
- pivotReshapeTo2D1M
4710
+ pivotReshapeWithEncoding
4842
4711
  ]),
4843
- encodingYX,
4844
4712
  sortYBandAxis,
4845
- sort_sortLegend,
4713
+ sortLegend_sortLegend,
4846
4714
  barParallelConfig,
4847
4715
  theme_theme,
4848
4716
  markStyle_markStyle,
@@ -4853,17 +4721,19 @@
4853
4721
  ...spec
4854
4722
  };
4855
4723
  const { advancedVSeed } = context;
4856
- const { encoding, datasetReshapeInfo } = advancedVSeed;
4857
- const { unfoldInfo } = datasetReshapeInfo[0];
4858
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4724
+ const { datasetReshapeInfo, dimensions } = advancedVSeed;
4725
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
4726
+ const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
4859
4727
  result.type = 'bar';
4860
4728
  result.direction = 'horizontal';
4861
- result.yField = [
4862
- encoding[0].y[0],
4863
- unfoldInfo.groupId
4729
+ result.yField = sameDimensionsMode ? [
4730
+ unfoldInfo.encodingY
4731
+ ] : [
4732
+ unfoldInfo.encodingY,
4733
+ unfoldInfo.encodingDetail
4864
4734
  ];
4865
- result.xField = encoding[0].x[0];
4866
- result.seriesField = encoding[0].group[0];
4735
+ result.xField = foldInfo.measureValue;
4736
+ result.seriesField = unfoldInfo.encodingColorId;
4867
4737
  result.padding = 0;
4868
4738
  result.region = [
4869
4739
  {
@@ -4929,14 +4799,14 @@
4929
4799
  initAdvancedVSeed_initAdvancedVSeed,
4930
4800
  autoMeasures_autoMeasures,
4931
4801
  autoDimensions_autoDimensions,
4802
+ encodingForBar,
4932
4803
  pivotAdapter([
4933
- reshapeTo2D1M
4804
+ reshapeWithEncoding
4934
4805
  ], [
4935
- pivotReshapeTo2D1M
4806
+ pivotReshapeWithEncoding
4936
4807
  ]),
4937
- encodingYX,
4938
4808
  sortYBandAxis,
4939
- sort_sortLegend,
4809
+ sortLegend_sortLegend,
4940
4810
  barPercentConfig,
4941
4811
  theme_theme,
4942
4812
  markStyle_markStyle,
@@ -5000,14 +4870,14 @@
5000
4870
  initAdvancedVSeed_initAdvancedVSeed,
5001
4871
  autoMeasures_autoMeasures,
5002
4872
  autoDimensions_autoDimensions,
4873
+ encodingForColumn,
5003
4874
  pivotAdapter([
5004
- reshapeTo2D1M0Name
4875
+ reshapeWithEncoding
5005
4876
  ], [
5006
- pivotReshapeTo2D1M0Name
4877
+ pivotReshapeWithEncoding
5007
4878
  ]),
5008
- encodingXY,
5009
4879
  sortXBandAxis,
5010
- sort_sortLegend,
4880
+ sortLegend_sortLegend,
5011
4881
  areaConfig,
5012
4882
  theme_theme,
5013
4883
  markStyle_markStyle,
@@ -5018,13 +4888,13 @@
5018
4888
  ...spec
5019
4889
  };
5020
4890
  const { advancedVSeed } = context;
5021
- const { encoding } = advancedVSeed;
5022
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
4891
+ const { datasetReshapeInfo } = advancedVSeed;
4892
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
5023
4893
  result.type = 'area';
5024
4894
  result.direction = 'vertical';
5025
- result.xField = encoding[0].x[0];
5026
- result.yField = encoding[0].y[0];
5027
- result.seriesField = encoding[0].group[0];
4895
+ result.yField = foldInfo.measureValue;
4896
+ result.xField = unfoldInfo.encodingX;
4897
+ result.seriesField = unfoldInfo.encodingColorId;
5028
4898
  result.padding = 0;
5029
4899
  result.region = [
5030
4900
  {
@@ -5036,8 +4906,9 @@
5036
4906
  };
5037
4907
  const areaStyle_areaStyle = (spec, context)=>{
5038
4908
  const { advancedVSeed } = context;
5039
- const { markStyle, encoding, dataset } = advancedVSeed;
4909
+ const { markStyle, datasetReshapeInfo, dataset } = advancedVSeed;
5040
4910
  const { areaStyle } = markStyle;
4911
+ const { unfoldInfo } = datasetReshapeInfo[0];
5041
4912
  if (!areaStyle) return {
5042
4913
  ...spec,
5043
4914
  area: {
@@ -5050,7 +4921,7 @@
5050
4921
  const areaStyles = Array.isArray(areaStyle) ? areaStyle : [
5051
4922
  areaStyle
5052
4923
  ];
5053
- const group = encoding[0]?.group?.[0];
4924
+ const group = unfoldInfo.encodingColorId;
5054
4925
  const areaGroups = chunk_HVPVHFDT_i(dataset, (d)=>d[group ?? '']);
5055
4926
  const customMap = areaStyles.reduce((result, style, index)=>{
5056
4927
  const { areaColor, areaColorOpacity, areaVisible = true } = style;
@@ -5144,14 +5015,14 @@
5144
5015
  initAdvancedVSeed_initAdvancedVSeed,
5145
5016
  autoMeasures_autoMeasures,
5146
5017
  autoDimensions_autoDimensions,
5018
+ encodingForColumn,
5147
5019
  pivotAdapter([
5148
- reshapeTo2D1M0Name
5020
+ reshapeWithEncoding
5149
5021
  ], [
5150
- pivotReshapeTo2D1M0Name
5022
+ pivotReshapeWithEncoding
5151
5023
  ]),
5152
- encodingXY,
5153
5024
  sortXBandAxis,
5154
- sort_sortLegend,
5025
+ sortLegend_sortLegend,
5155
5026
  areaPercentConfig,
5156
5027
  theme_theme,
5157
5028
  markStyle_markStyle,
@@ -5216,16 +5087,20 @@
5216
5087
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5217
5088
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5218
5089
  };
5219
- const autoMeasuresBy2M1Group = (advancedVSeed, context)=>{
5090
+ const autoScatterMeasures = (advancedVSeed, context)=>{
5220
5091
  const result = {
5221
5092
  ...advancedVSeed
5222
5093
  };
5223
5094
  const { vseed } = context;
5224
- const { measures, dataset } = vseed;
5095
+ const { dataset, scatterMeasures, measures } = vseed;
5225
5096
  if (!dataset) throw new Error('dataset is required');
5226
5097
  if (0 === dataset.length) return result;
5227
- if (measures) {
5228
- 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;
5229
5104
  return result;
5230
5105
  }
5231
5106
  const top100dataset = dataset.slice(0, 100);
@@ -5233,7 +5108,7 @@
5233
5108
  ...prev,
5234
5109
  ...cur
5235
5110
  }), {});
5236
- 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]) && ![
5237
5112
  '',
5238
5113
  null,
5239
5114
  void 0
@@ -5241,693 +5116,277 @@
5241
5116
  id: measure,
5242
5117
  alias: measure
5243
5118
  }));
5244
- 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
+ ];
5245
5139
  return result;
5246
5140
  };
5247
- const auto2M1Group = (measures)=>{
5248
- const allMeasures = findAllMeasures(measures);
5249
- if (allMeasures.length <= 2) return allMeasures;
5250
- const groups = measures.filter((measure)=>'children' in measure);
5251
- const singleMeasures = measures.filter((measure)=>!('children' in measure));
5252
- for(let i = 0; i < singleMeasures.length; i += 2){
5253
- const group = autoMeasuresBy2M1Group_createEmptyMeasureGroup();
5254
- group.children = allMeasures.slice(i, i + 2);
5255
- groups.push(group);
5256
- }
5257
- return groups;
5258
- };
5259
- const autoMeasuresBy2M1Group_createEmptyMeasureGroup = ()=>({
5260
- id: '',
5261
- alias: '',
5262
- 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
+ };
5263
5175
  });
5264
- const dataReshapeFor1D_emptyReshapeResult = {
5265
- dataset: [],
5266
- foldInfo: {
5267
- foldMap: {},
5268
- measureId: '',
5269
- measureName: '',
5270
- measureValue: ''
5271
- },
5272
- unfoldInfo: {
5273
- groupName: '',
5274
- groupId: '',
5275
- colorItems: [],
5276
- colorIdMap: {}
5277
- }
5176
+ if (1 === scatterMeasures.length) return measureTree[0].children || [];
5177
+ return measureTree;
5278
5178
  };
5279
- const dataReshapeFor1D = (dataset, dimensions, measures, options)=>{
5280
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
5281
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D_emptyReshapeResult;
5282
- if (0 === dimensions.length) {
5283
- 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
+ ]);
5284
5191
  return {
5285
- dataset: finalDataset,
5286
- foldInfo: {
5287
- foldMap: {},
5288
- measureId: foldMeasureId,
5289
- measureName: foldMeasureName,
5290
- measureValue: foldMeasureValue
5291
- },
5292
- unfoldInfo
5293
- };
5294
- }
5295
- {
5296
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(dataset, [
5297
- ...dimensions
5298
- ], [
5299
- {
5300
- id: foldMeasureValue,
5301
- alias: i18n`指标值`
5192
+ ...advancedVSeed,
5193
+ encoding: {
5194
+ ...encoding,
5195
+ detail: mergedDetail
5302
5196
  }
5303
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5304
- return {
5305
- dataset: finalDataset,
5306
- foldInfo: {
5307
- foldMap: {},
5308
- measureId: foldMeasureId,
5309
- measureName: foldMeasureName,
5310
- measureValue: foldMeasureValue
5311
- },
5312
- unfoldInfo
5313
5197
  };
5314
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
+ };
5315
5212
  };
5316
- const reshapeTo1D = (advancedVSeed, context)=>{
5213
+ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5317
5214
  const result = {
5318
5215
  ...advancedVSeed
5319
5216
  };
5320
5217
  const { vseed } = context;
5321
5218
  const { dataset } = vseed;
5322
- const { dimensions, measures } = advancedVSeed;
5323
- if (!measures || !dimensions || !dataset) return result;
5219
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5220
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5324
5221
  if (0 === measures.length) throw new Error('measures can not be empty');
5325
- 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
+ };
5326
5254
  return {
5327
5255
  ...result,
5328
- dataset: newDatasets,
5256
+ dataset: datasets[0],
5329
5257
  datasetReshapeInfo: [
5330
5258
  {
5331
- id: '1D2M',
5259
+ id: String(chartType),
5332
5260
  index: 0,
5333
- foldInfo,
5334
- unfoldInfo
5261
+ foldInfo: foldInfoList[0],
5262
+ foldInfoList: foldInfoList,
5263
+ unfoldInfo: unfoldInfo
5335
5264
  }
5336
5265
  ]
5337
5266
  };
5338
5267
  };
5339
- const pivotReshapeTo1D = (advancedVSeed, context)=>{
5268
+ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5340
5269
  const result = {
5341
5270
  ...advancedVSeed
5342
5271
  };
5343
5272
  const { vseed } = context;
5344
5273
  const { dataset } = vseed;
5345
- const { measures } = advancedVSeed;
5346
- const dimensions = advancedVSeed.dimensions;
5347
- if (!measures || !dimensions) return result;
5274
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5275
+ if (!measures || !dimensions || !dataset || !encoding) return result;
5348
5276
  const measureGroups = [];
5349
- if (measures) measures.forEach((measure)=>{
5350
- 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);
5351
5280
  });
5352
- const newDatasets = [];
5281
+ else if (2 === depth) measureGroups.push(measures);
5282
+ const datasetList = [];
5353
5283
  const datasetReshapeInfo = [];
5354
- measureGroups.forEach((measureGroup, index)=>{
5355
- const measures = measureGroup.children;
5356
- if (!measures) return;
5357
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5358
- const groupId = measureGroup.id;
5359
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D(dataset, commonDimensions, measures, {
5360
- foldMeasureId: FoldMeasureId,
5361
- foldMeasureName: FoldMeasureName,
5362
- foldMeasureValue: FoldMeasureValue + groupId,
5363
- unfoldDimensionGroup: UnfoldDimensionGroup
5364
- });
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
+ };
5365
5318
  const reshapeInfo = {
5366
- id: groupId,
5319
+ id: `${chartType}-${index}`,
5367
5320
  index,
5368
- foldInfo,
5369
- unfoldInfo
5321
+ foldInfo: foldInfoList[0],
5322
+ foldInfoList: foldInfoList,
5323
+ unfoldInfo: unfoldInfo
5370
5324
  };
5371
- newDatasets.push(newSubDataset);
5372
5325
  datasetReshapeInfo.push(reshapeInfo);
5326
+ datasetList.push(datasets[0].map((d, index)=>({
5327
+ ...d,
5328
+ ...datasets[1]?.[index] || {}
5329
+ })));
5373
5330
  });
5374
5331
  return {
5375
5332
  ...result,
5376
- dataset: newDatasets,
5333
+ dataset: datasetList,
5377
5334
  datasetReshapeInfo: datasetReshapeInfo
5378
5335
  };
5379
5336
  };
5380
- const encodingAreaRange = (advancedVSeed)=>{
5381
- const result = {
5382
- ...advancedVSeed
5383
- };
5384
- const { datasetReshapeInfo, measures } = advancedVSeed;
5385
- if (!datasetReshapeInfo || !measures) return result;
5386
- const encoding = datasetReshapeInfo.reduce((prev, cur, index)=>{
5387
- const measure = measures[index];
5388
- if ('children' in measure) {
5389
- const m1 = measure.children?.[0];
5390
- const m2 = measure.children?.[1] || m1;
5391
- const { foldInfo, unfoldInfo } = cur;
5392
- const x = [
5393
- unfoldInfo.groupId
5394
- ];
5395
- const y = [
5396
- m1?.id,
5397
- m2?.id
5398
- ];
5399
- const group = [
5400
- unfoldInfo.groupId
5401
- ];
5402
- const color = [
5403
- foldInfo.measureName
5404
- ];
5405
- return [
5406
- ...prev,
5407
- {
5408
- x,
5409
- y,
5410
- group,
5411
- color
5412
- }
5413
- ];
5414
- }
5415
- {
5416
- const m1 = measures[index];
5417
- const m2 = measures[index + 1] || m1;
5418
- const { foldInfo, unfoldInfo } = cur;
5419
- const x = [
5420
- unfoldInfo.groupId
5421
- ];
5422
- const y = [
5423
- m1.id,
5424
- m2.id
5425
- ];
5426
- const group = [
5427
- unfoldInfo.groupId
5428
- ];
5429
- const color = [
5430
- foldInfo.measureName
5431
- ];
5432
- return [
5433
- ...prev,
5434
- {
5435
- x,
5436
- y,
5437
- group,
5438
- color
5439
- }
5440
- ];
5441
- }
5442
- }, []);
5443
- return {
5444
- ...result,
5445
- encoding
5446
- };
5447
- };
5448
- const areaRangeAdvancedPipeline = [
5337
+ const scatterAdvancedPipeline = [
5449
5338
  initAdvancedVSeed_initAdvancedVSeed,
5450
- autoMeasuresBy2M1Group,
5339
+ autoScatterMeasures,
5451
5340
  autoDimensions_autoDimensions,
5341
+ encodingForScatter,
5452
5342
  pivotAdapter([
5453
- reshapeTo1D
5343
+ reshapeWithScatterEncoding
5454
5344
  ], [
5455
- pivotReshapeTo1D
5345
+ pivotReshapeWithScatterEncoding
5456
5346
  ]),
5457
- encodingAreaRange,
5458
- sortXBandAxis,
5459
- areaConfig,
5347
+ scatterConfig,
5460
5348
  theme_theme,
5461
5349
  markStyle_markStyle,
5462
5350
  annotation_annotation
5463
5351
  ];
5464
- const series = (...args)=>{
5352
+ const initScatter = (spec, context)=>{
5465
5353
  const result = {
5466
- type: 'common',
5467
- padding: 0,
5468
- region: [
5469
- {
5470
- clip: true
5471
- }
5472
- ]
5354
+ ...spec
5473
5355
  };
5474
- return (_, context)=>{
5475
- result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
5476
- 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
+ }
5477
5385
  };
5478
5386
  };
5479
- const seriesDualAxis = (...args)=>{
5387
+ const horizontalCrosshairLine = (spec, context)=>{
5480
5388
  const result = {
5481
- type: 'common',
5482
- padding: 0,
5483
- region: [
5484
- {
5485
- clip: true
5486
- }
5487
- ]
5488
- };
5489
- const createDualContext = (context, index)=>{
5490
- const { advancedVSeed } = context;
5491
- const dataset = advancedVSeed.dataset[index];
5492
- return {
5493
- ...context,
5494
- advancedVSeed: {
5495
- ...advancedVSeed,
5496
- dataset: dataset
5497
- }
5498
- };
5499
- };
5500
- return (_, context)=>{
5501
- result.series = args.map((pipeline, index)=>{
5502
- const seriesContext = createDualContext(context, index);
5503
- return execPipeline(pipeline, seriesContext, {});
5504
- });
5505
- return result;
5506
- };
5507
- };
5508
- const initAreaRange = (spec, context)=>{
5509
- const result = {
5510
- ...spec
5511
- };
5512
- const { advancedVSeed } = context;
5513
- const { encoding } = advancedVSeed;
5514
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5515
- const { color } = advancedVSeed.config.areaRange;
5516
- result.type = 'rangeArea';
5517
- result.direction = 'vertical';
5518
- result.stack = false;
5519
- result.xField = encoding[0].x[0];
5520
- result.yField = [
5521
- encoding[0].y[0],
5522
- encoding[0].y[1]
5523
- ];
5524
- result.animation = true;
5525
- result.area = {
5526
- style: {
5527
- fill: color.colorScheme?.[0]
5528
- }
5529
- };
5530
- return result;
5531
- };
5532
- const initAreaRangeLine1 = (spec, context)=>{
5533
- const result = {
5534
- ...spec
5535
- };
5536
- const { advancedVSeed } = context;
5537
- const { encoding } = advancedVSeed;
5538
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5539
- const { color } = advancedVSeed.config.areaRange;
5540
- result.type = 'line';
5541
- result.direction = 'vertical';
5542
- result.stack = false;
5543
- result.xField = encoding[0].x[0];
5544
- result.yField = [
5545
- encoding[0].y[0]
5546
- ];
5547
- result.animation = true;
5548
- result.line = {
5549
- style: {
5550
- stroke: color.colorScheme?.[0]
5551
- }
5552
- };
5553
- result.point = {
5554
- style: {
5555
- visible: false,
5556
- fill: color.colorScheme?.[0]
5557
- }
5558
- };
5559
- return result;
5560
- };
5561
- const initAreaRangeLine2 = (spec, context)=>{
5562
- const result = {
5563
- ...spec
5564
- };
5565
- const { advancedVSeed } = context;
5566
- const { encoding } = advancedVSeed;
5567
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5568
- const { color } = advancedVSeed.config.areaRange;
5569
- result.type = 'line';
5570
- result.direction = 'vertical';
5571
- result.stack = false;
5572
- result.xField = encoding[0].x[0];
5573
- result.yField = [
5574
- encoding[0].y[1]
5575
- ];
5576
- result.animation = true;
5577
- result.line = {
5578
- style: {
5579
- stroke: color.colorScheme?.[0]
5580
- }
5581
- };
5582
- result.point = {
5583
- style: {
5584
- visible: false,
5585
- fill: color.colorScheme?.[0]
5586
- }
5587
- };
5588
- return result;
5589
- };
5590
- const tooltipDisable = (spec)=>{
5591
- const result = {
5592
- ...spec
5593
- };
5594
- result.tooltip = {
5595
- visible: false
5596
- };
5597
- return result;
5598
- };
5599
- const tooltipAreaRange = (spec, context)=>{
5600
- const result = {
5601
- ...spec
5602
- };
5603
- const { advancedVSeed } = context;
5604
- const { measures, datasetReshapeInfo, chartType, locale, encoding } = advancedVSeed;
5605
- const baseConfig = advancedVSeed.config[chartType];
5606
- const { tooltip = {
5607
- enable: true
5608
- } } = baseConfig;
5609
- const { enable } = tooltip;
5610
- const { groupName } = datasetReshapeInfo[0].unfoldInfo;
5611
- const y = encoding[0]?.y || [];
5612
- result.tooltip = {
5613
- visible: enable,
5614
- dimension: {
5615
- content: [
5616
- {
5617
- visible: true,
5618
- key: (datum)=>datum && datum[groupName] || '',
5619
- value: (datum)=>{
5620
- if (!datum) return '';
5621
- const text = y.map((id)=>{
5622
- const value = datum[id];
5623
- const measure = findMeasureById(measures, id);
5624
- if (!measure) return String(value);
5625
- const { format = {}, autoFormat = true } = measure;
5626
- if (!chunk_VCYTMP4D_n(format)) {
5627
- const formatter = createFormatter(format);
5628
- return formatter(value);
5629
- }
5630
- if (autoFormat) return autoFormatter(value, locale);
5631
- return String(value);
5632
- });
5633
- return text.join(' ~ ');
5634
- },
5635
- shapeType: 'rectRound'
5636
- },
5637
- ...y.map((id)=>{
5638
- const measure = findMeasureById(measures, id);
5639
- return {
5640
- visible: true,
5641
- key: measure?.alias || id,
5642
- value: (datum)=>{
5643
- if (!datum) return '';
5644
- const value = datum[id];
5645
- const measure = findMeasureById(measures, id);
5646
- if (!measure) return String(value);
5647
- const { format = {}, autoFormat = true } = measure;
5648
- if (!chunk_VCYTMP4D_n(format)) {
5649
- const formatter = createFormatter(format);
5650
- return formatter(value);
5651
- }
5652
- if (autoFormat) return autoFormatter(value, locale);
5653
- return String(value);
5654
- },
5655
- shapeType: 'rectRound'
5656
- };
5657
- })
5658
- ]
5659
- }
5660
- };
5661
- return result;
5662
- };
5663
- const areaRange = [
5664
- series([
5665
- initAreaRange,
5666
- areaStyle_areaStyle
5667
- ], [
5668
- initAreaRangeLine1,
5669
- lineStyle_lineStyle,
5670
- pointStyle_pointStyle,
5671
- pointStateDimensionHover,
5672
- tooltipDisable
5673
- ], [
5674
- initAreaRangeLine2,
5675
- lineStyle_lineStyle,
5676
- pointStyle_pointStyle,
5677
- pointStateDimensionHover,
5678
- tooltipDisable
5679
- ]),
5680
- datasetXY,
5681
- progressive,
5682
- background_backgroundColor,
5683
- xBand,
5684
- yLinear,
5685
- label_label,
5686
- tooltipAreaRange,
5687
- verticalCrosshairLine,
5688
- annotationPoint_annotationPoint,
5689
- annotationVerticalLine_annotationVerticalLine,
5690
- annotationHorizontalLine_annotationHorizontalLine,
5691
- annotationArea_annotationArea
5692
- ];
5693
- const pivotAreaRange = [
5694
- initPivot,
5695
- pivotGridStyle,
5696
- pivotIndicators_pivotIndicatorsAsRow,
5697
- datasetPivot,
5698
- pivotIndicators_pivotIndicators([
5699
- series([
5700
- initAreaRange,
5701
- areaStyle_areaStyle
5702
- ], [
5703
- initAreaRangeLine1,
5704
- lineStyle_lineStyle,
5705
- pointStyle_pointStyle,
5706
- pointStateDimensionHover,
5707
- tooltipDisable
5708
- ], [
5709
- initAreaRangeLine2,
5710
- lineStyle_lineStyle,
5711
- pointStyle_pointStyle,
5712
- pointStateDimensionHover,
5713
- tooltipDisable
5714
- ]),
5715
- background_backgroundColor,
5716
- datasetXY,
5717
- progressive,
5718
- xBand,
5719
- yLinear,
5720
- label_label,
5721
- tooltipAreaRange,
5722
- verticalCrosshairLine,
5723
- annotationPoint_annotationPoint,
5724
- annotationVerticalLine_annotationVerticalLine,
5725
- annotationHorizontalLine_annotationHorizontalLine,
5726
- annotationArea_annotationArea
5727
- ]),
5728
- pivotRowDimensions,
5729
- pivotColumnDimensions
5730
- ];
5731
- const areaRangeSpecPipeline = [
5732
- pivotAdapter_pivotAdapter(areaRange, pivotAreaRange)
5733
- ];
5734
- const registerAreaRange = ()=>{
5735
- Builder._advancedPipelineMap.areaRange = areaRangeAdvancedPipeline;
5736
- Builder._specPipelineMap.areaRange = areaRangeSpecPipeline;
5737
- };
5738
- const dataReshapeFor1D2M_emptyReshapeResult = {
5739
- dataset: [],
5740
- foldInfo: {
5741
- foldMap: {},
5742
- measureId: '',
5743
- measureName: '',
5744
- measureValue: ''
5745
- },
5746
- unfoldInfo: {
5747
- groupName: '',
5748
- groupId: '',
5749
- colorItems: [],
5750
- colorIdMap: {}
5751
- }
5752
- };
5753
- const dataReshapeFor1D2M = (dataset, dimensions, measures, options)=>{
5754
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
5755
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D2M_emptyReshapeResult;
5756
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures.length > 1 ? measures.slice(1) : measures, foldMeasureId, foldMeasureName, foldMeasureValue);
5757
- if (0 === dimensions.length) {
5758
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5759
- {
5760
- id: foldMeasureValue,
5761
- alias: i18n`指标值`,
5762
- location: 'dimension'
5763
- }
5764
- ], [
5765
- {
5766
- id: foldMeasureValue,
5767
- alias: i18n`指标值`
5768
- }
5769
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5770
- return {
5771
- dataset: finalDataset,
5772
- foldInfo,
5773
- unfoldInfo
5774
- };
5775
- }
5776
- {
5777
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
5778
- ...dimensions
5779
- ], [
5780
- {
5781
- id: foldMeasureValue,
5782
- alias: i18n`指标值`
5783
- }
5784
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
5785
- return {
5786
- dataset: finalDataset,
5787
- foldInfo,
5788
- unfoldInfo
5789
- };
5790
- }
5791
- };
5792
- const reshapeTo1D2M = (advancedVSeed, context)=>{
5793
- const result = {
5794
- ...advancedVSeed
5795
- };
5796
- const { vseed } = context;
5797
- const { dataset } = vseed;
5798
- const { dimensions, measures } = advancedVSeed;
5799
- if (!measures || !dimensions || !dataset) return result;
5800
- if (0 === measures.length) throw new Error('measures can not be empty');
5801
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, dimensions, measures);
5802
- return {
5803
- ...result,
5804
- dataset: newDatasets,
5805
- datasetReshapeInfo: [
5806
- {
5807
- id: '1D2M',
5808
- index: 0,
5809
- foldInfo,
5810
- unfoldInfo
5811
- }
5812
- ]
5813
- };
5814
- };
5815
- const pivotReshapeTo1D2M = (advancedVSeed, context)=>{
5816
- const result = {
5817
- ...advancedVSeed
5818
- };
5819
- const { vseed } = context;
5820
- const { dataset } = vseed;
5821
- const { measures } = advancedVSeed;
5822
- const dimensions = advancedVSeed.dimensions;
5823
- if (!measures || !dimensions) return result;
5824
- const measureGroups = [];
5825
- if (measures) measures.forEach((measure)=>{
5826
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
5827
- });
5828
- const newDatasets = [];
5829
- const datasetReshapeInfo = [];
5830
- measureGroups.forEach((measureGroup, index)=>{
5831
- const measures = measureGroup.children;
5832
- if (!measures) return;
5833
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5834
- const groupId = measureGroup.id;
5835
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D2M(dataset, commonDimensions, measures, {
5836
- foldMeasureId: FoldMeasureId,
5837
- foldMeasureName: FoldMeasureName,
5838
- foldMeasureValue: FoldMeasureValue + groupId,
5839
- unfoldDimensionGroup: UnfoldDimensionGroup
5840
- });
5841
- const reshapeInfo = {
5842
- id: groupId,
5843
- index,
5844
- foldInfo,
5845
- unfoldInfo
5846
- };
5847
- newDatasets.push(newSubDataset);
5848
- datasetReshapeInfo.push(reshapeInfo);
5849
- });
5850
- return {
5851
- ...result,
5852
- dataset: newDatasets,
5853
- datasetReshapeInfo: datasetReshapeInfo
5854
- };
5855
- };
5856
- const encodingYY = (advancedVSeed)=>{
5857
- const result = {
5858
- ...advancedVSeed
5859
- };
5860
- const { datasetReshapeInfo, measures } = advancedVSeed;
5861
- if (!datasetReshapeInfo || !measures) return result;
5862
- const firstMeasure = findFirstMeasure(measures);
5863
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
5864
- const { foldInfo, unfoldInfo } = cur;
5865
- const x = [
5866
- firstMeasure?.id
5867
- ];
5868
- const y = [
5869
- foldInfo.measureValue
5870
- ];
5871
- const group = [
5872
- unfoldInfo.groupId
5873
- ];
5874
- const color = [
5875
- unfoldInfo.groupId
5876
- ];
5877
- return [
5878
- ...prev,
5879
- {
5880
- x,
5881
- y,
5882
- group,
5883
- color
5884
- }
5885
- ];
5886
- }, []);
5887
- return {
5888
- ...result,
5889
- encoding
5890
- };
5891
- };
5892
- const scatterAdvancedPipeline = [
5893
- initAdvancedVSeed_initAdvancedVSeed,
5894
- autoMeasures_autoMeasures,
5895
- autoDimensions_autoDimensions,
5896
- pivotAdapter([
5897
- reshapeTo1D2M
5898
- ], [
5899
- pivotReshapeTo1D2M
5900
- ]),
5901
- encodingYY,
5902
- scatterConfig,
5903
- theme_theme,
5904
- markStyle_markStyle,
5905
- annotation_annotation
5906
- ];
5907
- const initScatter = (spec, context)=>{
5908
- const result = {
5909
- ...spec
5910
- };
5911
- const { advancedVSeed } = context;
5912
- const { encoding } = advancedVSeed;
5913
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
5914
- result.type = 'scatter';
5915
- result.direction = 'vertical';
5916
- result.xField = encoding[0].x[0];
5917
- result.yField = encoding[0].y[0];
5918
- result.seriesField = encoding[0].group[0];
5919
- result.padding = 0;
5920
- result.region = [
5921
- {
5922
- clip: true
5923
- }
5924
- ];
5925
- result.animation = true;
5926
- return result;
5927
- };
5928
- const horizontalCrosshairLine = (spec, context)=>{
5929
- const result = {
5930
- ...spec
5389
+ ...spec
5931
5390
  };
5932
5391
  const { advancedVSeed, vseed } = context;
5933
5392
  const { chartType } = vseed;
@@ -5973,7 +5432,7 @@
5973
5432
  initScatter,
5974
5433
  color_color,
5975
5434
  background_backgroundColor,
5976
- datasetXY,
5435
+ datasetScatter,
5977
5436
  progressive,
5978
5437
  xLinear,
5979
5438
  yLinear,
@@ -5998,7 +5457,7 @@
5998
5457
  initScatter,
5999
5458
  color_color,
6000
5459
  background_backgroundColor,
6001
- datasetXY,
5460
+ datasetScatter,
6002
5461
  progressive,
6003
5462
  xLinear,
6004
5463
  yLinear,
@@ -6024,41 +5483,163 @@
6024
5483
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
6025
5484
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
6026
5485
  };
6027
- 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)=>{
6028
5611
  const result = {
6029
5612
  ...advancedVSeed
6030
5613
  };
6031
5614
  const { vseed } = context;
6032
5615
  const { dataset } = vseed;
6033
- const { dimensions, measures } = advancedVSeed;
6034
- if (!measures || !dimensions || !dataset) return result;
5616
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5617
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6035
5618
  if (0 === measures.length) throw new Error('measures can not be empty');
6036
5619
  if (measures.length > 2) throw new Error('measures can not be more than 2');
6037
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
6038
- const datasets = [];
6039
5620
  const foldInfoList = [];
6040
5621
  const unfoldInfoList = [];
5622
+ const datasets = [];
6041
5623
  const primaryMeasures = measures[0];
6042
5624
  const secondaryMeasures = measures[1] || [];
6043
5625
  if (primaryMeasures && primaryMeasures.children) {
6044
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5626
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6045
5627
  foldMeasureValue: FoldPrimaryMeasureValue
6046
5628
  });
6047
- datasets.push(newDatasets);
5629
+ datasets.push(newDataset);
6048
5630
  foldInfoList.push(foldInfo);
6049
5631
  unfoldInfoList.push(unfoldInfo);
6050
5632
  }
6051
5633
  if (secondaryMeasures && secondaryMeasures.children) {
6052
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5634
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6053
5635
  foldMeasureValue: FoldSecondaryMeasureValue
6054
5636
  });
6055
- datasets.push(newDatasets);
5637
+ datasets.push(newDataset);
6056
5638
  foldInfoList.push(foldInfo);
6057
5639
  unfoldInfoList.push(unfoldInfo);
6058
5640
  }
6059
5641
  const unfoldInfo = {
6060
- groupName: unfoldInfoList[0].groupName,
6061
- groupId: unfoldInfoList[0].groupId,
5642
+ ...unfoldInfoList[0],
6062
5643
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6063
5644
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6064
5645
  ...prev,
@@ -6070,7 +5651,7 @@
6070
5651
  dataset: datasets,
6071
5652
  datasetReshapeInfo: [
6072
5653
  {
6073
- id: '2D2M',
5654
+ id: String(chartType),
6074
5655
  index: 0,
6075
5656
  foldInfo: foldInfoList[0],
6076
5657
  foldInfoList: foldInfoList,
@@ -6079,46 +5660,48 @@
6079
5660
  ]
6080
5661
  };
6081
5662
  };
6082
- const pivotReshapeTo2D2M = (advancedVSeed, context)=>{
5663
+ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
6083
5664
  const result = {
6084
5665
  ...advancedVSeed
6085
5666
  };
6086
5667
  const { vseed } = context;
6087
5668
  const { dataset } = vseed;
6088
- const { dimensions, measures } = advancedVSeed;
6089
- if (!measures || !dimensions || !dataset) return result;
6090
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
5669
+ const { dimensions, measures, encoding, chartType } = advancedVSeed;
5670
+ if (!measures || !dimensions || !dataset || !encoding) return result;
6091
5671
  const datasetList = [];
6092
5672
  const datasetReshapeInfo = [];
6093
- measures.forEach((measureGroup, index)=>{
6094
- 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)=>{
6095
5680
  if (0 === measures.length) throw new Error('measures can not be empty');
6096
5681
  if (measures.length > 2) throw new Error('measures can not be more than 2');
6097
- const datasets = [];
6098
5682
  const foldInfoList = [];
6099
5683
  const unfoldInfoList = [];
5684
+ const datasets = [];
6100
5685
  const primaryMeasures = measures[0];
6101
- const secondaryMeasures = measures[1] || measures[0];
5686
+ const secondaryMeasures = measures[1] || [];
6102
5687
  if (primaryMeasures && primaryMeasures.children) {
6103
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, primaryMeasures.children, {
5688
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6104
5689
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
6105
5690
  });
6106
- datasets.push(newDatasets);
5691
+ datasets.push(newDataset);
6107
5692
  foldInfoList.push(foldInfo);
6108
5693
  unfoldInfoList.push(unfoldInfo);
6109
5694
  }
6110
5695
  if (secondaryMeasures && secondaryMeasures.children) {
6111
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor2D1M(dataset, commonDimensions, secondaryMeasures.children, {
5696
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
6112
5697
  foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
6113
5698
  });
6114
- datasets.push(newDatasets);
5699
+ datasets.push(newDataset);
6115
5700
  foldInfoList.push(foldInfo);
6116
5701
  unfoldInfoList.push(unfoldInfo);
6117
5702
  }
6118
- datasetList.push(datasets.flat(2));
6119
5703
  const unfoldInfo = {
6120
- groupName: unfoldInfoList[0].groupName,
6121
- groupId: unfoldInfoList[0].groupId,
5704
+ ...unfoldInfoList[0],
6122
5705
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
6123
5706
  colorIdMap: unfoldInfoList.reduce((prev, cur)=>({
6124
5707
  ...prev,
@@ -6126,53 +5709,19 @@
6126
5709
  }), {})
6127
5710
  };
6128
5711
  const reshapeInfo = {
6129
- id: `2D2M-${index}`,
5712
+ id: `${chartType}-${index}`,
6130
5713
  index,
6131
5714
  foldInfo: foldInfoList[0],
6132
- unfoldInfo: unfoldInfo,
6133
- foldInfoList: foldInfoList
5715
+ foldInfoList: foldInfoList,
5716
+ unfoldInfo: unfoldInfo
6134
5717
  };
6135
5718
  datasetReshapeInfo.push(reshapeInfo);
5719
+ datasetList.push(datasets.flat(2));
6136
5720
  });
6137
5721
  return {
6138
5722
  ...result,
6139
5723
  dataset: datasetList,
6140
- datasetReshapeInfo
6141
- };
6142
- };
6143
- const encodingXYY = (advancedVSeed)=>{
6144
- const result = {
6145
- ...advancedVSeed
6146
- };
6147
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
6148
- if (!datasetReshapeInfo || !dimensions) return result;
6149
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
6150
- const isZeroDimension = 0 === dimensions.length;
6151
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
6152
- const { foldInfoList, unfoldInfo } = cur;
6153
- const x = [
6154
- isZeroDimension ? foldInfoList[0].measureName : xDimension?.id
6155
- ];
6156
- const y = foldInfoList.map((d)=>d.measureValue);
6157
- const group = [
6158
- unfoldInfo.groupId
6159
- ];
6160
- const color = [
6161
- foldInfoList[0].measureName
6162
- ];
6163
- return [
6164
- ...prev,
6165
- {
6166
- x,
6167
- y,
6168
- group,
6169
- color
6170
- }
6171
- ];
6172
- }, []);
6173
- return {
6174
- ...result,
6175
- encoding
5724
+ datasetReshapeInfo: datasetReshapeInfo
6176
5725
  };
6177
5726
  };
6178
5727
  const dualAxisConfig = (advancedVSeed, context)=>{
@@ -6201,125 +5750,80 @@
6201
5750
  };
6202
5751
  return result;
6203
5752
  };
6204
- const autoDualMeasures = (advancedVSeed, context)=>{
6205
- const result = {
6206
- ...advancedVSeed
6207
- };
6208
- const { vseed } = context;
6209
- const { dataset, dualMeasures, measures } = vseed;
6210
- if (!dataset) throw new Error('dataset is required');
6211
- if (0 === dataset.length) return result;
6212
- if (dualMeasures) {
6213
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
6214
- return result;
6215
- }
6216
- if (measures && measureDepth(measures) > 1) {
6217
- result.measures = measures;
6218
- return result;
6219
- }
6220
- const top100dataset = dataset.slice(0, 100);
6221
- const sample = top100dataset.reduce((prev, cur)=>({
6222
- ...prev,
6223
- ...cur
6224
- }), {});
6225
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
6226
- '',
6227
- null,
6228
- void 0
6229
- ].includes(key)).map((measure)=>({
6230
- id: measure,
6231
- alias: measure
6232
- }));
6233
- if (0 === newMeasures.length) result.measures = [];
6234
- else if (1 === newMeasures.length) result.measures = [
6235
- {
6236
- id: 'primary',
6237
- alias: 'primary',
6238
- children: newMeasures
6239
- }
6240
- ];
6241
- else if (newMeasures.length > 1) result.measures = [
6242
- {
6243
- id: 'primary',
6244
- alias: 'primary',
6245
- children: newMeasures.slice(0, 1)
6246
- },
6247
- {
6248
- id: 'secondary',
6249
- alias: 'secondary',
6250
- children: newMeasures.slice(1)
6251
- }
6252
- ];
6253
- return result;
6254
- };
6255
- const dualMeasuresToMeasureTree = (dualMeasures)=>{
6256
- const measureTree = dualMeasures.map((item, index)=>{
6257
- const { primaryMeasures, secondaryMeasures } = item;
6258
- const groupChildren = [];
6259
- let id = '';
6260
- if (primaryMeasures) {
6261
- const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
6262
- primaryMeasures
6263
- ];
6264
- const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
6265
- id += alias;
6266
- groupChildren.push({
6267
- id: `${index}-primary`,
6268
- alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
6269
- children: arrPrimaryMeasures
6270
- });
6271
- }
6272
- if (secondaryMeasures) {
6273
- const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
6274
- secondaryMeasures
6275
- ];
6276
- const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
6277
- id += alias;
6278
- groupChildren.push({
6279
- id: `${index}-secondary`,
6280
- alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
6281
- children: arrSecondaryMeasures
6282
- });
6283
- }
6284
- return {
6285
- id,
6286
- alias: id,
6287
- children: groupChildren
6288
- };
6289
- });
6290
- if (1 === dualMeasures.length) return measureTree[0].children || [];
6291
- return measureTree;
6292
- };
6293
5753
  const dualAxisAdvancedPipeline = [
6294
5754
  initAdvancedVSeed_initAdvancedVSeed,
6295
5755
  autoDualMeasures,
6296
5756
  autoDimensions_autoDimensions,
5757
+ encodingForDualAxis,
6297
5758
  pivotAdapter([
6298
- reshapeTo2D2M
5759
+ reshapeWithDualEncoding
6299
5760
  ], [
6300
- pivotReshapeTo2D2M
5761
+ pivotReshapeWithDualEncoding
6301
5762
  ]),
6302
- encodingXYY,
6303
5763
  sortXBandAxis,
6304
- sort_sortLegend,
5764
+ sortLegend_sortLegend,
6305
5765
  dualAxisConfig,
6306
5766
  theme_theme,
6307
5767
  markStyle_markStyle,
6308
5768
  annotation_annotation
6309
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
+ };
6310
5814
  const initDualAxisPrimary = (spec, context)=>{
6311
5815
  const result = {
6312
5816
  ...spec
6313
5817
  };
6314
5818
  const { advancedVSeed } = context;
6315
- const { encoding, datasetReshapeInfo } = advancedVSeed;
6316
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
6317
- result.id = `${datasetReshapeInfo[0].id}-primary-series`;
5819
+ const { datasetReshapeInfo } = advancedVSeed;
5820
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5821
+ result.id = `${id}-primary-series`;
6318
5822
  result.type = 'bar';
6319
5823
  result.direction = 'vertical';
6320
- result.xField = encoding[0].x[0];
6321
- result.yField = encoding[0].y[0];
6322
- result.seriesField = encoding[0].group[0];
5824
+ result.xField = unfoldInfo.encodingX;
5825
+ result.seriesField = unfoldInfo.encodingColorId;
5826
+ result.yField = foldInfoList?.[0].measureValue;
6323
5827
  result.animation = true;
6324
5828
  return result;
6325
5829
  };
@@ -6328,14 +5832,14 @@
6328
5832
  ...spec
6329
5833
  };
6330
5834
  const { advancedVSeed } = context;
6331
- const { encoding, datasetReshapeInfo } = advancedVSeed;
6332
- if (!encoding[0].y || !encoding[0].x || !encoding[0].group) return result;
6333
- result.id = `${datasetReshapeInfo[0].id}-secondary-series`;
5835
+ const { datasetReshapeInfo } = advancedVSeed;
5836
+ const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
5837
+ result.id = `${id}-secondary-series`;
6334
5838
  result.type = 'line';
6335
5839
  result.direction = 'vertical';
6336
- result.xField = encoding[0].x[0];
6337
- result.yField = encoding[0].y[1];
6338
- 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;
6339
5843
  result.animation = true;
6340
5844
  return result;
6341
5845
  };
@@ -6367,10 +5871,10 @@
6367
5871
  case 'columnParallel':
6368
5872
  {
6369
5873
  const columnSpec = result;
6370
- 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);
6371
5875
  else if (columnSpec.xField) columnSpec.xField = [
6372
5876
  columnSpec.xField,
6373
- datasetReshapeInfo[0].unfoldInfo.groupId
5877
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6374
5878
  ];
6375
5879
  columnSpec.type = 'bar';
6376
5880
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6423,10 +5927,10 @@
6423
5927
  case 'columnParallel':
6424
5928
  {
6425
5929
  const columnSpec = result;
6426
- 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);
6427
5931
  else if (columnSpec.xField) columnSpec.xField = [
6428
5932
  columnSpec.xField,
6429
- datasetReshapeInfo[0].unfoldInfo.groupId
5933
+ datasetReshapeInfo[0].unfoldInfo.encodingDetail
6430
5934
  ];
6431
5935
  columnSpec.type = 'bar';
6432
5936
  result.zIndex = DUAL_AXIS_CHART_COLUMN_Z_INDEX;
@@ -6453,10 +5957,11 @@
6453
5957
  };
6454
5958
  const datasetPrimary = (spec, context)=>{
6455
5959
  const { advancedVSeed, vseed } = context;
6456
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
5960
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6457
5961
  const orderMapping = analysis?.orderMapping || {};
6458
- const x = encoding[0]?.x?.[0];
6459
- const group = encoding[0]?.group?.[0];
5962
+ const { unfoldInfo } = datasetReshapeInfo[0];
5963
+ const x = unfoldInfo.encodingX;
5964
+ const colorId = unfoldInfo.encodingColorId;
6460
5965
  const id = datasetReshapeInfo[0].id;
6461
5966
  const fields = {};
6462
5967
  if (x) {
@@ -6470,14 +5975,14 @@
6470
5975
  sortIndex: 0
6471
5976
  };
6472
5977
  }
6473
- if (group) {
6474
- const order = orderMapping[group];
6475
- if (order) fields[group] = {
5978
+ if (colorId) {
5979
+ const order = orderMapping[colorId];
5980
+ if (order) fields[colorId] = {
6476
5981
  sortIndex: 0,
6477
5982
  domain: order,
6478
5983
  lockStatisticsByDomain: true
6479
5984
  };
6480
- else fields[group] = {
5985
+ else fields[colorId] = {
6481
5986
  sortIndex: 0
6482
5987
  };
6483
5988
  }
@@ -6492,10 +5997,11 @@
6492
5997
  };
6493
5998
  const datasetSecondary = (spec, context)=>{
6494
5999
  const { advancedVSeed, vseed } = context;
6495
- const { encoding, analysis, datasetReshapeInfo } = advancedVSeed;
6000
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
6496
6001
  const orderMapping = analysis?.orderMapping || {};
6497
- const x = encoding[0]?.x?.[0];
6498
- const group = encoding[0]?.group?.[0];
6002
+ const { unfoldInfo } = datasetReshapeInfo[0];
6003
+ const x = unfoldInfo.encodingX;
6004
+ const colorId = unfoldInfo.encodingColorId;
6499
6005
  const id = datasetReshapeInfo[0].id;
6500
6006
  const fields = {};
6501
6007
  if (x) {
@@ -6509,14 +6015,14 @@
6509
6015
  sortIndex: 0
6510
6016
  };
6511
6017
  }
6512
- if (group) {
6513
- const order = orderMapping[group];
6514
- if (order) fields[group] = {
6018
+ if (colorId) {
6019
+ const order = orderMapping[colorId];
6020
+ if (order) fields[colorId] = {
6515
6021
  sortIndex: 0,
6516
6022
  domain: order,
6517
6023
  lockStatisticsByDomain: true
6518
6024
  };
6519
- else fields[group] = {
6025
+ else fields[colorId] = {
6520
6026
  sortIndex: 0
6521
6027
  };
6522
6028
  }
@@ -6614,7 +6120,7 @@
6614
6120
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6615
6121
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6616
6122
  const { measureId, measureValue, measureName } = foldInfoList[0];
6617
- const { groupName } = unfoldInfo;
6123
+ const { encodingColor: colorName } = unfoldInfo;
6618
6124
  result.tooltip = {
6619
6125
  visible: enable,
6620
6126
  mark: {
@@ -6635,7 +6141,7 @@
6635
6141
  {
6636
6142
  visible: true,
6637
6143
  hasShape: true,
6638
- key: (datum)=>datum && datum[measureName || groupName] || '',
6144
+ key: (datum)=>datum && datum[measureName || colorName] || '',
6639
6145
  value: (datum)=>{
6640
6146
  if (!datum) return '';
6641
6147
  const value = datum[measureValue];
@@ -6657,7 +6163,7 @@
6657
6163
  content: [
6658
6164
  {
6659
6165
  visible: true,
6660
- key: (datum)=>datum && datum[groupName] || '',
6166
+ key: (datum)=>datum && datum[colorName] || '',
6661
6167
  value: (datum)=>{
6662
6168
  if (!datum) return '';
6663
6169
  const value = datum[measureValue];
@@ -6694,7 +6200,7 @@
6694
6200
  const foldInfoList = datasetReshapeInfo[0].foldInfoList;
6695
6201
  const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
6696
6202
  const { measureId, measureValue, measureName } = foldInfoList[1];
6697
- const { groupName } = unfoldInfo;
6203
+ const { encodingColorId } = unfoldInfo;
6698
6204
  result.tooltip = {
6699
6205
  visible: enable,
6700
6206
  mark: {
@@ -6715,7 +6221,7 @@
6715
6221
  {
6716
6222
  visible: true,
6717
6223
  hasShape: true,
6718
- key: (datum)=>datum && datum[measureName || groupName] || '',
6224
+ key: (datum)=>datum && datum[measureName || encodingColorId] || '',
6719
6225
  value: (datum)=>{
6720
6226
  if (!datum) return '';
6721
6227
  const value = datum[measureValue];
@@ -6737,7 +6243,7 @@
6737
6243
  content: [
6738
6244
  {
6739
6245
  visible: true,
6740
- key: (datum)=>datum && datum[groupName] || '',
6246
+ key: (datum)=>datum && datum[encodingColorId] || '',
6741
6247
  value: (datum)=>{
6742
6248
  if (!datum) return '';
6743
6249
  const value = datum[measureValue];
@@ -6766,16 +6272,16 @@
6766
6272
  const { advancedVSeed, vseed } = context;
6767
6273
  const { chartType } = vseed;
6768
6274
  const { locale, datasetReshapeInfo } = advancedVSeed;
6769
- const index = datasetReshapeInfo[0].index;
6275
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6770
6276
  const primaryYAxis = advancedVSeed.config?.[chartType]?.primaryYAxis;
6771
6277
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
6772
6278
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6773
6279
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6774
- if (datasetReshapeInfo[0].foldInfoList?.[0] && chunk_VCYTMP4D_n(datasetReshapeInfo[0].foldInfoList[0].foldMap)) return result;
6775
- 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`;
6776
6282
  const seriesIds = [
6777
- `${datasetReshapeInfo[0].id}-primary-series`,
6778
- `${datasetReshapeInfo[0].id}-secondary-series`
6283
+ `${reshapeInfoId}-primary-series`,
6284
+ `${reshapeInfoId}-secondary-series`
6779
6285
  ];
6780
6286
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[0];
6781
6287
  if (!result.axes) result.axes = [];
@@ -6863,20 +6369,20 @@
6863
6369
  const { advancedVSeed, vseed } = context;
6864
6370
  const { chartType } = vseed;
6865
6371
  const { locale, datasetReshapeInfo } = advancedVSeed;
6866
- const index = datasetReshapeInfo[0].index;
6372
+ const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
6867
6373
  const secondaryYAxis = advancedVSeed.config?.[chartType]?.secondaryYAxis;
6868
6374
  const yAxisConfig = Array.isArray(secondaryYAxis) ? secondaryYAxis[index] || secondaryYAxis[0] : secondaryYAxis;
6869
6375
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
6870
6376
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
6871
- if (chunk_JK3VNB42_n(datasetReshapeInfo[0].foldInfoList?.[1])) return result;
6377
+ if (chunk_JK3VNB42_n(foldInfoList?.[1])) return result;
6872
6378
  const sync = {
6873
- axisId: `${datasetReshapeInfo[0].id}-primary-axis`,
6379
+ axisId: `${reshapeInfoId}-primary-axis`,
6874
6380
  zeroAlign: true
6875
6381
  };
6876
- const id = `${datasetReshapeInfo[0].id}-secondary-axis`;
6382
+ const id = `${reshapeInfoId}-secondary-axis`;
6877
6383
  const seriesIds = [
6878
- `${datasetReshapeInfo[0].id}-primary-series`,
6879
- `${datasetReshapeInfo[0].id}-secondary-series`
6384
+ `${reshapeInfoId}-primary-series`,
6385
+ `${reshapeInfoId}-secondary-series`
6880
6386
  ];
6881
6387
  const seriesId = alignTicksConfig ? seriesIds : seriesIds[1];
6882
6388
  if (!result.axes) result.axes = [];
@@ -7017,210 +6523,74 @@
7017
6523
  areaStyle_areaStyle
7018
6524
  ], [
7019
6525
  initDualAxisSecondary,
7020
- dualChartTypeSecondary,
7021
- datasetSecondary,
7022
- labelSecondary,
7023
- tooltipSecondary,
7024
- progressive,
7025
- barStyle_barStyle,
7026
- pointStyle_pointStyle,
7027
- pointStateDimensionHover,
7028
- lineStyle_lineStyle,
7029
- areaStyle_areaStyle
7030
- ]),
7031
- xBand,
7032
- yLinearPrimary,
7033
- yLinearSecondary,
7034
- color_color,
7035
- background_backgroundColor,
7036
- verticalCrosshairRect,
7037
- annotationPoint_annotationPoint,
7038
- annotationVerticalLine_annotationVerticalLine,
7039
- annotationHorizontalLine_annotationHorizontalLine,
7040
- annotationArea_annotationArea
7041
- ]),
7042
- pivotRowDimensions,
7043
- pivotColumnDimensions,
7044
- pivotDiscreteLegend
7045
- ];
7046
- const dualAxisSpecPipeline = [
7047
- pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
7048
- ];
7049
- const registerDualAxis = ()=>{
7050
- Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
7051
- Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
7052
- };
7053
- const dataReshapeFor1D1M_emptyReshapeResult = {
7054
- dataset: [],
7055
- foldInfo: {
7056
- foldMap: {},
7057
- measureId: '',
7058
- measureName: '',
7059
- measureValue: ''
7060
- },
7061
- unfoldInfo: {
7062
- groupName: '',
7063
- groupId: '',
7064
- colorItems: [],
7065
- colorIdMap: {}
7066
- }
7067
- };
7068
- const dataReshapeFor1D1M = (dataset, dimensions, measures, options)=>{
7069
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, unfoldDimensionGroup = UnfoldDimensionGroup, unfoldDimensionGroupId = UnfoldDimensionGroupId } = options || {};
7070
- if (0 === dimensions.length && 0 === measures.length) return dataReshapeFor1D1M_emptyReshapeResult;
7071
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, foldMeasureId, foldMeasureName, foldMeasureValue);
7072
- if (0 === dimensions.length) {
7073
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, [
7074
- {
7075
- id: foldMeasureName,
7076
- alias: i18n`指标名称`,
7077
- location: 'dimension'
7078
- }
7079
- ], [
7080
- {
7081
- id: foldMeasureValue,
7082
- alias: i18n`指标值`
7083
- }
7084
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
7085
- return {
7086
- dataset: finalDataset,
7087
- foldInfo,
7088
- unfoldInfo
7089
- };
7090
- }
7091
- {
7092
- const dims = 1 === measures.length ? [
7093
- ...dimensions
7094
- ] : [
7095
- ...dimensions,
7096
- {
7097
- id: foldMeasureName,
7098
- alias: i18n`指标名称`,
7099
- location: 'dimension'
7100
- }
7101
- ];
7102
- const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dims, [
7103
- {
7104
- id: foldMeasureValue,
7105
- alias: i18n`指标值`
7106
- }
7107
- ], 0, unfoldDimensionGroup, unfoldDimensionGroupId, foldMeasureId);
7108
- return {
7109
- dataset: finalDataset,
7110
- foldInfo,
7111
- unfoldInfo
7112
- };
7113
- }
7114
- };
7115
- const reshapeTo1D1M = (advancedVSeed, context)=>{
7116
- const result = {
7117
- ...advancedVSeed
7118
- };
7119
- const { vseed } = context;
7120
- const { dataset } = vseed;
7121
- const { dimensions, measures } = advancedVSeed;
7122
- if (!measures || !dimensions || !dataset) return result;
7123
- if (0 === measures.length) throw new Error('measures can not be empty');
7124
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, dimensions, measures);
7125
- return {
7126
- ...result,
7127
- dataset: newDatasets,
7128
- datasetReshapeInfo: [
7129
- {
7130
- id: '1D1M',
7131
- index: 0,
7132
- foldInfo,
7133
- unfoldInfo
7134
- }
7135
- ]
7136
- };
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;
7137
6558
  };
7138
- const pivotReshapeTo1D1M = (advancedVSeed, context)=>{
7139
- const result = {
7140
- ...advancedVSeed
7141
- };
6559
+ const encodingForPie = (advancedVSeed, context)=>{
7142
6560
  const { vseed } = context;
7143
- const { dataset } = vseed;
7144
- const { measures } = advancedVSeed;
7145
- const dimensions = advancedVSeed.dimensions;
7146
- if (!measures || !dimensions) return result;
7147
- const measureGroups = [];
7148
- if (measures) measures.forEach((measure)=>{
7149
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
7150
- });
7151
- const newDatasets = [];
7152
- const datasetReshapeInfo = [];
7153
- measureGroups.forEach((measureGroup, index)=>{
7154
- const measures = measureGroup.children;
7155
- if (!measures) return;
7156
- const commonDimensions = dimensions.filter((dim)=>'dimension' === dim.location);
7157
- const groupId = measureGroup.id;
7158
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeFor1D1M(dataset, commonDimensions, measures, {
7159
- foldMeasureId: FoldMeasureId,
7160
- foldMeasureName: FoldMeasureName,
7161
- foldMeasureValue: FoldMeasureValue + groupId,
7162
- unfoldDimensionGroup: UnfoldDimensionGroup
7163
- });
7164
- const reshapeInfo = {
7165
- id: groupId,
7166
- index,
7167
- foldInfo,
7168
- unfoldInfo
7169
- };
7170
- newDatasets.push(newSubDataset);
7171
- datasetReshapeInfo.push(reshapeInfo);
7172
- });
7173
- return {
7174
- ...result,
7175
- dataset: newDatasets,
7176
- 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
+ }
7177
6569
  };
7178
- };
7179
- const encodingPie = (advancedVSeed)=>{
7180
- const result = {
7181
- ...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: []
7182
6578
  };
7183
- const { datasetReshapeInfo } = advancedVSeed;
7184
- if (!datasetReshapeInfo) return result;
7185
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7186
- const { foldInfo, unfoldInfo } = cur;
7187
- const radius = [
7188
- foldInfo.measureValue
7189
- ];
7190
- const angle = [
7191
- unfoldInfo.groupId
7192
- ];
7193
- const group = [
7194
- unfoldInfo.groupId
7195
- ];
7196
- const color = [
7197
- unfoldInfo.groupId
7198
- ];
7199
- return [
7200
- ...prev,
7201
- {
7202
- angle,
7203
- radius,
7204
- group,
7205
- color
7206
- }
7207
- ];
7208
- }, []);
7209
6579
  return {
7210
- ...result,
7211
- encoding
6580
+ ...advancedVSeed,
6581
+ encoding: mergedEncoding
7212
6582
  };
7213
6583
  };
7214
6584
  const pieAdvancedPipeline = [
7215
6585
  initAdvancedVSeed_initAdvancedVSeed,
7216
6586
  autoMeasures_autoMeasures,
7217
6587
  autoDimensions_autoDimensions,
6588
+ encodingForPie,
7218
6589
  pivotAdapter([
7219
- reshapeTo1D1M
6590
+ reshapeWithEncoding
7220
6591
  ], [
7221
- pivotReshapeTo1D1M
6592
+ pivotReshapeWithEncoding
7222
6593
  ]),
7223
- encodingPie,
7224
6594
  pieConfig,
7225
6595
  theme_theme,
7226
6596
  annotation_annotation
@@ -7230,15 +6600,15 @@
7230
6600
  ...spec
7231
6601
  };
7232
6602
  const { advancedVSeed } = context;
7233
- const { encoding, dataset } = advancedVSeed;
7234
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6603
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6604
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7235
6605
  const showStroke = dataset.length <= 30;
7236
6606
  result.type = 'pie';
7237
6607
  result.outerRadius = 0.8;
7238
6608
  result.innerRadius = 0;
7239
- result.valueField = encoding[0].radius[0];
7240
- result.categoryField = encoding[0].angle[0];
7241
- result.seriesField = encoding[0].group[0];
6609
+ result.valueField = foldInfo.measureValue;
6610
+ result.categoryField = unfoldInfo.encodingAngle;
6611
+ result.seriesField = unfoldInfo.encodingColorId;
7242
6612
  result.padding = 0;
7243
6613
  result.region = [
7244
6614
  {
@@ -7307,12 +6677,12 @@
7307
6677
  initAdvancedVSeed_initAdvancedVSeed,
7308
6678
  autoMeasures_autoMeasures,
7309
6679
  autoDimensions_autoDimensions,
6680
+ encodingForPie,
7310
6681
  pivotAdapter([
7311
- reshapeTo1D1M
6682
+ reshapeWithEncoding
7312
6683
  ], [
7313
- pivotReshapeTo1D1M
6684
+ pivotReshapeWithEncoding
7314
6685
  ]),
7315
- encodingPie,
7316
6686
  donutConfig,
7317
6687
  theme_theme,
7318
6688
  annotation_annotation
@@ -7322,15 +6692,15 @@
7322
6692
  ...spec
7323
6693
  };
7324
6694
  const { advancedVSeed } = context;
7325
- const { encoding, dataset } = advancedVSeed;
7326
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
6695
+ const { datasetReshapeInfo, dataset } = advancedVSeed;
6696
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7327
6697
  const showStroke = dataset.length <= 30;
7328
6698
  result.type = 'pie';
7329
6699
  result.outerRadius = 0.8;
7330
6700
  result.innerRadius = 0.8 * result.outerRadius;
7331
- result.valueField = encoding[0].radius[0];
7332
- result.categoryField = encoding[0].angle[0];
7333
- result.seriesField = encoding[0].group[0];
6701
+ result.valueField = foldInfo.measureValue;
6702
+ result.categoryField = unfoldInfo.encodingDetail;
6703
+ result.seriesField = unfoldInfo.encodingColorId;
7334
6704
  result.padding = 0;
7335
6705
  result.region = [
7336
6706
  {
@@ -7394,54 +6764,52 @@
7394
6764
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
7395
6765
  Builder._specPipelineMap.donut = donutSpecPipeline;
7396
6766
  };
7397
- const encodingRose = (advancedVSeed)=>{
7398
- const result = {
7399
- ...advancedVSeed
7400
- };
7401
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
7402
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
7403
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7404
- const is1D1M = 1 === dimensions.length && 1 === measures.length;
7405
- const isZeroDimension = 0 === dimensions.length;
7406
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7407
- const { foldInfo, unfoldInfo } = cur;
7408
- const radius = [
7409
- foldInfo.measureValue
7410
- ];
7411
- const angle = [
7412
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
7413
- ];
7414
- const group = [
7415
- is1D1M ? angleDimension?.id : unfoldInfo.groupId
7416
- ];
7417
- const color = [
7418
- 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
7419
6779
  ];
7420
- return [
7421
- ...prev,
7422
- {
7423
- angle,
7424
- radius,
7425
- group,
7426
- color
6780
+ return {
6781
+ ...advancedVSeed,
6782
+ encoding: {
6783
+ ...encoding,
6784
+ detail: mergedDetail
7427
6785
  }
7428
- ];
7429
- }, []);
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
+ };
7430
6798
  return {
7431
- ...result,
7432
- encoding
6799
+ ...advancedVSeed,
6800
+ encoding: mergedEncoding
7433
6801
  };
7434
6802
  };
7435
6803
  const roseAdvancedPipeline = [
7436
6804
  initAdvancedVSeed_initAdvancedVSeed,
7437
6805
  autoMeasures_autoMeasures,
7438
6806
  autoDimensions_autoDimensions,
6807
+ encodingForRose,
7439
6808
  pivotAdapter([
7440
- reshapeTo2D1M
6809
+ reshapeWithEncoding
7441
6810
  ], [
7442
- pivotReshapeTo2D1M
6811
+ pivotReshapeWithEncoding
7443
6812
  ]),
7444
- encodingRose,
7445
6813
  roseConfig,
7446
6814
  theme_theme,
7447
6815
  markStyle_markStyle,
@@ -7452,13 +6820,12 @@
7452
6820
  ...spec
7453
6821
  };
7454
6822
  const { advancedVSeed } = context;
7455
- const { encoding, dataset, datasetReshapeInfo } = advancedVSeed;
7456
- const { foldInfo } = datasetReshapeInfo[0];
7457
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
6823
+ const { dataset, datasetReshapeInfo } = advancedVSeed;
6824
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7458
6825
  result.type = 'rose';
7459
- result.categoryField = encoding[0].angle[0];
7460
- result.valueField = encoding[0].radius[0];
7461
- result.seriesField = encoding[0].group[0];
6826
+ result.categoryField = unfoldInfo.encodingAngle;
6827
+ result.seriesField = unfoldInfo.encodingColorId;
6828
+ result.valueField = foldInfo.measureValue;
7462
6829
  result.padding = 0;
7463
6830
  result.outerRadius = 0.9;
7464
6831
  result.innerRadius = 0;
@@ -7606,12 +6973,12 @@
7606
6973
  initAdvancedVSeed_initAdvancedVSeed,
7607
6974
  autoMeasures_autoMeasures,
7608
6975
  autoDimensions_autoDimensions,
6976
+ encodingForRose,
7609
6977
  pivotAdapter([
7610
- reshapeTo2D1M
6978
+ reshapeWithEncoding
7611
6979
  ], [
7612
- pivotReshapeTo2D1M
6980
+ pivotReshapeWithEncoding
7613
6981
  ]),
7614
- encodingRose,
7615
6982
  roseParallelConfig,
7616
6983
  theme_theme,
7617
6984
  markStyle_markStyle,
@@ -7622,16 +6989,18 @@
7622
6989
  ...spec
7623
6990
  };
7624
6991
  const { advancedVSeed } = context;
7625
- const { encoding, datasetReshapeInfo, dataset } = advancedVSeed;
6992
+ const { datasetReshapeInfo, dataset, dimensions } = advancedVSeed;
7626
6993
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7627
- if (!encoding[0].radius || !encoding[0].angle || !encoding[0].group) return result;
6994
+ const sameDimensionsMode = dimensions.length > 1 && dimensions.every((dim)=>dim.id === dimensions[0].id);
7628
6995
  result.type = 'rose';
7629
- result.categoryField = [
7630
- encoding[0].angle[0],
7631
- unfoldInfo.groupId
6996
+ result.categoryField = sameDimensionsMode ? [
6997
+ unfoldInfo.encodingAngle
6998
+ ] : [
6999
+ unfoldInfo.encodingAngle,
7000
+ unfoldInfo.encodingDetail
7632
7001
  ];
7633
- result.valueField = encoding[0].radius[0];
7634
- result.seriesField = encoding[0].group[0];
7002
+ result.valueField = foldInfo.measureValue;
7003
+ result.seriesField = unfoldInfo.encodingColorId;
7635
7004
  result.padding = 0;
7636
7005
  result.outerRadius = 0.9;
7637
7006
  result.innerRadius = 0;
@@ -7708,54 +7077,52 @@
7708
7077
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7709
7078
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7710
7079
  };
7711
- const encodingAR = (advancedVSeed)=>{
7712
- const result = {
7713
- ...advancedVSeed
7714
- };
7715
- const { datasetReshapeInfo, dimensions, measures } = advancedVSeed;
7716
- if (!datasetReshapeInfo || !dimensions || !measures) return result;
7717
- const angleDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
7718
- const isZeroDimension = 0 === dimensions.length;
7719
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7720
- const { foldInfo, unfoldInfo } = cur;
7721
- const angle = [
7722
- isZeroDimension ? foldInfo.measureName : angleDimension?.id
7723
- ];
7724
- const radius = [
7725
- foldInfo.measureValue
7726
- ];
7727
- const group = [
7728
- unfoldInfo.groupId
7729
- ];
7730
- const color = [
7731
- 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
7732
7092
  ];
7733
- return [
7734
- ...prev,
7735
- {
7736
- angle,
7737
- radius,
7738
- group,
7739
- color
7093
+ return {
7094
+ ...advancedVSeed,
7095
+ encoding: {
7096
+ ...encoding,
7097
+ detail: mergedDetail
7740
7098
  }
7741
- ];
7742
- }, []);
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
+ };
7743
7110
  return {
7744
- ...result,
7745
- encoding
7111
+ ...advancedVSeed,
7112
+ encoding: mergedEncoding
7746
7113
  };
7747
7114
  };
7748
7115
  const radarAdvancedPipeline = [
7749
7116
  initAdvancedVSeed_initAdvancedVSeed,
7750
7117
  autoMeasures_autoMeasures,
7751
7118
  autoDimensions_autoDimensions,
7119
+ encodingForRadar,
7752
7120
  pivotAdapter([
7753
- reshapeTo2D1M0Name
7121
+ reshapeWithEncoding
7754
7122
  ], [
7755
- pivotReshapeTo2D1M0Name
7123
+ pivotReshapeWithEncoding
7756
7124
  ]),
7757
- encodingAR,
7758
- sort_sortLegend,
7125
+ sortLegend_sortLegend,
7759
7126
  radarConfig,
7760
7127
  theme_theme,
7761
7128
  markStyle_markStyle,
@@ -7766,12 +7133,12 @@
7766
7133
  ...spec
7767
7134
  };
7768
7135
  const { advancedVSeed } = context;
7769
- const { encoding } = advancedVSeed;
7770
- if (!encoding[0].angle || !encoding[0].radius || !encoding[0].group) return result;
7136
+ const { datasetReshapeInfo } = advancedVSeed;
7137
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7771
7138
  result.type = 'radar';
7772
- result.angleField = encoding[0].angle[0];
7773
- result.radiusField = encoding[0].radius[0];
7774
- result.seriesField = encoding[0].group[0];
7139
+ result.angleField = unfoldInfo.encodingAngle;
7140
+ result.radiusField = foldInfo.measureValue;
7141
+ result.seriesField = unfoldInfo.encodingColorId;
7775
7142
  result.padding = 0;
7776
7143
  result.region = [
7777
7144
  {
@@ -7883,47 +7250,40 @@
7883
7250
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7884
7251
  Builder._specPipelineMap.radar = radarSpecPipeline;
7885
7252
  };
7886
- const encodingFunnel = (advancedVSeed)=>{
7887
- const result = {
7888
- ...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: []
7889
7271
  };
7890
- const { datasetReshapeInfo } = advancedVSeed;
7891
- if (!datasetReshapeInfo) return result;
7892
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
7893
- const { foldInfo, unfoldInfo } = cur;
7894
- const size = [
7895
- foldInfo.measureValue
7896
- ];
7897
- const group = [
7898
- unfoldInfo.groupId
7899
- ];
7900
- const color = [
7901
- foldInfo.measureValue
7902
- ];
7903
- return [
7904
- ...prev,
7905
- {
7906
- size,
7907
- group,
7908
- color
7909
- }
7910
- ];
7911
- }, []);
7912
7272
  return {
7913
- ...result,
7914
- encoding
7273
+ ...advancedVSeed,
7274
+ encoding: mergedEncoding
7915
7275
  };
7916
7276
  };
7917
7277
  const funnelAdvancedPipeline = [
7918
7278
  initAdvancedVSeed_initAdvancedVSeed,
7919
7279
  autoMeasures_autoMeasures,
7920
7280
  autoDimensions_autoDimensions,
7281
+ encodingForFunnel,
7921
7282
  pivotAdapter([
7922
- reshapeTo1D1M
7283
+ reshapeWithEncoding
7923
7284
  ], [
7924
- pivotReshapeTo1D1M
7285
+ pivotReshapeWithEncoding
7925
7286
  ]),
7926
- encodingFunnel,
7927
7287
  funnelConfig,
7928
7288
  theme_theme,
7929
7289
  annotation_annotation
@@ -7933,11 +7293,12 @@
7933
7293
  ...spec
7934
7294
  };
7935
7295
  const { advancedVSeed } = context;
7936
- const { encoding } = advancedVSeed;
7937
- if (!encoding[0].size || !encoding[0].group || !encoding[0].color) return result;
7296
+ const { datasetReshapeInfo } = advancedVSeed;
7297
+ const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7938
7298
  result.type = 'funnel';
7939
- result.valueField = encoding[0].size[0];
7940
- result.categoryField = encoding[0].group[0];
7299
+ result.valueField = foldInfo.measureValue;
7300
+ result.categoryField = unfoldInfo.encodingDetail;
7301
+ result.seriesField = unfoldInfo.encodingColorId;
7941
7302
  result.padding = 0;
7942
7303
  result.isTransform = true;
7943
7304
  result.shape = 'rect';
@@ -7952,7 +7313,7 @@
7952
7313
  style: {
7953
7314
  cornerRadius: 4,
7954
7315
  fill: {
7955
- field: encoding[0].color[0],
7316
+ field: unfoldInfo.encodingColorId,
7956
7317
  scale: 'color'
7957
7318
  }
7958
7319
  },
@@ -7968,99 +7329,13 @@
7968
7329
  result.animation = true;
7969
7330
  return result;
7970
7331
  };
7971
- const linearColor = (spec, context)=>{
7972
- const result = {
7973
- ...spec
7974
- };
7975
- const { advancedVSeed } = context;
7976
- const { datasetReshapeInfo, chartType, encoding } = advancedVSeed;
7977
- const baseConfig = advancedVSeed.config[chartType];
7978
- if (!baseConfig || !baseConfig.color) return result;
7979
- const { color } = baseConfig;
7980
- const { colorScheme } = color;
7981
- result.color = {
7982
- type: 'linear',
7983
- domain: [
7984
- {
7985
- dataId: datasetReshapeInfo[0].id,
7986
- fields: encoding?.[0]?.color
7987
- }
7988
- ],
7989
- range: colorScheme
7990
- };
7991
- return result;
7992
- };
7993
- const colorLegend = (spec, context)=>{
7994
- const result = {
7995
- ...spec
7996
- };
7997
- const { advancedVSeed } = context;
7998
- const { chartType } = advancedVSeed;
7999
- const baseConfig = advancedVSeed.config[chartType];
8000
- const { encoding } = advancedVSeed;
8001
- if (!encoding[0].color) return result;
8002
- if (!baseConfig || !baseConfig.legend) return result;
8003
- const { legend } = baseConfig;
8004
- const { enable, position = 'bottom' } = legend || {};
8005
- const orient = [
8006
- 'bottom',
8007
- 'bottomLeft',
8008
- 'bottomRight',
8009
- 'bl',
8010
- 'br'
8011
- ].includes(position) ? 'bottom' : [
8012
- 'top',
8013
- 'topLeft',
8014
- 'topRight',
8015
- 'tl',
8016
- 'tr'
8017
- ].includes(position) ? 'top' : [
8018
- 'left',
8019
- 'leftTop',
8020
- 'leftBottom',
8021
- 'lt',
8022
- 'lb'
8023
- ].includes(position) ? 'left' : 'right';
8024
- const legendPosition = [
8025
- 'topLeft',
8026
- 'bottomLeft',
8027
- 'leftTop',
8028
- 'rightTop',
8029
- 'lt',
8030
- 'rt',
8031
- 'tl',
8032
- 'bl'
8033
- ].includes(position) ? 'start' : [
8034
- 'topRight',
8035
- 'bottomRight',
8036
- 'leftBottom',
8037
- 'rightBottom',
8038
- 'lb',
8039
- 'rb',
8040
- 'rt',
8041
- 'br'
8042
- ].includes(position) ? 'end' : 'middle';
8043
- result.legends = {
8044
- type: 'color',
8045
- visible: enable,
8046
- orient,
8047
- position: legendPosition,
8048
- field: encoding[0].color[0],
8049
- inverse: !![
8050
- 'left',
8051
- 'right'
8052
- ].includes(orient)
8053
- };
8054
- return result;
8055
- };
8056
7332
  const funnel = [
8057
7333
  initFunnel,
8058
- linearColor,
8059
7334
  background_backgroundColor,
8060
7335
  datasetXY,
8061
7336
  label_label,
8062
7337
  tooltip_tooltip,
8063
- colorLegend,
7338
+ discreteLegend,
8064
7339
  annotationPoint_annotationPoint,
8065
7340
  annotationVerticalLine_annotationVerticalLine,
8066
7341
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8073,12 +7348,11 @@
8073
7348
  datasetPivot,
8074
7349
  pivotIndicators_pivotIndicators([
8075
7350
  initFunnel,
8076
- linearColor,
8077
7351
  background_backgroundColor,
8078
7352
  datasetXY,
8079
7353
  label_label,
8080
7354
  tooltip_tooltip,
8081
- colorLegend,
7355
+ discreteLegend,
8082
7356
  annotationPoint_annotationPoint,
8083
7357
  annotationVerticalLine_annotationVerticalLine,
8084
7358
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8094,49 +7368,42 @@
8094
7368
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
8095
7369
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
8096
7370
  };
8097
- const encodingMatrix = (advancedVSeed)=>{
8098
- const result = {
8099
- ...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: []
8100
7391
  };
8101
- const { datasetReshapeInfo, dimensions } = advancedVSeed;
8102
- if (!datasetReshapeInfo || !dimensions) return result;
8103
- const xDimension = dimensions.find((item)=>'rowDimension' !== item.location && 'columnDimension' !== item.location) || dimensions[0];
8104
- const isZeroDimension = 0 === dimensions.length;
8105
- const encoding = datasetReshapeInfo.reduce((prev, cur)=>{
8106
- const { foldInfo, unfoldInfo } = cur;
8107
- const x = [
8108
- isZeroDimension ? foldInfo.measureName : xDimension?.id
8109
- ];
8110
- const y = [
8111
- unfoldInfo.groupName
8112
- ];
8113
- const color = [
8114
- foldInfo.measureValue
8115
- ];
8116
- return [
8117
- ...prev,
8118
- {
8119
- x,
8120
- y,
8121
- color
8122
- }
8123
- ];
8124
- }, []);
8125
7392
  return {
8126
- ...result,
8127
- encoding
7393
+ ...advancedVSeed,
7394
+ encoding: mergedEncoding
8128
7395
  };
8129
7396
  };
8130
7397
  const heatmapAdvancedPipeline = [
8131
7398
  initAdvancedVSeed_initAdvancedVSeed,
8132
7399
  autoMeasures_autoMeasures,
8133
7400
  autoDimensions_autoDimensions,
7401
+ encodingForHeatmap,
8134
7402
  pivotAdapter([
8135
- reshapeTo2D1M
7403
+ reshapeWithEncoding
8136
7404
  ], [
8137
- pivotReshapeTo2D1M
7405
+ pivotReshapeWithEncoding
8138
7406
  ]),
8139
- encodingMatrix,
8140
7407
  sortXBandAxis,
8141
7408
  heatmapConfig,
8142
7409
  theme_theme,
@@ -8158,23 +7425,20 @@
8158
7425
  ...spec
8159
7426
  };
8160
7427
  const { advancedVSeed } = context;
8161
- const { encoding } = advancedVSeed;
8162
- if (!encoding[0].y || !encoding[0].x || !encoding[0].color) return result;
7428
+ const { datasetReshapeInfo } = advancedVSeed;
7429
+ const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
8163
7430
  result.type = 'heatmap';
8164
7431
  result.direction = 'vertical';
8165
- result.xField = encoding[0].x[0];
8166
- result.yField = encoding[0].y[0];
8167
- 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;
8168
7436
  result.padding = 0;
8169
7437
  result.cell = {
8170
7438
  style: {
8171
7439
  shape: 'rect',
8172
7440
  stroke: '#ffffff',
8173
- lineWidth: 1,
8174
- fill: {
8175
- field: encoding[0].color[0],
8176
- scale: 'color'
8177
- }
7441
+ lineWidth: 1
8178
7442
  }
8179
7443
  };
8180
7444
  result.axes = [
@@ -8199,12 +7463,11 @@
8199
7463
  };
8200
7464
  const heatmap = [
8201
7465
  initHeatmap,
8202
- linearColor,
8203
7466
  background_backgroundColor,
8204
7467
  datasetXY,
8205
7468
  label_label,
8206
7469
  labelColorInversion,
8207
- colorLegend,
7470
+ discreteLegend,
8208
7471
  tooltip_tooltip,
8209
7472
  pointStyle_pointStyle,
8210
7473
  pointStateDimensionHover,
@@ -8221,12 +7484,11 @@
8221
7484
  datasetPivot,
8222
7485
  pivotIndicators_pivotIndicators([
8223
7486
  initHeatmap,
8224
- linearColor,
8225
7487
  background_backgroundColor,
8226
7488
  datasetXY,
8227
7489
  label_label,
8228
7490
  labelColorInversion,
8229
- colorLegend,
7491
+ discreteLegend,
8230
7492
  tooltip_tooltip,
8231
7493
  pointStyle_pointStyle,
8232
7494
  pointStateDimensionHover,
@@ -8494,12 +7756,6 @@
8494
7756
  yAxis: linearAxis,
8495
7757
  crosshairLine
8496
7758
  },
8497
- areaRange: {
8498
- ...baseConfig,
8499
- xAxis: bandAxis,
8500
- yAxis: linearAxis,
8501
- crosshairLine
8502
- },
8503
7759
  scatter: {
8504
7760
  ...baseConfig,
8505
7761
  xAxis: {
@@ -8832,12 +8088,6 @@
8832
8088
  yAxis: linearAxis,
8833
8089
  crosshairLine: crosshairLine
8834
8090
  },
8835
- areaRange: {
8836
- ...baseConfig,
8837
- xAxis: bandAxis,
8838
- yAxis: linearAxis,
8839
- crosshairLine: crosshairLine
8840
- },
8841
8091
  scatter: {
8842
8092
  ...baseConfig,
8843
8093
  xAxis: {
@@ -8935,7 +8185,6 @@
8935
8185
  registerBarPercent();
8936
8186
  registerArea();
8937
8187
  registerAreaPercent();
8938
- registerAreaRange();
8939
8188
  registerScatter();
8940
8189
  registerDualAxis();
8941
8190
  registerPie();
@@ -12252,7 +11501,6 @@
12252
11501
  'barParallel',
12253
11502
  'area',
12254
11503
  'areaPercent',
12255
- 'areaRange',
12256
11504
  'scatter',
12257
11505
  'dualAxis',
12258
11506
  'rose',
@@ -12350,6 +11598,12 @@
12350
11598
  secondaryMeasures: schemas_array(zMeasure).or(zMeasure).optional()
12351
11599
  });
12352
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);
12353
11607
  const zFoldInfo = schemas_object({
12354
11608
  foldMap: record(schemas_string(), schemas_string().or(schemas_undefined())),
12355
11609
  measureId: schemas_string(),
@@ -12357,10 +11611,14 @@
12357
11611
  measureValue: schemas_string()
12358
11612
  });
12359
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(),
12360
11620
  colorItems: schemas_array(schemas_string()),
12361
- groupId: schemas_string(),
12362
- colorIdMap: record(schemas_string(), schemas_string()),
12363
- groupName: schemas_string()
11621
+ colorIdMap: record(schemas_string(), schemas_string())
12364
11622
  });
12365
11623
  const zDatasetReshapeInfo = schemas_array(schemas_object({
12366
11624
  id: schemas_string(),
@@ -12369,16 +11627,21 @@
12369
11627
  foldInfoList: schemas_array(zFoldInfo).nullish(),
12370
11628
  unfoldInfo: zUnfoldInfo
12371
11629
  }));
12372
- const zEncoding = schemas_array(schemas_object({
11630
+ const zEncoding = schemas_object({
12373
11631
  x: schemas_array(schemas_string()).nullish(),
12374
11632
  y: schemas_array(schemas_string()).nullish(),
12375
- color: schemas_array(schemas_string()).nullish(),
12376
- group: schemas_array(schemas_string()).nullish(),
12377
11633
  angle: schemas_array(schemas_string()).nullish(),
12378
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(),
12379
11638
  tooltip: schemas_array(schemas_string()).nullish(),
12380
- size: schemas_array(schemas_string()).nullish()
12381
- }));
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);
12382
11645
  const zXBandAxis = schemas_object({
12383
11646
  visible: schemas_boolean().default(true).nullish(),
12384
11647
  labelAutoHide: schemas_boolean().default(true).nullish(),
@@ -12641,7 +11904,6 @@
12641
11904
  crosshairLine: zCrosshairLine.nullish()
12642
11905
  });
12643
11906
  const zAreaPercentConfig = zAreaConfig;
12644
- const zAreaRangeConfig = zAreaConfig;
12645
11907
  const zDualAxisConfig = schemas_object({
12646
11908
  backgroundColor: zBackgroundColor.nullish(),
12647
11909
  label: zLabel.nullish(),
@@ -12696,7 +11958,6 @@
12696
11958
  barPercent: zBarPercentConfig.nullish(),
12697
11959
  area: zAreaConfig.nullish(),
12698
11960
  areaPercent: zAreaPercentConfig.nullish(),
12699
- areaRange: zAreaRangeConfig.nullish(),
12700
11961
  scatter: zScatterConfig.nullish(),
12701
11962
  dualAxis: zDualAxisConfig.nullish(),
12702
11963
  rose: zRoseConfig.nullish(),
@@ -13135,6 +12396,7 @@
13135
12396
  const zLine = schemas_object({
13136
12397
  chartType: literal('line'),
13137
12398
  dataset: zDataset.nullish(),
12399
+ encoding: zEncoding.nullish(),
13138
12400
  dimensions: zDimensions.nullish(),
13139
12401
  measures: zMeasureTree.nullish(),
13140
12402
  backgroundColor: zBackgroundColor.nullish(),
@@ -13159,6 +12421,7 @@
13159
12421
  const zColumn = schemas_object({
13160
12422
  chartType: literal('column'),
13161
12423
  dataset: zDataset.nullish(),
12424
+ encoding: zEncoding.nullish(),
13162
12425
  dimensions: zDimensions.nullish(),
13163
12426
  measures: zMeasureTree.nullish(),
13164
12427
  backgroundColor: zBackgroundColor.nullish(),
@@ -13181,6 +12444,7 @@
13181
12444
  const zColumnParallel = schemas_object({
13182
12445
  chartType: literal('columnParallel'),
13183
12446
  dataset: zDataset.nullish(),
12447
+ encoding: zEncoding.nullish(),
13184
12448
  dimensions: zDimensions.nullish(),
13185
12449
  measures: zMeasureTree.nullish(),
13186
12450
  backgroundColor: zBackgroundColor.nullish(),
@@ -13203,6 +12467,7 @@
13203
12467
  const zColumnPercent = schemas_object({
13204
12468
  chartType: literal('columnPercent'),
13205
12469
  dataset: zDataset.nullish(),
12470
+ encoding: zEncoding.nullish(),
13206
12471
  dimensions: zDimensions.nullish(),
13207
12472
  measures: zMeasureTree.nullish(),
13208
12473
  backgroundColor: zBackgroundColor.nullish(),
@@ -13225,6 +12490,7 @@
13225
12490
  const zBar = schemas_object({
13226
12491
  chartType: literal('bar'),
13227
12492
  dataset: zDataset.nullish(),
12493
+ encoding: zEncoding.nullish(),
13228
12494
  dimensions: zDimensions.nullish(),
13229
12495
  measures: zMeasureTree.nullish(),
13230
12496
  backgroundColor: zBackgroundColor.nullish(),
@@ -13247,6 +12513,7 @@
13247
12513
  const zBarParallel = schemas_object({
13248
12514
  chartType: literal('barParallel'),
13249
12515
  dataset: zDataset.nullish(),
12516
+ encoding: zEncoding.nullish(),
13250
12517
  dimensions: zDimensions.nullish(),
13251
12518
  measures: zMeasureTree.nullish(),
13252
12519
  backgroundColor: zBackgroundColor.nullish(),
@@ -13269,6 +12536,7 @@
13269
12536
  const zBarPercent = schemas_object({
13270
12537
  chartType: literal('barPercent'),
13271
12538
  dataset: zDataset.nullish(),
12539
+ encoding: zEncoding.nullish(),
13272
12540
  dimensions: zDimensions.nullish(),
13273
12541
  measures: zMeasureTree.nullish(),
13274
12542
  backgroundColor: zBackgroundColor.nullish(),
@@ -13291,6 +12559,7 @@
13291
12559
  const zArea = schemas_object({
13292
12560
  chartType: literal('area'),
13293
12561
  dataset: zDataset.nullish(),
12562
+ encoding: zEncoding.nullish(),
13294
12563
  dimensions: zDimensions.nullish(),
13295
12564
  measures: zMeasureTree.nullish(),
13296
12565
  backgroundColor: zBackgroundColor.nullish(),
@@ -13314,6 +12583,7 @@
13314
12583
  const zAreaPercent = schemas_object({
13315
12584
  chartType: literal('areaPercent'),
13316
12585
  dataset: zDataset.nullish(),
12586
+ encoding: zEncoding.nullish(),
13317
12587
  dimensions: zDimensions.nullish(),
13318
12588
  measures: zMeasureTree.nullish(),
13319
12589
  backgroundColor: zBackgroundColor.nullish(),
@@ -13334,31 +12604,13 @@
13334
12604
  annotationArea: schemas_array(zAnnotationArea).or(zAnnotationArea).nullish(),
13335
12605
  locale: zLocale.nullish()
13336
12606
  });
13337
- const zAreaRange = schemas_object({
13338
- chartType: literal('areaRange'),
13339
- dataset: zDataset.nullish(),
13340
- dimensions: zDimensions.nullish(),
13341
- measures: zMeasureTree.nullish(),
13342
- backgroundColor: zBackgroundColor.nullish(),
13343
- label: zLabel.nullish(),
13344
- xAxis: zXBandAxis.nullish(),
13345
- yAxis: zYLinearAxis.nullish(),
13346
- crosshairLine: zCrosshairLine.nullish(),
13347
- theme: zTheme.nullish(),
13348
- pointStyle: schemas_array(zPointStyle).or(zPointStyle).nullish(),
13349
- lineStyle: schemas_array(zLineStyle).or(zLineStyle).nullish(),
13350
- areaStyle: schemas_array(zAreaStyle).or(zAreaStyle).nullish(),
13351
- annotationPoint: schemas_array(zAnnotationPoint).or(zAnnotationPoint).nullish(),
13352
- annotationVerticalLine: schemas_array(zAnnotationVerticalLine).or(zAnnotationVerticalLine).nullish(),
13353
- annotationHorizontalLine: schemas_array(zAnnotationHorizontalLine).or(zAnnotationHorizontalLine).nullish(),
13354
- annotationArea: schemas_array(zAnnotationArea).or(zAnnotationArea).nullish(),
13355
- locale: zLocale.nullish()
13356
- });
13357
12607
  const zScatter = schemas_object({
13358
12608
  chartType: literal('scatter'),
13359
12609
  dataset: zDataset.nullish(),
12610
+ encoding: zEncoding.nullish(),
13360
12611
  dimensions: zDimensions.nullish(),
13361
12612
  measures: zMeasureTree.nullish(),
12613
+ scatterMeasures: zScatterMeasures.nullish(),
13362
12614
  backgroundColor: zBackgroundColor.nullish(),
13363
12615
  color: zColor.nullish(),
13364
12616
  label: zLabel.nullish(),
@@ -13408,6 +12660,7 @@
13408
12660
  const zRose = schemas_object({
13409
12661
  chartType: literal('rose'),
13410
12662
  dataset: zDataset.nullish(),
12663
+ encoding: zEncoding.nullish(),
13411
12664
  dimensions: zDimensions.nullish(),
13412
12665
  measures: zMeasureTree.nullish(),
13413
12666
  backgroundColor: zBackgroundColor.nullish(),
@@ -13421,6 +12674,7 @@
13421
12674
  const zRoseParallel = schemas_object({
13422
12675
  chartType: literal('roseParallel'),
13423
12676
  dataset: zDataset.nullish(),
12677
+ encoding: zEncoding.nullish(),
13424
12678
  dimensions: zDimensions.nullish(),
13425
12679
  measures: zMeasureTree.nullish(),
13426
12680
  backgroundColor: zBackgroundColor.nullish(),
@@ -13434,6 +12688,7 @@
13434
12688
  const zPie = schemas_object({
13435
12689
  chartType: literal('pie'),
13436
12690
  dataset: zDataset.nullish(),
12691
+ encoding: zEncoding.nullish(),
13437
12692
  dimensions: zDimensions.nullish(),
13438
12693
  measures: zMeasureTree.nullish(),
13439
12694
  backgroundColor: zBackgroundColor.nullish(),
@@ -13447,6 +12702,7 @@
13447
12702
  const zDonut = schemas_object({
13448
12703
  chartType: literal('donut'),
13449
12704
  dataset: zDataset.nullish(),
12705
+ encoding: zEncoding.nullish(),
13450
12706
  dimensions: zDimensions.nullish(),
13451
12707
  measures: zMeasureTree.nullish(),
13452
12708
  backgroundColor: zBackgroundColor.nullish(),
@@ -13460,6 +12716,7 @@
13460
12716
  const zRadar = schemas_object({
13461
12717
  chartType: literal('radar'),
13462
12718
  dataset: zDataset.nullish(),
12719
+ encoding: zEncoding.nullish(),
13463
12720
  dimensions: zDimensions.nullish(),
13464
12721
  measures: zMeasureTree.nullish(),
13465
12722
  backgroundColor: zBackgroundColor.nullish(),
@@ -13473,6 +12730,7 @@
13473
12730
  const zFunnel = schemas_object({
13474
12731
  chartType: literal('funnel'),
13475
12732
  dataset: zDataset.nullish(),
12733
+ encoding: zEncoding.nullish(),
13476
12734
  dimensions: zDimensions.nullish(),
13477
12735
  measures: zMeasureTree.nullish(),
13478
12736
  backgroundColor: zBackgroundColor.nullish(),
@@ -13508,7 +12766,6 @@
13508
12766
  zBarPercent,
13509
12767
  zArea,
13510
12768
  zAreaPercent,
13511
- zAreaRange,
13512
12769
  zScatter,
13513
12770
  zDualAxis,
13514
12771
  zPie,
@@ -13526,6 +12783,7 @@
13526
12783
  dimensions: zDimensionTree,
13527
12784
  measures: zMeasureTree,
13528
12785
  encoding: zEncoding,
12786
+ encodings: zEncodings,
13529
12787
  config: zConfig,
13530
12788
  analysis: zAnalysis,
13531
12789
  theme: zTheme,