@visactor/vseed 0.1.3 → 0.1.5

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 (49) hide show
  1. package/dist/builder/builder/builder.d.ts +4 -2
  2. package/dist/dataReshape/foldMeasures.d.ts +2 -2
  3. package/dist/index.cjs +1001 -765
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +1014 -778
  6. package/dist/index.js.map +1 -1
  7. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -0
  8. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
  9. package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +1 -0
  10. package/dist/pipeline/spec/chart/pipes/color/colorCellStyleFill.d.ts +2 -0
  11. package/dist/pipeline/spec/chart/pipes/color/colorFunnelStyleFill.d.ts +2 -0
  12. package/dist/pipeline/spec/chart/pipes/color/colorPieStyleFill.d.ts +2 -0
  13. package/dist/pipeline/spec/chart/pipes/color/colorRoseStyleFill.d.ts +2 -0
  14. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +4 -0
  15. package/dist/pipeline/spec/chart/pipes/markStyle/cellStyle.d.ts +2 -0
  16. package/dist/pipeline/spec/chart/pipes/markStyle/funnelStyle.d.ts +2 -0
  17. package/dist/pipeline/spec/chart/pipes/markStyle/index.d.ts +5 -1
  18. package/dist/pipeline/spec/chart/pipes/markStyle/pieStyle.d.ts +2 -0
  19. package/dist/pipeline/spec/chart/pipes/markStyle/roseStyle.d.ts +2 -0
  20. package/dist/types/advancedVSeed.d.ts +16 -5
  21. package/dist/types/chartType/area/zArea.d.ts +16 -5
  22. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +16 -5
  23. package/dist/types/chartType/bar/zBar.d.ts +16 -5
  24. package/dist/types/chartType/barParallel/zBarParallel.d.ts +16 -5
  25. package/dist/types/chartType/barPercent/zBarPercent.d.ts +16 -5
  26. package/dist/types/chartType/column/zColumn.d.ts +16 -5
  27. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +16 -5
  28. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +16 -5
  29. package/dist/types/chartType/donut/zDonut.d.ts +16 -5
  30. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +36 -25
  31. package/dist/types/chartType/funnel/zFunnel.d.ts +16 -5
  32. package/dist/types/chartType/heatmap/zHeatmap.d.ts +16 -5
  33. package/dist/types/chartType/line/zLine.d.ts +16 -5
  34. package/dist/types/chartType/pie/zPie.d.ts +16 -5
  35. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +16 -5
  36. package/dist/types/chartType/radar/zRadar.d.ts +16 -5
  37. package/dist/types/chartType/rose/zRose.d.ts +16 -5
  38. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +16 -5
  39. package/dist/types/chartType/scatter/zScatter.d.ts +36 -25
  40. package/dist/types/chartType/table/zTable.d.ts +16 -5
  41. package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
  42. package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
  43. package/dist/types/properties/measures/zDualMeasures.d.ts +40 -40
  44. package/dist/types/properties/measures/zMeasures.d.ts +15 -15
  45. package/dist/types/properties/measures/zScatterMeasures.d.ts +40 -40
  46. package/dist/types/zVseed.d.ts +360 -140
  47. package/dist/umd/index.js +953 -703
  48. package/dist/umd/index.js.map +1 -1
  49. package/package.json +1 -1
package/dist/umd/index.js CHANGED
@@ -1445,6 +1445,56 @@
1445
1445
  locale: locale || 'zh-CN'
1446
1446
  };
1447
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
+ };
1470
+ if (!dataset) throw new Error('dataset is required');
1471
+ if (0 === dataset.length) return [];
1472
+ if (dimensions) {
1473
+ const basicDimensions = dimensions.map((dim)=>({
1474
+ location: 'dimension',
1475
+ ...dim
1476
+ }));
1477
+ if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1478
+ basicDimensions.push(MeaName);
1479
+ return basicDimensions;
1480
+ }
1481
+ const top100dataset = dataset.slice(0, 100);
1482
+ const sample = top100dataset.reduce((prev, cur)=>({
1483
+ ...prev,
1484
+ ...cur
1485
+ }), {});
1486
+ const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1487
+ '',
1488
+ null,
1489
+ void 0
1490
+ ].includes(key)).map((dim)=>({
1491
+ id: dim,
1492
+ alias: dim,
1493
+ location: 'dimension'
1494
+ }));
1495
+ basicDimensions.push(MeaName);
1496
+ return basicDimensions;
1497
+ };
1448
1498
  const getBasicMeasures = (vseed)=>{
1449
1499
  const { dataset, measures } = vseed;
1450
1500
  if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
@@ -1478,6 +1528,52 @@
1478
1528
  if (!measures) return false;
1479
1529
  return measures.some((measure)=>'parentId' in measure);
1480
1530
  };
1531
+ const encodingForLine = (advancedVSeed, context)=>{
1532
+ const { vseed } = context;
1533
+ const { measures: vseedMeasures = [] } = vseed;
1534
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1535
+ const dimensions = getBasicDimensions(vseed);
1536
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1537
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
1538
+ const encoding = {};
1539
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1540
+ else generateDefaultDimensionEncoding(dimensions, encoding);
1541
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1542
+ else generateDefaultMeasureEncoding(measures, encoding);
1543
+ return {
1544
+ ...advancedVSeed,
1545
+ encoding
1546
+ };
1547
+ };
1548
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1549
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
1550
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1551
+ };
1552
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1553
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
1554
+ encoding.x = uniqueDimIds.slice(0, 1);
1555
+ encoding.color = uniqueDimIds.slice(1);
1556
+ encoding.tooltip = uniqueDimIds;
1557
+ encoding.detail = [];
1558
+ encoding.label = [];
1559
+ encoding.row = [];
1560
+ encoding.column = [];
1561
+ };
1562
+ const generateMeasureEncoding = (measures, encoding)=>{
1563
+ encoding.tooltip = measures.map((item)=>item.id);
1564
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1565
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1566
+ if (color.length > 0) encoding.color = color;
1567
+ };
1568
+ const generateDimensionEncoding = (dimensions, encoding)=>{
1569
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
1570
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1571
+ encoding.detail = [];
1572
+ if (0 === encoding.x.length) encoding.x = [
1573
+ dimensions[0].id
1574
+ ];
1575
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1576
+ };
1481
1577
  const measureDepth = (measures = [])=>{
1482
1578
  if (!measures) return 0;
1483
1579
  let depth = 1;
@@ -1498,7 +1594,7 @@
1498
1594
  if (isVTable(vseed)) return false;
1499
1595
  if (isMeasureTreeWithParentId(vseed)) {
1500
1596
  const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1501
- return parentIds && parentIds.length > 1;
1597
+ return parentIds && chunk_QJLMYOTX_i(parentIds).length > 1;
1502
1598
  }
1503
1599
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1504
1600
  const { dimensions = [] } = vseed;
@@ -1569,22 +1665,6 @@
1569
1665
  }
1570
1666
  ];
1571
1667
  };
1572
- const ORIGINAL_DATA = '__OriginalData__';
1573
- const Separator = '-';
1574
- const FoldMeasureName = '__MeaName__';
1575
- const FoldMeasureId = '__MeaId__';
1576
- const FoldMeasureValue = '__MeaValue__';
1577
- const MeasureName = FoldMeasureName;
1578
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1579
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1580
- const FoldXMeasureValue = '__MeaXValue__';
1581
- const FoldYMeasureValue = '__MeaYValue__';
1582
- const XEncoding = '__Dim_X__';
1583
- const YEncoding = '__Dim_Y__';
1584
- const AngleEncoding = '__Dim_Angle__';
1585
- const DetailEncoding = '__Dim_Detail__';
1586
- const ColorEncoding = '__Dim_Color__';
1587
- const ColorIdEncoding = '__Dim_ColorId__';
1588
1668
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1589
1669
  const result = {
1590
1670
  ...advancedVSeed
@@ -1624,51 +1704,26 @@
1624
1704
  result.dimensions.push(MeaName);
1625
1705
  return result;
1626
1706
  };
1627
- const encodingForLine = (advancedVSeed, context)=>{
1628
- const { vseed } = context;
1629
- const { dimensions } = advancedVSeed;
1630
- if (!dimensions) return advancedVSeed;
1631
- const encoding = vseed.encoding;
1632
- if (encoding) {
1633
- const x = encoding.x || [
1634
- dimensions[0].id
1635
- ];
1636
- const color = encoding.color || [
1637
- (dimensions[1] || dimensions[0]).id
1638
- ];
1639
- const detail = encoding.detail || [];
1640
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1641
- return {
1642
- ...advancedVSeed,
1643
- encoding: {
1644
- ...encoding,
1645
- x,
1646
- color,
1647
- detail: mergedDetail
1648
- }
1649
- };
1650
- }
1651
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1652
- const mergedEncoding = {
1653
- x: dimensions.slice(0, 1).map((item)=>item.id),
1654
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1655
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1656
- tooltip: dimensions.map((item)=>item.id),
1657
- label: [],
1658
- row: [],
1659
- column: []
1660
- };
1661
- return {
1662
- ...advancedVSeed,
1663
- encoding: mergedEncoding
1664
- };
1665
- };
1666
1707
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1667
1708
  const { vseed } = context;
1668
1709
  const usePivotChart = isPivotChart(vseed);
1669
1710
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1670
1711
  return execPipeline(pipeline, context, advancedVSeed);
1671
1712
  };
1713
+ function T(...e) {
1714
+ return chunk_LFJW7BOT_y(chunk_7ZI6JRPB_y, e);
1715
+ }
1716
+ function chunk_7ZI6JRPB_y(e) {
1717
+ let u = e, n = new Set;
1718
+ return (t, i, d)=>{
1719
+ let r = u(t, i, d);
1720
+ return n.has(r) ? chunk_ANXBDSUI_s : (n.add(r), {
1721
+ done: !1,
1722
+ hasNext: !0,
1723
+ next: t
1724
+ });
1725
+ };
1726
+ }
1672
1727
  function chunk_AIG3BDKO_i(...e) {
1673
1728
  return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1674
1729
  }
@@ -1690,7 +1745,7 @@
1690
1745
  for (let r of e)delete o[r];
1691
1746
  return o;
1692
1747
  }
