@visactor/vseed 0.2.8 → 0.3.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 (413) hide show
  1. package/dist/cjs/index.cjs +1 -1
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/builder/builder/builder.d.ts +164 -128
  4. package/dist/esm/pipeline/advanced/chart/pipeline/area.js +9 -8
  5. package/dist/esm/pipeline/advanced/chart/pipeline/area.js.map +1 -1
  6. package/dist/esm/pipeline/advanced/chart/pipeline/areaPercent.js +9 -8
  7. package/dist/esm/pipeline/advanced/chart/pipeline/areaPercent.js.map +1 -1
  8. package/dist/esm/pipeline/advanced/chart/pipeline/bar.js +9 -8
  9. package/dist/esm/pipeline/advanced/chart/pipeline/bar.js.map +1 -1
  10. package/dist/esm/pipeline/advanced/chart/pipeline/barParallel.js +9 -8
  11. package/dist/esm/pipeline/advanced/chart/pipeline/barParallel.js.map +1 -1
  12. package/dist/esm/pipeline/advanced/chart/pipeline/barPercent.js +9 -8
  13. package/dist/esm/pipeline/advanced/chart/pipeline/barPercent.js.map +1 -1
  14. package/dist/esm/pipeline/advanced/chart/pipeline/boxplot.js +19 -8
  15. package/dist/esm/pipeline/advanced/chart/pipeline/boxplot.js.map +1 -1
  16. package/dist/esm/pipeline/advanced/chart/pipeline/column.js +9 -8
  17. package/dist/esm/pipeline/advanced/chart/pipeline/column.js.map +1 -1
  18. package/dist/esm/pipeline/advanced/chart/pipeline/columnParallel.js +9 -8
  19. package/dist/esm/pipeline/advanced/chart/pipeline/columnParallel.js.map +1 -1
  20. package/dist/esm/pipeline/advanced/chart/pipeline/columnPercent.js +9 -8
  21. package/dist/esm/pipeline/advanced/chart/pipeline/columnPercent.js.map +1 -1
  22. package/dist/esm/pipeline/advanced/chart/pipeline/donut.js +9 -8
  23. package/dist/esm/pipeline/advanced/chart/pipeline/donut.js.map +1 -1
  24. package/dist/esm/pipeline/advanced/chart/pipeline/dualAxis.js +1 -6
  25. package/dist/esm/pipeline/advanced/chart/pipeline/dualAxis.js.map +1 -1
  26. package/dist/esm/pipeline/advanced/chart/pipeline/funnel.js +9 -8
  27. package/dist/esm/pipeline/advanced/chart/pipeline/funnel.js.map +1 -1
  28. package/dist/esm/pipeline/advanced/chart/pipeline/heatmap.js +9 -7
  29. package/dist/esm/pipeline/advanced/chart/pipeline/heatmap.js.map +1 -1
  30. package/dist/esm/pipeline/advanced/chart/pipeline/histogram.js +15 -8
  31. package/dist/esm/pipeline/advanced/chart/pipeline/histogram.js.map +1 -1
  32. package/dist/esm/pipeline/advanced/chart/pipeline/line.js +9 -8
  33. package/dist/esm/pipeline/advanced/chart/pipeline/line.js.map +1 -1
  34. package/dist/esm/pipeline/advanced/chart/pipeline/pie.js +9 -8
  35. package/dist/esm/pipeline/advanced/chart/pipeline/pie.js.map +1 -1
  36. package/dist/esm/pipeline/advanced/chart/pipeline/radar.js +9 -8
  37. package/dist/esm/pipeline/advanced/chart/pipeline/radar.js.map +1 -1
  38. package/dist/esm/pipeline/advanced/chart/pipeline/rose.js +9 -8
  39. package/dist/esm/pipeline/advanced/chart/pipeline/rose.js.map +1 -1
  40. package/dist/esm/pipeline/advanced/chart/pipeline/roseParallel.js +9 -8
  41. package/dist/esm/pipeline/advanced/chart/pipeline/roseParallel.js.map +1 -1
  42. package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js +1 -6
  43. package/dist/esm/pipeline/advanced/chart/pipeline/scatter.js.map +1 -1
  44. package/dist/esm/pipeline/advanced/chart/pipes/config/dualAxis.js +0 -1
  45. package/dist/esm/pipeline/advanced/chart/pipes/config/dualAxis.js.map +1 -1
  46. package/dist/esm/pipeline/advanced/chart/pipes/default/defaultDimensions.js +1 -2
  47. package/dist/esm/pipeline/advanced/chart/pipes/default/defaultDimensions.js.map +1 -1
  48. package/dist/esm/pipeline/advanced/chart/pipes/default/defaultMeasures.js +2 -4
  49. package/dist/esm/pipeline/advanced/chart/pipes/default/defaultMeasures.js.map +1 -1
  50. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/pickDimensionsForReshape.js +4 -4
  51. package/dist/esm/pipeline/advanced/chart/pipes/dimensions/pickDimensionsForReshape.js.map +1 -1
  52. package/dist/esm/pipeline/advanced/chart/pipes/encoding/bar.js +5 -7
  53. package/dist/esm/pipeline/advanced/chart/pipes/encoding/bar.js.map +1 -1
  54. package/dist/esm/pipeline/advanced/chart/pipes/encoding/boxplot.js +5 -7
  55. package/dist/esm/pipeline/advanced/chart/pipes/encoding/boxplot.js.map +1 -1
  56. package/dist/esm/pipeline/advanced/chart/pipes/encoding/column.js +5 -7
  57. package/dist/esm/pipeline/advanced/chart/pipes/encoding/column.js.map +1 -1
  58. package/dist/esm/pipeline/advanced/chart/pipes/encoding/dualAxis.js +5 -15
  59. package/dist/esm/pipeline/advanced/chart/pipes/encoding/dualAxis.js.map +1 -1
  60. package/dist/esm/pipeline/advanced/chart/pipes/encoding/funnel.js +5 -7
  61. package/dist/esm/pipeline/advanced/chart/pipes/encoding/funnel.js.map +1 -1
  62. package/dist/esm/pipeline/advanced/chart/pipes/encoding/heatmap.js +4 -6
  63. package/dist/esm/pipeline/advanced/chart/pipes/encoding/heatmap.js.map +1 -1
  64. package/dist/esm/pipeline/advanced/chart/pipes/encoding/histogram.js +2 -5
  65. package/dist/esm/pipeline/advanced/chart/pipes/encoding/histogram.js.map +1 -1
  66. package/dist/esm/pipeline/advanced/chart/pipes/encoding/line.js +7 -14
  67. package/dist/esm/pipeline/advanced/chart/pipes/encoding/line.js.map +1 -1
  68. package/dist/esm/pipeline/advanced/chart/pipes/encoding/pie.js +5 -7
  69. package/dist/esm/pipeline/advanced/chart/pipes/encoding/pie.js.map +1 -1
  70. package/dist/esm/pipeline/advanced/chart/pipes/encoding/radar.js +5 -7
  71. package/dist/esm/pipeline/advanced/chart/pipes/encoding/radar.js.map +1 -1
  72. package/dist/esm/pipeline/advanced/chart/pipes/encoding/rose.js +5 -7
  73. package/dist/esm/pipeline/advanced/chart/pipes/encoding/rose.js.map +1 -1
  74. package/dist/esm/pipeline/advanced/chart/pipes/encoding/scatter.js +2 -5
  75. package/dist/esm/pipeline/advanced/chart/pipes/encoding/scatter.js.map +1 -1
  76. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasures.d.ts +1 -1
  77. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasures.js +19 -50
  78. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasures.js.map +1 -1
  79. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasuresForDualAxis.js +25 -118
  80. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasuresForDualAxis.js.map +1 -1
  81. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasuresForScatter.js +30 -115
  82. package/dist/esm/pipeline/advanced/chart/pipes/measures/buildMeasuresForScatter.js.map +1 -1
  83. package/dist/esm/pipeline/advanced/chart/pipes/measures/index.d.ts +0 -1
  84. package/dist/esm/pipeline/advanced/chart/pipes/measures/index.js +1 -2
  85. package/dist/esm/pipeline/advanced/chart/pipes/measures/utils.d.ts +12 -1
  86. package/dist/esm/pipeline/advanced/chart/pipes/measures/utils.js +12 -1
  87. package/dist/esm/pipeline/advanced/chart/pipes/measures/utils.js.map +1 -1
  88. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js +6 -12
  89. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithBoxplotEncoding.js.map +1 -1
  90. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js +25 -28
  91. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithDualEncoding.js.map +1 -1
  92. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js +6 -11
  93. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithEncoding.js.map +1 -1
  94. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js +4 -8
  95. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithHistogramEncoding.js.map +1 -1
  96. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js +23 -35
  97. package/dist/esm/pipeline/advanced/chart/pipes/reshape/pivotReshapeWithScatterEncoding.js.map +1 -1
  98. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js +3 -8
  99. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithBoxplotEncoding.js.map +1 -1
  100. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js +21 -17
  101. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithDualEncoding.js.map +1 -1
  102. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js +1 -2
  103. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithEncoding.js.map +1 -1
  104. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js +4 -9
  105. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithHistogramEncoding.js.map +1 -1
  106. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js +22 -27
  107. package/dist/esm/pipeline/advanced/chart/pipes/reshape/reshapeWithScatterEncoding.js.map +1 -1
  108. package/dist/esm/pipeline/advanced/table/pipes/default/defaultDimensions.js +3 -3
  109. package/dist/esm/pipeline/advanced/table/pipes/default/defaultDimensions.js.map +1 -1
  110. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js +3 -2
  111. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasureId.js.map +1 -1
  112. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasures.js +2 -2
  113. package/dist/esm/pipeline/advanced/table/pipes/default/defaultMeasures.js.map +1 -1
  114. package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js +5 -5
  115. package/dist/esm/pipeline/advanced/table/pipes/encoding/pivotTable.js.map +1 -1
  116. package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js +3 -5
  117. package/dist/esm/pipeline/advanced/table/pipes/reshape/reshapePivotTable.js.map +1 -1
  118. package/dist/esm/pipeline/spec/chart/pipeline/boxplot.js +3 -3
  119. package/dist/esm/pipeline/spec/chart/pipeline/boxplot.js.map +1 -1
  120. package/dist/esm/pipeline/spec/chart/pipeline/dualAxis.js +17 -45
  121. package/dist/esm/pipeline/spec/chart/pipeline/dualAxis.js.map +1 -1
  122. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js +3 -3
  123. package/dist/esm/pipeline/spec/chart/pipes/annotation/annotationPointOfDualAxis.js.map +1 -1
  124. package/dist/esm/pipeline/spec/chart/pipes/axes/histogramXLinear.js +1 -1
  125. package/dist/esm/pipeline/spec/chart/pipes/axes/histogramXLinear.js.map +1 -1
  126. package/dist/esm/pipeline/spec/chart/pipes/axes/title/defaultTitleText.d.ts +2 -2
  127. package/dist/esm/pipeline/spec/chart/pipes/axes/title/defaultTitleText.js +2 -6
  128. package/dist/esm/pipeline/spec/chart/pipes/axes/title/defaultTitleText.js.map +1 -1
  129. package/dist/esm/pipeline/spec/chart/pipes/axes/xBand.js +1 -1
  130. package/dist/esm/pipeline/spec/chart/pipes/axes/xBand.js.map +1 -1
  131. package/dist/esm/pipeline/spec/chart/pipes/axes/xLinear.js +1 -1
  132. package/dist/esm/pipeline/spec/chart/pipes/axes/xLinear.js.map +1 -1
  133. package/dist/esm/pipeline/spec/chart/pipes/axes/yBand.js +1 -1
  134. package/dist/esm/pipeline/spec/chart/pipes/axes/yBand.js.map +1 -1
  135. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinear.js +1 -1
  136. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinear.js.map +1 -1
  137. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinearPrimary.js +16 -13
  138. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinearPrimary.js.map +1 -1
  139. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinearSecondary.js +10 -13
  140. package/dist/esm/pipeline/spec/chart/pipes/axes/yLinearSecondary.js.map +1 -1
  141. package/dist/esm/pipeline/spec/chart/pipes/color/colorAdapter.js +1 -3
  142. package/dist/esm/pipeline/spec/chart/pipes/color/colorAdapter.js.map +1 -1
  143. package/dist/esm/pipeline/spec/chart/pipes/color/linearColorForDualAxis.js +4 -12
  144. package/dist/esm/pipeline/spec/chart/pipes/color/linearColorForDualAxis.js.map +1 -1
  145. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetDualAxis.d.ts +2 -3
  146. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetDualAxis.js +38 -78
  147. package/dist/esm/pipeline/spec/chart/pipes/dataset/datasetDualAxis.js.map +1 -1
  148. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.d.ts +1 -1
  149. package/dist/esm/pipeline/spec/chart/pipes/dataset/index.js +2 -2
  150. package/dist/esm/pipeline/spec/chart/pipes/dual/dualChartType.d.ts +2 -2
  151. package/dist/esm/pipeline/spec/chart/pipes/dual/dualChartType.js +16 -75
  152. package/dist/esm/pipeline/spec/chart/pipes/dual/dualChartType.js.map +1 -1
  153. package/dist/esm/pipeline/spec/chart/pipes/dual/index.d.ts +1 -1
  154. package/dist/esm/pipeline/spec/chart/pipes/dual/index.js +2 -2
  155. package/dist/esm/pipeline/spec/chart/pipes/init/dualAxis.d.ts +2 -3
  156. package/dist/esm/pipeline/spec/chart/pipes/init/dualAxis.js +16 -32
  157. package/dist/esm/pipeline/spec/chart/pipes/init/dualAxis.js.map +1 -1
  158. package/dist/esm/pipeline/spec/chart/pipes/init/index.d.ts +1 -1
  159. package/dist/esm/pipeline/spec/chart/pipes/init/index.js +2 -2
  160. package/dist/esm/pipeline/spec/chart/pipes/label/index.d.ts +2 -1
  161. package/dist/esm/pipeline/spec/chart/pipes/label/index.js +3 -2
  162. package/dist/esm/pipeline/spec/chart/pipes/label/label.d.ts +1 -1
  163. package/dist/esm/pipeline/spec/chart/pipes/label/label.js +4 -2
  164. package/dist/esm/pipeline/spec/chart/pipes/label/label.js.map +1 -1
  165. package/dist/esm/pipeline/spec/chart/pipes/label/labelBoxPlot.d.ts +2 -0
  166. package/dist/esm/pipeline/spec/chart/pipes/label/labelBoxPlot.js +21 -0
  167. package/dist/esm/pipeline/spec/chart/pipes/label/labelBoxPlot.js.map +1 -0
  168. package/dist/esm/pipeline/spec/chart/pipes/label/labelDualAxis.d.ts +2 -3
  169. package/dist/esm/pipeline/spec/chart/pipes/label/labelDualAxis.js +14 -30
  170. package/dist/esm/pipeline/spec/chart/pipes/label/labelDualAxis.js.map +1 -1
  171. package/dist/esm/pipeline/spec/chart/pipes/label/labelPie.js.map +1 -1
  172. package/dist/esm/pipeline/spec/chart/pipes/label/labelScatter.js.map +1 -1
  173. package/dist/esm/pipeline/spec/chart/pipes/markStyle/boxPlotStyle.js +7 -5
  174. package/dist/esm/pipeline/spec/chart/pipes/markStyle/boxPlotStyle.js.map +1 -1
  175. package/dist/esm/pipeline/spec/chart/pipes/markStyle/outlierStyle.js +3 -6
  176. package/dist/esm/pipeline/spec/chart/pipes/markStyle/outlierStyle.js.map +1 -1
  177. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotIndicators.js +5 -5
  178. package/dist/esm/pipeline/spec/chart/pipes/pivotChart/pivotIndicators.js.map +1 -1
  179. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js +1 -1
  180. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/ecdfRegressionLine.js.map +1 -1
  181. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.js +1 -1
  182. package/dist/esm/pipeline/spec/chart/pipes/regressionLine/kdeRegressionLine.js.map +1 -1
  183. package/dist/esm/pipeline/spec/chart/pipes/series/series.d.ts +3 -3
  184. package/dist/esm/pipeline/spec/chart/pipes/series/series.js +45 -17
  185. package/dist/esm/pipeline/spec/chart/pipes/series/series.js.map +1 -1
  186. package/dist/esm/pipeline/spec/chart/pipes/tooltip/index.d.ts +1 -1
  187. package/dist/esm/pipeline/spec/chart/pipes/tooltip/index.js +2 -2
  188. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.d.ts +2 -2
  189. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js +5 -5
  190. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltip.js.map +1 -1
  191. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js +3 -3
  192. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipBoxplot.js.map +1 -1
  193. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipDualAxis.d.ts +2 -3
  194. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipDualAxis.js +28 -62
  195. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipDualAxis.js.map +1 -1
  196. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHeatmap.d.ts +1 -1
  197. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHeatmap.js +4 -4
  198. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHeatmap.js.map +1 -1
  199. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js +1 -1
  200. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipHistogram.js.map +1 -1
  201. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipScatter.d.ts +1 -1
  202. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipScatter.js +4 -4
  203. package/dist/esm/pipeline/spec/chart/pipes/tooltip/tooltipScatter.js.map +1 -1
  204. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js +2 -2
  205. package/dist/esm/pipeline/spec/table/pipes/columns/dimensionsToColumns.js.map +1 -1
  206. package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js +2 -2
  207. package/dist/esm/pipeline/spec/table/pipes/columns/measuresToColumns.js.map +1 -1
  208. package/dist/esm/pipeline/spec/table/pipes/columns/pivotColumns.js +1 -1
  209. package/dist/esm/pipeline/spec/table/pipes/columns/pivotColumns.js.map +1 -1
  210. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js +1 -1
  211. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotDataConfig.js.map +1 -1
  212. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js +4 -4
  213. package/dist/esm/pipeline/spec/table/pipes/indicators/pivotIndicators.js.map +1 -1
  214. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js +3 -3
  215. package/dist/esm/pipeline/spec/table/pipes/rows/pivotRows.js.map +1 -1
  216. package/dist/esm/pipeline/utils/chatType.d.ts +9 -0
  217. package/dist/esm/pipeline/utils/chatType.js +33 -21
  218. package/dist/esm/pipeline/utils/chatType.js.map +1 -1
  219. package/dist/esm/pipeline/utils/measures/find.d.ts +2 -1
  220. package/dist/esm/pipeline/utils/measures/find.js +3 -13
  221. package/dist/esm/pipeline/utils/measures/find.js.map +1 -1
  222. package/dist/esm/theme/common/boxPlot.js +10 -7
  223. package/dist/esm/theme/common/boxPlot.js.map +1 -1
  224. package/dist/esm/theme/dark/dark.js +0 -4
  225. package/dist/esm/theme/dark/dark.js.map +1 -1
  226. package/dist/esm/theme/light/light.js +0 -4
  227. package/dist/esm/theme/light/light.js.map +1 -1
  228. package/dist/esm/types/advancedVSeed.d.ts +141 -72
  229. package/dist/esm/types/advancedVSeed.js +8 -6
  230. package/dist/esm/types/advancedVSeed.js.map +1 -1
  231. package/dist/esm/types/chartType/area/area.d.ts +3 -5
  232. package/dist/esm/types/chartType/area/zArea.d.ts +11 -2
  233. package/dist/esm/types/chartType/area/zArea.js +2 -2
  234. package/dist/esm/types/chartType/area/zArea.js.map +1 -1
  235. package/dist/esm/types/chartType/areaPercent/areaPercent.d.ts +3 -5
  236. package/dist/esm/types/chartType/areaPercent/zAreaPercent.d.ts +11 -2
  237. package/dist/esm/types/chartType/areaPercent/zAreaPercent.js +2 -2
  238. package/dist/esm/types/chartType/areaPercent/zAreaPercent.js.map +1 -1
  239. package/dist/esm/types/chartType/bar/bar.d.ts +4 -6
  240. package/dist/esm/types/chartType/bar/zBar.d.ts +11 -2
  241. package/dist/esm/types/chartType/bar/zBar.js +2 -2
  242. package/dist/esm/types/chartType/bar/zBar.js.map +1 -1
  243. package/dist/esm/types/chartType/barParallel/barParallel.d.ts +3 -5
  244. package/dist/esm/types/chartType/barParallel/zBarParallel.d.ts +11 -2
  245. package/dist/esm/types/chartType/barParallel/zBarParallel.js +2 -2
  246. package/dist/esm/types/chartType/barParallel/zBarParallel.js.map +1 -1
  247. package/dist/esm/types/chartType/barPercent/barPercent.d.ts +3 -3
  248. package/dist/esm/types/chartType/barPercent/zBarPercent.d.ts +11 -2
  249. package/dist/esm/types/chartType/barPercent/zBarPercent.js +2 -2
  250. package/dist/esm/types/chartType/barPercent/zBarPercent.js.map +1 -1
  251. package/dist/esm/types/chartType/boxPlot/boxPlot.d.ts +3 -5
  252. package/dist/esm/types/chartType/boxPlot/zBoxPlot.d.ts +13 -4
  253. package/dist/esm/types/chartType/boxPlot/zBoxPlot.js +2 -2
  254. package/dist/esm/types/chartType/boxPlot/zBoxPlot.js.map +1 -1
  255. package/dist/esm/types/chartType/column/column.d.ts +3 -5
  256. package/dist/esm/types/chartType/column/zColumn.d.ts +11 -2
  257. package/dist/esm/types/chartType/column/zColumn.js +2 -2
  258. package/dist/esm/types/chartType/column/zColumn.js.map +1 -1
  259. package/dist/esm/types/chartType/columnParallel/columnParallel.d.ts +4 -6
  260. package/dist/esm/types/chartType/columnParallel/zColumnParallel.d.ts +11 -2
  261. package/dist/esm/types/chartType/columnParallel/zColumnParallel.js +2 -2
  262. package/dist/esm/types/chartType/columnParallel/zColumnParallel.js.map +1 -1
  263. package/dist/esm/types/chartType/columnPercent/columnPercent.d.ts +3 -5
  264. package/dist/esm/types/chartType/columnPercent/zColumnPercent.d.ts +11 -2
  265. package/dist/esm/types/chartType/columnPercent/zColumnPercent.js +2 -2
  266. package/dist/esm/types/chartType/columnPercent/zColumnPercent.js.map +1 -1
  267. package/dist/esm/types/chartType/donut/donut.d.ts +3 -5
  268. package/dist/esm/types/chartType/donut/zDonut.d.ts +11 -2
  269. package/dist/esm/types/chartType/donut/zDonut.js +2 -2
  270. package/dist/esm/types/chartType/donut/zDonut.js.map +1 -1
  271. package/dist/esm/types/chartType/dualAxis/dualAxis.d.ts +7 -88
  272. package/dist/esm/types/chartType/dualAxis/zDualAxis.d.ts +9 -358
  273. package/dist/esm/types/chartType/dualAxis/zDualAxis.js +2 -4
  274. package/dist/esm/types/chartType/dualAxis/zDualAxis.js.map +1 -1
  275. package/dist/esm/types/chartType/funnel/funnel.d.ts +3 -5
  276. package/dist/esm/types/chartType/funnel/zFunnel.d.ts +11 -2
  277. package/dist/esm/types/chartType/funnel/zFunnel.js +2 -2
  278. package/dist/esm/types/chartType/funnel/zFunnel.js.map +1 -1
  279. package/dist/esm/types/chartType/heatmap/heatmap.d.ts +4 -6
  280. package/dist/esm/types/chartType/heatmap/zHeatmap.d.ts +11 -2
  281. package/dist/esm/types/chartType/heatmap/zHeatmap.js +2 -2
  282. package/dist/esm/types/chartType/heatmap/zHeatmap.js.map +1 -1
  283. package/dist/esm/types/chartType/histogram/histogram.d.ts +3 -5
  284. package/dist/esm/types/chartType/histogram/zHistogram.d.ts +11 -2
  285. package/dist/esm/types/chartType/histogram/zHistogram.js +2 -2
  286. package/dist/esm/types/chartType/histogram/zHistogram.js.map +1 -1
  287. package/dist/esm/types/chartType/line/line.d.ts +3 -4
  288. package/dist/esm/types/chartType/line/zLine.d.ts +11 -2
  289. package/dist/esm/types/chartType/line/zLine.js +2 -2
  290. package/dist/esm/types/chartType/line/zLine.js.map +1 -1
  291. package/dist/esm/types/chartType/pie/pie.d.ts +3 -5
  292. package/dist/esm/types/chartType/pie/zPie.d.ts +11 -2
  293. package/dist/esm/types/chartType/pie/zPie.js +2 -2
  294. package/dist/esm/types/chartType/pie/zPie.js.map +1 -1
  295. package/dist/esm/types/chartType/pivotTable/pivotTable.d.ts +4 -4
  296. package/dist/esm/types/chartType/pivotTable/zPivotTable.d.ts +9 -0
  297. package/dist/esm/types/chartType/radar/radar.d.ts +4 -6
  298. package/dist/esm/types/chartType/radar/zRadar.d.ts +11 -2
  299. package/dist/esm/types/chartType/radar/zRadar.js +2 -2
  300. package/dist/esm/types/chartType/radar/zRadar.js.map +1 -1
  301. package/dist/esm/types/chartType/rose/rose.d.ts +4 -6
  302. package/dist/esm/types/chartType/rose/zRose.d.ts +11 -2
  303. package/dist/esm/types/chartType/rose/zRose.js +2 -2
  304. package/dist/esm/types/chartType/rose/zRose.js.map +1 -1
  305. package/dist/esm/types/chartType/roseParallel/roseParallel.d.ts +4 -6
  306. package/dist/esm/types/chartType/roseParallel/zRoseParallel.d.ts +11 -2
  307. package/dist/esm/types/chartType/roseParallel/zRoseParallel.js +2 -2
  308. package/dist/esm/types/chartType/roseParallel/zRoseParallel.js.map +1 -1
  309. package/dist/esm/types/chartType/scatter/scatter.d.ts +5 -75
  310. package/dist/esm/types/chartType/scatter/zScatter.d.ts +10 -310
  311. package/dist/esm/types/chartType/scatter/zScatter.js +2 -3
  312. package/dist/esm/types/chartType/scatter/zScatter.js.map +1 -1
  313. package/dist/esm/types/chartType/table/zTable.d.ts +9 -0
  314. package/dist/esm/types/properties/chartType/index.d.ts +0 -2
  315. package/dist/esm/types/properties/chartType/index.js +1 -2
  316. package/dist/esm/types/properties/config/boxplot.d.ts +1 -1
  317. package/dist/esm/types/properties/config/config.d.ts +1 -32
  318. package/dist/esm/types/properties/config/dualAxis.d.ts +7 -31
  319. package/dist/esm/types/properties/config/dualAxis.js +0 -2
  320. package/dist/esm/types/properties/config/dualAxis.js.map +1 -1
  321. package/dist/esm/types/properties/dimensions/areaDimension.d.ts +3 -0
  322. package/dist/esm/types/properties/dimensions/barDimension.d.ts +16 -0
  323. package/dist/esm/types/properties/dimensions/{dimensions.d.ts → baseDimension.d.ts} +13 -14
  324. package/dist/esm/types/properties/dimensions/boxPlotDimension.d.ts +13 -0
  325. package/dist/esm/types/properties/dimensions/columnDimension.d.ts +19 -0
  326. package/dist/esm/types/properties/dimensions/columnDimension.js +0 -0
  327. package/dist/esm/types/properties/dimensions/donutDimension.d.ts +2 -0
  328. package/dist/esm/types/properties/dimensions/donutDimension.js +0 -0
  329. package/dist/esm/types/properties/dimensions/dualAxisDimension.d.ts +2 -0
  330. package/dist/esm/types/properties/dimensions/dualAxisDimension.js +0 -0
  331. package/dist/esm/types/properties/dimensions/funnelDimension.d.ts +2 -0
  332. package/dist/esm/types/properties/dimensions/funnelDimension.js +0 -0
  333. package/dist/esm/types/properties/dimensions/heatmapDimension.d.ts +13 -0
  334. package/dist/esm/types/properties/dimensions/heatmapDimension.js +0 -0
  335. package/dist/esm/types/properties/dimensions/histogramDimension.d.ts +13 -0
  336. package/dist/esm/types/properties/dimensions/histogramDimension.js +0 -0
  337. package/dist/esm/types/properties/dimensions/index.d.ts +16 -1
  338. package/dist/esm/types/properties/dimensions/lineDimension.d.ts +2 -0
  339. package/dist/esm/types/properties/dimensions/lineDimension.js +0 -0
  340. package/dist/esm/types/properties/dimensions/pieDimension.d.ts +13 -0
  341. package/dist/esm/types/properties/dimensions/pieDimension.js +0 -0
  342. package/dist/esm/types/properties/dimensions/radarDimension.d.ts +14 -0
  343. package/dist/esm/types/properties/dimensions/radarDimension.js +0 -0
  344. package/dist/esm/types/properties/dimensions/roseDimension.d.ts +3 -0
  345. package/dist/esm/types/properties/dimensions/roseDimension.js +0 -0
  346. package/dist/esm/types/properties/dimensions/scatterDimension.d.ts +13 -0
  347. package/dist/esm/types/properties/dimensions/scatterDimension.js +0 -0
  348. package/dist/esm/types/properties/dimensions/tableDimension.d.ts +18 -0
  349. package/dist/esm/types/properties/dimensions/tableDimension.js +0 -0
  350. package/dist/esm/types/properties/dimensions/zDimensions.d.ts +1 -1
  351. package/dist/esm/types/properties/dimensions/zDimensions.js.map +1 -1
  352. package/dist/esm/types/properties/markStyle/boxPlotStyle.d.ts +5 -5
  353. package/dist/esm/types/properties/markStyle/boxPlotStyle.js +2 -2
  354. package/dist/esm/types/properties/markStyle/boxPlotStyle.js.map +1 -1
  355. package/dist/esm/types/properties/markStyle/markStyle.d.ts +2 -2
  356. package/dist/esm/types/properties/measures/areaMeasure.d.ts +2 -0
  357. package/dist/esm/types/properties/measures/areaMeasure.js +0 -0
  358. package/dist/esm/types/properties/measures/barMeasure.d.ts +14 -0
  359. package/dist/esm/types/properties/measures/barMeasure.js +0 -0
  360. package/dist/esm/types/properties/measures/{measures.d.ts → baseMeasure.d.ts} +29 -13
  361. package/dist/esm/types/properties/measures/baseMeasure.js +0 -0
  362. package/dist/esm/types/properties/measures/boxPlotMeasure.d.ts +18 -0
  363. package/dist/esm/types/properties/measures/boxPlotMeasure.js +0 -0
  364. package/dist/esm/types/properties/measures/columnMeasure.d.ts +14 -0
  365. package/dist/esm/types/properties/measures/columnMeasure.js +0 -0
  366. package/dist/esm/types/properties/measures/dualAxisMeasure.d.ts +23 -0
  367. package/dist/esm/types/properties/measures/dualAxisMeasure.js +0 -0
  368. package/dist/esm/types/properties/measures/funnelMeasure.d.ts +11 -0
  369. package/dist/esm/types/properties/measures/funnelMeasure.js +0 -0
  370. package/dist/esm/types/properties/measures/heatmapMeasure.d.ts +10 -0
  371. package/dist/esm/types/properties/measures/heatmapMeasure.js +0 -0
  372. package/dist/esm/types/properties/measures/histogramMeasure.d.ts +13 -0
  373. package/dist/esm/types/properties/measures/histogramMeasure.js +0 -0
  374. package/dist/esm/types/properties/measures/index.d.ts +15 -4
  375. package/dist/esm/types/properties/measures/index.js +0 -1
  376. package/dist/esm/types/properties/measures/lineMeasure.d.ts +2 -0
  377. package/dist/esm/types/properties/measures/lineMeasure.js +0 -0
  378. package/dist/esm/types/properties/measures/measureTree.d.ts +17 -0
  379. package/dist/esm/types/properties/measures/measureTree.js +0 -0
  380. package/dist/esm/types/properties/measures/pieMeasure.d.ts +12 -0
  381. package/dist/esm/types/properties/measures/pieMeasure.js +0 -0
  382. package/dist/esm/types/properties/measures/radarMeasure.d.ts +13 -0
  383. package/dist/esm/types/properties/measures/radarMeasure.js +0 -0
  384. package/dist/esm/types/properties/measures/scatterMeasure.d.ts +13 -0
  385. package/dist/esm/types/properties/measures/scatterMeasure.js +0 -0
  386. package/dist/esm/types/properties/measures/tableMeasure.d.ts +8 -0
  387. package/dist/esm/types/properties/measures/tableMeasure.js +0 -0
  388. package/dist/esm/types/properties/measures/zDualMeasures.d.ts +154 -612
  389. package/dist/esm/types/properties/measures/zDualMeasures.js +15 -10
  390. package/dist/esm/types/properties/measures/zDualMeasures.js.map +1 -1
  391. package/dist/esm/types/properties/measures/zMeasures.d.ts +28 -1
  392. package/dist/esm/types/properties/measures/zMeasures.js +10 -1
  393. package/dist/esm/types/properties/measures/zMeasures.js.map +1 -1
  394. package/dist/esm/types/properties/theme/customTheme.d.ts +2 -64
  395. package/dist/esm/types/zVseed.d.ts +237 -706
  396. package/dist/umd/index.js +899 -1368
  397. package/dist/umd/index.js.map +1 -1
  398. package/package.json +2 -2
  399. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.d.ts +0 -2
  400. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.js +0 -14
  401. package/dist/esm/pipeline/advanced/chart/pipes/measures/pickMeasuresForReshape.js.map +0 -1
  402. package/dist/esm/types/properties/chartType/dualChartType.d.ts +0 -18
  403. package/dist/esm/types/properties/chartType/dualChartType.js +0 -20
  404. package/dist/esm/types/properties/chartType/dualChartType.js.map +0 -1
  405. package/dist/esm/types/properties/measures/dualMeasures.d.ts +0 -7
  406. package/dist/esm/types/properties/measures/scatterMeasures.d.ts +0 -7
  407. package/dist/esm/types/properties/measures/zScatterMeasures.d.ts +0 -619
  408. package/dist/esm/types/properties/measures/zScatterMeasures.js +0 -17
  409. package/dist/esm/types/properties/measures/zScatterMeasures.js.map +0 -1
  410. /package/dist/esm/types/properties/dimensions/{dimensions.js → areaDimension.js} +0 -0
  411. /package/dist/esm/types/properties/{measures/dualMeasures.js → dimensions/barDimension.js} +0 -0
  412. /package/dist/esm/types/properties/{measures/measures.js → dimensions/baseDimension.js} +0 -0
  413. /package/dist/esm/types/properties/{measures/scatterMeasures.js → dimensions/boxPlotDimension.js} +0 -0
