@visactor/vseed 0.1.2 → 0.1.4

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 (58) hide show
  1. package/dist/builder/builder/builder.d.ts +6 -28
  2. package/dist/dataReshape/dataReshapeByEncoding.d.ts +1 -0
  3. package/dist/dataReshape/foldMeasures.d.ts +6 -5
  4. package/dist/index.cjs +844 -609
  5. package/dist/index.cjs.map +1 -1
  6. package/dist/index.js +857 -619
  7. package/dist/index.js.map +1 -1
  8. package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
  9. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -3
  10. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
  11. package/dist/pipeline/advanced/chart/pipes/{init/autoMeasures.d.ts → measures/buildMeasures.d.ts} +1 -1
  12. package/dist/pipeline/advanced/chart/pipes/measures/buildMeasuresForDualAxis.d.ts +2 -0
  13. package/dist/pipeline/advanced/chart/pipes/measures/buildMeasuresForScatter.d.ts +2 -0
  14. package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +4 -0
  15. package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +28 -0
  16. package/dist/pipeline/spec/chart/pipes/color/colorAdapter.d.ts +2 -1
  17. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +2 -1
  18. package/dist/pipeline/spec/chart/pipes/color/linearColorForDualAxis.d.ts +2 -0
  19. package/dist/pipeline/utils/chatType.d.ts +1 -1
  20. package/dist/types/advancedVSeed.d.ts +24 -14
  21. package/dist/types/chartType/area/zArea.d.ts +24 -0
  22. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +24 -0
  23. package/dist/types/chartType/bar/zBar.d.ts +24 -0
  24. package/dist/types/chartType/barParallel/zBarParallel.d.ts +24 -0
  25. package/dist/types/chartType/barPercent/zBarPercent.d.ts +24 -0
  26. package/dist/types/chartType/column/zColumn.d.ts +24 -0
  27. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +24 -0
  28. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +24 -0
  29. package/dist/types/chartType/donut/zDonut.d.ts +24 -0
  30. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +76 -0
  31. package/dist/types/chartType/funnel/zFunnel.d.ts +24 -0
  32. package/dist/types/chartType/heatmap/zHeatmap.d.ts +24 -0
  33. package/dist/types/chartType/line/line.d.ts +0 -1
  34. package/dist/types/chartType/line/zLine.d.ts +24 -0
  35. package/dist/types/chartType/pie/zPie.d.ts +24 -0
  36. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +24 -0
  37. package/dist/types/chartType/radar/zRadar.d.ts +24 -0
  38. package/dist/types/chartType/rose/zRose.d.ts +24 -0
  39. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +24 -0
  40. package/dist/types/chartType/scatter/zScatter.d.ts +76 -0
  41. package/dist/types/chartType/table/zTable.d.ts +24 -0
  42. package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
  43. package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
  44. package/dist/types/properties/encoding/encoding.d.ts +0 -1
  45. package/dist/types/properties/encoding/index.d.ts +2 -2
  46. package/dist/types/properties/encoding/zEncoding.d.ts +0 -14
  47. package/dist/types/properties/measures/dualMeasures.d.ts +1 -0
  48. package/dist/types/properties/measures/measures.d.ts +19 -0
  49. package/dist/types/properties/measures/scatterMeasures.d.ts +1 -0
  50. package/dist/types/properties/measures/zDualMeasures.d.ts +104 -0
  51. package/dist/types/properties/measures/zMeasures.d.ts +39 -0
  52. package/dist/types/properties/measures/zScatterMeasures.d.ts +104 -0
  53. package/dist/types/zVseed.d.ts +584 -0
  54. package/dist/umd/index.js +858 -607
  55. package/dist/umd/index.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/pipeline/advanced/chart/pipes/init/autoDualMeasures.d.ts +0 -2
  58. package/dist/pipeline/advanced/chart/pipes/init/autoScatterMeasures.d.ts +0 -2
package/dist/umd/index.js CHANGED
@@ -195,9 +195,8 @@
195
195
  zBackgroundColor: ()=>zBackgroundColor,
196
196
  registerBarParallel: ()=>registerBarParallel,
197
197
  registerRadar: ()=>registerRadar,
198
- zEncodings: ()=>zEncodings,
199
- pivotTableSpecPipeline: ()=>pivotTableSpecPipeline,
200
198
  zLocale: ()=>zLocale,
199
+ pivotTableSpecPipeline: ()=>pivotTableSpecPipeline,
201
200
  zMeasure: ()=>zMeasure,
202
201
  FoldXMeasureValue: ()=>FoldXMeasureValue,
203
202
  dualAxisAdvancedPipeline: ()=>dualAxisAdvancedPipeline,
@@ -1446,6 +1445,138 @@
1446
1445
  locale: locale || 'zh-CN'
1447
1446
  };
1448
1447
  };