1693
- const foldMeasures = (dataset, measures, encoding, options)=>{
1748
+ const foldMeasures = (dataset, measures, options)=>{
1694
1749
  const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1695
1750
  const foldInfo = {
1696
1751
  measureId,
@@ -1791,7 +1846,7 @@
1791
1846
  };
1792
1847
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1793
1848
  const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1794
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1849
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1795
1850
  measureId: foldMeasureId,
1796
1851
  measureName: foldMeasureName,
1797
1852
  measureValue: foldMeasureValue,
@@ -1835,7 +1890,7 @@
1835
1890
  const { dimensions, measures, encoding } = advancedVSeed;
1836
1891
  if (!measures || !dimensions || !dataset || !encoding) return result;
1837
1892
  if (0 === measures.length) throw new Error('measures can not be empty');
1838
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1893
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(findAllMeasures(measures), (item)=>item.id), encoding, {
1839
1894
  colorMeasureId: getColorMeasureId(advancedVSeed)
1840
1895
  });
1841
1896
  return {
@@ -1872,7 +1927,7 @@
1872
1927
  const measures = measureGroup.children;
1873
1928
  if (!measures) return;
1874
1929
  const groupId = measureGroup.id;
1875
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1930
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(measures, (item)=>item.id), encoding, {
1876
1931
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1877
1932
  colorMeasureId: getColorMeasureId(advancedVSeed)
1878
1933
  });
@@ -2090,9 +2145,9 @@
2090
2145
  };
2091
2146
  const lineAdvancedPipeline = [
2092
2147
  initAdvancedVSeed_initAdvancedVSeed,
2148
+ encodingForLine,
2093
2149
  buildMeasures,
2094
2150
  autoDimensions_autoDimensions,
2095
- encodingForLine,
2096
2151
  pivotAdapter([
2097
2152
  reshapeWithEncoding
2098
2153
  ], [
@@ -2453,117 +2508,6 @@
2453
2508
  ];
2454
2509
  return result;
2455
2510
  };
2456
- const label_label = (spec, context)=>{
2457
- const result = {
2458
- ...spec
2459
- };
2460
- const { advancedVSeed } = context;
2461
- const { measures, datasetReshapeInfo, locale } = advancedVSeed;
2462
- const { chartType } = advancedVSeed;
2463
- const baseConfig = advancedVSeed.config[chartType];
2464
- if (!baseConfig || !baseConfig.label) return result;
2465
- const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
2466
- const { label } = baseConfig;
2467
- const { enable } = label;
2468
- result.label = {
2469
- visible: enable,
2470
- formatMethod: (value, datum)=>{
2471
- const result = [];
2472
- const formatValue = (value)=>{
2473
- const id = datum[measureId];
2474
- const measure = findMeasureById(measures, id);
2475
- if (!measure) return value;
2476
- const { format = {}, autoFormat = true } = measure;
2477
- if (!chunk_VCYTMP4D_n(format)) {
2478
- const formatter = createFormatter(format);
2479
- return formatter(value);
2480
- }
2481
- if (autoFormat) return autoFormatter(value, locale);
2482
- return String(value);
2483
- };
2484
- result.push(formatValue(datum[measureValue]));
2485
- return result.join(' ');
2486
- }
2487
- };
2488
- return result;
2489
- };
2490
- const tooltip_tooltip = (spec, context)=>{
2491
- const result = {
2492
- ...spec
2493
- };
2494
- const { advancedVSeed } = context;
2495
- const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
2496
- const baseConfig = advancedVSeed.config[chartType];
2497
- const { tooltip = {
2498
- enable: true
2499
- } } = baseConfig;
2500
- const { enable } = tooltip;
2501
- const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2502
- const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2503
- result.tooltip = {
2504
- visible: enable,
2505
- mark: {
2506
- title: {
2507
- visible: true
2508
- },
2509
- content: [
2510
- ...dimensions.map((item)=>({
2511
- visible: true,
2512
- hasShape: true,
2513
- shapeType: 'rectRound',
2514
- key: (datum)=>{
2515
- if (item.alias || item.id) return item.alias || item.id;
2516
- return datum && datum[item.id];
2517
- },
2518
- value: (datum)=>datum && datum[item.id]
2519
- })),
2520
- {
2521
- visible: true,
2522
- hasShape: true,
2523
- key: (datum)=>datum && datum[measureName || colorName] || '',
2524
- value: (datum)=>{
2525
- if (!datum) return '';
2526
- const value = datum[measureValue];
2527
- const id = datum[measureId];
2528
- const measure = findMeasureById(measures, id);
2529
- if (!measure) return String(value);
2530
- const { format = {}, autoFormat = true } = measure;
2531
- if (!chunk_VCYTMP4D_n(format)) {
2532
- const formatter = createFormatter(format);
2533
- return formatter(value);
2534
- }
2535
- if (autoFormat) return autoFormatter(value, locale);
2536
- return String(value);
2537
- }
2538
- }
2539
- ]
2540
- },
2541
- dimension: {
2542
- content: [
2543
- {
2544
- visible: true,
2545
- key: (datum)=>datum && datum[colorName] || '',
2546
- value: (datum)=>{
2547
- if (!datum) return '';
2548
- const value = datum[measureValue];
2549
- const id = datum[measureId];
2550
- const measure = findMeasureById(measures, id);
2551
- if (!measure) return String(value);
2552
- const { format = {}, autoFormat = true } = measure;
2553
- if (!chunk_VCYTMP4D_n(format)) {
2554
- const formatter = createFormatter(format);
2555
- return formatter(value);
2556
- }
2557
- if (autoFormat) return autoFormatter(value, locale);
2558
- return String(value);
2559
- },
2560
- shapeType: 'rectRound'
2561
- }
2562
- ]
2563
- }
2564
- };
2565
- return result;
2566
- };
2567
2511
  const verticalCrosshairLine = (spec, context)=>{
2568
2512
  const result = {
2569
2513
  ...spec
@@ -3088,6 +3032,117 @@
3088
3032
  }
3089
3033
  };
3090
3034
  };
3035
+ const label_label = (spec, context)=>{
3036
+ const result = {
3037
+ ...spec
3038
+ };
3039
+ const { advancedVSeed } = context;
3040
+ const { measures, datasetReshapeInfo, locale } = advancedVSeed;
3041
+ const { chartType } = advancedVSeed;
3042
+ const baseConfig = advancedVSeed.config[chartType];
3043
+ if (!baseConfig || !baseConfig.label) return result;
3044
+ const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
3045
+ const { label } = baseConfig;
3046
+ const { enable } = label;
3047
+ result.label = {
3048
+ visible: enable,
3049
+ formatMethod: (value, datum)=>{
3050
+ const result = [];
3051
+ const formatValue = (value)=>{
3052
+ const id = datum[measureId];
3053
+ const measure = findMeasureById(measures, id);
3054
+ if (!measure) return value;
3055
+ const { format = {}, autoFormat = true } = measure;
3056
+ if (!chunk_VCYTMP4D_n(format)) {
3057
+ const formatter = createFormatter(format);
3058
+ return formatter(value);
3059
+ }
3060
+ if (autoFormat) return autoFormatter(value, locale);
3061
+ return String(value);
3062
+ };
3063
+ result.push(formatValue(datum[measureValue]));
3064
+ return result.join(' ');
3065
+ }
3066
+ };
3067
+ return result;
3068
+ };
3069
+ const tooltip_tooltip = (spec, context)=>{
3070
+ const result = {
3071
+ ...spec
3072
+ };
3073
+ const { advancedVSeed } = context;
3074
+ const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
3075
+ const baseConfig = advancedVSeed.config[chartType];
3076
+ const { tooltip = {
3077
+ enable: true
3078
+ } } = baseConfig;
3079
+ const { enable } = tooltip;
3080
+ const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
3081
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
3082
+ result.tooltip = {
3083
+ visible: enable,
3084
+ mark: {
3085
+ title: {
3086
+ visible: true
3087
+ },
3088
+ content: [
3089
+ ...dimensions.map((item)=>({
3090
+ visible: true,
3091
+ hasShape: true,
3092
+ shapeType: 'rectRound',
3093
+ key: (datum)=>{
3094
+ if (item.alias || item.id) return item.alias || item.id;
3095
+ return datum && datum[item.id];
3096
+ },
3097
+ value: (datum)=>datum && datum[item.id]
3098
+ })),
3099
+ {
3100
+ visible: true,
3101
+ hasShape: true,
3102
+ key: (datum)=>datum && datum[measureName || colorName] || '',
3103
+ value: (datum)=>{
3104
+ if (!datum) return '';
3105
+ const value = datum[measureValue];
3106
+ const id = datum[measureId];
3107
+ const measure = findMeasureById(measures, id);
3108
+ if (!measure) return String(value);
3109
+ const { format = {}, autoFormat = true } = measure;
3110
+ if (!chunk_VCYTMP4D_n(format)) {
3111
+ const formatter = createFormatter(format);
3112
+ return formatter(value);
3113
+ }
3114
+ if (autoFormat) return autoFormatter(value, locale);
3115
+ return String(value);
3116
+ }
3117
+ }
3118
+ ]
3119
+ },
3120
+ dimension: {
3121
+ content: [
3122
+ {
3123
+ visible: true,
3124
+ key: (datum)=>datum && datum[colorName] || '',
3125
+ value: (datum)=>{
3126
+ if (!datum) return '';
3127
+ const value = datum[measureValue];
3128
+ const id = datum[measureId];
3129
+ const measure = findMeasureById(measures, id);
3130
+ if (!measure) return String(value);
3131
+ const { format = {}, autoFormat = true } = measure;
3132
+ if (!chunk_VCYTMP4D_n(format)) {
3133
+ const formatter = createFormatter(format);
3134
+ return formatter(value);
3135
+ }
3136
+ if (autoFormat) return autoFormatter(value, locale);
3137
+ return String(value);
3138
+ },
3139
+ shapeType: 'rectRound'
3140
+ }
3141
+ ]
3142
+ }
3143
+ };
3144
+ return result;
3145
+ };
3091
3146
  const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
3092
3147
  if ('string' == typeof value) return obj[key] === value;
3093
3148
  if ('number' == typeof value) return obj[key] === value;
@@ -3849,6 +3904,93 @@
3849
3904
  legends
3850
3905
  };
3851
3906
  };