package/dist/umd/index.js CHANGED
@@ -115,7 +115,6 @@
115
115
  zMeasures: ()=>zMeasures,
116
116
  zDualAxis: ()=>zDualAxis,
117
117
  FoldMeasureName: ()=>FoldMeasureName,
118
- zDualChartType: ()=>zDualChartType,
119
118
  darkTheme: ()=>darkTheme,
120
119
  isVTable: ()=>isVTable,
121
120
  BoxPlotPivotIndicator: ()=>BoxPlotPivotIndicator,
@@ -140,9 +139,9 @@
140
139
  findMeasureById: ()=>findMeasureById,
141
140
  AngleEncoding: ()=>AngleEncoding,
142
141
  areaPercentAdvancedPipeline: ()=>areaPercentAdvancedPipeline,
143
- findTreeNodesBy: ()=>findTreeNodesBy,
144
- zAreaPercentConfig: ()=>zAreaPercentConfig,
145
142
  zBackgroundColor: ()=>zBackgroundColor,
143
+ zAreaPercentConfig: ()=>zAreaPercentConfig,
144
+ findTreeNodesBy: ()=>findTreeNodesBy,
146
145
  MeasureId: ()=>MeasureId,
147
146
  registerRadar: ()=>registerRadar,
148
147
  zLocale: ()=>zLocale,
@@ -163,14 +162,14 @@
163
162
  zColumnPercent: ()=>zColumnPercent,
164
163
  foldMeasures: ()=>foldMeasures,
165
164
  isPivotTable: ()=>isPivotTable,
166
- zDimensionEncoding: ()=>zDimensionEncoding,
167
165
  registerPie: ()=>registerPie,
166
+ zDimensionEncoding: ()=>zDimensionEncoding,
168
167
  LowerWhisker: ()=>LowerWhisker,
169
168
  zEcdfRegressionLine: ()=>zEcdfRegressionLine,
170
169
  zBarParallelConfig: ()=>zBarParallelConfig,
170
+ lineAdvancedPipeline: ()=>lineAdvancedPipeline,
171
171
  AXIS_LABEL_SPACE: ()=>8,
172
172
  FoldMeasureValue: ()=>FoldMeasureValue,
173
- lineAdvancedPipeline: ()=>lineAdvancedPipeline,
174
173
  zFunnel: ()=>zFunnel,
175
174
  ANNOTATION_Z_INDEX: ()=>1000,
176
175
  Q3MeasureValue: ()=>"__Q3__",
@@ -198,7 +197,6 @@
198
197
  zLinearRegressionLine: ()=>zLinearRegressionLine,
199
198
  zRoseConfig: ()=>zRoseConfig,
200
199
  zBodyCellStyle: ()=>zBodyCellStyle,
201
- zScatterMeasures: ()=>zScatterMeasures,
202
200
  zAnnotation: ()=>zAnnotation,
203
201
  selector: ()=>selector_selector,
204
202
  zKdeRegressionLine: ()=>zKdeRegressionLine,
@@ -230,7 +228,6 @@
230
228
  registerAreaPercent: ()=>registerAreaPercent,
231
229
  zMeasureEncoding: ()=>zMeasureEncoding,
232
230
  zBarPercent: ()=>zBarPercent,
233
- zScatterMeasure: ()=>zScatterMeasure,
234
231
  zTheme: ()=>zTheme,
235
232
  zDatum: ()=>zDatum,
236
233
  barAdvancedPipeline: ()=>barAdvancedPipeline,
@@ -239,9 +236,10 @@
239
236
  registerHeatmap: ()=>registerHeatmap,
240
237
  isBarPercent: ()=>isBarPercent,
241
238
  checkVSeed: ()=>checkVSeed,
242
- zPivotTable: ()=>zPivotTable,
239
+ flatReshapeMeasures: ()=>flatReshapeMeasures,
243
240
  registerLightTheme: ()=>registerLightTheme,
244
241
  selectByDmension: ()=>selectByDmension,
242
+ zPivotTable: ()=>zPivotTable,
245
243
  isPartialDatumSelector: ()=>isPartialDatumSelector,
246
244
  isDimensionGroup: ()=>isDimensionGroup,
247
245
  registerPivotTable: ()=>registerPivotTable,
@@ -312,7 +310,9 @@
312
310
  ColorEncoding: ()=>ColorEncoding,
313
311
  measureDepth: ()=>measureDepth,
314
312
  BinCountMeasureId: ()=>BinCountMeasureId,
313
+ DEFAULT_DUAL_CHART_TYPE: ()=>DEFAULT_DUAL_CHART_TYPE,
315
314
  zAdvancedVSeed: ()=>zAdvancedVSeed,
315
+ isRectungularCoordinate: ()=>isRectungularCoordinate,
316
316
  zAreaPercent: ()=>zAreaPercent,
317
317
  isValueSelector: ()=>isValueSelector,
318
318
  donutAdvancedPipeline: ()=>donutAdvancedPipeline,
@@ -320,12 +320,13 @@
320
320
  zScatterConfig: ()=>zScatterConfig,
321
321
  zTooltip: ()=>zTooltip,
322
322
  isBarLikeChart: ()=>isBarLikeChart,
323
+ isDualAxisChartType: ()=>isDualAxisChartType,
323
324
  barParallelAdvancedPipeline: ()=>barParallelAdvancedPipeline,
324
- barPercentSpecPipeline: ()=>barPercentSpecPipeline,
325
325
  zBarPercentConfig: ()=>zBarPercentConfig,
326
- deleteMeasureTreeByCallback: ()=>deleteMeasureTreeByCallback,
326
+ barPercentSpecPipeline: ()=>barPercentSpecPipeline,
327
327
  dataReshapeByEncoding: ()=>dataReshapeByEncoding,
328
328
  lineSpecPipeline: ()=>lineSpecPipeline,
329
+ deleteMeasureTreeByCallback: ()=>deleteMeasureTreeByCallback,
329
330
  zDimensionGroup: ()=>zDimensionGroup,
330
331
  isPositionMeasure: ()=>isPositionMeasure
331
332
  });
@@ -535,80 +536,20 @@
535
536
  'tooltip',
536
537
  'detail'
537
538
  ].includes(measure.encoding);
538
- const preorderTraverse = (tree, callback, childrenKey = 'children')=>{
539
- if (!tree || 0 === tree.length) return;
540
- const stack = [
541
- ...tree
542
- ].reverse();
543
- while(stack.length > 0){
544
- const node = stack.pop();
545
- const stop = callback(node);
546
- if (true === stop) return;
547
- const children = node[childrenKey];
548
- if (Array.isArray(children) && children.length > 0) for(let i = children.length - 1; i >= 0; i--){
549
- const child = children[i];
550
- stack.push(child);
551
- }
552
- }
553
- };
554
- const findTreeNodesBy = (nodes = [], callback, childrenKey = 'children')=>{
555
- if (!nodes) return [];
556
- const result = [];
557
- preorderTraverse(nodes, (node)=>{
558
- if (!(childrenKey in node)) {
559
- if (callback(node)) result.push(node);
560
- }
561
- return false;
562
- });
563
- return result;
564
- };
565
- const measureDepth = (measures = [])=>{
566
- if (!measures) return 0;
567
- let depth = 1;
568
- preorderTraverse(measures, (node)=>{
569
- if ('children' in node) depth = Math.max(depth, 1 + measureDepth(node.children));
570
- return false;
571
- });
572
- return depth;
573
- };
574
- const isMeasureTreeWithChildren = (measures)=>{
575
- if (!measures) return false;
576
- return measures.some((measure)=>'children' in measure);
577
- };
578
539
  const isMeasureTreeWithParentId = (measures)=>{
579
540
  if (!measures) return false;
580
541
  return measures.some((measure)=>'parentId' in measure);
581
542
  };
582
- const normalizeMeasureTree = (measures)=>{
583
- const createEmptyMeasureGroup = ()=>({
584
- id: 'group',
585
- alias: '',
586
- children: []
587
- });
588
- let currentGroup = createEmptyMeasureGroup();
589
- const measureGroups = [];
590
- for (const measure of measures)if ('children' in measure) {
591
- if (currentGroup.children?.length) {
592
- currentGroup.id = [
593
- currentGroup.id,
594
- ...currentGroup.children.map((item)=>item.id)
595
- ].join('-');
596
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
597
- measureGroups.push(currentGroup);
598
- currentGroup = createEmptyMeasureGroup();
599
- }
600
- measureGroups.push(measure);
601
- } else currentGroup.children?.push(measure);
602
- if (currentGroup.children?.length) {
603
- currentGroup.id = [
604
- currentGroup.id,
605
- ...currentGroup.children.map((item)=>item.id)
606
- ].join('-');
607
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
608
- measureGroups.push(currentGroup);
609
- currentGroup = createEmptyMeasureGroup();
543
+ const isCommonMeasureEncoding = (encoding)=>[
544
+ 'color',
545
+ 'label',
546
+ 'tooltip'
547
+ ].includes(encoding);
548
+ const ensureParentIdInitialized = (parentId, measuresByView, parentIds)=>{
549
+ if (!measuresByView[parentId]) {
550
+ measuresByView[parentId] = [];
551
+ parentIds.push(parentId);
610
552
  }
611
- return measureGroups;
612
553
  };
613
554
  const DEFAULT_PARENT_ID = '__DefaultParentId__';
614
555
  const ChartTypeEnum = {
@@ -662,28 +603,40 @@
662
603
  const parentIds = vseed.measures?.filter(isPositionMeasure).map((measure)=>measure.parentId || DEFAULT_PARENT_ID);
663
604
  return parentIds && chunk_QJLMYOTX_i(parentIds).length > 1;
664
605
  }
665
- if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
666
- if ('scatter' === vseed.chartType) {
667
- if (isMeasureTreeWithChildren(vseed.measures)) {
668
- const depth = measureDepth(vseed.measures);
669
- return 3 === depth;
670
- }
671
- if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
672
- return false;
673
- }
674
- if ('dualAxis' === vseed.chartType) {
675
- if (isMeasureTreeWithChildren(vseed.measures)) {
676
- const depth = measureDepth(vseed.measures);
677
- return 3 === depth;
678
- }
679
- if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
680
- }
681
- return false;
682
- }
683
606
  const { measures = [] } = vseed;
684
607
  const hasMeasureGroup = measures && measures.some((measure)=>measure && measure.children);
685
608
  return hasMeasureGroup;
686
609
  };
610
+ const isRectungularCoordinate = (chartType)=>[
611
+ ChartTypeEnum.Bar,
612
+ ChartTypeEnum.BarPercent,
613
+ ChartTypeEnum.BarParallel,
614
+ ChartTypeEnum.Column,
615
+ ChartTypeEnum.ColumnPercent,
616
+ ChartTypeEnum.ColumnParallel,
617
+ ChartTypeEnum.Line,
618
+ ChartTypeEnum.Area,
619
+ ChartTypeEnum.AreaPercent,
620
+ ChartTypeEnum.DualAxis,
621
+ ChartTypeEnum.Boxplot,
622
+ ChartTypeEnum.DualAxis,
623
+ ChartTypeEnum.Scatter,
624
+ ChartTypeEnum.Heatmap,
625
+ ChartTypeEnum.Boxplot
626
+ ].includes(chartType);
627
+ const DEFAULT_DUAL_CHART_TYPE = {
628
+ primary: 'column',
629
+ secondary: 'line'
630
+ };
631
+ const isDualAxisChartType = (chartType)=>chartType && [
632
+ 'column',
633
+ 'columnParallel',
634
+ 'columnPercent',
635
+ 'line',
636
+ 'area',
637
+ 'areaPercent',
638
+ 'scatter'
639
+ ].includes(chartType);
687
640
  const getColorItems = (builder)=>{
688
641
  const advancedVSeed = builder.advancedVSeed;
689
642
  if (!advancedVSeed || isTable(builder.vseed) || isPivotTable(builder.vseed)) return [];
@@ -827,6 +780,33 @@
827
780
  for (let [e, c] of n.entries())r[e] = chunk_BCBB46UE_u(c, o, t);
828
781
  return r;
829
782
  }
783
+ const preorderTraverse = (tree, callback, childrenKey = 'children')=>{
784
+ if (!tree || 0 === tree.length) return;
785
+ const stack = [
786
+ ...tree
787
+ ].reverse();
788
+ while(stack.length > 0){
789
+ const node = stack.pop();
790
+ const stop = callback(node);
791
+ if (true === stop) return;
792
+ const children = node[childrenKey];
793
+ if (Array.isArray(children) && children.length > 0) for(let i = children.length - 1; i >= 0; i--){
794
+ const child = children[i];
795
+ stack.push(child);
796
+ }
797
+ }
798
+ };
799
+ const findTreeNodesBy = (nodes = [], callback, childrenKey = 'children')=>{
800
+ if (!nodes) return [];
801
+ const result = [];
802
+ preorderTraverse(nodes, (node)=>{
803
+ if (!(childrenKey in node)) {
804
+ if (callback(node)) result.push(node);
805
+ }
806
+ return false;
807
+ });
808
+ return result;
809
+ };
830
810
  const defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
831
811
  const { vseed } = context;
832
812
  const { measures, dataset } = vseed;
@@ -838,7 +818,7 @@
838
818
  });
839
819
  return {
840
820
  ...advancedVSeed,
841
- measures: clonedMeasures
821
+ measureTree: clonedMeasures
842
822
  };
843
823
  }
844
824
  const top100dataset = dataset.slice(0, 100);
@@ -856,7 +836,7 @@
856
836
  }));
857
837
  return {
858
838
  ...advancedVSeed,
859
- measures: defaultMeasures
839
+ measureTree: defaultMeasures
860
840
  };
861
841
  };
862
842
  const isDimension = (dimension)=>!('children' in dimension);
@@ -896,18 +876,8 @@
896
876
  });
897
877
  return result;
898
878
  };
899
- const hasMultipleMeasureInSingleView = (measures = [])=>{
900
- if (measures.every((m)=>!('children' in m))) return measures.length > 1;
901
- let found = false;
902
- preorderTraverse(measures, (node)=>{
903
- if (node.children && node.children.length > 1) {
904
- found = true;
905
- return true;
906
- }
907
- return false;
908
- });
909
- return found;
910
- };
879
+ const hasMultipleMeasureInSingleView = (reshapeMeasures)=>reshapeMeasures.some((m)=>m.length > 1);
880
+ const flatReshapeMeasures = (reshapeMeasures)=>reshapeMeasures.flat();
911
881
  const defaultDimensions = (advancedVSeed, context)=>{
912
882
  const result = {
913
883
  ...advancedVSeed
@@ -922,10 +892,10 @@
922
892
  });
923
893
  return {
924
894
  ...advancedVSeed,
925
- dimensions: clonedDimensions
895
+ dimensionTree: clonedDimensions
926
896
  };
927
897
  }
928
- const measures = findAllMeasures(advancedVSeed.measures);
898
+ const measures = findAllMeasures(advancedVSeed.measureTree);
929
899
  const top100dataset = dataset.slice(0, 100);
930
900
  const sample = top100dataset.reduce((prev, cur)=>({
931
901
  ...prev,
@@ -941,7 +911,7 @@
941
911
  }));
942
912
  return {
943
913
  ...result,
944
- dimensions: newDimensions
914
+ dimensionTree: newDimensions
945
915
  };
946
916
  };
947
917
  function chunk_2T7K3PFL_i(...e) {
@@ -1129,7 +1099,7 @@
1129
1099
  };
1130
1100
  const dimensionTreeToColumns = (spec, context)=>{
1131
1101
  const { advancedVSeed } = context;
1132
- const dimensions = advancedVSeed.dimensions;
1102
+ const dimensionTree = advancedVSeed.dimensionTree;
1133
1103
  const result = {
1134
1104
  ...spec
1135
1105
  };
@@ -1139,7 +1109,7 @@
1139
1109
  };
1140
1110
  return {};
1141
1111
  };
1142
- const columns = treeTreeToColumns(dimensions, eachNode);
1112
+ const columns = treeTreeToColumns(dimensionTree, eachNode);
1143
1113
  return {
1144
1114
  ...result,
1145
1115
  columns: [
@@ -1249,7 +1219,7 @@
1249
1219
  };
1250
1220
  const measureTreeToColumns = (spec, context)=>{
1251
1221
  const { advancedVSeed } = context;
1252
- const measures = advancedVSeed.measures;
1222
+ const measureTree = advancedVSeed.measureTree;
1253
1223
  const result = {
1254
1224
  ...spec
1255
1225
  };
@@ -1260,7 +1230,7 @@
1260
1230
  };
1261
1231
  return {};
1262
1232
  };