1448
+ const ORIGINAL_DATA = '__OriginalData__';
1449
+ const Separator = '-';
1450
+ const FoldMeasureName = '__MeaName__';
1451
+ const FoldMeasureId = '__MeaId__';
1452
+ const FoldMeasureValue = '__MeaValue__';
1453
+ const MeasureName = FoldMeasureName;
1454
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1455
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1456
+ const FoldXMeasureValue = '__MeaXValue__';
1457
+ const FoldYMeasureValue = '__MeaYValue__';
1458
+ const XEncoding = '__Dim_X__';
1459
+ const YEncoding = '__Dim_Y__';
1460
+ const AngleEncoding = '__Dim_Angle__';
1461
+ const DetailEncoding = '__Dim_Detail__';
1462
+ const ColorEncoding = '__Dim_Color__';
1463
+ const ColorIdEncoding = '__Dim_ColorId__';
1464
+ const getBasicDimensions = (vseed)=>{
1465
+ const { dimensions, dataset } = vseed;
1466
+ const MeaName = {
1467
+ id: MeasureName,
1468
+ alias: intl.i18n`指标名称`,
1469
+ encoding: 'detail'
1470
+ };
1471
+ if (!dataset) throw new Error('dataset is required');
1472
+ if (0 === dataset.length) return [];
1473
+ if (dimensions) {
1474
+ const basicDimensions = dimensions.map((dim)=>({
1475
+ location: 'dimension',
1476
+ ...dim
1477
+ }));
1478
+ if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1479
+ basicDimensions.push(MeaName);
1480
+ return basicDimensions;
1481
+ }
1482
+ const top100dataset = dataset.slice(0, 100);
1483
+ const sample = top100dataset.reduce((prev, cur)=>({
1484
+ ...prev,
1485
+ ...cur
1486
+ }), {});
1487
+ const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1488
+ '',
1489
+ null,
1490
+ void 0
1491
+ ].includes(key)).map((dim)=>({
1492
+ id: dim,
1493
+ alias: dim,
1494
+ location: 'dimension'
1495
+ }));
1496
+ basicDimensions.push(MeaName);
1497
+ return basicDimensions;
1498
+ };
1499
+ const getBasicMeasures = (vseed)=>{
1500
+ const { dataset, measures } = vseed;
1501
+ if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1502
+ return measures;
1503
+ };
1504
+ const generateMeasuresByDataset = (dataset)=>{
1505
+ if (!dataset) throw new Error('dataset is required');
1506
+ if (0 === dataset.length) return [];
1507
+ const top100dataset = dataset.slice(0, 100);
1508
+ const sample = top100dataset.reduce((prev, cur)=>({
1509
+ ...prev,
1510
+ ...cur
1511
+ }), {});
1512
+ const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1513
+ '',
1514
+ null,
1515
+ void 0
1516
+ ].includes(key)).map((measure)=>({
1517
+ id: measure,
1518
+ alias: measure
1519
+ }));
1520
+ return basicMeasures;
1521
+ };
1522
+ const isMeasureTreeWithChildren = (vseed)=>{
1523
+ const { measures } = vseed;
1524
+ if (!measures) return false;
1525
+ return measures.some((measure)=>'children' in measure);
1526
+ };
1527
+ const isMeasureTreeWithParentId = (vseed)=>{
1528
+ const { measures } = vseed;
1529
+ if (!measures) return false;
1530
+ return measures.some((measure)=>'parentId' in measure);
1531
+ };
1532
+ const encodingForLine = (advancedVSeed, context)=>{
1533
+ const { vseed } = context;
1534
+ const { measures: vseedMeasures = [] } = vseed;
1535
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1536
+ const dimensions = getBasicDimensions(vseed);
1537
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1538
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
1539
+ const encoding = {};
1540
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1541
+ else generateDefaultDimensionEncoding(dimensions, encoding);
1542
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1543
+ else generateDefaultMeasureEncoding(measures, encoding);
1544
+ return {
1545
+ ...advancedVSeed,
1546
+ encoding
1547
+ };
1548
+ };
1549
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1550
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
1551
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1552
+ };
1553
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1554
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1555
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
1556
+ encoding.x = uniqueDimIds.slice(0, 1);
1557
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1558
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1559
+ encoding.tooltip = uniqueDimIds;
1560
+ encoding.label = [];
1561
+ encoding.row = [];
1562
+ encoding.column = [];
1563
+ };
1564
+ const generateMeasureEncoding = (measures, encoding)=>{
1565
+ encoding.tooltip = measures.map((item)=>item.id);
1566
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1567
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1568
+ if (color.length > 0) encoding.color = color;
1569
+ };
1570
+ const generateDimensionEncoding = (dimensions, encoding)=>{
1571
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1572
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1573
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1574
+ if (0 === encoding.x.length) encoding.x = [
1575
+ dimensions[0].id
1576
+ ];
1577
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1578
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1579
+ };
1449
1580
  const measureDepth = (measures = [])=>{
1450
1581
  if (!measures) return 0;
1451
1582
  let depth = 1;
@@ -1464,23 +1595,26 @@
1464
1595
  const isVChart = (vseed)=>!isVTable(vseed);
1465
1596
  const isPivotChart = (vseed)=>{
1466
1597
  if (isVTable(vseed)) return false;
1598
+ if (isMeasureTreeWithParentId(vseed)) {
1599
+ const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1600
+ return parentIds && chunk_QJLMYOTX_i(parentIds).length > 1;
1601
+ }
1467
1602
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1468
1603
  const { dimensions = [] } = vseed;
1469
1604
  const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1470
1605
  if (hasRowOrColumnDimension) return true;
1471
1606
  if ('scatter' === vseed.chartType) {
1472
- if (vseed.measures) {
1607
+ if (isMeasureTreeWithChildren(vseed)) {
1473
1608
  const depth = measureDepth(vseed.measures);
1474
- if (3 === depth) return true;
1475
- return false;
1609
+ return 3 === depth;
1476
1610
  }
1477
1611
  if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
1612
+ return false;
1478
1613
  }
1479
1614
  if ('dualAxis' === vseed.chartType) {
1480
- if (vseed.measures) {
1615
+ if (isMeasureTreeWithChildren(vseed)) {
1481
1616
  const depth = measureDepth(vseed.measures);
1482
- if (3 === depth) return true;
1483
- return false;
1617
+ return 3 === depth;
1484
1618
  }
1485
1619
  if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1486
1620
  }
@@ -1491,93 +1625,49 @@
1491
1625
  const hasMeasureGroup = measures && measures.some((measure)=>measure && measure.children);
1492
1626
  return hasRowOrColumnDimension || hasMeasureGroup;
1493
1627
  };
1494
- const autoMeasures_autoMeasures = (advancedVSeed, context)=>{
1495
- const result = {
1496
- ...advancedVSeed
1497
- };
1498
- const { vseed } = context;
1499
- const { measures, dataset } = vseed;
1500
- if (!dataset) throw new Error('dataset is required');
1501
- if (0 === dataset.length) return result;
1502
- if (isPivotChart(vseed)) return autoMeasureGroup(advancedVSeed, context);
1503
- if (measures) {
1504
- result.measures = measures;
1505
- return result;
1506
- }
1507
- const top100dataset = dataset.slice(0, 100);
1508
- const sample = top100dataset.reduce((prev, cur)=>({
1509
- ...prev,
1510
- ...cur
1511
- }), {});
1512
- result.measures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1513
- '',
1514
- null,
1515
- void 0
1516
- ].includes(key)).map((measure)=>({
1517
- id: measure,
1518
- alias: measure
1519
- }));
1520
- return result;
1521
- };
1522
- const autoMeasureGroup = (advancedVSeed, context)=>{
1628
+ const buildMeasures = (advancedVSeed, context)=>{
1523
1629
  const { vseed } = context;
1524
- const { measures } = vseed;
1525
- const hasMeasureGroup = measures?.some((measure)=>measure.children);
1526
- if (!measures) return advancedVSeed;
1527
- if (!hasMeasureGroup) {
1528
- const newMeasures = [
1529
- {
1530
- id: 'measureGroup',
1531
- alias: 'measureGroup',
1532
- children: measures
1533
- }
1534
- ];
1535
- return {
1536
- ...advancedVSeed,
1537
- measures: newMeasures
1538
- };
1630
+ if (isMeasureTreeWithChildren(vseed)) {
1631
+ advancedVSeed.measures = vseed.measures;
1632
+ return advancedVSeed;
1539
1633
  }
1540
- let currentGroup = createEmptyMeasureGroup();
1541
- const measureGroups = [];
1542
- for (const measure of measures)if ('children' in measure) {
1543
- if (currentGroup.children?.length) {
1544
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1545
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1546
- measureGroups.push(currentGroup);
1547
- currentGroup = createEmptyMeasureGroup();
1548
- }
1549
- measureGroups.push(measure);
1550
- } else currentGroup.children?.push(measure);
1551
- if (currentGroup.children?.length) {
1552
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1553
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1554
- measureGroups.push(currentGroup);
1555
- currentGroup = createEmptyMeasureGroup();
1634
+ if (isMeasureTreeWithParentId(vseed)) {
1635
+ advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1636
+ return advancedVSeed;
1556
1637
  }
1557
- advancedVSeed.measures = measureGroups;
1638
+ const basicMeasures = getBasicMeasures(vseed);
1639
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1640
+ else advancedVSeed.measures = basicMeasures;
1558
1641
  return advancedVSeed;
1559
1642
  };
1560
- const createEmptyMeasureGroup = ()=>({
1561
- id: '',
1562
- alias: '',
1563
- children: []
1643
+ const generateMeasuresByParentId = (measures)=>{
1644
+ const measureTree = [];
1645
+ measures.forEach((measure)=>{
1646
+ if (!measure.parentId) return;
1647
+ const parent = measureTree.find((item)=>item.id === measure.parentId);
1648
+ if (parent && 'children' in parent) {
1649
+ parent.children = parent.children || [];
1650
+ parent.children.push(measure);
1651
+ } else measureTree.push({
1652
+ id: measure.parentId,
1653
+ children: [
1654
+ measure
1655
+ ]
1656
+ });
1564
1657
  });
1565
- const ORIGINAL_DATA = '__OriginalData__';
1566
- const Separator = '-';
1567
- const FoldMeasureName = '__MeaName__';
1568
- const FoldMeasureId = '__MeaId__';
1569
- const FoldMeasureValue = '__MeaValue__';
1570
- const MeasureName = FoldMeasureName;
1571
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1572
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1573
- const FoldXMeasureValue = '__MeaXValue__';
1574
- const FoldYMeasureValue = '__MeaYValue__';
1575
- const XEncoding = '__Dim_X__';
1576
- const YEncoding = '__Dim_Y__';
1577
- const AngleEncoding = '__Dim_Angle__';
1578
- const DetailEncoding = '__Dim_Detail__';
1579
- const ColorEncoding = '__Dim_Color__';
1580
- const ColorIdEncoding = '__Dim_ColorId__';
1658
+ return measureTree;
1659
+ };
1660
+ const basicMeasuresToMeasureTree = (measures)=>{
1661
+ const id = measures.map((item)=>item.id).join('-');
1662
+ const alias = measures.map((item)=>item.alias || item.id).join('-');
1663
+ return [
1664
+ {
1665
+ id,
1666
+ alias,
1667
+ children: measures
1668
+ }
1669
+ ];
1670
+ };
1581
1671
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1582
1672
  const result = {
1583
1673
  ...advancedVSeed
@@ -1617,51 +1707,26 @@
1617
1707
  result.dimensions.push(MeaName);
1618
1708
  return result;
1619
1709
  };
1620
- const encodingForLine = (advancedVSeed, context)=>{
1621
- const { vseed } = context;
1622
- const { dimensions } = advancedVSeed;
1623
- if (!dimensions) return advancedVSeed;
1624
- const encoding = vseed.encoding;
1625
- if (encoding) {
1626
- const x = encoding.x || [
1627
- dimensions[0].id
1628
- ];
1629
- const color = encoding.color || [
1630
- (dimensions[1] || dimensions[0]).id
1631
- ];
1632
- const detail = encoding.detail || [];
1633
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1634
- return {
1635
- ...advancedVSeed,
1636
- encoding: {
1637
- ...encoding,
1638
- x,
1639
- color,
1640
- detail: mergedDetail
1641
- }
1642
- };
1643
- }
1644
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1645
- const mergedEncoding = {
1646
- x: dimensions.slice(0, 1).map((item)=>item.id),
1647
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1648
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1649
- tooltip: dimensions.map((item)=>item.id),
1650
- label: [],
1651
- row: [],
1652
- column: []
1653
- };
1654
- return {
1655
- ...advancedVSeed,
1656
- encoding: mergedEncoding
1657
- };
1658
- };
1659
1710
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1660
1711
  const { vseed } = context;
1661
1712
  const usePivotChart = isPivotChart(vseed);
1662
1713
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1663
1714
  return execPipeline(pipeline, context, advancedVSeed);
1664
1715
  };
1716
+ function T(...e) {
1717
+ return chunk_LFJW7BOT_y(chunk_7ZI6JRPB_y, e);
1718
+ }
1719
+ function chunk_7ZI6JRPB_y(e) {
1720
+ let u = e, n = new Set;
1721
+ return (t, i, d)=>{
1722
+ let r = u(t, i, d);
1723
+ return n.has(r) ? chunk_ANXBDSUI_s : (n.add(r), {
1724
+ done: !1,
1725
+ hasNext: !0,
1726
+ next: t
1727
+ });
1728
+ };
1729
+ }
1665
1730
  function chunk_AIG3BDKO_i(...e) {
1666
1731
  return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1667
1732
  }
@@ -1683,9 +1748,8 @@
1683
1748
  for (let r of e)delete o[r];
1684
1749
  return o;
1685
1750
  }
1686
- const foldMeasures = (dataset, measures, encoding, options)=>{
1687
- const { measureId = FoldMeasureId, measureName = FoldMeasureName, measureValue = FoldMeasureValue } = options || {};
1688
- const colorMeasureId = encoding?.color?.length === 1 && measures.some((m)=>m.id === encoding?.color?.[0]) ? encoding?.color?.[0] : void 0;
1751
+ const foldMeasures = (dataset, measures, options)=>{
1752
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1689
1753
  const foldInfo = {
1690
1754
  measureId,
1691
1755
  measureName,
@@ -1784,11 +1848,12 @@
1784
1848
  if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1785
1849
  };
1786
1850
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1787
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1788
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1851
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1852
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1789
1853
  measureId: foldMeasureId,
1790
1854
  measureName: foldMeasureName,
1791
- measureValue: foldMeasureValue
1855
+ measureValue: foldMeasureValue,
1856
+ colorMeasureId
1792
1857
  });
1793
1858
  const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1794
1859
  foldMeasureId,
@@ -1801,6 +1866,24 @@
1801
1866
  unfoldInfo
1802
1867
  };
1803
1868
  };
1869
+ const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
1870
+ const { advancedVSeed } = context;
1871
+ if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
1872
+ return ordinalPipe(spec, context);
1873
+ };
1874
+ const isLinearColor = (advancedVSeed)=>{
1875
+ const { encoding, measures } = advancedVSeed;
1876
+ const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
1877
+ const { color } = encoding;
1878
+ return color?.length === 1 && measureIdList.includes(color[0]);
1879
+ };
1880
+ const getColorMeasureId = (advancedVSeed)=>{
1881
+ if (isLinearColor(advancedVSeed)) {
1882
+ const { encoding } = advancedVSeed;
1883
+ const { color } = encoding;
1884
+ return color?.[0];
1885
+ }
1886
+ };
1804
1887
  const reshapeWithEncoding = (advancedVSeed, context)=>{
1805
1888
  const result = {
1806
1889
  ...advancedVSeed
@@ -1810,7 +1893,9 @@
1810
1893
  const { dimensions, measures, encoding } = advancedVSeed;
1811
1894
  if (!measures || !dimensions || !dataset || !encoding) return result;
1812
1895
  if (0 === measures.length) throw new Error('measures can not be empty');
1813
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1896
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(findAllMeasures(measures), (item)=>item.id), encoding, {
1897
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1898
+ });
1814
1899
  return {
1815
1900
  ...result,
1816
1901
  dataset: newDatasets,
@@ -1845,8 +1930,9 @@
1845
1930
  const measures = measureGroup.children;
1846
1931
  if (!measures) return;
1847
1932
  const groupId = measureGroup.id;
1848
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1849
- foldMeasureValue: `${FoldMeasureValue}${groupId}`
1933
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(measures, (item)=>item.id), encoding, {
1934
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1935
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1850
1936
  });
1851
1937
  const reshapeInfo = {
1852
1938
  id: groupId,
@@ -2062,9 +2148,9 @@
2062
2148
  };
2063
2149
  const lineAdvancedPipeline = [
2064
2150
  initAdvancedVSeed_initAdvancedVSeed,
2065
- autoMeasures_autoMeasures,
2066
- autoDimensions_autoDimensions,
2067
2151
  encodingForLine,
2152
+ buildMeasures,
2153
+ autoDimensions_autoDimensions,
2068
2154
  pivotAdapter([
2069
2155
  reshapeWithEncoding
2070
2156
  ], [
@@ -2077,17 +2163,6 @@
2077
2163
  markStyle_markStyle,
2078
2164
  annotation_annotation
2079
2165
  ];
2080
- const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
2081
- const { advancedVSeed } = context;
2082
- if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
2083
- return ordinalPipe(spec, context);
2084
- };
2085
- const isLinearColor = (advancedVSeed)=>{
2086
- const { encoding, measures } = advancedVSeed;
2087
- const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
2088
- const { color } = encoding;
2089
- return color?.length === 1 && measureIdList.includes(color[0]);
2090
- };
2091
2166
  const initLine = (spec, context)=>{
2092
2167
  const result = {
2093
2168
  ...spec
@@ -3895,51 +3970,58 @@
3895
3970
  };
3896
3971
  const encodingForColumn = (advancedVSeed, context)=>{
3897
3972
  const { vseed } = context;
3898
- const { dimensions } = advancedVSeed;
3899
- if (!dimensions) return advancedVSeed;
3900
- const encoding = vseed.encoding;
3901
- if (encoding) {
3902
- const x = encoding.x || [
3903
- dimensions[0].id
3904
- ];
3905
- const color = encoding.color || [
3906
- (dimensions[1] || dimensions[0]).id
3907
- ];
3908
- const detail = encoding.detail || [];
3909
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
3910
- ...color,
3911
- ...detail
3912
- ]) : detail;
3913
- return {
3914
- ...advancedVSeed,
3915
- encoding: {
3916
- ...encoding,
3917
- x,
3918
- color,
3919
- detail: mergedDetail
3920
- }
3921
- };
3922
- }
3923
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3924
- const mergedEncoding = {
3925
- x: dimensions.slice(0, 1).map((item)=>item.id),
3926
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3927
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3928
- tooltip: dimensions.map((item)=>item.id),
3929
- label: [],
3930
- row: [],
3931
- column: []
3932
- };
3973
+ const { measures: vseedMeasures = [] } = vseed;
3974
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3975
+ const dimensions = getBasicDimensions(vseed);
3976
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3977
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
3978
+ const encoding = {};
3979
+ if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
3980
+ else column_generateDefaultDimensionEncoding(dimensions, encoding);
3981
+ if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
3982
+ else column_generateDefaultMeasureEncoding(measures, encoding);
3933
3983
  return {
3934
3984
  ...advancedVSeed,
3935
- encoding: mergedEncoding
3985
+ encoding
3936
3986
  };
3937
3987
  };
3988
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3989
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
3990
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3991
+ };
3992
+ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3993
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3994
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
3995
+ encoding.x = uniqueDimIds.slice(0, 1);
3996
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3997
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3998
+ encoding.tooltip = uniqueDimIds;
3999
+ encoding.label = [];
4000
+ encoding.row = [];
4001
+ encoding.column = [];
4002
+ };
4003
+ const column_generateMeasureEncoding = (measures, encoding)=>{
4004
+ encoding.tooltip = measures.map((item)=>item.id);
4005
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4006
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4007
+ if (color.length > 0) encoding.color = color;
4008
+ return encoding;
4009
+ };
4010
+ const column_generateDimensionEncoding = (dimensions, encoding)=>{
4011
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4012
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4013
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4014
+ if (0 === encoding.x.length) encoding.x = [
4015
+ dimensions[0].id
4016
+ ];
4017
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4018
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4019
+ };
3938
4020
  const columnAdvancedPipeline = [
3939
4021
  initAdvancedVSeed_initAdvancedVSeed,
3940
- autoMeasures_autoMeasures,
3941
- autoDimensions_autoDimensions,
3942
4022
  encodingForColumn,
4023
+ buildMeasures,
4024
+ autoDimensions_autoDimensions,
3943
4025
  pivotAdapter([
3944
4026
  reshapeWithEncoding
3945
4027
  ], [
@@ -4386,9 +4468,9 @@
4386
4468
  };
4387
4469
  const columnParallelAdvancedPipeline = [
4388
4470
  initAdvancedVSeed_initAdvancedVSeed,
4389
- autoMeasures_autoMeasures,
4390
- autoDimensions_autoDimensions,
4391
4471
  encodingForColumn,
4472
+ buildMeasures,
4473
+ autoDimensions_autoDimensions,
4392
4474
  pivotAdapter([
4393
4475
  reshapeWithEncoding
4394
4476
  ], [
@@ -4483,9 +4565,9 @@
4483
4565
  };
4484
4566
  const columnPercentAdvancedPipeline = [
4485
4567
  initAdvancedVSeed_initAdvancedVSeed,
4486
- autoMeasures_autoMeasures,
4487
- autoDimensions_autoDimensions,
4488
4568
  encodingForColumn,
4569
+ buildMeasures,
4570
+ autoDimensions_autoDimensions,
4489
4571
  pivotAdapter([
4490
4572
  reshapeWithEncoding
4491
4573
  ], [
@@ -4564,46 +4646,53 @@
4564
4646
  };
4565
4647
  const encodingForBar = (advancedVSeed, context)=>{
4566
4648
  const { vseed } = context;
4567
- const { dimensions } = advancedVSeed;
4568
- if (!dimensions) return advancedVSeed;
4569
- const encoding = vseed.encoding;
4570
- if (encoding) {
4571
- const y = encoding.y || [
4572
- dimensions[0].id
4573
- ];
4574
- const color = encoding.color || [
4575
- (dimensions[1] || dimensions[0]).id
4576
- ];
4577
- const detail = encoding.detail || [];
4578
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
4579
- ...color,
4580
- ...detail
4581
- ]) : detail;
4582
- return {
4583
- ...advancedVSeed,
4584
- encoding: {
4585
- ...encoding,
4586
- y,
4587
- color,
4588
- detail: mergedDetail
4589
- }
4590
- };
4591
- }
4592
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4593
- const mergedEncoding = {
4594
- y: dimensions.slice(0, 1).map((item)=>item.id),
4595
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4596
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4597
- tooltip: dimensions.map((item)=>item.id),
4598
- label: [],
4599
- row: [],
4600
- column: []
4601
- };
4649
+ const { measures: vseedMeasures = [] } = vseed;
4650
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4651
+ const dimensions = getBasicDimensions(vseed);
4652
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4653
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4654
+ const encoding = {};
4655
+ if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
4656
+ else bar_generateDefaultDimensionEncoding(dimensions, encoding);
4657
+ if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
4658
+ else bar_generateDefaultMeasureEncoding(measures, encoding);
4602
4659
  return {
4603
4660
  ...advancedVSeed,
4604
- encoding: mergedEncoding
4661
+ encoding
4605
4662
  };
4606
4663
  };
4664
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4665
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
4666
+ encoding.x = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4667
+ };
4668
+ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4669
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4670
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
4671
+ encoding.y = uniqueDimIds.slice(0, 1);
4672
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4673
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4674
+ encoding.tooltip = uniqueDimIds;
4675
+ encoding.label = [];
4676
+ encoding.row = [];
4677
+ encoding.column = [];
4678
+ };
4679
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4680
+ encoding.tooltip = measures.map((item)=>item.id);
4681
+ encoding.x = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4682
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4683
+ if (color.length > 0) encoding.color = color;
4684
+ return encoding;
4685
+ };
4686
+ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4687
+ encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4688
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4689
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4690
+ if (0 === encoding.y.length) encoding.y = [
4691
+ dimensions[0].id
4692
+ ];
4693
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4694
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4695
+ };
4607
4696
  const sortYBandAxis = (advancedVSeed, context)=>{
4608
4697
  const result = {
4609
4698
  ...advancedVSeed
@@ -4622,9 +4711,9 @@
4622
4711
  };
4623
4712
  const barAdvancedPipeline = [
4624
4713
  initAdvancedVSeed_initAdvancedVSeed,
4625
- autoMeasures_autoMeasures,
4626
- autoDimensions_autoDimensions,
4627
4714
  encodingForBar,
4715
+ buildMeasures,
4716
+ autoDimensions_autoDimensions,
4628
4717
  pivotAdapter([
4629
4718
  reshapeWithEncoding
4630
4719
  ], [
@@ -4975,7 +5064,7 @@
4975
5064
  };
4976
5065
  const barParallelAdvancedPipeline = [
4977
5066
  initAdvancedVSeed_initAdvancedVSeed,
4978
- autoMeasures_autoMeasures,
5067
+ buildMeasures,
4979
5068
  autoDimensions_autoDimensions,
4980
5069
  encodingForBar,
4981
5070
  pivotAdapter([
@@ -5071,7 +5160,7 @@
5071
5160
  };
5072
5161
  const barPercentAdvancedPipeline = [
5073
5162
  initAdvancedVSeed_initAdvancedVSeed,
5074
- autoMeasures_autoMeasures,
5163
+ buildMeasures,
5075
5164
  autoDimensions_autoDimensions,
5076
5165
  encodingForBar,
5077
5166
  pivotAdapter([
@@ -5142,9 +5231,9 @@
5142
5231
  };
5143
5232
  const areaAdvancedPipeline = [
5144
5233
  initAdvancedVSeed_initAdvancedVSeed,
5145
- autoMeasures_autoMeasures,
5146
- autoDimensions_autoDimensions,
5147
5234
  encodingForColumn,
5235
+ buildMeasures,
5236
+ autoDimensions_autoDimensions,
5148
5237
  pivotAdapter([
5149
5238
  reshapeWithEncoding
5150
5239
  ], [
@@ -5300,9 +5389,9 @@
5300
5389
  };
5301
5390
  const areaPercentAdvancedPipeline = [
5302
5391
  initAdvancedVSeed_initAdvancedVSeed,
5303
- autoMeasures_autoMeasures,
5304
- autoDimensions_autoDimensions,
5305
5392
  encodingForColumn,
5393
+ buildMeasures,
5394
+ autoDimensions_autoDimensions,
5306
5395
  pivotAdapter([
5307
5396
  reshapeWithEncoding
5308
5397
  ], [
@@ -5376,131 +5465,148 @@
5376
5465
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5377
5466
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5378
5467
  };
5379
- const autoScatterMeasures = (advancedVSeed, context)=>{
5380
- const result = {
5381
- ...advancedVSeed
5468
+ const encodingForScatter = (advancedVSeed, context)=>{
5469
+ const { vseed } = context;
5470
+ const { measures: vseedMeasures = [] } = vseed;
5471
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5472
+ const dimensions = getBasicDimensions(vseed);
5473
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5474
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5475
+ const encoding = {};
5476
+ if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
5477
+ else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
5478
+ if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
5479
+ else scatter_generateDefaultMeasureEncoding(measures, encoding);
5480
+ return {
5481
+ ...advancedVSeed,
5482
+ encoding
5382
5483
  };
5484
+ };
5485
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5486
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
5487
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5488
+ };
5489
+ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5490
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5491
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensionsWithoutMeasureName.map((d)=>d.id));
5492
+ encoding.color = uniqueDimIds.slice(0);
5493
+ encoding.detail = uniqueDimIds.slice(0);
5494
+ encoding.tooltip = uniqueDimIds;
5495
+ encoding.label = [];
5496
+ encoding.row = [];
5497
+ encoding.column = [];
5498
+ };
5499
+ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5500
+ encoding.tooltip = measures.map((item)=>item.id);
5501
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5502
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5503
+ if (color.length > 0) encoding.color = color;
5504
+ };
5505
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5506
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5507
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5508
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5509
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5510
+ };
5511
+ const buildMeasuresForScatter = (advancedVSeed, context)=>{
5383
5512
  const { vseed } = context;
5384
- const { dataset, scatterMeasures, measures } = vseed;
5385
- if (!dataset) throw new Error('dataset is required');
5386
- if (0 === dataset.length) return result;
5387
- if (scatterMeasures) {
5388
- result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5389
- return result;
5513
+ if (isMeasureTreeWithChildren(vseed)) {
5514
+ advancedVSeed.measures = vseed.measures;
5515
+ return advancedVSeed;
5390
5516
  }
5391
- if (measures && measureDepth(measures) > 1) {
5392
- result.measures = measures;
5393
- return result;
5517
+ if (isMeasureTreeWithParentId(vseed)) {
5518
+ advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5519
+ return advancedVSeed;
5394
5520
  }
5395
- const top100dataset = dataset.slice(0, 100);
5396
- const sample = top100dataset.reduce((prev, cur)=>({
5397
- ...prev,
5398
- ...cur
5399
- }), {});
5400
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5401
- '',
5402
- null,
5403
- void 0
5404
- ].includes(key)).map((measure)=>({
5405
- id: measure,
5406
- alias: measure
5407
- }));
5408
- if (0 === newMeasures.length) result.measures = [];
5409
- else if (1 === newMeasures.length) result.measures = [
5410
- {
5411
- id: 'primary',
5412
- alias: 'primary',
5413
- children: newMeasures
5414
- }
5415
- ];
5416
- else if (newMeasures.length > 1) result.measures = [
5417
- {
5418
- id: 'primary',
5419
- alias: 'primary',
5420
- children: newMeasures.slice(0, 1)
5421
- },
5521
+ const basicMeasures = getBasicMeasures(vseed);
5522
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5523
+ advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5524
+ return advancedVSeed;
5525
+ };
5526
+ const basicMeasuresToScatterMeasures = (basicMeasures)=>{
5527
+ const yMeasures = [];
5528
+ const xMeasures = [];
5529
+ for(let index = 0; index < basicMeasures.length; index++){
5530
+ const item = basicMeasures[index];
5531
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5532
+ item.encoding
5533
+ ];
5534
+ const isYAxis = encoding.includes('yAxis');
5535
+ const isXAxis = encoding.includes('xAxis');
5536
+ if (isYAxis) yMeasures.push(item);
5537
+ else if (isXAxis) xMeasures.push(item);
5538
+ else if (0 === index) yMeasures.push(item);
5539
+ else xMeasures.push(item);
5540
+ }
5541
+ return [
5422
5542
  {
5423
- id: 'secondary',
5424
- alias: 'secondary',
5425
- children: newMeasures.slice(1)
5543
+ id: 'scatterMeasures',
5544
+ xMeasures,
5545
+ yMeasures
5426
5546
  }
5427
5547
  ];
5428
- return result;
5429
5548
  };
5430
5549
  const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
5431
5550
  const measureTree = scatterMeasures.map((item, index)=>{
5432
- const { xMeasures, yMeasures } = item;
5551
+ const { id, xMeasures, yMeasures } = item;
5433
5552
  const groupChildren = [];
5434
- let id = '';
5553
+ let groupId = `${id}-`;
5435
5554
  if (xMeasures) {
5436
- const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
5555
+ const arrPrimaryMeasures = Array.isArray(xMeasures) ? xMeasures : [
5437
5556
  xMeasures
5438
5557
  ];
5439
- const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
5440
- id += alias;
5558
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5559
+ groupId += alias;
5441
5560
  groupChildren.push({
5442
5561
  id: `${index}-x`,
5443
- alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
5444
- children: arrXMeasures
5562
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5563
+ children: arrPrimaryMeasures
5445
5564
  });
5446
5565
  }
5447
5566
  if (yMeasures) {
5448
- const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
5567
+ const arrSecondaryMeasures = Array.isArray(yMeasures) ? yMeasures : [
5449
5568
  yMeasures
5450
5569
  ];
5451
- const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
5452
- id += alias;
5570
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5571
+ groupId += alias;
5453
5572
  groupChildren.push({
5454
5573
  id: `${index}-y`,
5455
- alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
5456
- children: arrYMeasures
5574
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5575
+ children: arrSecondaryMeasures
5457
5576
  });
5458
5577
  }
5459
5578
  return {
5460
- id,
5461
- alias: id,
5579
+ id: groupId,
5580
+ alias: groupId,
5462
5581
  children: groupChildren
5463
5582
  };
5464
5583
  });
5465
5584
  if (1 === scatterMeasures.length) return measureTree[0].children || [];
5466
5585
  return measureTree;
5467
5586
  };
5468
- const encodingForScatter = (advancedVSeed, context)=>{
5469
- const { vseed } = context;
5470
- const { dimensions } = advancedVSeed;
5471
- if (!dimensions) return advancedVSeed;
5472
- const encoding = vseed.encoding;
5473
- if (encoding) {
5474
- const detail = encoding.detail || [];
5475
- const color = encoding.color || [
5476
- (dimensions[1] || dimensions[0]).id
5587
+ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5588
+ const scatterMeasures = [];
5589
+ measures.forEach((item)=>{
5590
+ if (!item.parentId) return;
5591
+ if (!scatterMeasures.find((d)=>d.id === item.parentId)) scatterMeasures.push({
5592
+ id: item.parentId,
5593
+ yMeasures: [],
5594
+ xMeasures: []
5595
+ });
5596
+ const scatterChart = scatterMeasures.find((d)=>d.id === item.parentId);
5597
+ if (!scatterChart || !Array.isArray(scatterChart.yMeasures) || !Array.isArray(scatterChart.xMeasures)) return;
5598
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5599
+ item.encoding
5477
5600
  ];
5478
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
5479
- ...color,
5480
- ...detail
5481
- ]) : detail;
5482
- return {
5483
- ...advancedVSeed,
5484
- encoding: {
5485
- ...encoding,
5486
- color,
5487
- detail: mergedDetail
5488
- }
5489
- };
5490
- }
5491
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5492
- const mergedEncoding = {
5493
- color: dimensions.slice(0).map((item)=>item.id),
5494
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5495
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5496
- label: [],
5497
- row: [],
5498
- column: []
5499
- };
5500
- return {
5501
- ...advancedVSeed,
5502
- encoding: mergedEncoding
5503
- };
5601
+ const isX = encoding.includes('xAxis');
5602
+ const isY = encoding.includes('yAxis');
5603
+ const isEmpty = !encoding.length;
5604
+ if (isY) scatterChart.yMeasures.push(item);
5605
+ else if (isX) scatterChart.xMeasures.push(item);
5606
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5607
+ else scatterChart.xMeasures.push(item);
5608
+ });
5609
+ return scatterMeasuresToMeasureTree(scatterMeasures);
5504
5610
  };
5505
5611
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5506
5612
  const result = {
@@ -5518,18 +5624,20 @@
5518
5624
  const xMeasures = measures[0];
5519
5625
  const yMeasures = measures[1] || xMeasures;
5520
5626
  if (xMeasures && xMeasures.children) {
5521
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5627
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (d)=>d.id), T(xMeasures.children, (d)=>d.id), encoding, {
5522
5628
  foldMeasureValue: FoldXMeasureValue,
5523
- colorItemAsId: true
5629
+ colorItemAsId: true,
5630
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5524
5631
  });
5525
5632
  datasets.push(newDataset);
5526
5633
  foldInfoList.push(foldInfo);
5527
5634
  unfoldInfoList.push(unfoldInfo);
5528
5635
  }
5529
5636
  if (yMeasures && yMeasures.children) {
5530
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5637
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], T(dimensions, (d)=>d.id), T(yMeasures.children, (d)=>d.id), encoding, {
5531
5638
  foldMeasureValue: FoldYMeasureValue,
5532
- colorItemAsId: true
5639
+ colorItemAsId: true,
5640
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5533
5641
  });
5534
5642
  datasets[0] = newDataset;
5535
5643
  foldInfoList.push(foldInfo);
@@ -5584,7 +5692,8 @@
5584
5692
  if (xMeasures && xMeasures.children) {
5585
5693
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5586
5694
  foldMeasureValue: `${FoldXMeasureValue}${index}`,
5587
- colorItemAsId: true
5695
+ colorItemAsId: true,
5696
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5588
5697
  });
5589
5698
  datasets.push(newDataset);
5590
5699
  foldInfoList.push(foldInfo);
@@ -5593,7 +5702,8 @@
5593
5702
  if (yMeasures && yMeasures.children) {
5594
5703
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
5595
5704
  foldMeasureValue: `${FoldYMeasureValue}${index}`,
5596
- colorItemAsId: true
5705
+ colorItemAsId: true,
5706
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5597
5707
  });
5598
5708
  datasets.push(newDataset);
5599
5709
  foldInfoList.push(foldInfo);
@@ -5628,9 +5738,9 @@
5628
5738
  };