3907
+ const pivotColorLegend = (spec, context)=>{
3908
+ const result = {
3909
+ ...spec
3910
+ };
3911
+ const { advancedVSeed } = context;
3912
+ const { chartType } = advancedVSeed;
3913
+ const baseConfig = advancedVSeed.config[chartType];
3914
+ if (!baseConfig || !baseConfig.legend) return result;
3915
+ const { datasetReshapeInfo } = advancedVSeed;
3916
+ const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
3917
+ const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
3918
+ const { legend, color } = baseConfig;
3919
+ const { colorScheme, linearColorScheme } = color;
3920
+ const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
3921
+ const orient = [
3922
+ 'bottom',
3923
+ 'bottomLeft',
3924
+ 'bottomRight',
3925
+ 'bl',
3926
+ 'br'
3927
+ ].includes(position) ? 'bottom' : [
3928
+ 'top',
3929
+ 'topLeft',
3930
+ 'topRight',
3931
+ 'tl',
3932
+ 'tr'
3933
+ ].includes(position) ? 'top' : [
3934
+ 'left',
3935
+ 'leftTop',
3936
+ 'leftBottom',
3937
+ 'lt',
3938
+ 'lb'
3939
+ ].includes(position) ? 'left' : 'right';
3940
+ const legendPosition = [
3941
+ 'topLeft',
3942
+ 'bottomLeft',
3943
+ 'leftTop',
3944
+ 'rightTop',
3945
+ 'lt',
3946
+ 'rt',
3947
+ 'tl',
3948
+ 'bl'
3949
+ ].includes(position) ? 'start' : [
3950
+ 'topRight',
3951
+ 'bottomRight',
3952
+ 'leftBottom',
3953
+ 'rightBottom',
3954
+ 'lb',
3955
+ 'rb',
3956
+ 'rt',
3957
+ 'br'
3958
+ ].includes(position) ? 'end' : 'middle';
3959
+ const legends = {
3960
+ visible: enable,
3961
+ type: 'color',
3962
+ orient,
3963
+ position: legendPosition,
3964
+ colors: linearColorScheme || colorScheme || [],
3965
+ value: [
3966
+ min,
3967
+ max
3968
+ ],
3969
+ min: min,
3970
+ max: max,
3971
+ maxWidth: '30%',
3972
+ startText: {
3973
+ visible: true,
3974
+ style: {
3975
+ fill: labelFontColor,
3976
+ fontSize: labelFontSize,
3977
+ fontWeight: labelFontWeight
3978
+ }
3979
+ },
3980
+ endText: {
3981
+ visible: true,
3982
+ style: {
3983
+ fill: labelFontColor,
3984
+ fontSize: labelFontSize,
3985
+ fontWeight: labelFontWeight
3986
+ }
3987
+ }
3988
+ };
3989
+ return {
3990
+ ...result,
3991
+ legends
3992
+ };
3993
+ };
3852
3994
  const pivotAdapter_pivotAdapter = (pipeline, pivotPipeline)=>(spec, context)=>{
3853
3995
  const { vseed } = context;
3854
3996
  const usePivotChart = isPivotChart(vseed);
@@ -3863,13 +4005,13 @@
3863
4005
  progressive,
3864
4006
  xBand,
3865
4007
  yLinear,
3866
- label_label,
3867
- tooltip_tooltip,
3868
4008
  verticalCrosshairLine,
3869
4009
  colorAdapter(discreteLegend, colorLegend),
3870
4010
  colorPointStyleFill(pointStyle_pointStyle),
3871
4011
  pointStateDimensionHover,
3872
4012
  colorLineStyleFill(lineStyle_lineStyle),
4013
+ label_label,
4014
+ tooltip_tooltip,
3873
4015
  annotationPoint_annotationPoint,
3874
4016
  annotationVerticalLine_annotationVerticalLine,
3875
4017
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3882,18 +4024,18 @@
3882
4024
  datasetPivot,
3883
4025
  pivotIndicators_pivotIndicators([
3884
4026
  initLine,
3885
- color_color,
4027
+ colorAdapter(color_color, linearColor),
3886
4028
  background_backgroundColor,
3887
4029
  datasetXY,
3888
4030
  progressive,
3889
4031
  xBand,
3890
4032
  yLinear,
3891
- label_label,
3892
- tooltip_tooltip,
3893
4033
  verticalCrosshairLine,
3894
- pointStyle_pointStyle,
4034
+ colorPointStyleFill(pointStyle_pointStyle),
3895
4035
  pointStateDimensionHover,
3896
- lineStyle_lineStyle,
4036
+ colorLineStyleFill(lineStyle_lineStyle),
4037
+ label_label,
4038
+ tooltip_tooltip,
3897
4039
  annotationPoint_annotationPoint,
3898
4040
  annotationVerticalLine_annotationVerticalLine,
3899
4041
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3901,7 +4043,7 @@
3901
4043
  ]),
3902
4044
  pivotRowDimensions,
3903
4045
  pivotColumnDimensions,
3904
- pivotDiscreteLegend
4046
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
3905
4047
  ];
3906
4048
  const lineSpecPipeline = [
3907
4049
  pivotAdapter_pivotAdapter(line_line, pivotLine)
@@ -3912,51 +4054,58 @@
3912
4054
  };
3913
4055
  const encodingForColumn = (advancedVSeed, context)=>{
3914
4056
  const { vseed } = context;
3915
- const { dimensions } = advancedVSeed;
3916
- if (!dimensions) return advancedVSeed;
3917
- const encoding = vseed.encoding;
3918
- if (encoding) {
3919
- const x = encoding.x || [
3920
- dimensions[0].id
3921
- ];
3922
- const color = encoding.color || [
3923
- (dimensions[1] || dimensions[0]).id
3924
- ];
3925
- const detail = encoding.detail || [];
3926
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
3927
- ...color,
3928
- ...detail
3929
- ]) : detail;
3930
- return {
3931
- ...advancedVSeed,
3932
- encoding: {
3933
- ...encoding,
3934
- x,
3935
- color,
3936
- detail: mergedDetail
3937
- }
3938
- };
3939
- }
3940
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3941
- const mergedEncoding = {
3942
- x: dimensions.slice(0, 1).map((item)=>item.id),
3943
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3944
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3945
- tooltip: dimensions.map((item)=>item.id),
3946
- label: [],
3947
- row: [],
3948
- column: []
3949
- };
4057
+ const { measures: vseedMeasures = [] } = vseed;
4058
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4059
+ const dimensions = getBasicDimensions(vseed);
4060
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4061
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4062
+ const encoding = {};
4063
+ if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
4064
+ else column_generateDefaultDimensionEncoding(dimensions, encoding);
4065
+ if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
4066
+ else column_generateDefaultMeasureEncoding(measures, encoding);
3950
4067
  return {
3951
4068
  ...advancedVSeed,
3952
- encoding: mergedEncoding
4069
+ encoding
3953
4070
  };
3954
4071
  };