1263
- const columns = measuresToColumns_treeTreeToColumns(measures, eachNode);
1233
+ const columns = measuresToColumns_treeTreeToColumns(measureTree, eachNode);
1264
1234
  return {
1265
1235
  ...result,
1266
1236
  columns: [
@@ -1692,8 +1662,8 @@
1692
1662
  const result = {
1693
1663
  ...advancedVSeed
1694
1664
  };
1695
- const measures = findAllMeasures(advancedVSeed.measures);
1696
- if (measures.length > 1 && !result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push({
1665
+ const measures = findAllMeasures(advancedVSeed.measureTree);
1666
+ if (measures.length > 1 && !findTreeNodesBy(advancedVSeed.dimensionTree, (dim)=>dim.id === MeasureId || dim.id === MeasureName).length) result.dimensionTree.push({
1697
1667
  id: MeasureId,
1698
1668
  alias: intl.i18n`指标名称`,
1699
1669
  encoding: 'row'
@@ -1701,13 +1671,13 @@
1701
1671
  return result;
1702
1672
  };
1703
1673
  const encodingForPivotTable = (advancedVSeed)=>{
1704
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
1705
- const measures = findAllMeasures(vseedMeasures);
1706
- const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1674
+ const { measureTree = [], dimensionTree = [] } = advancedVSeed;
1675
+ const measures = findAllMeasures(measureTree);
1676
+ const hasDimensionEncoding = dimensionTree.some((item)=>item.encoding);
1707
1677
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
1708
1678
  const encoding = {};
1709
- if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1710
- else generateDefaultDimensionEncoding(dimensions, encoding);
1679
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensionTree, encoding);
1680
+ else generateDefaultDimensionEncoding(dimensionTree, encoding);
1711
1681
  if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1712
1682
  else generateDefaultMeasureEncoding(measures, encoding);
1713
1683
  return {
@@ -1810,8 +1780,8 @@
1810
1780
  };
1811
1781
  const { vseed } = context;
1812
1782
  const { dataset, chartType } = vseed;
1813
- const { dimensions, measures } = advancedVSeed;
1814
- const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measures), {
1783
+ const { measureTree } = advancedVSeed;
1784
+ const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measureTree), {
1815
1785
  measureId: FoldMeasureId,
1816
1786
  measureName: FoldMeasureName,
1817
1787
  measureValue: FoldMeasureValue,
@@ -1827,9 +1797,7 @@
1827
1797
  return {
1828
1798
  ...result,
1829
1799
  dataset: newDatasets,
1830
- datasetReshapeInfo: datasetReshapeInfo,
1831
- dimensions,
1832
- measures
1800
+ datasetReshapeInfo: datasetReshapeInfo
1833
1801
  };
1834
1802
  };
1835
1803
  const pivotTableConfig = (advancedVSeed, context)=>{
@@ -1915,7 +1883,7 @@
1915
1883
  const pivotColumns = (spec, context)=>{
1916
1884
  const { advancedVSeed } = context;
1917
1885
  const { encoding } = advancedVSeed;
1918
- const dimensions = advancedVSeed.dimensions;
1886
+ const dimensions = advancedVSeed.dimensionTree;
1919
1887
  const columns = dimensions.filter((item)=>encoding.column?.includes(item.id));
1920
1888
  return {
1921
1889
  ...spec,
@@ -1928,10 +1896,10 @@
1928
1896
  };
1929
1897
  const pivotRows = (spec, context)=>{
1930
1898
  const { advancedVSeed } = context;
1931
- const dimensions = advancedVSeed.dimensions;
1932
- const { encoding, measures } = advancedVSeed;
1899
+ const dimensions = advancedVSeed.dimensionTree;
1900
+ const { encoding } = advancedVSeed;
1933
1901
  const rows = dimensions.filter((item)=>encoding.row?.includes(item.id));
1934
- const allMeasures = findAllMeasures(measures);
1902
+ const allMeasures = findAllMeasures(advancedVSeed.measureTree);
1935
1903
  return {
1936
1904
  ...spec,
1937
1905
  rows: rows.map((item)=>{
@@ -1959,7 +1927,7 @@
1959
1927
  };
1960
1928
  const pivotIndicators = (spec, context)=>{
1961
1929
  const { advancedVSeed } = context;
1962
- const { measures, datasetReshapeInfo } = advancedVSeed;
1930
+ const { measureTree, datasetReshapeInfo } = advancedVSeed;
1963
1931
  const { foldInfo } = datasetReshapeInfo[0];
1964
1932
  const hasRow = spec?.rows?.length > 0;
1965
1933
  const foldMapValues = Object.values(foldInfo.foldMap);
@@ -1974,18 +1942,18 @@
1974
1942
  indicatorKey: foldInfo.measureValue,
1975
1943
  title: foldMapValues.length > 1 ? '' : foldMapValues[0],
1976
1944
  width: 'auto',
1977
- format: pivotIndicators_fieldFormat(measures, foldInfo)
1945
+ format: pivotIndicators_fieldFormat(measureTree, foldInfo)
1978
1946
  }
1979
1947
  ]
1980
1948
  };
1981
1949
  };
1982
- const pivotIndicators_fieldFormat = (measures, foldInfo)=>(value, col, row, table)=>{
1950
+ const pivotIndicators_fieldFormat = (measureTree, foldInfo)=>(value, col, row, table)=>{
1983
1951
  if (!chunk_6GTAPB47_e(col) || !chunk_6GTAPB47_e(row) || !table) return value;
1984
1952
  const datum = table.getCellOriginRecord(col, row);
1985
1953
  if (!datum[0]) return value;
1986
1954
  const { measureId: foldMeasureId } = foldInfo;
1987
1955
  const measureId = datum[0][foldMeasureId];
1988
- const measure = findMeasureById(measures, measureId);
1956
+ const measure = findMeasureById(measureTree, measureId);
1989
1957
  const formatter = createFormatterByMeasure(measure);
1990
1958
  return formatter(value);
1991
1959
  };
@@ -2143,7 +2111,7 @@
2143
2111
  };
2144
2112
  const dataConfig = (spec, context)=>{
2145
2113
  const { advancedVSeed } = context;
2146
- const measures = findAllMeasures(advancedVSeed.measures);
2114
+ const measures = findAllMeasures(advancedVSeed.measureTree);
2147
2115
  const aggregationRules = measures.map((measure)=>({
2148
2116
  field: measure.id,
2149
2117
  aggregationType: 'NONE',
@@ -2190,9 +2158,8 @@
2190
2158
  const { measures, dataset } = vseed;
2191
2159
  if (measures && measures.length > 0) {
2192
2160
  const clonedMeasures = chunk_BCBB46UE_d(measures);
2193
- preorderTraverse(clonedMeasures, (node)=>{
2194
- node.alias = node.alias || node.id;
2195
- return false;
2161
+ clonedMeasures.forEach((m)=>{
2162
+ m.alias = m.alias ?? m.id;
2196
2163
  });
2197
2164
  return {
2198
2165
  ...advancedVSeed,
@@ -2230,7 +2197,7 @@
2230
2197
  alias: dim.alias || dim.id
2231
2198
  })))
2232
2199
  };
2233
- const measures = findAllMeasures(advancedVSeed.measures);
2200
+ const measures = advancedVSeed.measures;
2234
2201
  const top100dataset = dataset.slice(0, 100);
2235
2202
  const sample = top100dataset.reduce((prev, cur)=>({
2236
2203
  ...prev,
@@ -2268,54 +2235,25 @@
2268
2235
  if (hasEncoding) return execPipeline(hasEncodingPipeline, context, advancedVSeed);
2269
2236
  return execPipeline(noEncodingPipeline, context, advancedVSeed);
2270
2237
  };
2271
- const buildMeasures = (advancedVSeed)=>{
2272
- if (isMeasureTreeWithChildren(advancedVSeed.measures)) {
2273
- advancedVSeed.measures = normalizeMeasureTree(advancedVSeed.measures);
2274
- return advancedVSeed;
2275
- }
2276
- if (isMeasureTreeWithParentId(advancedVSeed.measures)) {
2277
- advancedVSeed.measures = generateMeasuresByParentId(advancedVSeed.measures);
2278
- return advancedVSeed;
2279
- }
2280
- if (chatType_isPivotChart(advancedVSeed)) advancedVSeed.measures = basicMeasuresToMeasureTree(advancedVSeed.measures);
2281
- return advancedVSeed;
2282
- };
2283
- const generateMeasuresByParentId = (measures)=>{
2284
- const measureTree = [];
2285
- measures.forEach((measure)=>{
2286
- const parent = measureTree.find((item)=>item.id === measure.parentId);
2287
- if (parent && 'children' in parent) {
2288
- parent.children = parent.children || [];
2289
- if (parent.children.length > 0) parent.alias += `-${measure.alias ?? measure.id}`;
2290
- parent.children.push(measure);
2291
- } else if (common_isValid(measure.parentId)) measureTree.push({
2292
- id: measure.parentId,
2293
- alias: measure.alias ?? measure.id,
2294
- children: [
2295
- measure
2296
- ]
2297
- });
2298
- else measureTree.push({
2299
- id: DEFAULT_PARENT_ID,
2300
- alias: measure.alias ?? measure.id,
2301
- children: [
2302
- measure
2303
- ]
2304
- });
2305
- });
2306
- return measureTree;
2307
- };
2308
- const basicMeasuresToMeasureTree = (measures)=>{
2309
- const id = measures.map((item)=>item.id).join('-');
2310
- const alias = measures.map((item)=>item.alias || item.id).join('-');
2311
- return [
2312
- {
2313
- id,
2314
- alias,
2315
- children: measures
2238
+ const buildMeasures = (encodingKeys)=>(advancedVSeed)=>{
2239
+ const { measures = [] } = advancedVSeed;
2240
+ const measuresByView = {};
2241
+ const parentIds = [];
2242
+ for(let index = 0; index < measures.length; index++){
2243
+ const item = measures[index];
2244
+ const encoding = item.encoding;
2245
+ const parentId = item.parentId || DEFAULT_PARENT_ID;
2246
+ const isOtherEncoding = item.encoding && isCommonMeasureEncoding(encoding);
2247
+ ensureParentIdInitialized(parentId, measuresByView, parentIds);
2248
+ if (encodingKeys.includes(encoding)) measuresByView[parentId].push(item);
2249
+ else if (!isOtherEncoding) {
2250
+ item.encoding = encodingKeys[0];
2251
+ measuresByView[parentId].push(item);
2252
+ }
2316
2253
  }
2317
- ];
2318
- };
2254
+ advancedVSeed.reshapeMeasures = parentIds.map((pid)=>measuresByView[pid]).filter((m)=>m.length > 0);
2255
+ return advancedVSeed;
2256
+ };
2319
2257
  const addColorToEncoding = (dimensions, encoding, isMultiMeasure)=>{
2320
2258
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
2321
2259
  const measureId = dimensions.find((item)=>item.id === MeasureId);
@@ -2333,27 +2271,23 @@
2333
2271
  ];
2334
2272
  };
2335
2273
  const defaultEncodingForLine = (advancedVSeed)=>{
2336
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
2337
- const measures = findAllMeasures(vseedMeasures);
2274
+ const { reshapeMeasures = [], measures = [], dimensions = [] } = advancedVSeed;
2338
2275
  const encoding = {};
2339
- line_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
2340
- line_generateDefaultMeasureEncoding(measures, encoding);
2276
+ line_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
2277
+ line_generateMeasureEncoding(measures, encoding);
2341
2278
  return {
2342
2279
  ...advancedVSeed,
2343
2280
  encoding
2344
2281
  };
2345
2282
  };
2346
2283
  const encodingForLine = (advancedVSeed)=>{
2347
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
2348
- const measures = findAllMeasures(vseedMeasures);
2284
+ const { reshapeMeasures = [], measures = [], dimensions = [] } = advancedVSeed;
2349
2285
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
2350
- const hasMeasureEncoding = measures.some((item)=>item.encoding);
2351
2286
  const encoding = {};
2352
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
2287
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
2353
2288
  if (hasDimensionEncoding) line_generateDimensionEncoding(dimensions, encoding, hasMulti);
2354
2289
  else line_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
2355
- if (hasMeasureEncoding) line_generateMeasureEncoding(measures, encoding);
2356
- else line_generateDefaultMeasureEncoding(measures, encoding);
2290
+ line_generateMeasureEncoding(measures, encoding);
2357
2291
  return {
2358
2292
  ...advancedVSeed,
2359
2293
  encoding
@@ -2384,9 +2318,6 @@
2384
2318
  encoding.label = chunk_QJLMYOTX_i(dimensions.filter((item)=>'label' === item.encoding).map((item)=>item.id));
2385
2319
  encoding.label = encoding.label.filter((d)=>d !== MeasureId);
2386
2320
  };
2387
- const line_generateDefaultMeasureEncoding = (measures, encoding)=>{
2388
- encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
2389
- };
2390
2321
  const line_generateMeasureEncoding = (measures, encoding)=>{
2391
2322
  encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
2392
2323
  const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
@@ -2403,95 +2334,12 @@
2403
2334
  ...tooltip
2404
2335
  ]);
2405
2336
  };
2406
- const deleteMeasureTreeByCallback = (measureTree, callback)=>{
2407
- if (!measureTree) return;
2408
- const stack = [
2409
- ...measureTree
2410
- ].reverse();
2411
- const parents = new Map();
2412
- measureTree.forEach((node)=>{
2413
- parents.set(node, measureTree);
2414
- });
2415
- const nodesToProcess = [];
2416
- const visited = new Set();
2417
- while(stack.length > 0){
2418
- const node = stack[stack.length - 1];
2419
- if (isMeasureGroup(node) && node.children && !visited.has(node)) {
2420
- visited.add(node);
2421
- const children = node.children.slice().reverse();
2422
- for (const child of children){
2423
- parents.set(child, node.children);
2424
- stack.push(child);
2425
- }
2426
- } else {
2427
- stack.pop();
2428
- nodesToProcess.push(node);
2429
- }
2430
- }
2431
- const deleted = [];
2432
- for (const node of nodesToProcess){
2433
- const parentList = parents.get(node);
2434
- if (parentList) {
2435
- const index = parentList.indexOf(node);
2436
- if (isMeasure(node)) {
2437
- if (callback?.(node, index, parentList)) {
2438
- parentList.splice(index, 1);
2439
- deleted.push(node);
2440
- }
2441
- }
2442
- }
2443
- }
2444
- return deleted;
2445
- };
2446
- const pickMeasuresForReshape = (encodingKeys)=>(advancedVSeed)=>{
2447
- const clonedMeasures = chunk_BCBB46UE_d(advancedVSeed.measures);
2448
- const deleteBy = (measure)=>encodingKeys.includes(measure.encoding);
2449
- deleteMeasureTreeByCallback(clonedMeasures, deleteBy);
2450
- return {
2451
- ...advancedVSeed,
2452
- reshapeMeasures: clonedMeasures
2453
- };
2454
- };
2455
- const deleteDimensionTreeByCallback = (dimensionTree, callback)=>{
2456
- if (!dimensionTree) return dimensionTree;
2457
- const stack = [
2458
- ...dimensionTree
2459
- ].reverse();
2460
- const parents = new Map();
2461
- dimensionTree.forEach((node)=>{
2462
- parents.set(node, dimensionTree);
2463
- });
2464
- const nodesToProcess = [];
2465
- const visited = new Set();
2466
- while(stack.length > 0){
2467
- const node = stack[stack.length - 1];
2468
- if (isDimensionGroup(node) && node.children && !visited.has(node)) {
2469
- visited.add(node);
2470
- const children = node.children.slice().reverse();
2471
- for (const child of children){
2472
- parents.set(child, node.children);
2473
- stack.push(child);
2474
- }
2475
- } else {
2476
- stack.pop();
2477
- nodesToProcess.push(node);
2478
- }
2479
- }
2480
- for (const node of nodesToProcess){
2481
- const parentList = parents.get(node);
2482
- if (parentList) {
2483
- const index = parentList.indexOf(node);
2484
- if (isDimension(node)) {
2485
- if (callback?.(node, index, parentList)) parentList.splice(index, 1);
2486
- }
2487
- }
2488
- }
2489
- return dimensionTree;
2490
- };
2491
2337
  const pickDimensionsForReshape = (advancedVSeed)=>{
2492
2338
  const deleteBy = (dimension)=>'tooltip' === dimension.encoding || 'label' === dimension.encoding;
2493
- const reshapeDimensions = chunk_BCBB46UE_d(advancedVSeed.dimensions);
2494
- deleteDimensionTreeByCallback(reshapeDimensions, deleteBy);
2339
+ const reshapeDimensions = [];
2340
+ (advancedVSeed.dimensions ?? []).forEach((d)=>{
2341
+ if (!deleteBy(d)) reshapeDimensions.push(d);
2342
+ });
2495
2343
  return {
2496
2344
  ...advancedVSeed,
2497
2345
  reshapeDimensions
@@ -2599,8 +2447,7 @@
2599
2447
  }
2600
2448
  const isLinearColor = (advancedVSeed, vseed)=>{
2601
2449
  const { encoding } = advancedVSeed;
2602
- const measures = vseed.measures || advancedVSeed.measures;
2603
- const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
2450
+ const measureIdList = (vseed.measures || advancedVSeed.measures).map((measure)=>measure.id);
2604
2451
  const { color } = encoding;
2605
2452
  return color?.length === 1 && measureIdList.includes(color[0]);
2606
2453
  };
@@ -2619,7 +2466,7 @@
2619
2466
  const { dataset, chartType } = vseed;
2620
2467
  const { encoding } = advancedVSeed;
2621
2468
  const colorMeasureId = getColorMeasureId(advancedVSeed, vseed);
2622
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [], (item)=>item.id), T(findAllMeasures(advancedVSeed.reshapeMeasures ?? advancedVSeed.measures), (item)=>item.id), encoding, {
2469
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [], (item)=>item.id), T(advancedVSeed.reshapeMeasures?.[0] ?? [], (item)=>item.id), encoding, {
2623
2470
  colorItemAsId: false,
2624
2471
  colorMeasureId
2625
2472
  });
@@ -2643,24 +2490,19 @@
2643
2490
  const { vseed } = context;
2644
2491
  const { dataset } = vseed;
2645
2492
  const { encoding } = advancedVSeed;
2646
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
2493
+ const reshapeMeasures = advancedVSeed.reshapeMeasures ?? [];
2647
2494
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
2648
- const allMeasures = findAllMeasures(measures);
2649
- const measureGroups = [];
2650
- if (measures) measures.forEach((measure)=>{
2651
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
2652
- });
2495
+ const allMeasuresIds = reshapeMeasures.flatMap((measureGroup)=>measureGroup.map((m)=>m.id));
2653
2496
  const datasets = [];
2654
2497
  const datasetReshapeInfo = [];
2655
- measureGroups.forEach((measureGroup, index)=>{
2656
- const measures = measureGroup.children;
2498
+ reshapeMeasures.forEach((measures, index)=>{
2657
2499
  if (!measures) return;
2658
- const groupId = measureGroup.id;
2500
+ const groupId = measures[0].parentId ?? DEFAULT_PARENT_ID;
2659
2501
  const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(measures, (item)=>item.id), encoding, {
2660
2502
  colorItemAsId: false,
2661
2503
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
2662
2504
  colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
2663
- omitIds: allMeasures.map((item)=>item.id)
2505
+ omitIds: allMeasuresIds
2664
2506
  });
2665
2507
  const reshapeInfo = {
2666
2508
  id: `${groupId}`,
@@ -2804,16 +2646,17 @@
2804
2646
  defaultDimensions_defaultDimensions,
2805
2647
  defaultMeasureId_defaultMeasureId,
2806
2648
  encodingAdapter([
2807
- buildMeasures,
2649
+ buildMeasures([
2650
+ 'yAxis',
2651
+ 'detail'
2652
+ ]),
2808
2653
  defaultEncodingForLine
2809
2654
  ], [
2810
- buildMeasures,
2811
- encodingForLine,
2812
- pickMeasuresForReshape([
2813
- 'tooltip',
2814
- 'label',
2815
- 'color'
2655
+ buildMeasures([
2656
+ 'yAxis',
2657
+ 'detail'
2816
2658
  ]),
2659
+ encodingForLine,
2817
2660
  pickDimensionsForReshape
2818
2661
  ]),
2819
2662
  pivotAdapter([
@@ -2992,16 +2835,13 @@
2992
2835
  result.progressiveThreshold = 1 / 0;
2993
2836
  return result;
2994
2837
  };
2995
- const defaultTitleText = (measures, dimensions, idList = [])=>{
2996
- const allMeasures = findAllMeasures(measures);
2997
- return idList.map((id)=>{
2838
+ const defaultTitleText = (measures, dimensions, idList = [])=>idList.map((id)=>{
2998
2839
  const alias = [
2999
- ...allMeasures,
2840
+ ...measures,
3000
2841
  ...dimensions
3001
2842
  ].find((f)=>f.id === id)?.alias || '';
3002
2843
  return alias;
3003
2844
  }).join(' & ');
3004
- };
3005
2845
  const isNull = (value)=>null === value;
3006
2846
  const common_isNull = isNull;
3007
2847
  const bandAxisStyle = (config)=>{
@@ -3071,7 +2911,7 @@
3071
2911
  };
3072
2912
  const { advancedVSeed, vseed } = context;
3073
2913
  const { chartType } = vseed;
3074
- const { measures, dimensions, encoding, datasetReshapeInfo, pivotAllDatasetReshapeInfo } = advancedVSeed;
2914
+ const { measures = [], dimensions = [], encoding, datasetReshapeInfo, pivotAllDatasetReshapeInfo } = advancedVSeed;
3075
2915
  const config = advancedVSeed.config?.[chartType]?.xAxis ?? {};
3076
2916
  if (!result.axes) result.axes = [];
3077
2917
  const { labelAutoLimitLength = 80 } = config;
@@ -3194,7 +3034,7 @@
3194
3034
  };
3195
3035
  const { advancedVSeed, vseed } = context;
3196
3036
  const { chartType } = vseed;
3197
- const { measures, dimensions, encoding } = advancedVSeed;
3037
+ const { measures = [], dimensions = [], encoding } = advancedVSeed;
3198
3038
  const config = advancedVSeed.config?.[chartType]?.yAxis ?? {};
3199
3039
  if (!result.axes) result.axes = [];
3200
3040
  const isPivot = chatType_isPivotChart(vseed);
@@ -3745,9 +3585,11 @@
3745
3585
  const measure = findMeasureById(advancedVSeedMeasures, datum[measureId]);
3746
3586
  if (measure) {
3747
3587
  const measureValueLabel = generateMeasureValue(datum[measureValue], measure, autoFormat, numFormat);
3748
- const measurePercentLabel = chunk_6GTAPB47_e(datum['__VCHART_ARC_RATIO']) ? generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter) : generateMeasurePercent(datum[measureValue], statistics.sum, percentFormatter);
3749
3588
  if (showValue) result.push(measureValueLabel);
3750
- if (showValuePercent) result.push(measurePercentLabel);
3589
+ if (showValuePercent) {
3590
+ if (chunk_6GTAPB47_e(datum['__VCHART_ARC_RATIO'])) result.push(generateMeasurePercent(datum['__VCHART_ARC_RATIO'], 1, percentFormatter));
3591
+ else if (statistics && chunk_6GTAPB47_e(statistics.sum)) result.push(generateMeasurePercent(datum[measureValue], statistics.sum, percentFormatter));
3592
+ }
3751
3593
  }
3752
3594
  });
3753
3595
  result.push(...meaLabels);
@@ -3858,7 +3700,7 @@
3858
3700
  ...spec
3859
3701
  };
3860
3702
  const { advancedVSeed, vseed } = context;
3861
- const { measures, datasetReshapeInfo, chartType, dimensions, encoding } = advancedVSeed;
3703
+ const { measures = [], datasetReshapeInfo, chartType, dimensions = [], encoding } = advancedVSeed;
3862
3704
  const baseConfig = advancedVSeed.config[chartType];
3863
3705
  const { tooltip = {
3864
3706
  enable: true
@@ -3872,7 +3714,7 @@
3872
3714
  title: {
3873
3715
  visible: false
3874
3716
  },
3875
- content: createMarkContent(encoding.tooltip || [], dimensions, findAllMeasures(vseed.measures), foldInfo, unfoldInfo)
3717
+ content: createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, foldInfo, unfoldInfo)
3876
3718
  },
3877
3719
  dimension: {
3878
3720
  title: {
@@ -3884,7 +3726,7 @@
3884
3726
  };
3885
3727
  return result;
3886
3728
  };
3887
- const createDimensionContent = (dimensions, measures, foldInfo, unfoldInfo)=>{
3729
+ const createDimensionContent = (dimensions = [], measures = [], foldInfo, unfoldInfo)=>{
3888
3730
  const { measureId, measureValue, foldMap } = foldInfo;
3889
3731
  const { encodingColor } = unfoldInfo;
3890
3732
  return [
@@ -3913,7 +3755,7 @@
3913
3755
  }
3914
3756
  ];
3915
3757
  };
3916
- const createMarkContent = (tooltip, dimensions, measures, foldInfo, unfoldInfo)=>{
3758
+ const createMarkContent = (tooltip, dimensions = [], measures = [], foldInfo, unfoldInfo)=>{
3917
3759
  const dims = C(dimensions.filter((item)=>tooltip.includes(item.id)), T((item)=>item.id), T((item)=>item.alias));
3918
3760
  const meas = C(measures.filter((item)=>tooltip.includes(item.id)), T((item)=>item.id), T((item)=>item.alias));
3919
3761
  const dimContent = dims.map((item)=>({
@@ -5274,12 +5116,12 @@
5274
5116
  ...spec
5275
5117
  };
5276
5118
  const { advancedVSeed } = context;
5277
- const { measures, datasetReshapeInfo, dataset, encoding } = advancedVSeed;
5119
+ const { datasetReshapeInfo, dataset, encoding, reshapeMeasures = [] } = advancedVSeed;
5278
5120
  const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
5279
5121
  const allMeasureIds = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>Object.keys(d.foldInfo.foldMap || {})));
5280
5122
  const indicators = datasetReshapeInfo.map((reshapeInfo, index)=>{
5281
- const measureGroup = measures?.find((d)=>`${d.id}` === reshapeInfo.id);
5282
- const subMeasuresId = (measureGroup?.children || []).map((d)=>d.id);
5123
+ const subMeasures = reshapeMeasures[index] || [];
5124
+ const subMeasuresId = (reshapeMeasures[index] || []).map((d)=>d.id);
5283
5125
  const invalideMeasuresIds = allMeasureIds.filter((id)=>!subMeasuresId.includes(id));
5284
5126
  const newDataset = dataset[index];
5285
5127
  const newDatasetReshapeInfo = [
@@ -5307,7 +5149,7 @@
5307
5149
  const chartSpec = execPipeline(chartPipeline, newContext, {});
5308
5150
  return {
5309
5151
  indicatorKey: `${reshapeInfo.id}`,
5310
- title: measureGroup?.alias,
5152
+ title: isRectungularCoordinate(advancedVSeed.chartType) ? '' : subMeasures.map((m)=>m.alias ?? m.id).join('-'),
5311
5153
  cellType: 'chart',
5312
5154
  chartModule: 'vchart',
5313
5155
  chartSpec: chartSpec,
@@ -5756,10 +5598,9 @@
5756
5598
  Builder._specPipelineMap.line = lineSpecPipeline;
5757
5599
  };
5758
5600
  const defaultEncodingForColumn = (advancedVSeed)=>{
5759
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5760
- const measures = findAllMeasures(vseedMeasures);
5601
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
5761
5602
  const encoding = {};
5762
- column_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
5603
+ column_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
5763
5604
  column_generateDefaultMeasureEncoding(measures, encoding);
5764
5605
  return {
5765
5606
  ...advancedVSeed,
@@ -5767,12 +5608,11 @@
5767
5608
  };
5768
5609
  };
5769
5610
  const encodingForColumn = (advancedVSeed)=>{
5770
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5771
- const measures = findAllMeasures(vseedMeasures);
5611
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
5772
5612
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5773
5613
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5774
5614
  const encoding = {};
5775
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
5615
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
5776
5616
  if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding, hasMulti);
5777
5617
  else column_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
5778
5618
  if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
@@ -5891,16 +5731,17 @@
5891
5731
  defaultDimensions_defaultDimensions,
5892
5732
  defaultMeasureId_defaultMeasureId,
5893
5733
  encodingAdapter([
5894
- buildMeasures,
5734
+ buildMeasures([
5735
+ 'yAxis',
5736
+ 'detail'
5737
+ ]),
5895
5738
  defaultEncodingForColumn
5896
5739
  ], [
5897
- buildMeasures,
5898
- encodingForColumn,
5899
- pickMeasuresForReshape([
5900
- 'tooltip',
5901
- 'label',
5902
- 'color'
5740
+ buildMeasures([
5741
+ 'yAxis',
5742
+ 'detail'
5903
5743
  ]),
5744
+ encodingForColumn,
5904
5745
  pickDimensionsForReshape
5905
5746
  ]),
5906
5747
  pivotAdapter([
@@ -6780,16 +6621,17 @@
6780
6621
  defaultDimensions_defaultDimensions,
6781
6622
  defaultMeasureId_defaultMeasureId,
6782
6623
  encodingAdapter([
6783
- buildMeasures,
6624
+ buildMeasures([
6625
+ 'yAxis',
6626
+ 'detail'
6627
+ ]),
6784
6628
  defaultEncodingForColumn
6785
6629
  ], [
6786
- buildMeasures,
6787
- encodingForColumn,
6788
- pickMeasuresForReshape([
6789
- 'tooltip',
6790
- 'label',
6791
- 'color'
6630
+ buildMeasures([
6631
+ 'yAxis',
6632
+ 'detail'
6792
6633
  ]),
6634
+ encodingForColumn,
6793
6635
  pickDimensionsForReshape
6794
6636
  ]),
6795
6637
  pivotAdapter([
@@ -6946,16 +6788,17 @@
6946
6788
  defaultDimensions_defaultDimensions,
6947
6789
  defaultMeasureId_defaultMeasureId,
6948
6790
  encodingAdapter([
6949
- buildMeasures,
6791
+ buildMeasures([
6792
+ 'yAxis',
6793
+ 'detail'
6794
+ ]),
6950
6795
  defaultEncodingForColumn
6951
6796
  ], [
6952
- buildMeasures,
6953
- encodingForColumn,
6954
- pickMeasuresForReshape([
6955
- 'tooltip',
6956
- 'label',
6957
- 'color'
6797
+ buildMeasures([
6798
+ 'yAxis',
6799
+ 'detail'
6958
6800
  ]),
6801
+ encodingForColumn,
6959
6802
  pickDimensionsForReshape
6960
6803
  ]),
6961
6804
  pivotAdapter([
@@ -7039,10 +6882,9 @@
7039
6882
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
7040
6883
  };
7041
6884
  const defaultEncodingForBar = (advancedVSeed)=>{
7042
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7043
- const measures = findAllMeasures(vseedMeasures);
6885
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
7044
6886
  const encoding = {};
7045
- bar_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
6887
+ bar_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
7046
6888
  bar_generateDefaultMeasureEncoding(measures, encoding);
7047
6889
  return {
7048
6890
  ...advancedVSeed,
@@ -7050,12 +6892,11 @@
7050
6892
  };
7051
6893
  };
7052
6894
  const encodingForBar = (advancedVSeed)=>{
7053
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7054
- const measures = findAllMeasures(vseedMeasures);
6895
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
7055
6896
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7056
6897
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7057
6898
  const encoding = {};
7058
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
6899
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
7059
6900
  if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding, hasMulti);
7060
6901
  else bar_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
7061
6902
  if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
@@ -7129,16 +6970,17 @@
7129
6970
  defaultDimensions_defaultDimensions,
7130
6971
  defaultMeasureId_defaultMeasureId,
7131
6972
  encodingAdapter([
7132
- buildMeasures,
6973
+ buildMeasures([
6974
+ 'xAxis',
6975
+ 'detail'
6976
+ ]),
7133
6977
  defaultEncodingForBar
7134
6978
  ], [
7135
- buildMeasures,
7136
- encodingForBar,
7137
- pickMeasuresForReshape([
7138
- 'tooltip',
7139
- 'label',
7140
- 'color'
6979
+ buildMeasures([
6980
+ 'xAxis',
6981
+ 'detail'
7141
6982
  ]),
6983
+ encodingForBar,
7142
6984
  pickDimensionsForReshape
7143
6985
  ]),
7144
6986
  pivotAdapter([
@@ -7223,7 +7065,7 @@
7223
7065
  ...spec
7224
7066
  };
7225
7067
  const { advancedVSeed, vseed } = context;
7226
- const { encoding, dimensions, measures } = advancedVSeed;
7068
+ const { encoding, dimensions = [], measures = [] } = advancedVSeed;
7227
7069
  const { chartType } = vseed;
7228
7070
  const config = advancedVSeed.config?.[chartType]?.xAxis ?? {};
7229
7071
  if (!result.axes) result.axes = [];
@@ -7257,7 +7099,7 @@
7257
7099
  };
7258
7100
  const { advancedVSeed, vseed } = context;
7259
7101
  const { chartType } = vseed;
7260
- const { measures, dimensions, encoding, datasetReshapeInfo, pivotAllDatasetReshapeInfo } = advancedVSeed;
7102
+ const { measures = [], dimensions = [], encoding, datasetReshapeInfo, pivotAllDatasetReshapeInfo } = advancedVSeed;
7261
7103
  const config = advancedVSeed.config?.[chartType]?.yAxis ?? {};
7262
7104
  if (!result.axes) result.axes = [];
7263
7105
  const { labelAutoLimitLength = 80 } = config;
@@ -7396,16 +7238,17 @@
7396
7238
  defaultDimensions_defaultDimensions,
7397
7239
  defaultMeasureId_defaultMeasureId,
7398
7240
  encodingAdapter([
7399
- buildMeasures,
7241
+ buildMeasures([
7242
+ 'xAxis',
7243
+ 'detail'
7244
+ ]),
7400
7245
  defaultEncodingForBar
7401
7246
  ], [
7402
- buildMeasures,
7403
- encodingForBar,
7404
- pickMeasuresForReshape([
7405
- 'tooltip',
7406
- 'label',
7407
- 'color'
7247
+ buildMeasures([
7248
+ 'xAxis',
7249
+ 'detail'
7408
7250
  ]),
7251
+ encodingForBar,
7409
7252
  pickDimensionsForReshape
7410
7253
  ]),
7411
7254
  pivotAdapter([
@@ -7511,16 +7354,17 @@
7511
7354
  defaultDimensions_defaultDimensions,
7512
7355
  defaultMeasureId_defaultMeasureId,
7513
7356
  encodingAdapter([
7514
- buildMeasures,
7357
+ buildMeasures([
7358
+ 'xAxis',
7359
+ 'detail'
7360
+ ]),
7515
7361
  defaultEncodingForBar
7516
7362
  ], [
7517
- buildMeasures,
7518
- encodingForBar,
7519
- pickMeasuresForReshape([
7520
- 'tooltip',
7521
- 'label',
7522
- 'color'
7363
+ buildMeasures([
7364
+ 'xAxis',
7365
+ 'detail'
7523
7366
  ]),
7367
+ encodingForBar,
7524
7368
  pickDimensionsForReshape
7525
7369
  ]),
7526
7370
  pivotAdapter([
@@ -7599,16 +7443,17 @@
7599
7443
  defaultDimensions_defaultDimensions,
7600
7444
  defaultMeasureId_defaultMeasureId,
7601
7445
  encodingAdapter([
7602
- buildMeasures,
7446
+ buildMeasures([
7447
+ 'yAxis',
7448
+ 'detail'
7449
+ ]),
7603
7450
  defaultEncodingForLine
7604
7451
  ], [
7605
- buildMeasures,
7606
- encodingForLine,
7607
- pickMeasuresForReshape([
7608
- 'tooltip',
7609
- 'label',
7610
- 'color'
7452
+ buildMeasures([
7453
+ 'yAxis',
7454
+ 'detail'
7611
7455
  ]),
7456
+ encodingForLine,
7612
7457
  pickDimensionsForReshape
7613
7458
  ]),
7614
7459
  pivotAdapter([
@@ -7797,16 +7642,17 @@
7797
7642
  defaultDimensions_defaultDimensions,
7798
7643
  defaultMeasureId_defaultMeasureId,
7799
7644
  encodingAdapter([
7800
- buildMeasures,
7645
+ buildMeasures([
7646
+ 'yAxis',
7647
+ 'detail'
7648
+ ]),
7801
7649
  defaultEncodingForLine
7802
7650
  ], [
7803
- buildMeasures,
7804
- encodingForLine,
7805
- pickMeasuresForReshape([
7806
- 'tooltip',
7807
- 'label',
7808
- 'color'
7651
+ buildMeasures([
7652
+ 'yAxis',
7653
+ 'detail'
7809
7654
  ]),
7655
+ encodingForLine,
7810
7656
  pickDimensionsForReshape
7811
7657
  ]),
7812
7658
  pivotAdapter([
@@ -7884,130 +7730,44 @@
7884
7730
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
7885
7731
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
7886
7732
  };
7887
- const buildMeasuresForScatter = (advancedVSeed, context)=>{
7888
- const { vseed } = context;
7889
- if (isMeasureTreeWithChildren(advancedVSeed.measures)) return advancedVSeed;
7890
- if (isMeasureTreeWithParentId(advancedVSeed.measures)) {
7891
- advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(advancedVSeed.measures);
7892
- return advancedVSeed;
7893
- }
7894
- if (vseed.scatterMeasures) {
7895
- advancedVSeed.measures = scatterMeasuresToMeasureTree(chunk_BCBB46UE_d(vseed.scatterMeasures));
7896
- return advancedVSeed;
7897
- }
7898
- const { scatterMeasures, encodedMeasures } = basicMeasuresToScatterMeasures(advancedVSeed.measures || []);
7899
- advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
7900
- if (encodedMeasures.length) encodedMeasures.forEach((m)=>{
7901
- advancedVSeed.measures.push(m);
7902
- });
7903
- return advancedVSeed;
7904
- };
7905
- const basicMeasuresToScatterMeasures = (basicMeasures)=>{
7906
- const yMeasures = [];
7907
- const xMeasures = [];
7908
- const encodedMeasures = [];
7909
- for(let index = 0; index < basicMeasures.length; index++){
7910
- const item = basicMeasures[index];
7733
+ const buildMeasuresForScatter = (advancedVSeed)=>{
7734
+ const { measures = [] } = advancedVSeed;
7735
+ const measuresByView = {};
7736
+ const parentIds = [];
7737
+ for(let index = 0; index < measures.length; index++){
7738
+ const item = measures[index];
7911
7739
  const encoding = item.encoding;
7740
+ const parentId = item.parentId || DEFAULT_PARENT_ID;
7912
7741
  const isYAxis = 'yAxis' === encoding;
7913
7742
  const isXAxis = 'xAxis' === encoding;
7914
- const isOther = encoding && [
7915
- 'color',
7916
- 'label',
7917
- 'tooltip',
7918
- 'detail'
7919
- ].includes(encoding);
7920
- if (isYAxis) yMeasures.push(item);
7921
- else if (isXAxis) xMeasures.push(item);
7922
- else if (isOther) encodedMeasures.push(item);
7923
- else if (0 !== index) yMeasures.push(item);
7924
- else xMeasures.push(item);
7925
- }
7926
- if (0 === yMeasures.length && xMeasures.length > 0) yMeasures.push(xMeasures[0]);
7927
- return {
7928
- scatterMeasures: [
7929
- {
7930
- id: 'scatterMeasures',
7931
- xMeasures,
7932
- yMeasures
7933
- }
7934
- ],
7935
- encodedMeasures
7936
- };
7937
- };
7938
- const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
7939
- const measureTree = scatterMeasures.map((item, index)=>{
7940
- const { id, xMeasures, yMeasures } = item;
7941
- const groupChildren = [];
7942
- let groupId = `${id}-`;
7943
- if (xMeasures) {
7944
- const arrPrimaryMeasures = Array.isArray(xMeasures) ? xMeasures : [
7945
- xMeasures
7946
- ];
7947
- const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
7948
- groupId += alias;
7949
- groupChildren.push({
7950
- id: `${index}-x`,
7951
- alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
7952
- children: arrPrimaryMeasures
7953
- });
7743
+ const isOtherEncoding = item.encoding && isCommonMeasureEncoding(encoding);
7744
+ ensureParentIdInitialized(parentId, measuresByView, parentIds);
7745
+ if (isYAxis) measuresByView[parentId].push(item);
7746
+ else if (isXAxis) measuresByView[parentId].push(item);
7747
+ else if (!isOtherEncoding && 'size' !== encoding) {
7748
+ const xCount = measuresByView[parentId].filter((m)=>'xAxis' === m.encoding).length;
7749
+ item.encoding = 0 === xCount ? 'xAxis' : 'yAxis';
7750
+ measuresByView[parentId].push(item);
7954
7751
  }
7955
- if (yMeasures) {
7956
- const arrSecondaryMeasures = Array.isArray(yMeasures) ? yMeasures : [
7957
- yMeasures
7752
+ }
7753
+ advancedVSeed.reshapeMeasures = parentIds.map((pid)=>{
7754
+ const basicMeasures = measuresByView[pid];
7755
+ const xCount = basicMeasures.filter((m)=>'xAxis' === m.encoding).length;
7756
+ const yCount = basicMeasures.filter((m)=>'yAxis' === m.encoding).length;
7757
+ if (0 === yCount && xCount > 0) {
7758
+ const cloneMeasure = chunk_BCBB46UE_d(basicMeasures[0]);
7759
+ cloneMeasure.encoding = 'yAxis';
7760
+ return [
7761
+ ...basicMeasures,
7762
+ cloneMeasure
7958
7763
  ];
7959
- const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
7960
- groupId += alias;
7961
- groupChildren.push({
7962
- id: `${index}-y`,
7963
- alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
7964
- children: arrSecondaryMeasures
7965
- });
7966
7764
  }
7967
- return {
7968
- id: groupId,
7969
- alias: groupId,
7970
- children: groupChildren
7971
- };
7972
- });
7973
- if (1 === scatterMeasures.length) return measureTree[0].children || [];
7974
- return measureTree;
7975
- };
7976
- const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
7977
- const scatterMeasures = [];
7978
- const encodedMeasures = [];
7979
- measures.forEach((item)=>{
7980
- const id = item.parentId || DEFAULT_PARENT_ID;
7981
- if (!scatterMeasures.find((d)=>d.id === id)) scatterMeasures.push({
7982
- id,
7983
- yMeasures: [],
7984
- xMeasures: []
7985
- });
7986
- const scatterChart = scatterMeasures.find((d)=>d.id === id);
7987
- if (!scatterChart || !Array.isArray(scatterChart.yMeasures) || !Array.isArray(scatterChart.xMeasures)) return;
7988
- const isYAxis = 'yAxis' === item.encoding;
7989
- const isXAxis = 'xAxis' === item.encoding;
7990
- const isOther = item.encoding && [
7991
- 'color',
7992
- 'label',
7993
- 'tooltip',
7994
- 'detail'
7995
- ].includes(item.encoding);
7996
- if (isYAxis) scatterChart.yMeasures.push(item);
7997
- else if (isXAxis) scatterChart.xMeasures.push(item);
7998
- else if (isOther) encodedMeasures.push(item);
7999
- else if (0 !== scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
8000
- else scatterChart.xMeasures.push(item);
8001
- });
8002
- const res = scatterMeasuresToMeasureTree(scatterMeasures);
8003
- if (encodedMeasures.length) encodedMeasures.forEach((m)=>{
8004
- res.push(m);
8005
- });
8006
- return res;
7765
+ return basicMeasures;
7766
+ }).filter((m)=>m.length > 0);
7767
+ return advancedVSeed;
8007
7768
  };
8008
7769
  const defaultEncodingForScatter = (advancedVSeed)=>{
8009
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
8010
- const measures = findAllMeasures(vseedMeasures);
7770
+ const { measures = [], dimensions = [] } = advancedVSeed;
8011
7771
  const encoding = {};
8012
7772
  scatter_generateDefaultDimensionEncoding(dimensions, encoding);
8013
7773
  scatter_generateDefaultMeasureEncoding(measures, encoding);
@@ -8017,8 +7777,7 @@
8017
7777
  };
8018
7778
  };
8019
7779
  const encodingForScatter = (advancedVSeed)=>{
8020
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
8021
- const measures = findAllMeasures(vseedMeasures);
7780
+ const { measures = [], dimensions = [] } = advancedVSeed;
8022
7781
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
8023
7782
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
8024
7783
  const encoding = {};
@@ -8107,37 +7866,32 @@
8107
7866
  };
8108
7867
  const { vseed } = context;
8109
7868
  const { dataset } = vseed;
8110
- const { encoding, chartType } = advancedVSeed;
8111
- const measures = (advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? []).filter((m)=>m && m.children);
7869
+ const { encoding, chartType, reshapeMeasures } = advancedVSeed;
8112
7870
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
8113
- if (measures.length > 2) throw new Error('measures can not be more than 2 groups in scatter');
7871
+ const measures = reshapeMeasures?.[0] ?? [];
8114
7872
  const foldInfoList = [];
8115
7873
  const unfoldInfoList = [];
8116
7874
  const datasets = [];
8117
- const xMeasures = measures[0];
8118
- const yMeasures = measures[1] || xMeasures;
8119
- if (xMeasures && xMeasures.children) {
8120
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (d)=>d.id), T(xMeasures.children, (d)=>d.id), encoding, {
8121
- foldMeasureValue: FoldXMeasureValue,
8122
- foldMeasureId: FoldXMeasureId,
8123
- colorItemAsId: true,
8124
- colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
8125
- });
8126
- datasets.push(newDataset);
8127
- foldInfoList.push(foldInfo);
8128
- unfoldInfoList.push(unfoldInfo);
8129
- }
8130
- if (yMeasures && yMeasures.children) {
8131
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], T(dimensions, (d)=>d.id), T(yMeasures.children, (d)=>d.id), encoding, {
8132
- foldMeasureValue: FoldYMeasureValue,
8133
- foldMeasureId: FoldYMeasureId,
8134
- colorItemAsId: true,
8135
- colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
8136
- });
8137
- datasets[0] = newDataset;
8138
- foldInfoList.push(foldInfo);
8139
- unfoldInfoList.push(unfoldInfo);
8140
- }
7875
+ const xMeasures = measures.filter((m)=>'xAxis' === m.encoding);
7876
+ const yMeasures = measures.filter((m)=>'yAxis' === m.encoding);
7877
+ const xResult = dataReshapeByEncoding(dataset, T(dimensions, (d)=>d.id), T(xMeasures, (d)=>d.id), encoding, {
7878
+ foldMeasureValue: FoldXMeasureValue,
7879
+ foldMeasureId: FoldXMeasureId,
7880
+ colorItemAsId: true,
7881
+ colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
7882
+ });
7883
+ datasets.push(xResult.dataset);
7884
+ foldInfoList.push(xResult.foldInfo);
7885
+ unfoldInfoList.push(xResult.unfoldInfo);
7886
+ const yResult = dataReshapeByEncoding(datasets[0], T(dimensions, (d)=>d.id), T(yMeasures, (d)=>d.id), encoding, {
7887
+ foldMeasureValue: FoldYMeasureValue,
7888
+ foldMeasureId: FoldYMeasureId,
7889
+ colorItemAsId: true,
7890
+ colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
7891
+ });
7892
+ datasets[0] = yResult.dataset;
7893
+ foldInfoList.push(yResult.foldInfo);
7894
+ unfoldInfoList.push(yResult.unfoldInfo);
8141
7895
  const unfoldInfo = {
8142
7896
  ...unfoldInfoList[0],
8143
7897
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
@@ -8167,46 +7921,35 @@
8167
7921
  const { vseed } = context;
8168
7922
  const { dataset } = vseed;
8169
7923
  const { encoding, chartType } = advancedVSeed;
8170
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
7924
+ const reshapeMeasures = advancedVSeed.reshapeMeasures ?? [];
8171
7925
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
8172
- const allMeasures = findAllMeasures(measures);
8173
- const measureGroups = [];
8174
- const depth = measureDepth(measures);
8175
- if (3 === depth) measures.forEach((measure)=>{
8176
- measureGroups.push(measure.children);
8177
- });
8178
- else if (2 === depth) measureGroups.push(measures);
7926
+ const allMeasuresIds = reshapeMeasures.flatMap((measureGroup)=>measureGroup.map((m)=>m.id));
8179
7927
  const datasetList = [];
8180
7928
  const datasetReshapeInfo = [];
8181
- measureGroups.forEach((measures, index)=>{
8182
- if (measures.length > 2) throw new Error('measures can not be more than 2 groups in scatter');
7929
+ reshapeMeasures.forEach((measures, index)=>{
8183
7930
  const foldInfoList = [];
8184
7931
  const unfoldInfoList = [];
8185
7932
  const datasets = [];
8186
- const xMeasures = measures[0];
8187
- const yMeasures = measures[1] || xMeasures;
8188
- if (xMeasures && xMeasures.children) {
8189
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
8190
- foldMeasureValue: `${FoldXMeasureValue}${index}`,
8191
- colorItemAsId: true,
8192
- colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
8193
- omitIds: allMeasures.map((item)=>item.id)
8194
- });
8195
- datasets.push(newDataset);
8196
- foldInfoList.push(foldInfo);
8197
- unfoldInfoList.push(unfoldInfo);
8198
- }
8199
- if (yMeasures && yMeasures.children) {
8200
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
8201
- foldMeasureValue: `${FoldYMeasureValue}${index}`,
8202
- colorItemAsId: true,
8203
- colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
8204
- omitIds: allMeasures.map((item)=>item.id)
8205
- });
8206
- datasets.push(newDataset);
8207
- foldInfoList.push(foldInfo);
8208
- unfoldInfoList.push(unfoldInfo);
8209
- }
7933
+ const xMeasures = measures.filter((m)=>'xAxis' === m.encoding);
7934
+ const yMeasures = measures.filter((m)=>'yAxis' === m.encoding);
7935
+ const xResult = dataReshapeByEncoding(dataset, dimensions, xMeasures, encoding, {
7936
+ foldMeasureValue: `${FoldXMeasureValue}${index}`,
7937
+ colorItemAsId: true,
7938
+ colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
7939
+ omitIds: allMeasuresIds
7940
+ });
7941
+ datasets.push(xResult.dataset);
7942
+ foldInfoList.push(xResult.foldInfo);
7943
+ unfoldInfoList.push(xResult.unfoldInfo);
7944
+ const yResult = dataReshapeByEncoding(dataset, dimensions, yMeasures, encoding, {
7945
+ foldMeasureValue: `${FoldYMeasureValue}${index}`,
7946
+ colorItemAsId: true,
7947
+ colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
7948
+ omitIds: allMeasuresIds
7949
+ });
7950
+ datasets.push(yResult.dataset);
7951
+ foldInfoList.push(yResult.foldInfo);
7952
+ unfoldInfoList.push(yResult.unfoldInfo);
8210
7953
  const unfoldInfo = {
8211
7954
  ...unfoldInfoList[0],
8212
7955
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
@@ -8245,11 +7988,6 @@
8245
7988
  ], [
8246
7989
  buildMeasuresForScatter,
8247
7990
  encodingForScatter,
8248
- pickMeasuresForReshape([
8249
- 'tooltip',
8250
- 'label',
8251
- 'size'
8252
- ]),
8253
7991
  pickDimensionsForReshape
8254
7992
  ]),
8255
7993
  pivotAdapter([
@@ -8336,7 +8074,7 @@
8336
8074
  ...spec
8337
8075
  };
8338
8076
  const { advancedVSeed, vseed } = context;
8339
- const { datasetReshapeInfo, chartType, locale, dimensions, encoding } = advancedVSeed;
8077
+ const { datasetReshapeInfo, chartType, locale, dimensions = [], encoding } = advancedVSeed;
8340
8078
  const baseConfig = advancedVSeed.config[chartType];
8341
8079
  const { tooltip = {
8342
8080
  enable: true
@@ -8350,7 +8088,7 @@
8350
8088
  title: {
8351
8089
  visible: false
8352
8090
  },
8353
- content: tooltipScatter_createMarkContent(encoding.tooltip || [], dimensions, findAllMeasures(vseed.measures), locale, foldInfoList)
8091
+ content: tooltipScatter_createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, locale, foldInfoList)
8354
8092
  },
8355
8093
  dimension: {
8356
8094
  visible: false
@@ -8359,7 +8097,7 @@
8359
8097
  };
8360
8098
  return result;
8361
8099
  };
8362
- const tooltipScatter_createMarkContent = (tooltip, dimensions, measures, locale, foldInfoList)=>{
8100
+ const tooltipScatter_createMarkContent = (tooltip, dimensions, measures = [], locale, foldInfoList)=>{
8363
8101
  const dims = T(dimensions.filter((item)=>tooltip.includes(item.id)), (item)=>item.id);
8364
8102
  const meas = T(measures.filter((item)=>tooltip.includes(item.id)), (item)=>item.id);
8365
8103
  const dimContent = dims.map((item)=>({
@@ -8974,140 +8712,38 @@
8974
8712
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
8975
8713
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
8976
8714
  };
8977
- const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
8978
- const { vseed } = context;
8979
- if (isMeasureTreeWithChildren(advancedVSeed.measures)) return advancedVSeed;
8980
- if (isMeasureTreeWithParentId(advancedVSeed.measures)) {
8981
- advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(advancedVSeed.measures);
8982
- return advancedVSeed;
8983
- }
8984
- if (vseed.dualMeasures) {
8985
- advancedVSeed.measures = dualMeasuresToMeasureTree(chunk_BCBB46UE_d(vseed.dualMeasures));
8986
- return advancedVSeed;
8987
- }
8988
- const { dualMeasures, encodedMeasures } = basicMeasuresToDualMeasures(advancedVSeed.measures || []);
8989
- advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
8990
- if (encodedMeasures.length) encodedMeasures.forEach((m)=>{
8991
- advancedVSeed.measures.push(m);
8992
- });
8993
- return advancedVSeed;
8994
- };
8995
- const basicMeasuresToDualMeasures = (basicMeasures)=>{
8996
- const primaryMeasures = [];
8997
- const secondaryMeasures = [];
8998
- const encodedMeasures = [];
8999
- for(let index = 0; index < basicMeasures.length; index++){
9000
- const item = basicMeasures[index];
8715
+ const buildMeasuresForDualAxis = (advancedVSeed)=>{
8716
+ const { measures = [] } = advancedVSeed;
8717
+ const measuresByView = {};
8718
+ const parentIds = [];
8719
+ for(let index = 0; index < measures.length; index++){
8720
+ const item = measures[index];
9001
8721
  const encoding = item.encoding;
8722
+ const parentId = item.parentId || DEFAULT_PARENT_ID;
9002
8723
  const isPrimaryYAxis = 'primaryYAxis' === encoding;
9003
8724
  const isSecondaryYAxis = 'secondaryYAxis' === encoding;
9004
- const isOtherEncoding = item.encoding && [
9005
- 'color',
9006
- 'label',
9007
- 'tooltip',
9008
- 'detail'
9009
- ].includes(item.encoding);
9010
- if (isPrimaryYAxis) primaryMeasures.push(item);
9011
- else if (isSecondaryYAxis) secondaryMeasures.push(item);
9012
- else if (isOtherEncoding) encodedMeasures.push(item);
9013
- else if (0 === index) primaryMeasures.push(item);
9014
- else secondaryMeasures.push(item);
9015
- }
9016
- return {
9017
- dualMeasures: [
9018
- {
9019
- id: 'dualMeasures',
9020
- primaryMeasures,
9021
- secondaryMeasures
9022
- }
9023
- ],
9024
- encodedMeasures
9025
- };
9026
- };
9027
- const dualMeasuresToMeasureTree = (dualMeasures)=>{
9028
- const measureTree = dualMeasures.map((item, index)=>{
9029
- const { id, primaryMeasures, secondaryMeasures } = item;
9030
- const groupChildren = [];
9031
- let groupId = `${id}-`;
9032
- if (primaryMeasures) {
9033
- const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
9034
- primaryMeasures
9035
- ];
9036
- const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
9037
- groupId += alias;
9038
- groupChildren.push({
9039
- id: `${index}-primary`,
9040
- alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
9041
- children: arrPrimaryMeasures
9042
- });
8725
+ const isOtherEncoding = item.encoding && isCommonMeasureEncoding(encoding);
8726
+ ensureParentIdInitialized(parentId, measuresByView, parentIds);
8727
+ if (isPrimaryYAxis) {
8728
+ measuresByView[parentId].push(item);
8729
+ if (!isDualAxisChartType(item.chartType)) item.chartType = DEFAULT_DUAL_CHART_TYPE.primary;
8730
+ } else if (isSecondaryYAxis) {
8731
+ measuresByView[parentId].push(item);
8732
+ if (!isDualAxisChartType(item.chartType)) item.chartType = DEFAULT_DUAL_CHART_TYPE.secondary;
8733
+ } else if (!isOtherEncoding) {
8734
+ const primaryCount = measuresByView[parentId].filter((m)=>'primaryYAxis' === m.encoding).length;
8735
+ item.encoding = 0 === primaryCount ? 'primaryYAxis' : 'secondaryYAxis';
8736
+ if (!isDualAxisChartType(item.chartType)) item.chartType = 'primaryYAxis' === item.encoding ? DEFAULT_DUAL_CHART_TYPE.primary : DEFAULT_DUAL_CHART_TYPE.secondary;
8737
+ measuresByView[parentId].push(item);
9043
8738
  }
9044
- if (secondaryMeasures) {
9045
- const arrSecondaryMeasures = Array.isArray(secondaryMeasures) ? secondaryMeasures : [
9046
- secondaryMeasures
9047
- ];
9048
- const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
9049
- groupId += alias;
9050
- groupChildren.push({
9051
- id: `${index}-secondary`,
9052
- alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
9053
- children: arrSecondaryMeasures
9054
- });
9055
- }
9056
- return {
9057
- id: groupId,
9058
- alias: groupId,
9059
- children: groupChildren
9060
- };
9061
- });
9062
- if (1 === dualMeasures.length) return measureTree[0].children || [];
9063
- return measureTree;
9064
- };
9065
- const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
9066
- const dualMeasures = [];
9067
- const encodedMeasures = [];
9068
- measures.forEach((item)=>{
9069
- const id = item.parentId || DEFAULT_PARENT_ID;
9070
- if (!dualMeasures.find((d)=>d.id === id)) dualMeasures.push({
9071
- id,
9072
- primaryMeasures: [],
9073
- secondaryMeasures: []
9074
- });
9075
- const dualChart = dualMeasures.find((d)=>d.id === id);
9076
- if (!dualChart || !Array.isArray(dualChart.primaryMeasures) || !Array.isArray(dualChart.secondaryMeasures)) return;
9077
- const encoding = item.encoding;
9078
- const isPrimaryYAxis = 'primaryYAxis' === encoding;
9079
- const isSecondaryYAxis = 'secondaryYAxis' === encoding;
9080
- const isOtherEncoding = item.encoding && [
9081
- 'color',
9082
- 'label',
9083
- 'tooltip',
9084
- 'detail'
9085
- ].includes(item.encoding);
9086
- if (isPrimaryYAxis) dualChart.primaryMeasures.push(item);
9087
- else if (isSecondaryYAxis) dualChart.secondaryMeasures.push(item);
9088
- else if (isOtherEncoding) encodedMeasures.push(item);
9089
- else if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
9090
- else dualChart.secondaryMeasures.push(item);
9091
- });
9092
- const res = dualMeasuresToMeasureTree(dualMeasures);
9093
- if (encodedMeasures.length) encodedMeasures.forEach((m)=>{
9094
- res.push(m);
9095
- });
9096
- return res;
9097
- };
9098
- const checkSingleViewMultiMeasures = (measures = [])=>measures.length <= 1 && (measures[0].children ?? []).length <= 1;
9099
- const dualAxis_hasMultipleMeasureInSingleView = (measures = [])=>{
9100
- const depth = measureDepth(measures);
9101
- if (depth >= 3) return measures.some((m)=>m && m.children && !checkSingleViewMultiMeasures(m.children));
9102
- if (2 === depth) return !checkSingleViewMultiMeasures(measures);
9103
- if (1 === depth) return measures.length >= 1;
9104
- return false;
8739
+ }
8740
+ advancedVSeed.reshapeMeasures = parentIds.map((pid)=>measuresByView[pid]).filter((m)=>m.length > 0);
8741
+ return advancedVSeed;
9105
8742
  };
9106
8743
  const defaultEncodingForDualAxis = (advancedVSeed)=>{
9107
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
9108
- const measures = findAllMeasures(vseedMeasures);
8744
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
9109
8745
  const encoding = {};
9110
- dualAxis_generateDefaultDimensionEncoding(dimensions, encoding, dualAxis_hasMultipleMeasureInSingleView(vseedMeasures));
8746
+ dualAxis_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
9111
8747
  dualAxis_generateDefaultMeasureEncoding(measures, encoding);
9112
8748
  return {
9113
8749
  ...advancedVSeed,
@@ -9115,12 +8751,11 @@
9115
8751
  };
9116
8752
  };
9117
8753
  const encodingForDualAxis = (advancedVSeed)=>{
9118
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
9119
- const measures = findAllMeasures(vseedMeasures);
8754
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
9120
8755
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
9121
8756
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
9122
8757
  const encoding = {};
9123
- const hasMulti = dualAxis_hasMultipleMeasureInSingleView(vseedMeasures);
8758
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
9124
8759
  if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding, hasMulti);
9125
8760
  else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
9126
8761
  if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
@@ -9179,34 +8814,37 @@
9179
8814
  const { vseed } = context;
9180
8815
  const { dataset } = vseed;
9181
8816
  const { encoding, chartType } = advancedVSeed;
9182
- const measures = (advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? []).filter((m)=>m && m.children);
8817
+ const measures = advancedVSeed.reshapeMeasures?.[0] ?? [];
9183
8818
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
9184
- if (measures.length > 2) throw new Error('measures can not be more than 2 groups in dualAxis');
9185
8819
  const foldInfoList = [];
9186
8820
  const unfoldInfoList = [];
9187
8821
  const datasets = [];
9188
- const primaryMeasures = measures[0];
9189
- const secondaryMeasures = measures[1] || [];
9190
- if (primaryMeasures && primaryMeasures.children) {
9191
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(primaryMeasures.children, (item)=>item.id), encoding, {
8822
+ const primaryMeasures = measures.filter((m)=>'primaryYAxis' === m.encoding);
8823
+ const secondaryMeasures = measures.filter((m)=>'secondaryYAxis' === m.encoding);
8824
+ const primaryChartTypes = chunk_QJLMYOTX_i(primaryMeasures.map((m)=>m.chartType));
8825
+ const secondaryChartTypes = chunk_QJLMYOTX_i(secondaryMeasures.map((m)=>m.chartType));
8826
+ if (!primaryChartTypes.length) primaryChartTypes.push(DEFAULT_DUAL_CHART_TYPE.primary);
8827
+ if (!secondaryChartTypes.length) secondaryChartTypes.push(DEFAULT_DUAL_CHART_TYPE.secondary);
8828
+ primaryChartTypes.forEach((chartType)=>{
8829
+ const primaryResult = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(primaryMeasures.filter((m)=>m.chartType === chartType), (item)=>item.id), encoding, {
9192
8830
  colorItemAsId: false,
9193
8831
  foldMeasureValue: FoldPrimaryMeasureValue,
9194
8832
  colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
9195
8833
  });
9196
- datasets.push(newDataset);
9197
- foldInfoList.push(foldInfo);
9198
- unfoldInfoList.push(unfoldInfo);
9199
- }
9200
- if (secondaryMeasures && secondaryMeasures.children) {
9201
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(secondaryMeasures.children, (item)=>item.id), encoding, {
8834
+ datasets.push(primaryResult.dataset);
8835
+ foldInfoList.push(primaryResult.foldInfo);
8836
+ unfoldInfoList.push(primaryResult.unfoldInfo);
8837
+ });
8838
+ secondaryChartTypes.forEach((chartType)=>{
8839
+ const secondaryResult = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(secondaryMeasures.filter((m)=>m.chartType === chartType), (item)=>item.id), encoding, {
9202
8840
  colorItemAsId: false,
9203
8841
  foldMeasureValue: FoldSecondaryMeasureValue,
9204
8842
  colorMeasureId: getColorMeasureId(advancedVSeed, vseed)
9205
8843
  });
9206
- datasets.push(newDataset);
9207
- foldInfoList.push(foldInfo);
9208
- unfoldInfoList.push(unfoldInfo);
9209
- }
8844
+ datasets.push(secondaryResult.dataset);
8845
+ foldInfoList.push(secondaryResult.foldInfo);
8846
+ unfoldInfoList.push(secondaryResult.unfoldInfo);
8847
+ });
9210
8848
  const unfoldInfo = {
9211
8849
  ...unfoldInfoList[0],
9212
8850
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
@@ -9236,46 +8874,43 @@
9236
8874
  const { vseed } = context;
9237
8875
  const { dataset } = vseed;
9238
8876
  const { encoding, chartType } = advancedVSeed;
9239
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
8877
+ const reshapeMeasures = advancedVSeed.reshapeMeasures ?? [];
9240
8878
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
9241
- const allMeasures = findAllMeasures(measures);
8879
+ const allMeasuresIds = reshapeMeasures.flatMap((measureGroup)=>measureGroup.map((m)=>m.id));
9242
8880
  const datasetList = [];
9243
8881
  const datasetReshapeInfo = [];
9244
- const measureGroups = [];
9245
- const depth = measureDepth(measures);
9246
- if (3 === depth) measures.forEach((measure)=>{
9247
- if (measure.children) measureGroups.push(measure.children);
9248
- });
9249
- else if (2 === depth) measureGroups.push(measures.filter((m)=>m && m.children));
9250
- measureGroups.forEach((measures, index)=>{
9251
- if (measures.length > 2) throw new Error('measures can not be more than 2 groups in dualAxis');
8882
+ reshapeMeasures.forEach((measures, index)=>{
9252
8883
  const foldInfoList = [];
9253
8884
  const unfoldInfoList = [];
9254
8885
  const datasets = [];
9255
- const primaryMeasures = measures[0];
9256
- const secondaryMeasures = measures[1] || [];
9257
- if (primaryMeasures && primaryMeasures.children) {
9258
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(primaryMeasures.children, (item)=>item.id), encoding, {
8886
+ const primaryMeasures = measures.filter((m)=>'primaryYAxis' === m.encoding);
8887
+ const secondaryMeasures = measures.filter((m)=>'secondaryYAxis' === m.encoding);
8888
+ const primaryChartTypes = chunk_QJLMYOTX_i(primaryMeasures.map((m)=>m.chartType));
8889
+ const secondaryChartTypes = chunk_QJLMYOTX_i(secondaryMeasures.map((m)=>m.chartType));
8890
+ if (!primaryChartTypes.length) primaryChartTypes.push(DEFAULT_DUAL_CHART_TYPE.primary);
8891
+ if (!secondaryChartTypes.length) secondaryChartTypes.push(DEFAULT_DUAL_CHART_TYPE.secondary);
8892
+ primaryChartTypes.forEach((chartType)=>{
8893
+ const primaryResult = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(primaryMeasures.filter((m)=>m.chartType === chartType), (item)=>item.id), encoding, {
9259
8894
  colorItemAsId: false,
9260
8895
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
9261
8896
  colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
9262
- omitIds: allMeasures.map((item)=>item.id)
8897
+ omitIds: allMeasuresIds
9263
8898
  });
9264
- datasets.push(newDataset);
9265
- foldInfoList.push(foldInfo);
9266
- unfoldInfoList.push(unfoldInfo);
9267
- }
9268
- if (secondaryMeasures && secondaryMeasures.children) {
9269
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(secondaryMeasures.children, (item)=>item.id), encoding, {
8899
+ datasets.push(primaryResult.dataset);
8900
+ foldInfoList.push(primaryResult.foldInfo);
8901
+ unfoldInfoList.push(primaryResult.unfoldInfo);
8902
+ });
8903
+ secondaryChartTypes.forEach((chartType)=>{
8904
+ const secondaryResult = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(secondaryMeasures.filter((m)=>m.chartType === chartType), (item)=>item.id), encoding, {
9270
8905
  colorItemAsId: false,
9271
8906
  foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`,
9272
8907
  colorMeasureId: getColorMeasureId(advancedVSeed, vseed),
9273
- omitIds: allMeasures.map((item)=>item.id)
8908
+ omitIds: allMeasuresIds
9274
8909
  });
9275
- datasets.push(newDataset);
9276
- foldInfoList.push(foldInfo);
9277
- unfoldInfoList.push(unfoldInfo);
9278
- }
8910
+ datasets.push(secondaryResult.dataset);
8911
+ foldInfoList.push(secondaryResult.foldInfo);
8912
+ unfoldInfoList.push(secondaryResult.unfoldInfo);
8913
+ });
9279
8914
  const unfoldInfo = {
9280
8915
  ...unfoldInfoList[0],
9281
8916
  colorItems: unfoldInfoList.flatMap((d)=>d.colorItems),
@@ -9313,7 +8948,6 @@
9313
8948
  'legend',
9314
8949
  'tooltip',
9315
8950
  'xAxis',
9316
- 'dualChartType',
9317
8951
  'alignTicks',
9318
8952
  'primaryYAxis',
9319
8953
  'secondaryYAxis',
@@ -9344,11 +8978,6 @@
9344
8978
  ], [
9345
8979
  buildMeasuresForDualAxis,
9346
8980
  encodingForDualAxis,
9347
- pickMeasuresForReshape([
9348
- 'tooltip',
9349
- 'label',
9350
- 'color'
9351
- ]),
9352
8981
  pickDimensionsForReshape
9353
8982
  ]),
9354
8983
  pivotAdapter([
@@ -9363,7 +8992,7 @@
9363
8992
  markStyle_markStyle,
9364
8993
  annotation_annotation
9365
8994
  ];
9366
- const series_series = (...args)=>{
8995
+ const series_series = (pipeByAxis, pipes)=>{
9367
8996
  const result = {
9368
8997
  type: 'common',
9369
8998
  padding: 0,
@@ -9374,11 +9003,28 @@
9374
9003
  ]
9375
9004
  };
9376
9005
  return (_, context)=>{
9377
- result.series = args.map((pipeline)=>execPipeline(pipeline, context, {}));
9006
+ const { advancedVSeed } = context;
9007
+ const { datasetReshapeInfo, reshapeMeasures = [] } = advancedVSeed;
9008
+ const { foldInfoList = [], index } = datasetReshapeInfo[0];
9009
+ result.series = foldInfoList.map((foldInfo)=>{
9010
+ const measureId = Object.keys(foldInfo.foldMap)[0];
9011
+ const axisType = foldInfo.measureValue === `${FoldPrimaryMeasureValue}${index}` ? 'primary' : 'secondary';
9012
+ const measure = (reshapeMeasures[index] ?? []).find((m)=>m.id === measureId);
9013
+ const options = {
9014
+ axisType,
9015
+ chartType: measure?.chartType ?? ('primary' === axisType ? DEFAULT_DUAL_CHART_TYPE.primary : DEFAULT_DUAL_CHART_TYPE.secondary),
9016
+ foldInfo
9017
+ };
9018
+ const pipeline = [
9019
+ ...pipeByAxis.map((p)=>p(options)),
9020
+ ...pipes
9021
+ ];
9022
+ return execPipeline(pipeline, context, {});
9023
+ });
9378
9024
  return result;
9379
9025
  };
9380
9026
  };
9381
- const seriesDualAxis = (...args)=>{
9027
+ const seriesDualAxis = (pipeByAxis, pipes)=>{
9382
9028
  const result = {
9383
9029
  type: 'common',
9384
9030
  padding: 0,
@@ -9389,129 +9035,52 @@
9389
9035
  }
9390
9036
  ]
9391
9037
  };
9392
- const createDualContext = (context, index)=>{
9393
- const { advancedVSeed } = context;
9394
- const dataset = advancedVSeed.dataset[index];
9395
- return {
9396
- ...context,
9397
- advancedVSeed: {
9398
- ...advancedVSeed,
9399
- dataset: dataset
9400
- }
9401
- };
9402
- };
9403
9038
  return (_, context)=>{
9404
- result.series = args.map((pipeline, index)=>{
9405
- const seriesContext = createDualContext(context, index);
9039
+ const { advancedVSeed } = context;
9040
+ const { datasetReshapeInfo, dataset, reshapeMeasures = [] } = advancedVSeed;
9041
+ result.series = dataset.map((d, index)=>{
9042
+ const seriesContext = {
9043
+ ...context,
9044
+ advancedVSeed: {
9045
+ ...advancedVSeed,
9046
+ dataset: d
9047
+ }
9048
+ };
9049
+ const foldInfo = datasetReshapeInfo[0].foldInfoList[index];
9050
+ const measureId = Object.keys(foldInfo.foldMap)[0];
9051
+ const axisType = foldInfo.measureValue === FoldPrimaryMeasureValue ? 'primary' : 'secondary';
9052
+ const measure = (reshapeMeasures[0] ?? []).find((m)=>m.id === measureId);
9053
+ const options = {
9054
+ axisType,
9055
+ chartType: measure?.chartType ?? ('primary' === axisType ? DEFAULT_DUAL_CHART_TYPE.primary : DEFAULT_DUAL_CHART_TYPE.secondary),
9056
+ foldInfo
9057
+ };
9058
+ const pipeline = [
9059
+ ...pipeByAxis.map((p)=>p(options)),
9060
+ ...pipes
9061
+ ];
9406
9062
  return execPipeline(pipeline, seriesContext, {});
9407
9063
  });
9408
9064
  return result;
9409
9065
  };
9410
9066
  };
9411
- const initDualAxisPrimary = (spec, context)=>{
9412
- const result = {
9413
- ...spec
9414
- };
9415
- const { advancedVSeed } = context;
9416
- const { datasetReshapeInfo } = advancedVSeed;
9417
- const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
9418
- result.id = `${id}-primary-series`;
9419
- result.type = 'bar';
9420
- result.direction = 'vertical';
9421
- result.xField = unfoldInfo.encodingX;
9422
- result.seriesField = unfoldInfo.encodingColorId;
9423
- result.yField = foldInfoList?.[0].measureValue;
9424
- result.animation = true;
9425
- return result;
9426
- };
9427
- const initDualAxisSecondary = (spec, context)=>{
9428
- const result = {
9429
- ...spec
9430
- };
9431
- const { advancedVSeed, vseed } = context;
9432
- const { datasetReshapeInfo } = advancedVSeed;
9433
- const { unfoldInfo, foldInfoList, id } = datasetReshapeInfo[0];
9434
- result.id = `${id}-secondary-series`;
9435
- result.type = 'line';
9436
- result.direction = 'vertical';
9437
- result.xField = unfoldInfo.encodingX;
9438
- if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
9439
- result.seriesField = isLinearColor(advancedVSeed, vseed) ? unfoldInfo.encodingDetail : unfoldInfo.encodingColorId;
9440
- result.animation = true;
9441
- return result;
9442
- };
9443
- const DEFAULT_DUAL_CHART_TYPE = {
9444
- primary: 'column',
9445
- secondary: 'line'
9446
- };
9447
- const dualChartTypePrimary = (spec, context)=>{
9448
- const result = {
9449
- ...spec,
9450
- zIndex: 1001
9451
- };
9452
- const { advancedVSeed, vseed } = context;
9453
- const { chartType } = vseed;
9454
- const { datasetReshapeInfo } = advancedVSeed;
9455
- const index = datasetReshapeInfo[0].index;
9456
- const config = advancedVSeed.config?.[chartType]?.dualChartType || DEFAULT_DUAL_CHART_TYPE;
9457
- const primary = (Array.isArray(config) ? config[index]?.primary || config[0]?.primary : config.primary) ?? DEFAULT_DUAL_CHART_TYPE.primary;
9458
- const secondary = (Array.isArray(config) ? config[index]?.secondary || config[0]?.secondary : config.secondary) ?? DEFAULT_DUAL_CHART_TYPE.secondary;
9459
- const bothColumn = 'column' === primary && 'column' === secondary;
9460
- const type = bothColumn ? 'columnParallel' : primary;
9461
- switch(type){
9462
- case 'line':
9463
- result.type = 'line';
9464
- break;
9465
- case 'column':
9466
- result.type = 'bar';
9467
- result.zIndex = 1000;
9468
- break;
9469
- case 'columnParallel':
9470
- {
9471
- const columnSpec = result;
9472
- if (Array.isArray(columnSpec.xField)) columnSpec.xField.push(datasetReshapeInfo[0].unfoldInfo.encodingDetail);
9473
- else if (columnSpec.xField) columnSpec.xField = [
9474
- columnSpec.xField,
9475
- datasetReshapeInfo[0].unfoldInfo.encodingDetail
9476
- ];
9477
- columnSpec.type = 'bar';
9478
- result.zIndex = 1000;
9479
- break;
9480
- }
9481
- case 'columnPercent':
9482
- result.type = 'bar';
9483
- result.percent = true;
9484
- result.zIndex = 1000;
9485
- break;
9486
- case 'area':
9487
- result.type = 'area';
9488
- break;
9489
- case 'areaPercent':
9490
- result.type = 'area';
9491
- result.percent = true;
9492
- break;
9493
- case 'scatter':
9494
- result.type = 'scatter';
9495
- break;
9496
- default:
9497
- result.type = primary;
9498
- }
9499
- return result;
9500
- };
9501
- const dualChartTypeSecondary = (spec, context)=>{
9502
- const result = {
9503
- ...spec,
9504
- zIndex: 1001
9067
+ const initDualAxis = (options)=>(spec, context)=>{
9068
+ const result = {
9069
+ ...spec
9070
+ };
9071
+ const { advancedVSeed, vseed } = context;
9072
+ const { datasetReshapeInfo } = advancedVSeed;
9073
+ const { unfoldInfo, id } = datasetReshapeInfo[0];
9074
+ result.id = `${id}-${options.axisType}-${options.chartType}`;
9075
+ result.type = 'line' === options.chartType ? 'line' : 'bar';
9076
+ result.direction = 'vertical';
9077
+ result.xField = unfoldInfo.encodingX;
9078
+ result.seriesField = isLinearColor(advancedVSeed, vseed) ? unfoldInfo.encodingDetail : unfoldInfo.encodingColorId;
9079
+ result.yField = options.foldInfo.measureValue;
9080
+ result.animation = true;
9081
+ return result;
9505
9082
  };
9506
- const { advancedVSeed, vseed } = context;
9507
- const { chartType } = vseed;
9508
- const { datasetReshapeInfo } = advancedVSeed;
9509
- const config = advancedVSeed.config?.[chartType]?.dualChartType || DEFAULT_DUAL_CHART_TYPE;
9510
- const index = datasetReshapeInfo[0].index;
9511
- const primary = (Array.isArray(config) ? config[index]?.primary || config[0]?.primary : config.primary) ?? DEFAULT_DUAL_CHART_TYPE.primary;
9512
- const secondary = (Array.isArray(config) ? config[index]?.secondary || config[0]?.secondary : config.secondary) ?? DEFAULT_DUAL_CHART_TYPE.secondary;
9513
- const bothColumn = 'column' === primary && 'column' === secondary;
9514
- const type = bothColumn ? 'columnParallel' : secondary;
9083
+ function applyChartType(result, type, datasetReshapeInfo) {
9515
9084
  switch(type){
9516
9085
  case 'line':
9517
9086
  result.type = 'line';
@@ -9548,181 +9117,105 @@
9548
9117
  result.type = 'scatter';
9549
9118
  break;
9550
9119
  default:
9551
- result.type = secondary ?? DEFAULT_DUAL_CHART_TYPE.secondary;
9552
- }
9553
- return result;
9554
- };
9555
- const datasetPrimary = (spec, context)=>{
9556
- const { advancedVSeed, vseed } = context;
9557
- const { analysis, datasetReshapeInfo } = advancedVSeed;
9558
- const orderMapping = analysis?.orderMapping || {};
9559
- const { unfoldInfo } = datasetReshapeInfo[0];
9560
- const x = unfoldInfo.encodingX;
9561
- const colorId = unfoldInfo.encodingColorId;
9562
- const id = datasetReshapeInfo[0].id;
9563
- const fields = {};
9564
- if (x) {
9565
- const order = orderMapping[x];
9566
- if (order) fields[x] = {
9567
- sortIndex: 0,
9568
- domain: order,
9569
- lockStatisticsByDomain: true
9570
- };
9571
- else fields[x] = {
9572
- sortIndex: 0
9573
- };
9120
+ result.type = type;
9574
9121
  }
9575
- if (colorId) {
9576
- const order = orderMapping[colorId];
9577
- if (order) fields[colorId] = {
9578
- sortIndex: 0,
9579
- domain: order,
9580
- lockStatisticsByDomain: true
9581
- };
9582
- else fields[colorId] = {
9583
- sortIndex: 0
9122
+ }
9123
+ const dualChartType = (options)=>(spec, context)=>{
9124
+ const result = {
9125
+ ...spec,
9126
+ zIndex: 1001
9584
9127
  };
9585
- }
9586
- return {
9587
- ...spec,
9588
- data: {
9589
- id: `${id}-primary-dataset`,
9590
- values: chatType_isPivotChart(vseed) ? void 0 : advancedVSeed.dataset,
9591
- fields: fields
9592
- }
9128
+ const { advancedVSeed } = context;
9129
+ const { datasetReshapeInfo, reshapeMeasures = [] } = advancedVSeed;
9130
+ const index = datasetReshapeInfo[0].index;
9131
+ const chartTypes = reshapeMeasures[index].map((m)=>m.chartType);
9132
+ const type = chartTypes.every((ct)=>'column' === ct) && reshapeMeasures[index].length > 1 && reshapeMeasures[index].some((m)=>'primaryYAxis' === m.encoding) && reshapeMeasures[index].some((m)=>'secondaryYAxis' === m.encoding) ? 'columnParallel' : options.chartType;
9133
+ applyChartType(result, type, datasetReshapeInfo);
9134
+ return result;
9593
9135
  };
9594
- };
9595
- const datasetSecondary = (spec, context)=>{
9596
- const { advancedVSeed, vseed } = context;
9597
- const { analysis, datasetReshapeInfo } = advancedVSeed;
9598
- const orderMapping = analysis?.orderMapping || {};
9599
- const { unfoldInfo } = datasetReshapeInfo[0];
9600
- const x = unfoldInfo.encodingX;
9601
- const colorId = unfoldInfo.encodingColorId;
9602
- const id = datasetReshapeInfo[0].id;
9603
- const fields = {};
9604
- if (x) {
9605
- const order = orderMapping[x];
9606
- if (order) fields[x] = {
9607
- sortIndex: 0,
9608
- domain: order,
9609
- lockStatisticsByDomain: true
9610
- };
9611
- else fields[x] = {
9612
- sortIndex: 0
9613
- };
9614
- }
9615
- if (colorId) {
9616
- const order = orderMapping[colorId];
9617
- if (order) fields[colorId] = {
9618
- sortIndex: 0,
9619
- domain: order,
9620
- lockStatisticsByDomain: true
9621
- };
9622
- else fields[colorId] = {
9623
- sortIndex: 0
9624
- };
9625
- }
9626
- return {
9627
- ...spec,
9628
- data: {
9629
- id: `${id}-secondary-dataset`,
9630
- values: chatType_isPivotChart(vseed) ? void 0 : advancedVSeed.dataset,
9631
- fields: fields
9136
+ const datasetDualAxis = (options)=>(spec, context)=>{
9137
+ const { advancedVSeed, vseed } = context;
9138
+ const { analysis, datasetReshapeInfo } = advancedVSeed;
9139
+ const orderMapping = analysis?.orderMapping || {};
9140
+ const { unfoldInfo } = datasetReshapeInfo[0];
9141
+ const x = unfoldInfo.encodingX;
9142
+ const colorId = unfoldInfo.encodingColorId;
9143
+ const id = datasetReshapeInfo[0].id;
9144
+ const fields = {};
9145
+ if (x) {
9146
+ const order = orderMapping[x];
9147
+ if (order) fields[x] = {
9148
+ sortIndex: 0,
9149
+ domain: order,
9150
+ lockStatisticsByDomain: true
9151
+ };
9152
+ else fields[x] = {
9153
+ sortIndex: 0
9154
+ };
9632
9155
  }
9633
- };
9634
- };
9635
- const labelPrimary = (spec, context)=>{
9636
- const result = {
9637
- ...spec
9638
- };
9639
- const { advancedVSeed, vseed } = context;
9640
- const { datasetReshapeInfo, encoding } = advancedVSeed;
9641
- const { chartType } = advancedVSeed;
9642
- const baseConfig = advancedVSeed.config[chartType];
9643
- const foldInfoList = datasetReshapeInfo[0].foldInfoList;
9644
- result.label = buildLabel(baseConfig.label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
9645
- foldInfoList[0]
9646
- ]);
9647
- result.label.zIndex = 1002;
9648
- return result;
9649
- };
9650
- const labelSecondary = (spec, context)=>{
9651
- const result = {
9652
- ...spec
9653
- };
9654
- const { advancedVSeed, vseed } = context;
9655
- const { datasetReshapeInfo, encoding } = advancedVSeed;
9656
- const { chartType } = advancedVSeed;
9657
- const baseConfig = advancedVSeed.config[chartType];
9658
- const foldInfoList = datasetReshapeInfo[0].foldInfoList;
9659
- result.label = buildLabel(baseConfig.label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
9660
- foldInfoList[1]
9661
- ]);
9662
- result.label.zIndex = 1002;
9663
- return result;
9664
- };
9665
- const tooltipPrimary = (spec, context)=>{
9666
- const result = {
9667
- ...spec
9668
- };
9669
- const { advancedVSeed, vseed } = context;
9670
- const { measures, datasetReshapeInfo, chartType, dimensions, encoding } = advancedVSeed;
9671
- const baseConfig = advancedVSeed.config[chartType];
9672
- const { tooltip = {
9673
- enable: true
9674
- } } = baseConfig;
9675
- const { enable } = tooltip;
9676
- const foldInfoList = datasetReshapeInfo[0].foldInfoList;
9677
- const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
9678
- result.tooltip = {
9679
- visible: enable,
9680
- mark: {
9681
- title: {
9682
- visible: false
9683
- },
9684
- content: createMarkContent(encoding.tooltip || [], dimensions, findAllMeasures(vseed.measures), foldInfoList[0], unfoldInfo)
9685
- },
9686
- dimension: {
9687
- title: {
9688
- visible: true
9689
- },
9690
- content: createDimensionContent(dimensions, measures, foldInfoList[0], unfoldInfo)
9156
+ if (colorId) {
9157
+ const order = orderMapping[colorId];
9158
+ if (order) fields[colorId] = {
9159
+ sortIndex: 0,
9160
+ domain: order,
9161
+ lockStatisticsByDomain: true
9162
+ };
9163
+ else fields[colorId] = {
9164
+ sortIndex: 0
9165
+ };
9691
9166
  }
9167
+ return {
9168
+ ...spec,
9169
+ data: {
9170
+ id: `${id}-${options.axisType}-${options.chartType}`,
9171
+ values: chatType_isPivotChart(vseed) ? void 0 : advancedVSeed.dataset,
9172
+ fields: fields
9173
+ }
9174
+ };
9692
9175
  };
9693
- return result;
9694
- };
9695
- const tooltipSecondary = (spec, context)=>{
9696
- const result = {
9697
- ...spec
9176
+ const labelDualAxis = (options)=>(spec, context)=>{
9177
+ const result = {
9178
+ ...spec
9179
+ };
9180
+ const { advancedVSeed, vseed } = context;
9181
+ const { encoding } = advancedVSeed;
9182
+ const { chartType } = advancedVSeed;
9183
+ const baseConfig = advancedVSeed.config[chartType];
9184
+ result.label = buildLabel(baseConfig.label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
9185
+ options.foldInfo
9186
+ ]);
9187
+ result.label.zIndex = 1002;
9188
+ return result;
9698
9189
  };
9699
- const { advancedVSeed, vseed } = context;
9700
- const { measures, datasetReshapeInfo, chartType, dimensions, encoding } = advancedVSeed;
9701
- const baseConfig = advancedVSeed.config[chartType];
9702
- const { tooltip = {
9703
- enable: true
9704
- } } = baseConfig;
9705
- const { enable } = tooltip;
9706
- if (chunk_JK3VNB42_n(datasetReshapeInfo[0].foldInfoList?.[1])) return result;
9707
- const foldInfoList = datasetReshapeInfo[0].foldInfoList;
9708
- const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
9709
- result.tooltip = {
9710
- visible: enable,
9711
- mark: {
9712
- title: {
9713
- visible: false
9714
- },
9715
- content: createMarkContent(encoding.tooltip || [], dimensions, findAllMeasures(vseed.measures), foldInfoList[1], unfoldInfo)
9716
- },
9717
- dimension: {
9718
- title: {
9719
- visible: true
9190
+ const tooltipOfDualAxisSeries = (options)=>(spec, context)=>{
9191
+ const result = {
9192
+ ...spec
9193
+ };
9194
+ const { advancedVSeed, vseed } = context;
9195
+ const { measures = [], datasetReshapeInfo, chartType, dimensions = [], encoding } = advancedVSeed;
9196
+ const baseConfig = advancedVSeed.config[chartType];
9197
+ const { tooltip = {
9198
+ enable: true
9199
+ } } = baseConfig;
9200
+ const { enable } = tooltip;
9201
+ const unfoldInfo = datasetReshapeInfo[0].unfoldInfo;
9202
+ result.tooltip = {
9203
+ visible: enable,
9204
+ mark: {
9205
+ title: {
9206
+ visible: false
9207
+ },
9208
+ content: createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, options.foldInfo, unfoldInfo)
9720
9209
  },
9721
- content: createDimensionContent(dimensions, measures, foldInfoList[1], unfoldInfo)
9722
- }
9210
+ dimension: {
9211
+ title: {
9212
+ visible: true
9213
+ },
9214
+ content: createDimensionContent(dimensions, measures, options.foldInfo, unfoldInfo)
9215
+ }
9216
+ };
9217
+ return result;
9723
9218
  };
9724
- return result;
9725
- };
9726
9219
  const tooltipDualAxis = (spec, context)=>{
9727
9220
  const result = {
9728
9221
  ...spec
@@ -9761,25 +9254,29 @@
9761
9254
  };
9762
9255
  const { advancedVSeed, vseed } = context;
9763
9256
  const { chartType } = vseed;
9764
- const { datasetReshapeInfo, encoding, measures, dimensions } = advancedVSeed;
9257
+ const { datasetReshapeInfo, reshapeMeasures = [] } = advancedVSeed;
9765
9258
  const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
9766
9259
  const primaryYAxis = advancedVSeed.config?.[chartType]?.primaryYAxis;
9767
9260
  const yAxisConfig = Array.isArray(primaryYAxis) ? primaryYAxis[index] || primaryYAxis[0] : primaryYAxis;
9768
9261
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
9769
9262
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
9770
- if (chunk_JK3VNB42_n(foldInfoList?.[0])) return result;
9771
- const isEmptySecondary = chunk_VCYTMP4D_n(foldInfoList?.[0].foldMap);
9263
+ if (!foldInfoList) return result;
9264
+ const primaryFoldInfoList = foldInfoList.filter((f)=>f.measureValue.startsWith(FoldPrimaryMeasureValue));
9265
+ const isEmpty = !primaryFoldInfoList.length || primaryFoldInfoList.every((foldInfo)=>!Object.keys(foldInfo.foldMap).length);
9772
9266
  const id = `${reshapeInfoId}-primary-axis`;
9773
- const seriesIds = [
9774
- `${reshapeInfoId}-primary-series`,
9775
- `${reshapeInfoId}-secondary-series`
9776
- ];
9777
- const seriesId = alignTicksConfig ? seriesIds : seriesIds[0];
9267
+ const seriesId = alignTicksConfig ? spec.series.map((s)=>s.id) : spec.series.filter((s)=>s.yField.startsWith(FoldPrimaryMeasureValue)).map((s)=>s.id);
9778
9268
  if (!result.axes) result.axes = [];
9779
9269
  const { autoFormat, numFormat = {} } = yAxisConfig ?? {};
9780
9270
  const formatter = createNumFormatter(numFormat);
9781
9271
  const formatMethod = (value)=>createLinearFormat(value, autoFormat, numFormat, formatter);
9782
- const titleText = yAxisConfig?.title?.titleText || defaultTitleText(measures, dimensions, encoding.y);
9272
+ const measures = flatReshapeMeasures(reshapeMeasures);
9273
+ const measureIds = primaryFoldInfoList.reduce((res, foldInfo)=>{
9274
+ Object.keys(foldInfo.foldMap).forEach((k)=>{
9275
+ if (!res.includes(k)) res.push(k);
9276
+ });
9277
+ return res;
9278
+ }, []);
9279
+ const titleText = yAxisConfig?.title?.titleText || measures.filter((m)=>'primaryYAxis' === m.encoding && measureIds.includes(m.id)).map((m)=>m.alias ?? m.id).join(' & ');
9783
9280
  const linearAxis = {
9784
9281
  ...linearAxisStyle({
9785
9282
  ...yAxisConfig,
@@ -9789,7 +9286,7 @@
9789
9286
  id,
9790
9287
  seriesId
9791
9288
  }),
9792
- visible: isEmptySecondary ? false : yAxisConfig?.visible ?? true
9289
+ visible: isEmpty ? false : yAxisConfig?.visible ?? true
9793
9290
  };
9794
9291
  result.axes = [
9795
9292
  ...result.axes,
@@ -9803,30 +9300,28 @@
9803
9300
  };
9804
9301
  const { advancedVSeed, vseed } = context;
9805
9302
  const { chartType } = vseed;
9806
- const { datasetReshapeInfo, measures, dimensions, encoding } = advancedVSeed;
9303
+ const { datasetReshapeInfo, reshapeMeasures = [] } = advancedVSeed;
9807
9304
  const { index, id: reshapeInfoId, foldInfoList } = datasetReshapeInfo[0];
9808
9305
  const secondaryYAxis = advancedVSeed.config?.[chartType]?.secondaryYAxis;
9809
9306
  const yAxisConfig = Array.isArray(secondaryYAxis) ? secondaryYAxis[index] || secondaryYAxis[0] : secondaryYAxis;
9810
9307
  const alignTicks = advancedVSeed.config?.[chartType]?.alignTicks;
9811
9308
  const alignTicksConfig = Array.isArray(alignTicks) ? alignTicks[index] || alignTicks[0] : alignTicks;
9812
- if (chunk_JK3VNB42_n(foldInfoList?.[1])) return result;
9813
- const isEmptySecondary = chunk_VCYTMP4D_n(foldInfoList?.[1].foldMap);
9814
- const onlySecondary = chunk_VCYTMP4D_n(foldInfoList?.[0].foldMap) && !isEmptySecondary;
9309
+ if (!foldInfoList) return result;
9310
+ const secondaryFoldInfoList = foldInfoList.filter((f)=>f.measureValue.startsWith(FoldSecondaryMeasureValue));
9311
+ const isEmptySecondary = !secondaryFoldInfoList.length || secondaryFoldInfoList.every((foldInfo)=>!Object.keys(foldInfo.foldMap).length);
9312
+ const onlySecondary = !isEmptySecondary && foldInfoList.length && foldInfoList.every((f)=>f.measureValue.startsWith(FoldSecondaryMeasureValue) || 0 === Object.keys(f.foldMap).length);
9815
9313
  const sync = {
9816
9314
  axisId: `${reshapeInfoId}-primary-axis`,
9817
9315
  zeroAlign: true
9818
9316
  };
9819
9317
  const id = `${reshapeInfoId}-secondary-axis`;
9820
- const seriesIds = [
9821
- `${reshapeInfoId}-primary-series`,
9822
- `${reshapeInfoId}-secondary-series`
9823
- ];
9824
- const seriesId = alignTicksConfig ? seriesIds : seriesIds[1];
9318
+ const seriesId = alignTicksConfig ? spec.series.map((s)=>s.id) : spec.series.filter((s)=>s.yField.startsWith(FoldSecondaryMeasureValue)).map((s)=>s.id);
9825
9319
  if (!result.axes) result.axes = [];
9826
9320
  const { autoFormat, numFormat = {} } = yAxisConfig ?? {};
9827
9321
  const formatter = createNumFormatter(numFormat);
9828
9322
  const formatMethod = (value)=>createLinearFormat(value, autoFormat, numFormat, formatter);
9829
- const titleText = yAxisConfig?.title?.titleText || defaultTitleText(measures, dimensions, encoding.y);
9323
+ const measures = flatReshapeMeasures(reshapeMeasures);
9324
+ const titleText = yAxisConfig?.title?.titleText || measures.filter((m)=>'secondaryYAxis' === m.encoding).map((m)=>m.alias ?? m.id).join(' & ');
9830
9325
  const baseStyle = linearAxisStyle({
9831
9326
  ...yAxisConfig,
9832
9327
  orient: 'right',
@@ -9856,28 +9351,20 @@
9856
9351
  };
9857
9352
  const { advancedVSeed } = context;
9858
9353
  const { datasetReshapeInfo, chartType } = advancedVSeed;
9859
- const { unfoldInfo, id } = datasetReshapeInfo[0];
9354
+ const { unfoldInfo } = datasetReshapeInfo[0];
9860
9355
  const baseConfig = advancedVSeed.config[chartType];
9861
9356
  if (!baseConfig || !baseConfig.color) return result;
9862
9357
  const { color } = baseConfig;
9863
9358
  const { colorScheme, linearColorScheme } = color;
9864
9359
  result.color = {
9865
- type: 'linear',
9866
- range: linearColorScheme || colorScheme || [],
9867
- domain: [
9868
- {
9869
- dataId: `${id}-primary-dataset`,
9870
- fields: [
9871
- unfoldInfo.encodingColor
9872
- ]
9873
- },
9874
- {
9875
- dataId: `${id}-secondary-dataset`,
9360
+ type: 'linear',
9361
+ range: linearColorScheme || colorScheme || [],
9362
+ domain: spec.series.map((s)=>({
9363
+ dataId: s.data.id,
9876
9364
  fields: [
9877
9365
  unfoldInfo.encodingColor
9878
9366
  ]
9879
- }
9880
- ]
9367
+ }))
9881
9368
  };
9882
9369
  return result;
9883
9370
  };
@@ -9910,14 +9397,14 @@
9910
9397
  const annotationPointOfDualAxis = generateAnnotationPointPipe({
9911
9398
  findSelectedDatas: (dataset, s, spec, context)=>dataset.reduce((res, d)=>{
9912
9399
  const { advancedVSeed } = context;
9913
- const allMeasureIds = findAllMeasures(advancedVSeed.reshapeMeasures ?? advancedVSeed.measures).map((m)=>m.id);
9400
+ const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m)=>m.id);
9914
9401
  const pickedDatum = pickWithout(d, allMeasureIds.filter((id)=>id !== d[MeasureId]));
9915
9402
  if (selector_selector(pickedDatum, s)) res.push(pickedDatum);
9916
9403
  return res;
9917
9404
  }, []),
9918
9405
  generateMarkPoint: (datum, spec, context)=>{
9919
9406
  const { advancedVSeed } = context;
9920
- const allMeasureIds = findAllMeasures(advancedVSeed.reshapeMeasures ?? advancedVSeed.measures).map((m)=>m.id);
9407
+ const allMeasureIds = flatReshapeMeasures(advancedVSeed.reshapeMeasures ?? []).map((m)=>m.id);
9921
9408
  return spec.series?.map((s, index)=>({
9922
9409
  relativeSeriesIndex: index,
9923
9410
  coordinate: (data)=>data.find((item)=>isSubset(datum, item, allMeasureIds.filter((id)=>id !== item[MeasureId])))
@@ -9926,26 +9413,12 @@
9926
9413
  });
9927
9414
  const dualAxis = [
9928
9415
  seriesDualAxis([
9929
- initDualAxisPrimary,
9930
- dualChartTypePrimary,
9931
- datasetPrimary,
9932
- labelPrimary,
9933
- tooltipPrimary,
9934
- progressive,
9935
- barMaxWidth_barMaxWidth,
9936
- barGapInGroup_barGapInGroup,
9937
- stackCornerRadius_stackCornerRadius,
9938
- barStyleFilter(colorBarStyleFill(barStyle_barStyle)),
9939
- pointStyleFilter(colorPointStyleFill(pointStyle_pointStyle)),
9940
- pointStyleFilter(pointStateDimensionHover),
9941
- lineStyleFilter(colorLineStyleFill(lineStyle_lineStyle)),
9942
- areaStyleFilter(colorAreaStyleFill(areaStyle_areaStyle))
9416
+ initDualAxis,
9417
+ dualChartType,
9418
+ datasetDualAxis,
9419
+ labelDualAxis,
9420
+ tooltipOfDualAxisSeries
9943
9421
  ], [
9944
- initDualAxisSecondary,
9945
- dualChartTypeSecondary,
9946
- datasetSecondary,
9947
- labelSecondary,
9948
- tooltipSecondary,
9949
9422
  progressive,
9950
9423
  barMaxWidth_barMaxWidth,
9951
9424
  barGapInGroup_barGapInGroup,
@@ -9976,35 +9449,21 @@
9976
9449
  datasetPivot,
9977
9450
  pivotIndicators_pivotIndicators([
9978
9451
  series_series([
9979
- initDualAxisPrimary,
9980
- dualChartTypePrimary,
9981
- datasetPrimary,
9982
- labelPrimary,
9983
- tooltipPrimary,
9984
- progressive,
9985
- stackCornerRadius_stackCornerRadius,
9986
- barMaxWidth_barMaxWidth,
9987
- barGapInGroup_barGapInGroup,
9988
- colorBarStyleFill(barStyle_barStyle),
9989
- colorPointStyleFill(pointStyle_pointStyle),
9990
- pointStateDimensionHover,
9991
- colorLineStyleFill(lineStyle_lineStyle),
9992
- colorAreaStyleFill(areaStyle_areaStyle)
9452
+ initDualAxis,
9453
+ dualChartType,
9454
+ datasetDualAxis,
9455
+ labelDualAxis,
9456
+ tooltipOfDualAxisSeries
9993
9457
  ], [
9994
- initDualAxisSecondary,
9995
- dualChartTypeSecondary,
9996
- datasetSecondary,
9997
- labelSecondary,
9998
- tooltipSecondary,
9999
9458
  progressive,
10000
- stackCornerRadius_stackCornerRadius,
10001
9459
  barMaxWidth_barMaxWidth,
10002
9460
  barGapInGroup_barGapInGroup,
10003
- colorBarStyleFill(barStyle_barStyle),
10004
- colorPointStyleFill(pointStyle_pointStyle),
10005
- pointStateDimensionHover,
10006
- colorLineStyleFill(lineStyle_lineStyle),
10007
- colorAreaStyleFill(areaStyle_areaStyle)
9461
+ stackCornerRadius_stackCornerRadius,
9462
+ barStyleFilter(colorBarStyleFill(barStyle_barStyle)),
9463
+ pointStyleFilter(colorPointStyleFill(pointStyle_pointStyle)),
9464
+ pointStyleFilter(pointStateDimensionHover),
9465
+ lineStyleFilter(colorLineStyleFill(lineStyle_lineStyle)),
9466
+ areaStyleFilter(colorAreaStyleFill(areaStyle_areaStyle))
10008
9467
  ]),
10009
9468
  xBand,
10010
9469
  yLinearPrimary,
@@ -10032,10 +9491,9 @@
10032
9491
  Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
10033
9492
  };
10034
9493
  const defaultEncodingForPie = (advancedVSeed)=>{
10035
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10036
- const measures = findAllMeasures(vseedMeasures);
9494
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10037
9495
  const encoding = {};
10038
- pie_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
9496
+ pie_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
10039
9497
  pie_generateDefaultMeasureEncoding(measures, encoding);
10040
9498
  return {
10041
9499
  ...advancedVSeed,
@@ -10043,12 +9501,11 @@
10043
9501
  };
10044
9502
  };
10045
9503
  const encodingForPie = (advancedVSeed)=>{
10046
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10047
- const measures = findAllMeasures(vseedMeasures);
9504
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10048
9505
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
10049
9506
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
10050
9507
  const encoding = {};
10051
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
9508
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
10052
9509
  if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding, hasMulti);
10053
9510
  else pie_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
10054
9511
  if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
@@ -10104,16 +9561,17 @@
10104
9561
  defaultDimensions_defaultDimensions,
10105
9562
  defaultMeasureId_defaultMeasureId,
10106
9563
  encodingAdapter([
10107
- buildMeasures,
9564
+ buildMeasures([
9565
+ 'angle',
9566
+ 'detail'
9567
+ ]),
10108
9568
  defaultEncodingForPie
10109
9569
  ], [
10110
- buildMeasures,
10111
- encodingForPie,
10112
- pickMeasuresForReshape([
10113
- 'tooltip',
10114
- 'label',
10115
- 'color'
9570
+ buildMeasures([
9571
+ 'angle',
9572
+ 'detail'
10116
9573
  ]),
9574
+ encodingForPie,
10117
9575
  pickDimensionsForReshape
10118
9576
  ]),
10119
9577
  pivotAdapter([
@@ -10269,16 +9727,17 @@
10269
9727
  defaultDimensions_defaultDimensions,
10270
9728
  defaultMeasureId_defaultMeasureId,
10271
9729
  encodingAdapter([
10272
- buildMeasures,
9730
+ buildMeasures([
9731
+ 'angle',
9732
+ 'detail'
9733
+ ]),
10273
9734
  defaultEncodingForPie
10274
9735
  ], [
10275
- buildMeasures,
10276
- encodingForPie,
10277
- pickMeasuresForReshape([
10278
- 'tooltip',
10279
- 'label',
10280
- 'color'
9736
+ buildMeasures([
9737
+ 'angle',
9738
+ 'detail'
10281
9739
  ]),
9740
+ encodingForPie,
10282
9741
  pickDimensionsForReshape
10283
9742
  ]),
10284
9743
  pivotAdapter([
@@ -10360,10 +9819,9 @@
10360
9819
  Builder._specPipelineMap.donut = donutSpecPipeline;
10361
9820
  };
10362
9821
  const defaultEncodingForRose = (advancedVSeed)=>{
10363
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10364
- const measures = findAllMeasures(vseedMeasures);
9822
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10365
9823
  const encoding = {};
10366
- rose_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
9824
+ rose_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
10367
9825
  rose_generateDefaultMeasureEncoding(measures, encoding);
10368
9826
  return {
10369
9827
  ...advancedVSeed,
@@ -10371,12 +9829,11 @@
10371
9829
  };
10372
9830
  };
10373
9831
  const encodingForRose = (advancedVSeed)=>{
10374
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10375
- const measures = findAllMeasures(vseedMeasures);
9832
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10376
9833
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
10377
9834
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
10378
9835
  const encoding = {};
10379
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
9836
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
10380
9837
  if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding, hasMulti);
10381
9838
  else rose_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
10382
9839
  if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
@@ -10434,16 +9891,17 @@
10434
9891
  defaultDimensions_defaultDimensions,
10435
9892
  defaultMeasureId_defaultMeasureId,
10436
9893
  encodingAdapter([
10437
- buildMeasures,
9894
+ buildMeasures([
9895
+ 'angle',
9896
+ 'detail'
9897
+ ]),
10438
9898
  defaultEncodingForRose
10439
9899
  ], [
10440
- buildMeasures,
10441
- encodingForRose,
10442
- pickMeasuresForReshape([
10443
- 'tooltip',
10444
- 'label',
10445
- 'color'
9900
+ buildMeasures([
9901
+ 'angle',
9902
+ 'detail'
10446
9903
  ]),
9904
+ encodingForRose,
10447
9905
  pickDimensionsForReshape
10448
9906
  ]),
10449
9907
  pivotAdapter([
@@ -10587,16 +10045,17 @@
10587
10045
  defaultDimensions_defaultDimensions,
10588
10046
  defaultMeasureId_defaultMeasureId,
10589
10047
  encodingAdapter([
10590
- buildMeasures,
10048
+ buildMeasures([
10049
+ 'radius',
10050
+ 'detail'
10051
+ ]),
10591
10052
  defaultEncodingForRose
10592
10053
  ], [
10593
- buildMeasures,
10594
- encodingForRose,
10595
- pickMeasuresForReshape([
10596
- 'tooltip',
10597
- 'label',
10598
- 'color'
10054
+ buildMeasures([
10055
+ 'radius',
10056
+ 'detail'
10599
10057
  ]),
10058
+ encodingForRose,
10600
10059
  pickDimensionsForReshape
10601
10060
  ]),
10602
10061
  pivotAdapter([
@@ -10707,10 +10166,9 @@
10707
10166
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
10708
10167
  };
10709
10168
  const defaultEncodingForRadar = (advancedVSeed)=>{
10710
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10711
- const measures = findAllMeasures(vseedMeasures);
10169
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10712
10170
  const encoding = {};
10713
- radar_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
10171
+ radar_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
10714
10172
  radar_generateDefaultMeasureEncoding(measures, encoding);
10715
10173
  return {
10716
10174
  ...advancedVSeed,
@@ -10718,12 +10176,11 @@
10718
10176
  };
10719
10177
  };
10720
10178
  const encodingForRadar = (advancedVSeed)=>{
10721
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10722
- const measures = findAllMeasures(vseedMeasures);
10179
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10723
10180
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
10724
10181
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
10725
10182
  const encoding = {};
10726
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
10183
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
10727
10184
  if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding, hasMulti);
10728
10185
  else radar_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
10729
10186
  if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
@@ -10783,16 +10240,17 @@
10783
10240
  defaultDimensions_defaultDimensions,
10784
10241
  defaultMeasureId_defaultMeasureId,
10785
10242
  encodingAdapter([
10786
- buildMeasures,
10243
+ buildMeasures([
10244
+ 'radius',
10245
+ 'detail'
10246
+ ]),
10787
10247
  defaultEncodingForRadar
10788
10248
  ], [
10789
- buildMeasures,
10790
- encodingForRadar,
10791
- pickMeasuresForReshape([
10792
- 'tooltip',
10793
- 'label',
10794
- 'color'
10249
+ buildMeasures([
10250
+ 'radius',
10251
+ 'detail'
10795
10252
  ]),
10253
+ encodingForRadar,
10796
10254
  pickDimensionsForReshape
10797
10255
  ]),
10798
10256
  pivotAdapter([
@@ -10926,10 +10384,9 @@
10926
10384
  Builder._specPipelineMap.radar = radarSpecPipeline;
10927
10385
  };
10928
10386
  const defaultEncodingForFunnel = (advancedVSeed)=>{
10929
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10930
- const measures = findAllMeasures(vseedMeasures);
10387
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10931
10388
  const encoding = {};
10932
- funnel_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
10389
+ funnel_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
10933
10390
  funnel_generateDefaultMeasureEncoding(measures, encoding);
10934
10391
  return {
10935
10392
  ...advancedVSeed,
@@ -10937,12 +10394,11 @@
10937
10394
  };
10938
10395
  };
10939
10396
  const encodingForFunnel = (advancedVSeed)=>{
10940
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
10941
- const measures = findAllMeasures(vseedMeasures);
10397
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
10942
10398
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
10943
10399
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
10944
10400
  const encoding = {};
10945
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
10401
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
10946
10402
  if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding, hasMulti);
10947
10403
  else funnel_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
10948
10404
  if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
@@ -10999,16 +10455,17 @@
10999
10455
  defaultDimensions_defaultDimensions,
11000
10456
  defaultMeasureId_defaultMeasureId,
11001
10457
  encodingAdapter([
11002
- buildMeasures,
10458
+ buildMeasures([
10459
+ 'size',
10460
+ 'detail'
10461
+ ]),
11003
10462
  defaultEncodingForFunnel
11004
10463
  ], [
11005
- buildMeasures,
11006
- encodingForFunnel,
11007
- pickMeasuresForReshape([
11008
- 'tooltip',
11009
- 'label',
11010
- 'color'
10464
+ buildMeasures([
10465
+ 'size',
10466
+ 'detail'
11011
10467
  ]),
10468
+ encodingForFunnel,
11012
10469
  pickDimensionsForReshape
11013
10470
  ]),
11014
10471
  pivotAdapter([
@@ -11144,8 +10601,7 @@
11144
10601
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
11145
10602
  };
11146
10603
  const defaultEncodingForHeatmap = (advancedVSeed)=>{
11147
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
11148
- const measures = findAllMeasures(vseedMeasures);
10604
+ const { measures = [], dimensions = [] } = advancedVSeed;
11149
10605
  const encoding = {};
11150
10606
  heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
11151
10607
  heatmap_generateDefaultMeasureEncoding(measures, encoding);
@@ -11155,12 +10611,11 @@
11155
10611
  };
11156
10612
  };
11157
10613
  const encodingForHeatmap = (advancedVSeed)=>{
11158
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
11159
- const measures = findAllMeasures(vseedMeasures);
10614
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
11160
10615
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
11161
10616
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
11162
10617
  const encoding = {};
11163
- if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding, measures.length > 1);
10618
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
11164
10619
  else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
11165
10620
  if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
11166
10621
  else heatmap_generateDefaultMeasureEncoding(measures, encoding);
@@ -11226,15 +10681,17 @@
11226
10681
  defaultDimensions_defaultDimensions,
11227
10682
  defaultMeasureId_defaultMeasureId,
11228
10683
  encodingAdapter([
11229
- buildMeasures,
10684
+ buildMeasures([
10685
+ 'color',
10686
+ 'detail'
10687
+ ]),
11230
10688
  defaultEncodingForHeatmap
11231
10689
  ], [
11232
- buildMeasures,
11233
- encodingForHeatmap,
11234
- pickMeasuresForReshape([
11235
- 'tooltip',
11236
- 'label'
10690
+ buildMeasures([
10691
+ 'color',
10692
+ 'detail'
11237
10693
  ]),
10694
+ encodingForHeatmap,
11238
10695
  pickDimensionsForReshape
11239
10696
  ]),
11240
10697
  pivotAdapter([
@@ -11322,7 +10779,7 @@
11322
10779
  ...spec
11323
10780
  };
11324
10781
  const { advancedVSeed, vseed } = context;
11325
- const { datasetReshapeInfo, chartType, locale, dimensions, encoding } = advancedVSeed;
10782
+ const { datasetReshapeInfo, chartType, locale, dimensions = [], encoding } = advancedVSeed;
11326
10783
  const baseConfig = advancedVSeed.config[chartType];
11327
10784
  const { tooltip = {
11328
10785
  enable: true
@@ -11336,7 +10793,7 @@
11336
10793
  title: {
11337
10794
  visible: false
11338
10795
  },
11339
- content: tooltipHeatmap_createMarkContent(encoding.tooltip || [], dimensions, findAllMeasures(vseed.measures), locale, foldInfo)
10796
+ content: tooltipHeatmap_createMarkContent(encoding.tooltip || [], dimensions, vseed.measures, locale, foldInfo)
11340
10797
  },
11341
10798
  dimension: {
11342
10799
  visible: false
@@ -11345,7 +10802,7 @@
11345
10802
  };
11346
10803
  return result;
11347
10804
  };
11348
- const tooltipHeatmap_createMarkContent = (tooltip, dimensions, measures, locale, foldInfo)=>{
10805
+ const tooltipHeatmap_createMarkContent = (tooltip, dimensions, measures = [], locale, foldInfo)=>{
11349
10806
  const dims = T(dimensions.filter((item)=>tooltip.includes(item.id)), (item)=>item.id);
11350
10807
  const meas = T(measures.filter((item)=>tooltip.includes(item.id)), (item)=>item.id);
11351
10808
  const dimContent = dims.map((item)=>({
@@ -11506,10 +10963,9 @@
11506
10963
  return result;
11507
10964
  };
11508
10965
  const defaultEncodingForBoxplot = (advancedVSeed)=>{
11509
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
11510
- const measures = findAllMeasures(vseedMeasures);
10966
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
11511
10967
  const encoding = {};
11512
- boxplot_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(vseedMeasures));
10968
+ boxplot_generateDefaultDimensionEncoding(dimensions, encoding, hasMultipleMeasureInSingleView(reshapeMeasures));
11513
10969
  boxplot_generateDefaultMeasureEncoding(measures, encoding);
11514
10970
  return {
11515
10971
  ...advancedVSeed,
@@ -11517,12 +10973,11 @@
11517
10973
  };
11518
10974
  };
11519
10975
  const encodingForBoxplot = (advancedVSeed)=>{
11520
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
11521
- const measures = findAllMeasures(vseedMeasures);
10976
+ const { measures = [], reshapeMeasures = [], dimensions = [] } = advancedVSeed;
11522
10977
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
11523
10978
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
11524
10979
  const encoding = {};
11525
- const hasMulti = hasMultipleMeasureInSingleView(vseedMeasures);
10980
+ const hasMulti = hasMultipleMeasureInSingleView(reshapeMeasures);
11526
10981
  if (hasDimensionEncoding) boxplot_generateDimensionEncoding(dimensions, encoding, hasMulti);
11527
10982
  else boxplot_generateDefaultDimensionEncoding(dimensions, encoding, hasMulti);
11528
10983
  if (hasMeasureEncoding) boxplot_generateMeasureEncoding(measures, encoding);
@@ -11640,19 +11095,17 @@
11640
11095
  };
11641
11096
  const { vseed } = context;
11642
11097
  const { dataset, chartType } = vseed;
11643
- const { encoding = {}, config } = advancedVSeed;
11644
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
11098
+ const { encoding = {}, config, measures = [] } = advancedVSeed;
11645
11099
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
11646
11100
  const uniqDims = T(dimensions, (item)=>item.id);
11647
11101
  const whiskers = config?.[chartType]?.whiskers;
11648
11102
  let newDatasets = [];
11649
11103
  let foldInfo = {};
11650
11104
  let unfoldInfo = {};
11651
- const allMeasures = findAllMeasures(measures);
11652
11105
  if (encoding.value?.length) {
11653
11106
  const boxPlotDataList = [];
11654
11107
  encoding.value.forEach((f)=>{
11655
- const m = allMeasures.find((m)=>m.id === f);
11108
+ const m = measures.find((m)=>m.id === f);
11656
11109
  const boxPlotData = boxplot_boxplot(dataset, {
11657
11110
  field: f,
11658
11111
  groupField: [
@@ -11711,9 +11164,7 @@
11711
11164
  foldInfo,
11712
11165
  unfoldInfo
11713
11166
  }
11714
- ],
11715
- dimensions,
11716
- measures
11167
+ ]
11717
11168
  };
11718
11169
  };
11719
11170
  const revisedBoxPlotFieldKey = (fieldKey, groupId, isPivotChart = true)=>{
@@ -11727,30 +11178,24 @@
11727
11178
  const { vseed } = context;
11728
11179
  const { dataset, chartType } = vseed;
11729
11180
  const { encoding = {}, config } = advancedVSeed;
11730
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
11181
+ const reshapeMeasures = advancedVSeed.reshapeMeasures ?? [];
11731
11182
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
11732
11183
  const uniqDims = T(dimensions, (item)=>item.id);
11733
11184
  const chartConfig = config?.[chartType];
11734
11185
  const whiskers = chartConfig?.whiskers;
11735
- const measureGroups = [];
11736
- if (measures) measures.forEach((measure)=>{
11737
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
11738
- });
11739
11186
  const rowColumnFields = T(dimensions.filter((dim)=>'row' === dim.encoding || 'column' === dim.encoding), (item)=>item.id);
11740
11187
  const datasets = [];
11741
11188
  const datasetReshapeInfo = [];
11742
- measureGroups.forEach((measureGroup, index)=>{
11743
- const subMeasures = measureGroup.children;
11744
- if (!subMeasures) return;
11745
- const groupId = measureGroup.id;
11189
+ reshapeMeasures.forEach((measureGroup, index)=>{
11190
+ const groupId = measureGroup[0].parentId ?? DEFAULT_PARENT_ID;
11746
11191
  let newDatasets = [];
11747
11192
  let foldInfo = {};
11748
11193
  let unfoldInfo = {};
11749
- const validEncodingIds = (encoding.value || []).filter((id)=>subMeasures.find((field)=>field.id === id));
11194
+ const validEncodingIds = (encoding.value || []).filter((id)=>measureGroup.find((field)=>field.id === id));
11750
11195
  if (validEncodingIds.length) {
11751
11196
  const boxPlotDataList = [];
11752
11197
  validEncodingIds.forEach((f)=>{
11753
- const m = subMeasures.find((m)=>m.id === f);
11198
+ const m = measureGroup.find((m)=>m.id === f);
11754
11199
  const boxPlotData = boxplot_boxplot(dataset, {
11755
11200
  field: f,
11756
11201
  groupField: [
@@ -11833,16 +11278,27 @@
11833
11278
  defaultMeasureId_defaultMeasureId,
11834
11279
  boxplotConfig,
11835
11280
  encodingAdapter([
11836
- buildMeasures,
11281
+ buildMeasures([
11282
+ 'value',
11283
+ 'q1',
11284
+ 'q3',
11285
+ 'min',
11286
+ 'max',
11287
+ 'median',
11288
+ 'outliers'
11289
+ ]),
11837
11290
  defaultEncodingForBoxplot
11838
11291
  ], [
11839
- buildMeasures,
11840
- encodingForBoxplot,
11841
- pickMeasuresForReshape([
11842
- 'tooltip',
11843
- 'label',
11844
- 'color'
11292
+ buildMeasures([
11293
+ 'value',
11294
+ 'q1',
11295
+ 'q3',
11296
+ 'min',
11297
+ 'max',
11298
+ 'median',
11299
+ 'outliers'
11845
11300
  ]),
11301
+ encodingForBoxplot,
11846
11302
  pickDimensionsForReshape
11847
11303
  ]),
11848
11304
  pivotAdapter([
@@ -11922,6 +11378,22 @@
11922
11378
  }
11923
11379
  };
11924
11380
  };
11381
+ const labelBoxPlot = (spec, context)=>{
11382
+ const result = {
11383
+ ...spec
11384
+ };
11385
+ const { advancedVSeed, vseed } = context;
11386
+ const { chartType, encoding } = advancedVSeed;
11387
+ const baseConfig = advancedVSeed.config[chartType];
11388
+ const { label } = baseConfig;
11389
+ result.label = buildLabel(label, vseed.measures, vseed.dimensions, advancedVSeed.dimensions, advancedVSeed.measures, encoding, [
11390
+ {
11391
+ measureId: FoldMeasureId,
11392
+ measureValue: MedianMeasureId
11393
+ }
11394
+ ]);
11395
+ return result;
11396
+ };
11925
11397
  const boxPlotMeasureKeys = [
11926
11398
  UpperWhisker,
11927
11399
  "__Q3__",
@@ -11935,13 +11407,13 @@
11935
11407
  ...spec
11936
11408
  };
11937
11409
  const { advancedVSeed, vseed } = context;
11938
- const { chartType, dimensions, encoding, datasetReshapeInfo } = advancedVSeed;
11410
+ const { chartType, dimensions = [], encoding, datasetReshapeInfo } = advancedVSeed;
11939
11411
  const baseConfig = advancedVSeed.config[chartType];
11940
11412
  const { tooltip = {
11941
11413
  enable: true
11942
11414
  } } = baseConfig;
11943
11415
  const { enable } = tooltip;
11944
- const meas = findAllMeasures(vseed.measures);
11416
+ const meas = vseed.measures ?? [];
11945
11417
  const valueMeasure = meas.find((item)=>'value' === item.encoding || chunk_JK3VNB42_n(item.encoding));
11946
11418
  const defaultFormatter = valueMeasure ? createFormatterByMeasure(valueMeasure) : (v)=>v;
11947
11419
  const measureAliasMapping = {
@@ -12080,9 +11552,8 @@
12080
11552
  shaftShape: 'filled-line',
12081
11553
  visible: true,
12082
11554
  shaftWidth: '50%',
12083
- stroke: theme?.boxBorderColor,
11555
+ stroke: theme?.whiskerBorderColor,
12084
11556
  boxStroke: theme?.boxBorderColor,
12085
- whiskerStroke: theme?.whiskerBorderColor,
12086
11557
  boxCornerRadius: theme?.boxCornerRadius,
12087
11558
  medianStroke: theme?.medianBorderColor ?? theme?.boxBorderColor
12088
11559
  }
@@ -12093,7 +11564,7 @@
12093
11564
  boxPlotStyle
12094
11565
  ];
12095
11566
  const customMap = boxPlotStyles.reduce((result, style, index)=>{
12096
- const { boxColor, boxColorOpacity, boxBorderColor, boxBorderWidth = 1, boxVisible = true, boxBorderOpacity } = style;
11567
+ const { boxColor, boxColorOpacity, boxBorderColor, boxBorderWidth = 1, boxVisible = true, boxBorderOpacity, medianBorderColor, whiskerBorderColor, boxCornerRadius } = style;
12097
11568
  return {
12098
11569
  ...result,
12099
11570
  [`custom${index + 1}`]: {
@@ -12107,8 +11578,11 @@
12107
11578
  fill: boxColor,
12108
11579
  fillOpacity: boxColorOpacity,
12109
11580
  lineWidth: boxBorderWidth,
12110
- stroke: boxBorderColor,
12111
- strokeOpacity: boxBorderOpacity
11581
+ stroke: whiskerBorderColor,
11582
+ boxStroke: boxBorderColor,
11583
+ boxCornerRadius: boxCornerRadius,
11584
+ strokeOpacity: boxBorderOpacity,
11585
+ medianStroke: medianBorderColor ?? boxBorderColor
12112
11586
  }
12113
11587
  }
12114
11588
  };
@@ -12163,12 +11637,9 @@
12163
11637
  size: pointSize,
12164
11638
  fill: pointColor,
12165
11639
  fillOpacity: pointColorOpacity,
12166
- innerBorder: {
12167
- stroke: pointBorderColor,
12168
- lineWidth: pointBorderWidth,
12169
- distance: (pointBorderWidth || 0) / 2,
12170
- lineDash: lineDash
12171
- }
11640
+ stroke: pointBorderColor,
11641
+ lineWidth: pointBorderWidth,
11642
+ lineDash: lineDash
12172
11643
  }
12173
11644
  }
12174
11645
  };
@@ -12194,7 +11665,7 @@
12194
11665
  progressive,
12195
11666
  xBand,
12196
11667
  yLinear,
12197
- label_label,
11668
+ labelBoxPlot,
12198
11669
  tooltipBoxplot,
12199
11670
  colorAdapter(discreteLegend, colorLegend),
12200
11671
  verticalCrosshairRect,
@@ -12220,7 +11691,7 @@
12220
11691
  progressive,
12221
11692
  xBand,
12222
11693
  pivotAxisStyle(yLinear),
12223
- label_label,
11694
+ labelBoxPlot,
12224
11695
  tooltipBoxplot,
12225
11696
  colorBoxPlotStyleFill(boxPlotStyle_boxPlotStyle),
12226
11697
  outlierStyle_outlierStyle,
@@ -12366,8 +11837,7 @@
12366
11837
  return result;
12367
11838
  };
12368
11839
  const defaultEncodingForHistogram = (advancedVSeed)=>{
12369
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
12370
- const measures = findAllMeasures(vseedMeasures);
11840
+ const { measures = [], dimensions = [] } = advancedVSeed;
12371
11841
  const encoding = {};
12372
11842
  histogram_generateDefaultDimensionEncoding(dimensions, encoding);
12373
11843
  histogram_generateDefaultMeasureEncoding(measures, encoding);
@@ -12377,8 +11847,7 @@
12377
11847
  };
12378
11848
  };
12379
11849
  const encodingForHistogram = (advancedVSeed)=>{
12380
- const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
12381
- const measures = findAllMeasures(vseedMeasures);
11850
+ const { measures = [], dimensions = [] } = advancedVSeed;
12382
11851
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
12383
11852
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
12384
11853
  const encoding = {};
@@ -12578,8 +12047,7 @@
12578
12047
  };
12579
12048
  const { vseed } = context;
12580
12049
  const { dataset, chartType } = vseed;
12581
- const { encoding = {}, config } = advancedVSeed;
12582
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
12050
+ const { encoding = {}, config, measures = [] } = advancedVSeed;
12583
12051
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
12584
12052
  const uniqDims = T(dimensions, (item)=>item.id);
12585
12053
  const chartConfig = config?.[chartType];
@@ -12603,10 +12071,9 @@
12603
12071
  };
12604
12072
  let unfoldInfo = {};
12605
12073
  const colorMeasureId = getColorMeasureId(advancedVSeed, vseed);
12606
- const allMeasures = findAllMeasures(measures);
12607
12074
  if (encoding.value?.length) {
12608
12075
  const valueField = encoding.value[0];
12609
- const m = allMeasures.find((m)=>m.id === valueField);
12076
+ const m = measures.find((m)=>m.id === valueField);
12610
12077
  const binData = bin_bin(dataset, {
12611
12078
  field: valueField,
12612
12079
  groupField: [
@@ -12644,7 +12111,7 @@
12644
12111
  });
12645
12112
  unfoldInfo = res.unfoldInfo;
12646
12113
  } else if (encoding.x0?.length && encoding.x1?.length && encoding.y?.length) {
12647
- const res = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), findAllMeasures(measures).filter((item)=>encoding.y?.includes(item.id)).slice(0, 1), encoding, {
12114
+ const res = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), measures.filter((item)=>encoding.y?.includes(item.id)).slice(0, 1), encoding, {
12648
12115
  colorItemAsId: false,
12649
12116
  colorMeasureId
12650
12117
  });
@@ -12666,9 +12133,7 @@
12666
12133
  foldInfo,
12667
12134
  unfoldInfo
12668
12135
  }
12669
- ],
12670
- dimensions,
12671
- measures
12136
+ ]
12672
12137
  };
12673
12138
  };
12674
12139
  const pivotReshapeWithHistogramEncoding = (advancedVSeed, context)=>{
@@ -12678,7 +12143,7 @@
12678
12143
  const { vseed } = context;
12679
12144
  const { dataset, chartType } = vseed;
12680
12145
  const { encoding = {}, config } = advancedVSeed;
12681
- const measures = advancedVSeed.reshapeMeasures ?? advancedVSeed.measures ?? [];
12146
+ const reshapeMeasures = advancedVSeed.reshapeMeasures ?? [];
12682
12147
  const dimensions = advancedVSeed.reshapeDimensions ?? advancedVSeed.dimensions ?? [];
12683
12148
  const colorMeasureId = getColorMeasureId(advancedVSeed, vseed);
12684
12149
  const uniqDims = T(dimensions, (item)=>item.id);
@@ -12686,17 +12151,12 @@
12686
12151
  const binCount = chartConfig?.binCount;
12687
12152
  const binStep = chartConfig?.binStep;
12688
12153
  const binValueType = chartConfig?.binValueType;
12689
- const measureGroups = [];
12690
- if (measures) measures.forEach((measure)=>{
12691
- if (measure.children && measure.children.length > 0) measureGroups.push(measure);
12692
- });
12693
12154
  const rowColumnFields = T(dimensions.filter((dim)=>'row' === dim.encoding || 'column' === dim.encoding), (item)=>item.id);
12694
12155
  const datasets = [];
12695
12156
  const datasetReshapeInfo = [];
12696
- measureGroups.forEach((measureGroup, index)=>{
12697
- const subMeasures = measureGroup.children;
12157
+ reshapeMeasures.forEach((subMeasures, index)=>{
12698
12158
  if (!subMeasures) return;
12699
- const groupId = measureGroup.id;
12159
+ const groupId = subMeasures[0].id ?? DEFAULT_PARENT_ID;
12700
12160
  let newDatasets = [];
12701
12161
  let foldInfo = {
12702
12162
  foldMap: {},
@@ -12788,16 +12248,23 @@
12788
12248
  defaultDimensions_defaultDimensions,
12789
12249
  histogramConfig,
12790
12250
  encodingAdapter([
12791
- buildMeasures,
12251
+ buildMeasures([
12252
+ 'value',
12253
+ 'x0',
12254
+ 'x1',
12255
+ 'yAxis',
12256
+ 'detail'
12257
+ ]),
12792
12258
  defaultEncodingForHistogram
12793
12259
  ], [
12794
- buildMeasures,
12795
- encodingForHistogram,
12796
- pickMeasuresForReshape([
12797
- 'tooltip',
12798
- 'label',
12799
- 'color'
12260
+ buildMeasures([
12261
+ 'value',
12262
+ 'x0',
12263
+ 'x1',
12264
+ 'yAxis',
12265
+ 'detail'
12800
12266
  ]),
12267
+ encodingForHistogram,
12801
12268
  pickDimensionsForReshape
12802
12269
  ]),
12803
12270
  pivotAdapter([
@@ -12852,7 +12319,7 @@
12852
12319
  ...spec
12853
12320
  };
12854
12321
  const { advancedVSeed, vseed } = context;
12855
- const { encoding, dimensions, measures, dataset } = advancedVSeed;
12322
+ const { encoding, dimensions = [], measures = [], dataset } = advancedVSeed;
12856
12323
  const { chartType } = vseed;
12857
12324
  const config = advancedVSeed.config?.[chartType]?.xAxis ?? {};
12858
12325
  if (!result.axes) result.axes = [];
@@ -12905,7 +12372,7 @@
12905
12372
  ...spec
12906
12373
  };
12907
12374
  const { advancedVSeed } = context;
12908
- const { chartType, dimensions, encoding } = advancedVSeed;
12375
+ const { chartType, dimensions = [], encoding } = advancedVSeed;
12909
12376
  const baseConfig = advancedVSeed.config[chartType];
12910
12377
  const { binValueType, tooltip = {
12911
12378
  enable: true
@@ -13117,7 +12584,7 @@
13117
12584
  ...spec
13118
12585
  };
13119
12586
  const { advancedVSeed, vseed } = context;
13120
- const { chartType, encoding = {}, dimensions, regressionLine } = advancedVSeed;
12587
+ const { chartType, encoding = {}, dimensions = [], regressionLine } = advancedVSeed;
13121
12588
  const { dataset } = vseed;
13122
12589
  const lineTheme = advancedVSeed.config[chartType]?.regressionLine;
13123
12590
  const binValueType = advancedVSeed.config[chartType]?.binValueType;
@@ -13261,7 +12728,7 @@
13261
12728
  ...spec
13262
12729
  };
13263
12730
  const { advancedVSeed, vseed } = context;
13264
- const { chartType, encoding = {}, dimensions, regressionLine } = advancedVSeed;
12731
+ const { chartType, encoding = {}, dimensions = [], regressionLine } = advancedVSeed;
13265
12732
  const { dataset } = vseed;
13266
12733
  const lineTheme = advancedVSeed.config[chartType]?.regressionLine;
13267
12734
  if (!regressionLine || !regressionLine.ecdfRegressionLine) return result;
@@ -13984,27 +13451,30 @@
13984
13451
  }
13985
13452
  });
13986
13453
  const getCommonBoxPlotStyle = ()=>({
13987
- boxCornerRadius: 6
13454
+ boxCornerRadius: 2
13988
13455
  });
13989
13456
  const getLightBoxPlotStyle = ()=>({
13990
13457
  ...getCommonBoxPlotStyle(),
13991
- boxBorderColor: '#00000042',
13458
+ boxBorderColor: '#606773',
13992
13459
  whiskerBorderColor: '#606773'
13993
13460
  });
13994
13461
  const getDarkBoxPlotStyle = ()=>({
13995
13462
  ...getCommonBoxPlotStyle(),
13996
- boxBorderColor: '#ffffff42',
13997
- whiskerBorderColor: '#E2E3E6'
13463
+ boxBorderColor: '#888C93',
13464
+ whiskerBorderColor: '#888C93'
13998
13465
  });
13999
13466
  const getCommonOutlierStyle = ()=>({
14000
- pointBorderWidth: 2,
13467
+ pointSize: 10,
13468
+ pointBorderWidth: 1.5,
14001
13469
  pointColor: 'transparent'
14002
13470
  });
14003
13471
  const getLightOutlierStyle = ()=>({
14004
- ...getCommonOutlierStyle()
13472
+ ...getCommonOutlierStyle(),
13473
+ pointBorderColor: '#606773'
14005
13474
  });
14006
13475
  const getDarkOutlierStyle = ()=>({
14007
- ...getCommonOutlierStyle()
13476
+ ...getCommonOutlierStyle(),
13477
+ pointBorderColor: '#888C93'
14008
13478
  });
14009
13479
  const lightTheme = ()=>{
14010
13480
  const linearAxis = getLightLinearAxis();
@@ -14191,10 +13661,6 @@
14191
13661
  visible: false
14192
13662
  }
14193
13663
  },
14194
- dualChartType: {
14195
- primary: 'column',
14196
- secondary: 'line'
14197
- },
14198
13664
  crosshairRect,
14199
13665
  pivotGrid: getLightPivotChartGridConfig(),
14200
13666
  annotation: getLightAnnotation()
@@ -14459,10 +13925,6 @@
14459
13925
  visible: false
14460
13926
  }
14461
13927
  },
14462
- dualChartType: {
14463
- primary: 'column',
14464
- secondary: 'line'
14465
- },
14466
13928
  crosshairRect,
14467
13929
  pivotGrid: getDarkPivotChartGridConfig(),
14468
13930
  annotation: getDarkAnnotation()
@@ -14593,6 +14055,91 @@
14593
14055
  const updateSpec = (chartType, specPipe)=>{
14594
14056
  Builder._customSpecPipe[chartType] = specPipe;
14595
14057
  };
14058
+ const measureDepth = (measures = [])=>{
14059
+ if (!measures) return 0;
14060
+ let depth = 1;
14061
+ preorderTraverse(measures, (node)=>{
14062
+ if ('children' in node) depth = Math.max(depth, 1 + measureDepth(node.children));
14063
+ return false;
14064
+ });
14065
+ return depth;
14066
+ };
14067
+ const deleteMeasureTreeByCallback = (measureTree, callback)=>{
14068
+ if (!measureTree) return;
14069
+ const stack = [
14070
+ ...measureTree
14071
+ ].reverse();
14072
+ const parents = new Map();
14073
+ measureTree.forEach((node)=>{
14074
+ parents.set(node, measureTree);
14075
+ });
14076
+ const nodesToProcess = [];
14077
+ const visited = new Set();
14078
+ while(stack.length > 0){
14079
+ const node = stack[stack.length - 1];
14080
+ if (isMeasureGroup(node) && node.children && !visited.has(node)) {
14081
+ visited.add(node);
14082
+ const children = node.children.slice().reverse();
14083
+ for (const child of children){
14084
+ parents.set(child, node.children);
14085
+ stack.push(child);
14086
+ }
14087
+ } else {
14088
+ stack.pop();
14089
+ nodesToProcess.push(node);
14090
+ }
14091
+ }
14092
+ const deleted = [];
14093
+ for (const node of nodesToProcess){
14094
+ const parentList = parents.get(node);
14095
+ if (parentList) {
14096
+ const index = parentList.indexOf(node);
14097
+ if (isMeasure(node)) {
14098
+ if (callback?.(node, index, parentList)) {
14099
+ parentList.splice(index, 1);
14100
+ deleted.push(node);
14101
+ }
14102
+ }
14103
+ }
14104
+ }
14105
+ return deleted;
14106
+ };
14107
+ const deleteDimensionTreeByCallback = (dimensionTree, callback)=>{
14108
+ if (!dimensionTree) return dimensionTree;
14109
+ const stack = [
14110
+ ...dimensionTree
14111
+ ].reverse();
14112
+ const parents = new Map();
14113
+ dimensionTree.forEach((node)=>{
14114
+ parents.set(node, dimensionTree);
14115
+ });
14116
+ const nodesToProcess = [];
14117
+ const visited = new Set();
14118
+ while(stack.length > 0){
14119
+ const node = stack[stack.length - 1];
14120
+ if (isDimensionGroup(node) && node.children && !visited.has(node)) {
14121
+ visited.add(node);
14122
+ const children = node.children.slice().reverse();
14123
+ for (const child of children){
14124
+ parents.set(child, node.children);
14125
+ stack.push(child);
14126
+ }
14127
+ } else {
14128
+ stack.pop();
14129
+ nodesToProcess.push(node);
14130
+ }
14131
+ }
14132
+ for (const node of nodesToProcess){
14133
+ const parentList = parents.get(node);
14134
+ if (parentList) {
14135
+ const index = parentList.indexOf(node);
14136
+ if (isDimension(node)) {
14137
+ if (callback?.(node, index, parentList)) parentList.splice(index, 1);
14138
+ }
14139
+ }
14140
+ }
14141
+ return dimensionTree;
14142
+ };
14596
14143
  Object.freeze({
14597
14144
  status: "aborted"
14598
14145
  });
@@ -17907,22 +17454,6 @@
17907
17454
  'boxPlot',
17908
17455
  'histogram'
17909
17456
  ]);
17910
- const zDualChartType = schemas_object({
17911
- primary: schemas_enum([
17912
- 'line',
17913
- 'column',
17914
- 'columnParallel',
17915
- 'area',
17916
- 'scatter'
17917
- ]).default('column'),
17918
- secondary: schemas_enum([
17919
- 'line',
17920
- 'column',
17921
- 'columnParallel',
17922
- 'area',
17923
- 'scatter'
17924
- ]).default('line')
17925
- });
17926
17457
  const zDatum = record(schemas_string().or(schemas_number()), any());
17927
17458
  const zDataset = schemas_array(zDatum);
17928
17459
  const zDimension = schemas_object({
@@ -18008,7 +17539,16 @@
18008
17539
  'x0',
18009
17540
  'x1'
18010
17541
  ]).optional(),
18011
- parentId: schemas_string().optional()
17542
+ parentId: schemas_string().optional(),
17543
+ chartType: schemas_enum([
17544
+ 'line',
17545
+ 'column',
17546
+ 'columnParallel',
17547
+ 'columnPercent',
17548
+ 'area',
17549
+ 'areaPercent',
17550
+ 'scatter'
17551
+ ]).optional()
18012
17552
  });
18013
17553
  const zMeasureGroup = schemas_object({
18014
17554
  id: schemas_string(),
@@ -18019,30 +17559,23 @@
18019
17559
  });
18020
17560
  const zMeasures = schemas_array(zMeasure);
18021
17561
  const zMeasureTree = schemas_array(zMeasureGroup.or(zMeasure));
18022
- const zDualMeasure = schemas_object({
18023
- id: schemas_string(),
18024
- primaryMeasures: schemas_array(zMeasure.omit({
18025
- encoding: true,
18026
- parentId: true
18027
- })).or(zMeasure.omit({
18028
- parentId: true,
18029
- encoding: true
18030
- })).optional(),
18031
- secondaryMeasures: schemas_array(zMeasure).or(zMeasure).optional()
17562
+ const zDualMeasure = zMeasure.extend({
17563
+ chartType: schemas_enum([
17564
+ 'line',
17565
+ 'column',
17566
+ 'columnParallel',
17567
+ 'area',
17568
+ 'scatter'
17569
+ ]).optional(),
17570
+ encoding: schemas_enum([
17571
+ 'primaryYAxis',
17572
+ 'secondaryYAxis',
17573
+ 'color',
17574
+ 'label',
17575
+ 'tooltip'
17576
+ ]).optional()
18032
17577
  });
18033
17578
  const zDualMeasures = schemas_array(zDualMeasure);
18034
- const zScatterMeasure = schemas_object({
18035
- id: schemas_string(),
18036
- xMeasures: schemas_array(zMeasure.omit({
18037
- parentId: true,
18038
- encoding: true
18039
- })).or(zMeasure).optional(),
18040
- yMeasures: schemas_array(zMeasure.omit({
18041
- parentId: true,
18042
- encoding: true
18043
- })).or(zMeasure).optional()
18044
- });
18045
- const zScatterMeasures = schemas_array(zScatterMeasure);
18046
17579
  const zFoldInfo = schemas_object({
18047
17580
  foldMap: record(schemas_string(), schemas_string().or(schemas_undefined())),
18048
17581
  statistics: schemas_object({
@@ -18790,7 +18323,6 @@
18790
18323
  color: zColor.nullish(),
18791
18324
  tooltip: zTooltip.nullish(),
18792
18325
  legend: zLegend.nullish(),
18793
- dualChartType: schemas_array(zDualChartType).or(zDualChartType).nullish(),
18794
18326
  alignTicks: schemas_array(schemas_boolean()).or(schemas_boolean()).nullish(),
18795
18327
  primaryYAxis: schemas_array(zYLinearAxis).or(zYLinearAxis).nullish(),
18796
18328
  secondaryYAxis: schemas_array(zYLinearAxis).or(zYLinearAxis).nullish(),
@@ -18867,8 +18399,8 @@
18867
18399
  boxBorderWidth: schemas_number().min(0).nullish(),
18868
18400
  boxBorderOpacity: schemas_number().min(0).max(1).nullish(),
18869
18401
  boxCornerRadius: schemas_number().nullish(),
18870
- whiskerBorderColor: schemas_string().nullish(),
18871
- medianBorderColor: schemas_string().nullish()
18402
+ medianBorderColor: schemas_string().nullish(),
18403
+ whiskerBorderColor: schemas_string().nullish()
18872
18404
  });
18873
18405
  const zOutlierStyle = schemas_object({
18874
18406
  selector: union([
@@ -19169,7 +18701,7 @@
19169
18701
  dataset: zDataset.nullish(),
19170
18702
  encoding: zEncoding.nullish(),
19171
18703
  dimensions: zDimensions.nullish(),
19172
- measures: zMeasureTree.nullish(),
18704
+ measures: zMeasures.nullish(),
19173
18705
  backgroundColor: zBackgroundColor.nullish(),
19174
18706
  color: zColor.nullish(),
19175
18707
  label: zLabel.nullish(),
@@ -19195,7 +18727,7 @@
19195
18727
  dataset: zDataset.nullish(),
19196
18728
  encoding: zEncoding.nullish(),
19197
18729
  dimensions: zDimensions.nullish(),
19198
- measures: zMeasureTree.nullish(),
18730
+ measures: zMeasures.nullish(),
19199
18731
  backgroundColor: zBackgroundColor.nullish(),
19200
18732
  color: zColor.nullish(),
19201
18733
  label: zLabel.nullish(),
@@ -19223,7 +18755,7 @@
19223
18755
  dataset: zDataset.nullish(),
19224
18756
  encoding: zEncoding.nullish(),
19225
18757
  dimensions: zDimensions.nullish(),
19226
- measures: zMeasureTree.nullish(),
18758
+ measures: zMeasures.nullish(),
19227
18759
  backgroundColor: zBackgroundColor.nullish(),
19228
18760
  color: zColor.nullish(),
19229
18761
  label: zLabel.nullish(),
@@ -19249,7 +18781,7 @@
19249
18781
  dataset: zDataset.nullish(),
19250
18782
  encoding: zEncoding.nullish(),
19251
18783
  dimensions: zDimensions.nullish(),
19252
- measures: zMeasureTree.nullish(),
18784
+ measures: zMeasures.nullish(),
19253
18785
  backgroundColor: zBackgroundColor.nullish(),
19254
18786
  color: zColor.nullish(),
19255
18787
  label: zLabel.nullish(),
@@ -19274,7 +18806,7 @@
19274
18806
  dataset: zDataset.nullish(),
19275
18807
  encoding: zEncoding.nullish(),
19276
18808
  dimensions: zDimensions.nullish(),
19277
- measures: zMeasureTree.nullish(),
18809
+ measures: zMeasures.nullish(),
19278
18810
  backgroundColor: zBackgroundColor.nullish(),
19279
18811
  color: zColor.nullish(),
19280
18812
  label: zLabel.nullish(),
@@ -19299,7 +18831,7 @@
19299
18831
  dataset: zDataset.nullish(),
19300
18832
  encoding: zEncoding.nullish(),
19301
18833
  dimensions: zDimensions.nullish(),
19302
- measures: zMeasureTree.nullish(),
18834
+ measures: zMeasures.nullish(),
19303
18835
  backgroundColor: zBackgroundColor.nullish(),
19304
18836
  color: zColor.nullish(),
19305
18837
  label: zLabel.nullish(),
@@ -19325,7 +18857,7 @@
19325
18857
  dataset: zDataset.nullish(),
19326
18858
  encoding: zEncoding.nullish(),
19327
18859
  dimensions: zDimensions.nullish(),
19328
- measures: zMeasureTree.nullish(),
18860
+ measures: zMeasures.nullish(),
19329
18861
  backgroundColor: zBackgroundColor.nullish(),
19330
18862
  color: zColor.nullish(),
19331
18863
  label: zLabel.nullish(),
@@ -19350,7 +18882,7 @@
19350
18882
  dataset: zDataset.nullish(),
19351
18883
  encoding: zEncoding.nullish(),
19352
18884
  dimensions: zDimensions.nullish(),
19353
- measures: zMeasureTree.nullish(),
18885
+ measures: zMeasures.nullish(),
19354
18886
  backgroundColor: zBackgroundColor.nullish(),
19355
18887
  color: zColor.nullish(),
19356
18888
  label: zLabel.nullish(),
@@ -19375,7 +18907,7 @@
19375
18907
  dataset: zDataset.nullish(),
19376
18908
  encoding: zEncoding.nullish(),
19377
18909
  dimensions: zDimensions.nullish(),
19378
- measures: zMeasureTree.nullish(),
18910
+ measures: zMeasures.nullish(),
19379
18911
  backgroundColor: zBackgroundColor.nullish(),
19380
18912
  color: zColor.nullish(),
19381
18913
  label: zLabel.nullish(),
@@ -19400,8 +18932,7 @@
19400
18932
  dataset: zDataset.nullish(),
19401
18933
  encoding: zEncoding.nullish(),
19402
18934
  dimensions: zDimensions.nullish(),
19403
- measures: zMeasureTree.nullish(),
19404
- scatterMeasures: zScatterMeasures.nullish(),
18935
+ measures: zMeasures.nullish(),
19405
18936
  backgroundColor: zBackgroundColor.nullish(),
19406
18937
  size: schemas_number().or(schemas_array(schemas_number())).nullish(),
19407
18938
  sizeRange: schemas_number().or(schemas_array(schemas_number())).nullish(),
@@ -19429,9 +18960,7 @@
19429
18960
  chartType: literal('dualAxis'),
19430
18961
  dataset: zDataset.nullish(),
19431
18962
  dimensions: zDimensions.nullish(),
19432
- measures: zMeasureTree.nullish(),
19433
- dualMeasures: zDualMeasures.nullish(),
19434
- dualChartType: schemas_array(zDualChartType).or(zDualChartType).nullish(),
18963
+ measures: zDualMeasures.nullish(),
19435
18964
  alignTicks: schemas_array(schemas_boolean()).or(schemas_boolean()).nullish(),
19436
18965
  primaryYAxis: schemas_array(zYLinearAxis).or(zYLinearAxis).nullish(),
19437
18966
  secondaryYAxis: schemas_array(zYLinearAxis).or(zYLinearAxis).nullish(),
@@ -19463,7 +18992,7 @@
19463
18992
  dataset: zDataset.nullish(),
19464
18993
  encoding: zEncoding.nullish(),
19465
18994
  dimensions: zDimensions.nullish(),
19466
- measures: zMeasureTree.nullish(),
18995
+ measures: zMeasures.nullish(),
19467
18996
  backgroundColor: zBackgroundColor.nullish(),
19468
18997
  color: zColor.nullish(),
19469
18998
  label: zLabel.nullish(),
@@ -19491,7 +19020,7 @@
19491
19020
  dataset: zDataset.nullish(),
19492
19021
  encoding: zEncoding.nullish(),
19493
19022
  dimensions: zDimensions.nullish(),
19494
- measures: zMeasureTree.nullish(),
19023
+ measures: zMeasures.nullish(),
19495
19024
  backgroundColor: zBackgroundColor.nullish(),
19496
19025
  color: zColor.nullish(),
19497
19026
  label: zLabel.nullish(),
@@ -19505,7 +19034,7 @@
19505
19034
  dataset: zDataset.nullish(),
19506
19035
  encoding: zEncoding.nullish(),
19507
19036
  dimensions: zDimensions.nullish(),
19508
- measures: zMeasureTree.nullish(),
19037
+ measures: zMeasures.nullish(),
19509
19038
  backgroundColor: zBackgroundColor.nullish(),
19510
19039
  color: zColor.nullish(),
19511
19040
  label: zLabel.nullish(),
@@ -19519,7 +19048,7 @@
19519
19048
  dataset: zDataset.nullish(),
19520
19049
  encoding: zEncoding.nullish(),
19521
19050
  dimensions: zDimensions.nullish(),
19522
- measures: zMeasureTree.nullish(),
19051
+ measures: zMeasures.nullish(),
19523
19052
  backgroundColor: zBackgroundColor.nullish(),
19524
19053
  color: zColor.nullish(),
19525
19054
  label: zPieLabel.nullish(),
@@ -19533,7 +19062,7 @@
19533
19062
  dataset: zDataset.nullish(),
19534
19063
  encoding: zEncoding.nullish(),
19535
19064
  dimensions: zDimensions.nullish(),
19536
- measures: zMeasureTree.nullish(),
19065
+ measures: zMeasures.nullish(),
19537
19066
  backgroundColor: zBackgroundColor.nullish(),
19538
19067
  color: zColor.nullish(),
19539
19068
  label: zPieLabel.nullish(),
@@ -19547,7 +19076,7 @@
19547
19076
  dataset: zDataset.nullish(),
19548
19077
  encoding: zEncoding.nullish(),
19549
19078
  dimensions: zDimensions.nullish(),
19550
- measures: zMeasureTree.nullish(),
19079
+ measures: zMeasures.nullish(),
19551
19080
  backgroundColor: zBackgroundColor.nullish(),
19552
19081
  color: zColor.nullish(),
19553
19082
  label: zLabel.nullish(),
@@ -19561,7 +19090,7 @@
19561
19090
  dataset: zDataset.nullish(),
19562
19091
  encoding: zEncoding.nullish(),
19563
19092
  dimensions: zDimensions.nullish(),
19564
- measures: zMeasureTree.nullish(),
19093
+ measures: zMeasures.nullish(),
19565
19094
  backgroundColor: zBackgroundColor.nullish(),
19566
19095
  color: zColor.nullish(),
19567
19096
  label: zLabel.nullish(),
@@ -19574,7 +19103,7 @@
19574
19103
  chartType: literal('heatmap'),
19575
19104
  dataset: zDataset.nullish(),
19576
19105
  dimensions: zDimensions.nullish(),
19577
- measures: zMeasureTree.nullish(),
19106
+ measures: zMeasures.nullish(),
19578
19107
  backgroundColor: zBackgroundColor.nullish(),
19579
19108
  color: zColor.nullish(),
19580
19109
  label: zLabel.nullish(),
@@ -19588,7 +19117,7 @@
19588
19117
  dataset: zDataset.nullish(),
19589
19118
  encoding: zEncoding.nullish(),
19590
19119
  dimensions: zDimensions.nullish(),
19591
- measures: zMeasureTree.nullish(),
19120
+ measures: zMeasures.nullish(),
19592
19121
  backgroundColor: zBackgroundColor.nullish(),
19593
19122
  color: zColor.nullish(),
19594
19123
  label: zLabel.nullish(),
@@ -19644,10 +19173,12 @@
19644
19173
  dataset: zDataset,
19645
19174
  datasetReshapeInfo: zDatasetReshapeInfo,
19646
19175
  pivotAllDatasetReshapeInfo: zDatasetReshapeInfo,
19647
- dimensions: zDimensionTree,
19648
- measures: zMeasureTree,
19649
- reshapeMeasures: zMeasureTree.optional(),
19650
- reshapeDimensions: zDimensionTree.optional(),
19176
+ dimensions: zDimensions.optional(),
19177
+ measures: zMeasures.optional(),
19178
+ reshapeMeasures: schemas_array(zMeasures).optional(),
19179
+ reshapeDimensions: zDimensions.optional(),
19180
+ measureTree: zMeasureTree.optional(),
19181
+ dimensionTree: zDimensionTree.optional(),
19651
19182
  encoding: zEncoding,
19652
19183
  config: zConfig,
19653
19184
  analysis: zAnalysis,