5629
5739
  const scatterAdvancedPipeline = [
5630
5740
  initAdvancedVSeed_initAdvancedVSeed,
5631
- autoScatterMeasures,
5632
- autoDimensions_autoDimensions,
5633
5741
  encodingForScatter,
5742
+ buildMeasuresForScatter,
5743
+ autoDimensions_autoDimensions,
5634
5744
  pivotAdapter([
5635
5745
  reshapeWithScatterEncoding
5636
5746
  ], [
@@ -5775,68 +5885,104 @@
5775
5885
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5776
5886
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5777
5887
  };
5778
- const autoDualMeasures = (advancedVSeed, context)=>{
5779
- const result = {
5780
- ...advancedVSeed
5888
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5889
+ const { vseed } = context;
5890
+ const { measures: vseedMeasures = [] } = vseed;
5891
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5892
+ const dimensions = getBasicDimensions(vseed);
5893
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5894
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5895
+ const encoding = {};
5896
+ if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
5897
+ else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
5898
+ if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
5899
+ else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
5900
+ return {
5901
+ ...advancedVSeed,
5902
+ encoding
5781
5903
  };
5904
+ };
5905
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5906
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
5907
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5908
+ };
5909
+ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5910
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5911
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
5912
+ encoding.x = uniqueDimIds.slice(0, 1);
5913
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5914
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5915
+ encoding.tooltip = uniqueDimIds;
5916
+ encoding.label = [];
5917
+ encoding.row = [];
5918
+ encoding.column = [];
5919
+ };
5920
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5921
+ encoding.tooltip = measures.map((item)=>item.id);
5922
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5923
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5924
+ if (color.length > 0) encoding.color = color;
5925
+ return encoding;
5926
+ };
5927
+ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5928
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5929
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5930
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5931
+ if (0 === encoding.x.length) encoding.x = [
5932
+ dimensions[0].id
5933
+ ];
5934
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5935
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5936
+ };
5937
+ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5782
5938
  const { vseed } = context;