4072
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
4073
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
4074
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4075
+ };
4076
+ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4077
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4078
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
4079
+ encoding.x = uniqueDimIds.slice(0, 1);
4080
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4081
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4082
+ encoding.tooltip = uniqueDimIds;
4083
+ encoding.label = [];
4084
+ encoding.row = [];
4085
+ encoding.column = [];
4086
+ };
4087
+ const column_generateMeasureEncoding = (measures, encoding)=>{
4088
+ encoding.tooltip = measures.map((item)=>item.id);
4089
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4090
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4091
+ if (color.length > 0) encoding.color = color;
4092
+ return encoding;
4093
+ };
4094
+ const column_generateDimensionEncoding = (dimensions, encoding)=>{
4095
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
4096
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4097
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4098
+ if (0 === encoding.x.length) encoding.x = [
4099
+ dimensions[0].id
4100
+ ];
4101
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4102
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4103
+ };
3955
4104
  const columnAdvancedPipeline = [
3956
4105
  initAdvancedVSeed_initAdvancedVSeed,
4106
+ encodingForColumn,
3957
4107
  buildMeasures,
3958
4108
  autoDimensions_autoDimensions,
3959
- encodingForColumn,
3960
4109
  pivotAdapter([
3961
4110
  reshapeWithEncoding
3962
4111
  ], [
@@ -4259,93 +4408,6 @@
4259
4408
  markArea: markArea
4260
4409
  };
4261
4410
  };
4262
- const pivotColorLegend = (spec, context)=>{
4263
- const result = {
4264
- ...spec
4265
- };
4266
- const { advancedVSeed } = context;
4267
- const { chartType } = advancedVSeed;
4268
- const baseConfig = advancedVSeed.config[chartType];
4269
- if (!baseConfig || !baseConfig.legend) return result;
4270
- const { datasetReshapeInfo } = advancedVSeed;
4271
- const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
4272
- const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
4273
- const { legend, color } = baseConfig;
4274
- const { colorScheme, linearColorScheme } = color;
4275
- const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
4276
- const orient = [
4277
- 'bottom',
4278
- 'bottomLeft',
4279
- 'bottomRight',
4280
- 'bl',
4281
- 'br'
4282
- ].includes(position) ? 'bottom' : [
4283
- 'top',
4284
- 'topLeft',
4285
- 'topRight',
4286
- 'tl',
4287
- 'tr'
4288
- ].includes(position) ? 'top' : [
4289
- 'left',
4290
- 'leftTop',
4291
- 'leftBottom',
4292
- 'lt',
4293
- 'lb'
4294
- ].includes(position) ? 'left' : 'right';
4295
- const legendPosition = [
4296
- 'topLeft',
4297
- 'bottomLeft',
4298
- 'leftTop',
4299
- 'rightTop',
4300
- 'lt',
4301
- 'rt',
4302
- 'tl',
4303
- 'bl'
4304
- ].includes(position) ? 'start' : [
4305
- 'topRight',
4306
- 'bottomRight',
4307
- 'leftBottom',
4308
- 'rightBottom',
4309
- 'lb',
4310
- 'rb',
4311
- 'rt',
4312
- 'br'
4313
- ].includes(position) ? 'end' : 'middle';
4314
- const legends = {
4315
- visible: enable,
4316
- type: 'color',
4317
- orient,
4318
- position: legendPosition,
4319
- colors: linearColorScheme || colorScheme || [],
4320
- value: [
4321
- min,
4322
- max
4323
- ],
4324
- min: min,
4325
- max: max,
4326
- maxWidth: '30%',
4327
- startText: {
4328
- visible: true,
4329
- style: {
4330
- fill: labelFontColor,
4331
- fontSize: labelFontSize,
4332
- fontWeight: labelFontWeight
4333
- }
4334
- },
4335
- endText: {
4336
- visible: true,
4337
- style: {
4338
- fill: labelFontColor,
4339
- fontSize: labelFontSize,
4340
- fontWeight: labelFontWeight
4341
- }
4342
- }
4343
- };
4344
- return {
4345
- ...result,
4346
- legends
4347
- };
4348
- };
4349
4411
  const column = [
4350
4412
  initColumn,
4351
4413
  stackCornerRadius_stackCornerRadius,
@@ -4403,9 +4465,9 @@
4403
4465
  };
4404
4466
  const columnParallelAdvancedPipeline = [
4405
4467
  initAdvancedVSeed_initAdvancedVSeed,
4468
+ encodingForColumn,
4406
4469
  buildMeasures,
4407
4470
  autoDimensions_autoDimensions,
4408
- encodingForColumn,
4409
4471
  pivotAdapter([
4410
4472
  reshapeWithEncoding
4411
4473
  ], [
@@ -4500,9 +4562,9 @@
4500
4562
  };
4501
4563
  const columnPercentAdvancedPipeline = [
4502
4564
  initAdvancedVSeed_initAdvancedVSeed,
4565
+ encodingForColumn,
4503
4566
  buildMeasures,
4504
4567
  autoDimensions_autoDimensions,
4505
- encodingForColumn,
4506
4568
  pivotAdapter([
4507
4569
  reshapeWithEncoding
4508
4570
  ], [
@@ -4581,46 +4643,53 @@
4581
4643
  };
4582
4644
  const encodingForBar = (advancedVSeed, context)=>{
4583
4645
  const { vseed } = context;
4584
- const { dimensions } = advancedVSeed;
4585
- if (!dimensions) return advancedVSeed;
4586
- const encoding = vseed.encoding;
4587
- if (encoding) {
4588
- const y = encoding.y || [
4589
- dimensions[0].id
4590
- ];
4591
- const color = encoding.color || [
4592
- (dimensions[1] || dimensions[0]).id
4593
- ];
4594
- const detail = encoding.detail || [];
4595
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
4596
- ...color,
4597
- ...detail
4598
- ]) : detail;
4599
- return {
4600
- ...advancedVSeed,
4601
- encoding: {
4602
- ...encoding,
4603
- y,
4604
- color,
4605
- detail: mergedDetail
4606
- }
4607
- };
4608
- }
4609
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4610
- const mergedEncoding = {
4611
- y: dimensions.slice(0, 1).map((item)=>item.id),
4612
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4613
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4614
- tooltip: dimensions.map((item)=>item.id),
4615
- label: [],
4616
- row: [],
4617
- column: []
4618
- };
4646
+ const { measures: vseedMeasures = [] } = vseed;
4647
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4648
+ const dimensions = getBasicDimensions(vseed);
4649
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4650
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4651
+ const encoding = {};
4652
+ if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
4653
+ else bar_generateDefaultDimensionEncoding(dimensions, encoding);
4654
+ if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
4655
+ else bar_generateDefaultMeasureEncoding(measures, encoding);
4619
4656
  return {
4620
4657
  ...advancedVSeed,
4621
- encoding: mergedEncoding
4658
+ encoding
4622
4659
  };
4623
4660
  };
4661
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4662
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
4663
+ encoding.x = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4664
+ };
4665
+ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4666
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4667
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
4668
+ encoding.y = uniqueDimIds.slice(0, 1);
4669
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4670
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4671
+ encoding.tooltip = uniqueDimIds;
4672
+ encoding.label = [];
4673
+ encoding.row = [];
4674
+ encoding.column = [];
4675
+ };
4676
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4677
+ encoding.tooltip = measures.map((item)=>item.id);
4678
+ encoding.x = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4679
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4680
+ if (color.length > 0) encoding.color = color;
4681
+ return encoding;
4682
+ };
4683
+ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4684
+ encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
4685
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4686
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4687
+ if (0 === encoding.y.length) encoding.y = [
4688
+ dimensions[0].id
4689
+ ];
4690
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4691
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4692
+ };
4624
4693
  const sortYBandAxis = (advancedVSeed, context)=>{
4625
4694
  const result = {
4626
4695
  ...advancedVSeed
@@ -4639,9 +4708,9 @@
4639
4708
  };
4640
4709
  const barAdvancedPipeline = [
4641
4710
  initAdvancedVSeed_initAdvancedVSeed,
4711
+ encodingForBar,
4642
4712
  buildMeasures,
4643
4713
  autoDimensions_autoDimensions,
4644
- encodingForBar,
4645
4714
  pivotAdapter([
4646
4715
  reshapeWithEncoding
4647
4716
  ], [
@@ -5159,9 +5228,9 @@
5159
5228
  };
5160
5229
  const areaAdvancedPipeline = [
5161
5230
  initAdvancedVSeed_initAdvancedVSeed,
5231
+ encodingForLine,
5162
5232
  buildMeasures,
5163
5233
  autoDimensions_autoDimensions,
5164
- encodingForColumn,
5165
5234
  pivotAdapter([
5166
5235
  reshapeWithEncoding
5167
5236
  ], [
@@ -5317,9 +5386,9 @@
5317
5386
  };
5318
5387
  const areaPercentAdvancedPipeline = [
5319
5388
  initAdvancedVSeed_initAdvancedVSeed,
5389
+ encodingForLine,
5320
5390
  buildMeasures,
5321
5391
  autoDimensions_autoDimensions,
5322
- encodingForColumn,
5323
5392
  pivotAdapter([
5324
5393
  reshapeWithEncoding
5325
5394
  ], [
@@ -5393,6 +5462,49 @@
5393
5462
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5394
5463
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5395
5464
  };
5465
+ const encodingForScatter = (advancedVSeed, context)=>{
5466
+ const { vseed } = context;
5467
+ const { measures: vseedMeasures = [] } = vseed;
5468
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5469
+ const dimensions = getBasicDimensions(vseed);
5470
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5471
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5472
+ const encoding = {};
5473
+ if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
5474
+ else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
5475
+ if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
5476
+ else scatter_generateDefaultMeasureEncoding(measures, encoding);
5477
+ return {
5478
+ ...advancedVSeed,
5479
+ encoding
5480
+ };
5481
+ };
5482
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5483
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
5484
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5485
+ };
5486
+ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5487
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5488
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensionsWithoutMeasureName.map((d)=>d.id));
5489
+ encoding.color = uniqueDimIds.slice(0);
5490
+ encoding.detail = uniqueDimIds.slice(0);
5491
+ encoding.tooltip = uniqueDimIds;
5492
+ encoding.label = [];
5493
+ encoding.row = [];
5494
+ encoding.column = [];
5495
+ };
5496
+ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5497
+ encoding.tooltip = measures.map((item)=>item.id);
5498
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5499
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5500
+ if (color.length > 0) encoding.color = color;
5501
+ };
5502
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5503
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5504
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5505
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5506
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5507
+ };
5396
5508
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
5397
5509
  const { vseed } = context;
5398
5510
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5483,52 +5595,16 @@
5483
5595
  const encoding = Array.isArray(item.encoding) ? item.encoding : [
5484
5596
  item.encoding
5485
5597
  ];
5486
- const isY = encoding.includes('yAxis');
5487
5598
  const isX = encoding.includes('xAxis');
5599
+ const isY = encoding.includes('yAxis');
5600
+ const isEmpty = !encoding.length;
5488
5601
  if (isY) scatterChart.yMeasures.push(item);
5489
5602
  else if (isX) scatterChart.xMeasures.push(item);
5490
- else if (!isY && !isX) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5603
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5491
5604
  else scatterChart.xMeasures.push(item);
5492
5605
  });
5493
5606
  return scatterMeasuresToMeasureTree(scatterMeasures);
5494
5607
  };
5495
- const encodingForScatter = (advancedVSeed, context)=>{
5496
- const { vseed } = context;
5497
- const { dimensions } = advancedVSeed;
5498
- if (!dimensions) return advancedVSeed;
5499
- const encoding = vseed.encoding;
5500
- if (encoding) {
5501
- const detail = encoding.detail || [];
5502
- const color = encoding.color || [
5503
- (dimensions[1] || dimensions[0]).id
5504
- ];
5505
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
5506
- ...color,
5507
- ...detail
5508
- ]) : detail;
5509
- return {
5510
- ...advancedVSeed,
5511
- encoding: {
5512
- ...encoding,
5513
- color,
5514
- detail: mergedDetail
5515
- }
5516
- };
5517
- }
5518
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5519
- const mergedEncoding = {
5520
- color: dimensions.slice(0).map((item)=>item.id),
5521
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5522
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5523
- label: [],
5524
- row: [],
5525
- column: []
5526
- };
5527
- return {
5528
- ...advancedVSeed,
5529
- encoding: mergedEncoding
5530
- };
5531
- };
5532
5608
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5533
5609
  const result = {
5534
5610
  ...advancedVSeed
@@ -5545,7 +5621,7 @@
5545
5621
  const xMeasures = measures[0];
5546
5622
  const yMeasures = measures[1] || xMeasures;
5547
5623
  if (xMeasures && xMeasures.children) {
5548
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5624
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (d)=>d.id), T(xMeasures.children, (d)=>d.id), encoding, {
5549
5625
  foldMeasureValue: FoldXMeasureValue,
5550
5626
  colorItemAsId: true,
5551
5627
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5555,7 +5631,7 @@
5555
5631
  unfoldInfoList.push(unfoldInfo);
5556
5632
  }
5557
5633
  if (yMeasures && yMeasures.children) {
5558
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5634
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], T(dimensions, (d)=>d.id), T(yMeasures.children, (d)=>d.id), encoding, {
5559
5635
  foldMeasureValue: FoldYMeasureValue,
5560
5636
  colorItemAsId: true,
5561
5637
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5659,9 +5735,9 @@
5659
5735
  };
5660
5736
  const scatterAdvancedPipeline = [
5661
5737
  initAdvancedVSeed_initAdvancedVSeed,
5738
+ encodingForScatter,
5662
5739
  buildMeasuresForScatter,
5663
5740
  autoDimensions_autoDimensions,
5664
- encodingForScatter,
5665
5741
  pivotAdapter([
5666
5742
  reshapeWithScatterEncoding
5667
5743
  ], [
@@ -5797,7 +5873,7 @@
5797
5873
  ]),
5798
5874
  pivotRowDimensions,
5799
5875
  pivotColumnDimensions,
5800
- pivotDiscreteLegend
5876
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
5801
5877
  ];
5802
5878
  const scatterSpecPipeline = [
5803
5879
  pivotAdapter_pivotAdapter(scatter, pivotScatter)
@@ -5806,6 +5882,55 @@
5806
5882
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5807
5883
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5808
5884
  };
5885
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5886
+ const { vseed } = context;
5887
+ const { measures: vseedMeasures = [] } = vseed;
5888
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5889
+ const dimensions = getBasicDimensions(vseed);
5890
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5891
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5892
+ const encoding = {};
5893
+ if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
5894
+ else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
5895
+ if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
5896
+ else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
5897
+ return {
5898
+ ...advancedVSeed,
5899
+ encoding
5900
+ };
5901
+ };
5902
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5903
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
5904
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5905
+ };
5906
+ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5907
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5908
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
5909
+ encoding.x = uniqueDimIds.slice(0, 1);
5910
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5911
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5912
+ encoding.tooltip = uniqueDimIds;
5913
+ encoding.label = [];
5914
+ encoding.row = [];
5915
+ encoding.column = [];
5916
+ };
5917
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5918
+ encoding.tooltip = measures.map((item)=>item.id);
5919
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5920
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5921
+ if (color.length > 0) encoding.color = color;
5922
+ return encoding;
5923
+ };
5924
+ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5925
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
5926
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5927
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5928
+ if (0 === encoding.x.length) encoding.x = [
5929
+ dimensions[0].id
5930
+ ];
5931
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5932
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5933
+ };
5809
5934
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5810
5935
  const { vseed } = context;
