@visactor/vseed 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/builder/builder/builder.d.ts +4 -2
  2. package/dist/dataReshape/foldMeasures.d.ts +2 -2
  3. package/dist/index.cjs +1001 -765
  4. package/dist/index.cjs.map +1 -1
  5. package/dist/index.js +1014 -778
  6. package/dist/index.js.map +1 -1
  7. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +1 -0
  8. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +2 -0
  9. package/dist/pipeline/advanced/chart/pipes/measures/index.d.ts +1 -0
  10. package/dist/pipeline/spec/chart/pipes/color/colorCellStyleFill.d.ts +2 -0
  11. package/dist/pipeline/spec/chart/pipes/color/colorFunnelStyleFill.d.ts +2 -0
  12. package/dist/pipeline/spec/chart/pipes/color/colorPieStyleFill.d.ts +2 -0
  13. package/dist/pipeline/spec/chart/pipes/color/colorRoseStyleFill.d.ts +2 -0
  14. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +4 -0
  15. package/dist/pipeline/spec/chart/pipes/markStyle/cellStyle.d.ts +2 -0
  16. package/dist/pipeline/spec/chart/pipes/markStyle/funnelStyle.d.ts +2 -0
  17. package/dist/pipeline/spec/chart/pipes/markStyle/index.d.ts +5 -1
  18. package/dist/pipeline/spec/chart/pipes/markStyle/pieStyle.d.ts +2 -0
  19. package/dist/pipeline/spec/chart/pipes/markStyle/roseStyle.d.ts +2 -0
  20. package/dist/types/advancedVSeed.d.ts +16 -5
  21. package/dist/types/chartType/area/zArea.d.ts +16 -5
  22. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +16 -5
  23. package/dist/types/chartType/bar/zBar.d.ts +16 -5
  24. package/dist/types/chartType/barParallel/zBarParallel.d.ts +16 -5
  25. package/dist/types/chartType/barPercent/zBarPercent.d.ts +16 -5
  26. package/dist/types/chartType/column/zColumn.d.ts +16 -5
  27. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +16 -5
  28. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +16 -5
  29. package/dist/types/chartType/donut/zDonut.d.ts +16 -5
  30. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +36 -25
  31. package/dist/types/chartType/funnel/zFunnel.d.ts +16 -5
  32. package/dist/types/chartType/heatmap/zHeatmap.d.ts +16 -5
  33. package/dist/types/chartType/line/zLine.d.ts +16 -5
  34. package/dist/types/chartType/pie/zPie.d.ts +16 -5
  35. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +16 -5
  36. package/dist/types/chartType/radar/zRadar.d.ts +16 -5
  37. package/dist/types/chartType/rose/zRose.d.ts +16 -5
  38. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +16 -5
  39. package/dist/types/chartType/scatter/zScatter.d.ts +36 -25
  40. package/dist/types/chartType/table/zTable.d.ts +16 -5
  41. package/dist/types/properties/dimensions/dimensions.d.ts +16 -0
  42. package/dist/types/properties/dimensions/zDimensions.d.ts +33 -0
  43. package/dist/types/properties/measures/zDualMeasures.d.ts +40 -40
  44. package/dist/types/properties/measures/zMeasures.d.ts +15 -15
  45. package/dist/types/properties/measures/zScatterMeasures.d.ts +40 -40
  46. package/dist/types/zVseed.d.ts +360 -140
  47. package/dist/umd/index.js +953 -703
  48. package/dist/umd/index.js.map +1 -1
  49. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -1271,6 +1271,56 @@ const initAdvancedVSeed_initAdvancedVSeed = (advancedVSeed, context)=>{
1271
1271
  locale: locale || 'zh-CN'
1272
1272
  };
1273
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
+ };
1296
+ if (!dataset) throw new Error('dataset is required');
1297
+ if (0 === dataset.length) return [];
1298
+ if (dimensions) {
1299
+ const basicDimensions = dimensions.map((dim)=>({
1300
+ location: 'dimension',
1301
+ ...dim
1302
+ }));
1303
+ if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1304
+ basicDimensions.push(MeaName);
1305
+ return basicDimensions;
1306
+ }
1307
+ const top100dataset = dataset.slice(0, 100);
1308
+ const sample = top100dataset.reduce((prev, cur)=>({
1309
+ ...prev,
1310
+ ...cur
1311
+ }), {});
1312
+ const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1313
+ '',
1314
+ null,
1315
+ void 0
1316
+ ].includes(key)).map((dim)=>({
1317
+ id: dim,
1318
+ alias: dim,
1319
+ location: 'dimension'
1320
+ }));
1321
+ basicDimensions.push(MeaName);
1322
+ return basicDimensions;
1323
+ };
1274
1324
  const getBasicMeasures = (vseed)=>{
1275
1325
  const { dataset, measures } = vseed;
1276
1326
  if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
@@ -1304,6 +1354,52 @@ const isMeasureTreeWithParentId = (vseed)=>{
1304
1354
  if (!measures) return false;
1305
1355
  return measures.some((measure)=>'parentId' in measure);
1306
1356
  };
1357
+ const encodingForLine = (advancedVSeed, context)=>{
1358
+ const { vseed } = context;
1359
+ const { measures: vseedMeasures = [] } = vseed;
1360
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1361
+ const dimensions = getBasicDimensions(vseed);
1362
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1363
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
1364
+ const encoding = {};
1365
+ if (hasDimensionEncoding) generateDimensionEncoding(dimensions, encoding);
1366
+ else generateDefaultDimensionEncoding(dimensions, encoding);
1367
+ if (hasMeasureEncoding) generateMeasureEncoding(measures, encoding);
1368
+ else generateDefaultMeasureEncoding(measures, encoding);
1369
+ return {
1370
+ ...advancedVSeed,
1371
+ encoding
1372
+ };
1373
+ };
1374
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1375
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
1376
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1377
+ };
1378
+ const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1379
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
1380
+ encoding.x = uniqueDimIds.slice(0, 1);
1381
+ encoding.color = uniqueDimIds.slice(1);
1382
+ encoding.tooltip = uniqueDimIds;
1383
+ encoding.detail = [];
1384
+ encoding.label = [];
1385
+ encoding.row = [];
1386
+ encoding.column = [];
1387
+ };
1388
+ const generateMeasureEncoding = (measures, encoding)=>{
1389
+ encoding.tooltip = measures.map((item)=>item.id);
1390
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1391
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1392
+ if (color.length > 0) encoding.color = color;
1393
+ };
1394
+ const generateDimensionEncoding = (dimensions, encoding)=>{
1395
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
1396
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1397
+ encoding.detail = [];
1398
+ if (0 === encoding.x.length) encoding.x = [
1399
+ dimensions[0].id
1400
+ ];
1401
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1402
+ };
1307
1403
  const measureDepth = (measures = [])=>{
1308
1404
  if (!measures) return 0;
1309
1405
  let depth = 1;
@@ -1324,7 +1420,7 @@ const isPivotChart = (vseed)=>{
1324
1420
  if (isVTable(vseed)) return false;
1325
1421
  if (isMeasureTreeWithParentId(vseed)) {
1326
1422
  const parentIds = vseed.measures?.map((measure)=>measure.parentId);
1327
- return parentIds && parentIds.length > 1;
1423
+ return parentIds && (0, external_remeda_namespaceObject.unique)(parentIds).length > 1;
1328
1424
  }
1329
1425
  if ('dualAxis' === vseed.chartType || 'scatter' === vseed.chartType) {
1330
1426
  const { dimensions = [] } = vseed;
@@ -1395,22 +1491,6 @@ const basicMeasuresToMeasureTree = (measures)=>{
1395
1491
  }
1396
1492
  ];
1397
1493
  };
1398
- const ORIGINAL_DATA = '__OriginalData__';
1399
- const Separator = '-';
1400
- const FoldMeasureName = '__MeaName__';
1401
- const FoldMeasureId = '__MeaId__';
1402
- const FoldMeasureValue = '__MeaValue__';
1403
- const MeasureName = FoldMeasureName;
1404
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1405
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1406
- const FoldXMeasureValue = '__MeaXValue__';
1407
- const FoldYMeasureValue = '__MeaYValue__';
1408
- const XEncoding = '__Dim_X__';
1409
- const YEncoding = '__Dim_Y__';
1410
- const AngleEncoding = '__Dim_Angle__';
1411
- const DetailEncoding = '__Dim_Detail__';
1412
- const ColorEncoding = '__Dim_Color__';
1413
- const ColorIdEncoding = '__Dim_ColorId__';
1414
1494
  const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1415
1495
  const result = {
1416
1496
  ...advancedVSeed
@@ -1450,52 +1530,13 @@ const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1450
1530
  result.dimensions.push(MeaName);
1451
1531
  return result;
1452
1532
  };
1453
- const encodingForLine = (advancedVSeed, context)=>{
1454
- const { vseed } = context;
1455
- const { dimensions } = advancedVSeed;
1456
- if (!dimensions) return advancedVSeed;
1457
- const encoding = vseed.encoding;
1458
- if (encoding) {
1459
- const x = encoding.x || [
1460
- dimensions[0].id
1461
- ];
1462
- const color = encoding.color || [
1463
- (dimensions[1] || dimensions[0]).id
1464
- ];
1465
- const detail = encoding.detail || [];
1466
- const mergedDetail = 0 === detail.length ? dimensions.map((d)=>d.id).filter((id)=>!x.includes(id)) : encoding.detail;
1467
- return {
1468
- ...advancedVSeed,
1469
- encoding: {
1470
- ...encoding,
1471
- x,
1472
- color,
1473
- detail: mergedDetail
1474
- }
1475
- };
1476
- }
1477
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1478
- const mergedEncoding = {
1479
- x: dimensions.slice(0, 1).map((item)=>item.id),
1480
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1481
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
1482
- tooltip: dimensions.map((item)=>item.id),
1483
- label: [],
1484
- row: [],
1485
- column: []
1486
- };
1487
- return {
1488
- ...advancedVSeed,
1489
- encoding: mergedEncoding
1490
- };
1491
- };
1492
1533
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1493
1534
  const { vseed } = context;
1494
1535
  const usePivotChart = isPivotChart(vseed);
1495
1536
  if (usePivotChart) return execPipeline(pivotPipeline, context, advancedVSeed);
1496
1537
  return execPipeline(pipeline, context, advancedVSeed);
1497
1538
  };
