@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/index.cjs CHANGED
@@ -189,9 +189,8 @@ __webpack_require__.d(__webpack_exports__, {
189
189
  zBackgroundColor: ()=>zBackgroundColor,
190
190
  registerBarParallel: ()=>registerBarParallel,
191
191
  registerRadar: ()=>registerRadar,
192
- zEncodings: ()=>zEncodings,
193
- pivotTableSpecPipeline: ()=>pivotTableSpecPipeline,
194
192
  zLocale: ()=>zLocale,
193
+ pivotTableSpecPipeline: ()=>pivotTableSpecPipeline,
195
194
  zMeasure: ()=>zMeasure,
196
195
  FoldXMeasureValue: ()=>FoldXMeasureValue,
197
196
  dualAxisAdvancedPipeline: ()=>dualAxisAdvancedPipeline,
@@ -1272,6 +1271,138 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
1272
1271
  locale: locale || 'zh-CN'
1273
1272
  };
1274
1273
  };
1274
+ const ORIGINAL_DATA = '__OriginalData__';
1275
+ const Separator = '-';
1276
+ const FoldMeasureName = '__MeaName__';
1277
+ const FoldMeasureId = '__MeaId__';
1278
+ const FoldMeasureValue = '__MeaValue__';
1279
+ const MeasureName = FoldMeasureName;
1280
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1281
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1282
+ const FoldXMeasureValue = '__MeaXValue__';
1283
+ const FoldYMeasureValue = '__MeaYValue__';
1284
+ const XEncoding = '__Dim_X__';
1285
+ const YEncoding = '__Dim_Y__';
1286
+ const AngleEncoding = '__Dim_Angle__';
1287
+ const DetailEncoding = '__Dim_Detail__';
1288
+ const ColorEncoding = '__Dim_Color__';
1289
+ const ColorIdEncoding = '__Dim_ColorId__';
1290
+ const getBasicDimensions = (vseed)=>{
1291
+ const { dimensions, dataset } = vseed;
1292
+ const MeaName = {
1293
+ id: MeasureName,
1294
+ alias: intl.i18n`指标名称`,
1295
+ encoding: 'detail'
1296
+ };
1297
+ if (!dataset) throw new Error('dataset is required');
1298
+ if (0 === dataset.length) return [];
1299
+ if (dimensions) {
1300
+ const basicDimensions = dimensions.map((dim)=>({
1301
+ location: 'dimension',
1302
+ ...dim
1303
+ }));
1304
+ if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1305
+ basicDimensions.push(MeaName);
1306
+ return basicDimensions;
1307
+ }
1308
+ const top100dataset = dataset.slice(0, 100);
1309
+ const sample = top100dataset.reduce((prev, cur)=>({
1310
+ ...prev,
1311
+ ...cur
1312
+ }), {});
1313
+ const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1314
+ '',
1315
+ null,
1316
+ void 0
1317
+ ].includes(key)).map((dim)=>({
1318
+ id: dim,
1319
+ alias: dim,
1320
+ location: 'dimension'
1321
+ }));
1322
+ basicDimensions.push(MeaName);
1323
+ return basicDimensions;
1324
+ };
1325
+ const getBasicMeasures = (vseed)=>{
1326
+ const { dataset, measures } = vseed;
1327
+ if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1328
+ return measures;
1329
+ };
1330
+ const generateMeasuresByDataset = (dataset)=>{
1331
+ if (!dataset) throw new Error('dataset is required');
1332
+ if (0 === dataset.length) return [];
1333
+ const top100dataset = dataset.slice(0, 100);
1334
+ const sample = top100dataset.reduce((prev, cur)=>({
1335
+ ...prev,
1336
+ ...cur
1337
+ }), {});
1338
+ const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1339
+ '',
1340
+ null,
1341
+ void 0
1342
+ ].includes(key)).map((measure)=>({
1343
+ id: measure,
1344
+ alias: measure
1345
+ }));
1346
+ return basicMeasures;
1347
+ };
1348
+ const isMeasureTreeWithChildren = (vseed)=>{
1349
+ const { measures } = vseed;
1350
+ if (!measures) return false;
1351
+ return measures.some((measure)=>'children' in measure);
1352
+ };
1353
+ const isMeasureTreeWithParentId = (vseed)=>{
1354
+ const { measures } = vseed;
1355
+ if (!measures) return false;
1356
+ return measures.some((measure)=>'parentId' in measure);
1357
+ };
1358
+ const encodingForLine = (advancedVSeed, context)=>{
1359
+ const { vseed } = context;
1360
+ const { measures: vseedMeasures = [] } = vseed;
1361
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1362
+ const dimensions = getBasicDimensions(vseed);
1363
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1364
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
1365
+ const encoding = {};
1366
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1367
+ else generateDefaultDimensionEncoding(dimensions, encoding);
1368
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1369
+ else generateDefaultMeasureEncoding(measures, encoding);
1370
+ return {
1371
+ ...advancedVSeed,
1372
+ encoding
1373
+ };
1374
+ };
1375
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1376
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
1377
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1378
+ };
1379
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1380
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1381
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
1382
+ encoding.x = uniqueDimIds.slice(0, 1);
1383
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1384
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1385
+ encoding.tooltip = uniqueDimIds;
1386
+ encoding.label = [];
1387
+ encoding.row = [];
1388
+ encoding.column = [];
1389
+ };
1390
+ const generateMeasureEncoding = (measures, encoding)=>{
1391
+ encoding.tooltip = measures.map((item)=>item.id);
1392
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1393
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1394
+ if (color.length > 0) encoding.color = color;
1395
+ };
1396
+ const generateDimensionEncoding = (dimensions, encoding)=>{
1397
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1398
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1399
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1400
+ if (0 === encoding.x.length) encoding.x = [
1401
+ dimensions[0].id
1402
+ ];
1403
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1404
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1405
+ };
1275
1406
  const measureDepth = (measures = [])=>{
1276
1407
  if (!measures) return 0;
1277
1408
  let depth = 1;
@@ -1290,23 +1421,26 @@ const isVTable = (vseed)=>[
1290
1421
  const isVChart = (vseed)=>!isVTable(vseed);
1291
1422
  const isPivotChart = (vseed)=>{
1292
1423
  if (isVTable(vseed)) return false;
1424
+ if (isMeasureTreeWithParentId(vseed)) {
1425
+ const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1426
+ return parentIds && (0, external_remeda_namespaceObject.unique)(parentIds).length > 1;
1427
+ }
1293
1428
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1294
1429
  const { dimensions = [] } = vseed;
1295
1430
  const hasRowOrColumnDimension = dimensions && dimensions.some((dimension)=>'rowDimension' === dimension.location || 'columnDimension' === dimension.location);
1296
1431
  if (hasRowOrColumnDimension) return true;
1297
1432
  if ('scatter' === vseed.chartType) {
1298
- if (vseed.measures) {
1433
+ if (isMeasureTreeWithChildren(vseed)) {
1299
1434
  const depth = measureDepth(vseed.measures);
1300
- if (3 === depth) return true;
1301
- return false;
1435
+ return 3 === depth;
1302
1436
  }
1303
1437
  if (vseed.scatterMeasures && vseed.scatterMeasures.length > 1) return true;
1438
+ return false;
1304
1439
  }
1305
1440
  if ('dualAxis' === vseed.chartType) {
1306
- if (vseed.measures) {
1441
+ if (isMeasureTreeWithChildren(vseed)) {
1307
1442
  const depth = measureDepth(vseed.measures);
1308
- if (3 === depth) return true;
1309
- return false;
1443
+ return 3 === depth;
1310
1444
  }
1311
1445
  if (vseed.dualMeasures && vseed.dualMeasures.length > 1) return true;
1312
1446
  }
@@ -1317,93 +1451,49 @@ const isPivotChart = (vseed)=>{
1317
1451
  const hasMeasureGroup = measures && measures.some((measure)=>measure && measure.children);
1318
1452
  return hasRowOrColumnDimension || hasMeasureGroup;
1319
1453
  };
1320
- const autoMeasures_autoMeasures = (advancedVSeed, context)=>{
1321
- const result = {
1322
- ...advancedVSeed
1323
- };
1454
+ const buildMeasures = (advancedVSeed, context)=>{
1324
1455
  const { vseed } = context;
1325
- const { measures, dataset } = vseed;
1326
- if (!dataset) throw new Error('dataset is required');
1327
- if (0 === dataset.length) return result;
1328
- if (isPivotChart(vseed)) return autoMeasureGroup(advancedVSeed, context);
1329
- if (measures) {
1330
- result.measures = measures;
1331
- return result;
1456
+ if (isMeasureTreeWithChildren(vseed)) {
1457
+ advancedVSeed.measures = vseed.measures;
1458
+ return advancedVSeed;
1332
1459
  }
1333
- const top100dataset = dataset.slice(0, 100);
1334
- const sample = top100dataset.reduce((prev, cur)=>({
1335
- ...prev,
1336
- ...cur
1337
- }), {});
1338
- result.measures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1339
- '',
1340
- null,
1341
- void 0
1342
- ].includes(key)).map((measure)=>({
1343
- id: measure,
1344
- alias: measure
1345
- }));
1346
- return result;
1347
- };
1348
- const autoMeasureGroup = (advancedVSeed, context)=>{
1349
- const { vseed } = context;
1350
- const { measures } = vseed;
1351
- const hasMeasureGroup = measures?.some((measure)=>measure.children);
1352
- if (!measures) return advancedVSeed;
1353
- if (!hasMeasureGroup) {
1354
- const newMeasures = [
1355
- {
1356
- id: 'measureGroup',
1357
- alias: 'measureGroup',
1358
- children: measures
1359
- }
1360
- ];
1361
- return {
1362
- ...advancedVSeed,
1363
- measures: newMeasures
1364
- };
1365
- }
1366
- let currentGroup = createEmptyMeasureGroup();
1367
- const measureGroups = [];
1368
- for (const measure of measures)if ('children' in measure) {
1369
- if (currentGroup.children?.length) {
1370
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1371
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1372
- measureGroups.push(currentGroup);
1373
- currentGroup = createEmptyMeasureGroup();
1374
- }
1375
- measureGroups.push(measure);
1376
- } else currentGroup.children?.push(measure);
1377
- if (currentGroup.children?.length) {
1378
- currentGroup.alias = currentGroup.children.map((item)=>item.alias).join('-');
1379
- currentGroup.id = currentGroup.alias + currentGroup.children.map((item)=>item.id).join('-');
1380
- measureGroups.push(currentGroup);
1381
- currentGroup = createEmptyMeasureGroup();
1460
+ if (isMeasureTreeWithParentId(vseed)) {
1461
+ advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1462
+ return advancedVSeed;
1382
1463
  }
1383
- advancedVSeed.measures = measureGroups;
1464
+ const basicMeasures = getBasicMeasures(vseed);
1465
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1466
+ else advancedVSeed.measures = basicMeasures;
1384
1467
  return advancedVSeed;
1385
1468
  };
1386
- const createEmptyMeasureGroup = ()=>({
1387
- id: '',
1388
- alias: '',
1389
- children: []
1469
+ const generateMeasuresByParentId = (measures)=>{
1470
+ const measureTree = [];
1471
+ measures.forEach((measure)=>{
1472
+ if (!measure.parentId) return;
1473
+ const parent = measureTree.find((item)=>item.id === measure.parentId);
1474
+ if (parent && 'children' in parent) {
1475
+ parent.children = parent.children || [];
1476
+ parent.children.push(measure);
1477
+ } else measureTree.push({
1478
+ id: measure.parentId,
1479
+ children: [
1480
+ measure
1481
+ ]
1482
+ });
1390
1483
  });
1391
- const ORIGINAL_DATA = '__OriginalData__';
1392
- const Separator = '-';
1393
- const FoldMeasureName = '__MeaName__';
1394
- const FoldMeasureId = '__MeaId__';
1395
- const FoldMeasureValue = '__MeaValue__';
1396
- const MeasureName = FoldMeasureName;
1397
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1398
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1399
- const FoldXMeasureValue = '__MeaXValue__';
1400
- const FoldYMeasureValue = '__MeaYValue__';
1401
- const XEncoding = '__Dim_X__';
1402
- const YEncoding = '__Dim_Y__';
1403
- const AngleEncoding = '__Dim_Angle__';
1404
- const DetailEncoding = '__Dim_Detail__';
1405
- const ColorEncoding = '__Dim_Color__';
1406
- const ColorIdEncoding = '__Dim_ColorId__';
1484
+ return measureTree;
1485
+ };
1486
+ const basicMeasuresToMeasureTree = (measures)=>{
1487
+ const id = measures.map((item)=>item.id).join('-');
1488
+ const alias = measures.map((item)=>item.alias || item.id).join('-');
1489
+ return [
1490
+ {
1491
+ id,
1492
+ alias,
1493
+ children: measures
1494
+ }
1495
+ ];
1496
+ };
1407
1497
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1408
1498
  const result = {
1409
1499
  ...advancedVSeed
@@ -1443,54 +1533,14 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1443
1533
  result.dimensions.push(MeaName);
1444
1534
  return result;
1445
1535
  };
1446
- const encodingForLine = (advancedVSeed, context)=>{
1447
- const { vseed } = context;
1448
- const { dimensions } = advancedVSeed;
1449
- if (!dimensions) return advancedVSeed;
1450
- const encoding = vseed.encoding;
1451
- if (encoding) {
1452
- const x = encoding.x || [
1453
- dimensions[0].id
1454
- ];
1455
- const color = encoding.color || [
1456
- (dimensions[1] || dimensions[0]).id
1457
- ];
1458
- const detail = encoding.detail || [];
1459
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1460
- return {
1461
- ...advancedVSeed,
1462
- encoding: {
1463
- ...encoding,
1464
- x,
1465
- color,
1466
- detail: mergedDetail
1467
- }
1468
- };
1469
- }
1470
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1471
- const mergedEncoding = {
1472
- x: dimensions.slice(0, 1).map((item)=>item.id),
1473
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1474
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1475
- tooltip: dimensions.map((item)=>item.id),
1476
- label: [],
1477
- row: [],
1478
- column: []
1479
- };
1480
- return {
1481
- ...advancedVSeed,
1482
- encoding: mergedEncoding
1483
- };
1484
- };
1485
1536
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1486
1537
  const { vseed } = context;
1487
1538
  const usePivotChart = isPivotChart(vseed);
1488
1539
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1489
1540
  return execPipeline(pipeline, context, advancedVSeed);
1490
1541
  };
1491
- const foldMeasures = (dataset, measures, encoding, options)=>{
1492
- const { measureId = FoldMeasureId, measureName = FoldMeasureName, measureValue = FoldMeasureValue } = options || {};
1493
- const colorMeasureId = encoding?.color?.length === 1 && measures.some((m)=>m.id === encoding?.color?.[0]) ? encoding?.color?.[0] : void 0;
1542
+ const foldMeasures = (dataset, measures, options)=>{
1543
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1494
1544
  const foldInfo = {
1495
1545
  measureId,
1496
1546
  measureName,
@@ -1589,11 +1639,12 @@ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1589
1639
  if (encoding && dimensions.length) datum[encoding] = dimensions.map((dim)=>String(datum[dim.id])).join(separator);
1590
1640
  };
1591
1641
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1592
- const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false } = options || {};
1593
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1642
+ const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1643
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1594
1644
  measureId: foldMeasureId,
1595
1645
  measureName: foldMeasureName,
1596
- measureValue: foldMeasureValue
1646
+ measureValue: foldMeasureValue,
1647
+ colorMeasureId
1597
1648
  });
1598
1649
  const { dataset: finalDataset, unfoldInfo } = unfoldDimensions(foldedDataset, dimensions, encoding, {
1599
1650
  foldMeasureId,
@@ -1606,6 +1657,24 @@ const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)
1606
1657
  unfoldInfo
1607
1658
  };
1608
1659
  };
1660
+ const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
1661
+ const { advancedVSeed } = context;
1662
+ if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
1663
+ return ordinalPipe(spec, context);
1664
+ };
1665
+ const isLinearColor = (advancedVSeed)=>{
1666
+ const { encoding, measures } = advancedVSeed;
1667
+ const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
1668
+ const { color } = encoding;
1669
+ return color?.length === 1 && measureIdList.includes(color[0]);
1670
+ };
1671
+ const getColorMeasureId = (advancedVSeed)=>{
1672
+ if (isLinearColor(advancedVSeed)) {
1673
+ const { encoding } = advancedVSeed;
1674
+ const { color } = encoding;
1675
+ return color?.[0];
1676
+ }
1677
+ };
1609
1678
  const reshapeWithEncoding = (advancedVSeed, context)=>{
1610
1679
  const result = {
1611
1680
  ...advancedVSeed
@@ -1615,7 +1684,9 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1615
1684
  const { dimensions, measures, encoding } = advancedVSeed;
1616
1685
  if (!measures || !dimensions || !dataset || !encoding) return result;
1617
1686
  if (0 === measures.length) throw new Error('measures can not be empty');
1618
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding);
1687
+ const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, (0, external_remeda_namespaceObject.uniqueBy)(dimensions, (item)=>item.id), (0, external_remeda_namespaceObject.uniqueBy)(findAllMeasures(measures), (item)=>item.id), encoding, {
1688
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1689
+ });
1619
1690
  return {
1620
1691
  ...result,
1621
1692
  dataset: newDatasets,
@@ -1650,8 +1721,9 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1650
1721
  const measures = measureGroup.children;
1651
1722
  if (!measures) return;
1652
1723
  const groupId = measureGroup.id;
1653
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1654
- foldMeasureValue: `${FoldMeasureValue}${groupId}`
1724
+ const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, (0, external_remeda_namespaceObject.uniqueBy)(dimensions, (item)=>item.id), (0, external_remeda_namespaceObject.uniqueBy)(measures, (item)=>item.id), encoding, {
1725
+ foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1726
+ colorMeasureId: getColorMeasureId(advancedVSeed)
1655
1727
  });
1656
1728
  const reshapeInfo = {
1657
1729
  id: groupId,
@@ -1858,9 +1930,9 @@ const annotation_annotation = (advancedVSeed, context)=>{
1858
1930
  };
1859
1931
  const lineAdvancedPipeline = [
1860
1932
  initAdvancedVSeed_initAdvancedVSeed,
1861
- autoMeasures_autoMeasures,
1862
- autoDimensions_autoDimensions,
1863
1933
  encodingForLine,
1934
+ buildMeasures,
1935
+ autoDimensions_autoDimensions,
1864
1936
  pivotAdapter([
1865
1937
  reshapeWithEncoding
1866
1938
  ], [
@@ -1873,17 +1945,6 @@ const lineAdvancedPipeline = [
1873
1945
  markStyle_markStyle,
1874
1946
  annotation_annotation
1875
1947
  ];
1876
- const colorAdapter = (ordinalPipe, linearPipe)=>(spec, context)=>{
1877
- const { advancedVSeed } = context;
1878
- if (isLinearColor(advancedVSeed)) return linearPipe(spec, context);
1879
- return ordinalPipe(spec, context);
1880
- };
1881
- const isLinearColor = (advancedVSeed)=>{
1882
- const { encoding, measures } = advancedVSeed;
1883
- const measureIdList = findAllMeasures(measures).map((measure)=>measure.id);
1884
- const { color } = encoding;
1885
- return color?.length === 1 && measureIdList.includes(color[0]);
1886
- };
1887
1948
  const initLine = (spec, context)=>{
1888
1949
  const result = {
1889
1950
  ...spec
@@ -3672,51 +3733,58 @@ const registerLine = ()=>{
3672
3733
  };
3673
3734
  const encodingForColumn = (advancedVSeed, context)=>{
3674
3735
  const { vseed } = context;
3675
- const { dimensions } = advancedVSeed;
3676
- if (!dimensions) return advancedVSeed;
3677
- const encoding = vseed.encoding;
3678
- if (encoding) {
3679
- const x = encoding.x || [
3680
- dimensions[0].id
3681
- ];
3682
- const color = encoding.color || [
3683
- (dimensions[1] || dimensions[0]).id
3684
- ];
3685
- const detail = encoding.detail || [];
3686
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
3687
- ...color,
3688
- ...detail
3689
- ]) : detail;
3690
- return {
3691
- ...advancedVSeed,
3692
- encoding: {
3693
- ...encoding,
3694
- x,
3695
- color,
3696
- detail: mergedDetail
3697
- }
3698
- };
3699
- }
3700
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3701
- const mergedEncoding = {
3702
- x: dimensions.slice(0, 1).map((item)=>item.id),
3703
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3704
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3705
- tooltip: dimensions.map((item)=>item.id),
3706
- label: [],
3707
- row: [],
3708
- column: []
3709
- };
3736
+ const { measures: vseedMeasures = [] } = vseed;
3737
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3738
+ const dimensions = getBasicDimensions(vseed);
3739
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3740
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
3741
+ const encoding = {};
3742
+ if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
3743
+ else column_generateDefaultDimensionEncoding(dimensions, encoding);
3744
+ if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
3745
+ else column_generateDefaultMeasureEncoding(measures, encoding);
3710
3746
  return {
3711
3747
  ...advancedVSeed,
3712
- encoding: mergedEncoding
3748
+ encoding
3713
3749
  };
3714
3750
  };
3751
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3752
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
3753
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3754
+ };
3755
+ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3756
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3757
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
3758
+ encoding.x = uniqueDimIds.slice(0, 1);
3759
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3760
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3761
+ encoding.tooltip = uniqueDimIds;
3762
+ encoding.label = [];
3763
+ encoding.row = [];
3764
+ encoding.column = [];
3765
+ };
3766
+ const column_generateMeasureEncoding = (measures, encoding)=>{
3767
+ encoding.tooltip = measures.map((item)=>item.id);
3768
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3769
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3770
+ if (color.length > 0) encoding.color = color;
3771
+ return encoding;
3772
+ };
3773
+ const column_generateDimensionEncoding = (dimensions, encoding)=>{
3774
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3775
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3776
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
3777
+ if (0 === encoding.x.length) encoding.x = [
3778
+ dimensions[0].id
3779
+ ];
3780
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3781
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3782
+ };
3715
3783
  const columnAdvancedPipeline = [
3716
3784
  initAdvancedVSeed_initAdvancedVSeed,
3717
- autoMeasures_autoMeasures,
3718
- autoDimensions_autoDimensions,
3719
3785
  encodingForColumn,
3786
+ buildMeasures,
3787
+ autoDimensions_autoDimensions,
3720
3788
  pivotAdapter([
3721
3789
  reshapeWithEncoding
3722
3790
  ], [
@@ -4163,9 +4231,9 @@ const registerColumn = ()=>{
4163
4231
  };
4164
4232
  const columnParallelAdvancedPipeline = [
4165
4233
  initAdvancedVSeed_initAdvancedVSeed,
4166
- autoMeasures_autoMeasures,
4167
- autoDimensions_autoDimensions,
4168
4234
  encodingForColumn,
4235
+ buildMeasures,
4236
+ autoDimensions_autoDimensions,
4169
4237
  pivotAdapter([
4170
4238
  reshapeWithEncoding
4171
4239
  ], [
@@ -4260,9 +4328,9 @@ const registerColumnParallel = ()=>{
4260
4328
  };
4261
4329
  const columnPercentAdvancedPipeline = [
4262
4330
  initAdvancedVSeed_initAdvancedVSeed,
4263
- autoMeasures_autoMeasures,
4264
- autoDimensions_autoDimensions,
4265
4331
  encodingForColumn,
4332
+ buildMeasures,
4333
+ autoDimensions_autoDimensions,
4266
4334
  pivotAdapter([
4267
4335
  reshapeWithEncoding
4268
4336
  ], [
@@ -4341,46 +4409,53 @@ const registerColumnPercent = ()=>{
4341
4409
  };
4342
4410
  const encodingForBar = (advancedVSeed, context)=>{
4343
4411
  const { vseed } = context;
4344
- const { dimensions } = advancedVSeed;
4345
- if (!dimensions) return advancedVSeed;
4346
- const encoding = vseed.encoding;
4347
- if (encoding) {
4348
- const y = encoding.y || [
4349
- dimensions[0].id
4350
- ];
4351
- const color = encoding.color || [
4352
- (dimensions[1] || dimensions[0]).id
4353
- ];
4354
- const detail = encoding.detail || [];
4355
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
4356
- ...color,
4357
- ...detail
4358
- ]) : detail;
4359
- return {
4360
- ...advancedVSeed,
4361
- encoding: {
4362
- ...encoding,
4363
- y,
4364
- color,
4365
- detail: mergedDetail
4366
- }
4367
- };
4368
- }
4369
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4370
- const mergedEncoding = {
4371
- y: dimensions.slice(0, 1).map((item)=>item.id),
4372
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4373
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4374
- tooltip: dimensions.map((item)=>item.id),
4375
- label: [],
4376
- row: [],
4377
- column: []
4378
- };
4412
+ const { measures: vseedMeasures = [] } = vseed;
4413
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4414
+ const dimensions = getBasicDimensions(vseed);
4415
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4416
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4417
+ const encoding = {};
4418
+ if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
4419
+ else bar_generateDefaultDimensionEncoding(dimensions, encoding);
4420
+ if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
4421
+ else bar_generateDefaultMeasureEncoding(measures, encoding);
4379
4422
  return {
4380
4423
  ...advancedVSeed,
4381
- encoding: mergedEncoding
4424
+ encoding
4382
4425
  };
4383
4426
  };
4427
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4428
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
4429
+ encoding.x = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4430
+ };
4431
+ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4432
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4433
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
4434
+ encoding.y = uniqueDimIds.slice(0, 1);
4435
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4436
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4437
+ encoding.tooltip = uniqueDimIds;
4438
+ encoding.label = [];
4439
+ encoding.row = [];
4440
+ encoding.column = [];
4441
+ };
4442
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4443
+ encoding.tooltip = measures.map((item)=>item.id);
4444
+ encoding.x = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4445
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4446
+ if (color.length > 0) encoding.color = color;
4447
+ return encoding;
4448
+ };
4449
+ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4450
+ encoding.y = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4451
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4452
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4453
+ if (0 === encoding.y.length) encoding.y = [
4454
+ dimensions[0].id
4455
+ ];
4456
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4457
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4458
+ };
4384
4459
  const sortYBandAxis = (advancedVSeed, context)=>{
4385
4460
  const result = {
4386
4461
  ...advancedVSeed
@@ -4399,9 +4474,9 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4399
4474
  };
4400
4475
  const barAdvancedPipeline = [
4401
4476
  initAdvancedVSeed_initAdvancedVSeed,
4402
- autoMeasures_autoMeasures,
4403
- autoDimensions_autoDimensions,
4404
4477
  encodingForBar,
4478
+ buildMeasures,
4479
+ autoDimensions_autoDimensions,
4405
4480
  pivotAdapter([
4406
4481
  reshapeWithEncoding
4407
4482
  ], [
@@ -4752,7 +4827,7 @@ const registerBar = ()=>{
4752
4827
  };
4753
4828
  const barParallelAdvancedPipeline = [
4754
4829
  initAdvancedVSeed_initAdvancedVSeed,
4755
- autoMeasures_autoMeasures,
4830
+ buildMeasures,
4756
4831
  autoDimensions_autoDimensions,
4757
4832
  encodingForBar,
4758
4833
  pivotAdapter([
@@ -4848,7 +4923,7 @@ const registerBarParallel = ()=>{
4848
4923
  };
4849
4924
  const barPercentAdvancedPipeline = [
4850
4925
  initAdvancedVSeed_initAdvancedVSeed,
4851
- autoMeasures_autoMeasures,
4926
+ buildMeasures,
4852
4927
  autoDimensions_autoDimensions,
4853
4928
  encodingForBar,
4854
4929
  pivotAdapter([
@@ -4919,9 +4994,9 @@ const registerBarPercent = ()=>{
4919
4994
  };
4920
4995
  const areaAdvancedPipeline = [
4921
4996
  initAdvancedVSeed_initAdvancedVSeed,
4922
- autoMeasures_autoMeasures,
4923
- autoDimensions_autoDimensions,
4924
4997
  encodingForColumn,
4998
+ buildMeasures,
4999
+ autoDimensions_autoDimensions,
4925
5000
  pivotAdapter([
4926
5001
  reshapeWithEncoding
4927
5002
  ], [
@@ -5077,9 +5152,9 @@ const registerArea = ()=>{
5077
5152
  };
5078
5153
  const areaPercentAdvancedPipeline = [
5079
5154
  initAdvancedVSeed_initAdvancedVSeed,
5080
- autoMeasures_autoMeasures,
5081
- autoDimensions_autoDimensions,
5082
5155
  encodingForColumn,
5156
+ buildMeasures,
5157
+ autoDimensions_autoDimensions,
5083
5158
  pivotAdapter([
5084
5159
  reshapeWithEncoding
5085
5160
  ], [
@@ -5153,131 +5228,148 @@ const registerAreaPercent = ()=>{
5153
5228
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5154
5229
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5155
5230
  };
5156
- const autoScatterMeasures = (advancedVSeed, context)=>{
5157
- const result = {
5158
- ...advancedVSeed
5231
+ const encodingForScatter = (advancedVSeed, context)=>{
5232
+ const { vseed } = context;
5233
+ const { measures: vseedMeasures = [] } = vseed;
5234
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5235
+ const dimensions = getBasicDimensions(vseed);
5236
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5237
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5238
+ const encoding = {};
5239
+ if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
5240
+ else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
5241
+ if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
5242
+ else scatter_generateDefaultMeasureEncoding(measures, encoding);
5243
+ return {
5244
+ ...advancedVSeed,
5245
+ encoding
5159
5246
  };
5247
+ };
5248
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5249
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
5250
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5251
+ };
5252
+ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5253
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5254
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensionsWithoutMeasureName.map((d)=>d.id));
5255
+ encoding.color = uniqueDimIds.slice(0);
5256
+ encoding.detail = uniqueDimIds.slice(0);
5257
+ encoding.tooltip = uniqueDimIds;
5258
+ encoding.label = [];
5259
+ encoding.row = [];
5260
+ encoding.column = [];
5261
+ };
5262
+ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5263
+ encoding.tooltip = measures.map((item)=>item.id);
5264
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5265
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5266
+ if (color.length > 0) encoding.color = color;
5267
+ };
5268
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5269
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5270
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5271
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5272
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5273
+ };
5274
+ const buildMeasuresForScatter = (advancedVSeed, context)=>{
5160
5275
  const { vseed } = context;
5161
- const { dataset, scatterMeasures, measures } = vseed;
5162
- if (!dataset) throw new Error('dataset is required');
5163
- if (0 === dataset.length) return result;
5164
- if (scatterMeasures) {
5165
- result.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5166
- return result;
5276
+ if (isMeasureTreeWithChildren(vseed)) {
5277
+ advancedVSeed.measures = vseed.measures;
5278
+ return advancedVSeed;
5167
5279
  }
5168
- if (measures && measureDepth(measures) > 1) {
5169
- result.measures = measures;
5170
- return result;
5280
+ if (isMeasureTreeWithParentId(vseed)) {
5281
+ advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5282
+ return advancedVSeed;
5171
5283
  }
5172
- const top100dataset = dataset.slice(0, 100);
5173
- const sample = top100dataset.reduce((prev, cur)=>({
5174
- ...prev,
5175
- ...cur
5176
- }), {});
5177
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5178
- '',
5179
- null,
5180
- void 0
5181
- ].includes(key)).map((measure)=>({
5182
- id: measure,
5183
- alias: measure
5184
- }));
5185
- if (0 === newMeasures.length) result.measures = [];
5186
- else if (1 === newMeasures.length) result.measures = [
5187
- {
5188
- id: 'primary',
5189
- alias: 'primary',
5190
- children: newMeasures
5191
- }
5192
- ];
5193
- else if (newMeasures.length > 1) result.measures = [
5194
- {
5195
- id: 'primary',
5196
- alias: 'primary',
5197
- children: newMeasures.slice(0, 1)
5198
- },
5284
+ const basicMeasures = getBasicMeasures(vseed);
5285
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5286
+ advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5287
+ return advancedVSeed;
5288
+ };
5289
+ const basicMeasuresToScatterMeasures = (basicMeasures)=>{
5290
+ const yMeasures = [];
5291
+ const xMeasures = [];
5292
+ for(let index = 0; index < basicMeasures.length; index++){
5293
+ const item = basicMeasures[index];
5294
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5295
+ item.encoding
5296
+ ];
5297
+ const isYAxis = encoding.includes('yAxis');
5298
+ const isXAxis = encoding.includes('xAxis');
5299
+ if (isYAxis) yMeasures.push(item);
5300
+ else if (isXAxis) xMeasures.push(item);
5301
+ else if (0 === index) yMeasures.push(item);
5302
+ else xMeasures.push(item);
5303
+ }
5304
+ return [
5199
5305
  {
5200
- id: 'secondary',
5201
- alias: 'secondary',
5202
- children: newMeasures.slice(1)
5306
+ id: 'scatterMeasures',
5307
+ xMeasures,
5308
+ yMeasures
5203
5309
  }
5204
5310
  ];
5205
- return result;
5206
5311
  };
5207
5312
  const scatterMeasuresToMeasureTree = (scatterMeasures)=>{
5208
5313
  const measureTree = scatterMeasures.map((item, index)=>{
5209
- const { xMeasures, yMeasures } = item;
5314
+ const { id, xMeasures, yMeasures } = item;
5210
5315
  const groupChildren = [];
5211
- let id = '';
5316
+ let groupId = `${id}-`;
5212
5317
  if (xMeasures) {
5213
- const arrXMeasures = Array.isArray(xMeasures) ? xMeasures : [
5318
+ const arrPrimaryMeasures = Array.isArray(xMeasures) ? xMeasures : [
5214
5319
  xMeasures
5215
5320
  ];
5216
- const alias = arrXMeasures.map((item)=>item.alias || item.id).toString();
5217
- id += alias;
5321
+ const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5322
+ groupId += alias;
5218
5323
  groupChildren.push({
5219
5324
  id: `${index}-x`,
5220
- alias: arrXMeasures.map((item)=>item.alias || item.id).toString(),
5221
- children: arrXMeasures
5325
+ alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
5326
+ children: arrPrimaryMeasures
5222
5327
  });
5223
5328
  }
5224
5329
  if (yMeasures) {
5225
- const arrYMeasures = Array.isArray(yMeasures) ? yMeasures : [
5330
+ const arrSecondaryMeasures = Array.isArray(yMeasures) ? yMeasures : [
5226
5331
  yMeasures
5227
5332
  ];
5228
- const alias = arrYMeasures.map((item)=>item.alias || item.id).toString();
5229
- id += alias;
5333
+ const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5334
+ groupId += alias;
5230
5335
  groupChildren.push({
5231
5336
  id: `${index}-y`,
5232
- alias: arrYMeasures.map((item)=>item.alias || item.id).toString(),
5233
- children: arrYMeasures
5337
+ alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
5338
+ children: arrSecondaryMeasures
5234
5339
  });
5235
5340
  }
5236
5341
  return {
5237
- id,
5238
- alias: id,
5342
+ id: groupId,
5343
+ alias: groupId,
5239
5344
  children: groupChildren
5240
5345
  };
5241
5346
  });
5242
5347
  if (1 === scatterMeasures.length) return measureTree[0].children || [];
5243
5348
  return measureTree;
5244
5349
  };
5245
- const encodingForScatter = (advancedVSeed, context)=>{
5246
- const { vseed } = context;
5247
- const { dimensions } = advancedVSeed;
5248
- if (!dimensions) return advancedVSeed;
5249
- const encoding = vseed.encoding;
5250
- if (encoding) {
5251
- const detail = encoding.detail || [];
5252
- const color = encoding.color || [
5253
- (dimensions[1] || dimensions[0]).id
5350
+ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5351
+ const scatterMeasures = [];
5352
+ measures.forEach((item)=>{
5353
+ if (!item.parentId) return;
5354
+ if (!scatterMeasures.find((d)=>d.id === item.parentId)) scatterMeasures.push({
5355
+ id: item.parentId,
5356
+ yMeasures: [],
5357
+ xMeasures: []
5358
+ });
5359
+ const scatterChart = scatterMeasures.find((d)=>d.id === item.parentId);
5360
+ if (!scatterChart || !Array.isArray(scatterChart.yMeasures) || !Array.isArray(scatterChart.xMeasures)) return;
5361
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5362
+ item.encoding
5254
5363
  ];
5255
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
5256
- ...color,
5257
- ...detail
5258
- ]) : detail;
5259
- return {
5260
- ...advancedVSeed,
5261
- encoding: {
5262
- ...encoding,
5263
- color,
5264
- detail: mergedDetail
5265
- }
5266
- };
5267
- }
5268
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5269
- const mergedEncoding = {
5270
- color: dimensions.slice(0).map((item)=>item.id),
5271
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5272
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5273
- label: [],
5274
- row: [],
5275
- column: []
5276
- };
5277
- return {
5278
- ...advancedVSeed,
5279
- encoding: mergedEncoding
5280
- };
5364
+ const isX = encoding.includes('xAxis');
5365
+ const isY = encoding.includes('yAxis');
5366
+ const isEmpty = !encoding.length;
5367
+ if (isY) scatterChart.yMeasures.push(item);
5368
+ else if (isX) scatterChart.xMeasures.push(item);
5369
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5370
+ else scatterChart.xMeasures.push(item);
5371
+ });
5372
+ return scatterMeasuresToMeasureTree(scatterMeasures);
5281
5373
  };
5282
5374
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5283
5375
  const result = {
@@ -5295,18 +5387,20 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5295
5387
  const xMeasures = measures[0];
5296
5388
  const yMeasures = measures[1] || xMeasures;
5297
5389
  if (xMeasures && xMeasures.children) {
5298
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5390
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, (0, external_remeda_namespaceObject.uniqueBy)(dimensions, (d)=>d.id), (0, external_remeda_namespaceObject.uniqueBy)(xMeasures.children, (d)=>d.id), encoding, {
5299
5391
  foldMeasureValue: FoldXMeasureValue,
5300
- colorItemAsId: true
5392
+ colorItemAsId: true,
5393
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5301
5394
  });
5302
5395
  datasets.push(newDataset);
5303
5396
  foldInfoList.push(foldInfo);
5304
5397
  unfoldInfoList.push(unfoldInfo);
5305
5398
  }
5306
5399
  if (yMeasures && yMeasures.children) {
5307
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5400
+ const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], (0, external_remeda_namespaceObject.uniqueBy)(dimensions, (d)=>d.id), (0, external_remeda_namespaceObject.uniqueBy)(yMeasures.children, (d)=>d.id), encoding, {
5308
5401
  foldMeasureValue: FoldYMeasureValue,
5309
- colorItemAsId: true
5402
+ colorItemAsId: true,
5403
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5310
5404
  });
5311
5405
  datasets[0] = newDataset;
5312
5406
  foldInfoList.push(foldInfo);
@@ -5361,7 +5455,8 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5361
5455
  if (xMeasures && xMeasures.children) {
5362
5456
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5363
5457
  foldMeasureValue: `${FoldXMeasureValue}${index}`,
5364
- colorItemAsId: true
5458
+ colorItemAsId: true,
5459
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5365
5460
  });
5366
5461
  datasets.push(newDataset);
5367
5462
  foldInfoList.push(foldInfo);
@@ -5370,7 +5465,8 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5370
5465
  if (yMeasures && yMeasures.children) {
5371
5466
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, yMeasures.children, encoding, {
5372
5467
  foldMeasureValue: `${FoldYMeasureValue}${index}`,
5373
- colorItemAsId: true
5468
+ colorItemAsId: true,
5469
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5374
5470
  });
5375
5471
  datasets.push(newDataset);
5376
5472
  foldInfoList.push(foldInfo);
@@ -5405,9 +5501,9 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5405
5501
  };
5406
5502
  const scatterAdvancedPipeline = [
5407
5503
  initAdvancedVSeed_initAdvancedVSeed,
5408
- autoScatterMeasures,
5409
- autoDimensions_autoDimensions,
5410
5504
  encodingForScatter,
5505
+ buildMeasuresForScatter,
5506
+ autoDimensions_autoDimensions,
5411
5507
  pivotAdapter([
5412
5508
  reshapeWithScatterEncoding
5413
5509
  ], [
@@ -5552,68 +5648,104 @@ const registerScatter = ()=>{
5552
5648
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5553
5649
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5554
5650
  };
5555
- const autoDualMeasures = (advancedVSeed, context)=>{
5556
- const result = {
5557
- ...advancedVSeed
5651
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5652
+ const { vseed } = context;
5653
+ const { measures: vseedMeasures = [] } = vseed;
5654
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5655
+ const dimensions = getBasicDimensions(vseed);
5656
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5657
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5658
+ const encoding = {};
5659
+ if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
5660
+ else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
5661
+ if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
5662
+ else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
5663
+ return {
5664
+ ...advancedVSeed,
5665
+ encoding
5558
5666
  };
5667
+ };
5668
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5669
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
5670
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5671
+ };
5672
+ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5673
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5674
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
5675
+ encoding.x = uniqueDimIds.slice(0, 1);
5676
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5677
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5678
+ encoding.tooltip = uniqueDimIds;
5679
+ encoding.label = [];
5680
+ encoding.row = [];
5681
+ encoding.column = [];
5682
+ };
5683
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5684
+ encoding.tooltip = measures.map((item)=>item.id);
5685
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5686
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5687
+ if (color.length > 0) encoding.color = color;
5688
+ return encoding;
5689
+ };
5690
+ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5691
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5692
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5693
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5694
+ if (0 === encoding.x.length) encoding.x = [
5695
+ dimensions[0].id
5696
+ ];
5697
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5698
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5699
+ };
5700
+ const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5559
5701
  const { vseed } = context;
5560
- const { dataset, dualMeasures, measures } = vseed;
5561
- if (!dataset) throw new Error('dataset is required');
5562
- if (0 === dataset.length) return result;
5563
- if (dualMeasures) {
5564
- result.measures = dualMeasuresToMeasureTree(dualMeasures);
5565
- return result;
5702
+ if (isMeasureTreeWithChildren(vseed)) {
5703
+ advancedVSeed.measures = vseed.measures;
5704
+ return advancedVSeed;
5566
5705
  }
5567
- if (measures && measureDepth(measures) > 1) {
5568
- result.measures = measures;
5569
- return result;
5706
+ if (isMeasureTreeWithParentId(vseed)) {
5707
+ advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5708
+ return advancedVSeed;
5570
5709
  }
5571
- const top100dataset = dataset.slice(0, 100);
5572
- const sample = top100dataset.reduce((prev, cur)=>({
5573
- ...prev,
5574
- ...cur
5575
- }), {});
5576
- const newMeasures = measures || Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
5577
- '',
5578
- null,
5579
- void 0
5580
- ].includes(key)).map((measure)=>({
5581
- id: measure,
5582
- alias: measure
5583
- }));
5584
- if (0 === newMeasures.length) result.measures = [];
5585
- else if (1 === newMeasures.length) result.measures = [
5586
- {
5587
- id: 'primary',
5588
- alias: 'primary',
5589
- children: newMeasures
5590
- }
5591
- ];
5592
- else if (newMeasures.length > 1) result.measures = [
5593
- {
5594
- id: 'primary',
5595
- alias: 'primary',
5596
- children: newMeasures.slice(0, 1)
5597
- },
5710
+ const basicMeasures = getBasicMeasures(vseed);
5711
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5712
+ advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5713
+ return advancedVSeed;
5714
+ };
5715
+ const basicMeasuresToDualMeasures = (basicMeasures)=>{
5716
+ const primaryMeasures = [];
5717
+ const secondaryMeasures = [];
5718
+ for(let index = 0; index < basicMeasures.length; index++){
5719
+ const item = basicMeasures[index];
5720
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5721
+ item.encoding
5722
+ ];
5723
+ const isPrimaryYAxis = encoding.includes('primaryYAxis');
5724
+ const isSecondaryYAxis = encoding.includes('secondaryYAxis');
5725
+ if (isPrimaryYAxis) primaryMeasures.push(item);
5726
+ else if (isSecondaryYAxis) secondaryMeasures.push(item);
5727
+ else if (0 === index) primaryMeasures.push(item);
5728
+ else secondaryMeasures.push(item);
5729
+ }
5730
+ return [
5598
5731
  {
5599
- id: 'secondary',
5600
- alias: 'secondary',
5601
- children: newMeasures.slice(1)
5732
+ id: 'dualMeasures',
5733
+ primaryMeasures,
5734
+ secondaryMeasures
5602
5735
  }
5603
5736
  ];
5604
- return result;
5605
5737
  };
5606
5738
  const dualMeasuresToMeasureTree = (dualMeasures)=>{
5607
5739
  const measureTree = dualMeasures.map((item, index)=>{
5608
- const { primaryMeasures, secondaryMeasures } = item;
5740
+ const { id, primaryMeasures, secondaryMeasures } = item;
5609
5741
  const groupChildren = [];
5610
- let id = '';
5742
+ let groupId = `${id}-`;
5611
5743
  if (primaryMeasures) {
5612
5744
  const arrPrimaryMeasures = Array.isArray(primaryMeasures) ? primaryMeasures : [
5613
5745
  primaryMeasures
5614
5746
  ];
5615
5747
  const alias = arrPrimaryMeasures.map((item)=>item.alias || item.id).toString();
5616
- id += alias;
5748
+ groupId += alias;
5617
5749
  groupChildren.push({
5618
5750
  id: `${index}-primary`,
5619
5751
  alias: arrPrimaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5625,7 +5757,7 @@ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5625
5757
  secondaryMeasures
5626
5758
  ];
5627
5759
  const alias = arrSecondaryMeasures.map((item)=>item.alias || item.id).toString();
5628
- id += alias;
5760
+ groupId += alias;
5629
5761
  groupChildren.push({
5630
5762
  id: `${index}-secondary`,
5631
5763
  alias: arrSecondaryMeasures.map((item)=>item.alias || item.id).toString(),
@@ -5633,54 +5765,37 @@ const dualMeasuresToMeasureTree = (dualMeasures)=>{
5633
5765
  });
5634
5766
  }
5635
5767
  return {
5636
- id,
5637
- alias: id,
5768
+ id: groupId,
5769
+ alias: groupId,
5638
5770
  children: groupChildren
5639
5771
  };
5640
5772
  });
5641
5773
  if (1 === dualMeasures.length) return measureTree[0].children || [];
5642
5774
  return measureTree;
5643
5775
  };
5644
- const encodingForDualAxis = (advancedVSeed, context)=>{
5645
- const { vseed } = context;
5646
- const { dimensions } = advancedVSeed;
5647
- if (!dimensions) return advancedVSeed;
5648
- const encoding = vseed.encoding;
5649
- if (encoding) {
5650
- const x = encoding.x || [
5651
- dimensions[0].id
5652
- ];
5653
- const color = encoding.color || [
5654
- (dimensions[1] || dimensions[0]).id
5776
+ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
5777
+ const dualMeasures = [];
5778
+ measures.forEach((item)=>{
5779
+ if (!item.parentId) return;
5780
+ if (!dualMeasures.find((d)=>d.id === item.parentId)) dualMeasures.push({
5781
+ id: item.parentId,
5782
+ primaryMeasures: [],
5783
+ secondaryMeasures: []
5784
+ });
5785
+ const dualChart = dualMeasures.find((d)=>d.id === item.parentId);
5786
+ if (!dualChart || !Array.isArray(dualChart.primaryMeasures) || !Array.isArray(dualChart.secondaryMeasures)) return;
5787
+ const encoding = Array.isArray(item.encoding) ? item.encoding : [
5788
+ item.encoding
5655
5789
  ];
5656
- const detail = encoding.detail || [];
5657
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
5658
- ...color,
5659
- ...detail
5660
- ]) : detail;
5661
- return {
5662
- ...advancedVSeed,
5663
- encoding: {
5664
- ...encoding,
5665
- x,
5666
- color,
5667
- detail: mergedDetail
5668
- }
5669
- };
5670
- }
5671
- const mergedEncoding = {
5672
- x: dimensions.slice(0, 1).map((item)=>item.id),
5673
- color: dimensions.slice(1).map((item)=>item.id),
5674
- detail: dimensions.slice(1).map((item)=>item.id),
5675
- tooltip: dimensions.map((item)=>item.id),
5676
- label: [],
5677
- row: [],
5678
- column: []
5679
- };
5680
- return {
5681
- ...advancedVSeed,
5682
- encoding: mergedEncoding
5683
- };
5790
+ const isPrimary = encoding.includes('primaryYAxis');
5791
+ const isSecondary = encoding.includes('secondaryYAxis');
5792
+ const isEmpty = !item.encoding;
5793
+ if (isPrimary) dualChart.primaryMeasures.push(item);
5794
+ else if (isSecondary) dualChart.secondaryMeasures.push(item);
5795
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5796
+ else dualChart.secondaryMeasures.push(item);
5797
+ });
5798
+ return dualMeasuresToMeasureTree(dualMeasures);
5684
5799
  };
5685
5800
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5686
5801
  const result = {
@@ -5699,7 +5814,8 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5699
5814
  const secondaryMeasures = measures[1] || [];
5700
5815
  if (primaryMeasures && primaryMeasures.children) {
5701
5816
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5702
- foldMeasureValue: FoldPrimaryMeasureValue
5817
+ foldMeasureValue: FoldPrimaryMeasureValue,
5818
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5703
5819
  });
5704
5820
  datasets.push(newDataset);
5705
5821
  foldInfoList.push(foldInfo);
@@ -5707,7 +5823,8 @@ const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5707
5823
  }
5708
5824
  if (secondaryMeasures && secondaryMeasures.children) {
5709
5825
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5710
- foldMeasureValue: FoldSecondaryMeasureValue
5826
+ foldMeasureValue: FoldSecondaryMeasureValue,
5827
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5711
5828
  });
5712
5829
  datasets.push(newDataset);
5713
5830
  foldInfoList.push(foldInfo);
@@ -5761,7 +5878,8 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5761
5878
  const secondaryMeasures = measures[1] || [];
5762
5879
  if (primaryMeasures && primaryMeasures.children) {
5763
5880
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
5764
- foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`
5881
+ foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
5882
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5765
5883
  });
5766
5884
  datasets.push(newDataset);
5767
5885
  foldInfoList.push(foldInfo);
@@ -5769,7 +5887,8 @@ const pivotReshapeWithDualEncoding = (advancedVSeed, context)=>{
5769
5887
  }
5770
5888
  if (secondaryMeasures && secondaryMeasures.children) {
5771
5889
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, secondaryMeasures.children, encoding, {
5772
- foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`
5890
+ foldMeasureValue: `${FoldSecondaryMeasureValue}${index}`,
5891
+ colorMeasureId: getColorMeasureId(advancedVSeed)
5773
5892
  });
5774
5893
  datasets.push(newDataset);
5775
5894
  foldInfoList.push(foldInfo);
@@ -5827,9 +5946,9 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5827
5946
  };
5828
5947
  const dualAxisAdvancedPipeline = [
5829
5948
  initAdvancedVSeed_initAdvancedVSeed,
5830
- autoDualMeasures,
5831
- autoDimensions_autoDimensions,
5832
5949
  encodingForDualAxis,
5950
+ buildMeasuresForDualAxis,
5951
+ autoDimensions_autoDimensions,
5833
5952
  pivotAdapter([
5834
5953
  reshapeWithDualEncoding
5835
5954
  ], [
@@ -5914,7 +6033,7 @@ const initDualAxisSecondary = (spec, context)=>{
5914
6033
  result.direction = 'vertical';
5915
6034
  result.xField = unfoldInfo.encodingX;
5916
6035
  if (foldInfoList?.[1]) result.yField = foldInfoList[1].measureValue;
5917
- result.seriesField = unfoldInfo.encodingColorId;
6036
+ result.seriesField = isLinearColor(advancedVSeed) ? unfoldInfo.encodingDetail : unfoldInfo.encodingColorId;
5918
6037
  result.animation = true;
5919
6038
  return result;
5920
6039
  };
@@ -6540,6 +6659,37 @@ const yLinearSecondary = (spec, context)=>{
6540
6659
  ];
6541
6660
  return result;
6542
6661
  };
6662
+ const linearColorForDualAxis = (spec, context)=>{
6663
+ const result = {
6664
+ ...spec
6665
+ };
6666
+ const { advancedVSeed } = context;
6667
+ const { datasetReshapeInfo, chartType } = advancedVSeed;
6668
+ const { unfoldInfo, id } = datasetReshapeInfo[0];
6669
+ const baseConfig = advancedVSeed.config[chartType];
6670
+ if (!baseConfig || !baseConfig.color) return result;
6671
+ const { color } = baseConfig;
6672
+ const { colorScheme, linearColorScheme } = color;
6673
+ result.color = {
6674
+ type: 'linear',
6675
+ range: linearColorScheme || colorScheme || [],
6676
+ domain: [
6677
+ {
6678
+ dataId: `${id}-primary-dataset`,
6679
+ fields: [
6680
+ unfoldInfo.encodingColor
6681
+ ]
6682
+ },
6683
+ {
6684
+ dataId: `${id}-secondary-dataset`,
6685
+ fields: [
6686
+ unfoldInfo.encodingColor
6687
+ ]
6688
+ }
6689
+ ]
6690
+ };
6691
+ return result;
6692
+ };
6543
6693
  const dualAxis = [
6544
6694
  seriesDualAxis([
6545
6695
  initDualAxisPrimary,
@@ -6548,11 +6698,11 @@ const dualAxis = [
6548
6698
  labelPrimary,
6549
6699
  tooltipPrimary,
6550
6700
  progressive,
6551
- barStyle_barStyle,
6552
- pointStyle_pointStyle,
6701
+ colorBarStyleFill(barStyle_barStyle),
6702
+ colorPointStyleFill(pointStyle_pointStyle),
6553
6703
  pointStateDimensionHover,
6554
- lineStyle_lineStyle,
6555
- areaStyle_areaStyle
6704
+ colorLineStyleFill(lineStyle_lineStyle),
6705
+ colorAreaStyleFill(areaStyle_areaStyle)
6556
6706
  ], [
6557
6707
  initDualAxisSecondary,
6558
6708
  dualChartTypeSecondary,
@@ -6560,18 +6710,18 @@ const dualAxis = [
6560
6710
  labelSecondary,
6561
6711
  tooltipSecondary,
6562
6712
  progressive,
6563
- barStyle_barStyle,
6564
- pointStyle_pointStyle,
6713
+ colorBarStyleFill(barStyle_barStyle),
6714
+ colorPointStyleFill(pointStyle_pointStyle),
6565
6715
  pointStateDimensionHover,
6566
- lineStyle_lineStyle,
6567
- areaStyle_areaStyle
6716
+ colorLineStyleFill(lineStyle_lineStyle),
6717
+ colorAreaStyleFill(areaStyle_areaStyle)
6568
6718
  ]),
6569
6719
  xBand,
6570
6720
  yLinearPrimary,
6571
6721
  yLinearSecondary,
6572
- color_color,
6722
+ colorAdapter(color_color, linearColorForDualAxis),
6723
+ colorAdapter(discreteLegend, colorLegend),
6573
6724
  background_backgroundColor,
6574
- discreteLegend,
6575
6725
  verticalCrosshairRect,
6576
6726
  annotationPoint_annotationPoint,
6577
6727
  annotationVerticalLine_annotationVerticalLine,
@@ -6591,11 +6741,11 @@ const pivotDualAxis = [
6591
6741
  labelPrimary,
6592
6742
  tooltipPrimary,
6593
6743
  progressive,
6594
- barStyle_barStyle,
6595
- pointStyle_pointStyle,
6744
+ colorBarStyleFill(barStyle_barStyle),
6745
+ colorPointStyleFill(pointStyle_pointStyle),
6596
6746
  pointStateDimensionHover,
6597
- lineStyle_lineStyle,
6598
- areaStyle_areaStyle
6747
+ colorLineStyleFill(lineStyle_lineStyle),
6748
+ colorAreaStyleFill(areaStyle_areaStyle)
6599
6749
  ], [
6600
6750
  initDualAxisSecondary,
6601
6751
  dualChartTypeSecondary,
@@ -6603,16 +6753,16 @@ const pivotDualAxis = [
6603
6753
  labelSecondary,
6604
6754
  tooltipSecondary,
6605
6755
  progressive,
6606
- barStyle_barStyle,
6607
- pointStyle_pointStyle,
6756
+ colorBarStyleFill(barStyle_barStyle),
6757
+ colorPointStyleFill(pointStyle_pointStyle),
6608
6758
  pointStateDimensionHover,
6609
- lineStyle_lineStyle,
6610
- areaStyle_areaStyle
6759
+ colorLineStyleFill(lineStyle_lineStyle),
6760
+ colorAreaStyleFill(areaStyle_areaStyle)
6611
6761
  ]),
6612
6762
  xBand,
6613
6763
  yLinearPrimary,
6614
6764
  yLinearSecondary,
6615
- color_color,
6765
+ colorAdapter(color_color, linearColor),
6616
6766
  background_backgroundColor,
6617
6767
  verticalCrosshairRect,
6618
6768
  annotationPoint_annotationPoint,
@@ -6622,7 +6772,7 @@ const pivotDualAxis = [
6622
6772
  ]),
6623
6773
  pivotRowDimensions,
6624
6774
  pivotColumnDimensions,
6625
- pivotDiscreteLegend
6775
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
6626
6776
  ];
6627
6777
  const dualAxisSpecPipeline = [
6628
6778
  pivotAdapter_pivotAdapter(dualAxis, pivotDualAxis)
@@ -6633,33 +6783,51 @@ const registerDualAxis = ()=>{
6633
6783
  };
6634
6784
  const encodingForPie = (advancedVSeed, context)=>{
6635
6785
  const { vseed } = context;
6636
- const { dimensions } = advancedVSeed;
6637
- if (!dimensions) return advancedVSeed;
6638
- const encoding = vseed.encoding;
6639
- if (encoding) return {
6640
- ...advancedVSeed,
6641
- encoding: {
6642
- ...encoding
6643
- }
6644
- };
6645
- const mergedEncoding = {
6646
- color: dimensions.slice(0).map((item)=>item.id),
6647
- detail: dimensions.slice(0).map((item)=>item.id),
6648
- tooltip: dimensions.map((item)=>item.id),
6649
- label: [],
6650
- row: [],
6651
- column: []
6652
- };
6786
+ const { measures: vseedMeasures = [] } = vseed;
6787
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6788
+ const dimensions = getBasicDimensions(vseed);
6789
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6790
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
6791
+ const encoding = {};
6792
+ if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
6793
+ else pie_generateDefaultDimensionEncoding(dimensions, encoding);
6794
+ if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
6795
+ else pie_generateDefaultMeasureEncoding(measures, encoding);
6653
6796
  return {
6654
6797
  ...advancedVSeed,
6655
- encoding: mergedEncoding
6656
- };
6798
+ encoding
6799
+ };
6800
+ };
6801
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
6802
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
6803
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6804
+ };
6805
+ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6806
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
6807
+ encoding.color = uniqueDimIds.slice(0);
6808
+ encoding.detail = uniqueDimIds.slice(0);
6809
+ encoding.tooltip = uniqueDimIds;
6810
+ encoding.label = [];
6811
+ encoding.row = [];
6812
+ encoding.column = [];
6813
+ };
6814
+ const pie_generateMeasureEncoding = (measures, encoding)=>{
6815
+ encoding.tooltip = measures.map((item)=>item.id);
6816
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6817
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6818
+ if (color.length > 0) encoding.color = color;
6819
+ };
6820
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6821
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6822
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6823
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
6824
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6657
6825
  };
6658
6826
  const pieAdvancedPipeline = [
6659
6827
  initAdvancedVSeed_initAdvancedVSeed,
6660
- autoMeasures_autoMeasures,
6661
- autoDimensions_autoDimensions,
6662
6828
  encodingForPie,
6829
+ buildMeasures,
6830
+ autoDimensions_autoDimensions,
6663
6831
  pivotAdapter([
6664
6832
  reshapeWithEncoding
6665
6833
  ], [
@@ -6748,7 +6916,7 @@ const registerPie = ()=>{
6748
6916
  };
6749
6917
  const donutAdvancedPipeline = [
6750
6918
  initAdvancedVSeed_initAdvancedVSeed,
6751
- autoMeasures_autoMeasures,
6919
+ buildMeasures,
6752
6920
  autoDimensions_autoDimensions,
6753
6921
  encodingForPie,
6754
6922
  pivotAdapter([
@@ -6838,51 +7006,57 @@ const registerDonut = ()=>{
6838
7006
  };
6839
7007
  const encodingForRose = (advancedVSeed, context)=>{
6840
7008
  const { vseed } = context;
6841
- const { dimensions } = advancedVSeed;
6842
- if (!dimensions) return advancedVSeed;
6843
- const encoding = vseed.encoding;
6844
- if (encoding) {
6845
- const angle = encoding.angle || [
6846
- dimensions[0].id
6847
- ];
6848
- const color = encoding.color || [
6849
- (dimensions[1] || dimensions[0]).id
6850
- ];
6851
- const detail = encoding.detail || [];
6852
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
6853
- ...color,
6854
- ...detail
6855
- ]) : detail;
6856
- return {
6857
- ...advancedVSeed,
6858
- encoding: {
6859
- ...encoding,
6860
- angle,
6861
- color,
6862
- detail: mergedDetail
6863
- }
6864
- };
6865
- }
6866
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6867
- const mergedEncoding = {
6868
- angle: dimensions.slice(0, 1).map((item)=>item.id),
6869
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6870
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6871
- tooltip: dimensions.map((item)=>item.id),
6872
- label: [],
6873
- row: [],
6874
- column: []
6875
- };
7009
+ const { measures: vseedMeasures = [] } = vseed;
7010
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7011
+ const dimensions = getBasicDimensions(vseed);
7012
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7013
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7014
+ const encoding = {};
7015
+ if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
7016
+ else rose_generateDefaultDimensionEncoding(dimensions, encoding);
7017
+ if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
7018
+ else rose_generateDefaultMeasureEncoding(measures, encoding);
6876
7019
  return {
6877
7020
  ...advancedVSeed,
6878
- encoding: mergedEncoding
7021
+ encoding
6879
7022
  };
6880
7023
  };
7024
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
7025
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7026
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7027
+ };
7028
+ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7029
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7030
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7031
+ encoding.angle = uniqueDimIds.slice(0, 1);
7032
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7033
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7034
+ encoding.tooltip = uniqueDimIds;
7035
+ encoding.label = [];
7036
+ encoding.row = [];
7037
+ encoding.column = [];
7038
+ };
7039
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
7040
+ encoding.tooltip = measures.map((item)=>item.id);
7041
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7042
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7043
+ if (color.length > 0) encoding.color = color;
7044
+ };
7045
+ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
7046
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7047
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7048
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7049
+ if (0 === encoding.angle.length) encoding.angle = [
7050
+ dimensions[0].id
7051
+ ];
7052
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7053
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7054
+ };
6881
7055
  const roseAdvancedPipeline = [
6882
7056
  initAdvancedVSeed_initAdvancedVSeed,
6883
- autoMeasures_autoMeasures,
6884
- autoDimensions_autoDimensions,
6885
7057
  encodingForRose,
7058
+ buildMeasures,
7059
+ autoDimensions_autoDimensions,
6886
7060
  pivotAdapter([
6887
7061
  reshapeWithEncoding
6888
7062
  ], [
@@ -7049,9 +7223,9 @@ const registerRose = ()=>{
7049
7223
  };
7050
7224
  const roseParallelAdvancedPipeline = [
7051
7225
  initAdvancedVSeed_initAdvancedVSeed,
7052
- autoMeasures_autoMeasures,
7053
- autoDimensions_autoDimensions,
7054
7226
  encodingForRose,
7227
+ buildMeasures,
7228
+ autoDimensions_autoDimensions,
7055
7229
  pivotAdapter([
7056
7230
  reshapeWithEncoding
7057
7231
  ], [
@@ -7157,50 +7331,57 @@ const registerRoseParallel = ()=>{
7157
7331
  };
7158
7332
  const encodingForRadar = (advancedVSeed, context)=>{
7159
7333
  const { vseed } = context;
7160
- const { dimensions } = advancedVSeed;
7161
- if (!dimensions) return advancedVSeed;
7162
- const encoding = vseed.encoding;
7163
- if (encoding) {
7164
- const angle = encoding.angle || [
7165
- dimensions[0].id
7166
- ];
7167
- const color = encoding.color || [
7168
- (dimensions[1] || dimensions[0]).id
7169
- ];
7170
- const detail = encoding.detail || [];
7171
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
7172
- ...color,
7173
- ...detail
7174
- ]) : detail;
7175
- return {
7176
- ...advancedVSeed,
7177
- encoding: {
7178
- ...encoding,
7179
- angle,
7180
- color,
7181
- detail: mergedDetail
7182
- }
7183
- };
7184
- }
7185
- const mergedEncoding = {
7186
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7187
- color: dimensions.slice(1).map((item)=>item.id),
7188
- detail: dimensions.slice(1).map((item)=>item.id),
7189
- tooltip: dimensions.map((item)=>item.id),
7190
- label: [],
7191
- row: [],
7192
- column: []
7193
- };
7334
+ const { measures: vseedMeasures = [] } = vseed;
7335
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7336
+ const dimensions = getBasicDimensions(vseed);
7337
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7338
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7339
+ const encoding = {};
7340
+ if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
7341
+ else radar_generateDefaultDimensionEncoding(dimensions, encoding);
7342
+ if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
7343
+ else radar_generateDefaultMeasureEncoding(measures, encoding);
7194
7344
  return {
7195
7345
  ...advancedVSeed,
7196
- encoding: mergedEncoding
7346
+ encoding
7197
7347
  };
7198
7348
  };
7349
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7350
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7351
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7352
+ };
7353
+ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7354
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7355
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7356
+ encoding.angle = uniqueDimIds.slice(0, 1);
7357
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7358
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7359
+ encoding.tooltip = uniqueDimIds;
7360
+ encoding.label = [];
7361
+ encoding.row = [];
7362
+ encoding.column = [];
7363
+ };
7364
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7365
+ encoding.tooltip = measures.map((item)=>item.id);
7366
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7367
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7368
+ if (color.length > 0) encoding.color = color;
7369
+ };
7370
+ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7371
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7372
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7373
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7374
+ if (0 === encoding.angle.length) encoding.angle = [
7375
+ dimensions[0].id
7376
+ ];
7377
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7378
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7379
+ };
7199
7380
  const radarAdvancedPipeline = [
7200
7381
  initAdvancedVSeed_initAdvancedVSeed,
7201
- autoMeasures_autoMeasures,
7202
- autoDimensions_autoDimensions,
7203
7382
  encodingForRadar,
7383
+ buildMeasures,
7384
+ autoDimensions_autoDimensions,
7204
7385
  pivotAdapter([
7205
7386
  reshapeWithEncoding
7206
7387
  ], [
@@ -7336,33 +7517,51 @@ const registerRadar = ()=>{
7336
7517
  };
7337
7518
  const encodingForFunnel = (advancedVSeed, context)=>{
7338
7519
  const { vseed } = context;
7339
- const { dimensions } = advancedVSeed;
7340
- if (!dimensions) return advancedVSeed;
7341
- const encoding = vseed.encoding;
7342
- if (encoding) return {
7343
- ...advancedVSeed,
7344
- encoding: {
7345
- ...encoding
7346
- }
7347
- };
7348
- const mergedEncoding = {
7349
- color: dimensions.slice(0).map((item)=>item.id),
7350
- detail: dimensions.slice(0).map((item)=>item.id),
7351
- tooltip: dimensions.map((item)=>item.id),
7352
- label: [],
7353
- row: [],
7354
- column: []
7355
- };
7520
+ const { measures: vseedMeasures = [] } = vseed;
7521
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7522
+ const dimensions = getBasicDimensions(vseed);
7523
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7524
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7525
+ const encoding = {};
7526
+ if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
7527
+ else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
7528
+ if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
7529
+ else funnel_generateDefaultMeasureEncoding(measures, encoding);
7356
7530
  return {
7357
7531
  ...advancedVSeed,
7358
- encoding: mergedEncoding
7359
- };
7532
+ encoding
7533
+ };
7534
+ };
7535
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7536
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7537
+ encoding.size = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7538
+ };
7539
+ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7540
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7541
+ encoding.color = uniqueDimIds.slice(0);
7542
+ encoding.detail = uniqueDimIds.slice(0);
7543
+ encoding.tooltip = uniqueDimIds;
7544
+ encoding.label = [];
7545
+ encoding.row = [];
7546
+ encoding.column = [];
7547
+ };
7548
+ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7549
+ encoding.tooltip = measures.map((item)=>item.id);
7550
+ encoding.size = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7551
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7552
+ if (color.length > 0) encoding.color = color;
7553
+ };
7554
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7555
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7556
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7557
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7558
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7360
7559
  };
7361
7560
  const funnelAdvancedPipeline = [
7362
7561
  initAdvancedVSeed_initAdvancedVSeed,
7363
- autoMeasures_autoMeasures,
7364
- autoDimensions_autoDimensions,
7365
7562
  encodingForFunnel,
7563
+ buildMeasures,
7564
+ autoDimensions_autoDimensions,
7366
7565
  pivotAdapter([
7367
7566
  reshapeWithEncoding
7368
7567
  ], [
@@ -7455,45 +7654,61 @@ const registerFunnel = ()=>{
7455
7654
  };
7456
7655
  const encodingForHeatmap = (advancedVSeed, context)=>{
7457
7656
  const { vseed } = context;
7458
- const { dimensions } = advancedVSeed;
7459
- if (!dimensions) return advancedVSeed;
7460
- const encoding = vseed.encoding;
7461
- if (encoding) {
7462
- const x = encoding.x || [
7463
- dimensions[0].id
7464
- ];
7465
- const y = encoding.y || [
7466
- (dimensions[1] || dimensions[0]).id
7467
- ];
7468
- return {
7469
- ...advancedVSeed,
7470
- encoding: {
7471
- x,
7472
- y,
7473
- ...encoding
7474
- }
7475
- };
7476
- }
7477
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7478
- const mergedEncoding = {
7479
- x: dimensions.slice(0, 1).map((item)=>item.id),
7480
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7481
- color: dimensions.slice(0).map((item)=>item.id),
7482
- tooltip: dimensions.map((item)=>item.id),
7483
- label: [],
7484
- row: [],
7485
- column: []
7486
- };
7657
+ const { measures: vseedMeasures = [] } = vseed;
7658
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7659
+ const dimensions = getBasicDimensions(vseed);
7660
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7661
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7662
+ const encoding = {};
7663
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
7664
+ else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
7665
+ if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
7666
+ else heatmap_generateDefaultMeasureEncoding(measures, encoding);
7487
7667
  return {
7488
7668
  ...advancedVSeed,
7489
- encoding: mergedEncoding
7669
+ encoding
7490
7670
  };
7491
7671
  };
7672
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7673
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7674
+ encoding.color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7675
+ };
7676
+ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7677
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7678
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7679
+ encoding.x = uniqueDimIds.slice(0, 1);
7680
+ encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7681
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7682
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7683
+ encoding.tooltip = uniqueDimIds;
7684
+ encoding.label = [];
7685
+ encoding.row = [];
7686
+ encoding.column = [];
7687
+ };
7688
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7689
+ encoding.tooltip = measures.map((item)=>item.id);
7690
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7691
+ if (color.length > 0) encoding.color = color;
7692
+ return encoding;
7693
+ };
7694
+ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7695
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7696
+ encoding.y = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
7697
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7698
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7699
+ if (0 === encoding.x.length) encoding.x = [
7700
+ dimensions[0].id
7701
+ ];
7702
+ if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7703
+ else encoding.y = dimensions.slice(0).map((item)=>item.id);
7704
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7705
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7706
+ };
7492
7707
  const heatmapAdvancedPipeline = [
7493
7708
  initAdvancedVSeed_initAdvancedVSeed,
7494
- autoMeasures_autoMeasures,
7495
- autoDimensions_autoDimensions,
7496
7709
  encodingForHeatmap,
7710
+ buildMeasures,
7711
+ autoDimensions_autoDimensions,
7497
7712
  pivotAdapter([
7498
7713
  reshapeWithEncoding
7499
7714
  ], [
@@ -8314,7 +8529,18 @@ const zDimension = external_zod_namespaceObject.z.object({
8314
8529
  'dimension',
8315
8530
  'rowDimension',
8316
8531
  'columnDimension'
8317
- ]).default('dimension')
8532
+ ]).default('dimension'),
8533
+ encoding: external_zod_namespaceObject.z["enum"]([
8534
+ 'xAxis',
8535
+ 'yAxis',
8536
+ 'angle',
8537
+ 'color',
8538
+ 'detail',
8539
+ 'tooltip',
8540
+ 'label',
8541
+ 'row',
8542
+ 'column'
8543
+ ]).optional()
8318
8544
  });
8319
8545
  const zDimensionGroup = external_zod_namespaceObject.z.object({
8320
8546
  id: external_zod_namespaceObject.z.string(),
@@ -8359,7 +8585,20 @@ const zMeasure = external_zod_namespaceObject.z.object({
8359
8585
  id: external_zod_namespaceObject.z.string(),
8360
8586
  alias: external_zod_namespaceObject.z.string().optional(),
8361
8587
  autoFormat: external_zod_namespaceObject.z.boolean().default(true),
8362
- format: zNumFormat["default"]({})
8588
+ format: zNumFormat["default"]({}),
8589
+ encoding: external_zod_namespaceObject.z["enum"]([
8590
+ 'primaryYAxis',
8591
+ 'secondaryYAxis',
8592
+ 'xAxis',
8593
+ 'yAxis',
8594
+ 'angle',
8595
+ 'radius',
8596
+ 'size',
8597
+ 'color',
8598
+ 'label',
8599
+ 'tooltip'
8600
+ ]).optional(),
8601
+ parentId: external_zod_namespaceObject.z.string().optional()
8363
8602
  });
8364
8603
  const zMeasureGroup = external_zod_namespaceObject.z.object({
8365
8604
  id: external_zod_namespaceObject.z.string(),
@@ -8421,7 +8660,6 @@ const zEncoding = external_zod_namespaceObject.z.object({
8421
8660
  column: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).nullish(),
8422
8661
  group: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).nullish().describe("\u5DF2\u5F03\u7528, \u8BF7\u4F7F\u7528\u989C\u8272\u66FF\u4EE3")
8423
8662
  });
8424
- const zEncodings = external_zod_namespaceObject.z.array(zEncoding);
8425
8663
  const zXBandAxis = external_zod_namespaceObject.z.object({
8426
8664
  visible: external_zod_namespaceObject.z.boolean().default(true).nullish(),
8427
8665
  labelAutoHide: external_zod_namespaceObject.z.boolean().default(true).nullish(),
@@ -9564,7 +9802,6 @@ const zAdvancedVSeed = external_zod_namespaceObject.z.object({
9564
9802
  dimensions: zDimensionTree,
9565
9803
  measures: zMeasureTree,
9566
9804
  encoding: zEncoding,
9567
- encodings: zEncodings,
9568
9805
  config: zConfig,
9569
9806
  analysis: zAnalysis,
9570
9807
  theme: zTheme,
@@ -9736,7 +9973,6 @@ exports.zDualChartType = __webpack_exports__.zDualChartType;
9736
9973
  exports.zDualMeasure = __webpack_exports__.zDualMeasure;
9737
9974
  exports.zDualMeasures = __webpack_exports__.zDualMeasures;
9738
9975
  exports.zEncoding = __webpack_exports__.zEncoding;
9739
- exports.zEncodings = __webpack_exports__.zEncodings;
9740
9976
  exports.zFoldInfo = __webpack_exports__.zFoldInfo;
9741
9977
  exports.zFunnel = __webpack_exports__.zFunnel;
9742
9978
  exports.zFunnelConfig = __webpack_exports__.zFunnelConfig;
@@ -9947,7 +10183,6 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
9947
10183
  "zDualMeasure",
9948
10184
  "zDualMeasures",
9949
10185
  "zEncoding",
9950
- "zEncodings",
9951
10186
  "zFoldInfo",
9952
10187
  "zFunnel",
9953
10188
  "zFunnelConfig",