5811
5936
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5898,54 +6023,14 @@
5898
6023
  ];
5899
6024
  const isPrimary = encoding.includes('primaryYAxis');
5900
6025
  const isSecondary = encoding.includes('secondaryYAxis');
6026
+ const isEmpty = !item.encoding;
5901
6027
  if (isPrimary) dualChart.primaryMeasures.push(item);
5902
6028
  else if (isSecondary) dualChart.secondaryMeasures.push(item);
5903
- else if (!isPrimary && !isSecondary) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
6029
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5904
6030
  else dualChart.secondaryMeasures.push(item);
5905
6031
  });
5906
6032
  return dualMeasuresToMeasureTree(dualMeasures);
5907
6033
  };
5908
- const encodingForDualAxis = (advancedVSeed, context)=>{
5909
- const { vseed } = context;
5910
- const { dimensions } = advancedVSeed;
5911
- if (!dimensions) return advancedVSeed;
5912
- const encoding = vseed.encoding;
5913
- if (encoding) {
5914
- const x = encoding.x || [
5915
- dimensions[0].id
5916
- ];
5917
- const color = encoding.color || [
5918
- (dimensions[1] || dimensions[0]).id
5919
- ];
5920
- const detail = encoding.detail || [];
5921
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
5922
- ...color,
5923
- ...detail
5924
- ]) : detail;
5925
- return {
5926
- ...advancedVSeed,
5927
- encoding: {
5928
- ...encoding,
5929
- x,
5930
- color,
5931
- detail: mergedDetail
5932
- }
5933
- };
5934
- }
5935
- const mergedEncoding = {
5936
- x: dimensions.slice(0, 1).map((item)=>item.id),
5937
- color: dimensions.slice(1).map((item)=>item.id),
5938
- detail: dimensions.slice(1).map((item)=>item.id),
5939
- tooltip: dimensions.map((item)=>item.id),
5940
- label: [],
5941
- row: [],
5942
- column: []
5943
- };
5944
- return {
5945
- ...advancedVSeed,
5946
- encoding: mergedEncoding
5947
- };
5948
- };
5949
6034
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5950
6035
  const result = {
5951
6036
  ...advancedVSeed
@@ -6095,9 +6180,9 @@
6095
6180
  };
6096
6181
  const dualAxisAdvancedPipeline = [
6097
6182
  initAdvancedVSeed_initAdvancedVSeed,
6183
+ encodingForDualAxis,
6098
6184
  buildMeasuresForDualAxis,
6099
6185
  autoDimensions_autoDimensions,
6100
- encodingForDualAxis,
6101
6186
  pivotAdapter([
6102
6187
  reshapeWithDualEncoding
6103
6188
  ], [
@@ -6932,33 +7017,51 @@
6932
7017
  };
6933
7018
  const encodingForPie = (advancedVSeed, context)=>{
6934
7019
  const { vseed } = context;
6935
- const { dimensions } = advancedVSeed;
6936
- if (!dimensions) return advancedVSeed;
6937
- const encoding = vseed.encoding;
6938
- if (encoding) return {
6939
- ...advancedVSeed,
6940
- encoding: {
6941
- ...encoding
6942
- }
6943
- };
6944
- const mergedEncoding = {
6945
- color: dimensions.slice(0).map((item)=>item.id),
6946
- detail: dimensions.slice(0).map((item)=>item.id),
6947
- tooltip: dimensions.map((item)=>item.id),
6948
- label: [],
6949
- row: [],
6950
- column: []
6951
- };
7020
+ const { measures: vseedMeasures = [] } = vseed;
7021
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7022
+ const dimensions = getBasicDimensions(vseed);
7023
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7024
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7025
+ const encoding = {};
7026
+ if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
7027
+ else pie_generateDefaultDimensionEncoding(dimensions, encoding);
7028
+ if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
7029
+ else pie_generateDefaultMeasureEncoding(measures, encoding);
6952
7030
  return {
6953
7031
  ...advancedVSeed,
6954
- encoding: mergedEncoding
6955
- };
7032
+ encoding
7033
+ };
7034
+ };
7035
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
7036
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7037
+ encoding.angle = chunk_QJLMYOTX_i(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7038
+ };
7039
+ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7040
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7041
+ encoding.color = uniqueDimIds.slice(0);
7042
+ encoding.detail = uniqueDimIds.slice(0);
7043
+ encoding.tooltip = uniqueDimIds;
7044
+ encoding.label = [];
7045
+ encoding.row = [];
7046
+ encoding.column = [];
7047
+ };
7048
+ const pie_generateMeasureEncoding = (measures, encoding)=>{
7049
+ encoding.tooltip = measures.map((item)=>item.id);
7050
+ encoding.angle = chunk_QJLMYOTX_i(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7051
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7052
+ if (color.length > 0) encoding.color = color;
7053
+ };
7054
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
7055
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7056
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7057
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7058
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6956
7059
  };
6957
7060
  const pieAdvancedPipeline = [
6958
7061
  initAdvancedVSeed_initAdvancedVSeed,
7062
+ encodingForPie,
6959
7063
  buildMeasures,
6960
7064
  autoDimensions_autoDimensions,
6961
- encodingForPie,
6962
7065
  pivotAdapter([
6963
7066
  reshapeWithEncoding
6964
7067
  ], [
@@ -6973,9 +7076,8 @@
6973
7076
  ...spec
6974
7077
  };
6975
7078
  const { advancedVSeed } = context;
6976
- const { datasetReshapeInfo, dataset } = advancedVSeed;
7079
+ const { datasetReshapeInfo } = advancedVSeed;
6977
7080
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
6978
- const showStroke = dataset.length <= 30;
6979
7081
  result.type = 'pie';
6980
7082
  result.outerRadius = 0.8;
6981
7083
  result.innerRadius = 0;
@@ -6987,30 +7089,57 @@
6987
7089
  clip: true
6988
7090
  }
6989
7091
  ];