5783
- const { dataset, dualMeasures, measures } = vseed;
5784
- if (!dataset) throw new Error('dataset is required');
5785
- if (0 === dataset.length) return result;
5786
- if (dualMeasures) {
5787
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
5788
- return result;
5939
+ if (isMeasureTreeWithChildren(vseed)) {
5940
+ advancedVSeed.measures = vseed.measures;
5941
+ return advancedVSeed;
5789
5942
  }
5790
- if (measures && measureDepth(measures) > 1) {
5791
- result.measures = measures;
5792
- return result;
5943
+ if (isMeasureTreeWithParentId(vseed)) {
5944
+ advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5945
+ return advancedVSeed;
5793
5946
  }
5794
- const top100dataset = dataset.slice(0, 100);
5795
- const sample = top100dataset.reduce((prev, cur)=>({
5796
- ...prev,
5797
- ...cur
5798
- }), {});
5799
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5800
- '',
5801
- null,
5802
- void 0
5803
- ].includes(key)).map((measure)=>({
5804
- id: measure,
5805
- alias: measure
5806
- }));
5807
- if (0 === newMeasures.length) result.measures = [];
5808
- else if (1 === newMeasures.length) result.measures = [
5809
- {
5810
- id: 'primary',
5811
- alias: 'primary',
5812
- children: newMeasures
5813
- }
5814
- ];
5815
- else if (newMeasures.length > 1) result.measures = [
5816
- {
5817
- id: 'primary',
5818
- alias: 'primary',
5819
- children: newMeasures.slice(0, 1)
5820
- },
5947
+ const basicMeasures = getBasicMeasures(vseed);
5948
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5949
+ advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5950
+ return advancedVSeed;
5951
+ };
5952
+ const basicMeasuresToDualMeasures = (basicMeasures)=>{
5953
+ const primaryMeasures = [];
5954
+ const secondaryMeasures = [];
5955
+ for(let index = 0; index < basicMeasures.length; index++){
5956
+ const item = basicMeasures[index];
5957
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5958
+ item.encoding
5959
+ ];
5960
+ const isPrimaryYAxis = encoding.includes('primaryYAxis');
5961
+ const isSecondaryYAxis = encoding.includes('secondaryYAxis');
5962
+ if (isPrimaryYAxis) primaryMeasures.push(item);
5963
+ else if (isSecondaryYAxis) secondaryMeasures.push(item);
5964
+ else if (0 === index) primaryMeasures.push(item);
5965
+ else secondaryMeasures.push(item);
5966
+ }
5967
+ return [
5821
5968
  {
5822
- id: 'secondary',
5823
- alias: 'secondary',
5824
- children: newMeasures.slice(1)
5969
+ id: 'dualMeasures',
5970
+ primaryMeasures,
5971
+ secondaryMeasures
5825
5972
  }
5826
5973
  ];