1498
- const foldMeasures = (dataset, measures, encoding, options)=>{
1539
+ const foldMeasures = (dataset, measures, options)=>{
1499
1540
  const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1500
1541
  const foldInfo = {
1501
1542
  measureId,
@@ -1596,7 +1637,7 @@ const applyEncoding = (encoding, dimensions, datum, separator)=>{
1596
1637
  };
1597
1638
  const dataReshapeByEncoding = (dataset, dimensions, measures, encoding, options)=>{
1598
1639
  const { foldMeasureId = FoldMeasureId, foldMeasureName = FoldMeasureName, foldMeasureValue = FoldMeasureValue, colorItemAsId = false, colorMeasureId } = options || {};
1599
- const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, encoding, {
1640
+ const { dataset: foldedDataset, foldInfo } = foldMeasures(dataset, measures, {
1600
1641
  measureId: foldMeasureId,
1601
1642
  measureName: foldMeasureName,
1602
1643
  measureValue: foldMeasureValue,
@@ -1640,7 +1681,7 @@ const reshapeWithEncoding = (advancedVSeed, context)=>{
1640
1681
  const { dimensions, measures, encoding } = advancedVSeed;
1641
1682
  if (!measures || !dimensions || !dataset || !encoding) return result;
1642
1683
  if (0 === measures.length) throw new Error('measures can not be empty');
1643
- const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1684
+ 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, {
1644
1685
  colorMeasureId: getColorMeasureId(advancedVSeed)
1645
1686
  });
1646
1687
  return {
@@ -1677,7 +1718,7 @@ const pivotReshapeWithEncoding = (advancedVSeed, context)=>{
1677
1718
  const measures = measureGroup.children;
1678
1719
  if (!measures) return;
1679
1720
  const groupId = measureGroup.id;
1680
- const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, measures, encoding, {
1721
+ 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, {
1681
1722
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1682
1723
  colorMeasureId: getColorMeasureId(advancedVSeed)
1683
1724
  });
@@ -1886,9 +1927,9 @@ const annotation_annotation = (advancedVSeed, context)=>{
1886
1927
  };
1887
1928
  const lineAdvancedPipeline = [
1888
1929
  initAdvancedVSeed_initAdvancedVSeed,
1930
+ encodingForLine,
1889
1931
  buildMeasures,
1890
1932
  autoDimensions_autoDimensions,
1891
- encodingForLine,
1892
1933
  pivotAdapter([
1893
1934
  reshapeWithEncoding
1894
1935
  ], [
@@ -2249,117 +2290,6 @@ const yLinear = (spec, context)=>{
2249
2290
  ];
2250
2291
  return result;
2251
2292
  };
2252
- const label_label = (spec, context)=>{
2253
- const result = {
2254
- ...spec
2255
- };
2256
- const { advancedVSeed } = context;
2257
- const { measures, datasetReshapeInfo, locale } = advancedVSeed;
2258
- const { chartType } = advancedVSeed;
2259
- const baseConfig = advancedVSeed.config[chartType];
2260
- if (!baseConfig || !baseConfig.label) return result;
2261
- const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
2262
- const { label } = baseConfig;
2263
- const { enable } = label;
2264
- result.label = {
2265
- visible: enable,
2266
- formatMethod: (value, datum)=>{
2267
- const result = [];
2268
- const formatValue = (value)=>{
2269
- const id = datum[measureId];
2270
- const measure = findMeasureById(measures, id);
2271
- if (!measure) return value;
2272
- const { format = {}, autoFormat = true } = measure;
2273
- if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2274
- const formatter = createFormatter(format);
2275
- return formatter(value);
2276
- }
2277
- if (autoFormat) return autoFormatter(value, locale);
2278
- return String(value);
2279
- };
2280
- result.push(formatValue(datum[measureValue]));
2281
- return result.join(' ');
2282
- }
2283
- };
2284
- return result;
2285
- };
2286
- const tooltip_tooltip = (spec, context)=>{
2287
- const result = {
2288
- ...spec
2289
- };
2290
- const { advancedVSeed } = context;
2291
- const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
2292
- const baseConfig = advancedVSeed.config[chartType];
2293
- const { tooltip = {
2294
- enable: true
2295
- } } = baseConfig;
2296
- const { enable } = tooltip;
2297
- const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2298
- const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2299
- result.tooltip = {
2300
- visible: enable,
2301
- mark: {
2302
- title: {
2303
- visible: true
2304
- },
2305
- content: [
2306
- ...dimensions.map((item)=>({
2307
- visible: true,
2308
- hasShape: true,
2309
- shapeType: 'rectRound',
2310
- key: (datum)=>{
2311
- if (item.alias || item.id) return item.alias || item.id;
2312
- return datum && datum[item.id];
2313
- },
2314
- value: (datum)=>datum && datum[item.id]
2315
- })),
2316
- {
2317
- visible: true,
2318
- hasShape: true,
2319
- key: (datum)=>datum && datum[measureName || colorName] || '',
2320
- value: (datum)=>{
2321
- if (!datum) return '';
2322
- const value = datum[measureValue];
2323
- const id = datum[measureId];
2324
- const measure = findMeasureById(measures, id);
2325
- if (!measure) return String(value);
2326
- const { format = {}, autoFormat = true } = measure;
2327
- if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2328
- const formatter = createFormatter(format);
2329
- return formatter(value);
2330
- }
2331
- if (autoFormat) return autoFormatter(value, locale);
2332
- return String(value);
2333
- }
2334
- }
2335
- ]
2336
- },
2337
- dimension: {
2338
- content: [
2339
- {
2340
- visible: true,
2341
- key: (datum)=>datum && datum[colorName] || '',
2342
- value: (datum)=>{
2343
- if (!datum) return '';
2344
- const value = datum[measureValue];
2345
- const id = datum[measureId];
2346
- const measure = findMeasureById(measures, id);
2347
- if (!measure) return String(value);
2348
- const { format = {}, autoFormat = true } = measure;
2349
- if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2350
- const formatter = createFormatter(format);
2351
- return formatter(value);
2352
- }
2353
- if (autoFormat) return autoFormatter(value, locale);
2354
- return String(value);
2355
- },
2356
- shapeType: 'rectRound'
2357
- }
2358
- ]
2359
- }
2360
- };
2361
- return result;
2362
- };
2363
2293
  const verticalCrosshairLine = (spec, context)=>{
2364
2294
  const result = {
2365
2295
  ...spec
@@ -2868,69 +2798,180 @@ const lineStyle_lineStyle = (spec, context)=>{
2868
2798
  }
2869
2799
  };
2870
2800
  };
2871
- const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
2872
- if ('string' == typeof value) return obj[key] === value;
2873
- if ('number' == typeof value) return obj[key] === value;
2874
- return true;
2875
- });
2876
- const annotationPoint_annotationPoint = (spec, context)=>{
2801
+ const label_label = (spec, context)=>{
2802
+ const result = {
2803
+ ...spec
2804
+ };
2877
2805
  const { advancedVSeed } = context;
2878
- const { annotation } = advancedVSeed;
2879
- if (!annotation || !annotation.annotationPoint) return spec;
2880
- const { annotationPoint } = annotation;
2881
- const annotationPointList = Array.isArray(annotationPoint) ? annotationPoint : [
2882
- annotationPoint
2883
- ];
2884
- const markPoint = annotationPointList.flatMap((annotationPoint)=>{
2885
- const { selector: selectorPoint, text = '', textColor = '#ffffff', textFontSize = 12, textFontWeight = 400, textAlign = 'center', textBaseline = 'top', textBackgroundBorderColor, textBackgroundBorderRadius = 4, textBackgroundBorderWidth = 1, textBackgroundColor = '#212121', textBackgroundPadding = 2, textBackgroundVisible = true, offsetX = 0, offsetY = 0 } = annotationPoint;
2886
- const dataset = advancedVSeed.dataset.flat();
2887
- const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2888
- return selectedData.map((datum)=>({
2889
- zIndex: ANNOTATION_Z_INDEX,
2890
- regionRelative: true,
2891
- position: (data, context)=>{
2892
- const targetDatum = data.find((item)=>isSubset(datum, item));
2893
- if (targetDatum) {
2894
- const { x, y } = context.dataToPosition(targetDatum);
2895
- return {
2896
- x,
2897
- y
2898
- };
2899
- }
2900
- },
2901
- itemLine: {
2902
- visible: false
2903
- },
2904
- itemContent: {
2905
- offsetY,
2906
- offsetX,
2907
- text: {
2908
- text: text,
2909
- style: {
2910
- visible: true,
2911
- textAlign: textAlign,
2912
- textBaseline: textBaseline,
2913
- fill: textColor,
2914
- stroke: textBackgroundColor,
2915
- lineWidth: 1,
2916
- fontSize: textFontSize,
2917
- fontWeight: textFontWeight,
2918
- dy: textFontSize
2919
- },
2920
- labelBackground: {
2921
- visible: textBackgroundVisible,
2922
- padding: textBackgroundPadding,
2923
- style: {
2924
- cornerRadius: textBackgroundBorderRadius ?? 4,
2925
- fill: textBackgroundColor,
2926
- stroke: textBackgroundBorderColor,
2927
- lineWidth: textBackgroundBorderWidth,
2928
- dy: textFontSize
2929
- }
2930
- }
2931
- }
2932
- }
2933
- }));
2806
+ const { measures, datasetReshapeInfo, locale } = advancedVSeed;
2807
+ const { chartType } = advancedVSeed;
2808
+ const baseConfig = advancedVSeed.config[chartType];
2809
+ if (!baseConfig || !baseConfig.label) return result;
2810
+ const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
2811
+ const { label } = baseConfig;
2812
+ const { enable } = label;
2813
+ result.label = {
2814
+ visible: enable,
2815
+ formatMethod: (value, datum)=>{
2816
+ const result = [];
2817
+ const formatValue = (value)=>{
2818
+ const id = datum[measureId];
2819
+ const measure = findMeasureById(measures, id);
2820
+ if (!measure) return value;
2821
+ const { format = {}, autoFormat = true } = measure;
2822
+ if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2823
+ const formatter = createFormatter(format);
2824
+ return formatter(value);
2825
+ }
2826
+ if (autoFormat) return autoFormatter(value, locale);
2827
+ return String(value);
2828
+ };
2829
+ result.push(formatValue(datum[measureValue]));
2830
+ return result.join(' ');
2831
+ }
2832
+ };
2833
+ return result;
2834
+ };
2835
+ const tooltip_tooltip = (spec, context)=>{
2836
+ const result = {
2837
+ ...spec
2838
+ };
2839
+ const { advancedVSeed } = context;
2840
+ const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
2841
+ const baseConfig = advancedVSeed.config[chartType];
2842
+ const { tooltip = {
2843
+ enable: true
2844
+ } } = baseConfig;
2845
+ const { enable } = tooltip;
2846
+ const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2847
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2848
+ result.tooltip = {
2849
+ visible: enable,
2850
+ mark: {
2851
+ title: {
2852
+ visible: true
2853
+ },
2854
+ content: [
2855
+ ...dimensions.map((item)=>({
2856
+ visible: true,
2857
+ hasShape: true,
2858
+ shapeType: 'rectRound',
2859
+ key: (datum)=>{
2860
+ if (item.alias || item.id) return item.alias || item.id;
2861
+ return datum && datum[item.id];
2862
+ },
2863
+ value: (datum)=>datum && datum[item.id]
2864
+ })),
2865
+ {
2866
+ visible: true,
2867
+ hasShape: true,
2868
+ key: (datum)=>datum && datum[measureName || colorName] || '',
2869
+ value: (datum)=>{
2870
+ if (!datum) return '';
2871
+ const value = datum[measureValue];
2872
+ const id = datum[measureId];
2873
+ const measure = findMeasureById(measures, id);
2874
+ if (!measure) return String(value);
2875
+ const { format = {}, autoFormat = true } = measure;
2876
+ if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2877
+ const formatter = createFormatter(format);
2878
+ return formatter(value);
2879
+ }
2880
+ if (autoFormat) return autoFormatter(value, locale);
2881
+ return String(value);
2882
+ }
2883
+ }
2884
+ ]
2885
+ },
2886
+ dimension: {
2887
+ content: [
2888
+ {
2889
+ visible: true,
2890
+ key: (datum)=>datum && datum[colorName] || '',
2891
+ value: (datum)=>{
2892
+ if (!datum) return '';
2893
+ const value = datum[measureValue];
2894
+ const id = datum[measureId];
2895
+ const measure = findMeasureById(measures, id);
2896
+ if (!measure) return String(value);
2897
+ const { format = {}, autoFormat = true } = measure;
2898
+ if (!(0, external_remeda_namespaceObject.isEmpty)(format)) {
2899
+ const formatter = createFormatter(format);
2900
+ return formatter(value);
2901
+ }
2902
+ if (autoFormat) return autoFormatter(value, locale);
2903
+ return String(value);
2904
+ },
2905
+ shapeType: 'rectRound'
2906
+ }
2907
+ ]
2908
+ }
2909
+ };
2910
+ return result;
2911
+ };
2912
+ const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
2913
+ if ('string' == typeof value) return obj[key] === value;
2914
+ if ('number' == typeof value) return obj[key] === value;
2915
+ return true;
2916
+ });
2917
+ const annotationPoint_annotationPoint = (spec, context)=>{
2918
+ const { advancedVSeed } = context;
2919
+ const { annotation } = advancedVSeed;
2920
+ if (!annotation || !annotation.annotationPoint) return spec;
2921
+ const { annotationPoint } = annotation;
2922
+ const annotationPointList = Array.isArray(annotationPoint) ? annotationPoint : [
2923
+ annotationPoint
2924
+ ];
2925
+ const markPoint = annotationPointList.flatMap((annotationPoint)=>{
2926
+ const { selector: selectorPoint, text = '', textColor = '#ffffff', textFontSize = 12, textFontWeight = 400, textAlign = 'center', textBaseline = 'top', textBackgroundBorderColor, textBackgroundBorderRadius = 4, textBackgroundBorderWidth = 1, textBackgroundColor = '#212121', textBackgroundPadding = 2, textBackgroundVisible = true, offsetX = 0, offsetY = 0 } = annotationPoint;
2927
+ const dataset = advancedVSeed.dataset.flat();
2928
+ const selectedData = selectorPoint ? dataset.filter((datum)=>selector_selector(datum, selectorPoint)) : [];
2929
+ return selectedData.map((datum)=>({
2930
+ zIndex: ANNOTATION_Z_INDEX,
2931
+ regionRelative: true,
2932
+ position: (data, context)=>{
2933
+ const targetDatum = data.find((item)=>isSubset(datum, item));
2934
+ if (targetDatum) {
2935
+ const { x, y } = context.dataToPosition(targetDatum);
2936
+ return {
2937
+ x,
2938
+ y
2939
+ };
2940
+ }
2941
+ },
2942
+ itemLine: {
2943
+ visible: false
2944
+ },
2945
+ itemContent: {
2946
+ offsetY,
2947
+ offsetX,
2948
+ text: {
2949
+ text: text,
2950
+ style: {
2951
+ visible: true,
2952
+ textAlign: textAlign,
2953
+ textBaseline: textBaseline,
2954
+ fill: textColor,
2955
+ stroke: textBackgroundColor,
2956
+ lineWidth: 1,
2957
+ fontSize: textFontSize,
2958
+ fontWeight: textFontWeight,
2959
+ dy: textFontSize
2960
+ },
2961
+ labelBackground: {
2962
+ visible: textBackgroundVisible,
2963
+ padding: textBackgroundPadding,
2964
+ style: {
2965
+ cornerRadius: textBackgroundBorderRadius ?? 4,
2966
+ fill: textBackgroundColor,
2967
+ stroke: textBackgroundBorderColor,
2968
+ lineWidth: textBackgroundBorderWidth,
2969
+ dy: textFontSize
2970
+ }
2971
+ }
2972
+ }
2973
+ }
2974
+ }));
2934
2975
  });
2935
2976
  return {
2936
2977
  ...spec,
@@ -3626,6 +3667,93 @@ const pivotDiscreteLegend = (spec, context)=>{
3626
3667
  legends
3627
3668
  };
3628
3669
  };
3670
+ const pivotColorLegend = (spec, context)=>{
3671
+ const result = {
3672
+ ...spec
3673
+ };
3674
+ const { advancedVSeed } = context;
3675
+ const { chartType } = advancedVSeed;
3676
+ const baseConfig = advancedVSeed.config[chartType];
3677
+ if (!baseConfig || !baseConfig.legend) return result;
3678
+ const { datasetReshapeInfo } = advancedVSeed;
3679
+ const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
3680
+ const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
3681
+ const { legend, color } = baseConfig;
3682
+ const { colorScheme, linearColorScheme } = color;
3683
+ const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
3684
+ const orient = [
3685
+ 'bottom',
3686
+ 'bottomLeft',
3687
+ 'bottomRight',
3688
+ 'bl',
3689
+ 'br'
3690
+ ].includes(position) ? 'bottom' : [
3691
+ 'top',
3692
+ 'topLeft',
3693
+ 'topRight',
3694
+ 'tl',
3695
+ 'tr'
3696
+ ].includes(position) ? 'top' : [
3697
+ 'left',
3698
+ 'leftTop',
3699
+ 'leftBottom',
3700
+ 'lt',
3701
+ 'lb'
3702
+ ].includes(position) ? 'left' : 'right';
3703
+ const legendPosition = [
3704
+ 'topLeft',
3705
+ 'bottomLeft',
3706
+ 'leftTop',
3707
+ 'rightTop',
3708
+ 'lt',
3709
+ 'rt',
3710
+ 'tl',
3711
+ 'bl'
3712
+ ].includes(position) ? 'start' : [
3713
+ 'topRight',
3714
+ 'bottomRight',
3715
+ 'leftBottom',
3716
+ 'rightBottom',
3717
+ 'lb',
3718
+ 'rb',
3719
+ 'rt',
3720
+ 'br'
3721
+ ].includes(position) ? 'end' : 'middle';
3722
+ const legends = {
3723
+ visible: enable,
3724
+ type: 'color',
3725
+ orient,
3726
+ position: legendPosition,
3727
+ colors: linearColorScheme || colorScheme || [],
3728
+ value: [
3729
+ min,
3730
+ max
3731
+ ],
3732
+ min: min,
3733
+ max: max,
3734
+ maxWidth: '30%',
3735
+ startText: {
3736
+ visible: true,
3737
+ style: {
3738
+ fill: labelFontColor,
3739
+ fontSize: labelFontSize,
3740
+ fontWeight: labelFontWeight
3741
+ }
3742
+ },
3743
+ endText: {
3744
+ visible: true,
3745
+ style: {
3746
+ fill: labelFontColor,
3747
+ fontSize: labelFontSize,
3748
+ fontWeight: labelFontWeight
3749
+ }
3750
+ }
3751
+ };
3752
+ return {
3753
+ ...result,
3754
+ legends
3755
+ };
3756
+ };
3629
3757
  const pivotAdapter_pivotAdapter = (pipeline, pivotPipeline)=>(spec, context)=>{
3630
3758
  const { vseed } = context;
3631
3759
  const usePivotChart = isPivotChart(vseed);
@@ -3640,13 +3768,13 @@ const line_line = [
3640
3768
  progressive,
3641
3769
  xBand,
3642
3770
  yLinear,
3643
- label_label,
3644
- tooltip_tooltip,
3645
3771
  verticalCrosshairLine,
3646
3772
  colorAdapter(discreteLegend, colorLegend),
3647
3773
  colorPointStyleFill(pointStyle_pointStyle),
3648
3774
  pointStateDimensionHover,
3649
3775
  colorLineStyleFill(lineStyle_lineStyle),
3776
+ label_label,
3777
+ tooltip_tooltip,
3650
3778
  annotationPoint_annotationPoint,
3651
3779
  annotationVerticalLine_annotationVerticalLine,
3652
3780
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3659,18 +3787,18 @@ const pivotLine = [
3659
3787
  datasetPivot,
3660
3788
  pivotIndicators_pivotIndicators([
3661
3789
  initLine,
3662
- color_color,
3790
+ colorAdapter(color_color, linearColor),
3663
3791
  background_backgroundColor,
3664
3792
  datasetXY,
3665
3793
  progressive,
3666
3794
  xBand,
3667
3795
  yLinear,
3668
- label_label,
3669
- tooltip_tooltip,
3670
3796
  verticalCrosshairLine,
3671
- pointStyle_pointStyle,
3797
+ colorPointStyleFill(pointStyle_pointStyle),
3672
3798
  pointStateDimensionHover,
3673
- lineStyle_lineStyle,
3799
+ colorLineStyleFill(lineStyle_lineStyle),
3800
+ label_label,
3801
+ tooltip_tooltip,
3674
3802
  annotationPoint_annotationPoint,
3675
3803
  annotationVerticalLine_annotationVerticalLine,
3676
3804
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3678,7 +3806,7 @@ const pivotLine = [
3678
3806
  ]),
3679
3807
  pivotRowDimensions,
3680
3808
  pivotColumnDimensions,
3681
- pivotDiscreteLegend
3809
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
3682
3810
  ];
3683
3811
  const lineSpecPipeline = [
3684
3812
  pivotAdapter_pivotAdapter(line_line, pivotLine)
@@ -3689,51 +3817,58 @@ const registerLine = ()=>{
3689
3817
  };
3690
3818
  const encodingForColumn = (advancedVSeed, context)=>{
3691
3819
  const { vseed } = context;
3692
- const { dimensions } = advancedVSeed;
3693
- if (!dimensions) return advancedVSeed;
3694
- const encoding = vseed.encoding;
3695
- if (encoding) {
3696
- const x = encoding.x || [
3697
- dimensions[0].id
3698
- ];
3699
- const color = encoding.color || [
3700
- (dimensions[1] || dimensions[0]).id
3701
- ];
3702
- const detail = encoding.detail || [];
3703
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
3704
- ...color,
3705
- ...detail
3706
- ]) : detail;
3707
- return {
3708
- ...advancedVSeed,
3709
- encoding: {
3710
- ...encoding,
3711
- x,
3712
- color,
3713
- detail: mergedDetail
3714
- }
3715
- };
3716
- }
3717
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3718
- const mergedEncoding = {
3719
- x: dimensions.slice(0, 1).map((item)=>item.id),
3720
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3721
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
3722
- tooltip: dimensions.map((item)=>item.id),
3723
- label: [],
3724
- row: [],
3725
- column: []
3726
- };
3820
+ const { measures: vseedMeasures = [] } = vseed;
3821
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3822
+ const dimensions = getBasicDimensions(vseed);
3823
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3824
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
3825
+ const encoding = {};
3826
+ if (hasDimensionEncoding) column_generateDimensionEncoding(dimensions, encoding);
3827
+ else column_generateDefaultDimensionEncoding(dimensions, encoding);
3828
+ if (hasMeasureEncoding) column_generateMeasureEncoding(measures, encoding);
3829
+ else column_generateDefaultMeasureEncoding(measures, encoding);
3727
3830
  return {
3728
3831
  ...advancedVSeed,
3729
- encoding: mergedEncoding
3832
+ encoding
3730
3833
  };
3731
3834
  };
3835
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3836
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
3837
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3838
+ };
3839
+ const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3840
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3841
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
3842
+ encoding.x = uniqueDimIds.slice(0, 1);
3843
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3844
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
3845
+ encoding.tooltip = uniqueDimIds;
3846
+ encoding.label = [];
3847
+ encoding.row = [];
3848
+ encoding.column = [];
3849
+ };
3850
+ const column_generateMeasureEncoding = (measures, encoding)=>{
3851
+ encoding.tooltip = measures.map((item)=>item.id);
3852
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3853
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3854
+ if (color.length > 0) encoding.color = color;
3855
+ return encoding;
3856
+ };
3857
+ const column_generateDimensionEncoding = (dimensions, encoding)=>{
3858
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
3859
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
3860
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
3861
+ if (0 === encoding.x.length) encoding.x = [
3862
+ dimensions[0].id
3863
+ ];
3864
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3865
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
3866
+ };
3732
3867
  const columnAdvancedPipeline = [
3733
3868
  initAdvancedVSeed_initAdvancedVSeed,
3869
+ encodingForColumn,
3734
3870
  buildMeasures,
3735
3871
  autoDimensions_autoDimensions,
3736
- encodingForColumn,
3737
3872
  pivotAdapter([
3738
3873
  reshapeWithEncoding
3739
3874
  ], [
@@ -4036,93 +4171,6 @@ const annotationAreaBand = (spec, context)=>{
4036
4171
  markArea: markArea
4037
4172
  };
4038
4173
  };
4039
- const pivotColorLegend = (spec, context)=>{
4040
- const result = {
4041
- ...spec
4042
- };
4043
- const { advancedVSeed } = context;
4044
- const { chartType } = advancedVSeed;
4045
- const baseConfig = advancedVSeed.config[chartType];
4046
- if (!baseConfig || !baseConfig.legend) return result;
4047
- const { datasetReshapeInfo } = advancedVSeed;
4048
- const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
4049
- const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
4050
- const { legend, color } = baseConfig;
4051
- const { colorScheme, linearColorScheme } = color;
4052
- const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
4053
- const orient = [
4054
- 'bottom',
4055
- 'bottomLeft',
4056
- 'bottomRight',
4057
- 'bl',
4058
- 'br'
4059
- ].includes(position) ? 'bottom' : [
4060
- 'top',
4061
- 'topLeft',
4062
- 'topRight',
4063
- 'tl',
4064
- 'tr'
4065
- ].includes(position) ? 'top' : [
4066
- 'left',
4067
- 'leftTop',
4068
- 'leftBottom',
4069
- 'lt',
4070
- 'lb'
4071
- ].includes(position) ? 'left' : 'right';
4072
- const legendPosition = [
4073
- 'topLeft',
4074
- 'bottomLeft',
4075
- 'leftTop',
4076
- 'rightTop',
4077
- 'lt',
4078
- 'rt',
4079
- 'tl',
4080
- 'bl'
4081
- ].includes(position) ? 'start' : [
4082
- 'topRight',
4083
- 'bottomRight',
4084
- 'leftBottom',
4085
- 'rightBottom',
4086
- 'lb',
4087
- 'rb',
4088
- 'rt',
4089
- 'br'
4090
- ].includes(position) ? 'end' : 'middle';
4091
- const legends = {
4092
- visible: enable,
4093
- type: 'color',
4094
- orient,
4095
- position: legendPosition,
4096
- colors: linearColorScheme || colorScheme || [],
4097
- value: [
4098
- min,
4099
- max
4100
- ],
4101
- min: min,
4102
- max: max,
4103
- maxWidth: '30%',
4104
- startText: {
4105
- visible: true,
4106
- style: {
4107
- fill: labelFontColor,
4108
- fontSize: labelFontSize,
4109
- fontWeight: labelFontWeight
4110
- }
4111
- },
4112
- endText: {
4113
- visible: true,
4114
- style: {
4115
- fill: labelFontColor,
4116
- fontSize: labelFontSize,
4117
- fontWeight: labelFontWeight
4118
- }
4119
- }
4120
- };
4121
- return {
4122
- ...result,
4123
- legends
4124
- };
4125
- };
4126
4174
  const column = [
4127
4175
  initColumn,
4128
4176
  stackCornerRadius_stackCornerRadius,
@@ -4180,9 +4228,9 @@ const registerColumn = ()=>{
4180
4228
  };
4181
4229
  const columnParallelAdvancedPipeline = [
4182
4230
  initAdvancedVSeed_initAdvancedVSeed,
4231
+ encodingForColumn,
4183
4232
  buildMeasures,
4184
4233
  autoDimensions_autoDimensions,
4185
- encodingForColumn,
4186
4234
  pivotAdapter([
4187
4235
  reshapeWithEncoding
4188
4236
  ], [
@@ -4277,9 +4325,9 @@ const registerColumnParallel = ()=>{
4277
4325
  };
4278
4326
  const columnPercentAdvancedPipeline = [
4279
4327
  initAdvancedVSeed_initAdvancedVSeed,
4328
+ encodingForColumn,
4280
4329
  buildMeasures,
4281
4330
  autoDimensions_autoDimensions,
4282
- encodingForColumn,
4283
4331
  pivotAdapter([
4284
4332
  reshapeWithEncoding
4285
4333
  ], [
@@ -4358,46 +4406,53 @@ const registerColumnPercent = ()=>{
4358
4406
  };
4359
4407
  const encodingForBar = (advancedVSeed, context)=>{
4360
4408
  const { vseed } = context;
4361
- const { dimensions } = advancedVSeed;
4362
- if (!dimensions) return advancedVSeed;
4363
- const encoding = vseed.encoding;
4364
- if (encoding) {
4365
- const y = encoding.y || [
4366
- dimensions[0].id
4367
- ];
4368
- const color = encoding.color || [
4369
- (dimensions[1] || dimensions[0]).id
4370
- ];
4371
- const detail = encoding.detail || [];
4372
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
4373
- ...color,
4374
- ...detail
4375
- ]) : detail;
4376
- return {
4377
- ...advancedVSeed,
4378
- encoding: {
4379
- ...encoding,
4380
- y,
4381
- color,
4382
- detail: mergedDetail
4383
- }
4384
- };
4385
- }
4386
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4387
- const mergedEncoding = {
4388
- y: dimensions.slice(0, 1).map((item)=>item.id),
4389
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4390
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
4391
- tooltip: dimensions.map((item)=>item.id),
4392
- label: [],
4393
- row: [],
4394
- column: []
4395
- };
4409
+ const { measures: vseedMeasures = [] } = vseed;
4410
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4411
+ const dimensions = getBasicDimensions(vseed);
4412
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4413
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
4414
+ const encoding = {};
4415
+ if (hasDimensionEncoding) bar_generateDimensionEncoding(dimensions, encoding);
4416
+ else bar_generateDefaultDimensionEncoding(dimensions, encoding);
4417
+ if (hasMeasureEncoding) bar_generateMeasureEncoding(measures, encoding);
4418
+ else bar_generateDefaultMeasureEncoding(measures, encoding);
4396
4419
  return {
4397
4420
  ...advancedVSeed,
4398
- encoding: mergedEncoding
4421
+ encoding
4399
4422
  };
4400
4423
  };
4424
+ const bar_generateDefaultMeasureEncoding = (measures, encoding)=>{
4425
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
4426
+ encoding.x = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4427
+ };
4428
+ const bar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
4429
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
4430
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
4431
+ encoding.y = uniqueDimIds.slice(0, 1);
4432
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4433
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
4434
+ encoding.tooltip = uniqueDimIds;
4435
+ encoding.label = [];
4436
+ encoding.row = [];
4437
+ encoding.column = [];
4438
+ };
4439
+ const bar_generateMeasureEncoding = (measures, encoding)=>{
4440
+ encoding.tooltip = measures.map((item)=>item.id);
4441
+ encoding.x = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4442
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4443
+ if (color.length > 0) encoding.color = color;
4444
+ return encoding;
4445
+ };
4446
+ const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4447
+ encoding.y = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
4448
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4449
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4450
+ if (0 === encoding.y.length) encoding.y = [
4451
+ dimensions[0].id
4452
+ ];
4453
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4454
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4455
+ };
4401
4456
  const sortYBandAxis = (advancedVSeed, context)=>{
4402
4457
  const result = {
4403
4458
  ...advancedVSeed
@@ -4416,9 +4471,9 @@ const sortYBandAxis = (advancedVSeed, context)=>{
4416
4471
  };
4417
4472
  const barAdvancedPipeline = [
4418
4473
  initAdvancedVSeed_initAdvancedVSeed,
4474
+ encodingForBar,
4419
4475
  buildMeasures,
4420
4476
  autoDimensions_autoDimensions,
4421
- encodingForBar,
4422
4477
  pivotAdapter([
4423
4478
  reshapeWithEncoding
4424
4479
  ], [
@@ -4936,9 +4991,9 @@ const registerBarPercent = ()=>{
4936
4991
  };
4937
4992
  const areaAdvancedPipeline = [
4938
4993
  initAdvancedVSeed_initAdvancedVSeed,
4994
+ encodingForLine,
4939
4995
  buildMeasures,
4940
4996
  autoDimensions_autoDimensions,
4941
- encodingForColumn,
4942
4997
  pivotAdapter([
4943
4998
  reshapeWithEncoding
4944
4999
  ], [
@@ -5094,9 +5149,9 @@ const registerArea = ()=>{
5094
5149
  };
5095
5150
  const areaPercentAdvancedPipeline = [
5096
5151
  initAdvancedVSeed_initAdvancedVSeed,
5152
+ encodingForLine,
5097
5153
  buildMeasures,
5098
5154
  autoDimensions_autoDimensions,
5099
- encodingForColumn,
5100
5155
  pivotAdapter([
5101
5156
  reshapeWithEncoding
5102
5157
  ], [
@@ -5170,6 +5225,49 @@ const registerAreaPercent = ()=>{
5170
5225
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5171
5226
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5172
5227
  };
5228
+ const encodingForScatter = (advancedVSeed, context)=>{
5229
+ const { vseed } = context;
5230
+ const { measures: vseedMeasures = [] } = vseed;
5231
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5232
+ const dimensions = getBasicDimensions(vseed);
5233
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5234
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5235
+ const encoding = {};
5236
+ if (hasDimensionEncoding) scatter_generateDimensionEncoding(dimensions, encoding);
5237
+ else scatter_generateDefaultDimensionEncoding(dimensions, encoding);
5238
+ if (hasMeasureEncoding) scatter_generateMeasureEncoding(measures, encoding);
5239
+ else scatter_generateDefaultMeasureEncoding(measures, encoding);
5240
+ return {
5241
+ ...advancedVSeed,
5242
+ encoding
5243
+ };
5244
+ };
5245
+ const scatter_generateDefaultMeasureEncoding = (measures, encoding)=>{
5246
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
5247
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5248
+ };
5249
+ const scatter_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5250
+ const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5251
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensionsWithoutMeasureName.map((d)=>d.id));
5252
+ encoding.color = uniqueDimIds.slice(0);
5253
+ encoding.detail = uniqueDimIds.slice(0);
5254
+ encoding.tooltip = uniqueDimIds;
5255
+ encoding.label = [];
5256
+ encoding.row = [];
5257
+ encoding.column = [];
5258
+ };
5259
+ const scatter_generateMeasureEncoding = (measures, encoding)=>{
5260
+ encoding.tooltip = measures.map((item)=>item.id);
5261
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'xAxis' === item.encoding || 'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5262
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5263
+ if (color.length > 0) encoding.color = color;
5264
+ };
5265
+ const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5266
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5267
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5268
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5269
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5270
+ };
5173
5271
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
5174
5272
  const { vseed } = context;
5175
5273
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5260,52 +5358,16 @@ const buildMeasuresForScatter_generateMeasuresByParentId = (measures)=>{
5260
5358
  const encoding = Array.isArray(item.encoding) ? item.encoding : [
5261
5359
  item.encoding
5262
5360
  ];
5263
- const isY = encoding.includes('yAxis');
5264
5361
  const isX = encoding.includes('xAxis');
5362
+ const isY = encoding.includes('yAxis');
5363
+ const isEmpty = !encoding.length;
5265
5364
  if (isY) scatterChart.yMeasures.push(item);
5266
5365
  else if (isX) scatterChart.xMeasures.push(item);
5267
- else if (!isY && !isX) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5366
+ else if (isEmpty) if (0 === scatterChart.yMeasures.length) scatterChart.yMeasures.push(item);
5268
5367
  else scatterChart.xMeasures.push(item);
5269
5368
  });
5270
5369
  return scatterMeasuresToMeasureTree(scatterMeasures);
5271
5370
  };
5272
- const encodingForScatter = (advancedVSeed, context)=>{
5273
- const { vseed } = context;
5274
- const { dimensions } = advancedVSeed;
5275
- if (!dimensions) return advancedVSeed;
5276
- const encoding = vseed.encoding;
5277
- if (encoding) {
5278
- const detail = encoding.detail || [];
5279
- const color = encoding.color || [
5280
- (dimensions[1] || dimensions[0]).id
5281
- ];
5282
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
5283
- ...color,
5284
- ...detail
5285
- ]) : detail;
5286
- return {
5287
- ...advancedVSeed,
5288
- encoding: {
5289
- ...encoding,
5290
- color,
5291
- detail: mergedDetail
5292
- }
5293
- };
5294
- }
5295
- const dimensionsWithoutMeasureName = dimensions.filter((item)=>item.id !== MeasureName);
5296
- const mergedEncoding = {
5297
- color: dimensions.slice(0).map((item)=>item.id),
5298
- detail: dimensionsWithoutMeasureName.slice(0).map((item)=>item.id),
5299
- tooltip: dimensionsWithoutMeasureName.map((item)=>item.id),
5300
- label: [],
5301
- row: [],
5302
- column: []
5303
- };
5304
- return {
5305
- ...advancedVSeed,
5306
- encoding: mergedEncoding
5307
- };
5308
- };
5309
5371
  const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5310
5372
  const result = {
5311
5373
  ...advancedVSeed
@@ -5322,7 +5384,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5322
5384
  const xMeasures = measures[0];
5323
5385
  const yMeasures = measures[1] || xMeasures;
5324
5386
  if (xMeasures && xMeasures.children) {
5325
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, xMeasures.children, encoding, {
5387
+ 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, {
5326
5388
  foldMeasureValue: FoldXMeasureValue,
5327
5389
  colorItemAsId: true,
5328
5390
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5332,7 +5394,7 @@ const reshapeWithScatterEncoding = (advancedVSeed, context)=>{
5332
5394
  unfoldInfoList.push(unfoldInfo);
5333
5395
  }
5334
5396
  if (yMeasures && yMeasures.children) {
5335
- const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(datasets[0], dimensions, yMeasures.children, encoding, {
5397
+ 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, {
5336
5398
  foldMeasureValue: FoldYMeasureValue,
5337
5399
  colorItemAsId: true,
5338
5400
  colorMeasureId: getColorMeasureId(advancedVSeed)
@@ -5436,9 +5498,9 @@ const pivotReshapeWithScatterEncoding = (advancedVSeed, context)=>{
5436
5498
  };
5437
5499
  const scatterAdvancedPipeline = [
5438
5500
  initAdvancedVSeed_initAdvancedVSeed,
5501
+ encodingForScatter,
5439
5502
  buildMeasuresForScatter,
5440
5503
  autoDimensions_autoDimensions,
5441
- encodingForScatter,
5442
5504
  pivotAdapter([
5443
5505
  reshapeWithScatterEncoding
5444
5506
  ], [
@@ -5574,7 +5636,7 @@ const pivotScatter = [
5574
5636
  ]),
5575
5637
  pivotRowDimensions,
5576
5638
  pivotColumnDimensions,
5577
- pivotDiscreteLegend
5639
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
5578
5640
  ];
5579
5641
  const scatterSpecPipeline = [
5580
5642
  pivotAdapter_pivotAdapter(scatter, pivotScatter)
@@ -5583,6 +5645,55 @@ const registerScatter = ()=>{
5583
5645
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5584
5646
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5585
5647
  };
5648
+ const encodingForDualAxis = (advancedVSeed, context)=>{
5649
+ const { vseed } = context;
5650
+ const { measures: vseedMeasures = [] } = vseed;
5651
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5652
+ const dimensions = getBasicDimensions(vseed);
5653
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5654
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
5655
+ const encoding = {};
5656
+ if (hasDimensionEncoding) dualAxis_generateDimensionEncoding(dimensions, encoding);
5657
+ else dualAxis_generateDefaultDimensionEncoding(dimensions, encoding);
5658
+ if (hasMeasureEncoding) dualAxis_generateMeasureEncoding(measures, encoding);
5659
+ else dualAxis_generateDefaultMeasureEncoding(measures, encoding);
5660
+ return {
5661
+ ...advancedVSeed,
5662
+ encoding
5663
+ };
5664
+ };
5665
+ const dualAxis_generateDefaultMeasureEncoding = (measures, encoding)=>{
5666
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
5667
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5668
+ };
5669
+ const dualAxis_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
5670
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
5671
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
5672
+ encoding.x = uniqueDimIds.slice(0, 1);
5673
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5674
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
5675
+ encoding.tooltip = uniqueDimIds;
5676
+ encoding.label = [];
5677
+ encoding.row = [];
5678
+ encoding.column = [];
5679
+ };
5680
+ const dualAxis_generateMeasureEncoding = (measures, encoding)=>{
5681
+ encoding.tooltip = measures.map((item)=>item.id);
5682
+ encoding.y = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'primaryYAxis' === item.encoding || 'secondaryYAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5683
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5684
+ if (color.length > 0) encoding.color = color;
5685
+ return encoding;
5686
+ };
5687
+ const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5688
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
5689
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5690
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5691
+ if (0 === encoding.x.length) encoding.x = [
5692
+ dimensions[0].id
5693
+ ];
5694
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5695
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5696
+ };
5586
5697
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
5587
5698
  const { vseed } = context;
5588
5699
  if (isMeasureTreeWithChildren(vseed)) {
@@ -5675,54 +5786,14 @@ const buildMeasuresForDualAxis_generateMeasuresByParentId = (measures)=>{
5675
5786
  ];
5676
5787
  const isPrimary = encoding.includes('primaryYAxis');
5677
5788
  const isSecondary = encoding.includes('secondaryYAxis');
5789
+ const isEmpty = !item.encoding;
5678
5790
  if (isPrimary) dualChart.primaryMeasures.push(item);
5679
5791
  else if (isSecondary) dualChart.secondaryMeasures.push(item);
5680
- else if (!isPrimary && !isSecondary) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5792
+ else if (isEmpty) if (0 === dualChart.primaryMeasures.length) dualChart.primaryMeasures.push(item);
5681
5793
  else dualChart.secondaryMeasures.push(item);
5682
5794
  });
5683
5795
  return dualMeasuresToMeasureTree(dualMeasures);
5684
5796
  };
5685
- const encodingForDualAxis = (advancedVSeed, context)=>{
5686
- const { vseed } = context;
5687
- const { dimensions } = advancedVSeed;
5688
- if (!dimensions) return advancedVSeed;
5689
- const encoding = vseed.encoding;
5690
- if (encoding) {
5691
- const x = encoding.x || [
5692
- dimensions[0].id
5693
- ];
5694
- const color = encoding.color || [
5695
- (dimensions[1] || dimensions[0]).id
5696
- ];
5697
- const detail = encoding.detail || [];
5698
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
5699
- ...color,
5700
- ...detail
5701
- ]) : detail;
5702
- return {
5703
- ...advancedVSeed,
5704
- encoding: {
5705
- ...encoding,
5706
- x,
5707
- color,
5708
- detail: mergedDetail
5709
- }
5710
- };
5711
- }
5712
- const mergedEncoding = {
5713
- x: dimensions.slice(0, 1).map((item)=>item.id),
5714
- color: dimensions.slice(1).map((item)=>item.id),
5715
- detail: dimensions.slice(1).map((item)=>item.id),
5716
- tooltip: dimensions.map((item)=>item.id),
5717
- label: [],
5718
- row: [],
5719
- column: []
5720
- };
5721
- return {
5722
- ...advancedVSeed,
5723
- encoding: mergedEncoding
5724
- };
5725
- };
5726
5797
  const reshapeWithDualEncoding = (advancedVSeed, context)=>{
5727
5798
  const result = {
5728
5799
  ...advancedVSeed
@@ -5872,9 +5943,9 @@ const dualAxisConfig = (advancedVSeed, context)=>{
5872
5943
  };
5873
5944
  const dualAxisAdvancedPipeline = [
5874
5945
  initAdvancedVSeed_initAdvancedVSeed,
5946
+ encodingForDualAxis,
5875
5947
  buildMeasuresForDualAxis,
5876
5948
  autoDimensions_autoDimensions,
5877
- encodingForDualAxis,
5878
5949
  pivotAdapter([
5879
5950
  reshapeWithDualEncoding
5880
5951
  ], [
@@ -6709,33 +6780,51 @@ const registerDualAxis = ()=>{
6709
6780
  };
6710
6781
  const encodingForPie = (advancedVSeed, context)=>{
6711
6782
  const { vseed } = context;
6712
- const { dimensions } = advancedVSeed;
6713
- if (!dimensions) return advancedVSeed;
6714
- const encoding = vseed.encoding;
6715
- if (encoding) return {
6716
- ...advancedVSeed,
6717
- encoding: {
6718
- ...encoding
6719
- }
6720
- };
6721
- const mergedEncoding = {
6722
- color: dimensions.slice(0).map((item)=>item.id),
6723
- detail: dimensions.slice(0).map((item)=>item.id),
6724
- tooltip: dimensions.map((item)=>item.id),
6725
- label: [],
6726
- row: [],
6727
- column: []
6728
- };
6783
+ const { measures: vseedMeasures = [] } = vseed;
6784
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
6785
+ const dimensions = getBasicDimensions(vseed);
6786
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
6787
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
6788
+ const encoding = {};
6789
+ if (hasDimensionEncoding) pie_generateDimensionEncoding(dimensions, encoding);
6790
+ else pie_generateDefaultDimensionEncoding(dimensions, encoding);
6791
+ if (hasMeasureEncoding) pie_generateMeasureEncoding(measures, encoding);
6792
+ else pie_generateDefaultMeasureEncoding(measures, encoding);
6729
6793
  return {
6730
6794
  ...advancedVSeed,
6731
- encoding: mergedEncoding
6732
- };
6795
+ encoding
6796
+ };
6797
+ };
6798
+ const pie_generateDefaultMeasureEncoding = (measures, encoding)=>{
6799
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
6800
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6801
+ };
6802
+ const pie_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
6803
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
6804
+ encoding.color = uniqueDimIds.slice(0);
6805
+ encoding.detail = uniqueDimIds.slice(0);
6806
+ encoding.tooltip = uniqueDimIds;
6807
+ encoding.label = [];
6808
+ encoding.row = [];
6809
+ encoding.column = [];
6810
+ };
6811
+ const pie_generateMeasureEncoding = (measures, encoding)=>{
6812
+ encoding.tooltip = measures.map((item)=>item.id);
6813
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
6814
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6815
+ if (color.length > 0) encoding.color = color;
6816
+ };
6817
+ const pie_generateDimensionEncoding = (dimensions, encoding)=>{
6818
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
6819
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
6820
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
6821
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
6733
6822
  };
6734
6823
  const pieAdvancedPipeline = [
6735
6824
  initAdvancedVSeed_initAdvancedVSeed,
6825
+ encodingForPie,
6736
6826
  buildMeasures,
6737
6827
  autoDimensions_autoDimensions,
6738
- encodingForPie,
6739
6828
  pivotAdapter([
6740
6829
  reshapeWithEncoding
6741
6830
  ], [
@@ -6750,9 +6839,8 @@ const initPie = (spec, context)=>{
6750
6839
  ...spec
6751
6840
  };
6752
6841
  const { advancedVSeed } = context;
6753
- const { datasetReshapeInfo, dataset } = advancedVSeed;
6842
+ const { datasetReshapeInfo } = advancedVSeed;
6754
6843
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
6755
- const showStroke = dataset.length <= 30;
6756
6844
  result.type = 'pie';
6757
6845
  result.outerRadius = 0.8;
6758
6846
  result.innerRadius = 0;
@@ -6764,30 +6852,57 @@ const initPie = (spec, context)=>{
6764
6852
  clip: true
6765
6853
  }
6766
6854
  ];
6767
- result.pie = {
6768
- style: {
6769
- stroke: '#ffffff',
6770
- lineWidth: showStroke ? 1 : 0,
6771
- centerOffset: 0
6772
- },
6773
- state: {
6774
- hover: {
6775
- outerRadius: 1.1 * result.outerRadius
6855
+ result.animation = true;
6856
+ return result;
6857
+ };
6858
+ const colorPieStyleFill = (stylePipe)=>(spec, context)=>{
6859
+ const result = stylePipe(spec, context);
6860
+ const { advancedVSeed } = context;
6861
+ const { datasetReshapeInfo } = advancedVSeed;
6862
+ const { unfoldInfo } = datasetReshapeInfo[0];
6863
+ if (isLinearColor(advancedVSeed)) {
6864
+ if (result?.pie?.style) result.pie.style.fill = {
6865
+ field: unfoldInfo.encodingColor,
6866
+ scale: 'color'
6867
+ };
6868
+ }
6869
+ return result;
6870
+ };
6871
+ const pieStyle = (spec, context)=>{
6872
+ const { advancedVSeed } = context;
6873
+ const { dataset } = advancedVSeed;
6874
+ const showStroke = dataset.length <= 30;
6875
+ const result = {
6876
+ ...spec,
6877
+ pie: {
6878
+ style: {}
6879
+ }
6880
+ };
6881
+ return {
6882
+ ...result,
6883
+ pie: {
6884
+ style: {
6885
+ stroke: '#ffffff',
6886
+ lineWidth: showStroke ? 1 : 0
6887
+ },
6888
+ state: {
6889
+ hover: {
6890
+ outerRadius: 1.1 * result.outerRadius
6891
+ }
6776
6892
  }
6777
6893
  }
6778
6894
  };
6779
- result.animation = true;
6780
- return result;
6781
6895
  };
6782
6896
  const pie = [
6783
6897
  initPie,
6784
- color_color,
6898
+ colorAdapter(color_color, linearColor),
6785
6899
  background_backgroundColor,
6786
6900
  datasetXY,
6787
6901
  progressive,
6902
+ colorPieStyleFill(pieStyle),
6903
+ colorAdapter(discreteLegend, colorLegend),
6788
6904
  label_label,
6789
6905
  tooltip_tooltip,
6790
- discreteLegend,
6791
6906
  annotationPoint_annotationPoint,
6792
6907
  annotationVerticalLine_annotationVerticalLine,
6793
6908
  annotationHorizontalLine_annotationHorizontalLine,
@@ -6800,10 +6915,11 @@ const pivotPie = [
6800
6915
  datasetPivot,
6801
6916
  pivotIndicators_pivotIndicators([
6802
6917
  initPie,
6803
- color_color,
6918
+ colorAdapter(color_color, linearColor),
6804
6919
  background_backgroundColor,
6805
6920
  datasetXY,
6806
6921
  progressive,
6922
+ colorPieStyleFill(pieStyle),
6807
6923
  label_label,
6808
6924
  tooltip_tooltip,
6809
6925
  annotationPoint_annotationPoint,
@@ -6813,7 +6929,7 @@ const pivotPie = [
6813
6929
  ]),
6814
6930
  pivotRowDimensions,
6815
6931
  pivotColumnDimensions,
6816
- pivotDiscreteLegend
6932
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
6817
6933
  ];
6818
6934
  const pieSpecPipeline = [
6819
6935
  pivotAdapter_pivotAdapter(pie, pivotPie)
@@ -6841,43 +6957,32 @@ const initDonut = (spec, context)=>{
6841
6957
  ...spec
6842
6958
  };
6843
6959
  const { advancedVSeed } = context;
6844
- const { datasetReshapeInfo, dataset } = advancedVSeed;
6960
+ const { datasetReshapeInfo } = advancedVSeed;
6845
6961
  const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
6846
- const showStroke = dataset.length <= 30;
6847
6962
  result.type = 'pie';
6848
6963
  result.outerRadius = 0.8;
6849
6964
  result.innerRadius = 0.8 * result.outerRadius;
6850
6965
  result.valueField = foldInfo.measureValue;
6851
6966
  result.categoryField = unfoldInfo.encodingColorId;
6852
6967
  result.padding = 0;
6853
- result.region = [
6854
- {
6855
- clip: true
6856
- }
6857
- ];
6858
- result.pie = {
6859
- style: {
6860
- stroke: '#ffffff',
6861
- lineWidth: showStroke ? 1 : 0
6862
- },
6863
- state: {
6864
- hover: {
6865
- outerRadius: 1.1 * result.outerRadius
6866
- }
6968
+ result.region = [
6969
+ {
6970
+ clip: true
6867
6971
  }
6868
- };
6972
+ ];
6869
6973
  result.animation = true;
6870
6974
  return result;
6871
6975
  };
6872
6976
  const donut = [
6873
6977
  initDonut,
6874
- color_color,
6978
+ colorAdapter(color_color, linearColor),
6875
6979
  background_backgroundColor,
6876
6980
  datasetXY,
6877
6981
  progressive,
6878
6982
  label_label,
6983
+ colorPieStyleFill(pieStyle),
6984
+ colorAdapter(discreteLegend, colorLegend),
6879
6985
  tooltip_tooltip,
6880
- discreteLegend,
6881
6986
  annotationPoint_annotationPoint,
6882
6987
  annotationVerticalLine_annotationVerticalLine,
6883
6988
  annotationHorizontalLine_annotationHorizontalLine,
@@ -6890,11 +6995,12 @@ const pivotDonut = [
6890
6995
  datasetPivot,
6891
6996
  pivotIndicators_pivotIndicators([
6892
6997
  initDonut,
6893
- color_color,
6998
+ colorAdapter(color_color, linearColor),
6894
6999
  background_backgroundColor,
6895
7000
  datasetXY,
6896
7001
  progressive,
6897
7002
  label_label,
7003
+ colorPieStyleFill(pieStyle),
6898
7004
  tooltip_tooltip,
6899
7005
  annotationPoint_annotationPoint,
6900
7006
  annotationVerticalLine_annotationVerticalLine,
@@ -6903,7 +7009,7 @@ const pivotDonut = [
6903
7009
  ]),
6904
7010
  pivotRowDimensions,
6905
7011
  pivotColumnDimensions,
6906
- pivotDiscreteLegend
7012
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
6907
7013
  ];
6908
7014
  const donutSpecPipeline = [
6909
7015
  pivotAdapter_pivotAdapter(donut, pivotDonut)
@@ -6914,51 +7020,57 @@ const registerDonut = ()=>{
6914
7020
  };
6915
7021
  const encodingForRose = (advancedVSeed, context)=>{
6916
7022
  const { vseed } = context;
6917
- const { dimensions } = advancedVSeed;
6918
- if (!dimensions) return advancedVSeed;
6919
- const encoding = vseed.encoding;
6920
- if (encoding) {
6921
- const angle = encoding.angle || [
6922
- dimensions[0].id
6923
- ];
6924
- const color = encoding.color || [
6925
- (dimensions[1] || dimensions[0]).id
6926
- ];
6927
- const detail = encoding.detail || [];
6928
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
6929
- ...color,
6930
- ...detail
6931
- ]) : detail;
6932
- return {
6933
- ...advancedVSeed,
6934
- encoding: {
6935
- ...encoding,
6936
- angle,
6937
- color,
6938
- detail: mergedDetail
6939
- }
6940
- };
6941
- }
6942
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
6943
- const mergedEncoding = {
6944
- angle: dimensions.slice(0, 1).map((item)=>item.id),
6945
- color: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6946
- detail: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
6947
- tooltip: dimensions.map((item)=>item.id),
6948
- label: [],
6949
- row: [],
6950
- column: []
6951
- };
7023
+ const { measures: vseedMeasures = [] } = vseed;
7024
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7025
+ const dimensions = getBasicDimensions(vseed);
7026
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7027
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7028
+ const encoding = {};
7029
+ if (hasDimensionEncoding) rose_generateDimensionEncoding(dimensions, encoding);
7030
+ else rose_generateDefaultDimensionEncoding(dimensions, encoding);
7031
+ if (hasMeasureEncoding) rose_generateMeasureEncoding(measures, encoding);
7032
+ else rose_generateDefaultMeasureEncoding(measures, encoding);
6952
7033
  return {
6953
7034
  ...advancedVSeed,
6954
- encoding: mergedEncoding
7035
+ encoding
6955
7036
  };
6956
7037
  };
7038
+ const rose_generateDefaultMeasureEncoding = (measures, encoding)=>{
7039
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7040
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7041
+ };
7042
+ const rose_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7043
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7044
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7045
+ encoding.angle = uniqueDimIds.slice(0, 1);
7046
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7047
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7048
+ encoding.tooltip = uniqueDimIds;
7049
+ encoding.label = [];
7050
+ encoding.row = [];
7051
+ encoding.column = [];
7052
+ };
7053
+ const rose_generateMeasureEncoding = (measures, encoding)=>{
7054
+ encoding.tooltip = measures.map((item)=>item.id);
7055
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7056
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7057
+ if (color.length > 0) encoding.color = color;
7058
+ };
7059
+ const rose_generateDimensionEncoding = (dimensions, encoding)=>{
7060
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7061
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7062
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7063
+ if (0 === encoding.angle.length) encoding.angle = [
7064
+ dimensions[0].id
7065
+ ];
7066
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7067
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7068
+ };
6957
7069
  const roseAdvancedPipeline = [
6958
7070
  initAdvancedVSeed_initAdvancedVSeed,
7071
+ encodingForRose,
6959
7072
  buildMeasures,
6960
7073
  autoDimensions_autoDimensions,
6961
- encodingForRose,
6962
7074
  pivotAdapter([
6963
7075
  reshapeWithEncoding
6964
7076
  ], [
@@ -6985,18 +7097,6 @@ const initRose = (spec, context)=>{
6985
7097
  result.innerRadius = 0;
6986
7098
  const hasNegativeValue = dataset.flat().find((d)=>d[foldInfo.measureValue] < 0);
6987
7099
  if (hasNegativeValue) result.innerRadius = 0.05;
6988
- result.rose = {
6989
- style: {
6990
- stroke: '#ffffff',
6991
- lineWidth: 1
6992
- },
6993
- state: {
6994
- hover: {
6995
- lineWidth: 1,
6996
- fillOpacity: 0.6
6997
- }
6998
- }
6999
- };
7000
7100
  result.region = [
7001
7101
  {
7002
7102
  clip: true
@@ -7005,7 +7105,7 @@ const initRose = (spec, context)=>{
7005
7105
  result.animation = true;
7006
7106
  return result;
7007
7107
  };
7008
- const radiusAxis = (spec, context)=>{
7108
+ const angleAxis = (spec, context)=>{
7009
7109
  const result = {
7010
7110
  ...spec
7011
7111
  };
@@ -7017,26 +7117,37 @@ const radiusAxis = (spec, context)=>{
7017
7117
  const showAxis = !(is0D || is1M1D);
7018
7118
  if (!result.axes) result.axes = [];
7019
7119
  result.axes.push({
7020
- orient: 'radius',
7120
+ orient: 'angle',
7021
7121
  visible: showAxis,
7022
7122
  zero: true,
7023
7123
  nice: !!showAxis,
7124
+ paddingInner: showAxis ? [
7125
+ 0.15,
7126
+ 0.1
7127
+ ] : [
7128
+ 0,
7129
+ 0
7130
+ ],
7131
+ paddingOuter: showAxis ? [
7132
+ 0.075,
7133
+ 0.1
7134
+ ] : [
7135
+ 0,
7136
+ 0
7137
+ ],
7024
7138
  grid: {
7025
7139
  visible: showAxis
7026
7140
  },
7027
- tick: {
7028
- visible: showAxis
7029
- },
7030
- label: {
7141
+ domainLine: {
7031
7142
  visible: showAxis
7032
7143
  },
7033
- domainLine: {
7144
+ tick: {
7034
7145
  visible: showAxis
7035
7146
  }
7036
7147
  });
7037
7148
  return result;
7038
7149
  };
7039
- const angleAxis = (spec, context)=>{
7150
+ const radiusAxis = (spec, context)=>{
7040
7151
  const result = {
7041
7152
  ...spec
7042
7153
  };
@@ -7048,50 +7159,79 @@ const angleAxis = (spec, context)=>{
7048
7159
  const showAxis = !(is0D || is1M1D);
7049
7160
  if (!result.axes) result.axes = [];
7050
7161
  result.axes.push({
7051
- orient: 'angle',
7162
+ orient: 'radius',
7052
7163
  visible: showAxis,
7053
7164
  zero: true,
7054
7165
  nice: !!showAxis,
7055
- paddingInner: showAxis ? [
7056
- 0.15,
7057
- 0.1
7058
- ] : [
7059
- 0,
7060
- 0
7061
- ],
7062
- paddingOuter: showAxis ? [
7063
- 0.075,
7064
- 0.1
7065
- ] : [
7066
- 0,
7067
- 0
7068
- ],
7069
7166
  grid: {
7070
7167
  visible: showAxis
7071
7168
  },
7072
- domainLine: {
7169
+ tick: {
7073
7170
  visible: showAxis
7074
7171
  },
7075
- tick: {
7172
+ label: {
7173
+ visible: showAxis
7174
+ },
7175
+ domainLine: {
7076
7176
  visible: showAxis
7077
7177
  }
7078
7178
  });
7079
7179
  return result;
7080
7180
  };
7181
+ const colorRoseStyleFill = (stylePipe)=>(spec, context)=>{
7182
+ const result = stylePipe(spec, context);
7183
+ const { advancedVSeed } = context;
7184
+ const { datasetReshapeInfo } = advancedVSeed;
7185
+ const { unfoldInfo } = datasetReshapeInfo[0];
7186
+ if (isLinearColor(advancedVSeed)) {
7187
+ if (result?.rose?.style) result.rose.style.fill = {
7188
+ field: unfoldInfo.encodingColor,
7189
+ scale: 'color'
7190
+ };
7191
+ }
7192
+ return result;
7193
+ };
7194
+ const roseStyle = (spec, context)=>{
7195
+ const { advancedVSeed } = context;
7196
+ const { dataset } = advancedVSeed;
7197
+ const showStroke = dataset.length <= 30;
7198
+ const result = {
7199
+ ...spec,
7200
+ rose: {
7201
+ style: {}
7202
+ }
7203
+ };
7204
+ return {
7205
+ ...result,
7206
+ rose: {
7207
+ style: {
7208
+ stroke: '#ffffff',
7209
+ lineWidth: showStroke ? 1 : 0
7210
+ },
7211
+ state: {
7212
+ hover: {
7213
+ lineWidth: 1,
7214
+ fillOpacity: 0.6
7215
+ }
7216
+ }
7217
+ }
7218
+ };
7219
+ };
7081
7220
  const rose = [
7082
7221
  initRose,
7083
7222
  stackCornerRadius_stackCornerRadius,
7084
7223
  stackInverse,
7085
- color_color,
7224
+ colorAdapter(color_color, linearColor),
7086
7225
  background_backgroundColor,
7087
7226
  datasetXY,
7088
7227
  progressive,
7089
- radiusAxis,
7090
7228
  angleAxis,
7091
- label_label,
7092
- tooltip_tooltip,
7229
+ radiusAxis,
7093
7230
  verticalCrosshairRect,
7094
- discreteLegend
7231
+ colorRoseStyleFill(roseStyle),
7232
+ colorAdapter(discreteLegend, colorLegend),
7233
+ label_label,
7234
+ tooltip_tooltip
7095
7235
  ];
7096
7236
  const pivotRose = [
7097
7237
  initPivot,
@@ -7102,19 +7242,20 @@ const pivotRose = [
7102
7242
  initRose,
7103
7243
  stackCornerRadius_stackCornerRadius,
7104
7244
  stackInverse,
7105
- color_color,
7245
+ colorAdapter(color_color, linearColor),
7106
7246
  background_backgroundColor,
7107
7247
  datasetXY,
7108
7248
  progressive,
7109
7249
  radiusAxis,
7110
7250
  angleAxis,
7251
+ verticalCrosshairRect,
7252
+ colorRoseStyleFill(roseStyle),
7111
7253
  label_label,
7112
- tooltip_tooltip,
7113
- verticalCrosshairRect
7254
+ tooltip_tooltip
7114
7255
  ]),
7115
7256
  pivotRowDimensions,
7116
7257
  pivotColumnDimensions,
7117
- pivotDiscreteLegend
7258
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7118
7259
  ];
7119
7260
  const roseSpecPipeline = [
7120
7261
  pivotAdapter_pivotAdapter(rose, pivotRose)
@@ -7125,9 +7266,9 @@ const registerRose = ()=>{
7125
7266
  };
7126
7267
  const roseParallelAdvancedPipeline = [
7127
7268
  initAdvancedVSeed_initAdvancedVSeed,
7269
+ encodingForRose,
7128
7270
  buildMeasures,
7129
7271
  autoDimensions_autoDimensions,
7130
- encodingForRose,
7131
7272
  pivotAdapter([
7132
7273
  reshapeWithEncoding
7133
7274
  ], [
@@ -7183,15 +7324,16 @@ const initRoseParallel = (spec, context)=>{
7183
7324
  const roseParallel = [
7184
7325
  initRoseParallel,
7185
7326
  stackCornerRadius_stackCornerRadius,
7186
- color_color,
7327
+ colorAdapter(color_color, linearColor),
7187
7328
  background_backgroundColor,
7188
7329
  datasetXY,
7189
7330
  progressive,
7190
7331
  radiusAxis,
7191
7332
  angleAxis,
7333
+ colorRoseStyleFill(roseStyle),
7334
+ colorAdapter(discreteLegend, colorLegend),
7192
7335
  label_label,
7193
7336
  tooltip_tooltip,
7194
- discreteLegend,
7195
7337
  verticalCrosshairRect,
7196
7338
  annotationPoint_annotationPoint,
7197
7339
  annotationVerticalLine_annotationVerticalLine,
@@ -7206,15 +7348,16 @@ const pivotRoseParallel = [
7206
7348
  pivotIndicators_pivotIndicators([
7207
7349
  initRoseParallel,
7208
7350
  stackCornerRadius_stackCornerRadius,
7209
- color_color,
7351
+ colorAdapter(color_color, linearColor),
7210
7352
  background_backgroundColor,
7211
7353
  datasetXY,
7212
7354
  progressive,
7213
7355
  radiusAxis,
7214
7356
  angleAxis,
7357
+ verticalCrosshairRect,
7358
+ colorRoseStyleFill(roseStyle),
7215
7359
  label_label,
7216
7360
  tooltip_tooltip,
7217
- verticalCrosshairRect,
7218
7361
  annotationPoint_annotationPoint,
7219
7362
  annotationVerticalLine_annotationVerticalLine,
7220
7363
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7222,7 +7365,7 @@ const pivotRoseParallel = [
7222
7365
  ]),
7223
7366
  pivotRowDimensions,
7224
7367
  pivotColumnDimensions,
7225
- pivotDiscreteLegend
7368
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7226
7369
  ];
7227
7370
  const roseParallelSpecPipeline = [
7228
7371
  pivotAdapter_pivotAdapter(roseParallel, pivotRoseParallel)
@@ -7233,50 +7376,55 @@ const registerRoseParallel = ()=>{
7233
7376
  };
7234
7377
  const encodingForRadar = (advancedVSeed, context)=>{
7235
7378
  const { vseed } = context;
7236
- const { dimensions } = advancedVSeed;
7237
- if (!dimensions) return advancedVSeed;
7238
- const encoding = vseed.encoding;
7239
- if (encoding) {
7240
- const angle = encoding.angle || [
7241
- dimensions[0].id
7242
- ];
7243
- const color = encoding.color || [
7244
- (dimensions[1] || dimensions[0]).id
7245
- ];
7246
- const detail = encoding.detail || [];
7247
- const mergedDetail = 0 === detail.length ? (0, external_remeda_namespaceObject.unique)([
7248
- ...color,
7249
- ...detail
7250
- ]) : detail;
7251
- return {
7252
- ...advancedVSeed,
7253
- encoding: {
7254
- ...encoding,
7255
- angle,
7256
- color,
7257
- detail: mergedDetail
7258
- }
7259
- };
7260
- }
7261
- const mergedEncoding = {
7262
- angle: dimensions.slice(0, 1).map((item)=>item.id),
7263
- color: dimensions.slice(1).map((item)=>item.id),
7264
- detail: dimensions.slice(1).map((item)=>item.id),
7265
- tooltip: dimensions.map((item)=>item.id),
7266
- label: [],
7267
- row: [],
7268
- column: []
7269
- };
7379
+ const { measures: vseedMeasures = [] } = vseed;
7380
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7381
+ const dimensions = getBasicDimensions(vseed);
7382
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7383
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7384
+ const encoding = {};
7385
+ if (hasDimensionEncoding) radar_generateDimensionEncoding(dimensions, encoding);
7386
+ else radar_generateDefaultDimensionEncoding(dimensions, encoding);
7387
+ if (hasMeasureEncoding) radar_generateMeasureEncoding(measures, encoding);
7388
+ else radar_generateDefaultMeasureEncoding(measures, encoding);
7270
7389
  return {
7271
7390
  ...advancedVSeed,
7272
- encoding: mergedEncoding
7273
- };
7391
+ encoding
7392
+ };
7393
+ };
7394
+ const radar_generateDefaultMeasureEncoding = (measures, encoding)=>{
7395
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7396
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7397
+ };
7398
+ const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7399
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7400
+ encoding.angle = uniqueDimIds.slice(0, 1);
7401
+ encoding.color = uniqueDimIds.slice(1);
7402
+ encoding.tooltip = uniqueDimIds;
7403
+ encoding.detail = [];
7404
+ encoding.label = [];
7405
+ encoding.row = [];
7406
+ encoding.column = [];
7407
+ };
7408
+ const radar_generateMeasureEncoding = (measures, encoding)=>{
7409
+ encoding.tooltip = measures.map((item)=>item.id);
7410
+ encoding.radius = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7411
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7412
+ if (color.length > 0) encoding.color = color;
7413
+ };
7414
+ const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7415
+ encoding.angle = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7416
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7417
+ encoding.detail = [];
7418
+ if (0 === encoding.angle.length) encoding.angle = [
7419
+ dimensions[0].id
7420
+ ];
7421
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7274
7422
  };
7275
7423
  const radarAdvancedPipeline = [
7276
7424
  initAdvancedVSeed_initAdvancedVSeed,
7425
+ encodingForRadar,
7277
7426
  buildMeasures,
7278
7427
  autoDimensions_autoDimensions,
7279
- encodingForRadar,
7280
7428
  pivotAdapter([
7281
7429
  reshapeWithEncoding
7282
7430
  ], [
@@ -7412,33 +7560,51 @@ const registerRadar = ()=>{
7412
7560
  };
7413
7561
  const encodingForFunnel = (advancedVSeed, context)=>{
7414
7562
  const { vseed } = context;
7415
- const { dimensions } = advancedVSeed;
7416
- if (!dimensions) return advancedVSeed;
7417
- const encoding = vseed.encoding;
7418
- if (encoding) return {
7419
- ...advancedVSeed,
7420
- encoding: {
7421
- ...encoding
7422
- }
7423
- };
7424
- const mergedEncoding = {
7425
- color: dimensions.slice(0).map((item)=>item.id),
7426
- detail: dimensions.slice(0).map((item)=>item.id),
7427
- tooltip: dimensions.map((item)=>item.id),
7428
- label: [],
7429
- row: [],
7430
- column: []
7431
- };
7563
+ const { measures: vseedMeasures = [] } = vseed;
7564
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7565
+ const dimensions = getBasicDimensions(vseed);
7566
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7567
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7568
+ const encoding = {};
7569
+ if (hasDimensionEncoding) funnel_generateDimensionEncoding(dimensions, encoding);
7570
+ else funnel_generateDefaultDimensionEncoding(dimensions, encoding);
7571
+ if (hasMeasureEncoding) funnel_generateMeasureEncoding(measures, encoding);
7572
+ else funnel_generateDefaultMeasureEncoding(measures, encoding);
7432
7573
  return {
7433
7574
  ...advancedVSeed,
7434
- encoding: mergedEncoding
7435
- };
7575
+ encoding
7576
+ };
7577
+ };
7578
+ const funnel_generateDefaultMeasureEncoding = (measures, encoding)=>{
7579
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7580
+ encoding.size = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7581
+ };
7582
+ const funnel_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7583
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7584
+ encoding.color = uniqueDimIds.slice(0);
7585
+ encoding.detail = uniqueDimIds.slice(0);
7586
+ encoding.tooltip = uniqueDimIds;
7587
+ encoding.label = [];
7588
+ encoding.row = [];
7589
+ encoding.column = [];
7590
+ };
7591
+ const funnel_generateMeasureEncoding = (measures, encoding)=>{
7592
+ encoding.tooltip = measures.map((item)=>item.id);
7593
+ encoding.size = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'size' === item.encoding || !item.encoding).map((item)=>item.id));
7594
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7595
+ if (color.length > 0) encoding.color = color;
7596
+ };
7597
+ const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7598
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7599
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7600
+ if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7601
+ if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7436
7602
  };
7437
7603
  const funnelAdvancedPipeline = [
7438
7604
  initAdvancedVSeed_initAdvancedVSeed,
7605
+ encodingForFunnel,
7439
7606
  buildMeasures,
7440
7607
  autoDimensions_autoDimensions,
7441
- encodingForFunnel,
7442
7608
  pivotAdapter([
7443
7609
  reshapeWithEncoding
7444
7610
  ], [
@@ -7468,34 +7634,55 @@ const initFunnel = (spec, context)=>{
7468
7634
  clip: true
7469
7635
  }
7470
7636
  ];
7471
- result.funnel = {
7472
- style: {
7473
- cornerRadius: 4,
7474
- fill: {
7475
- field: unfoldInfo.encodingColorId,
7476
- scale: 'color'
7477
- }
7478
- },
7479
- state: {
7480
- hover: {
7481
- fillOpacity: 0.6
7482
- }
7483
- }
7484
- };
7485
7637
  result.transformLabel = {
7486
7638
  visible: true
7487
7639
  };
7488
7640
  result.animation = true;
7489
7641
  return result;
7490
7642
  };
7643
+ const colorFunnelStyleFill = (stylePipe)=>(spec, context)=>{
7644
+ const result = stylePipe(spec, context);
7645
+ const { advancedVSeed } = context;
7646
+ const { datasetReshapeInfo } = advancedVSeed;
7647
+ const { unfoldInfo } = datasetReshapeInfo[0];
7648
+ if (isLinearColor(advancedVSeed)) {
7649
+ if (result?.funnel?.style) result.funnel.style.fill = {
7650
+ field: unfoldInfo.encodingColor,
7651
+ scale: 'color'
7652
+ };
7653
+ }
7654
+ return result;
7655
+ };
7656
+ const funnelStyle = (spec)=>{
7657
+ const result = {
7658
+ ...spec,
7659
+ funnel: {
7660
+ style: {}
7661
+ }
7662
+ };
7663
+ return {
7664
+ ...result,
7665
+ funnel: {
7666
+ style: {
7667
+ cornerRadius: 4
7668
+ },
7669
+ state: {
7670
+ hover: {
7671
+ fillOpacity: 0.6
7672
+ }
7673
+ }
7674
+ }
7675
+ };
7676
+ };
7491
7677
  const funnel = [
7492
7678
  initFunnel,
7493
7679
  background_backgroundColor,
7494
7680
  datasetXY,
7495
- color_color,
7681
+ colorAdapter(color_color, linearColor),
7496
7682
  label_label,
7683
+ colorAdapter(discreteLegend, colorLegend),
7684
+ colorFunnelStyleFill(funnelStyle),
7497
7685
  tooltip_tooltip,
7498
- discreteLegend,
7499
7686
  annotationPoint_annotationPoint,
7500
7687
  annotationVerticalLine_annotationVerticalLine,
7501
7688
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7510,17 +7697,18 @@ const pivotFunnel = [
7510
7697
  initFunnel,
7511
7698
  background_backgroundColor,
7512
7699
  datasetXY,
7513
- color_color,
7700
+ colorAdapter(color_color, linearColor),
7514
7701
  label_label,
7515
7702
  tooltip_tooltip,
7516
- discreteLegend,
7703
+ colorFunnelStyleFill(funnelStyle),
7517
7704
  annotationPoint_annotationPoint,
7518
7705
  annotationVerticalLine_annotationVerticalLine,
7519
7706
  annotationHorizontalLine_annotationHorizontalLine,
7520
7707
  annotationArea_annotationArea
7521
7708
  ]),
7522
7709
  pivotRowDimensions,
7523
- pivotColumnDimensions
7710
+ pivotColumnDimensions,
7711
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7524
7712
  ];
7525
7713
  const funnelSpecPipeline = [
7526
7714
  pivotAdapter_pivotAdapter(funnel, pivotFunnel)
@@ -7531,45 +7719,61 @@ const registerFunnel = ()=>{
7531
7719
  };
7532
7720
  const encodingForHeatmap = (advancedVSeed, context)=>{
7533
7721
  const { vseed } = context;
7534
- const { dimensions } = advancedVSeed;
7535
- if (!dimensions) return advancedVSeed;
7536
- const encoding = vseed.encoding;
7537
- if (encoding) {
7538
- const x = encoding.x || [
7539
- dimensions[0].id
7540
- ];
7541
- const y = encoding.y || [
7542
- (dimensions[1] || dimensions[0]).id
7543
- ];
7544
- return {
7545
- ...advancedVSeed,
7546
- encoding: {
7547
- x,
7548
- y,
7549
- ...encoding
7550
- }
7551
- };
7552
- }
7553
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7554
- const mergedEncoding = {
7555
- x: dimensions.slice(0, 1).map((item)=>item.id),
7556
- y: dimensions.slice(onlyMeasureName ? 0 : 1).map((item)=>item.id),
7557
- color: dimensions.slice(0).map((item)=>item.id),
7558
- tooltip: dimensions.map((item)=>item.id),
7559
- label: [],
7560
- row: [],
7561
- column: []
7562
- };
7722
+ const { measures: vseedMeasures = [] } = vseed;
7723
+ const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7724
+ const dimensions = getBasicDimensions(vseed);
7725
+ const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7726
+ const hasMeasureEncoding = measures.some((item)=>item.encoding);
7727
+ const encoding = {};
7728
+ if (hasDimensionEncoding) heatmap_generateDimensionEncoding(dimensions, encoding);
7729
+ else heatmap_generateDefaultDimensionEncoding(dimensions, encoding);
7730
+ if (hasMeasureEncoding) heatmap_generateMeasureEncoding(measures, encoding);
7731
+ else heatmap_generateDefaultMeasureEncoding(measures, encoding);
7563
7732
  return {
7564
7733
  ...advancedVSeed,
7565
- encoding: mergedEncoding
7734
+ encoding
7566
7735
  };
7567
7736
  };
7737
+ const heatmap_generateDefaultMeasureEncoding = (measures, encoding)=>{
7738
+ encoding.tooltip = (0, external_remeda_namespaceObject.unique)(measures.map((item)=>item.id));
7739
+ encoding.color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding || !item.encoding).map((item)=>item.id));
7740
+ };
7741
+ const heatmap_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7742
+ const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7743
+ const uniqueDimIds = (0, external_remeda_namespaceObject.unique)(dimensions.map((d)=>d.id));
7744
+ encoding.x = uniqueDimIds.slice(0, 1);
7745
+ encoding.y = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7746
+ encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7747
+ encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7748
+ encoding.tooltip = uniqueDimIds;
7749
+ encoding.label = [];
7750
+ encoding.row = [];
7751
+ encoding.column = [];
7752
+ };
7753
+ const heatmap_generateMeasureEncoding = (measures, encoding)=>{
7754
+ encoding.tooltip = measures.map((item)=>item.id);
7755
+ const color = (0, external_remeda_namespaceObject.unique)(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7756
+ if (color.length > 0) encoding.color = color;
7757
+ return encoding;
7758
+ };
7759
+ const heatmap_generateDimensionEncoding = (dimensions, encoding)=>{
7760
+ encoding.x = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
7761
+ encoding.y = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
7762
+ encoding.color = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7763
+ encoding.detail = (0, external_remeda_namespaceObject.unique)(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7764
+ if (0 === encoding.x.length) encoding.x = [
7765
+ dimensions[0].id
7766
+ ];
7767
+ if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7768
+ else encoding.y = dimensions.slice(0).map((item)=>item.id);
7769
+ if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7770
+ if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7771
+ };
7568
7772
  const heatmapAdvancedPipeline = [
7569
7773
  initAdvancedVSeed_initAdvancedVSeed,
7774
+ encodingForHeatmap,
7570
7775
  buildMeasures,
7571
7776
  autoDimensions_autoDimensions,
7572
- encodingForHeatmap,
7573
7777
  pivotAdapter([
7574
7778
  reshapeWithEncoding
7575
7779
  ], [
@@ -7591,6 +7795,37 @@ const labelColorInversion = (spec)=>{
7591
7795
  };
7592
7796
  return result;
7593
7797
  };
7798
+ const colorCellStyleFill = (stylePipe)=>(spec, context)=>{
7799
+ const result = stylePipe(spec, context);
7800
+ const { advancedVSeed } = context;
7801
+ const { datasetReshapeInfo } = advancedVSeed;
7802
+ const { unfoldInfo } = datasetReshapeInfo[0];
7803
+ if (isLinearColor(advancedVSeed)) {
7804
+ if (result?.cell?.style) result.cell.style.fill = {
7805
+ field: unfoldInfo.encodingColor,
7806
+ scale: 'color'
7807
+ };
7808
+ }
7809
+ return result;
7810
+ };
7811
+ const cellStyle = (spec)=>{
7812
+ const result = {
7813
+ ...spec,
7814
+ cell: {
7815
+ style: {}
7816
+ }
7817
+ };
7818
+ return {
7819
+ ...result,
7820
+ cell: {
7821
+ style: {
7822
+ shape: 'rect',
7823
+ stroke: '#ffffff',
7824
+ lineWidth: 1
7825
+ }
7826
+ }
7827
+ };
7828
+ };
7594
7829
  const initHeatmap = (spec, context)=>{
7595
7830
  const result = {
7596
7831
  ...spec
@@ -7605,13 +7840,6 @@ const initHeatmap = (spec, context)=>{
7605
7840
  result.seriesField = unfoldInfo.encodingColorId;
7606
7841
  result.valueField = foldInfo.measureValue;
7607
7842
  result.padding = 0;
7608
- result.cell = {
7609
- style: {
7610
- shape: 'rect',
7611
- stroke: '#ffffff',
7612
- lineWidth: 1
7613
- }
7614
- };
7615
7843
  result.axes = [
7616
7844
  {
7617
7845
  type: 'band',
@@ -7636,14 +7864,12 @@ const heatmap = [
7636
7864
  initHeatmap,
7637
7865
  background_backgroundColor,
7638
7866
  datasetXY,
7639
- color_color,
7867
+ colorAdapter(color_color, linearColor),
7640
7868
  label_label,
7641
7869
  labelColorInversion,
7642
- discreteLegend,
7870
+ colorAdapter(discreteLegend, colorLegend),
7871
+ colorCellStyleFill(cellStyle),
7643
7872
  tooltip_tooltip,
7644
- pointStyle_pointStyle,
7645
- pointStateDimensionHover,
7646
- lineStyle_lineStyle,
7647
7873
  annotationPoint_annotationPoint,
7648
7874
  annotationVerticalLine_annotationVerticalLine,
7649
7875
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7658,21 +7884,20 @@ const pivotHeatmap = [
7658
7884
  initHeatmap,
7659
7885
  background_backgroundColor,
7660
7886
  datasetXY,
7661
- color_color,
7887
+ colorAdapter(color_color, linearColor),
7662
7888
  label_label,
7663
7889
  labelColorInversion,
7664
7890
  discreteLegend,
7665
7891
  tooltip_tooltip,
7666
- pointStyle_pointStyle,
7667
- pointStateDimensionHover,
7668
- lineStyle_lineStyle,
7892
+ colorCellStyleFill(cellStyle),
7669
7893
  annotationPoint_annotationPoint,
7670
7894
  annotationVerticalLine_annotationVerticalLine,
7671
7895
  annotationHorizontalLine_annotationHorizontalLine,
7672
7896
  annotationArea_annotationArea
7673
7897
  ]),
7674
7898
  pivotRowDimensions,
7675
- pivotColumnDimensions
7899
+ pivotColumnDimensions,
7900
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7676
7901
  ];
7677
7902
  const heatmapSpecPipeline = [
7678
7903
  pivotAdapter_pivotAdapter(heatmap, pivotHeatmap)
@@ -8390,7 +8615,18 @@ const zDimension = external_zod_namespaceObject.z.object({
8390
8615
  'dimension',
8391
8616
  'rowDimension',
8392
8617
  'columnDimension'
8393
- ]).default('dimension')
8618
+ ]).default('dimension'),
8619
+ encoding: external_zod_namespaceObject.z["enum"]([
8620
+ 'xAxis',
8621
+ 'yAxis',
8622
+ 'angle',
8623
+ 'color',
8624
+ 'detail',
8625
+ 'tooltip',
8626
+ 'label',
8627
+ 'row',
8628
+ 'column'
8629
+ ]).optional()
8394
8630
  });
8395
8631
  const zDimensionGroup = external_zod_namespaceObject.z.object({
8396
8632
  id: external_zod_namespaceObject.z.string(),