6990
- result.pie = {
6991
- style: {
6992
- stroke: '#ffffff',
6993
- lineWidth: showStroke ? 1 : 0,
6994
- centerOffset: 0
6995
- },
6996
- state: {
6997
- hover: {
6998
- outerRadius: 1.1 * result.outerRadius
7092
+ result.animation = true;
7093
+ return result;
7094
+ };
7095
+ const colorPieStyleFill = (stylePipe)=>(spec, context)=>{
7096
+ const result = stylePipe(spec, context);
7097
+ const { advancedVSeed } = context;
7098
+ const { datasetReshapeInfo } = advancedVSeed;
7099
+ const { unfoldInfo } = datasetReshapeInfo[0];
7100
+ if (isLinearColor(advancedVSeed)) {
7101
+ if (result?.pie?.style) result.pie.style.fill = {
7102
+ field: unfoldInfo.encodingColor,
7103
+ scale: 'color'
7104
+ };
7105
+ }
7106
+ return result;
7107
+ };
7108
+ const pieStyle = (spec, context)=>{
7109
+ const { advancedVSeed } = context;
7110
+ const { dataset } = advancedVSeed;
7111
+ const showStroke = dataset.length <= 30;
7112
+ const result = {
7113
+ ...spec,
7114
+ pie: {
7115
+ style: {}
7116
+ }
7117
+ };
7118
+ return {
7119
+ ...result,
7120
+ pie: {
7121
+ style: {
7122
+ stroke: '#ffffff',
7123
+ lineWidth: showStroke ? 1 : 0
7124
+ },
7125
+ state: {
7126
+ hover: {
7127
+ outerRadius: 1.1 * result.outerRadius
7128
+ }
6999
7129
  }
7000
7130
  }
7001
7131
  };
7002
- result.animation = true;
7003
- return result;
7004
7132
  };
7005
7133
  const pie = [
7006
7134
  initPie,
7007
- color_color,
7135
+ colorAdapter(color_color, linearColor),
7008
7136
  background_backgroundColor,
7009
7137
  datasetXY,
7010
7138
  progressive,
7139
+ colorPieStyleFill(pieStyle),
7140
+ colorAdapter(discreteLegend, colorLegend),
7011
7141
  label_label,
7012
7142
  tooltip_tooltip,
7013
- discreteLegend,
7014
7143
  annotationPoint_annotationPoint,
7015
7144
  annotationVerticalLine_annotationVerticalLine,
7016
7145
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7023,10 +7152,11 @@
7023
7152
  datasetPivot,
7024
7153
  pivotIndicators_pivotIndicators([
7025
7154
  initPie,
7026
- color_color,
7155
+ colorAdapter(color_color, linearColor),
7027
7156
  background_backgroundColor,
7028
7157
  datasetXY,
7029
7158
  progressive,
7159
+ colorPieStyleFill(pieStyle),
7030
7160
  label_label,
7031
7161
  tooltip_tooltip,
7032
7162
  annotationPoint_annotationPoint,
@@ -7036,7 +7166,7 @@
7036
7166
  ]),
7037
7167
  pivotRowDimensions,
7038
7168
  pivotColumnDimensions,
7039
- pivotDiscreteLegend
7169
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7040
7170
  ];
7041
7171
  const pieSpecPipeline = [
7042
7172
  pivotAdapter_pivotAdapter(pie, pivotPie)
@@ -7064,43 +7194,32 @@
7064
7194
  ...spec
7065
7195
  };
7066
7196
  const { advancedVSeed } = context;
7067
- const { datasetReshapeInfo, dataset } = advancedVSeed;
7197
+ const { datasetReshapeInfo } = advancedVSeed;
7068
7198
  const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7069
- const showStroke = dataset.length <= 30;
7070
7199
  result.type = 'pie';
7071
7200
  result.outerRadius = 0.8;
7072
7201
  result.innerRadius = 0.8 * result.outerRadius;
7073
7202
  result.valueField = foldInfo.measureValue;
7074
7203
  result.categoryField = unfoldInfo.encodingColorId;
7075
7204
  result.padding = 0;
7076
- result.region = [
7077
- {
7078
- clip: true
7079
- }
7080
- ];
7081
- result.pie = {
7082
- style: {
7083
- stroke: '#ffffff',
7084
- lineWidth: showStroke ? 1 : 0
7085
- },
7086
- state: {
7087
- hover: {
7088
- outerRadius: 1.1 * result.outerRadius
7089
- }
7205
+ result.region = [
7206
+ {
7207
+ clip: true
7090
7208
  }
7091
- };
7209
+ ];
7092
7210
  result.animation = true;
7093
7211
  return result;
7094
7212
  };
7095
7213
  const donut = [
7096
7214
  initDonut,
7097
- color_color,
7215
+ colorAdapter(color_color, linearColor),
7098
7216
  background_backgroundColor,
7099
7217
  datasetXY,
7100
7218
  progressive,
7101
7219
  label_label,
7220
+ colorPieStyleFill(pieStyle),
7221
+ colorAdapter(discreteLegend, colorLegend),
7102
7222
  tooltip_tooltip,
7103
- discreteLegend,
7104
7223
  annotationPoint_annotationPoint,
7105
7224
  annotationVerticalLine_annotationVerticalLine,
7106
7225
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7113,11 +7232,12 @@
7113
7232
  datasetPivot,
7114
7233
  pivotIndicators_pivotIndicators([
7115
7234
  initDonut,
7116
- color_color,
7235
+ colorAdapter(color_color, linearColor),
7117
7236
  background_backgroundColor,
7118
7237
  datasetXY,
7119
7238
  progressive,
7120
7239
  label_label,
7240
+ colorPieStyleFill(pieStyle),
7121
7241
  tooltip_tooltip,
7122
7242
  annotationPoint_annotationPoint,
7123
7243
  annotationVerticalLine_annotationVerticalLine,
@@ -7126,7 +7246,7 @@
7126
7246
  ]),
7127
7247
  pivotRowDimensions,
7128
7248
  pivotColumnDimensions,
7129
- pivotDiscreteLegend
7249
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7130
7250
  ];
7131
7251
  const donutSpecPipeline = [
7132
7252
  pivotAdapter_pivotAdapter(donut, pivotDonut)
@@ -7137,51 +7257,57 @@
7137
7257
  };
7138
7258
  const encodingForRose = (advancedVSeed, context)=>{
7139
7259
  const { vseed } = context;
7140
- const { dimensions } = advancedVSeed;
7141
- if (!dimensions) return advancedVSeed;
7142
- const encoding = vseed.encoding;
7143
- if (encoding) {
7144
- const angle = encoding.angle || [
7145
- dimensions[0].id
7146
- ];
7147
- const color = encoding.color || [
7148
- (dimensions[1] || dimensions[0]).id
7149
- ];
7150
- const detail = encoding.detail || [];
7151
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
7152
- ...color,
7153
- ...detail
7154
- ]) : detail;
7155
- return {
7156
- ...advancedVSeed,
7157
- encoding: {
7158
- ...encoding,
7159
- angle,
7160
- color,
7161
- detail: mergedDetail
7162
- }
7163
- };
7164
- }
7165
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7166
- const mergedEncoding = {
7167
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7168
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7169
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7170
- tooltip: dimensions.map((item)=>item.id),
7171
- label: [],
7172
- row: [],
7173
- column: []
7174
- };
7260
+ const { measures: vseedMeasures = [] } = vseed;
7261
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7262
+ const dimensions = getBasicDimensions(vseed);
7263
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7264
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7265
+ const encoding = {};
7266
+ if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
7267
+ else rose_generateDefaultDimensionEncoding(dimensions, encoding);
7268
+ if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
7269
+ else rose_generateDefaultMeasureEncoding(measures, encoding);
7175
7270
  return {
7176
7271
  ...advancedVSeed,
7177
- encoding: mergedEncoding
7272
+ encoding
7178
7273
  };
7179
7274
  };