5827
- return result;
5828
5974
  };
5829
5975
  const dualMeasuresToMeasureTree = (dualMeasures)=>{
5830
5976
  const measureTree = dualMeasures.map((item, index)=>{
5831
- const { primaryMeasures, secondaryMeasures } = item;
5977
+ const { id, primaryMeasures, secondaryMeasures } = item;
5832
5978
  const groupChildren = [];
5833
- let id = '';
5979
+ let groupId = `${id}-`;
5834
5980
  if (primaryMeasures) {
5835
5981
  const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5836
5982
  primaryMeasures
5837
5983
  ];
5838
5984
  const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5839
- id += alias;
5985
+ groupId += alias;
5840
5986
  groupChildren.push({
5841
5987
  id: `${index}-primary`,
5842
5988
  alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5848,7 +5994,7 @@
5848
5994
  secondaryMeasures
5849
5995
  ];
5850
5996
  const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5851
- id += alias;
5997
+ groupId += alias;
5852
5998
  groupChildren.push({
5853
5999
  id: `${index}-secondary`,
5854
6000
  alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5856,54 +6002,37 @@
5856
6002
  });
5857
6003
  }
5858
6004
  return {
5859
- id,
5860
- alias: id,
6005
+ id: groupId,
6006
+ alias: groupId,
5861
6007
  children: groupChildren
5862
6008
  };
5863
6009
  });
5864
6010
  if (1 === dualMeasures.length) return measureTree[0].children || [];
5865
6011
  return measureTree;
5866
6012
  };