7275
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
7276
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7277
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7278
+ };
7279
+ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7280
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7281
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7282
+ encoding.angle = uniqueDimIds.slice(0, 1);
7283
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7284
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7285
+ encoding.tooltip = uniqueDimIds;
7286
+ encoding.label = [];
7287
+ encoding.row = [];
7288
+ encoding.column = [];
7289
+ };
7290
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
7291
+ encoding.tooltip = measures.map((item)=>item.id);
7292
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7293
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7294
+ if (color.length > 0) encoding.color = color;
7295
+ };
7296
+ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
7297
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7298
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7299
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7300
+ if (0 === encoding.angle.length) encoding.angle = [
7301
+ dimensions[0].id
7302
+ ];
7303
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7304
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7305
+ };
7180
7306
  const roseAdvancedPipeline = [
7181
7307
  initAdvancedVSeed_initAdvancedVSeed,
7308
+ encodingForRose,
7182
7309
  buildMeasures,
7183
7310
  autoDimensions_autoDimensions,
7184
- encodingForRose,
7185
7311
  pivotAdapter([
7186
7312
  reshapeWithEncoding
7187
7313
  ], [
@@ -7208,18 +7334,6 @@
7208
7334
  result.innerRadius = 0;
7209
7335
  const hasNegativeValue = dataset.flat().find((d)=>d[foldInfo.measureValue] < 0);
7210
7336
  if (hasNegativeValue) result.innerRadius = 0.05;
7211
- result.rose = {
7212
- style: {
7213
- stroke: '#ffffff',
7214
- lineWidth: 1
7215
- },
7216
- state: {
7217
- hover: {
7218
- lineWidth: 1,
7219
- fillOpacity: 0.6
7220
- }
7221
- }
7222
- };
7223
7337
  result.region = [
7224
7338
  {
7225
7339
  clip: true
@@ -7228,7 +7342,7 @@
7228
7342
  result.animation = true;
7229
7343
  return result;
7230
7344
  };
7231
- const radiusAxis = (spec, context)=>{
7345
+ const angleAxis = (spec, context)=>{
7232
7346
  const result = {
7233
7347
  ...spec
7234
7348
  };
@@ -7240,26 +7354,37 @@
7240
7354
  const showAxis = !(is0D || is1M1D);
7241
7355
  if (!result.axes) result.axes = [];
7242
7356
  result.axes.push({
7243
- orient: 'radius',
7357
+ orient: 'angle',
7244
7358
  visible: showAxis,
7245
7359
  zero: true,
7246
7360
  nice: !!showAxis,
7361
+ paddingInner: showAxis ? [
7362
+ 0.15,
7363
+ 0.1
7364
+ ] : [
7365
+ 0,
7366
+ 0
7367
+ ],
7368
+ paddingOuter: showAxis ? [
7369
+ 0.075,
7370
+ 0.1
7371
+ ] : [
7372
+ 0,
7373
+ 0
7374
+ ],
7247
7375
  grid: {
7248
7376
  visible: showAxis
7249
7377
  },
7250
- tick: {
7251
- visible: showAxis
7252
- },
7253
- label: {
7378
+ domainLine: {
7254
7379
  visible: showAxis
7255
7380
  },
7256
- domainLine: {
7381
+ tick: {
7257
7382
  visible: showAxis
7258
7383
  }
7259
7384
  });
7260
7385
  return result;
7261
7386
  };
7262
- const angleAxis = (spec, context)=>{
7387
+ const radiusAxis = (spec, context)=>{
7263
7388
  const result = {
7264
7389
  ...spec
7265
7390
  };
@@ -7271,50 +7396,79 @@
7271
7396
  const showAxis = !(is0D || is1M1D);
7272
7397
  if (!result.axes) result.axes = [];
7273
7398
  result.axes.push({
7274
- orient: 'angle',
7399
+ orient: 'radius',
7275
7400
  visible: showAxis,
7276
7401
  zero: true,
7277
7402
  nice: !!showAxis,
7278
- paddingInner: showAxis ? [
7279
- 0.15,
7280
- 0.1
7281
- ] : [
7282
- 0,
7283
- 0
7284
- ],
7285
- paddingOuter: showAxis ? [
7286
- 0.075,
7287
- 0.1
7288
- ] : [
7289
- 0,
7290
- 0
7291
- ],
7292
7403
  grid: {
7293
7404
  visible: showAxis
7294
7405
  },
7295
- domainLine: {
7406
+ tick: {
7296
7407
  visible: showAxis
7297
7408
  },
7298
- tick: {
7409
+ label: {
7410
+ visible: showAxis
7411
+ },
7412
+ domainLine: {
7299
7413
  visible: showAxis
7300
7414
  }
7301
7415
  });
7302
7416
  return result;
7303
7417
  };
7418
+ const colorRoseStyleFill = (stylePipe)=>(spec, context)=>{
7419
+ const result = stylePipe(spec, context);
7420
+ const { advancedVSeed } = context;
7421
+ const { datasetReshapeInfo } = advancedVSeed;
7422
+ const { unfoldInfo } = datasetReshapeInfo[0];
7423
+ if (isLinearColor(advancedVSeed)) {
7424
+ if (result?.rose?.style) result.rose.style.fill = {
7425
+ field: unfoldInfo.encodingColor,
7426
+ scale: 'color'
7427
+ };
7428
+ }
7429
+ return result;
7430
+ };
7431
+ const roseStyle = (spec, context)=>{
7432
+ const { advancedVSeed } = context;
7433
+ const { dataset } = advancedVSeed;
7434
+ const showStroke = dataset.length <= 30;
7435
+ const result = {
7436
+ ...spec,
7437
+ rose: {
7438
+ style: {}
7439
+ }
7440
+ };
7441
+ return {
7442
+ ...result,
7443
+ rose: {
7444
+ style: {
7445
+ stroke: '#ffffff',
7446
+ lineWidth: showStroke ? 1 : 0
7447
+ },
7448
+ state: {
7449
+ hover: {
7450
+ lineWidth: 1,
7451
+ fillOpacity: 0.6
7452
+ }
7453
+ }
7454
+ }
7455
+ };
7456
+ };
7304
7457
  const rose = [
7305
7458
  initRose,
7306
7459
  stackCornerRadius_stackCornerRadius,
7307
7460
  stackInverse,
7308
- color_color,
7461
+ colorAdapter(color_color, linearColor),
7309
7462
  background_backgroundColor,
7310
7463
  datasetXY,
7311
7464
  progressive,
7312
- radiusAxis,
7313
7465
  angleAxis,
7314
- label_label,
7315
- tooltip_tooltip,
7466
+ radiusAxis,
7316
7467
  verticalCrosshairRect,
7317
- discreteLegend
7468
+ colorRoseStyleFill(roseStyle),
7469
+ colorAdapter(discreteLegend, colorLegend),
7470
+ label_label,
7471
+ tooltip_tooltip
7318
7472
  ];
7319
7473
  const pivotRose = [
7320
7474
  initPivot,
@@ -7325,19 +7479,20 @@
7325
7479
  initRose,
7326
7480
  stackCornerRadius_stackCornerRadius,
7327
7481
  stackInverse,
7328
- color_color,
7482
+ colorAdapter(color_color, linearColor),
7329
7483
  background_backgroundColor,
7330
7484
  datasetXY,
7331
7485
  progressive,
7332
7486
  radiusAxis,
7333
7487
  angleAxis,
7488
+ verticalCrosshairRect,
7489
+ colorRoseStyleFill(roseStyle),
7334
7490
  label_label,
7335
- tooltip_tooltip,
7336
- verticalCrosshairRect
7491
+ tooltip_tooltip
7337
7492
  ]),
7338
7493
  pivotRowDimensions,
7339
7494
  pivotColumnDimensions,
7340
- pivotDiscreteLegend
7495
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7341
7496
  ];
7342
7497
  const roseSpecPipeline = [
7343
7498
  pivotAdapter_pivotAdapter(rose, pivotRose)
@@ -7348,9 +7503,9 @@
7348
7503
  };
7349
7504
  const roseParallelAdvancedPipeline = [
7350
7505
  initAdvancedVSeed_initAdvancedVSeed,
7506
+ encodingForRose,
7351
7507
  buildMeasures,
7352
7508
  autoDimensions_autoDimensions,
7353
- encodingForRose,
7354
7509
  pivotAdapter([
7355
7510
  reshapeWithEncoding
7356
7511
  ], [
@@ -7406,15 +7561,16 @@
7406
7561
  const roseParallel = [
7407
7562
  initRoseParallel,
7408
7563
  stackCornerRadius_stackCornerRadius,
7409
- color_color,
7564
+ colorAdapter(color_color, linearColor),
7410
7565
  background_backgroundColor,
7411
7566
  datasetXY,
7412
7567
  progressive,
7413
7568
  radiusAxis,
7414
7569
  angleAxis,
7570
+ colorRoseStyleFill(roseStyle),
7571
+ colorAdapter(discreteLegend, colorLegend),
7415
7572
  label_label,
7416
7573
  tooltip_tooltip,
7417
- discreteLegend,
7418
7574
  verticalCrosshairRect,
7419
7575
  annotationPoint_annotationPoint,
7420
7576
  annotationVerticalLine_annotationVerticalLine,
@@ -7429,15 +7585,16 @@
7429
7585
  pivotIndicators_pivotIndicators([
7430
7586
  initRoseParallel,
7431
7587
  stackCornerRadius_stackCornerRadius,
7432
- color_color,
7588
+ colorAdapter(color_color, linearColor),
7433
7589
  background_backgroundColor,
7434
7590
  datasetXY,
7435
7591
  progressive,
7436
7592
  radiusAxis,
7437
7593
  angleAxis,
7594
+ verticalCrosshairRect,
7595
+ colorRoseStyleFill(roseStyle),
7438
7596
  label_label,
7439
7597
  tooltip_tooltip,
7440
- verticalCrosshairRect,
7441
7598
  annotationPoint_annotationPoint,
7442
7599
  annotationVerticalLine_annotationVerticalLine,
7443
7600
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7445,7 +7602,7 @@
7445
7602
  ]),
7446
7603
  pivotRowDimensions,
7447
7604
  pivotColumnDimensions,
7448
- pivotDiscreteLegend
7605
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7449
7606
  ];
7450
7607
  const roseParallelSpecPipeline = [
7451
7608
  pivotAdapter_pivotAdapter(roseParallel, pivotRoseParallel)
@@ -7456,50 +7613,55 @@
7456
7613
  };
7457
7614
  const encodingForRadar = (advancedVSeed, context)=>{
7458
7615
  const { vseed } = context;
7459
- const { dimensions } = advancedVSeed;
7460
- if (!dimensions) return advancedVSeed;
7461
- const encoding = vseed.encoding;
7462
- if (encoding) {
7463
- const angle = encoding.angle || [
7464
- dimensions[0].id
7465
- ];
7466
- const color = encoding.color || [
7467
- (dimensions[1] || dimensions[0]).id
7468
- ];
7469
- const detail = encoding.detail || [];
7470
- const mergedDetail = 0 === detail.length ? chunk_QJLMYOTX_i([
7471
- ...color,
7472
- ...detail
7473
- ]) : detail;
7474
- return {
7475
- ...advancedVSeed,
7476
- encoding: {
7477
- ...encoding,
7478
- angle,
7479
- color,
7480
- detail: mergedDetail
7481
- }
7482
- };
7483
- }
7484
- const mergedEncoding = {
7485
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7486
- color: dimensions.slice(1).map((item)=>item.id),
7487
- detail: dimensions.slice(1).map((item)=>item.id),
7488
- tooltip: dimensions.map((item)=>item.id),
7489
- label: [],
7490
- row: [],
7491
- column: []
7492
- };
7616
+ const { measures: vseedMeasures = [] } = vseed;
7617
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7618
+ const dimensions = getBasicDimensions(vseed);
7619
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7620
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7621
+ const encoding = {};
7622
+ if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
7623
+ else radar_generateDefaultDimensionEncoding(dimensions, encoding);
7624
+ if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
7625
+ else radar_generateDefaultMeasureEncoding(measures, encoding);
7493
7626
  return {
7494
7627
  ...advancedVSeed,
7495
- encoding: mergedEncoding
7496
- };
7628
+ encoding
7629
+ };
7630
+ };
7631
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7632
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7633
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7634
+ };
7635
+ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7636
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7637
+ encoding.angle = uniqueDimIds.slice(0, 1);
7638
+ encoding.color = uniqueDimIds.slice(1);
7639
+ encoding.tooltip = uniqueDimIds;
7640
+ encoding.detail = [];
7641
+ encoding.label = [];
7642
+ encoding.row = [];
7643
+ encoding.column = [];
7644
+ };
7645
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7646
+ encoding.tooltip = measures.map((item)=>item.id);
7647
+ encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7648
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7649
+ if (color.length > 0) encoding.color = color;
7650
+ };
7651
+ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7652
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7653
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7654
+ encoding.detail = [];
7655
+ if (0 === encoding.angle.length) encoding.angle = [
7656
+ dimensions[0].id
7657
+ ];
7658
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7497
7659
  };
7498
7660
  const radarAdvancedPipeline = [
7499
7661
  initAdvancedVSeed_initAdvancedVSeed,
7662
+ encodingForRadar,
7500
7663
  buildMeasures,
7501
7664
  autoDimensions_autoDimensions,
7502
- encodingForRadar,
7503
7665
  pivotAdapter([
7504
7666
  reshapeWithEncoding
7505
7667
  ], [
@@ -7635,33 +7797,51 @@
7635
7797
  };
7636
7798
  const encodingForFunnel = (advancedVSeed, context)=>{
7637
7799
  const { vseed } = context;
7638
- const { dimensions } = advancedVSeed;
7639
- if (!dimensions) return advancedVSeed;
7640
- const encoding = vseed.encoding;
7641
- if (encoding) return {
7642
- ...advancedVSeed,
7643
- encoding: {
7644
- ...encoding
7645
- }
7646
- };
7647
- const mergedEncoding = {
7648
- color: dimensions.slice(0).map((item)=>item.id),
7649
- detail: dimensions.slice(0).map((item)=>item.id),
7650
- tooltip: dimensions.map((item)=>item.id),
7651
- label: [],
7652
- row: [],
7653
- column: []
7654
- };
7800
+ const { measures: vseedMeasures = [] } = vseed;
7801
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7802
+ const dimensions = getBasicDimensions(vseed);
7803
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7804
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7805
+ const encoding = {};
7806
+ if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
7807
+ else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
7808
+ if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
7809
+ else funnel_generateDefaultMeasureEncoding(measures, encoding);
7655
7810
  return {
7656
7811
  ...advancedVSeed,
7657
- encoding: mergedEncoding
7658
- };
7812
+ encoding
7813
+ };
7814
+ };
7815
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7816
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7817
+ encoding.size = chunk_QJLMYOTX_i(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7818
+ };
7819
+ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7820
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7821
+ encoding.color = uniqueDimIds.slice(0);
7822
+ encoding.detail = uniqueDimIds.slice(0);
7823
+ encoding.tooltip = uniqueDimIds;
7824
+ encoding.label = [];
7825
+ encoding.row = [];
7826
+ encoding.column = [];
7827
+ };
7828
+ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7829
+ encoding.tooltip = measures.map((item)=>item.id);
7830
+ encoding.size = chunk_QJLMYOTX_i(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7831
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7832
+ if (color.length > 0) encoding.color = color;
7833
+ };
7834
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7835
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7836
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7837
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7838
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7659
7839
  };
7660
7840
  const funnelAdvancedPipeline = [
7661
7841
  initAdvancedVSeed_initAdvancedVSeed,
7842
+ encodingForFunnel,
7662
7843
  buildMeasures,
7663
7844
  autoDimensions_autoDimensions,
7664
- encodingForFunnel,
7665
7845
  pivotAdapter([
7666
7846
  reshapeWithEncoding
7667
7847
  ], [
@@ -7691,34 +7871,55 @@
7691
7871
  clip: true
7692
7872
  }
7693
7873
  ];
7694
- result.funnel = {
7695
- style: {
7696
- cornerRadius: 4,
7697
- fill: {
7698
- field: unfoldInfo.encodingColorId,
7699
- scale: 'color'
7700
- }
7701
- },
7702
- state: {
7703
- hover: {
7704
- fillOpacity: 0.6
7705
- }
7706
- }
7707
- };
7708
7874
  result.transformLabel = {
7709
7875
  visible: true
7710
7876
  };
7711
7877
  result.animation = true;
7712
7878
  return result;
7713
7879
  };
7880
+ const colorFunnelStyleFill = (stylePipe)=>(spec, context)=>{
7881
+ const result = stylePipe(spec, context);
7882
+ const { advancedVSeed } = context;
7883
+ const { datasetReshapeInfo } = advancedVSeed;
7884
+ const { unfoldInfo } = datasetReshapeInfo[0];
7885
+ if (isLinearColor(advancedVSeed)) {
7886
+ if (result?.funnel?.style) result.funnel.style.fill = {
7887
+ field: unfoldInfo.encodingColor,
7888
+ scale: 'color'
7889
+ };
7890
+ }
7891
+ return result;
7892
+ };
7893
+ const funnelStyle = (spec)=>{
7894
+ const result = {
7895
+ ...spec,
7896
+ funnel: {
7897
+ style: {}
7898
+ }
7899
+ };
7900
+ return {
7901
+ ...result,
7902
+ funnel: {
7903
+ style: {
7904
+ cornerRadius: 4
7905
+ },
7906
+ state: {
7907
+ hover: {
7908
+ fillOpacity: 0.6
7909
+ }
7910
+ }
7911
+ }
7912
+ };
7913
+ };
7714
7914
  const funnel = [
7715
7915
  initFunnel,
7716
7916
  background_backgroundColor,
7717
7917
  datasetXY,
7718
- color_color,
7918
+ colorAdapter(color_color, linearColor),
7719
7919
  label_label,
7920
+ colorAdapter(discreteLegend, colorLegend),
7921
+ colorFunnelStyleFill(funnelStyle),
7720
7922
  tooltip_tooltip,
7721
- discreteLegend,
7722
7923
  annotationPoint_annotationPoint,
7723
7924
  annotationVerticalLine_annotationVerticalLine,
7724
7925
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7733,17 +7934,18 @@
7733
7934
  initFunnel,
7734
7935
  background_backgroundColor,
7735
7936
  datasetXY,
7736
- color_color,
7937
+ colorAdapter(color_color, linearColor),
7737
7938
  label_label,
7738
7939
  tooltip_tooltip,
7739
- discreteLegend,
7940
+ colorFunnelStyleFill(funnelStyle),
7740
7941
  annotationPoint_annotationPoint,
7741
7942
  annotationVerticalLine_annotationVerticalLine,
7742
7943
  annotationHorizontalLine_annotationHorizontalLine,
7743
7944
  annotationArea_annotationArea
7744
7945
  ]),
7745
7946
  pivotRowDimensions,
7746
- pivotColumnDimensions
7947
+ pivotColumnDimensions,
7948
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7747
7949
  ];
7748
7950
  const funnelSpecPipeline = [
7749
7951
  pivotAdapter_pivotAdapter(funnel, pivotFunnel)
@@ -7754,45 +7956,61 @@
7754
7956
  };
7755
7957
  const encodingForHeatmap = (advancedVSeed, context)=>{
7756
7958
  const { vseed } = context;
7757
- const { dimensions } = advancedVSeed;
7758
- if (!dimensions) return advancedVSeed;
7759
- const encoding = vseed.encoding;
7760
- if (encoding) {
7761
- const x = encoding.x || [
7762
- dimensions[0].id
7763
- ];
7764
- const y = encoding.y || [
7765
- (dimensions[1] || dimensions[0]).id
7766
- ];
7767
- return {
7768
- ...advancedVSeed,
7769
- encoding: {
7770
- x,
7771
- y,
7772
- ...encoding
7773
- }
7774
- };
7775
- }
7776
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7777
- const mergedEncoding = {
7778
- x: dimensions.slice(0, 1).map((item)=>item.id),
7779
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7780
- color: dimensions.slice(0).map((item)=>item.id),
7781
- tooltip: dimensions.map((item)=>item.id),
7782
- label: [],
7783
- row: [],
7784
- column: []
7785
- };
7959
+ const { measures: vseedMeasures = [] } = vseed;
7960
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7961
+ const dimensions = getBasicDimensions(vseed);
7962
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7963
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7964
+ const encoding = {};
7965
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
7966
+ else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
7967
+ if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
7968
+ else heatmap_generateDefaultMeasureEncoding(measures, encoding);
7786
7969
  return {
7787
7970
  ...advancedVSeed,
7788
- encoding: mergedEncoding
7971
+ encoding
7789
7972
  };
7790
7973
  };
7974
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7975
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
7976
+ encoding.color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7977
+ };
7978
+ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7979
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7980
+ const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7981
+ encoding.x = uniqueDimIds.slice(0, 1);
7982
+ encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7983
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7984
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7985
+ encoding.tooltip = uniqueDimIds;
7986
+ encoding.label = [];
7987
+ encoding.row = [];
7988
+ encoding.column = [];
7989
+ };
7990
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7991
+ encoding.tooltip = measures.map((item)=>item.id);
7992
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7993
+ if (color.length > 0) encoding.color = color;
7994
+ return encoding;
7995
+ };
7996
+ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7997
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7998
+ encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
7999
+ encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
8000
+ encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
8001
+ if (0 === encoding.x.length) encoding.x = [
8002
+ dimensions[0].id
8003
+ ];
8004
+ if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
8005
+ else encoding.y = dimensions.slice(0).map((item)=>item.id);
8006
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
8007
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
8008
+ };
7791
8009
  const heatmapAdvancedPipeline = [
7792
8010
  initAdvancedVSeed_initAdvancedVSeed,
8011
+ encodingForHeatmap,
7793
8012
  buildMeasures,
7794
8013
  autoDimensions_autoDimensions,
7795
- encodingForHeatmap,
7796
8014
  pivotAdapter([
7797
8015
  reshapeWithEncoding
7798
8016
  ], [
@@ -7814,6 +8032,37 @@
7814
8032
  };
7815
8033
  return result;
7816
8034
  };
8035
+ const colorCellStyleFill = (stylePipe)=>(spec, context)=>{
8036
+ const result = stylePipe(spec, context);
8037
+ const { advancedVSeed } = context;
8038
+ const { datasetReshapeInfo } = advancedVSeed;
8039
+ const { unfoldInfo } = datasetReshapeInfo[0];
8040
+ if (isLinearColor(advancedVSeed)) {
8041
+ if (result?.cell?.style) result.cell.style.fill = {
8042
+ field: unfoldInfo.encodingColor,
8043
+ scale: 'color'
8044
+ };
8045
+ }
8046
+ return result;
8047
+ };
8048
+ const cellStyle = (spec)=>{
8049
+ const result = {
8050
+ ...spec,
8051
+ cell: {
8052
+ style: {}
8053
+ }
8054
+ };
8055
+ return {
8056
+ ...result,
8057
+ cell: {
8058
+ style: {
8059
+ shape: 'rect',
8060
+ stroke: '#ffffff',
8061
+ lineWidth: 1
8062
+ }
8063
+ }
8064
+ };
8065
+ };
7817
8066
  const initHeatmap = (spec, context)=>{
7818
8067
  const result = {
7819
8068
  ...spec
@@ -7828,13 +8077,6 @@
7828
8077
  result.seriesField = unfoldInfo.encodingColorId;
7829
8078
  result.valueField = foldInfo.measureValue;
7830
8079
  result.padding = 0;
7831
- result.cell = {
7832
- style: {
7833
- shape: 'rect',
7834
- stroke: '#ffffff',
7835
- lineWidth: 1
7836
- }
7837
- };
7838
8080
  result.axes = [
7839
8081
  {
7840
8082
  type: 'band',
@@ -7859,14 +8101,12 @@
7859
8101
  initHeatmap,
7860
8102
  background_backgroundColor,
7861
8103
  datasetXY,
7862
- color_color,
8104
+ colorAdapter(color_color, linearColor),
7863
8105
  label_label,
7864
8106
  labelColorInversion,
7865
- discreteLegend,
8107
+ colorAdapter(discreteLegend, colorLegend),
8108
+ colorCellStyleFill(cellStyle),
7866
8109
  tooltip_tooltip,
7867
- pointStyle_pointStyle,
7868
- pointStateDimensionHover,
7869
- lineStyle_lineStyle,
7870
8110
  annotationPoint_annotationPoint,
7871
8111
  annotationVerticalLine_annotationVerticalLine,
7872
8112
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7881,21 +8121,20 @@
7881
8121
  initHeatmap,
7882
8122
  background_backgroundColor,
7883
8123
  datasetXY,
7884
- color_color,
8124
+ colorAdapter(color_color, linearColor),
7885
8125
  label_label,
7886
8126
  labelColorInversion,
7887
8127
  discreteLegend,
7888
8128
  tooltip_tooltip,
7889
- pointStyle_pointStyle,
7890
- pointStateDimensionHover,
7891
- lineStyle_lineStyle,
8129
+ colorCellStyleFill(cellStyle),
7892
8130
  annotationPoint_annotationPoint,
7893
8131
  annotationVerticalLine_annotationVerticalLine,
7894
8132
  annotationHorizontalLine_annotationHorizontalLine,
7895
8133
  annotationArea_annotationArea
7896
8134
  ]),
7897
8135
  pivotRowDimensions,
7898
- pivotColumnDimensions
8136
+ pivotColumnDimensions,
8137
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7899
8138
  ];
7900
8139
  const heatmapSpecPipeline = [
7901
8140
  pivotAdapter_pivotAdapter(heatmap, pivotHeatmap)
@@ -11895,7 +12134,18 @@
11895
12134
  'dimension',
11896
12135
  'rowDimension',
11897
12136
  'columnDimension'
11898
- ]).default('dimension')
12137
+ ]).default('dimension'),
12138
+ encoding: schemas_enum([
12139
+ 'xAxis',
12140
+ 'yAxis',
12141
+ 'angle',
12142
+ 'color',
12143
+ 'detail',
12144
+ 'tooltip',
12145
+ 'label',
12146
+ 'row',
12147
+ 'column'
12148
+ ]).optional()
11899
12149
  });
11900
12150
  const zDimensionGroup = schemas_object({
11901
12151
  id: schemas_string(),