5867
- const encodingForDualAxis = (advancedVSeed, context)=>{
5868
- const { vseed } = context;
5869
- const { dimensions } = advancedVSeed;
5870
- if (!dimensions) return advancedVSeed;
5871
- const encoding = vseed.encoding;
5872
- if (encoding) {
5873
- const x = encoding.x || [
5874
- dimensions[0].id
5875
- ];
5876
- const color = encoding.color || [
5877
- (dimensions[1] || dimensions[0]).id
6013
+ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
6014
+ const dualMeasures = [];
6015
+ measures.forEach((item)=>{
6016
+ if (!item.parentId) return;
6017
+ if (!dualMeasures.find((d)=>d.id === item.parentId)) dualMeasures.push({
6018
+ id: item.parentId,
6019
+ primaryMeasures: [],
6020
+ secondaryMeasures: []
6021
+ });
6022
+ const dualChart = dualMeasures.find((d)=>d.id === item.parentId);
6023
+ if (!dualChart || !Array.isArray(dualChart.primaryMeasures) || !Array.isArray(dualChart.secondaryMeasures)) return;
6024
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
6025
+ item.encoding
5878
6026
  ];
5879
- const detail = encoding.detail || [];
5880
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
5881
- ...color,
5882
- ...detail
5883
- ]) : detail;
5884
- return {
5885
- ...advancedVSeed,
5886
- encoding: {
5887
- ...encoding,
5888
- x,
5889
- color,
5890
- detail: mergedDetail
5891
- }
5892
- };
5893
- }
5894
- const mergedEncoding = {
5895
- x: dimensions.slice(0, 1).map((item)=>item.id),
5896
- color: dimensions.slice(1).map((item)=>item.id),
5897
- detail: dimensions.slice(1).map((item)=>item.id),
5898
- tooltip: dimensions.map((item)=>item.id),
5899
- label: [],
5900
- row: [],
5901
- column: []
5902
- };
5903
- return {
5904
- ...advancedVSeed,
5905
- encoding: mergedEncoding
5906
- };
6027
+ const isPrimary = encoding.includes('primaryYAxis');
6028
+ const isSecondary = encoding.includes('secondaryYAxis');
6029
+ const isEmpty = !item.encoding;
6030
+ if (isPrimary) dualChart.primaryMeasures.push(item);
6031
+ else if (isSecondary) dualChart.secondaryMeasures.push(item);
6032
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
6033
+ else dualChart.secondaryMeasures.push(item);
6034
+ });
6035
+ return dualMeasuresToMeasureTree(dualMeasures);
5907
6036
  };
5908
6037
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5909
6038
  const result = {
@@ -5922,7 +6051,8 @@
5922
6051
  const secondaryMeasures = measures[1] || [];
5923
6052
  if (primaryMeasures && primaryMeasures.children) {
5924
6053
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5925
- foldMeasureValue: FoldPrimaryMeasureValue
6054
+ foldMeasureValue: FoldPrimaryMeasureValue,
6055
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5926
6056
  });
5927
6057
  datasets.push(newDataset);
5928
6058
  foldInfoList.push(foldInfo);
@@ -5930,7 +6060,8 @@
5930
6060
  }
5931
6061
  if (secondaryMeasures && secondaryMeasures.children) {
5932
6062
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5933
- foldMeasureValue: FoldSecondaryMeasureValue
6063
+ foldMeasureValue: FoldSecondaryMeasureValue,
6064
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5934
6065
  });
5935
6066
  datasets.push(newDataset);
5936
6067
  foldInfoList.push(foldInfo);
@@ -5984,7 +6115,8 @@
5984
6115
  const secondaryMeasures = measures[1] || [];
5985
6116
  if (primaryMeasures && primaryMeasures.children) {
5986
6117
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5987
- foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
6118
+ foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
6119
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5988
6120
  });
5989
6121
  datasets.push(newDataset);
5990
6122
  foldInfoList.push(foldInfo);
@@ -5992,7 +6124,8 @@
5992
6124
  }
5993
6125
  if (secondaryMeasures && secondaryMeasures.children) {
5994
6126
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5995
- foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
6127
+ foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`,
6128
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5996
6129
  });
5997
6130
  datasets.push(newDataset);
5998
6131
  foldInfoList.push(foldInfo);
@@ -6050,9 +6183,9 @@
6050
6183
  };
6051
6184
  const dualAxisAdvancedPipeline = [
6052
6185
  initAdvancedVSeed_initAdvancedVSeed,
6053
- autoDualMeasures,
6054
- autoDimensions_autoDimensions,
6055
6186
  encodingForDualAxis,
6187
+ buildMeasuresForDualAxis,
6188
+ autoDimensions_autoDimensions,
6056
6189
  pivotAdapter([
6057
6190
  reshapeWithDualEncoding
6058
6191
  ], [
@@ -6137,7 +6270,7 @@
6137
6270
  result.direction = 'vertical';
6138
6271
  result.xField = unfoldInfo.encodingX;
6139
6272
  if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
6140
- result.seriesField = unfoldInfo.encodingColorId;
6273
+ result.seriesField = isLinearColor(advancedVSeed) ? unfoldInfo.encodingDetail : unfoldInfo.encodingColorId;
6141
6274
  result.animation = true;
6142
6275
  return result;
6143
6276
  };
@@ -6763,6 +6896,37 @@
6763
6896
  ];
6764
6897
  return result;
6765
6898
  };
6899
+ const linearColorForDualAxis = (spec, context)=>{
6900
+ const result = {
6901
+ ...spec
6902
+ };
6903
+ const { advancedVSeed } = context;
6904
+ const { datasetReshapeInfo, chartType } = advancedVSeed;
6905
+ const { unfoldInfo, id } = datasetReshapeInfo[0];
6906
+ const baseConfig = advancedVSeed.config[chartType];
6907
+ if (!baseConfig || !baseConfig.color) return result;
6908
+ const { color } = baseConfig;
6909
+ const { colorScheme, linearColorScheme } = color;
6910
+ result.color = {
6911
+ type: 'linear',
6912
+ range: linearColorScheme || colorScheme || [],
6913
+ domain: [
6914
+ {
6915
+ dataId: `${id}-primary-dataset`,
6916
+ fields: [
6917
+ unfoldInfo.encodingColor
6918
+ ]
6919
+ },
6920
+ {
6921
+ dataId: `${id}-secondary-dataset`,
6922
+ fields: [
6923
+ unfoldInfo.encodingColor
6924
+ ]
6925
+ }
6926
+ ]
6927
+ };
6928
+ return result;
6929
+ };
6766
6930
  const dualAxis = [
6767
6931
  seriesDualAxis([
6768
6932
  initDualAxisPrimary,
@@ -6771,11 +6935,11 @@
6771
6935
  labelPrimary,
6772
6936
  tooltipPrimary,
6773
6937
  progressive,
6774
- barStyle_barStyle,
6775
- pointStyle_pointStyle,
6938
+ colorBarStyleFill(barStyle_barStyle),
6939
+ colorPointStyleFill(pointStyle_pointStyle),
6776
6940
  pointStateDimensionHover,
6777
- lineStyle_lineStyle,
6778
- areaStyle_areaStyle
6941
+ colorLineStyleFill(lineStyle_lineStyle),
6942
+ colorAreaStyleFill(areaStyle_areaStyle)
6779
6943
  ], [
6780
6944
  initDualAxisSecondary,
6781
6945
  dualChartTypeSecondary,
@@ -6783,18 +6947,18 @@
6783
6947
  labelSecondary,
6784
6948
  tooltipSecondary,
6785
6949
  progressive,
6786
- barStyle_barStyle,
6787
- pointStyle_pointStyle,
6950
+ colorBarStyleFill(barStyle_barStyle),
6951
+ colorPointStyleFill(pointStyle_pointStyle),
6788
6952
  pointStateDimensionHover,
6789
- lineStyle_lineStyle,
6790
- areaStyle_areaStyle
6953
+ colorLineStyleFill(lineStyle_lineStyle),
6954
+ colorAreaStyleFill(areaStyle_areaStyle)
6791
6955
  ]),
6792
6956
  xBand,
6793
6957
  yLinearPrimary,
6794
6958
  yLinearSecondary,
6795
- color_color,
6959
+ colorAdapter(color_color, linearColorForDualAxis),
6960
+ colorAdapter(discreteLegend, colorLegend),
6796
6961
  background_backgroundColor,
6797
- discreteLegend,
6798
6962
  verticalCrosshairRect,
6799
6963
  annotationPoint_annotationPoint,
6800
6964
  annotationVerticalLine_annotationVerticalLine,
@@ -6814,11 +6978,11 @@
6814
6978
  labelPrimary,
6815
6979
  tooltipPrimary,
6816
6980
  progressive,
6817
- barStyle_barStyle,
6818
- pointStyle_pointStyle,
6981
+ colorBarStyleFill(barStyle_barStyle),
6982
+ colorPointStyleFill(pointStyle_pointStyle),
6819
6983
  pointStateDimensionHover,
6820
- lineStyle_lineStyle,
6821
- areaStyle_areaStyle
6984
+ colorLineStyleFill(lineStyle_lineStyle),
6985
+ colorAreaStyleFill(areaStyle_areaStyle)
6822
6986
  ], [
6823
6987
  initDualAxisSecondary,
6824
6988
  dualChartTypeSecondary,
@@ -6826,16 +6990,16 @@
6826
6990
  labelSecondary,
6827
6991
  tooltipSecondary,
6828
6992
  progressive,
6829
- barStyle_barStyle,
6830
- pointStyle_pointStyle,
6993
+ colorBarStyleFill(barStyle_barStyle),
6994
+ colorPointStyleFill(pointStyle_pointStyle),
6831
6995
  pointStateDimensionHover,
6832
- lineStyle_lineStyle,
6833
- areaStyle_areaStyle
6996
+ colorLineStyleFill(lineStyle_lineStyle),
6997
+ colorAreaStyleFill(areaStyle_areaStyle)
6834
6998
  ]),
6835
6999
  xBand,
6836
7000
  yLinearPrimary,
6837
7001
  yLinearSecondary,
6838
- color_color,
7002
+ colorAdapter(color_color, linearColor),
6839
7003
  background_backgroundColor,
6840
7004
  verticalCrosshairRect,
6841
7005
  annotationPoint_annotationPoint,
@@ -6845,7 +7009,7 @@
6845
7009
  ]),
6846
7010
  pivotRowDimensions,
6847
7011
  pivotColumnDimensions,
6848
- pivotDiscreteLegend
7012
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
6849
7013
  ];
6850
7014
  const dualAxisSpecPipeline = [
6851
7015
  pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
@@ -6856,33 +7020,51 @@
6856
7020
  };
6857
7021
  const encodingForPie = (advancedVSeed, context)=>{
6858
7022
  const { vseed } = context;
6859
- const { dimensions } = advancedVSeed;
6860
- if (!dimensions) return advancedVSeed;
6861
- const encoding = vseed.encoding;
6862
- if (encoding) return {
6863
- ...advancedVSeed,
6864
- encoding: {
6865
- ...encoding
6866
- }
6867
- };
6868
- const mergedEncoding = {
6869
- color: dimensions.slice(0).map((item)=>item.id),
6870
- detail: dimensions.slice(0).map((item)=>item.id),
6871
- tooltip: dimensions.map((item)=>item.id),
6872
- label: [],
6873
- row: [],
6874
- column: []
6875
- };
7023
+ const { measures: vseedMeasures = [] } = vseed;
7024
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7025
+ const dimensions = getBasicDimensions(vseed);
7026
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7027
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7028
+ const encoding = {};
7029
+ if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
7030
+ else pie_generateDefaultDimensionEncoding(dimensions, encoding);
7031
+ if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
7032
+ else pie_generateDefaultMeasureEncoding(measures, encoding);
6876
7033
  return {
6877
7034
  ...advancedVSeed,
6878
- encoding: mergedEncoding
6879
- };
7035
+ encoding
7036
+ };
7037
+ };
7038
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
7039
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7040
+ encoding.angle = chunk_QJLMYOTX_i(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7041
+ };
7042
+ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7043
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7044
+ encoding.color = uniqueDimIds.slice(0);
7045
+ encoding.detail = uniqueDimIds.slice(0);
7046
+ encoding.tooltip = uniqueDimIds;
7047
+ encoding.label = [];
7048
+ encoding.row = [];
7049
+ encoding.column = [];
7050
+ };
7051
+ const pie_generateMeasureEncoding = (measures, encoding)=>{
7052
+ encoding.tooltip = measures.map((item)=>item.id);
7053
+ encoding.angle = chunk_QJLMYOTX_i(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7054
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7055
+ if (color.length > 0) encoding.color = color;
7056
+ };
7057
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
7058
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7059
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7060
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7061
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6880
7062
  };
6881
7063
  const pieAdvancedPipeline = [
6882
7064
  initAdvancedVSeed_initAdvancedVSeed,
6883
- autoMeasures_autoMeasures,
6884
- autoDimensions_autoDimensions,
6885
7065
  encodingForPie,
7066
+ buildMeasures,
7067
+ autoDimensions_autoDimensions,
6886
7068
  pivotAdapter([
6887
7069
  reshapeWithEncoding
6888
7070
  ], [
@@ -6971,7 +7153,7 @@
6971
7153
  };
6972
7154
  const donutAdvancedPipeline = [
6973
7155
  initAdvancedVSeed_initAdvancedVSeed,
6974
- autoMeasures_autoMeasures,
7156
+ buildMeasures,
6975
7157
  autoDimensions_autoDimensions,
6976
7158
  encodingForPie,
6977
7159
  pivotAdapter([
@@ -7061,51 +7243,57 @@
7061
7243
  };
7062
7244
  const encodingForRose = (advancedVSeed, context)=>{
7063
7245
  const { vseed } = context;
7064
- const { dimensions } = advancedVSeed;
7065
- if (!dimensions) return advancedVSeed;
7066
- const encoding = vseed.encoding;
7067
- if (encoding) {
7068
- const angle = encoding.angle || [
7069
- dimensions[0].id
7070
- ];
7071
- const color = encoding.color || [
7072
- (dimensions[1] || dimensions[0]).id
7073
- ];
7074
- const detail = encoding.detail || [];
7075
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
7076
- ...color,
7077
- ...detail
7078
- ]) : detail;
7079
- return {
7080
- ...advancedVSeed,
7081
- encoding: {
7082
- ...encoding,
7083
- angle,
7084
- color,
7085
- detail: mergedDetail
7086
- }
7087
- };
7088
- }
7089
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7090
- const mergedEncoding = {
7091
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7092
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7093
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7094
- tooltip: dimensions.map((item)=>item.id),
7095
- label: [],
7096
- row: [],
7097
- column: []
7098
- };
7246
+ const { measures: vseedMeasures = [] } = vseed;
7247
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7248
+ const dimensions = getBasicDimensions(vseed);
7249
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7250
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7251
+ const encoding = {};
7252
+ if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
7253
+ else rose_generateDefaultDimensionEncoding(dimensions, encoding);
7254
+ if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
7255
+ else rose_generateDefaultMeasureEncoding(measures, encoding);
7099
7256
  return {
7100
7257
  ...advancedVSeed,
7101
- encoding: mergedEncoding
7258
+ encoding
7102
7259
  };
7103
7260
  };
7261
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
7262
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7263
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7264
+ };
7265
+ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7266
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7267
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7268
+ encoding.angle = uniqueDimIds.slice(0, 1);
7269
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7270
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7271
+ encoding.tooltip = uniqueDimIds;
7272
+ encoding.label = [];
7273
+ encoding.row = [];
7274
+ encoding.column = [];
7275
+ };
7276
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
7277
+ encoding.tooltip = measures.map((item)=>item.id);
7278
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7279
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7280
+ if (color.length > 0) encoding.color = color;
7281
+ };
7282
+ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
7283
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7284
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7285
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7286
+ if (0 === encoding.angle.length) encoding.angle = [
7287
+ dimensions[0].id
7288
+ ];
7289
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7290
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7291
+ };
7104
7292
  const roseAdvancedPipeline = [
7105
7293
  initAdvancedVSeed_initAdvancedVSeed,
7106
- autoMeasures_autoMeasures,
7107
- autoDimensions_autoDimensions,
7108
7294
  encodingForRose,
7295
+ buildMeasures,
7296
+ autoDimensions_autoDimensions,
7109
7297
  pivotAdapter([
7110
7298
  reshapeWithEncoding
7111
7299
  ], [
@@ -7272,9 +7460,9 @@
7272
7460
  };
7273
7461
  const roseParallelAdvancedPipeline = [
7274
7462
  initAdvancedVSeed_initAdvancedVSeed,
7275
- autoMeasures_autoMeasures,
7276
- autoDimensions_autoDimensions,
7277
7463
  encodingForRose,
7464
+ buildMeasures,
7465
+ autoDimensions_autoDimensions,
7278
7466
  pivotAdapter([
7279
7467
  reshapeWithEncoding
7280
7468
  ], [
@@ -7380,50 +7568,57 @@
7380
7568
  };
7381
7569
  const encodingForRadar = (advancedVSeed, context)=>{
7382
7570
  const { vseed } = context;
7383
- const { dimensions } = advancedVSeed;
7384
- if (!dimensions) return advancedVSeed;
7385
- const encoding = vseed.encoding;
7386
- if (encoding) {
7387
- const angle = encoding.angle || [
7388
- dimensions[0].id
7389
- ];
7390
- const color = encoding.color || [
7391
- (dimensions[1] || dimensions[0]).id
7392
- ];
7393
- const detail = encoding.detail || [];
7394
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
7395
- ...color,
7396
- ...detail
7397
- ]) : detail;
7398
- return {
7399
- ...advancedVSeed,
7400
- encoding: {
7401
- ...encoding,
7402
- angle,
7403
- color,
7404
- detail: mergedDetail
7405
- }
7406
- };
7407
- }
7408
- const mergedEncoding = {
7409
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7410
- color: dimensions.slice(1).map((item)=>item.id),
7411
- detail: dimensions.slice(1).map((item)=>item.id),
7412
- tooltip: dimensions.map((item)=>item.id),
7413
- label: [],
7414
- row: [],
7415
- column: []
7416
- };
7571
+ const { measures: vseedMeasures = [] } = vseed;
7572
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7573
+ const dimensions = getBasicDimensions(vseed);
7574
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7575
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7576
+ const encoding = {};
7577
+ if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
7578
+ else radar_generateDefaultDimensionEncoding(dimensions, encoding);
7579
+ if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
7580
+ else radar_generateDefaultMeasureEncoding(measures, encoding);
7417
7581
  return {
7418
7582
  ...advancedVSeed,
7419
- encoding: mergedEncoding
7583
+ encoding
7420
7584
  };
7421
7585
  };
7586
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7587
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7588
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7589
+ };
7590
+ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7591
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7592
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7593
+ encoding.angle = uniqueDimIds.slice(0, 1);
7594
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7595
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7596
+ encoding.tooltip = uniqueDimIds;
7597
+ encoding.label = [];
7598
+ encoding.row = [];
7599
+ encoding.column = [];
7600
+ };
7601
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7602
+ encoding.tooltip = measures.map((item)=>item.id);
7603
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7604
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7605
+ if (color.length > 0) encoding.color = color;
7606
+ };
7607
+ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7608
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7609
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7610
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7611
+ if (0 === encoding.angle.length) encoding.angle = [
7612
+ dimensions[0].id
7613
+ ];
7614
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7615
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7616
+ };
7422
7617
  const radarAdvancedPipeline = [
7423
7618
  initAdvancedVSeed_initAdvancedVSeed,
7424
- autoMeasures_autoMeasures,
7425
- autoDimensions_autoDimensions,
7426
7619
  encodingForRadar,
7620
+ buildMeasures,
7621
+ autoDimensions_autoDimensions,
7427
7622
  pivotAdapter([
7428
7623
  reshapeWithEncoding
7429
7624
  ], [
@@ -7559,33 +7754,51 @@
7559
7754
  };
7560
7755
  const encodingForFunnel = (advancedVSeed, context)=>{
7561
7756
  const { vseed } = context;
7562
- const { dimensions } = advancedVSeed;
7563
- if (!dimensions) return advancedVSeed;
7564
- const encoding = vseed.encoding;
7565
- if (encoding) return {
7566
- ...advancedVSeed,
7567
- encoding: {
7568
- ...encoding
7569
- }
7570
- };
7571
- const mergedEncoding = {
7572
- color: dimensions.slice(0).map((item)=>item.id),
7573
- detail: dimensions.slice(0).map((item)=>item.id),
7574
- tooltip: dimensions.map((item)=>item.id),
7575
- label: [],
7576
- row: [],
7577
- column: []
7578
- };
7757
+ const { measures: vseedMeasures = [] } = vseed;
7758
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7759
+ const dimensions = getBasicDimensions(vseed);
7760
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7761
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7762
+ const encoding = {};
7763
+ if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
7764
+ else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
7765
+ if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
7766
+ else funnel_generateDefaultMeasureEncoding(measures, encoding);
7579
7767
  return {
7580
7768
  ...advancedVSeed,
7581
- encoding: mergedEncoding
7582
- };
7769
+ encoding
7770
+ };
7771
+ };
7772
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7773
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7774
+ encoding.size = chunk_QJLMYOTX_i(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7775
+ };
7776
+ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7777
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7778
+ encoding.color = uniqueDimIds.slice(0);
7779
+ encoding.detail = uniqueDimIds.slice(0);
7780
+ encoding.tooltip = uniqueDimIds;
7781
+ encoding.label = [];
7782
+ encoding.row = [];
7783
+ encoding.column = [];
7784
+ };
7785
+ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7786
+ encoding.tooltip = measures.map((item)=>item.id);
7787
+ encoding.size = chunk_QJLMYOTX_i(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7788
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7789
+ if (color.length > 0) encoding.color = color;
7790
+ };
7791
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7792
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7793
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7794
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7795
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7583
7796
  };
7584
7797
  const funnelAdvancedPipeline = [
7585
7798
  initAdvancedVSeed_initAdvancedVSeed,
7586
- autoMeasures_autoMeasures,
7587
- autoDimensions_autoDimensions,
7588
7799
  encodingForFunnel,
7800
+ buildMeasures,
7801
+ autoDimensions_autoDimensions,
7589
7802
  pivotAdapter([
7590
7803
  reshapeWithEncoding
7591
7804
  ], [
@@ -7678,45 +7891,61 @@
7678
7891
  };
7679
7892
  const encodingForHeatmap = (advancedVSeed, context)=>{
7680
7893
  const { vseed } = context;
7681
- const { dimensions } = advancedVSeed;
7682
- if (!dimensions) return advancedVSeed;
7683
- const encoding = vseed.encoding;
7684
- if (encoding) {
7685
- const x = encoding.x || [
7686
- dimensions[0].id
7687
- ];
7688
- const y = encoding.y || [
7689
- (dimensions[1] || dimensions[0]).id
7690
- ];
7691
- return {
7692
- ...advancedVSeed,
7693
- encoding: {
7694
- x,
7695
- y,
7696
- ...encoding
7697
- }
7698
- };
7699
- }
7700
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7701
- const mergedEncoding = {
7702
- x: dimensions.slice(0, 1).map((item)=>item.id),
7703
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7704
- color: dimensions.slice(0).map((item)=>item.id),
7705
- tooltip: dimensions.map((item)=>item.id),
7706
- label: [],
7707
- row: [],
7708
- column: []
7709
- };
7894
+ const { measures: vseedMeasures = [] } = vseed;
7895
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7896
+ const dimensions = getBasicDimensions(vseed);
7897
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7898
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7899
+ const encoding = {};
7900
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
7901
+ else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
7902
+ if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
7903
+ else heatmap_generateDefaultMeasureEncoding(measures, encoding);
7710
7904
  return {
7711
7905
  ...advancedVSeed,
7712
- encoding: mergedEncoding
7906
+ encoding
7713
7907
  };
7714
7908
  };
7909
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7910
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7911
+ encoding.color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7912
+ };
7913
+ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7914
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7915
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7916
+ encoding.x = uniqueDimIds.slice(0, 1);
7917
+ encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7918
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7919
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7920
+ encoding.tooltip = uniqueDimIds;
7921
+ encoding.label = [];
7922
+ encoding.row = [];
7923
+ encoding.column = [];
7924
+ };
7925
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7926
+ encoding.tooltip = measures.map((item)=>item.id);
7927
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7928
+ if (color.length > 0) encoding.color = color;
7929
+ return encoding;
7930
+ };
7931
+ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7932
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7933
+ encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
7934
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7935
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7936
+ if (0 === encoding.x.length) encoding.x = [
7937
+ dimensions[0].id
7938
+ ];
7939
+ if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7940
+ else encoding.y = dimensions.slice(0).map((item)=>item.id);
7941
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7942
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7943
+ };
7715
7944
  const heatmapAdvancedPipeline = [
7716
7945
  initAdvancedVSeed_initAdvancedVSeed,
7717
- autoMeasures_autoMeasures,
7718
- autoDimensions_autoDimensions,
7719
7946
  encodingForHeatmap,
7947
+ buildMeasures,
7948
+ autoDimensions_autoDimensions,
7720
7949
  pivotAdapter([
7721
7950
  reshapeWithEncoding
7722
7951
  ], [
@@ -11819,7 +12048,18 @@
11819
12048
  'dimension',
11820
12049
  'rowDimension',
11821
12050
  'columnDimension'
11822
- ]).default('dimension')
12051
+ ]).default('dimension'),
12052
+ encoding: schemas_enum([
12053
+ 'xAxis',
12054
+ 'yAxis',
12055
+ 'angle',
12056
+ 'color',
12057
+ 'detail',
12058
+ 'tooltip',
12059
+ 'label',
12060
+ 'row',
12061
+ 'column'
12062
+ ]).optional()
11823
12063
  });
11824
12064
  const zDimensionGroup = schemas_object({
11825
12065
  id: schemas_string(),
@@ -11864,7 +12104,20 @@
11864
12104
  id: schemas_string(),
11865
12105
  alias: schemas_string().optional(),
11866
12106
  autoFormat: schemas_boolean().default(true),
11867
- format: zNumFormat["default"]({})
12107
+ format: zNumFormat["default"]({}),
12108
+ encoding: schemas_enum([
12109
+ 'primaryYAxis',
12110
+ 'secondaryYAxis',
12111
+ 'xAxis',
12112
+ 'yAxis',
12113
+ 'angle',
12114
+ 'radius',
12115
+ 'size',
12116
+ 'color',
12117
+ 'label',
12118
+ 'tooltip'
12119
+ ]).optional(),
12120
+ parentId: schemas_string().optional()
11868
12121
  });
11869
12122
  const zMeasureGroup = schemas_object({
11870
12123
  id: schemas_string(),
@@ -11926,7 +12179,6 @@
11926
12179
  column: schemas_array(schemas_string()).nullish(),
11927
12180
  group: schemas_array(schemas_string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
11928
12181
  });
11929
- const zEncodings = schemas_array(zEncoding);
11930
12182
  const zXBandAxis = schemas_object({
11931
12183
  visible: schemas_boolean().default(true).nullish(),
11932
12184
  labelAutoHide: schemas_boolean().default(true).nullish(),
@@ -13069,7 +13321,6 @@
13069
13321
  dimensions: zDimensionTree,
13070
13322
  measures: zMeasureTree,
13071
13323
  encoding: zEncoding,
13072
- encodings: zEncodings,
13073
13324
  config: zConfig,
13074
13325
  analysis: zAnalysis,
13075
13326
  theme: zTheme,